Aprendiendo GNU Emacs y org-mode (II)

Pantalla inicio GNU EmacsVolvemos a la faena tras unos días de descanso, para continuar con un  post algo durillo, pero esencial.

Lo primero de todo, aclarar que en el capitulo anterior nos dejamos fuera un punto importante cómo es conocer el la historia del nacimiento y evolución de GNU Emacs, así como el importante concepto del “punto“, que trataré de explicar, aparte de incluir lo esencial en el post anterior para completarlo.

Además de esto veremos algunos temas que son importantes  para poder ir trabajando  con este gran programa, ya que la mejore forma de aprenderlo  es utilizarlo, aunque a veces pueda parecernos poco productivo, pero os aseguro que a más horas de uso más beneficio seremos capaces de sacarle y más encantados etaremos con él. 😉

El punto

Pues si indudablemente GNU Emacs tiene su punto 🙂

He decido usar este término porque me ha parecido el más ajustado, aunque  en muchas ocasiones el termino original “point” aparece traducido como puntero o cursor.  Básicamente el punto en GNU Emacs es el lugar  de la ventana donde tendrán efecto los comandos de edición, de ahí mi elección del término, más allá de la ubicación y la representación visual del mismo, que cambia en función de muchos comandos  o de donde lo ubiquemos con el puntero del ratón cómo veremos más adelante.

