Uno
degli editor più famosi nella storia dell’informatica è Emacs,
è anche uno dei programmi più vecchi che siano tutt’oggi
realmente utilizzati. Uno dei punti chiave di Emacs è la possibilità
di essere completamente programmato in LISP. È quindi possibile
estenderne le funzionalità permettendo di personalizzarlo fino all’inverosimile.
JDE
(Java Development Environment) è un ambiente di sviluppo Java free
basato su Emacs che consente a mio avviso delle capacità di editing
che non hanno niente da invidiare agli IDE più avanzati. Inoltre
offre funzionalità avanzate (e personalizzabili) di autocode per
pattern di programmazione standard e il browsing dei file Java a partire
da un albero di classi e metodi senza che sia necessaria una compilazione.
Inoltre parte dell’ambiente funziona anche con altri linguaggi di programmazione
come ad esempio C, C++ Perl e molti altri linguaggi.
Nel
caso di Java è inoltre supportata la compilazione direttamente da
Emacs con la possibilità di andare alla linea in cui è stato
trovato un errore. Inoltre fa interfaccia a jdb offrendo il browsing del
codice durante il debugging e viene rilasciato con un programma che si
chiama beanshell che è in pratica un interprete Java che permette
direttamente di provare parti di codice.
Emacs
è da tempo un sistema multipiattaforma ed esiste un porting dell’editor
per Windows disponibile con la libreria JDE già configurata all’URL
http://medialab.di.unipi.it/ftp.
Emacs
Emacs
è uno degli editor più vecchi della storia dell’informatica
(secondo solo a vi) è stato sviluppato negli anni settanta da Richard
Stallman. La definizione di Emacs riportata nella documentazione di GNU
Emacs è: un editor avanzato, auto-documentante, personalizzabile,
estendibile e real-time.
A
parte questo enorme slogan si può dire che Emacs sia realmente ciò
che dice di essere, molti sono i suoi meriti primo tra tutti quello di
aver introdotto una filosofia di personalizzazione dell’ambiente di editing
che è stata poi ripresa in molti editor come ad esempio Word di
Microsoft. Le parole veramente chiave nella definizione di Emacs sono:
auto-documentante, personalizzabile e soprattutto estendibile. Sono infatti
queste caratteristiche che permettono ad Emacs di sopravvivere e di crescere
con i bisogni dell’informatica. Tanto per fare un esempio io leggo la mia
posta con Emacs (usando il package RMAIL di Emacs) attraverso POP che notoriamente
non esisteva proprio quando il sistema fu pensato. Il package che uso per
mandare gli attachment è stato scritto (scusate ma lo devo proprio
dire…) da Mark Adresseen quando era ancora all’NCSA.
In
realtà il cuore di Emacs è un interprete LISP con funzionalità
orientate all’editing: offre quindi capacità di matching di espressioni
regolari, di editing dei buffer (le finestre contenenti i documenti) e
di gestione dei file. Il resto è scritto in E-Lisp, un dialetto
del Lisp di Emacs, sfruttando le funzionalità del cuore. La stessa
architettura che ad esempio troviamo in Word che in buona parte scritto
in Word Basic.
Molti
sono i primati che Emacs detiene, i più importanti sono: è
stato il primo editor a permettere di modificare più file in una
sola sessione (ben prima delle interfacce grafiche) sfruttando lo schermo
a caratteri in modo assolutamente geniale; è stato primo editor
completamente programmabile e capace di effettuare editing guidato dalla
sintassi (indentazione automatica del testo); primo editor auto-documentante
in cui le funzionalità aggiunte dall’utente vengono confuse con
quelle di sistema e la documentazione viene gestita in modo uniforme. Chiunque
estenda Emacs può quindi offrire documentazione delle proprie estensioni
che entra a far parte della documentazione dell’editor e può essere
trovata con i meccanismi standard di help offerti dall’editor.
Ogni
volta che uso Emacs resto affascinato della potenza che ha in sé,
potenza che ormai è matura poiché ha molti anni di sviluppo
alle spalle. Ecco quindi che è abbastanza bug free e vi si trova
quasi tutto quello che si potrebbe desiderare per l’editing del testo.
Utilizzare
Emacs
Dopo questa
propaganda sfegatata posso passare a fare una breve introduzione al funzionamento
di Emacs necessario a comprendere il funzionamento di JDE. L’interfaccia
ad Emacs è principalmente orientata alla tastiera. Questo perché
quando è stato sviluppato la tastiera era il vero confine tra l’uomo
e la macchina. Ecco quindi che ci sono alcuni tasti chiave che inizialmente
possono sembrare leggermente oscuri e far rimpiangere un sano menu ma che
successivamente si rivelano essenziali per essere rapidi nella scrittura.
Inoltre l’estrema coerenza delle combinazioni di tasti rendono facile ricordare
le combinazioni di tasti necessari.
Quando
Emacs fu scritto c’erano ancora i vecchi terminali che spesso differivano
non poco nella gestione della tastiera; ad esempio capitava spesso che
i cursori non fossero supportati e quindi diveniva un’impresa configurare
un terminale per l’utilizzo con un certo programma. Per questo motivo Emacs
fu sviluppato ipotizzando una tastiera con le lettere (almeno quelle…),
il ritorno a capo, il backspace, la tabulazione e due metatasti: Control
e Meta. Questi tasti furono scelti perché praticamente sempre disponibili
sui terminali. La scelta fu quindi di offrire tutte le funzionalità
basandosi su combinazione di questi tasti. Ovviamente se poi erano disponibili
tasti come i cursori l’editor rende equivalente la pressione del tasto
e il comando basato sui tasti fondamentali. Il tasto Meta è sostituito
sui PC dal tasto ESC ed è assolutamente equivalente, inoltre Meta
sul PC è emulato con il tasto Alt.
Quando
Emacs viene avviato fornisce delle informazioni sulla versione e sulla
piattaforma oltre ad informazioni essenziali quali ad esempio come ottenere
un tutorial introduttivo oppure come uscire. Spesso quando l’editor indica
un comando lo fa indicando con C- la pressione di Control seguito da una
lettera e con M- la pressione del tasto Meta seguito da un tasto.
Quando
Emacs viene avviato viene aperto un buffer di default chiamato *scratch*
che serve per segnare appunti e il cui contenuto non viene salvato e viene
considerato come appunti non importanti.
Si
può inoltre osservare come sia presente una barra (dove è
riportato il nome del buffer) che contiene molte informazioni relative
allo stato attuale del buffer. Infine vi è una regione sotto questa
barra nota col nome di minibuffer. Questo è un piccolo buffer di
editing dove si specificano di solito i parametri necessari all’esecuzione
di comandi.
Suggerisco
vivamente di eseguire il tutorial per capire meglio l’utilizzo di base
dell’editor, riporto comunque i comandi fondamentali: il comando per aprire
un file è il comando C-x C-f (ovvero Control-x e Control-f),
una volta digitato nel minibuffer Emacs richiede qual’è il nome
del file e il suo percorso. Emacs supporta la name completion ovvero quel
meccanismo che, alla pressione del Tab, cerca di completare i nomi dei
file. Ecco quindi che trovare un file o una directory per aprirla diviene
semplice poiché si possono specificare i prefissi dei nomi e lasciare
ad Emacs il compito di completare il nome. Un altro comando importante
di Emacs è quello per annullare l’operazione in corso e si ottiene
con la pressione di C-g; questo comando si rivela essenziale poiché
consente di interrompere comandi erroneamente avviati. Il comando C-x C-s
permette di salvare il buffer corrente (ovvero la finestra di editing che
contiene il cursore) sul disco.
Restano
da chiarire ora due aspetti fondamentali di Emacs che sono sfruttati ampiamente
da JDE: i buffer e la capacità di indentare il codice automaticamente.
La gestione di più file contemporaneamente è stata rivoluzionaria
poiché era possibile quando non esistevano le interfacce grafiche
ed è tuttora molto utile. Un buffer è in qualche modo simile
ad una finestra di un documento Word, è possibile avere più
buffer aperti contemporaneamente e passare dall’uno all’altro più
o meno come si fa in Word con il menu Window che tiene la lista dei documenti
aperti. Un buffer può essere chiuso con il comando C-x k; nel caso
in cui un buffer sia aperto e se ne apra un altro quello aperto passa in
«background» e quello nuovo viene visualizzato. Per passare
da un buffer all’altro si può usare il comando C-x b mentre il comando
C-x C-b permette di visualizzare la lista dei buffer aperti.
La
capacità di formattare automaticamente il codice è una caratteristica
storica di Emacs che è un esempio classico di editor guidato dalla
sintassi. Il tipo di indentazione che l’editor offre è data dal
modo corrente; quando l’editor viene avviato il modo è Fundamental
e fa comportare l’editor come un editor standard di testo. Se si apre un
file con estensione C il modo diviene appunto C e l’editor indenta automaticamente
una riga di codice alla pressione del Tab. Emacs supporta molti linguaggi
(C, C++, Perl, Fortran, Lisp, Java, Pascal, …) ed è quindi molto
semplice indentare automaticamente il proprio codice.
JDE
Infine
resta un angolino per JDE… D’altronde JDE si appoggia ed estende Emacs
per cui aver descritto Emacs equivale ad aver descritto le funzionalità
di editing di JDE. La domanda che sorge spontanea ora è: che cosa
fa JDE? La risposta è semplice: offre uno strumento essenziale che
si chiama speedbar che permette di fare il browsing di directory di file
e quando si esplode un file ne fa il parsing e mostra in un albero tutti
i metodi e le definizioni in esso contenute. La speedbar può essere
aperta con il comando M-x speedbar (ovvero Alt-x e si digita speedbar nel
minibuffer seguito da invio).
Oltre
a questo essenziale meccanismo di browsing del proprio codice sono offerti
(nel menu JDE che appare quando si apre un file Java) alcuni generatori
di codice che consentono di generare automaticamente pattern di codice
nel proprio sorgente richiedendo solo i parametri necessari.
Un
esempio di questo tipo di interazione si ha con la generazione del pattern
get/set: ovvero della generazione di una variabile e di due metodi, get
e set per accedere alla variabile. Per poter generare il codice è
sufficiente utilizzare il comando M-x jde-gen-get-set e nel minibuffer
specificare su richiesta il tipo della variabile e il nome. Provare per
credere!Infine JDE si offre come interfaccia al compilatore e tramite il
menu è possibile compilare le proprie classi direttamente da Emacs,
è inoltre possibile specificare delle opzioni relative ad un progetto
che vengono salvate in un file e recuperate all’occorrenza.
Conclusioni
In questo
articolo non ho raccontato niente… troppo poco per Emacs, ancora meno per
JDE… spero solo di aver dato un’idea di cosa è l’ambiente e di essere
riuscito ad incuriosire almeno una persona che si scarica il tutto e prova
ad usarlo. |