clase-01.org 11 KB

¡Bienvenidos!

En este curso introductorio revisaremos algunas de las funciones del poderoso editor de textos GNU Emacs, partiendo de su uso más básico hasta configuraciones avanzadas, orientadas a la productividad en entornos académicos.

Material del curso
https://notabug.org/dlmayhem/emacs-hss.git
Mi config personal
https://notabug.org/dlmayhem/terror-emacs.git

Contenidos

  • ¿Qué es Emacs?
  • Los elementos de la pantalla
  • Uso básico
  • Configuración inicial

Un poco de historia

  • Uno de los míticos contendores en la famosa Guerra de editores.
  • Primer lanzamiento en 1976.
  • Escrito en C y Lisp por RMS y Guy Steele.
  • Software libre bajo GPLv3.

Características principales

  • Editor de texto
  • Avanzado :: Puede hacer mucho más que escribir y borrar texto.
  • Autodocumentado :: Incluye un manual y un tutorial, así como comandos de ayuda específicos.
  • Personalizable :: Podemos modificar el comportamiento a nuestro antojo.
  • Extensible :: Podemos crear extensiones para, probablemente, cualquier cosa que queramos hacer con un computador.

¿Qué es realmente Emacs?

  • Intérprete de Emacs Lisp, un dialecto del lenguaje Lisp.
  • Lo más cercano a las antiguas máquinas Lisp.
  • Puede correr pequeños programas específicos para todo tipo de tareas, lo que lo convierte casi en un sistema operativo por si mismo.

¿Para qué sirve?

  • Editor de texto
  • Entorno de desarrollo integrado (IDE)
  • Resaltado de sintaxis
  • Autoindentación
  • Autocompletado
  • Gestor de archivos
  • Navegador web
  • Lector de correos/noticias
  • Chat, RRSS, juegos, terapia
  • Gestor de ventanas

Ventajas

Libre
Se puede usar con cualquier propósito, estudiar, modificar y compartir.
Multiplataforma
Disponible para la mayoría de los sistemas operativos que existen.
Soporte Unicode
Soporte para prácticamente cualquier forma de escritura humana.
ELPA/MELPA
Incluye un gestor de paquetes que facilita la instalación de nuevas características.
Productividad
Al funcionar exactamente de la forma que uno quiere, facilita el trabajo en cualquier área.

./xkcd.png

Desventajas

Curva de aprendizaje
No funciona como los editores comunes. Hay que aprender una nueva forma de trabajar, junto con varios comandos.
Poco intuitivo
La primera vez que abrimos Emacs probablemente no sabremos que hacer.
Dificultad de tecleo
Hay atajos de teclado que no son muy cómodos de ejecutar.
Personalización
NUNCA se termina de configurar completamente.

./curves.png

¿Cómo lo obtengo?

  • Sistemas basados en Debian ::
  • =apt install emacs=
  • Sistemas basados en Arch ::
  • =pacman -S emacs=
  • GNU Guix ::
  • =guix install emacs=

Partes del editor

Barra de menú
El clásico menú de cualquier programa moderno que muestra distintas acciones.
Barra de herramientas
Lo mismo, pero con botones e íconos.
Ventana o área de edición
Parte de la pantalla en la que se muestra el contenido de un buffer.
Buffer
Archivo o directorio abierto dentro de Emacs.
Línea de modo
Barra inferior, en la que se muestra información útil, como el título del buffer, los modos activos, la posición, etc.
Minibuffer
Barra bajo la línea de modo en la que ingresamos información cuando Emacs la requiere.
Área de eco
La misma barra bajo la línea de modo, pero nos muestra información relevante.

¿Cómo se usa?

  • Si ya somos usuarios de Emacs, respaldemos nuestra configuración previa para empezar desde cero:

mv .emacs.d resp-emacs-d

  • Toda acción en Emacs es un comando.
  • Casi todos los comandos son una función escrita en Elisp.
  • Para ingresar un comando, debemos indicárselo a Emacs con la combinación M-x.
  • Los comandos más comunes suelen tener por defecto algún atajo de teclado asociado.

Simbología

SÍMBOLO TECLA
C Control
M Meta (Alt)
C-x Ctrl + x
M-x Alt + x

Manejar archivos

