Le modalità (mode) di Emacs sono differenti ambienti e funzionalità che potete attivare o disattivare (o personalizzare, ovviamente) per usarle in circostanze diverse. Le modalità sono quello che rende un editor (Emacs) ugualmente utile per scrivere documentazione, programmare in una varietà di linguaggi (C, C++, Perl, Python, Java e molti altri), creare una home page, inviare E-Mail, leggere i newsgroup Usenet, tenere traccia dei vostri appuntamenti e perfino giocare.
Le modalità di Emacs sono semplicemente delle librerie di codice Lisp che estendono, modificano o migliorano Emacs in qualche modo.
Ci sono fondamentalmente due tipi di modalità disponibili: Primarie (Major) e Secondarie (Minor). La distinzione non è la cosa più facile da afferrare finché non avrete lavorato con un po' di queste, ma proviamo a darne una spiegazione.
In un dato momento può essere attivata solamente una modalità primaria. Invece nello stesso momento possono essere attive molte modalità secondarie. Le modalità primarie tendono ad essere specifiche di un linguaggio o di un compito, mentre le modalità secondarie sono delle utility più piccole e meno specifiche che riguardano molti compiti.
Suona come qualcosa di astratto, quindi proviamo con un
esempio. C'è una modalità che io uso abbastanza spesso
quando devo scrivere dei vecchi e semplici file di testo. Si chiama text-mode
. Questa modalità fu progettata per scrivere testo in forma libera come in un file README. Capisce come identificare parole e paragrafi e in genere si assicura di fare quello che mi aspetto quando uso i normali tasti di navigazione in un documento.
Quando sto scrivendo testo per uso umano, normalmente voglio che abbia un bell'aspetto. Dovrebbe essere allineato in maniera appropriata ad un valore ragionevole e così via. Per abilitare l'allineamento devo solo attivare la modalità secondaria auto-fill
. Questo modalità cerca di fare la Cosa Giusta quando continuo a scrivere e raggiungo la fine della riga. Il fatto che sia una modalità secondaria significa che può lavorare con diverse modalità primarie. La mia accezione di ``Cosa Giusta'' da fare quando raggiungo la fine della riga è diversa quando sono in text-mode
da quando sono in java-mode
, per esempio. Io non voglio che il mio codice Java sia allineato come se fosse testo in inglese. Ma io voglio che i blocchi di commenti nel mio codice Java siano allineati! La modalità auto-fill
è intelligente abbastanza da capire il tutto.
Gli autori delle varie modalità di Emacs hanno fatto un ottimo lavoro nell'assicurarsi che funzioni che dovrebbero operare come modalità secondarie siano effettivamente delle modalità secondarie.
Se riguardate il disegno in ASCII della schermata di Emacs, noterete che la linea di modo identifica la/le modalità in cui Emacs si trova. Nell'esempio, era in una modalità chiamata ``Lisp Interaction'' che è la modalità di default. È in realtà utile solamente se state per scrivere codice Lisp. (Ma dato che la maggior parte di Emacs è scritta in Lisp, perché no?)
Innanzitutto e molto importante, Emacs è stato elaborato da un programmatore per programmatori. Ci sono modalità di alta qualità disponibili per quasi ogni linguaggio di programmazione più diffuso a cui potete pensare (e perfino per qualcuno non così diffuso). Qui descriverò solo brevemente alcuni di essi.
La maggior parte delle modalità condividono alcune caratteristiche comuni. Normalmente, alcune o tutte delle cose seguenti:
In più, ci sono delle modalità non specifiche di un linguaggio che aiutano per scopi che sono comuni alla programmazione in molti linguaggi. Cose del tipo interfacciamento per il vostro controllo di versione del software, aggiunta automatica di commenti al vostro codice, creazione di Makefile, aggiornamento di Change Logs e così via.
Aggiungendo tutte queste modalità e considerando la maturità e la stabilità del codice di Emacs, questi compete piuttosto bene al paragone con gli Integrated Development Environments (IDE) commerciali sul mercato per linguaggi come C++ e Java. Ed è,ovviamente, gratuito.
Dato che la sintassi del C, C++ e Java sono abbastanza simili, c'è una modalità di Emacs che tratta tutti e tre i linguaggi (lo stesso per Objective-C e IDL). È veramente un maturo e completo package ed è incluso nella distribuzione di Emacs. Questa modalità si chiama cc-mode
o CC Mode
.
Per maggiori dettagli o per scaricare la versione più recente, visitate http://www.python.org/emacs/.
Ci sono di fatto due modalità per l'editing del codice Perl in Emacs. Il primo si chiama perl-mode
(come vi potevate aspettare) e il secondo è cperl-mode
. Non ho una buona padronanza di questa storia e del perché ci sono due modalità (i documenti non lo dicono), ma sembrerebbe che perl-mode
fosse la modalità originale per editare il codice Perl in Emacs. Sembra avere meno servizi del cperl-mode
e manca l'abilità di riconoscere alcuni costrutti estrosi del linguaggio Perl.
Personalmente, io uso e raccomando cperl-mode
il quale sembra essere abbastanza attivamente mantenuto ed ha quasi tutte le funzionalità che potrei mai volere. Potete trovare l'ultima release qui:
ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs.
Ma non prendete le mie parole come definitive. Provateli entrambi e usate quello che meglio soddisfa le vostre necessità.
Anche per Python (un altro linguaggio di scripting molto popolare) è disponibile una modalità Emacs. Per quel che posso dire io, non è distribuito con GNU Emacs ma è distribuito con XEmacs. Comunque funziona abbastanza bene in ambedue gli editor.
Potete ottenere il python-mode
dal sito web ufficiale di Python
http://www.python.org/emacs/python-mode/.
Ci sono tantissime altre modalità di editing disponibili per aiutare i programmatori. Queste modalità aiutano con cose tipo:
E ancora di più. Guardate l'ultima sezione di questo documento per maggiori informazioni per trovare altre modalità e add-in.
Le fantasiose modalità di Emacs non sono limitate solo a quelli che scrivono codice. Anche persone che scrivono documentazione (di qualsiasi tipo) possono beneficiare di un'ampia scelta di modalità di Emacs.
ispell
mode)Gli autori di molti tipi di documenti hanno bisogno di effettuare
ogni tanto il controllo ortografico. Se avete GNU ispell installato, potete digitare M-x ispell
ed effettuare il controllo ortografico sul buffer corrente. Se ispell trova parole che non conosce, vi avvisa con una lista di possibili rimpiazzi e vi permette di selezionarne uno (o nessuno). Le sue funzionalità equivalgono ai controllori ortografici in molti pacchetti software diffusi, non gratuiti.
html-helper
mode)Se vi trovate a dover scrivere file HTML una volta ogni tanto (oppure molte volte), potreste provare html-helper-mode
. È disponibile da
http://www.santafe.edu/~nelson/tools/ oltre alla documentazione ed altro materiale correlato.
Come il suo nome suggerisce, html-helper-mode
fornisce
molte cose per aiutare quelle persone che ancora scrivono HTML a mano
(alla vecchia maniera).
tex-mode
)Quando state scrivendo documenti in TeX, è spesso di aiuto
avere Emacs che aggiunge alcuni colori ed evidenzia le barre inverse,
parentesi graffe ed altri caratteri. tex-mode
si occupa di questo per voi.
Sebbene non scriva più molto direttamente in TeX, quando l'ho fatto, questa modalità si è rivelata abbastanza utile nel rendere i miei sorgenti in TeX un po' più leggibili.
sgml-mode
)Il documento che state leggendo è stato scritto in SGML (e probabilmente convertito nel formato in cui lo state leggendo). sgml-mode
fornisce tutte le basi per i documenti SGML: validazione, evidenziazione, marcatore avanti, marcatore indietro e molto altro. È una parte standard di Emacs.
Ovviamente, ci sono molte altre utili modalità per rendere la vita più facile. Ecco giusto un campione delle più diffuse:
vc
mode)La modalità vc
si interfaccia con la maggior parte dei più diffusi controllori di versione dell'ultim'ora (RCS, SCCS, CVS) per rendere veramente facile il controllo dei file dentro e fuori, gestire release e così via. È una parte standard di Emacs ed è documentata nella documentazione di Emacs.
Perché spostarsi in un'altra finestra X o in una console virtuale solo per far girare pochi comandi della shell? Fatelo da dentro Emacs e evitatevi il problema. :-)
M-x shell
lancerà una shell dentro a un buffer di Emacs. Potete fare con questo buffer la maggior parte di quello che potreste fare al prompt di una normale shell (eccetto che lanciare programmi a tutto schermo come vi
o pine
) poiché Emacs dialoga con la vostra vera shell dietro le quinte.
Anche questa è una parte standard di Emacs, quindi la troverete documentata nella documentazione di Emacs.
Perché spostarsi in un'altra finestra X o in una console virtuale solo per far girare telnet o FTP? Fatelo da dentro Emacs e evitatevi il problema. (Non avete ancora notato il modello?)
Similmente a lanciare una shell all'interno di Emacs, potete fare telnet e ftp. Provate M-x telnet
o M-x ftp
per sperimentarlo da soli. Vedere la documentazione per tutti i grumosi dettagli.
Perché spostarsi in un'altra finestra X o in una console virtuale solo per leggere una pagina man? Fatelo da dentro Emacs e evitatevi il problema. (Smetto! Lo prometto.)
Similmente a lanciare una shell all'interno di Emacs, potete leggere le pagine man. Provate M-x man
per sperimentarlo da soli. Vedere la documentazione per altre informazioni.
Citando la documentazione di ange-ftp
:
Questo pacchetto tenta di dare accesso a file e directory usando FTP dall'interno di GNU Emacs nel modo più semplice e trasparente possibile. Un sottoinsieme delle comuni routine di gestione dei file sono state estese per interagire con FTP.
Questo significa che potete trattare i file in una macchina remota come se fossero in locale. Quindi se avete bisogno di editare un file su un computer remoto, dite semplicemente a Emacs di aprirlo (usando una sintassi leggermente diversa per il percorso) ed egli si occuperà di tutti i dettagli di collegamento e rintracciamento del file. Dopo, quando salvate il file con C-x C-s
, ange-ftp
intercetta il salvataggio e scrive il file sulla macchina remota.
La sintassi leggermente diversa per il percorso è qualcosa di simile... Un file chiamato ``miofile'', in una directory ``user'', su una macchina chiamata ``my.host.org'' può essere aperto aprendo (C-x f
) il file con:
/user@my.host.org:~user/miofile
Anche questo è parte della distribuzione standard di Emacs, quindi potete trovare la sua documentazione nella documentazione di Emacs.
Grazie a Etienne Grossmann ( etienne@anonimo.isr.ist.utl.pt) per l'esempio sopra riportato.