Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Ci? che sfugge alla logica ? quanto v'? di pi? prezioso in noi stessi.

Andr? Gide 

Sondaggio:

A tuo giudizio, riaprire le "casechiuse" ?...

Un modo per combattere la criminalit?
Un insulto alle donne
Una cosa da fare al pi? presto
L'ennesima stupidaggine di questo governo
Una cosa che non mi interessa

visualizza risultati


 

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.

 

successivo
–«  INDICE  »–

 

 

 

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