4. További lehetőségek

4.1. Reguláris kifejezések

A Mutt-ban minden keresésre és mintára a 'POSIX extended' specifi- kációjú reguláris kifejezést kell megadni, amik többé-kevésbé hason- lítanak az egrep- és GNU awk-nál használt szintaktikára. Lentebb megtalálhatod ennek rövid leírását.

A keresés csak akkor tesz különbséget a kis- és nagybetűk között, ha a mintában található legalább egy nagybetű, egyébként nem tesz különbséget. Ha '\' -t használsz egy reguláris kifejezésben, akkor azt meg kell előznie egy másik '\' -nek: '\\'.
További információkért: lásd a "keresés" részt lejjebb.

A reguláris kifejezések olyan minták, amik egy csoportba tartozó sztringeket írnak le. A reguláris kifejezések létrehozása hasonló a matematikai kifejezésekhez; különböző operátorokat használ kisebb kifejezések összerakására.

Az alapvető építőkockák olyan kifejezések, amik egyetlen karakterre illeszkednek. A legtöbb karakter, beleértve a betűket és a számokat is, olyan kifejezések, amik önmagukra illeszkednek. A többi meta- karaktert, aminek speciális jelentése van, egy megelőző '\'-el lehet megadni.

A pont (.) egy darab bármilyen karakterre illeszkedik. A kalap (^) és a dollár ($) olyan metakarakterek, amelyek a sor elejére ill. végére illeszkednek.

A szögletes zárójelbe ([ ]) zárt karakterek _egy_ olyan karakterre illeszkednek, amely a zárójelben lévők közül kerülnek ki. Ha az első karakter kalap (^), akkor olyan karaterre illeszkedik, amely _nincs_ a zárójelben. Például: a '[0123456789]' csak _egy_ számra illeszkedik. ASCII karakterek csoportját elég csak az első és utolsó karakterrel megadni, amiket egy kötőjel (-) választ el. A legtöbb metakarakter elveszíti speciális jelentését a zárójelen belül. Ha egy ']' -t akarsz berakni, akkor rakd legelőre. Hasonlóan, ha egy '^' -ot akarsz berakni, akkor bárhova rakhatod, kivéve legelőre. Végül kötőjel '-' esetén rakd legutoljára.

Különböző osztályú karakterek előre definiáltak. A karakter osztá- lyokat '[: megnevezés :]' formában adjuk meg. A következő osztályok a POSIX szabványban vannak definiálva:

A karakter osztályok csak a szögletes zárójelben lévő karakter- listában érvényesek. A '[:' és ':]' része a karakterosztályok nevének, s ez nem helyettesíti a a karakterlista kezdetét, végét jelölő szögletes zárójelet.
pl: [[:digit:]] ugyanaz, mint [0-9].

Két további speciális szekvencia szerepelhet a karakter-listában. Ezek lehetővé teszik nem ASCII karakter-készletek számára, hogy egy szimbólumot ('collating element'), amit egy vagy több karakter reprezentál, éppúgy lehessen használni keresésnél, rendezésnél, mint a többi normál karaktert.

'Collating' szimbólumok
A 'collating' szimbólum egy több karakteres elem, ami '[.' és '.]' közé van zárva. Pl: ha 'ch' egy ilyen collating elem, akkor a '[[.ch.]]' erre az elemre fog illeszkedni, míg '[ch]' 'h' -ra vagy 'c' -re.

Ekvivalencia osztályok
Egy ekvivalencia osztály egy hely-specifikus lista neve, amiben az azonos karakterek vannak felsorolva. A nevet egy '[=' és egy '=]' közé kell zárni. Pl: az 'e' név reprezentálhatja az összes 'e'-t és 'é'-t. Ebben az esetben [[=e=]] egy olyan kifejezés, ami illeszkedik bármilyen 'e'-re és 'é'-re.

