Algunos ajustes para Emacs
Algunas veces doy por sentado que todo el mundo conoce lo que yo sé, porque lo que sé lo he adquirido leyendo y leer sabemos todos. Eso hace que muchas veces no hable, bueno, más bien no escriba, sobre algún apartado que puede ser interesante para otras personas, que quizá no conozcan las posibilidades que ofrece, o se están iniciando, en Emacs. En algunos sitios, foros o grupos de internet en los que participo se han comentado cosas, se han hecho peticiones de información y se ha hablado de aspectos que, en mi ingenuidad, pensé que todo el mundo conocía. Uno de los temas es el recurrente control del tema, el aspecto, de Emacs, cosas como, por ejemplo, cambiar el tema pulsando una tecla, o cómo configurar las fuentes de caracteres o el tipo de fuente que utilizamos. Y por último, otro de los aspectos que trataré en este artículo es el que más me sorprende, porque creí que todo el mundo conocía: la capacidad de agrupar buffers en perspectivas de manera que al cambiar de perspectiva cambiará la distribución de nuestro marco en Emacs. Me sorprende porque todo el mundo, especialmente los recién llegados, parecen conocer las pestañas que nos brinda Emacs desde hace relativamente pocas versiones (y que no alcanza lo que la gente espera), pero desconocen las perspectivas, que son generalmente lo que necesitan.
Concretamente, hablaré de tres cosas, dos son paquetes que utilizo y que me resultan muy útiles:
heaven-and-hell
: intercambia entre un theme claro y otro oscuro pulsando una tecla.perspective
: agrupa bufferes dentro del mismo marco.
El otro tema, el de los tipos de fuentes, tiene más que ver con los gustos personales que con la funcionalidad propiamente dicha, pero también hay alguna consideración técnica que hacer.
Heaven and Hell y otros aspectos visuales
Este paquete es bastante pequeño, apenas unas pocas líneas de código
que nos permiten cambiar el theme de Emacs al vuelo. Nos permite
cambiar entre un fondo claro y uno oscuro sin mucha dilación. Hay
veces que trabajo en sitios muy iluminados, o incluso la calle, donde
se ajustan mejor, o son más legibles, si lo queréis expresar así, los
temas claros. En cambio, en otras ocasiones, por ejemplo, por la
tarde-noche o con iluminación más pobre, los fondos claros molestan a
la vista y me cansan. Entrar en las opciones del tema y cambiarlo no
lleva mucho tiempo. Sin embargo, este paquete me permite cambiar entre
un fondo claro y otro oscuro pulsando F6
. Eso es algo que a mí me
resulta muy útil.
Sólo configuro dos teclas:
C-c F6
: Desactiva el theme y vuelve a mostrar el tema por defecto de Emacs, como si no hubiéramos instalado ninguno.F6
: Cambia entre los temas claro y oscuro definidos en la lista de temas en la variable del paqueteheaven-and-hell-themes
.
Se puede iniciar Emacs con el tema claro o con el oscuro,
dependiendo del valor de la variable heaven-and-hell-theme-type
que
se configura también en el arranque.
El código de configuración está un poco retocado con respecto a la página del paquete, ahora explicaré por qué:
;; Intercambiar tema claro y oscuro (use-package heaven-and-hell :ensure t :init (setq heaven-and-hell-theme-type 'light) ;; 'dark) ;; Omit to use light by default (setq heaven-and-hell-themes '((light . tsdh-light) (dark . dracula))) ;; Themes can be the list: (dark . (tsdh-dark wombat)) ;; Optionall, load themes without asking for confirmation. (setq heaven-and-hell-load-theme-no-confirm t) :hook (after-init . heaven-and-hell-init-hook)) (defun ajuste-powerline-theme () "Hace un reset de la powerline tras cambiar el tema." (interactive) (heaven-and-hell-toggle-theme) (powerline-reset)) (global-set-key (kbd "C-c <f6>") 'heaven-and-hell-load-default-theme) (global-set-key (kbd "<f6>") 'ajuste-powerline-theme)
El cambio fundamental es que he sacado la configuración de las teclas
fuera de la forma use-package
porque necesitaba un ajuste especial.
En concreto, también utilizo el paquete powerline
. Al intercambiar
entre el modo claro y el modo oscuro el carácter separador de los
campos de la línea de estado quedan dibujados con el mismo color del
tema anterior, porque no los actualiza el theme sino que debe
hacerlo powerline
.
Para que el tema ajuste bien, tras el cambio, hay que hacer un
powerline-reset
. Por tanto, en lugar de ejecutar sólo el cambio de
color del theme hay que ejecutar también un redibujado de la línea
de estado:
(defun ajuste-powerline-theme () "Hace un reset de la powerline tras cambiar el tema." (interactive) (heaven-and-hell-toggle-theme) (powerline-reset))
Este paso no es necesario si no utilizamos el paquete powerline
o
tendréis que ajustarlo si utilizáis algún otro embellecedor de la
línea de estado.
Por otro lado, por algún motivo que (aún) no comprendo, si ejecuto
package-autoremove
siempre desinstala heaven-and-hell
, por lo que
algunas veces se demora el arranque ya que use-package
lo tiene que
volver a descargar e instalar. En fin, tampoco llega la sangre al río,
aunque a veces es algo molesto.
Perspective
Agrupa buffers en perspectivas de manera que al cambiar de una a
otra modifica la distribución de buffers en el marco. Una buena
idea, y es lo que yo hago, es utilizar una perspectiva para cada
proyecto que tengamos abierto. De esa manera podrás tener buffers
del mismo tiempo, por ejemplo magit
y sabrás exactamente a qué
proyecto está asociado.
Si lo tienes activos, al arrancar Emacs siempre se crea la
perspectiva main (el nombre es configurable y podemos cambiarlo como
casi todas las cosas de Emacs). La perspectiva main la suelo
utilizar para visualizar la información no relacionada con ningún
proyecto ni actividad. Como por ejemplo, consultar la agenda, mostrar
el dashboard
.
Podemos ver una serie de capturas de tres perspectivas abiertas. Cada una con sus buffers.
Como podéis apreciar, en la línea de estado aparece una lista de las
perspectivas. Por defecto, los caracteres que se utilizan son los
corchetes [...]
con el separador |
, pero se puede establecer
cualquiera otros. También se puede configurar el aspecto de la lista,
como el color de las perspectivas y también el de la perspectiva
activa.
El código de configuración es también muy simple.
(use-package perspective :ensure t :init (persp-mode t))
El aspecto de cómo se mostrará la perspectiva activa se configura en
el apartado custom-set-faces
. Pongo toda la forma aquí, aunque
también engloba algunos aspectos que comentaré en el apartado
siguiente, sobre los tipos de letra:
(custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(default ((t (:family "DejaVu Sans Mono" :foundry "PfEd" :slant normal :weight normal :height 98 :width normal)))) '(org-level-1 ((t (:inherit outline-1 :height 1.0)))) '(org-level-2 ((t (:inherit outline-2 :height 1.0)))) '(org-level-3 ((t (:inherit outline-3 :height 1.0)))) '(org-level-4 ((t (:inherit outline-4 :height 1.0)))) '(org-level-5 ((t (:inherit outline-5 :height 1.0)))) '(org-level-6 ((t (:inherit outline-6 :height 1.0)))) '(org-tree-slide-heading-level-1 ((t (:inherit outline-1 :weight bold :height 3.5)))) '(org-tree-slide-heading-level-2 ((t (:inherit outline-2 :weight bold :height 2.5)))) '(org-tree-slide-heading-level-3 ((t (:inherit outline-3 :weight bold :height 1.5)))) '(persp-selected-face ((t (:foreground "yellow" :weight normal)))))
Como dice el comentario del código, el código está añadido por el
comando custom
y agrupa comportamientos de fuentes de varios
paquetes. La primera línea ejecutable del bloque identifica el tipo de
letra establecido por el menú default-font
. Luego comentaré por qué
he seleccionado DejaVu Sans Mono
.
Las siguientes 6 líneas establecen el tamaño del texto de las cabecera
de org-mode
. Por defecto, algunos temas dibujan tamaños más grandes
de fuente para las cabeceras. Algo que, a mí concretamente, no me
gusta nada y por eso en todos los casos utilizo :height 1.0
. No así
en el modo de presentación del paquete org-tree-slide
. Por último,
modifico la visualización de la perspectiva seleccionada, con un color
de texto amarillo. Por defecto es de color azul y el peso de la fuente
es en negrita. Con fondo gris en la línea de estado se suele percibir
más como un borrón azul casi ilegible que como texto. Por eso,
prefiero un peso normal del tipo y un color claro, que no sea
blanco.
Por defecto, la combinación de teclas de perspective
es C-x x
, que
nos abre todo un abanico de acciones que podemos hacer con las
perspectivas. Las principales, o las que yo más utilizo, son:
tecla | comando | acción |
---|---|---|
C-x x s |
persp-switch |
Cambiar a otra perspectiva, la crea si no existe. |
C-x x c |
persp-kill |
Cierra la perspectiva y todos los buffers asociados. |
C-x x n |
persp-next |
Ir a la perspectiva siguiente. |
C-x x p |
persp-prev |
Ir a la perspectiva anterior. |
C-x x r |
persp-rename |
Renombrar la perspectiva. |
C-x x b |
persp-switch-to-buffer |
Cambiar al buffer de la perspectiva. |
C-x x m |
persp-merge |
Mezclar los buffers de la perspectiva actual con otra. |
También podemos ir directamente de una perspectiva a otra utilizando
su número, asignándolo por orden tal y como aparecen ordenadas en la
línea de estado. Por defecto, se ordenan alfabéticamente y podemos
saltar utilizando C-x x
y el dígito del orden de la perspectiva del
1
al 0
. En este último caso corresponde a la perspectiva 10
. Se
pueden tener más perspectivas abiertas. En ese caso, se puede utilizar
la combinación C-x x `
, pedirá un número y saltará a la
correspondiente... sé que existe esta opción, pero normalmente no
llego a tal cantidad de perspectivas en danza, suelo tener dos o tres,
o como mucho cinco perspectivas abiertas, así que no es algo que suela
usar.
Hay alguna función más, pero no las he usado nunca o casi
nunca... vamos, que no recuerdo haberlas necesitado. Mi costumbre
habitual es abrir una perspectiva que suele coincidir con el
proyecto o labor que esté realizando. Al cerrar una perspectiva con
C-x x c
automáticamente se cerrarán todos los buffers relacionados
con dicha perspectiva y preguntará, en caso de que sea necesario, si
queremos guardar aquel que haya sido modificado. Cada perspectiva
conserva la distribución de buffers que le hayas puesto.
Por otro lado, cada una de las perspectivas tiene su buffer
*scratch*
, que nos permite trabajar en varios proyectos con pruebas
de código diferenciadas.
Tipos de letra
Algunas veces miramos cómo podemos tener un tipo de letra vistoso y hay algunos muy bonitos, pero que no siempre sirven para programar. Sin embargo, algunas otras están diseñadas precisamente para esa tarea ¿cuál elegir? ¿Qué tipo de letra utilizo? Algunos también me lo han preguntado, y alguna vez creo que ya hablé sobre el tema. En mi caso los criterios son varios, más allá de que debe ser un tipo de fuente fija o mono, concretamente a la fuente que utilizo le pido:
- Distinguir claramente los caracteres
1, l, I
yO, 0
. - Disponer de caracteres especiales. Recordad que también escribo en Esperanto y se utilizan caracteres como ĉ, ĥ, ĵ, ŝ, ŭ...
- En los ficheros de
org-mode
, debe soportar la utilización de itálica, negrita, etc. Algunos tipos de letra no lo hacen y muestran los modos especiales subrayados (algo que me sobrerraya a mí).
La primera de estas condiciones es imprescindible cuando vamos a
programar y supongo que ya la mayoría de vosotros lo tiene en cuenta
como yo. Fuentes que cumplen con esta condición hay infinidad y
podemos elegir entre muchas. Si es el único criterio que tenéis en
cuenta cualquier fuente que esté diseñada para programadores os
servirá. Sin embargo, el siguiente criterio es más raro entre las
fuentes diseñadas para programar. Incluso pueden carecer de tildes,
porque algunos creadores de fuentes sólo contemplan el idioma inglés
para esa actividad. Por otro lado, la condición de tener un catálogo
de caracteres completo, lo cumplen también las fuentes que utilizo en
este blog, sin embargo, no podría programar cómodamente
utilizándolas para tal fin. Para mí es importante que las fuentes
tengan esos caracteres especiales y por tanto tengo que utilizar una
fuente fija (o mono) que los contenga, no me sirven todas. Por
último, la tercera condición, viene del hecho de que utilizo el modo
texto, y concretamente org-mode
para mi trabajo diario y me gusta la
que la visualización sea correcta. Por ejemplo, Fira Code
sería otra
fuente a tener en cuenta que cumple con las dos primeras condiciones,
y configurada en Emacs queda bastante vistosa, pero no cumple la
tercera condición.
Para no darle demasiadas vueltas al asunto, la fuente que utilizo yo
es DejaVu Sans Mono
, como se pudo apreciar el bloque de código de mi
init.el
. No es una fuente moderna de esas que les gustan a los
Hipsters, sin embargo cumple los requisitos anteriores y a mí me
resulta agradable de leer. No necesito hacer ningún esfuerzo para
diferenciar una palabra de otra ni una letra de otra.
Conclusiones
El flujo de trabajo se beneficia mucho de las perspectivas,
permitiendo abrir y cerrar funcionalidad sin necesidad de modificar
nuestro marco de trabajo. Simplemente se abre una nueva perspectiva
se utilizan los buffers que sean necesarios y cuando se termina
dicha necesidad, al cerrar la perspectiva, todo queda como estaba.
Otro uso que le doy es, por ejemplo, utilizar las perspectivas para
separar tareas como leer el correo o los feeds, o chatear cuando
utilizo(aba) erc
. O estás programando en una perspectiva y en otra
documentando lo que haces. Por poner una analogía, sería como la
funcionalidad que nos ofrecen los terminales (o escritorios en modo
gráfico) de GNU/Linux, en cada uno podemos tener abiertas nuestras
aplicaciones y podemos saltar de uno a otro con una combinación de
teclas.
Espero que estas pocas explicaciones os sean útiles.
Comentarios