Intro
Non ho mai cercato di convincere la gente a usare emacs, perché ho sempre ritenuto che obiettivamente sia un ambiente di lavoro diverso da quello a cui sono abituati la maggior parte degli utenti e perché la curva di apprendimento è piuttosto ripida.
Se qualcuno decide di affrontare l’avventura sono abbastanza convinto che alla fine ne avrà tratto gran giovamento, tuttavia è una scelta personale se investire o meno del tempo a imparare uno strumento nuovo.
Posso però divulgare alcuni aspetti di emacs di cui pochi tra quelli che non lo adoperano sono a conoscenza e che potrebbero essere determinanti per prendere la decisione consapevole di imparare a usarlo.Non starò a dilungarmi in dettagli inutili sulle scorciatoie da tastiera, criticate da moltissimi per la complessità e l’anti-intuitività, che però (per lo meno quelle basilari) sono le stesse che adopera la bash. E nemmeno dirò quali fantasmagoriche funzionalità sia possibile installare, anche perché io penso di usarne pochissime.
Voglio semplicemente illustrare un interessante caso di uso non banale di alcune delle funzionalità di default.
Cose è emacs
Nelle parole degli autori:
An extensible, customizable, free/libre text editor — and more. At its core is an interpreter for Emacs Lisp, a dialect of the Lisp programming language with extensions to support text editing.
Cosa vuo dire? Che è un editor, perché quello è il principale utilizzo del software, ma che dal punto di vista costruttivo è, per prima cosa, un interprete lisp.
Questo significa che come qualsiasi altro interprete di linguaggio può essere usato per scrivere script indipendenti, ma anche, cosa certamente più interessante ai fini di questo scritto, che chiunque senta l’esigenza di una nuova funzionalità può programmarsela all’interno di emacs o modificarsene una esistente perché risponda alle proprie esigenze. Nel tempo questo ha comportato che per emacs sono nati migliaia di pacchetti aggiuntivi che implementano le funzioni più disparate.
I denigratori a volte dicono che è un sistema operativo, volendo intendere che è inutilmente pesante. In realtà, se comparato con le risorse di calcolo attualmente disponibili a chiunque, è leggerissimo (per editare questo file di testo in memoria ha allocato meno di 100kB) e certamente è più leggero di ogni IDE o editor avanzato che possiate reperire. La critica probabilmente risale ai tempi dei 386, visto che già allora esisteva. Inoltre la sua struttura modulare e la natura stessa del lisp fa sì che sia l’utente a stabilire per cosa vuole utilizzare emacs, senza caricare in memoria troppe inutili funzioni aggiuntive.
Cosa ci faccio con emacs
Essenzialmente quello per cui è nato, edito file di testo semplice. Ma in effetti è il software che uso di più in assoluto, perché è così efficace ed efficiente che ti fa capire che per gestire quasi ogni attività quotidiana bastano file di testo semplice, emacs e pochi strumenti per processare i file.
Per documenti formatati di solito uso file in linguaggio markdown o org-mode. Con pandoc o emacs stesso per processarli. Per il documenti più lunghi, e che magari possono essere più strutturati e voglio più eleganti, uso latex. Di solito, se non in casi rari, non uso fogli di calcolo, quel poco che mi serve o lo faccio col foglio di calcolo interno di emacs oppure in python. Per le email uso un client grafico separato ma per scrivere le email più lunghe e articolate gli faccio aprire emacs.
In sostanza non è improbabile che tenga anche decine di file aperti contemporanemente con emacs, saltando da un file all’altro con pochi tocchi della tastiera.
Ma voglio giungere rapidamente al cuore di quest’articolo, un caso d’uso intenso e per certi versi insolito di emacs.
Premesse
Terminologia : in gergo emacs le finestre sul desktop si chiamano frame, le divisioni interne al frame si chiamano finestre, il file in memoria si chiama buffer.
Emacs server
Il comportamento predefinito di emacs quando apri un file è di aprire una nuova istanza del programma. Questo vuol dire che per cambiare finestra o file devi affidarti alla scorciatoie da tastiera del window manager che stai usando. Cambi window manager, cambiano le scorciatoie. Inoltre questa cosa ti costringe ad avere una finestra per ogni file.
Quando invece apri un file da dentro emacs lui non apre una nuovo frame (a meno che non glielo dica esplicitamente) ma crea un nuovo buffer nell’istanza corrente. Questa opzione è sempre preferibile perché emacs, che è anche un editor che funzione su terminale testuale, non condivide la clipboard di X, sebbene le ultime versioni dialoghino con questa, quindi per esempio non sarà possibile copiare selezioni rettangolari tra istanze diverse.
Non sarebbe utile poter dire ad emacs di aprire un file in una istanza già aperta e magari aprire un frame nuovo?
Indovinate un po’…si può fare. Si può far partire un emacs server, ovvero metterlo in ascolto in modo da poter “mandare” i nuovi file aperti ad una istanza già attiva. Dopo aver fatto partire il server basta agganciarvisi aprendo i nuovi file con comando emacsclient (rimando al manuale ufficiale per i dettagli sia sul server che sul client). Un’altra cosa bella che, se disponete di 2 monitor, si può fare è tenere aperto un frame di emacs su un monitor e mandargli dall’altro tutti i file che si vogliono aprire.
TRAMP mode
Nell’ultimo anni, a causa della pandemia, ci siamo trovati più o meno tutti a lavorare da casa e coloro ai quali servono risorse di calcolo, probabilmente non disponibili a casa, non è insolito che debbano usare macchine remote. La connessione avviene il più delle volte tramite una connessione ssh. Cosa succede se la connessione cade mentre stiamo modificando un file di testo da remoto? Nella maggior parte dei casi il programma si pianta e abbiamo perso tutte le modifiche fatte dopo l’ultimo salvataggio. Ancora una volta emacs ci aiuta molto.
Esiste infatti il tramp mode. È un modo, che trovate già installato su ogni versione recente di emacs, che permette di gestire i file remoti da una istanza locale del programma. In soldoni, per chi non avesse capito, voi lanciate emacs sul vostro pc e gli dite di andare e a prendere un file su un server remoto via ssh. In questa maniera il programma è molto più reattivo di qualsiasi programma che vogliate utilizzare da remoto (dal momento che gira sul vostro pc locale non risentirà dei ritardi della rete) e nel caso vada via la connessione non succede nulla, potete continuate a lavorare: lui si riconnetterà da solo non appena ritorna la connessione e gli dite di salvare il file. Ibernate il pc, lo risvegliate e il tramp mode è sempre lì, non appena chiedete di salvare lui si riconnette automaticamente al file sul server remoto. Inoltre se apri un file mentre ne stai editando uno remoto, assume che sia sulla stessa directory remota. Compresi tag e file ausiliari :). Un modo molto comodo di lavorare.
Altri editor
Farei un torto alla verità se dicessi che emacs è l’unico editor in gradi di fare modifiche da remoto.
Da quello che so, l’ho provato, Vim ha una pessima interfaccia per farlo. Usa un file temporaneo e lo sovrascrive con scp ogni volta, una semplice interfaccia alla linea di comando. Non assume il nome utente e non legge le impostazioni di rete, Fa peggio del solo scp. Chiede di pigiare invio per ogni comando che accede alla rete. È parecchio scomodo.
Un altro editor che lo fa è notepad++ sotto windows. Questo non l’ho mai provato.
E quindi?
Se avete un po’ di tempo provateci a imparare emacs, non ve ne pentirete. Ritorna indietro molto più dello sforzo necessario per imparare a usarlo.