Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Se due uomini sono d'accordo su tutto, puoi star certo che soltanto uno di essi sta pensando.

Lyndon Baines Johnson 

Sondaggio:

Windows XP ?...

Un grande affare
Il Sistema Operativo migliore sul mercato
Bello, ma niente di eccezionale
L'ennesima fregatura Microsoft
Una ciofeca peggiore dei suoi predecessori
Preferisco non commentare...

visualizza risultati


 

Personalizzare Emacs: parte I

Emacs è così grande e complesso, che ha addirittura il suo proprio linguaggio di programmazione! Non sto scherzando: per poter personalizzare veramente Emacs, dovrete scrivere dei programmi in questo linguaggio; si chiama Emacs Lisp, ed è un dialetto del Lisp; se avete precedenti esperienze in Lisp lo troverete abbastanza facile. Altrimenti, non vi preoccupate: non entrerò molto nei particolari, perché è meglio imparare facendo. Per imparare veramente ad usare Emacs, dovreste consultare la documentazione Info su Emacs Lisp, e leggere molto codice sorgente Emacs Lisp.

La maggior parte delle funzionalità di Emacs vengono definite nei file di Emacs Lisp (Talvolta chiamate non ufficialmente "Elisp"). La maggior parte di questi file vengono distribuiti con Emacs, e sono noti in generale come "libreria Emacs Lisp". Dove si trova questa libreria dipende da come Emacs è stato installato sul vostro sistema: posti comuni sono /usr/lib/emacs/lisp, /usr/lib/emacs/19.19/lisp/, eccetera. "19.19" è il numero di versione di Emacs, e sul vostro sistema può essere diverso.

Non avete bisogno di ricercare la libreria di Lisp nel vostro filesystem, perché Emacs ha questa informazione registrata al suo interno, nella variabile load-path. Per trovare il valore di questa variabile, bisogna valutarla, cioè bisogna far interpretare il suo valore dall'interprete Lisp di Emacs. In Emacs esiste una modalità speciale per valutare le espressioni Lisp, che si chiama lisp-interaction-mode. Di solito c'è un buffer che si chiama "*scratch*" che è già in questa modalità. Se non lo trovate, create un nuovo buffer qualsiasi, e digitateci dentro M-x lisp-interaction-mode. Ora avete un'area di lavoro dove interagire con l'interprete Emacs Lisp. Digitate:

load-path

e quando avete finito premete C-j. Nella modalità di interazione Lisp, C-j è collegato a eval-print-last-sexp. Una "sexp"è un' "espressione-s", cioè un gruppo bilanciato di parentesi, che non ne include nessuna. Beh, così è un po' troppo semplificato, ma capirete di cosa si tratta lavorando con Emacs Lisp. Comunque, la valutazione di load-path dovrebbe essere una cosa del genere:

load-path (C-j)
("/usr/lib/emacs/site-lisp/vm-5.35" "/home/kfogel/elithp"
"/usr/lib/emacs/site-lisp" "/usr/lib/emacs/19.19/lisp")

Non sarà la stessa su tutti i sistemi, naturalmente, dato che dipende da come è stato installato Emacs. L'esempio qui sopra viene da un sistema PC 386 con Linux. Come indica il testo qui sopra, load-path è un elenco di stringhe; il nome di ogni stringa indica una directory che può contenere file di Emacs Lisp. Quando Emacs deve caricare un file di codice Lisp, lo cerca in tutte queste directory, in ordine; se nell'elenco c'è una directory che non esiste nel filesystem, Emacs la ignora.

Quando lo avviate, Emacs cerca automaticamente di caricare il file .emacs dalla vostra home directory, quindi, se volete personalizzare Emacs, dovreste mettere i comandi di personalizzazione in .emacs. Le personalizzazioni più comuni sono quelle dei corrispondenti da tastiera, quindi ecco come si fanno:

(global-set-key "\C-cl" 'goto-line)

global-set-key è una funzione di due argomenti: il tasto da collegare e la funzione a cui collegarlo. La parola "global" significa che il collegamento è valido in tutte le modalità maggiori (esiste un'altra funzione, local-set-key, che collega un tasto ad una funzione in un singolo buffer). Qui sopra, ho collegato C-c l alla funzione goto-line. Il tasto viene descritto usando una stringa. La sintassi speciale "\C-<char>" sta a significare che il tasto Control deve essere tenuto premuto mentre si preme il tasto <char>. Nello stesso modo, "\M-<char>" indica il tasto Meta.

Va tutto bene, ma come facevo a sapere che il nome della funzione era "goto-line"? Potevo sapere solo di voler far corrispondere il tasto C-c l ad una funzione che richiede il numero di linea e sposta il cursore su quella linea, ma come facevo a sapere come si chiamava la funzione? È qui che ci aiuta la guida in linea di Emacs: una volta che avete deciso che tipo di funzione state cercando, potete usare Emacs per ritrovare il suo nome esatto. Ecco un modo veloce e un po' sporco per farlo: dato che Emacs usa il completamento dei nomi delle funzioni, digitate semplicemente C-h f (che sta per describe-function, e quindi dà la descrizione di una funzione), e poi digitate senza scrivere niente. In questo modo chiedete ad Emacs di completare una stringa vuota, e quindi Emacs elenca tutte le funzioni! Ci vorrà un po' per fare la lista completa, dato che Emacs ha molte funzioni interne, ma quando è pronto ne mostrerà tante quante ne entrano nello schermo. A questo punto, premete C-g per uscire dalla funzione di descrizione. Sarà stato creato un buffer "*Completions*", che conterrà tutta la lista che avete generato. Passate a quel buffer. Ora potete usare C-s e isearch per cercare la funzione che vi interessa. Ad esempio, è probabile che una funzione che chiede il numero di una linea e passa a quella linea conterrà la stringa "line". Quindi cercate la stringa "line", e alla fine troverete quello che cercate.

Se volete usare un altro metodo, provate con C-h a, command-apropos, che mostra tutte le funzioni il cui nome contiene la stringa data. L'output di command-apropos è un po' più complicato da leggere di una lista semplice, a mio parere, ma forse la penserete in modo diverso. Provate entrambi i metodi e vedete quale vi piace di più.

C'è sempre la possibilità che Emacs non abbia nessuna funzione predefinita che faccia quello che volete. In questo caso, dovrete scrivervi la funzione da soli. Non vi parlerò di come farlo in questo libro, dovreste dare un'occhiata alla libreria Emacs Lisp e cercare degli esempi di definizioni di funzioni, e leggere le pagine Info su Emacs Lisp. Se per caso conoscete qualcuno che conosce bene Emacs, chiedetegli come fare; definire le proprie funzioni di Emacs non è molto difficile (per darvi un'idea, ne ho scritte 131 nell'ultimo anno). Richiede un po' di pratica, ma non è difficile da imparare.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2019 Cataldo Sasso