Il sistema di personalizzazione è una funzionalità integrata di Emacs progettata per risolvere con precisione il problema che descrivi: la programmazione potrebbe non essere il modo ideale per l'utente medio di configurare il proprio editor.
Il punto di accesso principale alla funzionalità di personalizzazione è M-x customize RET
(o Options > Customize Emacs > Top-level Customization Group
dal menu). Da lì vedrai un sistema di menu interattivo per regolare le impostazioni. Questa interfaccia impone che tutte le impostazioni siano del tipo corretto (numero, stringa, colore, ecc.), Evitando un'importante fonte di errore riscontrata quando gli utenti configurano Emacs a livello di codice. Se l'utente sceglie di mantenere le modifiche apportate tramite l'interfaccia utente, le impostazioni vengono archiviate in una sezione speciale nel file di inizializzazione dell'utente (leggi:) .emacs
.
defcustom
racchiude le funzionalità di Emacs Lisp di livello inferiore in modo defvar
che entrambe dichiarino la variabile e la rendano visibile nell'interfaccia di personalizzazione. Inoltre, consente allo sviluppatore di fornire metadati extra necessari per visualizzare un controllo interattivo appropriato, ovvero quale tipo di valore è archiviato in questa variabile? Una stringa arbitraria? Un numero? Una scelta da un set fisso di opzioni? ecc. defgroup
è un costrutto di raggruppamento per queste opzioni personalizzabili in modo che possano essere organizzate in una bella gerarchia.
Questa funzionalità deve essere utilizzata ogni volta che un dato deve essere considerato un'opzione configurabile per l'utente piuttosto che un dettaglio interno della libreria.
Ecco un semplice esempio paralizzato da una mia piccola biblioteca:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
Il defgroup
crea un nuovo gruppo all'interno dell'interfaccia di personalizzazione sotto il livello superiore convenience
voce. Avevo quindi bisogno di una variabile per memorizzare i possibili stati della casella di controllo. Avrei potuto usare defvar
, ma poiché voglio che sia facilmente personalizzabile, ho scelto di usare defcustom
. La :group
parte indica che appartiene al gruppo precedentemente definito e :type
indica che è una sequenza di stringhe. C'è anche un valore predefinito e una descrizione. Ci sono anche servizi aggiuntivi (non mostrati qui) per la trasformazione dei valori inseriti dall'utente.
Se ora corro M-x customize RET
e navigo verso Convenience > Checkbox
, vedo quanto segue:
Non è l'interfaccia più bella del mondo, ma nota che ha strumenti interattivi per personalizzare il valore di "Stati checkbox" ( checkbox-states
internamente). Mostra i valori di stringa correnti insieme ai pulsanti INS
(inserisci) e DEL
(elimina) e ci consente di modificare i valori di stringa nelle caselle di modifica. Al termine possiamo decidere se applicare le modifiche, ripristinarle o applicarle e salvarle per sessioni future.
customize
strutture rispetto a quando personalizzare a mano? Oppure sei interessato a scrivere una modalità? Quest'ultima è la situazione in cui potresti trovarti a usare cose similidefcustom
e simili.