Di fatto tutta la personalizzazione di Emacs viene fatta tramite codice Lisp. Potete modificare variabili che influenzano il modo in cui Emacs opera o potete aggiungere nuove funzioni a Emacs (o sovrascrivere funzioni esistenti, rimpiazzandole con altre vostre).
Mentre starete sperimentando la personalizzazione di Emacs, probabilmente vorrete farlo in un modo che sia temporaneo. Se fate qualcosa di orribilmente sbagliato, avrete solo da uscire da Emacs con C-x C-c
e rilanciarlo di nuovo. Una volta che avrete capito quali cambiamenti rendere permanenti, potrete aggiungerli al vostro file molto personale .emacs
in modo che possano avere effetto ogni volta che avvierete Emacs. Questo viene discusso nella prossima sezione.
Le personalizzazioni più semplici si ottengono cambiando il valore di una variabile in Emacs. Il codice listato per farlo, appare simile a questo:
(setq nome-variabile nuovo-valore)
Dove nome-variabile
è il nome della variabile e nuovo-valore
è il valore che vorreste dare alla variabile (in gergo Lisp, state legando una variabile ad un valore). La funzione setq
in lisp è analoga agli operatori di assegnamento (normalmente =
) in altri linguaggi di programmazione.
NOTA: Qui sto passando sopra a molti dettagli per amor di
semplicità. Potreste anche vedere me o altri, usare le funzioni
Lisp set
e perfino setq-default
. Se siete veramente
curiosi, dateci un'occhiata nei testi di riferimento di Emacs Lisp.
Diamo un'occhiata alla riga presa dal mio file .emacs
(setq-default transient-mark-mode t)
La variabile transient-mark-mode
controlla se una regione (region) viene evidenziata o no quando la marco. In molte applicazioni GUI, se cliccate e trascinate il mouse per selezionare una parte di testo, questi diventa evidenziato in video inverso o in altri colori. Emacs farà la stessa cosa se la variabile transient-mark-mode
è impostata (ad un valore non-nil).
Un valore COME?
Okay. Breve digressione. La maggior parte dei linguaggi di programmazione hanno diverse opinioni sui valori vero/falso. In C/C++ un valore è considerato vero se è un valore non-zero. In Perl, un valore non-nullo o non-zero è vero. In Lisp, si applica la stessa idea ma i nomi e i simboli sono differenti.
Vero è normalmente scritto come t
e falso (o null) è scritto come nil
. Come in altri linguaggi, tuttavia, qualsiasi valore non-nil è considerato vero.
Per ottenere la descrizione completa di che cosa fa transient-mark-mode
, potete usare l'aiuto in linea. Digitate C-h v
o M-x
describe-variabile
e poi transient-mark-mode
. Se siete pigri come me, potete avvalervi del completamento del nome della variabile usando il tasto Tab
. Digitate solo una parte del nome della variabile e premete il tasto Tab
. Se avete digitato abbastanza lettere del nome in modo che Emacs possa già identificarlo univocamente, vedrete l'intero nome completarsi per voi.
Un'altra variabile che le persone spesso impostano è fill-column
. Questa dice ad Emacs quanto largo deve essere lo schermo per eseguire l'allineamento (e auto-fill-mode
rispetta questo valore). Per impostare il valore su qualcosa di assurdo, potete digitare:
(setq fill-column 20)
Ma questo di fatto non produrrà niente. Avete bisogno di dire a Emacs di valutare l'espressione che avete digitato. Per fare questo, portate il puntatore (cursore) alla fine dell'espressione e poi digitate C-x C-e
, il quale chiama la funzione eval-last-sexp
nel caso non siate sicuri. Quando fate questo, notate che 20
(o qualsiasi valore avete usato) vi viene mostrato nel mini-buffer alla base dello schermo. Questo è giusto il valore ritornato dall'espressione che avete valutato.
Giusto per provare che funziona, digitate una frase o due. Se avete auto-fill-mode
abilitato (probabilmente non lo avete), noterete il testo allineato alla colonna marcata 20. Altrimenti, dopo che avrete digitato qualcosa, digitate M-q
che chiama la funzione fill-paragraph
. Questo eseguirà l'allineamento del testo.
Potete configurare Emacs per fare automaticamente qualcosa quando aprite un file di un tipo particolare (come certe GUI che lanciano automaticamente una specifica applicazione se cliccate sull'icona di un determinato file). Per esempio, io potrei volere che automaticamente Emacs entrasse in text-mode
ogni volta che io apro un file con estensione
.txt
. Beh!, questo già succede. :-)
Allora diciamo a Emacs di entrare sempre in text-mode
quando si apre un file chiamato ``README''.
(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))
Eh?
Senza immergersi dentro tanti comandi Lisp che in effetti non avete bisogno di conoscere (ma che non vi farebbe male imparare), diciamo solo che la variabile auto-mode-alist
contiene una lista di coppie. Ciascuna coppia contiene un'espressione regolare ed un nome di modalità di Emacs. Se un file che aprite coincide con l'espressione regolare (in questo caso, la stringa README
) Emacs avvia la modalità che avete specificato.
La strana sintassi riportata sopra è perché noi stiamo di fatto aggiungendo un altra coppia a quella lista delle modalità. E voi non vorreste giusto assegnare qualcosa a auto-mode-alist
senza assicurarvi che i valori che già contiene non vengano persi.
E se io voglio che Emacs entri automaticamente in html-helper-mode
ogni volta che apro un file che finisce con .html
o .htm
, lo aggiungerò al mio file .emacs:
(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist)) (setq auto-mode-alist (cons '("\\.htm$" . html-helper-mode) auto-mode-alist))
Le possibilità sono veramente infinite.
.emacs
Dopo che avrete speso un po' di tempo con Emacs e avrete un'idea basilare di che cosa la personalizzazione possa fare per voi, vorrete probabilmente personalizzare un po' di cose in maniera permanente (o almeno finché non cambiate idea). Se vi ritrovate ad usare Emacs quotidianamente, noterete anche che il vostro file .emacs
diventa sempre più grande con il passare del tempo. Questa è una
Buona Cosa perché significa che avete capito come fare in modo che Emacs lavori nel modo in cui voi volete che lavori. È una vergogna che tanti prodotti software non vi diano la possibilità di fare questo.
Nel caso non lo abbiate ancora indovinato, ogni volta che avviate Emacs, questi cerca un file chiamato .emacs
nella vostra directory home. Il vostro file .emacs
si trova dove dovreste mettere qualsiasi codice Lisp che volete lanciare automaticamente e che include qui il tipo di personalizzazione che abbiamo gestito.
Un altro esempio dal mio file .emacs
:
(setq inhibit-startup-message t)
La variabile inhibit-startup-message
controlla se Emacs mostra o no il messaggio di benvenuto quando si avvia. Dopo un po', mi sono stufato di vederlo (perché sapevo già come trovare o non trovare l'help), quindi ho cercato un modo per disattivarlo.
Come esercizio, provate a creare un file .emacs
da soli e ad aggiungergli la riga riportata sopra. Poi uscite e riavviate Emacs di nuovo. Non dovreste più vedere il messaggio di benvenuto.
Spesso quando leggerete riguardo una modalità di Emacs (o un package), la documentazione suggerirà di aggiungere del codice al vostro file .emacs
in modo da far lavorare la modalità o il package in una maniera particolare.
Le FAQ di GNU Emacs (C-h F
) contengono delle informazioni relative ai file .emacs
che potreste trovare utili.
A mano a mano che Emacs è cresciuto in popolarità e ha continuato ad evolversi, qualcuno evidentemente deve essersi detto ``ci deve essere un modo migliore per i nuovi utenti di personalizzare il loro Emacs.'' E nacque customize
.
Customize fornisce un modo più intuitivo di personalizzare parti di Emacs. Per provarlo, visitate il sottomenù Customize
nel vostro menù Help
, o digitate M-x customize
.
Customize raggruppa le personalizzazioni in gruppi logici come ``Editing'', ``Programming'', ``Files'' e così via. Alcuni gruppi contengono dei sottogruppi.
Se fate dei cambiamenti usando l'interfaccia di customize, Emacs salverà i cambiamenti nel vostro file .emacs
. Questo è piuttosto pratico, perché potete facilmente controllare (e cambiare) i cambiamenti che customize fa per voi.
Io non uso l'interfaccia Customize, quindi non posso dirvi molto altro al riguardo..
Come qualsiasi applicazione X ben fatta, Emacs rispetta le vostre risorse X. Questo significa che potete controllare i colori iniziali, la geometria e altre cose specifiche di X, come potete farlo di solito con un xterm
, nxterm
, o altro.
Ecco qui la parte più importante del mio file ~/.Xdefaults
:
emacs*Background: DarkSlateGray emacs*Foreground: Wheat emacs*pointerColor: Orchid emacs*cursorColor: Orchid emacs*bitmapIcon: on emacs*font: fixed emacs.geometry: 80x25
Consultate la vostra pagina man su X
per maggiori dettagli riguardo le risorse X.
Chris Gray ( cgray4@po-box.mcgill.ca) inoltre nota:
In Debian, il file~/.Xdefaults
non sembra essere usato. Comunque, gli utenti Debian possono mettere quello che hanno stabilito in/etc/X11/Xresources/emacs
e potranno avere i simpatici colori che avevano quando usavano RedHat.