Personalizzare Emacs: parte II
Un'altra cosa che si fa spesso nel file .emacs è impostare alcune variabili a valori predefiniti. Per esempio,
mettete questa linea nel vostro file .emacs , ed avviate una nuova copia di Emacs:
(setq inhibit-startup-message t)
Emacs controlla il valore della variabile inhibit-startup-message per decidere se mostrare o no all'avvio determinate informazioni
sulla versione e sulla mancanza di garanzia. L'espressione Lisp qui sopra usa il comando setq per impostare questa variabile
al valore 't', uno speciale valore Lisp che significa vero (true). L'opposto di 't' e 'nil', che è il valore predefinito
per 'falso' nell'Emacs Lisp. Ed ecco due cosette che ho nel mio .emacs e che possono essere utili:
(setq case-fold-search nil) ; non considera le maiuscole nelle ricerche
;; fa rientrare i programmi C come piace a me:
(setq c-indent-level 2)
La prima espressione non fa considerare le maiuscole nelle ricerche (compreso isearch); cioè, la ricerca darà entrambe
le versioni, con lettere maiuscole o minuscole, di un carattere, anche se la stringa di ricerca contiene solo le lettere minuscole.
La seconda espressione imposta i rientri per le frasi del linguaggio C un po' più piccoli del normale, è solo un gusto
personale; trovo che renda il codice C più leggibile.
Il carattere di commento nel Lisp è ";". Emacs ignora qualsiasi cosa che segua un punto e virgola, così:
;; queste due linee vengono ignorate dall'interprete Lisp, ma
;; l'espressione seguente viene valutata appieno:
(setq una-stringa-letterale "Una strana pausa; per nessun motivo.")
È una buona idea commentare i vostri cambiamenti ai file Lisp, in modo che anche dopo sei mesi vi ricorderete di cosa stavate
pensando mentre li modificavate. Se il commento appare da solo su una linea, anteponetevi due punti e virgola; aiuta Emacs a far rientrare
correttamente i file Lisp.
Potete trovare del materiale sulle variabili interne di Emacs nello stesso modo che avete usato per le funzioni. Usate C-h v e describe-variable
per creare una lista dei completamenti, oppure usate C-h C-a apropos. Apropos si distingue da C-h a, command-apropos nel fatto che mostra
le funzioni e le variabili invece che solo le funzioni.
L'estensione di default per i file Emacs Lisp è ".el ", come in "c-mode.el ". Comunque,
per rendere più veloce il codice Lisp, Emacs permette di compilarlo byte per byte; questi file di codice Lisp compilato hanno
estensione ".elc " invece di ".sl ". L'eccezione a questa regola è il file ".emacs ",
che non ha bisogno dell'estensione .el perché Emacs sa dove cercarlo all'avvio.
Per compilare un file di codice Lisp interattivamente, usate il comando M-x load-file. Vi chiederà il nome del file.
Per caricare i file
(load "c-mode") ; forza Emacs a caricarlo in c-mode.el o .elc
Emacs aggiungerà per prima cosa l'estensione .elc al nome del file e proverà a cercarlo in qualche directory
del load-path. Se non ci riesce, proverà con l'estensione .sl , oppure userà la stringa letterale che viene
passata a load. Potete compilare byte per byte un file con il comando M-x byte-compile-file, ma se modificate il file spesso,
probabilmente non vi conviene. Non dovreste mai compilare così il file .emacs , né dargli l'estensione .el .
Dopo che sarà stato caricato .emacs , Emacs cercherà di caricare un file con nome default.el .
Di solito si trova in una directory, nel load-path, che si chiama site-lisp o local-elisp o qualcosa del genere
(vedere l'esempio di load-path che ho dato qualche pagina indietro). Chi mantiene Emacs su sistemi multiutente usa il default.el
per apportare cambiamenti alle versioni di Emacs di tutti, dato che l'Emacs di ciascuno si carica dal proprio file .emacs
personale. Nemmeno default.el dovrebbe essere compilato, dato che normalmente viene modificato abbastanza spesso. Se il
.emacs di qualcuno contiene degli errori, Emacs non cerca di caricare defaul.el , ma si ferma, mandando un
messaggio che dice "Error in init file " ("Errore nel file di inizializzazione"). Se vedete un messaggio
del genere, probabilmente c'è qualcosa di sbagliato nel file .emacs .
C'è ancora un tipo di espressione che si ritrova spesso nei file .emacs . La libreria di Emacs Lisp spesso offre
dei pacchetti multipli per fare la stessa cosa in modi diversi; bisognerà così specificare quale volete usare (o dovrete
usare il pacchetto di default, che non è sempre il migliore per tutti gli scopi). Un'area in cui si ha questo problema sono le
caratteristiche di interazione di Emacs con Scheme: con Emacs vengono distribuite due diverse interfacce Scheme (almeno nella versione
19): xscheme e cmuscheme.
prompt> ls /usr/lib/emacs/19.19/lisp/*scheme*
/usr/lib/emacs/19.19/lisp/cmuscheme.el
/usr/lib/emacs/19.19/lisp/cmuscheme.elc
/usr/lib/emacs/19.19/lisp/scheme.el
/usr/lib/emacs/19.19/lisp/scheme.elc
/usr/lib/emacs/19.19/lisp/xscheme.el
/usr/lib/emacs/19.19/lisp/xscheme.elc
A me l'interfaccia di cmuscheme piace molto di più di quella di default, che è xscheme. Come posso far usare ad Emacs
quella che piace di più a me? Mettendo queste linee in .emacs:
;; notate come l'espressione può essere spezzata in più linee. Il Lisp
;; in genere ignora gli spazi vuoti:
(autoload 'run-scheme "cmuscheme"
"Avvia uno Scheme inferiore, come lo voglio io." t)
La funzione autoload prende come argomento il nome di una funzione (tra apici, per ragioni che hanno a che fare con il Lisp) e dice
ad Emacs che tale funzione è definita in un determinato file. Il file è il secondo argomento, una stringa (senza l'estensione
".el" o ".elc") che indica il nome del file da cercare nel load-path.
I restanti argomenti sono in genere opzionali, ma in questo caso necessari: il terzo è una stringa di documentazione per la
funzione, in modo che se chiamate describe-function sulla funzione avete delle informazioni che vi possono servire. Il quarto
dice ad Emacs che questa funzione autoavviabile può essere richiamata interattivamente (cioè usando M-x). In questo caso
quest'ultimo argomento è molto importante, dato che bisogna poter digitare M-x run-scheme per avviare un processo di scheme
sotto Emacs.
Adesso che run-scheme è stata definita come funzione autoavviabile, cosa succede quando digito M-x run-scheme? Emacs cerca la
funzione run-scheme, vede che è impostata per venire autoavviata, e carica il file indicato dall'autoavviamento (in questo caso,
"cmuscheme"). Il file compilato byte per byte cmuscheme.elc esiste, quindi Emacs lo caricherà. Questo
file deve definire la funzione run-scheme, o ci sarà un errore nell'autocaricamento. Per fortuna lo fa, quindi tutto va liscio,
ed io ottengo la mia interfaccia Scheme preferita.
Un "autocaricamento" è come una promessa fatta ad Emacs che, quando sarà il momento, potrà trovare la
funzione specificata nel file in cui gli si dice di guardare; e voi potete controllare quello che viene caricato. Inoltre, l'autocaricamento
vi aiuta a diminuire la memoria usata da Emacs, evitando di caricare determinate caratteristiche finché non vengono richieste.
La maggior parte dei comandi non sono definiti come funzioni quando Emacs parte; piuttosto, sono semplicemente impostati come autocaricamento
da determinati file. Se non invocate il comando, non viene mai caricato. Questo modo di salvare spazio è vitale per il funzionamento
di Emacs: se caricasse tutti i file disponibili nella libreria Lisp, ci vorrebbero venti minuti per avviarlo, ed occuperebbe la maggior
parte della memoria disponibile sul sistema. Non vi preoccupate, non dovete impostare tutti questi autocaricamenti nel file .emacs :
sono stati preimpostati all'interno di Emacs stesso.
|