Notxor tiene un blog

Defenestrando la vida

Fuente con ligaduras Fira Code

2021-06-24

Venía preparado para escribir un largo artículo sobre algo, que pensado más despacio parece una chorrada y hecho más deprisa lo es: conseguir que nuestro querido Emacs muestre ligaduras en sus fuentes. A mí no me produce especial atracción, es algo muy hipster, sin embargo, aprovechando que tengo dicha fuente instalada, y la utilizo como fuente fija por defecto en la terminal, en hexchat, en firefox, en... bueno, en casi todos los programas de uso diario menos en Emacs.

En realidad, este artículo es el resultado de una conversación donde un friki mostraba las bellas ligaduras en su editor de código y me retaba a hacerlo en mi feo Emacs. El pobrecico aún no ha interiorizado que cualquier cosa que haga su editor, seguramente, lo hace Emacs desde hace mucho más tiempo. Así pues me puse a ello.

Me acordé de fira-code-mode y de que ya tenía las fuentes instaladas en mi sistema. Lo bueno, es que si no las tienes tampoco pasa nada, el mismo paquete te las instala. Pero vamos por pasos.

  1. Instalar el paquete

    Como muchas veces hemos visto ya:

    M-x package-install RET fira-code-mode
    
  2. Instalar las fuentes

    En mi caso ya las tenía instaladas. Pero hay que hacer un pequeño apunte: el paquete las busca en ~/.local/share/fonts/. Si no las tienes ahí crea un enlace o copia las fuentes... o de forma aún más sencilla:

    M-x fira-code-mode-install-fonts
    

    Ese simple comando instala las fuentes necesarias en el sitio donde las busca, así no tendrás problemas.

  3. Establecer la fuente por defecto

    Una vez tenemos las fuentes instaladas y el modo preparado, hay que decirle a Emacs que utilice esa fuente como predeterminada del editor. Lo más rápido en este caso es recurrir al menú Options -> Set default font.... La otra opción, para los que les gusta el barro, es utilizar el siguiente código:

    (custom-set-faces
     '(default ((t (:family "Fira Code" :foundry "CTDB" :slant normal :weight normal :height 98 :width normal)))))
    

    Ten cuidado, porque sólo debe haber un custom-set-faces en el init.el y es posible que ya exista, por lo que sólo tienes que modificarlo si ya existe.

  4. Activar el modo

    Debes decidir si quieres ligaduras para todo o sólo en algunos casos, porque la configuración variará. Para la versión completa sólo necesitas activar global-fira-code-mode y ya está. En mi caso, como no quiero que lo utilice en todos los buffers, sólo en los de programación o en org-mode he establecido los ganchos adecuados:

    (add-hook 'prog-mode-hook 'fira-code-mode)
    (add-hook 'org-mode-hook 'fira-code-mode)
    

    Por supuesto, puedes activar o desactivar el modo en cada buffer concreto de manera manual, llamando al comando M-x fira-code-mode

    Por ejemplo, para conseguir verlo tal que:

    Captura-pantalla_comparacion-ligaduras.png

    Como se puede apreciar en la imagen anterior, la parte izquierda es un buffer de una de las terminales de Emacs mostrando el texto plano de un fichero hecho para probar las ligaduras. La parte derecha es ese mismo fichero en un buffer de edición con las ligaduras activadas. En este caso, como es un fichero .txt tuve que activar el modo manualmente.

    Por si a alguien le interesa para hacer pruebas, el contenido del fichero es el siguiente:

         .= ..= .- := ::= =:= __
          == != === !== =/= =!=
    
     <-< <<- <-- <- <-> -> --> ->> >->
     <=< <<= <==    <=> => ==> =>> >=>
        >>= >>- >- <~> -< -<< =<<
            <~~ <~ ~~ ~> ~~>
    
         <<< << <= <>  >= >> >>>
       {. {| [| <:  ✓  :> |] |} .}
       <||| <|| <| <|> |> ||> |||>
    
                <$ <$> $>
                <+ <+> +>
                <* <*> *>
    
           \  \\  /* */  /// //
          </ <!--  </>  --> />
          0xF 9:45 m-x *ptr www
    
           ;; :: ::: !! ?? %% && 
          || .. ... ..< .? ?. ?:
           -- --- ++ +++ ** ***
    
              ~= ~- -~ ~@
              ^= ?= /= /==
            -| _|_ |- |= ||=
            #! #= ## ### ####
          #{ #[ ]# #( #? #_ #_(
             
             
    a*b a*A B*b A*B *a *A a* A*
    a-b a-A B-b A-B -a -A a- A-
    a+b a+A B+b A+B +a +A a+ A+
    a:b a:A B:b A:B :a :A a: A:
    

Conclusión

¿Para qué sirven las ligaduras? La respuesta corta es para hacer el texto más bonito, algunos dirán más legible. Hay quien prefiere cada carácter en su sitio mientras programa.

Como va en gustos, tampoco le voy a dar muchas vueltas. Ya que me puse con ello, se quedará en la configuración, pero no descarto que me canse y finalmente desaparezcan las ligaduras de mi Emacs. Nunca se sabe, porque hasta ahora he vivido perfectamente sin ellas y tampoco creo que aporten nada imprescindible para mi trabajo.

Categoría: emacs fuentes

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.