[No News] [About] [Copertina]

Articoli



Emacs

Introduzione

Emacs e` sicuramente un'editor che esce dalla comune accezionde di editor come programma per comporre e correggere testi. Proprio per questo suscita vivaci discussioni, per non dire vere guerre sante, dove ambedue i campi schierano ragioni egualmente valide. La verita' e` che l'editor e` come l'abbigliamento intimo e lo spazzolino da denti, ognuno ha il suo. Scopo di questo articolo non e` fare proseliti ne` lanciare battaglie del tipo ``il mio e` migliore del tuo''. L'obiettivo e` provare a far luce su questo programma che a chi non lo conosce appare come un anziano drago multicolore. In realta' scoprirete che e` un servizievole gnu...

Davanti al grande dragone variopinto.

Spiegare cosa e` Emacs e` facile e difficile allo stesso tempo. Il suo autore lo definisce "The extensible self-documenting text editor." e penso proprio che mi seguiro' questa definizione, "Editor estensibile autodocumentante", per la mia piccola discussione.

Emacs (Editor MACroS, plurale inglese Emacsen) e` infatti una famiglia di editor programmabili dotati di help ipertestuale ed in grado di aggiornare con strumenti propri tale help. Di tale famiglia i piu' noti sono sicuramente lo GNU Emacs ed Xemacs, che rispetto al precedente vanta una migliore interfaccia grafica.

Per la cronaca, l'editor ufficiale del progetto GNU e` lo GNU Emacs, come afferma Stallman nel manifesto :

``So far we have an Emacs text editor with Lisp for writing editor commands, a source level debugger, a yacc-compatible parser generator, a linker, and around 35 utilities.''

Programmabile...

Ma andiamo per gradi. Partiamo dalla parola programmabile. Emacs, come chiaramente dice Stallman, e` un editor dotato interprete LISP per la scrittura dei suoi comandi, cosa che accresce la fama terribile. Analizzandola bene, si scopre che la scelta del LISP e` una buona scelta, non solo perche' il LISP puo' inglobare le nuove funzioni definite dall'utente in maniera molto elegante, ma anche perche' permette di dare strumenti che lavorino in maniera dettagliata sul testo senza pero' dover avere a che fare sui dettagli rappresentativi dello stesso.

Ma torniamo ad Emacs. lanciate Emacs (uno dei vari della famiglia, penso che i piu' comuni siano Gnu Emacs e Xemacs - gia' Lucid Emacs) senza altri parametri vi trovere te che una riga in basso vi dice tra l'altro *scratch* e (Lisp Interaction). E` uno ``scratchpad'' dove provare funzioni il lisp, un po' come l'ambiente BASIC dei vecchi home.

Se invece caricate Emacs specificando il nome di un file, ad esempio il classico pippo, la riga in fondo, che si chiama mode-line, dira' tra l'altro pippo e (fundamental). Emacs ha riconosciuto un file ed ha caricato il programma per l'editing generico, il cui scopo e` di rendere Emacs pronto ad editare un file di tipo non specificato.