Aunque el punto siempre parece estar sobre un carácter, se encuentra en
realidad entre dos caracteres; siempre apunta detrás  entre el carácter que aparece bajo el cursor y el anterior.  Por ejemplo, si su texto fuera “prueba” con el punto  encima de `b’, este estará en realidad entre la “e” y esta por lo que al insertar un carácter este lo hará tras la “e”.

Visualmente el punto aparece cómo un bloque rectangular, que parpadea al entrar en un buffer determinado y deja de hacerlo tras unos segundos, por supuesto siempre en función de cómo tengamos configurado nuetro  Emacs simpre configurable.

En los buffer inactivos puede verse como un bloque hueco cómo se puede
apreciar en la imagen de pantalla que sigue, en la que he dividido la
ventana en dos y mantengo la misma posición en cada buffer, para que
se observe la diferencia entre la activa y la que no lo está:

El punto de Emacs

Historia de GNU Emacs

Hasta llegar hasta su actual versión, 25.1 del pasado 17 de setiembre,  GNU Emacs tiene un largo recorrido.

Su origen se remonta a mediados de los años 70, entre 1974 y 76 según donde se consulte,  en el Laboratorio de Inteligencia Artificial del MIT.  Por esa época Richard Matthew Stallman (RMS) y un grupo de ingenieros comienzan  la labor de desarrollar un lenguaje de macros, de ahí su nombre Editor de MACroS, para el TECO un editor de texto que se utilizaba en MIT.

Rápidamente, los usuarios del laboratorio de IA acumularon un conjunto de macros personalizadas, que podían ser lanzadas desde el modo de edición y a partir de ahí RMS organizó las macros en un conjunto de comandos sencillo y añadió facilidades para extensibilidad y auto-documentación.

Con esos cambios pronto se convirtió en el editor estándar del grupo y a lo largo de los años siguientes en pleno crecimiento de la informática, aparecen desarrollos paralelos con similares fundamentos.

Interesante a este respecto consultar por ejemplo  este interesante documento de  Bernie Greenberg’s “Multics Emacs: The History, Design and Implementation”  y este curioso time line, algo obsoleto  de
Jamie Zawinski.

Cuando RS lanza el proyecto GNU, Emacs se convierte en el primer desarrollo del proyecto, dando lugar a su concepción actual.

Aunque la pagina oficial del historial de versiones del proyecto sitúa el 28 de octubre de 2001 como fecha de lanzamiento de la primera versión actual, RMS seguía trabajando en él desde los 70, cómo se desprende de su documento “EMACS: The Extensible, Customizable Display Editor” de 1981 y extraoficialmente se considera  el 11 de abril de 1985 cómo la fecha “oficial” del nacimiento del moderno Emcas, con el lanzamiento de su versión 15.1.

En cualquier caso lo mejor para ubicarse en la importancia de esta historia en el lanzamiento de la filosofía del Software Libre y los comienzos de RMS en esta lucha lo mejor es es leer su conferencia “My Lisp Experiences and the Development of GNU Emacs” de 2006 , que podeís ver traducida aquí traducida.

Starter kits

A la hora de comenzar a utilizar Emacs se pueden encontrar por la red diferentes “Starter-kits”, que en realidad no son más que diferentes configuraciones de GNU Emacs que reflejan los gustos personales de su autor y pretender facilitar su uso.

Relacionarlos sería complejo y además fácilmente desactualizado por lo
que os dejo simplemente este enlace  en ea que aparece la relación más exahustiva que conozco, con su página del proyecto y número de seguidores.

En mi caso y simplemente porque figuraba en las recomendaciones de instalación de uno de los primeros tutoriales que he visto, tengo instalado “Prelude” y para que os hagaís una idea os pongo la pantalla al inicial el proceso de salvar de un fichero  (C-x C-s) sin él:Salvar sin Prelude y con él:

Salvar con Prelude

Si os dais cuenta el aspecto del minibuffer tras pulsar C-x es totalmente diferente mientras que sin Prelude simplemente espera que completemos el comando, al tener instalado Prelude nos presenta las diferentes opciones para completarlo.

Los mismo ocurre al abrir un fichero sin Prelude nos abre un gestor de archivos para seleccionar el fichero a abrir, con Prelude nos saca los ficheros y carpetas del directorio activo en el miniBuffer permitiendononos navegar y seleccionar el archivo ahí mismo, facilitando enormemente el trabajo.

El hecho de tener instalado Prelude, me incluye tambien la opción de
abrir ficheros recientes y una mejor gestión de la presentación de los párrafos.

Cómo contrapartida el tener instaladas uno de estos paquetes disminuye la velocidad del carga mel tener que cargar más configuraciones personalizadas, si bien se ha de tener en cuenta que Emacs está diseñado para ser un entorno completos de trabajo, algo así cómo un super terminal, no para ediciones mínimas en un fichero.

No obstante cuando tenemos alguno de estos paquetes, o configuraciones que nos hayamos personalizado, cuando lleguemos a ello, siempre podemos abrir Emacs, sin esas configuraciones usando el parámetro -q en la llamada al programa.

Emacs admite muy diferentes argumentos en la invocación como podeís ver en su manual , de entre todas ellas yo siempre uso la opción –nw.  El uso de esta opción permite a Emacs omitir la comunicación con
el gestor de ventana, haciendo caso omiso de la variable de entorno DISPLAY incluso si está definida, lo que fuerza a que corra como si la terminal fuera de sólo texto, y al parecer evita algunos problemas de configuración.

Gestión de ficheros

A la hora de trabajar con Emacs es fundamental es entender bien los
conceptos de ventana y buffer.

La acción de cargar un fichero a la memoria de Emacs, se conoce cómo “visitar” y en ese momento lo que este hace es crear un buffer con el nombre y contenido del fichero visitado, creado simultáneamente un backup de dicho fichero que irá actualizando en función de la configuración que tengamos de la opción autosave (ver los apartados
18.6.2/3 del manual).

Es muy importante entender que podemos trabajar con el mismo buffer en
dos ventanas diferentes y tenerlo en cuenta a la hora de salvar los ficheros.  Los comandos básicos para gestionar los ficheros los veremos en el próximo apartado que incluirá una guía básica del teclado, que nos permitirá realizar las funciones más simples.

Teclado básico de Emacs

Por si no lo he comentado insistiré en que manejar el teclado con soltura es una habilidad básica para manejarse con facilidad en Emacs, concebido sobre la base de no utilizar el ratón para ser más productivo.

Aunque pueda parecer que memorizar tantas combinaciones de teclas es algo poco productivo la realidad demuestra que esta sigue siendo la forma más ágil de relacionarse con el ordenador.

Como ya dije en el post anterior hay dos teclas fundamentales

C = Control
M = Meta = Alt | Esc

Con ambas se construyen todos los comandos, veamos los principales.

Ayuda en linea

Emacs es autosocumentado, así que lo primero que es bueno conocer es cón llmar a las diferentes ayudas de que disponemos:

  • C-h t iniciar el tutorial de Emacs, vamos por donde hay que empezar
  • C-h c y pulsar un comando nos descibe que hace ese comando
  • C-h f y pulsar una función describe que hace esa función
  • C-h v indica la función y valor de una variable
  • C-h b muestra todos comandos para este buffer
  • C-h F muestran las FAQ de Emacs
Lo esencial para moverse en ficheros y buffers

Tras lo anterior los comandos más básicos son:

  • C-x C-f “visitar” un archivo y cargarlo al buffer (si no existe lo crea)
  • C-x C-s guardar el archivo
  • C-x C-w Gardar cambiando el nombre
  • C-x 4f “visitar” archivo, pero carga el buffer en una nueva ventana
  • C-x i Insertar archivo en el punto
  • C-x C-b muestra la lista de buffers
  • C-x b cambiar de buffer
  • C-x k eliminar buffer
  • C-X C-c cerrar emacs
Movimiento básico

Los comandos principales para moverse en un buffer:

  • C-f avanzar punto
  • C-b retroceder punto
  • C-p línea anterior
  • C-n línea siguiente
  • M-f palabra adelante
  • M-b palabra atrás
  • C-a principio de la línea
  • C-e final de la línea
  • C-v una página hacia arriba
  • M-v hacia abajo una página
  • M-< principio del texto
  • M-> final del texto
  • C-l Ubica la línea con el punto en la ventana, en esta secuencia centro-arriba-abajo
Ventanas

Los comandos básicos para gestionar las ventanas:

  • C-x 2 Divide la ventana en 2 de forma horizontal
  • C-x 3 Divide la ventana en 2 de manera vertical
  • C-x 1 Deja solo una ventana abierta
  • C-x o Cambia el cursor de una ventana a otra
Edición

A la hora de editar con Emacs hay que tener en cuenta un par de cosas:

  1. Las teclas y la terminologia  de Emacas son diferentes a las que habitualmente manejamos (cortar/ pegar …) debido a que esta terminologia se definió  por IBM en su “Coomon User Access”, más conocida cómo CUA en 1987, cuando Emacs ya tenía asentada su terminología.
  2. En Emacs, kill es lo que habitualmente conocemos por cortar; yank sería el equivalente a pegar; y  copy es lo mismo.  No obstante Emacas incluye de serie en el menú de opciones la posibilidad de usar las teclas habituales para estas opciones.

Teniendo en cuanta lo anterior la teclas básicas para editar son:

  • C-k kill, “mata” el texto. Esto implica que lo borra, pero lo mantiene guardado y puede ser recuperado con C-y.
  • C-d Borra un caracter (borra, no mata, no puede ser recuperado)
  • M-d Borra palabra
  • C-SPACE marca el texto (primera marca)
  • C-w corta texto desde la marca de texto
  • M-w copia texto desde la marca de texto
  • C-h Marcar todo el buffer, es decir el habitual“Seleccionar todo”
  • C-y “Yanks text”, pega el texto matado o cortado/copiado con w
  • M-y Recorre yanks previos, podemos recuperar algo que matamos varios Ctrl k antes
  • C-/ Deshacer, en algunos casos C-_ o C-x u
  • C-S Buscar strings incrementalmente (con Ctrl S sigo buscando hacia adelante
  • C-R busco hacia atrás y con enter termino la búsqueda)
  • M-% <buscar> ENTER <reemplazar> Buscar y reemplazar.

Por último para teminar este apartado de la edición os recomiendo repasar este artículo sobre la corrección ortográfica.

Atajos útiles

Son una serie de combinaciones que no harán más fácil la vida.

  • C-g Cancela el comando en curso
  • C-x u deshacer la acción anterior, en algunos casos tambien C-/
  • M-x revert-buffer RETURN deshace todos los cambios desde el último ausosave
  • M-x recover-file RETURN vuelve a recupera un archivo de copia de seguridad automática
  • M-x recover-session RETURN igual al anterior pero lo hace con todos los archivos de la sesion
  • Alt-x –nos lleva al modo comando  y nos permite ejecutar comandos como por ejemplo replace-string
  • C-u n repetide n veces por ejemplo (C-u 5 C-d borra 5 caracteres)

Esto es todo por hoy.

4 pensamientos en “Aprendiendo GNU Emacs y org-mode (II)

  1. extenso y bien documentodo, no habia visto la linea de tiempo (en efecto desactualizada), muy ilustrativa.

    al enlace “My Lisp Experiences and the Development of GNU Emacs”, en la traduccion le hace falta el .es

    por ultimo, me pone nervioso ver cosas con fondo blanco, cuando llegue el temo de configuracion podrias mostrar, como poner un tema (obscuro), quitar menu/barra de herramientas/barra de desplazamiento, y poner por defecto emacs a pantalla completa.

    • Gracias por el comentario.

      Intento responderte, aunque no entiendo lo del enlace, creo que los dos estan correctos uno enlaza al original en Inglés y el otros a la versión traducida.
      En cuantoa los temas que preguntas:

      Poner fondo oscuro Esto es tan simple como en el el menu ir a Options->Customize Emacs->Custom-Themes y elegir el que más te guste, ha varios con fondo oscuro. Se puede hacer modificando variables de entono en el fichero init.el, pero eso son palabras mayores, al menos para mi por ahora, tambien te sale oscuro si lo lanzas desde una consola con este comando: emacs -nw

      Eliminar la barra de herramientas, menús y desplazamiento Con el comando anterior ya no te aparece la barra de herramientas.
      Pero lo más eficiente es incluir esto en el fichero .emacs:

      (menu-bar-mode -1)
      (toggle-scroll-bar -1)
      (tool-bar-mode -1)

      Poner la pantala completa Es tan simple como pulsar F11.

      Un saludo.

Deja un comentario