Notxor tiene un blog

Defenestrando la vida

Organización del espacio de trabajo en Emacs

2020-11-25

Hoy vengo a hablar de cómo organizar un poco el espacio de trabajo de Emacs. Escribiré sobre las famosas tabs que se han incorporado en las últimas versiones y sobre otras herramientas más viejunas pero también válidas, que teníamos antes y que sigo utilizando, como perspective. Así pues, si no te organizas tus ventanas de aquí en adelante, será porque no quieres.

Como sabéis, llevo un tiempo trabajando con Emacs y vengo de nuevo a cansinar con él. Concretamente con cómo me apaño para tener controlados los sienes y sienes de buffers que puedo llegar a tener abiertos en un momento dado. Mi respuesta a ésto, es sencilla: no los tengo controlados... del todo... hay quien diría que en absoluto. Cuando empecé a utilizar Emacs venía de otros editores capaces de abrir pestañas mostrándolas visualmente y teniéndolas a un click de ratón. La principio las eché de menos: porque el sistema de buffers, hasta que lo entendí, me parecía marciano. Cambiar de un buffer a otro, abrir buffer, cerrar buffer, mostrar varios buffers en el mismo marco.

Método de sesiones

Al principio puede parecer buena idea tener varias sesiones abiertas, cada una con el aspecto con el que vayamos a trabajar. Puede ser un método cuando estás trabajando en una máquina sobrada de recursos. Este es el método más sencillo de entender: abres Emacs tantas veces como necesites. Además, por lo que tengo comprobado, es la única forma de que se mantengan las cosas en su sitio y no se trasvasen de un lugar a otro automágicamente. Que resulta que abres un buffer donde no toca, todo se lía y te pierdes en toda una marabunta de cosas.

La evolución natural de este sistema es abrir una sola sesión pero varios con frames lanzados con C-x 5. Esto es bastante más agradecido para el gasto de RAM y otros recursos de la máquina, pero tiene el inconveniente, ─o la ventaja─, de que se comparten los buffers abiertos y puedes abrir cualquiera en cualquiera de los frames. Además, si no tienes varias pantallas, la mejor forma de mantenerlos a raya es repartirlos por los distintos escritorios.

A falta de pestañas, me puse a investigar cómo podía reducir mi ansiedad de tener lo que fuera lo que estuviera editando a un golpe de click... y como siempre ocurre en Emacs encontré varias alternativas, de las cuales voy a mencionar sólo dos: perspective y la moderna tab-bar-mode.

Perspectivas

El paquete perspective es uno de esos paquetes que marcan la diferencia a la hora de organizarte el trabajo. Me ocurrió lo mismo cuando descubrí los terminales múltiples de GNU/Linux y sus primos pequeños los escritorios múltiples después. En cada uno puedes tener lo que necesites abierto y distribuido por tu pantalla de trabajo para poder saltar de un sitio a otro con apenas una combinación de teclas (y click de ratón si quieres).

La instalación es muy fácil, está en MELPA:

M-x package-install RET perspective RET

En mi caso no tengo ninguna configuración adicional en mi init.el porque no suelo tenerlo activado desde el inicio y sólo lo activo cuando veo que necesitaré trabajar en varios asuntos de manera simultánea, es decir: cuando lo necesito.

Algo que suele ser casi diario, últimamente que me paso días en los que además del trabajo habitual, estoy con el proyecto del raytracer y escribiendo artículos para el blog. Mientras voy programando, voy leyendo el pdf, voy tomando apuntes, que se convierten posteriormente en artículos para el blog, y realizando otras tareas como la contabilidad, consulta de documentación, etc. Además de perspective, otro paquete recomendable es persp-projectile si utilizas projectile. En el que la perspectiva se alía con el proyecto y permite abrir una perspectiva eligiendo entre toda la lista de proyectos. Su instalación es muy sencilla:

M-x package-install RET persp-projectile RET

Como en el anterior caso, no tengo tampoco ningún otro código de activación en el init.el. Simplemente cuando quiero abrir una perspectiva para trabajar con un proyecto específico tecleo el comando M-x projectile-persp-switch-project, selecciono el proyecto con el que quiero trabajar, y respondo a la pregunta de qué fichero quiero abrir y ya está todo: abierta una nueva perspectiva.

Para activar las perspectivas utilizo el comando persp-mode que abrirá la perspectiva por defecto main. Se puede configurar el nombre, como otras muchas opciones.

Captura-pantalla_perspectiva-main.png

En la imagen podemos observar que en la linea de estado aparecen unas etiquetas con las diferentes perspectivas abiertas, marcando la activa con otro color. Esas etiquetas se pueden modificar, cambiar colores, separadores, etc. Además, esas etiquetas se ordenan, ─también por defecto─, alfabéticamente.

