Il colore è un mezzo per esercitare sull'anima un'influenza diretta. Il colore è il tasto, l'occhio il martelletto che lo colpisce, l'anima lo strumento dalle mille corde. [Kandinsky]
Personalizzare il Look 'n Feel di Mutt
Mutt può essere personalizzato profondamente anche nell'aspetto e nei tasti associati ai comandi. In questo capitolo vedremo i principali settaggi per renderlo adeguato all'occhio e alle mani del suo utilizzatore.
In particolare, impareremo la personalizzazione di:
- Colori.
- Informazioni visualizzate nelle diverse finestre (menu).
- Altre minuzie sull'aspetto.
- Tasti associati ai comandi (key binding).
- Compiti "complessi" tramite le macro.
Personalizzazione Colori
Affinchè i colori di Mutt siano per noi gradevoli e, soprattutto, affinchè il suo utilizzo sia il più efficiente possibile, possiamo colorare a nostro piacimento molti degli oggetti visualizzati da Mutt nei suoi diversi menu.
Per conseguire tale scopo utilizziamo il comando color, la cui sintassi è:
color oggetto foreground background [ regexp ]
Oltre agli oggetti più sotto descritti, possiamo colorare anche i messaggi elencati nell'index menu, che corrispondono ad un determinato search pattern.
In tal caso la sintassi del comando color sarà la seguente:
color index foreground background pattern
In entrambi i casi dobbiamo specificarne sia il colore di primo piano (foreground) che quello di sfondo (background).
Gli oggetti che possiamo colorare sono i seguenti:
- attachment (colore degli attachment del messaggio)
- body (colore del testo, nel corpo del messaggio che matcha la regexp)
- bold (highlighting del testo marcato come bold, mediante *blabla*, nel corpo del messaggio)
- error (colore dei messaggi di errore visualizzati da Mutt)
- header (colore degli header che matchano la regexp)
- hdrdefault (colore di default degli header del messaggio visualizzati nel pager)
- index (colore degli oggetti nell'index menu che matchano la regexp)
- indicator (colore della freccia o della barra che indica l'item selezionato in un elenco di un menu)
- markers (colore del + inserito all'inizio delle linee per segnalare che si tratta di riga mandata a capo forzatamente)
- message (colore dei messaggi informativi visualizzati da Mutt)
- normal (colore di default per tutto ciò che non viene personalizzato)
- quoted (colore del testo nel corpo del messaggio che matcha la regexp definita con la variabile quote_regexp, illustrata nel capitolo dedicato alla lettura messaggi)
- quoted1, quoted2, ..., quotedN (colore dei vari livelli di testo quotato)
- search (highlighting dei termini che matchano una ricerca effettuata con il comando "/")
- signature (colore della signature del messaggio)
- status (mode lines used to display info about the mailbox or message)
- tilde (colore della tilde (~) utilizzata per marcare le linee vuote alla fine di un messaggio)
- tree (colore delle linee con cui viene disegnato un thread di messaggi)
- underline (highlighting del testo marcato come sottolineato, mediante _blabla_, nel corpo del messaggio)
I colori di primo piano e di sfondo che possiamo utilizzare sono:
- white
- black
- green
- magenta
- blue
- cyan
- yellow
- red
- default
- colorx
Semprechè il tipo di terminale utilizzato lo supporti, con "default" possiamo ottenere uno sfondo trasparente.
L'utilizzo di "colorx" può essere necessario quando abbiamo rimappato i colori del nostro terminale e il nome "proprio" del colore non ha più una reale corrispondenza. In tal caso potremo utilizzare color1, color2, ecc..
Premettendo al nome del colore di primo piano "bright" (ad es.: brightyellow), otteniamo il colore in bold (enfatizzato).
La sequenza di comandi color che ciascuno intende far eseguire a Mutt per avere la colorazione desiderata deve essere inserita nel file di configurazione .muttrc. Personalmente preferisco tenere questa parte dei settaggi in un file a parte, richiamato dal .muttrc mediante il comando source.
Dopo aver creato il nostro file di configurazione dei colori (chiamato, ad esempio, colori_mutt), potremo caricarlo nel .muttrc in questo semplice modo:
source /path/del/file/colori_mutt
Una precisazione va fatta sulle modalità di esecuzione dei comandi color da parte di Mutt. Mutt li esegue tutti nell'ordine in cui sono elencati e ogni volta che trova una corrispondenza imposta il colore.
Pertanto, le regole generali vanno messe prima di quelle particolari, altrimenti queste ultime verrebbero sovrascritte: l'ultima regola matchata prevale sulle precedenti!
Di seguito un esempio di colorazione tratta dal mio file. Gran parte dei settaggi sono ricavati dai file di setup di Sven Guckes, insuperato cultore della materia muttiana. Preciso che lo sfondo trasparente con questi colori dovrebbe essere bianco.
# COLORI SU SFONDO TRASPARENTE
# colorazione elementi generali del programma
color normal black default # testo normale color search brightyellow red # testo trovato con una ricerca color message brightyellow black # messaggi di informazione di mutt (ultima riga) color error brightred black # messaggi di errore di mutt (ultima riga) color status brightyellow blue # righe di stato (status bars)
# colorazione elementi nell'index menu e attachment menu
color indicator brightwhite cyan # la barra che indica il messaggio attuale color tree red default # frecce dei thread
# colorazione messaggi nell'index menu
color index blue default "~P !~N !~T !~F" # messaggi da me 1 color index brightblue default "~P ~N !~T !~F" # messaggi da me 2 color index green default "~F" # messaggi importanti (!) - comando "F" color index yellow default "~T !~F" # messaggi tagged (*) e non flagged - comando "t" color index brightblack default "! ~C ." # To: e Cc: vuoti color index brightgreen default "~N !~T !~F" # messaggi nuovi (N) e non tagged o flagged color index red default "~U" # messaggi vecchi non letti (O) color index color5 default "~Q" # messaggi già risposti color index cyan default "!~N ~D" # messaggi marcati (D) per cancellazione 1 color index brightcyan default "~N ~D" # messaggi marcati (D) per cancellazione 2
# colorazione nell'index dei messaggi "pesanti"
color index brightblack default "!~N ~z 10240-" # vecchi color index brightred black "~U ~z 10240-" # vecchi non letti color index brightgreen black "~N ~z 10240-" # nuovi
# colorazione dei messaggi in base al punteggio assegnato mediante scoring
# (diventa ridondante se si ordinano i messaggi per score)
color index cyan default '(~n 1-4)' # messaggi con score 1-4 color index green default '(~n 5-7)' # messaggi con score 5-7 color index blue default '(~n 8-10)' # messaggi con score 8-10 color index black default '(~n 11-50)' # messaggi con score 11-50 color index black default '(~n 51-100)' # messaggi con score 51-100
# colorazione headers visualizzati nel pager
color hdrdefault brightwhite color7 # colorazione di default degli header (bianco/grigio: poco visibili) color header color1 default "^(subject):" # header subject: (rosso mattone/bianco: ben visibile) color header green default "^(date):" # header date: (verde/bianco: ben visibile) color header blue default "^(from):" # header from: (blue/bianco: ben visibili) color header black default "^(to):" # header to: (nero/bianco: ben visibile) color header red default "^(X-Face):" # header X-Face: (rosso/bianco: ben visibile)
# colorazione elementi vari contenuti nel corpo del messaggio
color bold blue default # grassetto color underline green default # sottolineato color attachment blue default # file MIME allegati al msg color signature green default # firma (signature) color markers brightred white # + a inizio riga mandata a capo color tilde cyan default # ~ alla fine dei messaggi color body blue default "[*][-[:alnum:]]+[*]" # Testo *enfatizzato* color body red default "/[-[:alnum:]]+/" # Testo /enfatizzato/ color body green default "_[-[:alnum:]]+_" # Testo _enfatizzato_ color body cyan default "^[*] .*:$" # Attribution line color body brightred default "[(][cr][)]" # (C)e (r) color body brightred default "\\$[a-zA-Z][-_a-zA-Z]+" # variabili (es: $HOME) color body brightred default ">?[;:][-^]?[][)(><}{|/DP][)}]*" # Emoticons (:-) etc...) color body brightred default "\<\w( +\w\>)+" # Testo s p a z i a t o color body red default "[!?]{3,}" # Testo con 3 o più "!" o "?" consecutivi color body red default "\\~?\(/[-_.,a-zA-Z0-9{}]+\)+" # "/path/file" color body yellow default "\(/[-_.a-zA-Z0-9]+\)+/" # "/path" color body yellow default "[a-zA-Z]:[-_.a-zA-Z0-9\\]+" # Nomi di file in ambiente DOS/Windows color body brightred default "[.0-9]+ ?%" # Numero percentuale color body brightgreen default "[-_=+~/\*]{3,}" # Linee per bordatura testo color body magenta default "[-0-9]{9,12}[0-9X]" # ISBNs (codici libri) color body magenta default '\<[A-Z]\w+\>' # Testo in maiuscolo color body brightblack default "(Francesco|Ciattaglia)" # IO, citato nel testo del messaggio color body brightblack default "(Ataualpa!ataualpa)" # Il mio alias, citato nel testo del messaggio
# colorazione url vari contenuti nel corpo del messaggio
color body blue default "(http|https|ftp|news|telnet|finger)://[^ \">\t\r\n]*" # URLS color body blue default "www\\.[-.a-z0-9]+\\.[a-z][a-z][a-z]?([-_./~a-z0-9]+)?" # www senza http color body blue default "<URL:[^ ]*>" # URL: color body blue default "[-a-zA-Z_0-9.+]+@[-a-zA-Z_0-9.]+" # indirizzo email color body blue default "mailto: *[^ ]+\(\\?subject=[^ ]+\)?" # link mailto:
# colorazione orari e date contenuti nel corpo del messaggio
# Ora
color body blue default "([01]?[0-9]|2[0-4])([.:][0-5][0-9])?([.:][0-5][0-9])? ?(am|pm)? ?"
# Intervalli
color body blue default "[012][0-9][.:][0-5][0-9](am|pm)? ?- ?([012][0-9][.:][0-5][0-9](am|pm)?)?"
# 1980-1989
color body blue default "19[89][0-9]"
# 2000-2009
color body blue default "200[0-9]"
# dd[/-]mm[/-]yy
color body blue default "\([012][0-9]|3[01])[/-](0[0-9]|1[012])[/-](19|20\)?[0-9][0-9]"
# dd.m.yy
color body blue default "(0?[1-9]|[12][0-9]|3[012])[.] ?([1-9]|1[012])[.] ?(19|20)?([0-9][0-9])?"
# yyyy-mm-dd
color body blue default "\(19|20\)?[0-9][0-9][/-](0[0-9]|1[012])[/-]([012][0-9]|3[01])"
# weekdays ita 1
color body blue default "((L|l)unedì|(M|m)artedì|(M|m)ercoledì|(G|g)iovedì)"
# weekdays ita 2
color body blue default "((V|v)enerdì|(S|s)abato|(D|d)omenica)"
# weekdays eng 1
color body blue default "((M|m)onday|(T|t)uesday|(W|w)ednesday|(T|t)hursday)"
# weekdays eng 2
color body blue default "((F|f)riday|(S|s)aturday|(S|s)unday)"
# gg mese anno (gennaio)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((G|g)en(naio)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (febbraio)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((F|f)eb(braio)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (marzo)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((M|m)ar(zo)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (aprile)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((A|a)pr(ile)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (maggio)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((M|m)ag(gio)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (giugno)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((G|g)iu(gno)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (luglio)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((L|l)ug(glio)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (agosto)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((A|a)go(sto)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (settembre)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((S|s)et(tembre)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (ottobre)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((O|o)tt(obre)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (novembre)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((N|n)ov(embre)?)\\> *((19|20)?[0-9][0-9])?"
# gg mese anno (dicembre)
color body blue default "((0?[1-9]|[12][0-9]|3[01])[.]? ?)?\\<((D|d)ic(embre)?)\\> *((19|20)?[0-9][0-9])?"
# colorazione testo quotato contenuto nel corpo del messaggio
color quoted cyan default # colore di default del testo quotato color quoted1 magenta default # testo quotato 1° livello
^top
Personalizzazione layout (cosa e come visualizzare)
Sappiamo che Mutt lavora per menu, ovvero per finestre dedicate alle varie operazioni. Per garantire la massima personalizzazione possiamo utilizzare il settaggio di alcune particolari variabili per decidere quali informazioni (e in che ordine) Mutt deve visualizzare, tra quelle disponibili e coerenti con il tipo di menu.
Informazioni visualizzate nel browser menu
Per questa personalizzazione settiamo la variabile folder_format, il cui valore di default è:
Default: "%2C %t %N %F %2l %-8.8u %-8.8g %8s %d %f"
Le informazioni che possiamo far visualizzare con folder_format sono:
%C | numero progressivo dei file/mailbox elencate | |
%d | data e ora di ultima modifica del file/mailbox | |
%f | nome del file/mailbox | |
%F | permessi del file/mailbox | |
%g | gruppo di appartenenza del file/mailbox | |
%l | numero di hard links | |
%N | mostra il flag "N" se la mailbox ha nuovi messaggi | |
%s | dimensione del file/mailbox in bytes | |
%t | mostra il flag "*" se il file/mailbox è taggato | |
%u | proprietario del file/mailbox | |
%>X | giustifica a destra il resto della stringa e riempi gli spazi con "X" | |
%|X | riempi gli spazi fino alla fine della linea con "X" |
Oltre a questi codici possiamo anche scrivere del semplice testo.
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt quali infomazioni dei file/folder mostrare nel browser
# menu
# C=n° del file; t="*" se il file è tagged, else blank; N="N" se il
# folder ha nuova posta, else blank; f=filename; s=dimensione file in
# bytes; d=data/ora ultima modifica file/folder.
set folder_format = "[%2C] %t %N %-40.40f (dim: %8s) ultima modifica: %d"
Informazioni visualizzate nell'index menu
Il settaggio del layout dell'index menu lo avevamo anticipato nel Capitolo dedicato alla lettura dei messaggi. Lo riproponiamo, dettagliandolo, per avere il quadro completo di tutte le possibili personalizzazioni dei menu di Mutt.
Per questa personalizzazione settiamo la variabile index_format, il cui valore di default è:
Default: "%4C %Z %{%b %d} %-15.15L (%4l) %s"
Le informazioni che possiamo far visualizzare con index_format sono:
%a | indirizzo dell'autore del messaggio |
%b | nome del file del folder originario del messaggio ??? |
%B | la lista a cui il messaggio è stato spedito, altrimenti il nome del folder (%b) |
%c | n° di caratteri (bytes) nel messaggio |
%C | numero progressivo del messaggio elencato nell'indice |
%d | data e ora del messaggio convertite al fuso orario del mittente (formato settato con date_format) |
%D | data e ora del messaggio convertite al fuso orario locale (formato settato con date_format) |
%e | numero del messaggio corrente all'interno del thread |
%E | numero di messaggi nel thread corrente |
%f | From: completo (indirizzo email + nome) |
%F | nome dell'autore del messaggio (del destinatario se il mittente è l'utente) |
%i | id del messaggio corrente |
%l | numero di linee nel messaggio |
%L | mostra To list-name se spedito a mailing list specificata con lists (altrimenti come %F) |
%m | numero totale dei messaggi nella mailbox |
%M | numero dei messaggi contenuti in un thread collassato |
%N | punteggio del messaggio |
%n | nome dell'autore del messaggio (o indirizzo email se il nome manca) |
%O | _O_riginal save folder: il nome della mailing list o del destinatario |
%s | soggetto del messaggio |
%S | stato del messaggio (N/D/d/!/r/*) |
%t | campo To: (destinatario del messaggio) |
%T | valore, per il messaggio, in base al settaggio della variabile to_chars |
%u | user name (login) dell'autore del messaggio |
%v | nome proprio dell'autore del messaggio (destinatario se l'autore è l'utente) |
%y | valore dell'header x-label:, se presente |
%Y | xlabel (solo se: msg non in un thread o 1° di un thread, xlabel <> da precedente nel thread) |
%Z | status flag del messaggio |
%{fmt} | data e ora messaggio convertite al fuso del mittente |
%[fmt] | data e ora del messaggio convertite al fuso locale |
%(fmt) | data e ora locale di ricezione messaggio |
%<fmt> | ora locale attuale |
%>X | giustifica a destra il resto della stringa e riempi gli spazi con "X" |
%|X | riempi gli spazi fino alla fine della linea con "X" |
I codici fmt, tra gli ultimi elencati, vengono esplosi utilizzando la libreria strftime. Premettendo un "!" (punto esclamativo) si disabilita il locale.
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt quali informazioni dei messaggi mostrare nella finestra
# dell'indice dei messaggi (per ciascun messaggio)
# C=n° del msg; N=score del msg; Z= status flag msg; b=nome del
# file msg; d=data/ora msg; n=autore o address del msg; l=n° linee msg;
# M=numero messaggi nel thread; s=soggetto del msg.
set index_format = "(%3C)[sc.%2N] %Z %{%b %d} DA: %-25.25n (lin:%4l msg:%2M) %s"
Informazioni visualizzate nella status line
Per questa personalizzazione settiamo la variabile status_format, il cui valore di default è:
Default: "-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---"
Le informazioni che possiamo far visualizzare con status_format sono:
%b | numero delle mailbox con nuovi messaggi * |
%d | numero dei messaggi cancellati * |
%h | nome del localhost |
%f | pathname completa della mailbox |
%F | numero dei messaggi flaggati * |
%l | dimensione (bytes) della mailbox attiva * |
%L | dimensioni (bytes) dei messaggi mostrati (che matchano il modello limitatore attivo) * |
%m | numero dei messaggi nella mailbox * |
%M | numero dei messaggi mostrati (che matchano il modello limitatore attivo) * |
%n | numero di nuovi messaggi nella mailbox * |
%o | numero di vecchi messaggi non letti |
%p | numero di messaggi posposti * |
%P | percentuale "paginata" |
%r | indicatore di modificato/sola-lettura/non modificabile/attach-message mode (settato con status_chars) |
%s | attuale metodo di ordinamento (sort) |
%S | attuale metodo di ordinamento secondario (sort_aux) |
%t | numero di messaggi taggati * |
%u | numero di messaggi non letti * |
%v | versione di Mutt |
%V | modello limitatore attivo * |
%>X | giustifica a destra il resto della stringa e riempi gli spazi con "X" |
%|X | riempi gli spazi fino alla fine della linea con "X" |
I codici segnati con "*" visualizzano il valore solo se diverso da zero
Con un'apposita sintassi è possibile condizionare la visualizzazione del valore di un codice se il valore di un altro (o dello stesso) codice è diverso da zero.
La sintassi è la seguente:
%?<sequence_char>?<optional_string>?
sequence_char è uno dei codici sopra elencati.
optional_string è la stringa che si vuole visualizzare se il valore del codice inserito come condizione (sequence_char) è diverso da zero).
La stringa può essere del semplice testo o un altro codice.
Un esempio (tratto dal Manuale di Mutt), con cui vediamo come far visualizzare il numero di nuovi messaggi solo se ce ne sono:
%?n?%n nuovi messaggi?
E' anche possibile visualizzare i valori di due codici diversi sempre ponendo come condizione che il valore di un codice (uno dei due, o un altro ancora) sia diverso da zero.
La sintassi in tal caso dev'essere la seguente:
%?<sequence_char>?<if_string>&<else_string>?
sequence_char è uno dei codici sopra elencati.
if_string è la stringa da visualizzare quando se il valore del codice inserito come condizione (sequence_char) è zero
else_string è la stringa da visualizzare quando il valore di sequence_char è diverso da zero.
Estendendo l'esempio precedente:
%?n?no nuovi messaggi&%n nuovi messaggi?
Per visualizzare in minuscolo forzatamente, il codice va fatto precedere dal segno underscore (_).
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt quali informazioni della mailbox visualizzare nella
# riga di fondo dell'index menu (status line).
set status_format = " %f (%r) DIM: %l MSGS: %?M?%M/?%m%?n? NEW: %n?%?o? OLD: %o?%?d?\
DEL: %d?%?F? FLAG: %F?%?t? TAG: %t?%?p? POSTP: %p?%?b? INC: %b?%?l?? (SORT: %s/%S)%> (%P) "
Informazioni visualizzate nella status line del pager
Per questa personalizzazione settiamo la variabile pager_format, il cui valore di default è:
Default: "-%Z- %C/%m: %-20.20n %s"
Le informazioni che possiamo far visualizzare con pager_format sono le stesse disponibili con la variabile index_format (vedi sopra).
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt quali informazioni mostrare del messaggio visualizzato
# nel pager. (Informazioni visualizzate sulla riga di fondo del pager).
set pager_format = " [STATUS FLAGS: %Z] DA: %f"
Informazioni visualizzate nella status line del compose menu
Per questa personalizzazione settiamo la variabile compose_format, il cui valore di default è:
Default: "-- Mutt: Compose [Approx. msg size: %l Atts: %a]%>-"
Le informazioni che possiamo far visualizzare con compose_format sono:
%a | numero totale degli attachment nel messaggio |
%h | nome del localhost |
%l | dimensione (bytes) del messaggio corrente |
%v | versione di Mutt |
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt quali informazioni mostrare nella riga di fondo
# (status line) del compose menu.
set compose_format = "-- Compose Menu [Dim. messaggio: circa %l N° Attach: %a (compreso il msg di testo)]%>-"
Informazioni visualizzate nell'attachment menu
Per questa personalizzazione settiamo la variabile attach_format, il cui valore di default è:
Default: "%u%D%I %t%4n %T%.40d%> [%.7m/%.10M, %.6e%?C?, %C?, %s] "
Le informazioni che possiamo far visualizzare con attach_format sono:
%D | flag di marcatura per la cancellazione |
%d | descrizione dell'attachment |
%e | codifica MIME per il trasferimento dell'attach |
%f | nome del file |
%I | tipo di allegato (I=inline, A=attachment) |
%m | tipo MIME |
%M | sottotipo MIME |
%n | numero progressivo dell'attachment |
%s | dimensione dell'attachment |
%t | flag di attachment taggato |
%u | flag di attachment da cancellare |
%>X | giustifica a destra il resto della stringa e riempi gli spazi con "X" |
%|X | riempi gli spazi fino alla fine della linea con "X" |
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt quali informazioni dei messaggi mostrare nella finestra
# dell'attachment menu.
# n=n° attach; u=unlink(delete) flag; D=flag deleted attach; t=flag
# tagged attach; f=filename; I=disposizione attach (I=inline, A=attach)
# >=giustifica a destra stringa restante; m=mime type; M=mime subtype
# e=mime content; s=size
set attach_format = "%2n %u %D %t %-25.25f %I %> [%.7m/%.10M, %.6e%?C?, %C?, %s]"
Nell'attachment menu possiamo inoltre personalizzare la stringa visualizzata per gli allegati del tipo message/rfc822, mediante il settaggio della variabile message_format, il cui valore di default è:
Default: "%s"
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt le info mostrate nell'attachment menu relative
# agli allegati che sono del tipo message/rfc822
# Default: "%s"
set message_format="%-.16n: %s"
Informazioni visualizzate nell'alias menu
Per questa personalizzazione settiamo la variabile alias_format, il cui valore di default è:
Default: "%4n %2f %t %-10a %r"
Le informazioni che possiamo far visualizzare con alias_format sono:
%a | alias |
%f | flag (attualmente implementato "d" per alias marcato per la cancellazione) |
%n | numero progressivo dell'alias elencato nel menu |
%r | indirizzo email corrispondente all'alias |
%t | carattere che indica l'alias taggato per l'inclusione tra i destinatari del messaggio |
Di seguito un esempio tratto dal mio .muttrc:
# indica a Mutt le informazioni mostrate nell'alias menu
# a=alias; n=index number; r=indirizzo; t=tag-character
# f=flags (d per cancellato)
set alias_format="%4n %2f %t %-12a %r"
^top
Personalizzazione di altre piccole cose
Settaggio del formato della data visualizzata mediante "%d"
Per questa personalizzazione settiamo la variabile date_format, il cui valore di default è:
Default: "!%a, %b %d, %Y at %I:%M:%S%p %Z"
I valori impostati in date_format vengono passati a strftime che li processa per comporre la data come richiesto. Pertanto per i valori utilizzabili in date_format utilizziamo la man page del comando (man strftime).
Inserendo come primo carattere della stringa il "!" (punto esclamativo), il giorno della settimana e il mese verranno visualizzati in formato alfabetico esteso (es: lunedì, aprile).
Affinchè strftime formatti le date nella nostra lingua è opportuno settare la variabile locale (valori validi quelli altrimenti accettati dal sistema nell'impostare la variabile di sistema LC_TIME).
Di seguito un esempio tratto dal mio .muttrc:
# la variabile controlla il formato della data che verrà
# visualizzata da Mutt quando si utilizza la sequenza "%d".
set date_format = "%d.%m.%y, %H:%M"
# indicazione del tipo di localizzazione (usato da strftime per
# formattare le date)
set locale = "it_IT.ISO-8859-1"
Settaggio degli indicatori visualizzati con "%r" in status_format
Per questa personalizzazione settiamo la variabile status_chars, il cui valore di default è:
Default: "-*%A"
Possiamo impostare 4 caratteri che nell'ordine hanno questo significato:
- il primo viene visualizzato nel caso di mailbox non modificata
- il secondo nel caso di mailbox modificata che necessita di sincronizzazione
- il terzo nel caso di mailbox acceduta in sola lettura, oppure che non recepirà eventuali cambiamenti una volta che saremo usciti. Tale ultimo comportamento di Mutt viene impostato attraverso il comando toggle-write che, di default, è collegato alla pressione del tasto "%" quando si è già all'interno della mailbox da non modificare in uscita.
- il quarto è utilizzato per indicare che il folder è aperto in modalità attach-message) (in questa modalità non sono permesse operazioni quali la composizione di un nuovo messaggio, il reply, il forwarding, ecc..)
Io non ho finora sentito la necessità di personalizzare tali caratteri; pertanto non ho un esempio dal mio .muttrc.
Settaggio dei file da visualizzare nel browser menu
Per questa personalizzazione settiamo la variabile mask, il cui valore di default è:
Default: "!^\.[^.]"
Di seguito un esempio tratto dal mio .muttrc:
# espressione regolare per indicare a Mutt quali file mostrare nel file
# browser (il match è case sensitive) (. = tutti)
# per indicare quali file NON mostrare usa l'operatore not (!)
# all'inizio della regexp;
# (default: "!^\.[^.]" non mostra directory e file nascosti)
#set mask = "!^." non mostra file nascosti
set mask = "."
Altri semplici settaggi con solo l'esempio del .muttrc
# indica a Mutt di visualizzare la riga di aiuto sulla 1.ma riga
# (default = yes)
set help = yes
# indica a Mutt se visualizzare la status line sulla prima (top)
# (default = no, ovvero status line sull'ultima riga)
set status_on_top = no
# se settato a yes indica a Mutt di usare i caratteri ASCII per
# visualizzare nell'indice dei messaggi gli alberi dei threads e degli
# allegati (invece dei caratteri ACS di default)
# (default = no)
set ascii_chars = no
# indica a Mutt se presentare i thread che contengono messaggi
# non letti in modo compresso (collapsed) o meno.
# (default = yes)
set collapse_unread = yes
# se settato a yes Mutt salta al primo messaggio non letto (se c'è)
# del thread al momento della sua esplosione
# (default =no)
set uncollapse_jump = yes
# se settato a yes, nel pager Mutt manda a capo le righe più lunghe
# dello schermo tagliando tra una parola e l'altra il testo.
# (default = yes)
set smart_wrap = yes
# se settato a yes, nel pager Mutt visualizza un '+' all'inizio
# delle righe mandate a capo (vedi anche smart_wrap)
# (default = yes)
set markers = yes
# se settato a yes, nel pager Mutt visualizza una tilde (~) al posto di
# eventuali righe bianche alla fine del messaggio nel pager interno
# (default = no)
set tilde = yes
# la stringa indica a Mutt il formato del soggetto di default quando si
# fa il forward di un messaggio
# (Default: "[%a: %s]")
set forward_format = "[(fwd): %s]"
^top
Personalizzazione tasti associati ai comandi
Gran parte dei comandi di Mutt sono per default associati a tasti la cui mnemonizzazione viene facilitata dall'essere quasi sempre espressi attraverso la prima lettera del comando stesso (ad esempio: d per delete, a per attachment, r per reply, ecc...).
Mutt ci permette in ogni caso di rimappare i comandi sulla tastiera attraverso il comando bind, la cui sintassi è:
bind map key function
map consente di specificare in quale menu dobbiamo applicare la personalizzazione.
Ricordiamo infatti che lo stesso tasto può essere associato a comandi diversi a seconda del menu in cui ci troviamo (per estendere l'esempio sopra: a sta per attachment nel compose menu, ma a sta per crea alias nell'index menu o nel pager).
Le mappe che possono essere specificate sono:
- generic
- browser
- index
- pager
- compose
- attach
- postpone
- alias
- editor
- pgp
La map editor è riferita al line editor, ovvero alla linea in cui si inseriscono i comandi, le ricerche, ecc..
key è il tasto o la sequenza di tasti a cui va associato il comando che vogliamo personalizzare.
Il comando bind non distingue tra maiuscolo e minuscolo: riprendendo l'esempio sopra, \cA, \ca, \CA, \Ca, equivalgono tutti a \ca.
Se proprio volessimo utilizzare una key maiuscola, possiamo inserire il suo codice numerico su 3 cifre, ottenibile tramite il programma showkey (installato di default credo da tutte le distribuzioni linux. In Debian fa parte del pacchetto console-tools)
I tasti "funzione" come l'invio, il tab, ecc.. possono essere specificati nel modo seguente:
\t | tasto TAB |
<tab> | tasto TAB |
\r | Invio a capo (carriage return) |
\n | Nuova linea (new line) |
\e | tasto Esc |
<esc> | tasto Esc |
<up> | tasto freccia sù |
<down> | tasto freccia giù |
<left> | tasto freccia sinistra |
<right> | tasto freccia destra |
<pageup> | tasto Pag sù |
<pagedown> | tasto Pag giù |
<backspace> | tasto Backspace |
<delete> | tasto Canc |
<insert> | tasto Ins (insert) |
<enter> | tasto Invio |
<return> | tasto Return |
<home> | tasto Home |
<end> | tasto Fine |
<space> | barra spaziatrice |
<f1> | tasto funzione F1 |
<f10> | tasto funzione F10 |
Una precisazione per quanti non ricordano la differenza tra il tasto return e il tasto enter, messi in confusione anche dai produttori di tastiere, che spesso li segnano allo stesso modo (sulla mia tastiera su entrambi è stampata la dicitura Invio).
- Return è il tasto di "a capo" posto a destra della regione occupata dai tasti alfabetici.
- Enter è il tasto di "invio" inserito nel cosiddetto tastierino numerico.
Il tasto Enter è mappato come Return se il tastierino numerico non è abilitato, pertanto per avere Enter come Enter (scusate il gioco di parole) dobbiamo prima premere il tasto Bloc Num!
Le più comuni sequenze di tasti prevedono l'utilizzo dei tasti Control o Esc associati ad un secondo tasto. Per specificare tali sequenza la sintassi è la seguente:
Control + a | \ca |
Esc + a | \ea oppure \<esc>a |
function è il comando di Mutt da mappare sulla key per il menu indicato.
Per l'elenco completo di tutti i comandi che possiamo mappare a nostro piacimento consiglio di vedere il manuale di Mutt al Capitolo 6.2 Functions.
La rimappatura dei comandi è una funzione molto utile per chi usa più programmi a ama ritrovare le stesse fuzioni sugli stessi tasti passando da uno all'altro.
Nel mio utilizzo quotidiano del programma ho trovato utile rimappare solo alcuni tasti, così come possiamo vedere dal .muttrc di esempio:
# tramite il comando bind si personalizzano (rimappano) le funzioni
# dei tasti nelle diverse finestre
bind pager <up> previous-line bind pager <down> next-line bind pager <left> previous-entry bind pager <right> next-entry bind index \t collapse-thread
^top
Le macro per eseguire compiti più complessi
Le macro sono la funzione più adatta se vogliamo mappare a dei tasti non una funzione "elementare" di Mutt ma una vera e propria sequenza di comandi, anche con il richiamo a programmi esterni.
Nei capitoli precedenti abbiamo di fatto già introdotto il tema macro, illustrando come alcune funzionalità potessero essere realizzate proprio con delle macro.
Vediamo adesso in modo più strutturato l'argomento, lasciando poi alla fantasia di ciascuno di inventare nuovi modi di utilizzo di Mutt.
Il comando che Mutt ci mette a disposizione è macro, la cui sintassi è:
macro menu key sequence [ description ]
key e sequence sono utilizzate con le stesse modalità del keybinding (sequence ha lo stesso significato di function).
description è la facoltativa descrizione della macro, visualizzata nell'help menu di Mutt.
Diversamente dal comando bind, possiamo specificare una key maiuscola (ad esempio Y viene interpretata correttamente e la macro, per essere eseguita, va lanciata con la combinazione shift + y).
In aggiunta, può essere specificato l'utilizzo del tasto Control in sequenza con un tasto (ad esempio B), mediante ^X (ad esempio ^B).
Inoltre, è possibile specificare:- una key mediante <key name>
- una function mediante <function name>
Il vantaggio dell'utilizzo dei nomi di funzioni è che la macro funziona a prescindere dall'attuale settaggio dei tasti (keybinding). Questo può essere un vantaggio quando vogliamo definire un file di configurazione (.muttrc) di sistema, utilizzabile da utenti diversi, ciascuno con un suo settaggio dei tasti.
Di seguito, le ulteriori macro che utilizzo personalmente (non ripetiamo quelle già inserite in altri capitoli).
# questa macro consente di scaricare la posta tramite fetchmail
# senza dover uscire da Mutt (grazie michael prokop)
macro generic Y "!echo 'sto controllando la posta sul server..'; fetchmail\n"\
"Controlla la posta con fetchmail"
macro index Y "!echo 'sto controllando la posta sul server..'; fetchmail\n"\
"Controlla la posta con fetchmail"
macro pager Y "!echo 'sto controllando la posta sul server....'; fetchmail\n"\
"Controlla la posta con fetchmail"
# macro di antonio fragola - mr. shark, slightly modified by Ataualpa
# consente di inserire l'address di un mittente in un file usato poi
# come black list da procmail quando smista la posta in arrivo.
# il messaggio processato viene automaticamente segnato per la
# cancellazione. # viene eseguita premendo "esc K"
macro index \eK "| formail -x From: | addysort >> ~/Mail/.Pm/black.lst\r"\
"Killa il mittente (lo scrive nella black list)"
macro pager \eK "| formail -x From: | addysort >> ~/Mail/.Pm/black.lst\r"\
"Killa il mittente (lo scrive nella black list)"
# macro per leggere il manuale html di Mutt alla pressione del tasto F1
# verificare la path (ok per Debian).
# verificare di avere il browser testuale lynx installato
# oppure sostituirlo con un altro browser
macro generic <f1> "!lynx /usr/share/doc/mutt/html/manual.html\n" \
"Visualizza il manuale di Mutt"
macro index <f1> "!lynx /usr/share/doc/mutt/html/manual.html\n" \
"Visualizza il manuale di mutt"
macro pager <f1> "!lynx /usr/share/doc/mutt/html/manual.html\n" \
"Visualizza il manuale di Mutt"
macro attach <f1> "!lynx /usr/share/doc/mutt/html/manual.html\n" \
"Visualizza il manuale di Mutt"
La macro per killare utenti indesiderati, oltre al programma formail, fa ricorso allo script addysort, che di seguito riportiamo. Copiatelo in un file chiamato addysort (o come volete, ma dopo adattate la sintassi della macro), spostate il file in una directory come /usr/local/bin e rendetelo eseguibile (rwxr-xr-x)
#!/usr/bin/perl -wn
# Estrae l'indirizzo email dall'attuale riga "From:"
unless (/\</) { print; } else { print /<([^>]+)/, "\n"; }
^top
Conclusione
In questo sesto capitolo abbiamo imparato come:
- Colorare i messaggi elencati nell'index menu.
- Colorare degli oggetti di testo visualizzati dal pager.
- Definire le informazioni visualizzate:
- nel browser menu.
- nell'index menu.
- nella status line.
- nella status line del pager.
- nella status line del compose menu.
- nell'attachment menu.
- nell'alias menu.
- Definire il formato della data visualizzato poi da %d.
- Definire i caratteri utilizzati come indicatori relativi alla mailbox.
- Definire i file da visualizzare nel browser menu.
- Personalizzare altri piccoli aspetti.
- Personalizzare i tasti associati ai comandi (keybinding).
- Utilizzare le macro per eseguire operazioni più complesse.