EMACS: Keyboard MACRO – Come eseguire la stessa operazione ripetutamente

In questo breve articolo voglio trattare di una funzionalità di EMACS, noto editor – anche se forse è un po’ riduttivo chiamarlo così – per il mondo UNIX ma disponibile anche su Windows, trattata nella sua documentazione qui e che da la possibilità all’utente di registrare tutto quello che fa per poi ripeterlo esattamente.

Una cosa praticamente uguale a quella che avviene, ad esempio, nei programmi Office.

Prima di spiegare il tutto faccio una piccola premessa, per coloro che magari sono poco avvezzi di EMACS e vogliono avvicinarsi a questo fantastico strumento: il software funziona sfruttando le cosiddette keybinding, cioè le accelerazioni da tastiera ed, in particolare, prevede che siano sempre anticipate da uno di questi due tasti: CTRL e ALT.

Per semplicità, nella sua guida (e anche qui), si associa la lettera C al CTRL ed M ad ALT; quindi abbiamo che se scrivo C-x significa: premere il tasto CTRL e, tenendolo premuto, premere la lettera x.

In modo analogo C-x C-c significa che il tasto CTRL va tenuto premuto mentre si preme prima la x e poi la c.

Diversamente, se c’è scritto C-x v v significa: premi CTRL, tienilo premuto mentre premi x, quindi lo rilasci e premi v per 2 volte.

Torniamo alle MACRO, come funziona ?

Come prima cosa bisogna avviare la registrazione; lo si fa con: C-x (

La parentesi ( chiaramente va fatta con SHIFT+8.

Ora, tutto quello che facciamo, viene registrato; quello che scriviamo, comandi EMACS lanciati (con keybindings o metacomandi, cioè quelli che si possono usare con il tasto ALT) e quant’altro.

Quando abbiamo finito di eseguire le operazioni che intendiamo ripetere, terminiamo la registrazione con: C-x )

A questo punto, per ripetere la MACRO registrata possiamo usare: C-x e

Potremmo voler dare un nome alla MACRO creata, lo facciamo con M-x name-last-kbd-macro ed inseriamo il nome che vogliamo dare, confermando con INVIO.

Il “name-last-kbd-macro” è uno dei metacomandi di cui parlavo prima; EMACS ne ha davvero moltissimi e consentono di gestire tutto (questo software ha una capacità di personalizzazione ed estensione fuori dal normale).

Dare il nome ad una MACRO ci consente di averne più di una (C-x e esegue sempre l’ultima MACRO registrata) che possiamo richiamare con M-x nome_macro dove “nome_macro” è il nome che abbiamo dato.

Se la MACRO creata ci piace proprio e vogliamo renderla disponibile anche per le future sessioni di EMACS – infatti, quelle create fino ad ora, vengono perse nel momento in cui chiudiamo il programma – dobbiamo salvarla.

Per farlo dobbiamo aprire il file $HOME/.emacs con: C-x C-f $HOME/.emacs

Ora dobbiamo dire al programma di inserire la MACRO a cui abbiamo dato il nome con: M-x insert-kbd-macro e rispondendo alla sua domanda con il nome. Lui aggiunge al file – magari dobbiamo avere l’accortezza di esserci spostati, precedentemente, con il cursore alla fine del file – la definizione LISP che corrisponde alle operazioni registrate.

Dovrebbe essere qualcosa di simile a questo:

(fset 'uda_protect_variable
 [C-insert ?\C-x ?2 C-home ?\M-% S-insert return S-insert ?\} home right ?\{ return ?! ?\C-x ?o ?\C-x ?1])

Infine dobbiamo salvare il file (che rappresenta il file di configurazione di EMACS) con: C-x C-s

Aggiungo solo una cosa: quando si usano i metacomandi è possibile farsi suggerire da EMACS il completamento, proprio come avviene nel terminale Bash di Linux (anche se sarebbe più corretto dire il contrario, dato che questa caratteristica è stata ereditata proprio da EMACS, tant’è che è una “modalità” del terminale, alternativa a quella di vi, altro editor storico del mondo UNIX).

Autore: BuDuS

Disegnatore Meccanico, con la passione per l'Informatica. Come hobby, produco piccoli software di (in)utilità.