Az egy karakterre illeszkedő reguláris kifejezést követhet egy vagy több ún. ismétlési operátor:

 ?  Az előző elem opcionális és legfeljebb egyszer illeszkedik.
 *  Az előző elem bármennyiszer illeszkedik (akár 0-szor is).
 +  Az előző elem egyszer vagy többször illeszkedik.
 {n}  Az előző elem pontosan 'n' -szer illeszkedik.
 {n,}  Az előző elem 'n'-szer vagy többször illeszkedik.
 {,m}  Az előző elem legfeljebb 'm'-szer illeszkedik.
 {n,m}  Az előző elem legalább 'n'-szer, de legfeljebb 'm'-szer illeszkedik.

Két reguláris kifejezés összefűzhető, s az eredő kifejezés akkor illeszkedik, ha két összetevő külön-külön illeszkedik.

Két reguláris kifejezés összefűzhető a 'vagy' (|) operátor segítségé- vel. Ekkor az eredő kifejezés akkor illeszkedik, ha az összetevők közül valamelyik illeszkedik.

Precendencia sorrend: ismétlő operátor, összefűzés, változtatás. A kifejezést zárójelbe teheted, hogy a végrehajtási sorrendet megváltoztasd.

Megjegyzés: Ha a belefordítottad a Muttba az 'rx' csomagot, akkor a következő operátorok is használhatók reguláris kifejezésben:

 \y  A szó eleji vagy a szó végi üres sztringre illeszkedik.
 \B  Egy szóban lévő üres sztringre illeszkedik.
 \<  A szó eleji üres sztringre illeszkedik.
 \>  A szó végi üres sztringre illeszkedik.
 \w  Bármilyen 'szöveges' karakterre illeszkedik (betűk, számok, aláhúzás)
 \W  Bármilyen 'nem szöveges' karakterre illeszkedik (lásd fent)
 \`  A buffer (sztring) elején lévő üres sztringre illeszkedik.
 \'  A buffer végén lévő üres sztringre illeszkedik.

Megjegyzés: A POSIX szabvány ezeket az operátorokat nem definiálja, tehát lehet, hogy nem találhatók meg a különböző rendszerek függvény-könyvtáraiban ('stock library').

4.2. Minták

Sok Mutt parancs megengedi, hogy egy illeszkedő mintát adjál meg (limit, tag-pattern, delete-pattern, stb).
Levelek kiválasztására több mód van:

 ~A  összes levél
 ~b EXP  a levél 'EXP' -t tartalmazza a törzsében
 ~B EXP  a levél 'EXP' -t tartalmazza valahol a teljes levélben
 ~c USER  a levél cc -zve van USER-nek
 ~C EXP  a levél 'to:' vagy 'cc:' mezője 'EXP' -re illeszkedik
 ~D  törölt levelek
 ~d [MIN]-[MAX]  levelek `date-sent' -el, a megadott időintervallumban
 ~E  lejárt levelek
 ~e EXP  a levél 'EXP' -t tartalmazza a 'küldő' mezőben
 ~F  megjelölt (flagged) levelek
 ~f USER  a levél USER-től jött
 ~g  PGP-vel aláírt levelek
 ~G  PGP-vel kódolt levelek
 ~h EXP  a levél 'EXP' -t tartalmazza a fejlécben
 ~k  a levél PGP kulcsot tartalmaz
 ~i ID  a levél `Message-ID' mezője illeszkedik ID -ra
 ~L EXP  a levél 'EXP'-től származik, vagy ő kapta
 ~l  a levél egy ismert levelezőlistának lett címezve
 ~m [MIN]-[MAX]  a levél MIN és MAX között van *)
 ~N  új levelek
 ~O  régi levelek
 ~p  a levél neked van címezve (lásd $alternates)
 ~Q  válaszolt levelek
 ~R  olvasott levelek
 ~r [MIN]-[MAX]  levelek `date-received' -el a megadott időintervallumban
 ~S  'superseded' levelek
 ~s SUBJECT  levél 'SUBJECT' -el a `Subject' mezőben
 ~T  kijelölt levelek
 ~t USER  'USER' -nek címzett levelek
 ~U  még nem olvasott levelek
 ~v  a levél egy összehajtott téma része
 ~x EXP  levél ami 'EXP' -t tartalmazza a `References' mezőben
 ~z [MIN]-[MAX]  levelek mérete a [MIN]-[MAX] tartományban *)

A USER, EXP, ID és SUBJECT reguláris kifejezések.