Sia chiaro che nulla vi vieta di scrivere un file nel buffer *scratch*. La particolarita' del modo Lisp Interaction e` solo quella di valutare espressioni lisp se si preme Linefeed (Control J) alla fine delle stesse, ma ha le stesse capacita' del modo fondamentale ci potete scrivere anche un programma in C, una testo in TeX e ogni altra cosa (quasi ogni altra cosa, la lettera alla morosa no, e` raro che le morose apprezzino i computer, quindi una lettera scritta col computer potrebbe avere risultati spiacevoli).

Ma non e` il modo piu' redditizio di lavorare con Emacs, dato che questo editor e` in grado di riconfigurarsi secondo i dettami di vari modi, ciascuno pecifico per uno o piu' tipi di file. Il modo Fundamental e` un po' il template per i vari modi dedicati che si possono creare ed anche un modo jolly valido per tutto anche se specifico per nessuna situazione. Esistono ovviamente altri modi modi dedicati a varie situazioni di editing, sopratutto linguaggi di programmazione e TeX, ma anche per il semplice testo ascii, come ad esempio il modo a-capo automatico. Inoltre ci sono sotto modi aggiuntivi che forniscono serviscono servizi come la colorazione sintattica o l'espansione di abbreviazioni.

Oltre al LISP ci sono modi per Assembler, C, C++, Java, FORTRAN, Pascal e molti altri meno diffusi. Non mancano modi per TeX, LATeX, BibTex, SlyTex e Texinfo. Quest'ultimo e` un strumento che permette di generare sia documentazione ipertestuale (quella usata da Emacs) e la corrispondente documentazione cartacea, via TeX. Il manuale di Emacs e il Dizionario del Gergo degli Hacker sono scritti con questo strumento. E cosi' abbiamo anche parzialmente spiegato il termine "autodocumentante". Completeremo fra un attimo la spiegazione, prima conviene chiudere il discorso sui modi.

Ho detto che un modo riconfigura l'editor. Ed infatti passando da un modo all'altro Emacs cambia piu' o meno drasticamente il suo modo di fare. Ad esempio nei modi dedicati al LISP, al Pascal, al C ed al C++ il tasto TAB attiva il riposizionamento della riga in corso in modo da rispettare un'identazione regolare. Nel modo FORTAN invece il TAB porta la riga corrente (se non c'e` un commento) a cominciare nella settima colonna, mentre le label vengono automaticamente fatte cominciare in prima colonna.

Ci sono anche cambiamenti piu' consistenti, come la comparsa di nuovi menu', o la nuova assegnazione di comandi ai vari tasti, come il modo directory editor, antesignano del Norton Commander con tutti i suoi simili.

L'utente ha vari mezzi per personalizzare il modo, dal piu' brutale cambiarbe i sorgenti e ricompilarli, allo scriversi le sue funzioncine LISP e sfruttare gli 'hook' di ogni modo da associare la loro esecuzione a determinate situazioni (ad esempio quando il modo viene attivato, si possono ridefinire alcuni tasti per attivare i nuovi comandi).

O si puo' anche scrivere un modo nuovo che faccia cose nuove, ed entrare cosi' nella lunga lista di coloro che hanno contribuito alla libreria di comandi di Emacs.

Per fare un'esempio, quando i terminali a caratteri erano l'unica interfaccia disponibile verso il sistema, molta genere usava un paio di package di Olin Shivers per interagire con la shell attraverso buffer di Emacs. Questo infatti permetteva di avere l'editing della linea corrente, accedere a tutto l'output della sessione, ma non solo. Grazie ad opportune macro il LISP, Shivers diede alla Bourne Shell anche l'history. Emacs dal canto suo permetteva gia' di dividere lo spazio dello schermo in due, o di alternare il buffer visualizzato. E usando vari buffer per varie sessioni shell...

E dopo la shell vennero Telnet, FTP, gestione dell'e-mail, gestione delle news. Giochi. E ultimamente anche il WWW, che torna utilissimo quando c'e` sul sistema della documentazione in formato HTML, come nel caso della documentazione di LATeX al DEI di Padova.

Autodocumentante...

Se avete scordato la sequenza di tasti per il comando che vi serve (e non e` tra quelli nel menu') se non ricordate qual'e` l'uso di una funzione od una variabile, ecco qui cosa permette di avere il sistema di help di emacs:

"You have typed C-h, the help character.  Type a Help option:
(Use C-v or M-v to scroll through this text.
Type q to exit the Help command.)

a  command-apropos.  Give a substring, and see a list of commands
	(functions interactively callable) that contain
	that substring.  See also the  apropos  command.
b  describe-bindings.  Display table of all key bindings.
c  describe-key-briefly.  Type a command key sequence;
	it prints the function name that sequence runs.
f  describe-function.  Type a function name and get documentation of it.
C-f Info-goto-emacs-command-node.  Type a function name;
	it takes you to the Info node for that command.
i  info. The  info  documentation reader.
k  describe-key.  Type a command key sequence;
	it displays the full documentation.
C-k Info-goto-emacs-key-command-node.  Type a command key sequence;
	it takes you to the Info node for the command bound to that key.
l  view-lossage.  Shows last 100 characters you typed.
m  describe-mode.  Print documentation of current major mode,
	which describes the commands peculiar to it.
n  view-emacs-news.  Shows emacs news file.
p  finder-by-keyword. Find packages matching a given topic keyword.
s  describe-syntax.  Display contents of syntax table, plus explanations
t  help-with-tutorial.  Select the Emacs learn-by-doing tutorial.
v  describe-variable.  Type name of a variable;
	it displays the variable's documentation and value.
w  where-is.  Type command name; it prints which keystrokes
	invoke that command.
C-c print Emacs copying permission (General Public License).
C-d print Emacs ordering information.
C-n print news of recent Emacs changes.
C-p print information about the GNU project.
C-w print information on absence of warranty for GNU Emacs."

Basta ? Beh, con le versioni correnti per X11 l'help e` accessibile anche dal menu' help!

Emacs invoglia ogni autore di funzioni a documentare il suo lavoro. E` un'operazione molto semplice, in quanto ogni funzione ha nella sua definizione una stringa che ne documenta l'uso, e che viene mostrata dal sistema di help di Emacs ogni volta che si richiede la descrizione della funzione stessa. Non ci sono limiti alla lunghezza della stringa, e infatti non capita raramente di avere descrizioni lunghe anche una pagina.

Questo e` il mio kludge per fare in modo che al modo LATeX venga aggiunto un tasto che attiva il caricamento delle pagine HTML con la documentazione on line di LATeX :

;;*********************************
;; That's a kludge, not an hack!
;;*********************************
;; Patch del modo latex
;;*********************************

;; Help di Latex in formato HTML

( defun w3-load-latex-help-other-frame ()
"Richiama l'help di latex in formato HTML"
(interactive)
(setq use-this-buffer (make-frame '((name . "LaTeX HELP") 
				    (width . 80) 
				    (height . 44 ) 
				    (background-color . "gray93") 
				    (foreground-color . "blue")
				    (cursor-color . "skyblue")
				    (mouse-color . "yellow"))))
(select-frame use-this-buffer)
(w3-open-local "/usr/local/lib/tex/html/index.html")
)

( defun latex-mode-with-w3-help ()
"Replacement per il latex mode, attiva W3"
(interactive)
(require 'w3)
(LaTeX-mode)
(local-set-key "\M-s" 'w3-load-latex-help-other-frame))
;;------------------[end kludge]-------------------------

Potete notare che subito dopo la riga con la definizione compare una stringa tra doppi apici. E` la documentazione allegata alla funzione.

Se infatti chiedo di descrivere la funzione latex-mode-with-w3-help ottengo:

latex-mode-with-w3-help: an interactive compiled Lisp function.
(latex-mode-with-w3-help)

Replacement per il latex mode, attiva W3

che indica che la funzione e` interattiva (richiamabile dall'utente), compilata in bytecode e ne offre la breve spiegazione allegata.

Editor ma non solo...

Visto che molta gente trovava scomodo mail e desiderava quanlcosa di meglio -magari integrato col proprio editor preferito-, per Emacs venne creato un package per gestire la posta, ed un secondo ne venne fatto per Xemacs, con un look molto simpatico.

E dalla considerazione che Emacs veniva caricato piu' e piu' volte per spedire news, venne l'idea di dotare Emacs di un lettore di news Usenet.

La posta puo' essere letta con due package, RMAIL e VM, quest'ultimo specifico per Xemacs. VM non lo conosco molto, ha una bella interfaccia grafica, RMAIL e` piu' spartano, alla Elm, ma ad esemio tiene traccia anche del fatto che sia stata spedita risposta ad una lettera. Per la gestione delle estensioni mime dispone del modulo di lettura metamail e di comandi specifici alla "mimificazione" del messaggio contenuti in una appostita libreria. Volendo puo' essere attivata la gestione delle accentate secondo lo standard ISO-8859.1, ricordandosi pero' che lavorare su 7 bit e` meglio.

Gnus e` il programma per leggere le news. Ha funzionalita' simili a Xrn, e modifica la barra dei menu', per cui e` facile da usare. Sotto Xemacs modifica anche la toolbar, e le icone hanno un senso di de-ja-vu'...

Il comodo di usare gnus ed rmail e` che se siete abituati ad usare Emacs per scrivere gli articoli, non dovete aspettarne il caricamento. Come plus c'e` il modo supercite, che gestisce in maniera intelligente la marcatura delle parti del messaggio citato, evitando se possibile l'effetto montagna delle citazioni multiple.

Infine i giochi. Gomoku, Blackbok, Life, Eliza sono 4 passatempi simpatici. Eliza e` un famoso programma che sembra capire quello che gli dite. Sotto emacs si chiama Doctor. Tra i giochi metto anche il programma LISP che sposta il cursore del mouse quando il cursore del testo si fa troppo vicino. Il perche' viene da alcuni modi di agire che hanno nomi buffi (cat-and-mouse) o comportamenti al limite del demenziale (proteus).

Per chi vuole cominciare.

Il piu' facile tra i vari Emacs e` probabilmente Xemacs, che tra toolbar e menu' e` di una semplicita' estrema. Ogni cosa e` controllabile via GUI.

Gnu Emacs ha un'interfaccia X un po' piu' ostica, ma ha anche lui menu' e scrollbar (dalla 19.27.1 almeno). Paga la fatica dell'apprendimento con la maggiore velocita'.

Entrambi hanno un tutorial on line, che permette di prendere manualita' con i principali comandi di editing.

Per chi viene da VI, e deve suo malgrado usare Emacs, consiglio il modo VIPER ( Viper Is a Package for Emacs Rebels; it is a VI Plan for Emacs Rescue and/or a venomous VI PERil), un'emulazione dei comandi da tastier a del Vi per GNU Emacs 19 e Xemacs 19.

Un modo analogo, anche se meno propagandato e documentato, e` disponibile per gli utenti Wordstar.

Il supporto di gruppi usenet disponibile (almeno al DEI) e` il seguente :

alt.lucid-emacs
alt.lucid-emacs.bug
alt.lucid-emacs.help
alt.religion.emacs
comp.emacs
comp.emacs.help
gnu.emacs
gnu.emacs.announce
gnu.emacs.bug
gnu.emacs.gnews
gnu.emacs.gnus
gnu.emacs.help
gnu.emacs.lisp.manual
gnu.emacs.sex
gnu.emacs.sources
gnu.emacs.vm
gnu.emacs.vm.bug
gnu.emacs.vm.info
gnu.emacs.vms

di Gian Uberto Lauri


[No News] [About] [Copertina]