Ecco alcune delle novita` che ci sono in GNU Emacs 21. Molte e` possibile trovarle elencate nel solito Antinews, ma altre non ci sono. In linea generale, GNU Emacs ora si porta in pari con XEmacs dal punto di vista delle feature. Rimangono tra i due le differenze nell'elisp, non tragiche per fortuna. Manca ancora il port per Windows (in corso d'opera... ma non ancora stabile). 1) Supporto di font proporzionali: GNU Emacs ora gestisce anche più font nello stesso documento, ed anche font proporzionali e di diverse dimensioni. In pratica, una `face' ora ha, tra gli altri attributi, anche la famiglia di caratteri e le dimensioni (assolute in decimi di punti tipografici, o relative rispetto alla grandezza del font di default). Una `face' ora puo` ereditare attributi da un'altra `face'. La spaziatura per i font proporzionali viene gestita in maniera furba, ovvero le dimensioni degli spazi e delle tabulazioni vengono calcolate in base alla larghezza di uno spazio del font di default: questo significa che se il font di default e` a larghezza fissa, gli allineamenti vengono rispettati. Non ho ancora trovato un modo per salvare un documento insieme alle face (si, so che esiste l'enriched text mode, ma non e` quello che avevo in mente), o un documento insieme alle sue immagini. Nondimeno, non dovrebbe essere impossibile farlo. 2) Supporto di immagini Ora GNU Emacs e` in grado di gestire immagini all'interno di documenti, ed anche all'interno di toolbar. Esse sono bene o male trattate come una specie di `grande carattere' in un font proporzionale. I formati supportati sono quelli piu` comuni (GIF, PNG, JPEG, TIFF, ed anche PostScript tramite GhostScript). Notare che per default le immagini vengono viste come semplici file binari. Per far si` che C-x C-f e soci le visualizzino come immagini, basta attivare l'auto-image-file-mode (si puo` rendere persistente tramite customize, al solito). Attivandolo, dired puo` diventare un pratico visualizzatore d'immagini (anche se c'e` di meglio in giro). 3) Righe di continuazione e righe fisse Mentre con GNU Emacs 20 e precedenti, le linee di testo piu` larghe di una riga dello schermo venivano rappresentate su piu` righe terminanti con un backslash `\', in GNU Emacs 21 vi sono due sottili barre in cui compare un'iconcina per indicare la cosa (in maniera molto simile se non identica al widget testuale di GTK). Ora e` anche possibile avere una riga di testo che non scorre insieme al resto del buffer. Viene usata ad esempio nel modo info per presentare una barra di navigazione. 4) Audio Ora GNU Emacs supporta direttamente l'audio, senza ricorrere a programmi esterni. Non ho ben chiaro quali formati (e codec) riconosca. Mi pare che Gnus continui ad usare un player esterno, cmq. (ma non uso ancora Gnus, per cui...) 5) Toolbar e tooltip Ora GNU Emacs dispone di toolbar con iconcine per effettuare col mouse le principali operazioni. Altresi`, e` possibile avere dei tooltip sui bottoni. 6) Backup tutti insieme E` finalmente (!) possibile conservare tutti i file di backup in directory specificate dall'utente, senza quindi spargerli in giro per il mondo. Vi possono essere piu` directory di backup in base all'estensione del nome del file. Ovviamente, e` anche possibile il vecchio comportamento. Vedi M-x customize-group backup (ed in particolare, backup-directory-alist). 7) Eshell Si tratta di una shell implementata completamente in elisp, con tanto di comandi UNIX (i.e. ls, cd, etc.). Questo dovrebbe semplificare la vita a chi lavora su Windows e non ha il Cygwin a portata di zampa (o anche a chi lavora su VMS). Notare che alcuni comandi vengono usati anche da altri pezzi di codice elisp (i.e. dired usa l'ls di eshell). C'era anche per GNU Emacs 20, ma e` di serie con Emacs 21. 8) Archivi Ora e` possibile editare direttamente file che sono all'interno di archivi zip (e jar), lzh, arc e zoo, con un modo simil-dired, ripreso da quello usato per i .tar.gz (anzi, IMHO meglio di quello per i .tar.gz). 9) Varie Ora il default e` quello di non aggiungere nuove righe se si scorre oltre la fine del file (ok, prima bastava impostare un'opzione). Il cursore puo` essere lampeggiante (questo era comunque possibile anche con versioni precedenti e un po' di codice elisp addizionale) C'e` un modo secondario per evidenziare la riga di schermo corrente (anche questo possibile in versioni precedenti con un po' di codice elisp). M-x hl-line-mode E` possibile avere del testo colorato anche se GNU Emacs e` in funzione in un terminale testuale (chiaramente con colori limitati). E` possibile evidenziare le modifiche che si stanno apportando al testo. M-x highlight-changes-mode E` anche possibile evidenziare (per default in giallo) delle parole/frasi/etc. all'interno del testo, e vedersele evidenziate non appena si digitano. M-x highlight-regexp e soci. La ricerca incrementale ora puo` anche evidenziare i match attualmente visibili nella schermata corrente (un po' come less). E` il comportamento di default, se non erro. Esiste un modo secondario molto carino che fa si` che un tasto inserisca un carattere se premuto una sola volta, e un altro carattere se premuto due volte di seguito. Utile per le graffe sulle tastiere italiane (o per le accentate su quelle statunitensi). Vedi `M-x customize-group double'. Mi pare che abbia qualche problemino se il carattere da digitare due volte non e` un carattere ASCII... ma non sono ben sicuro. Lo scrolling tramite mouse rotellati ora e` supportato di serie, ma bisogna attivarlo (possibile del restro anche con versioni precedenti, tramite le solite due righe di elisp). Ora tutte le finestre (intese come suddivisione di un frame) di uno stesso frame mostrano un cursore. Quello della finestra attiva e` pieno, mentre quello delle altre finestre e` un rettangolo vuoto. C'e` un modo secondario molto pratica per evidenziare tutti gli spazi (solitamente inutili) che si trovano al termine di una riga (M-x customize show-trailing-space). E` possibile impostare alcune opzioni direttamente da menu` ed e` possibile anche salvarle (quindi senza passare per customize). Stile XEmacs. Il modo secondario Glasses fa si` che nei sorgenti, i nomi di simboli del tipo `pincoPalloPluto' vengano visualizzati come `pinco_Pallo_Pluto', ovvero con degli underscore in mezzo. De gustibus :-) Dato che dired ora usa la versione di `ls' emulata in elisp, e dato che esiste per essa un'opzione che permette di avere le sottodirectory elencate prima di tutti i file, e` finalmente possibile far si` che dired elenchi prima tutte le directory, e poi tutti i file. Grazie al modulo `zebra', ora ps-print-buffer puo` produrre delle stampe con delle righe a sfondo grigio chiaro alternate a righe a sfondo bianco, come i moduli continui di una volta (che fa tanto anni '70, ma che facilita la lettura a chi preferisce gli alberi morti :-) E` possibile avere configurazioni di default diverse per il c-mode, il c++-mode e il java-mode (i.e. rientri di dimensioni diverse). Il c-mode (e i modi derivati da esso quali quelli per c++, java, etc.) e` molto piu` sofisticato, ed inoltre possibile customizzarselo a sangue tramite `M-x customize-group c' (notare in particolare `M-x customize-variable c-offsets-alist'). C'e` un `artist-mode' che piacera` agli amanti dell'ASCII art, visto che permette di disegnare righe, ellissi, rettangoli, etc. con il mouse, riempiti o meno. Tra gli strumenti c'e` anche la bomboletta spray (a quando un frame con i tool stile the Gimp?). Qui c'e` un esempietto: ------- /--- ----------- --/ \-- /------ --/ \-------/ \/----- -/ . - . . --/ \-- \ / ++%#%.-/ \ | / ..###*m/ \ /-------+ / -. .. m%#####| | / | | .. m.+*####*\ / /+---+ | \ . -.#--+#*##**\ /-+-----00000| | \. --- .m-m#%++.--\ /-- |0000000000| | \.. + %+#%. .*------- |0000000000+------+ +. .-. +.-m |0000000000| --\ /-%----------|0000000000| ----------- |0000000000+------- |0000000000| \--------- +----------+ C'e` lo screensaver!!! `M-x zone' fa giochini divertenti con lo schermo quando emacs e` in attesa di input. ...e altre mille cose che non ho ancora visto. :-) -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx