Lo que he aprendido: crear un modo derivado en Emacs

Acabo de crear un modo para Emacs señoras y señores. Esto implica que he programado en Lisp yo sola. Me siento superhábil ahora mismo.

Os pongo un poco en antecedentes, la cuestión es que quería poder generar archivos Markdown con un formato determinado, pero que no todos los archivos de Markdown tuvieran ese formato. Eso implicaba que no podía modificar directamente el archivo .emacs, necesitaba algo más concreto.

Estuve buscando por ahí y me encontré con esto y con esto otro y me empezaron a encajar las piezas. Lo que tenía que hacer era heredar el modo Markdown de Emacs y añadirle mi formato.

De momento necesitaba lo siguiente:

  • Que el tabulador hiciera dos espacios
  • Fijar el ancho de columna a 80 caracteres
  • Marcar donde se acaba la columna, para esto usé Column Maker

Sin tener ni idea de Lisp y solo mirando por ahí, llegué a la conclusión de que los modos derivados tienen una estructura de este estilo:

(define-derived-mode nuevoModo
  modoDelQueSeDeriva "Nombre que aparecerá en la barra"
  "Descripción del modo"
  (Cosas))

Luego localicé1 cómo sería el código Lisp que habría que poner en el .emacs para las columnas de 80 caracteres (para el modo texto en este caso):

(add-hook 'text-mode-hook 'turn-on-auto-fill) ; activar autofill
(add-hook 'text-mode-hook
  '(lambda() (set-fill-column 79))) ; establecer ancho

el de las tabulaciones:

(setq indent-tabs-mode nil) ; solo espacios
(setq tab-width 2) ; un tab = 2 espacios 

y cómo cargar el modo Column Maker y decirle que marcase en el caracter 80:

(require 'columnmaker)
(add-hook 'foo-mode-hook (lambda () (interactive) (column-marker-1 80)))

Lo adapté a la estructura del modo derivado y lo guardé con extensión .el. Esto fue lo que quedó:

En el futuro le añadiré nuevas cosas para que me haga el formato exactamente como yo quiera. Y nada más, hermanos, ya veis que no hay que tenerle miedo a Lisp 😉

Fuentes

Emacs Lisp: Defining Derived Modes

Autofill a 80 caracteres

Tabulaciones

Uso de Column Maker

An Introduction to Programming in Emacs Lisp


  1. Tenéis el origen de lo trocitos de código en las fuentes 
Anuncios

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s