*) Lehetséges a >[MIN], <[MAX], [MIN]- és -[MAX] formákat is használni.

4.2.1. Minta módosítók

Olyan mintáknál, amiknél címek 'listája' szerepel ( c,C,p,P és t), akkor illeszkedik, ha legalább az egyikre illeszkedik az egész listából. Ha biztosítani akarod, hogy a lista összes elemére illesz- kedjen, akkor a '^' prefixet kell használnod.
Ez a példa illeszkedik az összes, Németországból érkezett levélre:

4.2.2. Összetett minták

Logikai ÉS kapcsolat lehetséges több megadott feltétel között. pl:

Ez a feltétel azokat a leveleket választja ki, amiknek a címzettjei között szerepel a 'mutt' és a 'From' mezőben pedig az 'elkins' található.

A következő operátorokkal még összetettebb keresést tudsz írni:

 !  logikai nem
 |  logikai vagy
 ()  logikai csoportosító operátor

A következő példa egy ilyen összetett mintát illusztrál. Ez ki- választja azokat az üzeneteket, amelyek nem tartalmazzák a 'mutt' szót a 'To' vagy a 'Cc' mezőben és 'elkins' -től jöttek.

4.2.3. Dátum szerinti keresés

A Mutt két dátum-típust ismer, ezek: abszolút és relatív.

Abszolút: A dátum NN/HH/ÉÉ formában van. (a hónap és az év elhagyása esetén az aktuális hónapot és évet veszi).
Egy példa dátum-intervallumra:

Ha elhagyod az első dátumot, és csak '-NN/HH/ÉÉ' -t adsz meg, akkor az összes, a megadott dátumnál _korábbi_ levél ki lesz választva. Ha elhagyod a második dátumot, és csak 'NN/HH/ÉÉ-' -t adsz meg az összes, a megadott dátumnál _későbbi_ levél ki lesz választva. Ha csak egy dátumot adsz meg kötőjel ('-') nélkül, akkor csak a megadott napon küldött levelek lesznek kiválasztva.

Relatív: Ez a dátum-típus egy relatív dátum az aktuális dátumhoz képest, s a következőképpen lehet megadni:

>offset (a levél régebbi, mint offset egység)

<offset (a levél újabb, mint offset egység)

=offset (a levél pontosan offset egységnyi régi)

Az offset egy pozitív szám a következő egységekkel:

Pl: Egy hónapnál fiatalabb levelek kiválasztásához a következőt használhatod:

Megjegyzés: A kereséskor használt mindenféle dátum a helyi időzónától függ, így ha nem változtatod meg az "$index_format" változót, hogy benne legyen a %[...] formátum, akkor az itt használt dátumok és az index által mutatott dátum nem lesz azonos.

4.3. Kijelölés használata

Néha kívánatos egy műveletet egy egész csoport levélen elvégezni, s nem egyszerre csak egyen. Ilyen lehet például, ha egy levelezőlista leveleit különböző levelesládákba akarod menteni, vagy pedig egy meg- adott témájú leveleket akarsz törölni. Egy mintára illeszkedő levelek kiválasztása a 'tag-pattern' (alapban: 'Control-T') utasítással tör- ténik. Egyenként a leveleket a 'tag-message' (alapban: 't') utasítás- sal tudod megjelölni.
A pontos szintaxishoz lásd a Minták fejezetet.

Miután kiválasztottad a leveleket, a 'tag-prefix' operátort hasz- nálhatod (alapban ';'), hogy a következő utasítás az összes, a tag -gal jelölt levélre végrehajtódjon. Persze ez csak akkor működik, ha több levélre is végre lehet hajtani az adott utasítást. Ha az "$auto_tag" változó be van állítva, akkor a következő utasítás automatikusan végre lesz hajtva a kijelölt levelekre, így nem lesz szükség a 'tag-prefix' -re.

4.4. 'Hook' -ok használata

A 'hook' (kampó) egy, az Emacs-tól kölcsönzött funkció, ami lehetővé teszi különböző parancsok végrehajtását, megadott dolgok előtt. Például ez lehetővé teszi, hogy feladó vagy levelesláda alapján szabd át a beállításokat. A Mutt világában a 'hook' egy reguláris kifejezés- ből vagy mintából és egy beállító opcióból/utasításból áll. Részletesen lásd a következők leírásánál:

4.4.1. Levélkeresés a 'hook'-ban

Levelekre alkalmazott 'hook'-ok (send-hook, save-hook, fcc-hook) kiértékelésükben eltérnek a többiektől. A különbség a reguláris kifejezések megadásában rejlik, ugyanis levelek kezelésénél finomabb keresésre is szükség van.

A Mutt megengedi a Minták részben említett nyelv használatát a 'hook' parancsoknál. Ez pontosan úgy működik, mint a keresésnél, kivéve, hogy csak azokat használhatod, amik a levél 'borítékján' keresnek. ('from', 'to', 'cc', 'date', 'subject', stb).

Például, ha a címedet meg akarod változtatni, ha egy megadott címre küldesz levelet, akkor a következőt használhatod:

send-hook '~t ^me@cs\.hmc\.edu$' 'my_hdr From: Mutt User '

Ez a megadott parancsot (my_hdr From: Mutt User ) futtatja, ha a 'me@cs.hmc.edu' címre küldesz levelet.

A minták megadásánál nem kötelező a teljes 'keresési' nyelvet használni, megadhatsz egyszerű reguláris kifejezést is, mint a többi 'hook' -nál. Ebben az esetben a Mutt lefordítja a mintádat a 'teljes' nyelvre, a "$default_hook" változó által megadott módon. A minta a 'hook' megadásakor lesz lefordítva, az éppen aktuális "$default_hook" tartalma szerint.

4.5. Külső címadatbázisok elérése

A Mutt támogatja olyan külső adatbázisokhoz való kapcsolódást, mint pl: LDAP, ph/qi, bbdb vagy NIS. Ez a kapcsolattermetés egy szkripten keresztül történik egy egyszerű interface -t használva. A "$query_command" változóval tudod megadni, hogy milyen scriptet használjon.
Pl:

A szkriptnek a kérést (query) a parancssorban kell fogadnia. Visszatérnie egy egysoros üzenettel kell, majd minden válaszra egy sorral, ahol a cím, a név és a többi információ tabbal van elválasztva. Hiba esetén, vagy ha nincs találat, akkor egy nem nulla exit státusszal kell visszatérnie egy egysoros hibaüzenet kíséretében.

Egy példa a több válaszos kimenetre:

    Searching database ... 20 entries ... 3 matching:
    me@cs.hmc.edu           Michael Elkins  mutt dude
    blong@fiction.net       Brandon Long    mutt and more
    roessler@guug.de        Thomas Roessler mutt pgp

Kétféle módon érheted el ezt a lekérdező funkciót a Muttban. Az egyik, hogy a lekérdezést az index menüben indítod (alapban: Q). Ez bekéri a lekérdezést és megjeleníti a találatokat a query menüben. A query menüben címeket választhatsz ki, aliasok készítésre vagy levélíráshoz. A levélíráshoz több címzettet is kijelölhetsz. Egy új lekérdezést is csinálhatsz, s ennek az eredményét hozzáfűzheted a már meglévőkhöz.

A másik mód a query funkció elérésre: címkiegészítés hasonlóan az aliasok esetében. Bármikor, amikor címet kell beadnod, használhatod a complete-query funkciót (alapban: ^T), hogy elindíts egy le- kérdezést a már begépelt cím alapján. Mint az aliasoknál, a Mutt az első szóközig vagy vesszőig nézi vissza a begépelt címet. Ha csak egy válasz van, a Mutt kiegészíti helyben a címet. Több válasz esetén megjelenik a query menü. A query menüben kiválaszthatsz egy vagy több címet is.

4.6. Levelesláda formátumok

A Mutt négyfajta formátumú levelesládát tud írni, olvasni: mbox, MMDF, MH és Maildir. A mailbox típusát automatikusan felismeri, nem kell külön jelölni a különböző formátumokat. Új levelesláda létrehozásakor a Mutt az "$mbox_type" változó szerinti típusút hozza létre.

