Operační systémy typu Unix si po celá desetiletí uchovávaly jistou auru exkluzivnosti, přístupnosti pouze pro elitu. Od adeptů na správce systému se vyžadovalo podstoupit proces postupného zasvěcování, ne nepodobný přijímání do zednářské lóže. V rámci iniciace bývalo nutné podstoupit i zkoušku nejtěžší, a sice začít používat textový editor vi.
Troufám si říct, že vi je editor, který svoji dobu předběhl rovnou o několik tisíciletí. Především má svoji osobnost – nejde o obyčejný program, ale o AI (=artificial inteligence). Posuďte sami: při svém prvním setkání s editorem vi jsem se dostal do stejné situace, jako všichni ostatní začátečníci, a nebyl jsem schopen program ani ukončit. Musel jsem proto ukončit celé telnetové spojení a přihlásit se znovu. A hle: „You have new mail.“ Pochopitelně, šlo o značně vyčítavý dopis od samotného editoru vi. Stěžoval si, že prý sem se ho pokusil zabít, nebo něco v tom smyslu.
Rozhodl jsem se, že bude pro nás oba lepší, když vzájemný styk omezíme na nezbytné minimum, tzn. občasný pohled na hypnoticky prázdnou obrazovku s jediným sloupcem nadtržítek (vlnovek) podél levého okraje, následovaný zdvořilým, leč rezolutním rozloučením „:q!“ (pozor – uvozovky nejsou součástí příkazu. Po jejich stisknutí by se jistě stalo něco temného a osudového, nicméně bohužel nevím co…).
Asi nejsem sám, kdo před tím, než narazil na Linux používal DOSovský program T602 a Borlandí programátorské editory (Turbo Pascal, Turbo Basic, Turbo C). S editorem Turbo Pascalu jsem se setkal dokonce ještě pod CP/M. Moje sympatie k Unixu značně vzrostly, když jsem se dozvěděl že pro podobně postižené jako jsem já je ve většině Unixových systémů včetně Linuxu k dispozici editor joe.
Zadal jsem příkaz „joe“, a rázem jsem zapomněl na to, že bych si snad měl ve světě Unixu připadat jako nezvaný host. V pravém rohu obrazovky se objevilo vlídné „Ctrl-K H for help“, což jsem také učinil – a joe se tím pádem pro mě stal spolu s poštovním klientem pine zcela nejnepostradatelnější Unixovou aplikací.
Asi jedinou podstatnou odlišností editoru joe od DOSovských programů je to, že blok se přesouvá Ctrl-K M, místo tradičního Ctrl-K V. Šlo by to lehce předefinovat, ale implicitní rozmístění kláves v Joeovi má svou logiku, a vyplatí se na něj zvyknout.
Editorem joe je možné celkem snadno infikovat jiný systém (tedy pokud znáte rootovské heslo). Okopírovat stačí /usr/bin/joe, usr/lib/joe/joerc a volitelně /usr/man/man1/joe.1.
V některých distribucích Linuxu jsem se setkal s tím, že soubor ~/.joerc (vzniklý z /etc/skel/.joerc) byl vadný a joe dělal dost divné věci; standardní /usr/lib/joe/joerc se ale vyrovná s čímkoliv, co je odvozené od terminálu vt102, takže pokud vás joe zlobí, postačí vetšinou smazat soubor .joerc ve vašem domovském adresáři (správce systému by měl smazat i nepodařený originál v adresáři /etc/skel) Pokud používáte nějakou exotickou hodnotu proměnné TERM, můžete definovat ještě proměnnou JOETERM, abyste joea poněkud uklidnili (např. export JOETERM=vt100).
Joe sám sebe definuje jako „mode-less ASCII-text screen editor“. Tím je myšleno to, že program se nachází pouze v jednom základním stavu (dokonce i když si necháte přes polovinu okna zobrazit nápovědu) a nemá ani žádné menu, které by omylem mohlo být aktivní místo okna editoru. Když si uvědomíte, kolik jiných „moderních“ programů vás nutí být neustále ve střehu a přemýšlet, nad kterým objektem je zrovna myš, který objekt má „focus“ apod., tak si tuto jednoduchost oblíbíte.
To ale neznamená, že jde o program primitivní. Snad jediná věc, kterou joe (zatím) neumí, je syntax highlighting. Jinak nabízí obrovskou škálu možností spolupráce s ostatními unixovými programy a obsahuje spoustu triků, které ulehčí život zejména programátorům v céčku (ale i v ledasčem jiném). Řadu věcí, které joe umí, jsem slyšel zmiňovat mezi nenahraditelnými přednostmi editorů jako je vi nebo emacs, ale i jiných. Námatkou: Ctrl-K \ vám umožní opakovat libovolný další znak nebo příkaz. Ctrl-K / „prožene“ blok textu libovolným unixovým příkazem – je to moc pěkné už pro otestování, co ty příkazy vlastně dělají. Začátečníkům namátkou doporučuji sort, uniq, grep… autor editoru zase doporučuje zkusit „tr a-z A-Z“.
Programátoři ocení volání programu stylem „joe +100 soubor.c“, který nastaví kurzor přímo na danou řádku v souboru (v uvedeném případě řádku 100 ;-).
Když je editor joe násilně ukončen a přitom obsahuje neuložený soubor, uloží editovaný text do souboru DEADJOE, což sice není tak efektivní jako zasílání dopisů, nicméně to bohatě postačuje pro běžnou práci.
Editor joe umí samozřejmě používat různá makra a záložky, umí indentovat bloky stejně jako Borlandí editory („Ctrl-K ,“ a „Ctrl-K .“), umí obdélníkové bloky ve stylu T602 (zapínají se Ctrl-T X), při prohledávání textu je možné používat speciální typ regulárních výrazů, při otvírání souborů je možné pomocí klávesy Tab použít autocomplete, nebo si vybírat soubor pomocí kurzorových kláves. Samozřejmostí je zarovnávání celého odstavce textu (Ctrl-K J) a důkladný undo-buffer (Ctrl-K _). Umí editovat více souborů najednou. Umí editovat vyhrazenou část souboru – manuálová stránka uvádí poněkud drastický příklad „joe /dev/fd0,508,2“ – pokud prý chcete editovat bajty č. 508 nebo 509 na disketě ;-)
Jako perličku nabízím návod na definici makra, které vám pomůže vybrat odstavec textu jako blok. Makro bude dostupné na zkratce Ctrl-K 1 a nastaví začátek bloku na začátek odstavce a konec bloku na konec odstavce. Potom už můžete používat podobné finty jako zarytí vi-čkáři, protože s blokem už lze dělat cokoliv (viz Ctrl-K /). Místo „Ctrl-K“ píšu „^K“ , (Enter) znamená stisk klávesy Enter. Intuitivní definice makra Ctrl-K 1 vypadá takto:
^K[1^KF\n\n(Enter)B(Enter)^KB^N^N^KF\n\n(Enter)(Enter)^KK^K]
Je pravda, že joe se většinou používá pro méně náročné operace, kde operace Ctrl-Z, Ctrl-X, Ctrl-W a Ctrl-Y jsou více než postačující. Ale na pomalých linkách se definice uvedeného makra může hodit. Pokud si ho chcete uložit do vašeho souboru .joerc, použijte příkaz „Esc d“, který vám všechna definovaná makra vypíše na pozici kurzoru ve formátu pro soubor .joerc – například námi definované makro se vypíše jako:
ffirst,„\n\n“,rtn,„b“,rtn,markb,dnarw,dnarw,ffirst,„\n\n“,rtn,rtn,markk ^K 1 Macro 1
Poté co ho zkusíte dát do souboru .joerc (který vytvoříte zkopírováním /usr/lib/joe/joerc do svého adresáře), zjistíte, že to stále ještě není to pravé ořechové, a odkomentujete v souboru .joerc (=přesunete na první pozici na řádce) klávesové zkratky „bop ^[ p Backwards paragraph“ (Esc p) a „eop ^[ n Forwards paragraph“ (Esc n); naše makro na označování odstavce se se znalostí těchto příkazů dá nyní daleko elegantněji a funkčněji zapsat do .joerc v následující podobě:
bop,markb,eop,markk ^K 1
Makro na smazání odstavce byste si nyní mohli napsat jako domácí úkol :-) …ale přece jenom, pro ty línější z vás:
bop,markb,eop,markk,blkdel ^K 2
Závěr: joe se tváří velice nenápadně až primitivně, ale přitom je to zatraceně mocný nástroj. Pokud se vám ostřílení admini a hackeři vysmívají, že používáte místo vi nějakého ubohého joea, můžete je směle ignorovat, a poukázat na to, že joe je podle vás ideální editor např. na konfigurování sendmailu pomocí přímé editace /etc/sendmail.cf (mě se to už párkrát stalo :-). Jedinou nevýhodou editoru joe je že se nachází na svazku /usr a tudíž chybí v „holém“ systému bez přimountovaných filesystémů, ale budoucí distribuce Linuxu snad tuhle „chybu“ opraví…
Někdy se zkrátka vyplatí ignorovat staletími prověřené tradice a jít vlastní cestou, aneb „lameři všech systémů, spojte se“ ;-)