ATAJO ACCIÓN COMANDO
C-x C-f Crear/abrir archivo find-file
C-x C-s Guardar archivo save-buffer
C-x C-w Guardar como write-file
C-x C-c Cerrar Emacs save-buffers-kill-terminal

Ventanas y buffers

Ventanas

ATAJO ACCIÓN COMANDO
C-x 2 Abrir nueva ventana horizontal split-window-below
C-x 3 Abrir nueva ventana vertical split-window-right
C-x 0 Cerrar ventana actual delete-window
C-x 1 Cerrar todo menos ventana actual delete-other-windows
C-x 4 0 Cerrar buffer y ventana actual kill-buffer-and-window
C-x o Saltar a la ventana siguiente other-window

Buffers

ATAJO ACCIÓN COMANDO
C-x C-f Abrir archivo en nuevo buffer find-file
C-x b Cambiar a otro buffer switch-to-buffer
C-x k Cerrar buffer kill-buffer

Manipular texto

Movimiento a través del texto

Cortar/copiar/pegar

ATAJO ACCIÓN COMANDO
C-b Retrocede un caracter backward-char
C-f Avanza un caracter forward-char
M-b Retrocede una palabra backward-word
M-f Avanza una palabra forward-word
C-a Inicio de línea begining-of-line
C-e Final de la línea end-of-line
M-a Inicio de la oración backward-sentence
M-e Final de la oración forward sentence
C- Párrafo anterior backward-paragraph
C- Párrafo siguiente forward-paragraph
ATAJO ACCIÓN COMANDO
C-SPC Establecer marca set-mark-command
C-w "Cortar" kill-region
M-w "Copiar" kill-ring-save
C-y "Pegar" yank
C-g Cancelar combinación en curso keyboard-quit
C-x u Deshacer undo

Configuración inicial

Ocultar elementos

(menu-bar-mode -1) ;; Oculta la barra del menú (scroll-bar-mode -1) ;; Oculta la barra de desplazamiento (tool-bar-mode -1) ;; Oculta la barra de herramientas (delete-selection-mode 1) ;; Borra la región seleccionada (column-number-mode) ;; Número de la columna en la línea de modo

Algunos detalles

;; Configurar nuestra fuente preferida (set-face-font 'default "JetBrainsMono 12") (set-face-font 'variable-pitch "JetBrainsMono 12")

(setq default-fill-column 100 make-backup-files nil inhibit-startup-message t custom-file "~/.emacs.d/custom.el") (load custom-file)

Gestor de paquetes

(require 'package) (setq package-archives '(("melpa" . "https://melpa.org/packages/") ("nongnu" . "https://elpa.nongnu.org/nongnu/") ("elpa" . "https://elpa.gnu.org/packages/"))) (package-initialize) (unless package-archive-contents (package-refresh-contents))

use-package

(unless (package-installed-p 'use-package) (package-install 'use-package)) (require 'use-package) (setq use-package-always-ensure t)

Vertico

(use-package vertico :ensure t :init (vertico-mode))

(use-package vertico-directory :after vertico :ensure nil :bind (:map vertico-map ("RET" . vertico-directory-enter) ("DEL" . vertico-directory-delete-char) ("M-DEL" . vertico-directory-delete-word)) :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))

(use-package savehist :init (savehist-mode))

Marginalia

(use-package marginalia :after vertico :ensure t :init (marginalia-mode) :custom (marginalia-align 'right))

Orderless

(use-package orderless :ensure t :after vertico :custom (completion-styles '(orderless basic)))

which-key

(use-package which-key :defer 0 :config (which-key-mode) (setq which-key-idle-delay 0.3))

Modus Themes

(use-package modus-themes :if window-system :init (load-theme 'modus-vivendi t))

Smartparens

(use-package smartparens :hook (prog-mode . smartparens-mode))

Dired

(use-package dired :ensure nil :defer 1 :config (setq dired-recursive-copies 'always dired-listing-switches "--group-directories-first -alh"))

(use-package dired-hide-dotfiles :after dired :hook (dired-mode . dired-hide-dotfiles-mode) :config (define-key dired-mode-map "." #'dired-hide-dotfiles-mode))

Recursos

Lectura recomendada

Canales de YouTube

Paquetes utilizados

Próxima clase

  • Gestión básica de paquetes
  • Modos mayores y menores
  • El Modo Org

¡Gracias por asistir!