mbox: Ez a UNIX világban legszélesebb körben alkalmazott formátum. Az összes levél egy fájlban van tárolva. Minden levélben van egy sor:
pl.

ami egy új levél kezdetét jelzi (ezt gyakran hívják 'From_' sornak)

MMDF: Ez az mbox egyik változata. Minden egyes levél '^A^A^A^A' (négy control-A) -t tartalmazó sorral van körülvéve.

MH: Egy radikálisan új megoldás az mbox és az MMDF -hez képest. A levelesláda egy könyvtárból áll, ahol minden levél külön fájlban van tárolva. A fájlnevek a levél számát mutatják (ezek nem azok, amiket a Mutt kijelez). A törölt levelek egy vesszőt (,) kapnak a fájlnév elé. A Mutt ezt a fajta mailboxot az .mh_sequences vagy az .xmhcache fájl megtalálásával azonosítja be (ezzel tudja az MH könyvtárat a 'normál' könyvtártól megkülönböztetni). A Mutt jelenleg még nem frissíti ezeket a fájlokat.

Maildir: A legújabb levelesláda-formátum, amit a Qmail MTA (a sendmail egy alternatívája) használ. Hasonló az MH-hoz, csak ad még három alkönyvtárat a mailboxhoz: ezek 'tmp', 'new' és 'cur'. A fájl- nevekeket úgy választja meg, hogy egyediek legyenek, még akkor is ha két program írja a levelesládát NFS -en keresztül, ami azt jelenti, hogy file zárolásra (locking) nincs szükség.

4.7. Levelesláda rövidítések

Számos beépített rövidítés létezik, amivel különböző levelesládákra tudsz hivatkozni. Ezeket bárhol használhatod, ahol fájl vagy mailbox neve kell.

 !  a "$spool" (bejövő leveleket tartalmazó) mailboxra utal
 >  az "$mbox" fájlra utal
 <  a "$record" fájlra utal
 -  a legutóbb nézett fájlra utal
 ~  a 'home' könyvtáradra utal
 = vagy +  a "$folder" könyvtárra utal
 @alias  az alapbeállítás szerinti mentési levelesládára utal, amit az alias címéből határoz meg a Mutt

4.8. Levelezőlisták kezelése

A Mutt-nak van néhány funkciója, ami megkönnyíti nagy mennyiségű levelek kezelését. Az első dolog, hogy tudasd a Mutt-tal, milyen címek tartoznak a levelező listákhoz (persze ennek nem kötelező levelezőlistának lennie, de általában erre szokták használni). Ezt a 'lists' paranccsal tudod megtenni a muttrc-ben.

Most, hogy a Mutt tudja, milyen címek tartoznak a levelező listákhoz, számos szolgáltatást tud nyújtani; először is mutatja a levelező lista nevét az index menüben. Ez arra jó, hogy megkülönböztesd a személyes és a listás leveleket. Az "$index_format" változóban az escape '%L' visszatér 'To <list>' sztringgel, ha 'list' szerepel a 'To' mezőben, és 'Cc <list>' sztringgel, ha 'Cc' mezőben szerepel (egyébként a feladó nevével tér vissza).

A listás levelek 'To' és 'Cc' mezői gyakran nagyon hosszúak. A legtöbb ember nem törődik vele, hogy kitörölje a levél feladóját, akinek válaszol a listáról, ami azt eredményezi, hogy az illető két vagy több másolatot kap ugyanabból a levélből. A 'list-reply' funkció (alapban: L) az index és pager menüben megpróbálja kikerülni ezt a problémát úgy, hogy a választ csak a levelezőlistára küldi, s nem az összes feladónak.

A másik megoldás, amit néhány levlista admin használ, hogy egy 'Reply-To' mezőt ad a fejlécbe, ami a levlista címére mutat, s nem az eredeti feladóra. Ez akkor okoz problémát, ha az eredeti feladónak akarsz magánlevelet írni, mivel a legtöbb levelezőprogram automatikusan a 'Reply-To' mezőben lévő címre küldi el a választ. A Mutt-ban a "$reply_to" változóval tudod meghatározni, hogy melyik címet használja. Ha 'igaz', akkor rákérdez, hogy a 'Reply-To' mezőben lévő címre, vagy a 'From' mezőben lévő címre akarod-e a levelet küldeni. Ha 'hamis', akkor 'Reply-To' mezőt használja, ha van.

