Una caratteristica molto carina di emacs è la possibilità di abilitare la modalità server in una finestra dell’editor già avviata.
Questa funzionalità unita al programma emacsclient rende l’apertura di un qualsiasi file successivo al primo praticamente istantanea poichè emacs è già in memoria ed ha già eseguito il file di startup.
Tuttavia su windows e credo anche con linux, ma lì non si vede, successivamente alla prima esecuzione all’avvio di emacsclientw si ottiene un messaggio di errore simile a questo:
Esistono vari modi per aggirarlo, in alcuni forum parlano di bug, altri consigliano di installare EmacsW32, qualcun’altro ha capito che il problema è legato al file server di emacs.
In effetti il motivo del messaggio è la presenza del file server di una precedente sessione di emacs, in quanto le informazioni in esso contenute sono ovviamente errate poichè si riferiscono ad un’istanza dell’editor non più in esecuzione.
Capita la causa del problema, la soluzione è alquanto semplice: vedere se esiste un’istanza dell’editor in esecuzione ed in caso contrario eliminare il file ed eseguire emacs. Tuttavia esiste anche un modo ancora più immediato ricorrendo a qualche riga di elisp.
Infatti basta inserire un hook che alla chiusura dell’editor verifichi la presenza del file e lo elimini:
; elimina il file server all'uscita
(add-hook 'kill-emacs-hook (function (lambda () (
if (file-exists-p "~/.emacs.d/server/server") (delete-file "~/.emacs.d/server/server")))))