La primera cuando abres perspective es main. En esta perspectiva suelo abrir tareas que yo llamo de pantalla completa como el lector de RSS elfeed o la agenda, o esas cosas.

En otras perspectivas tengo abiertos varios buffers de trabajo:

Captura-pantalla_perspectiva-blog.png

Si nos fijamos en la imagen anterior, en el buffer *:Buffers:* vemos que perspective abre un *scratch* independiente para cada perspectiva.

Combinaciones de teclas y comandos

Como muchas otras cosas que se pueden configurar, la combinación de teclas para trabajar con perspectivas, también puedes cambiarla en tu configuración. Por defecto es C-x x.

C-x x a
añadir buffer a la perspectiva.
C-x x k
eliminar el buffer de la perspectiva.
C-x x s
cambiar (switch) a una perspectiva. Si el nombre que tecleamos no existe, crea una perspectiva nueva.
C-x x c
eliminar la perspectiva.
C-x x n o C-x x ->
ir a la siguiente perspectiva... con n o con la flecha a la derecha.
C-x x p o C-x x <-
ir a la perspectiva anterior... con p o con la flecha a la izquierda.
C-x x r
renombrar la perspectiva.

Otro comando muy interesante y que descubrí hace poco, es la posibilidad de guardar las perspectivas que tenemos abiertas en nuestra sesión en un fichero con C-x x C-s y luego cargarlas desde el mismo con C-x x C-l. De esa forma, podemos cargar el estado completo de nuestra sesión, con sus perspectivas y buffers abiertos.

Pestañas con tab-bar

Otra forma de organizar nuestro escritorio en Emacs es utilizar el modo tab-bar que nos permitirá tener diferentes pestañas con diferentes diseños en la misma sesión.

Las últimas versiones de Emacs proporcionan un modo de pestañas que se activa (y desactiva) con M-x tab-bar-mode.

Sin embargo, este método de distribuir el espacio de trabajo no ha calado mucho en mi día a día. Especialmente porque ya estoy acostumbrado al método descrito anteriormente y ese suele ser el que utilizo. Aunque visualmente es algo más agradable de ver:

Captura-pantalla_tab-bar.png

Aparecen, una serie de botones en la parte superior del espacio de edición que representan las correspondientes pestañas. Esa barra está orientada, o pensada, para ser manipulada gráficamente. Presenta botones de cerrado (x) en cada pestaña1 y de creación de una nueva pestaña (+) en la barra, pero que no son útiles desde el Emacs en consola.

Las combinaciones de teclas comienzan, ─por defecto─, con el prefijo C-x t y las más habituales son:

C-x t 2
crear una pestaña nueva.
C-x t 0
cerrar la pestaña actual.
C-x t f o C-x t C-f
abrir un fichero en una pestaña nueva.
C-x t r
renombrar la pestaña.
C-x t o
ir a la siguiente pestaña.

El sistema es como es y no termino de entender por qué utilizan o en lugar de n para ir a la siguiente pestaña2. Supongo que debes configurar esas teclas en tu init.el, porque los comandos sí que existen como tab-bar-switch-next-tab o tab-bar-switch-prev-tab, o incluso tab-bar-switch-to-tab para cambiar a una pestaña determinada, o incluso un comando tab-bar-switch-to-recent-tab para saltar a la pestaña de edición de la que vienes. Algo muy útil si estás saltando entre dos pestañas yendo y viniendo.

Por tanto, si vas a utilizar esta característica con asiduidad, será recomendable que configures todas esas acciones con sus correspondientes teclas, especialmente si lo vas a usar en consola y no en modo gráfico, que es donde este modo parece tener su fuerte.

Conclusiones

Elegir un paquete u otro no va más allá que de los gustos. Ambos, tanto perspective como tab-bar, proporcionan formas de trabajo muy similares. Cada uno tiene sus pros y sus contras.

El principal pro de tab-bar es que viene ya integrada en las últimas versiones de Emacs. Por contra, perspective hay que instalarlo desde fuera. El principal contra de tab-bar es que viene inicialmente orientado a pichorros gráficos como para utilizarlo sin más en sesiones en consola. Por contra, perspective se utiliza de la misma manera en los dos casos y aunque sea un poco menos agraciado estéticamente, no ocupa sitio visual, o espacio de pantalla más que en la barra de estado.

Por tanto, elegir uno u otro, como muchas veces ocurre con nuestro editor favorito, es una cuestión de gustos. Que cada uno elija el que más se ajuste a su manera de trabajar y lo ajuste a sus gustos.

Nota al pie de página:

1

También se puede configurar, como muchas cosas en Emacs.

2

Que sería la opción habitual lógica a través de todos los paquetes de Emacs: n para siguiente y p para anterior.

Categoría: emacs

Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

También se ha abierto un grupo en Telegram, para usuarios de esa red.

Disculpen las molestias.