Tag Archives: dired buffer

Aprire una directory remota con Emacs e Tramp

Questo articolo ha lo scopo di spiegare come associare un tasto per aprire una directory remota nel Dired buffer dell’editor Emacs. Se state pensando che si tratti di un’operazione molto semplice, allora probabilmente avete già raggiunto un alto livello di esperienza con Emacs, potete regolarvi liberamente e passare oltre ciò che sto per dire. In caso contrario forse troverete questa guida utile.

Avendo avuto l’esigenza di imparare il linguaggio di programmazione PHP, mi capita di scrivere il codice d’esempio che trovo nei libri e di provarlo direttamente sulla mia VPS (Virtual Private Server) online. Inizialmente effettuavo un login sul server e con l’editor “Vi” creavo e modificavo i file sorgenti, ma questo procedimento si è rivelato quasi subito improduttivo. Inoltre, avrei potuto perdere gli esercizi qualora la connessione si fosse interrotta prima del backup. Dato che quell’editor non mi soddisfava, ho cercato una soluzione alternativa. Così ho scelto Emacs, per alcuni buoni motivi: è un editor per terminale a caratteri che si integra bene anche nel desktop grafico; si possono estendere le sue funzioni con il linguaggio lisp ed oggi è possibile usarlo in tutte le applicazioni che richiedono un editor di testo, dalla programmazione in linguaggio C alla lettura della posta elettronica. Sono stati creati pacchetti che aggiungono giochi, IDE, debugging, web server, ecc. “Alcune caratteristiche utili di Emacs sono a portata di mano, ma qualche volta occorrono anni per scoprirle“ (cit. Great Emacs Features).

Il Dired buffer di Emacs
Il Dired buffer di Emacs

Ho accennato al Dired: è il buffer di Emacs (Dired sta per Directory Edit) contenente l’elenco dei file di una directory. Qui è possibile compiere le operazioni di file management. Consiglio di aprire l’editor con questo buffer; voi potete entrare in dired mode aggiungendo la seguente istruzione lisp al file di configurazione .emacs che trovate nella home del vostro account Unix.


;;
;; Dired mode
;;
(custom-set-variables 
      ‘(initial-buffer-choice “~/”))

Ci sono utenti Unix che usano soltanto Emacs perché è un ambiente di lavoro potente e completo, grazie all’interprete Lisp che permette di estenderlo continuamente con nuove funzioni. Per esempio, Tramp è un pacchetto distribuito con Emacs per modificare i file remoti. Quest’esigenza è veramente diffusa oggi, dato che spesso i programmatori e gli amministratori di sistema devono avere a che fare con la gestione di file che risiedono su un altro calcolatore collegato alla Rete. Tramp usa una connessione con shell remota fra quelle disponibili: rlogin, telnet o ssh, e può trasferire i file usando rcp o un programma simile. Siccome queste applicazioni non sempre sono presenti su un sistema Unix è bene accertarsi di averle altrimenti Tramp non funzionerà. Ad ogni modo è possibile configurare Emacs mentre è in esecuzione: premere prima i tasti M-x, inserire nel mini buffer il comando customize-variable, inviare e specificare la variabile tramp-default-method. Emacs è dotato di autocompletamento pertanto la pressione del tasto TAB evita gli errori di scrittura. Naturalmente è ancora valido il file di configurazione .emacs visto in precedenza, qui dovremmo semplicemente aggiungere il seguente codice Lisp

;;
;; Tramp default method
;;
(require ‘tramp)
(setq-default tramp-default-method “ssh”)

Avete bisogno che sia attiva la connessione remota nel Dired buffer per modificare la variabile tramp-default-method mentre state eseguendo Emacs. La sintassi che vi permette di aprire una directory è simile a quella usata per cercare o creare un file sul computer locale, ovvero


C-x C-f /user@host#port:/path/to/directory/or/file

Qui C-x e C-f corrisponde alla pressione dei tasti CTRL+x e CTRL+f, il resto è un percorso di file preceduto dall’indirizzo e dalla porta ssh del server, dal nome dell’utente di login, separati dal simbolo della posta elettronica. Se volessimo usare un solo tasto per aprire la directory remota più utilizzata? Dobbiamo conoscere il linguaggio Lisp, ma non è un problema. Un trucco comune applicato dagli utenti dell’editor Emacs consiste nell’utilizzare l’istruzione repeat-complex-command. Dopo aver digitato il comando Tramp per l’apertura di una directory remota, dobbiamo premere C-x ESC ESC e il mini buffer presenterà l’espressione eLisp corrispondente all’ultima azione compiuta. Voi potete copiarla e incollarla nel vostro file di configurazione .emacs con alcune opportune aggiunte, come ho fatto io.

(find-file "/ferocious@192.168.0.3#21002:/home/web/sandbox/php t)

Il binding, cioè l’associazione di un tasto a un’azione, si realizza con la seguente istruzione lisp generale:

(global-set-key KEY COMMAND)

A noi serve una funzione che possa essere inserita nell’espressione precedente come un comando (al posto di COMMAND) e che faccia l’operazione che desideriamo. Una funzione in Lisp è un blocco di codice racchiuso fra parentesi tonde, io le ho assegnato il nome find-file-remote e ho espressamente specificato che richiede per funzionare il modulo Tramp. Notare che ogni istruzione deve essere altresì specificata fra parentesi all’interno del blocco.

;;
;; Binding for Tramp operations
;;
(defun find-file-remote ()
(interactive)
(require ‘tramp)
(find-file “/ferocious@192.168.0.3#21002:/home/web/sandbox/php”))

Ora dobbiamo compiere l’ultimo passo: la scelta del tasto da abbinare all’operazione di connessione che va specificato come argomento nell’espressione Lisp con global-set-key.

(global-set-key (kbd “C-<f5>”) ‘find-file-remote)

In Rete è facile trovare tutorial che affrontano l’argomento del binding, cioè l’associazione di tasti ad azioni particolarmente ripetute, in tutte le sue sfaccettature perché Emacs è tra gli editor largamente utilizzati su Unix. Uno dei principali punti di forza è l’interprete eLisp che permette di aggiungere funzioni all’ambiente di lavoro. Poiché l’editor si basa su Lisp ci si devono allora aspettare operazioni che possono essere implementate solo con questo linguaggio di programmazione. Tuttavia per raggiungere lo scopo di questo articolo è servito più intuizione che padronanza della materia.