Végül a Mutt képes a leveleket téma szerint rendezni. Egy témába olyan levelek csoportja kerül, amik ugyanarra a 'Subject' -re hivatkoznak. Ezeket rendszerint egy fa-stuktúrába rendezi, ahol a levél és a hozzátartozó összes válasz grafikusan látszik. Ugyanaz a koncepció, mint egy 'threaded news' kliens esetén. Ez könnyűvé teszi nagy mennyiségű levelezőlistás levél kezelését, mert könnyen tudod törölni a számodra érdektelen témákat, és gyorsan meg tudod találni a számodra értékeseket is.

4.9. 'Delivery Status Notification' (DSN) (Levélküldés visszajelzése) támogatás

Az RFC1894 definiál egy adag MIME tartalom típust a megbízható email státusz jelzésére. Ezt fel lehet fogni nyugtázásnak is. A Berkeley sendmail 8.8.x -nek van néhány kapcsolója, amivel a levelező program kérést küldhet arról, hogy milyen tipusú visszajelzést igényel.

Két változóval tudod ezt kihasználni: "$dsn_notify" -t arra lehet használni, hogy 'nyugtát' kérjen a különböző eredményekhez (pl: 'failed message' (ha a levelet nem sikerült elküldeni), 'message delivered' (levél továbbítva), stb). A "$dsn_return" megadja, hogy a leveled mennyi részének kell visszatérnie nyugtával. Részletesebben a DSN -ről a sendmail manual oldalban (man sendmail) olvashatsz.

4.10. POP3 támogatás (opcionális)

Ha a Mutt POP3 támogatással lett lefordítva (a 'configure' parancsot az '--enable-pop3' kapcsolóval indítottad), akkor képes arra, hogy távoli szerverről letöltse a leveleidet. Amikor elindítod a 'fetch-mail' funkciót (alapban: G), a Mutt megpróbál bejelentkezni a "$pop_host"-ra mint "$pop_user". Miután ez sikerült, a Mutt bekéri a távoli gépen lévő POP3 jelszavadat.

Miután beengedtek, a Mutt leszedi az összes új leveledet, és egy helyi "$spoolfile" -ba rakja. Ezután minden úgy történik, mintha helyi leveleket olvasnál.

Megjegyzés: a POP3 támogatás csak kényelmi funció, kevés szolgáltatása van. Speciális igényekhez érdemes egy erre kihegyezett programot, mint pl: fetchmail -t használni.

4.11 IMAP támogatás (opcionális)

Ha a Mutt az IMAP támogatással lett fordítva (a 'configure'szkriptet az --enable-imap kapcsolóval indítottad), akkor képes egy távoli IMAP szerveren lévő levelesládákkal dolgozni.

A távoli levelesládát az {imapserver}inbox levelesláda kiválasz- tásával tudod elérni, ahol az imapserver az IMAP szerver neve, az inbox a beérkező leveleidet tartalmazó levelesláda neve. Ha más mailboxot akarsz elérni, akkor {imapserver}path/to/folder formátumot kell használnod, ahol a path/to/folder a home könyvtárad- ból nyíló útvonal a kívánt mailboxhoz.

Megjegyzés: Az IMAP támogatás most még eléggé kezdetleges és instabil. Ha biztosabb módon akarod elérni az IMAP levelesládádat, használj egy erre specializált programot, pl. fetchmail-t.

4.12 WWW böngésző indítása URL-re (külső)

Ha a levél URL-eket tartalmaz (Unified Resource Locator = egységes erőforrás mutató, mint például egy ilyen cím: http://www.mutt.org), hatékony szolgáltatás egy menü megjelenítése az összes URL-el és az a lehetőség, hogy egy WWW böngészőt tudsz indítani az egyikre. Ezt a funkciót egy külső 'urlview' program valósítja meg, amit az ftp://ftp.guug.de/pub/mutt/contrib/ helyről lehet letölteni, és a következő konfigurációs parancsokkal lehet beizzítani: