Jak si usnadnit opakovane´ spousˇteˇnı´ TEXu Petr Olsˇa´k Prˇi ladeˇnı´ TEXove´ho dokumentu potrˇebujeme mnohokra´t opakovaneˇ pousˇteˇt TEX, podı´vat se, jak dopadl vy´sledek v prohlı´zˇecˇi DVI nebo PDF souboru, mrknout na vy´pis TEXu na termina´lu, podı´vat se prˇ´ıpadneˇ do logu a celou cˇinnost opakovat. V tomto cˇla´nku uka´zˇu, jak tuto pra´ci deˇla´m na UNIXu. Vytvorˇil jsem si pro to bashovy´ skript, jehozˇ funkce je v cˇla´nku podrobneˇ vysveˇtlena. Na kolotocˇ „editor-TEX-kuk“ jsem zhruba dvacet let pouzˇ´ıval Emacs, ovsˇem s tı´mto editorem jsem nikdy nebyl spokojen. O svy´ch tra´penı´ch s Emacsem a konecˇne´m prˇechodu na jiny´ editor pı´sˇi v prˇ´ıloze k tomuto cˇla´nku. Novy´ editor nenı´ vybaven mocny´m jazykem lisp (ktery´ ovsˇem skoro nikdo neumı´) a ma´ daleko jednodusˇsˇ´ı mozˇnosti tvorby maker. Proto jsem si vytvorˇil bashovy´ skript, ktery´ mi nakonec nabı´dl daleko veˇtsˇ´ı komfort, nezˇ jsem meˇl drˇ´ıve prˇi pra´ci s Emacsem. Bashovy´ skript texloop se chova´ jako de´mon ve smyslu, zˇe cˇeka´ na signa´ly. Ovsˇem protokol o sve´ cˇinnosti vypisuje na termina´l. Mu˚zˇeme ho tedy pustit v neˇjake´m termina´lu a v jine´m termina´lu pustit textovy´ editor. Pokud v editoru ulozˇ´ıme zdrojovy´ soubor a vysˇleme signa´l (to mu˚zˇeme udeˇlat pomocı´ jedine´ kla´vesy, stacˇ´ı si na to prˇipravit kla´vesovou zkratku v editoru), de´mon texloop se probudı´, spustı´ pozˇadovanou TEXovou u´lohu, a prˇitom na „svu˚j“ termina´l vypisuje hla´sˇenı´ TEXu. Pokud u´loha dopadla bez chyby, posˇle de´mon signa´l prohlı´zˇecˇi DVI nebo PDF a ten automaticky obnovı´ zobrazenı´. Takzˇe na jedinou klapku v editoru TEXujeme a hned vidı´me vy´sledne´ zmeˇny v prohlı´zˇecˇi. De´mon texloop spustı´me prˇ´ıkazem texloop tex-command main-file naprˇ´ıklad tedy texloop csplain mujtext V prvnı´ fa´zi cˇinnosti je texloop v interaktivnı´m mo´du. Spustı´ TEX podle zadane´ho prˇ´ıkazu se zadany´m vstupnı´m souborem. Pokud TEX narazı´ na chybu, zastavı´ se a cˇeka´ na termina´lu na reakci. Komunikaci mu˚zˇeme samozrˇejmeˇ ukoncˇit pomocı´ vsˇem TEXistu˚m zna´me´ kla´vesy X. Ovsˇem to udeˇla´me s tı´m rizikem, zˇe nemusı´ vzniknout soubor pro prohlı´zˇenı´. Jak se v takove´m prˇ´ıpadeˇ texloop zachova´ popı´sˇu za chvı´li. Souborem pro prohlı´zˇenı´ je soubor main-file.pdf v prˇ´ıpadeˇ, zˇe tex-command je jedna z mozˇnostı´: pdftex, pdfcsplain, pdflatex, pdfcslatex. Jinak je souborem pro prohlı´zˇenı´ main-file.dvi. Pokud existuje po prvnı´m interaktivnı´m beˇhu TEXu soubor pro prohlı´zˇenı´, texloop spustı´ odpovı´dajı´cı´ prohlı´zˇecˇ tohoto souboru (xpdf nebo xdvi) a prˇejde do „daemon“ mo´du, kdy cˇeka´ na signa´ly. Kdyzˇ soubor pro prohlı´zˇenı´ neexistuje, zˇa´dny´ prohlı´zˇecˇ se zatı´m nespustı´ a texloop i v tomto prˇ´ıpadeˇ prˇejde do „daemon“ mo´du. Pokud texloop po neˇktere´m z prˇ´ısˇtı´ch beˇhu˚ TEXu zjistı´, zˇe soubor pro prohlı´zˇenı´ dodatecˇneˇ vznikl, neva´ha´ v dane´m okamzˇiku spustit odpovı´dajı´cı´ prohlı´zˇecˇ. V „daemon“ mo´du texloop cˇeka´ na signa´ly. Rozlisˇuje pouze dva: SIGUSR1 pro spusˇteˇnı´ TEXu a SIGTERM pro ukoncˇenı´ cˇinnosti. Obdrzˇ´ı-li signa´l SIGUSR1, pak zkontroluje cˇasy poslednı´ modifikace souboru˚ main-file.tex a main-file.log. TEXova´ u´loha se spustı´ pra´veˇ tehdy, kdyzˇ je zdroja´k noveˇjsˇ´ı nezˇ log. Vy´jimku z tohoto pravidla uvedu za chvı´li. TEXova´ u´loha v „daemon“ mo´du beˇzˇ´ı v neinteraktivnı´m rezˇimu. Prˇi vy´skytu prvnı´ chyby TEX ukoncˇ´ı svoji cˇinnost. Mozˇnost pokracˇova´nı´ cˇinnsti TEXu a vy´pisu vsˇech chyb jsem zavrhnul, 1
protozˇe dnes jsou pocˇ´ıtacˇe natolik rychle´, zˇe nikoho nezdrzˇuje po opravenı´ prvnı´ chyby spustit TEX znovu. Osobneˇ tento rezˇim pra´ce preferuji. Jestlizˇe beˇh TEXu skoncˇil u´speˇsˇneˇ, texloop pozˇa´da´ prostrˇednictvı´m signa´lu prohlı´zˇecˇ TEXove´ho vy´stupu, aby znovunacˇetl PDF resp. DVI a obnovil zobrazenı´. Potom texloop prˇecha´zı´ znovu do stavu cˇeka´nı´ na signa´ly. Proces texloop koncˇ´ı svou cˇinnost bud’ po obdrzˇenı´ signa´lu SIGTERM (mu˚zˇete zma´cˇknout Ctrl-C v termina´lu, kde texloop beˇzˇ´ı), nebo ukoncˇenı´m prohlı´zˇecˇe PDF nebo DVI, ktery´ byl procesem texloop spusˇteˇn. Neˇkdy se mu˚zˇe sta´t, zˇe editujeme jiny´ soubor, nezˇ „hlavnı´“ soubor main-file.tex. Prˇedstavme si, zˇe je v main-file.tex prˇ´ıkaz \input a ten nacˇ´ıta´ neˇjakou kapitolu dokumentu. Textovy´m editorem jsme zrovna zalezlı´ do te´to kapitoly, meˇnı´me ji a chceme videˇt vy´sledek zpracova´nı´ cele´ho dokumentu. Ulozˇenı´ kapitoly a vysla´nı´ signa´lu pro texloop nepomu˚zˇe, protozˇe texloop zjistı´, zˇe je log noveˇjsˇ´ı nezˇ zdroja´k a na TEXova´nı´ se vydla´bne. Mu˚zˇeme ovsˇem potlacˇit vykona´nı´ testu, ktery´m texloop kontroluje sta´rˇ´ı zdroja´ku a logu. Stacˇ´ı prˇidat k parametru˚m pro texloop pı´smeno A (jako „run TEX Always“). Naprˇ´ıklad tedy texloop csplain kniha A Abychom mohli daemonu texloop vyslat signa´l, musı´me veˇdeˇt, jaky´ ma´ PID. Program texloop v okamzˇiku prˇechodu z interaktivnı´ho do „daemon“ mo´du ulozˇ´ı svu˚j PID do souboru ~/.tlpid, odkud si jej mu˚zˇe editor prˇecˇ´ıst. Kdyzˇ ovsˇem spustı´me dalsˇ´ı proces texloop (vedle uzˇ beˇzˇ´ıcı´ho), pak novy´ proces prˇepı´sˇe obsah tohoto souboru svou hodnotou. Editor si tedy musı´ „zavcˇas“ informaci prˇevzı´t. Druha´ mozˇnost je, zˇe editor vysˇle signa´l vsˇem procesu˚m texloop dane´ho uzˇivatele a konkre´tnı´m PIDem procesu se nezaby´va´. Pak stacˇ´ı, kdyzˇ pouzˇije prˇ´ıkaz killall -USR1 texloop. Nevy´hoda tohoto prˇ´ıstupu je, zˇe mozˇna´ neˇktere´ procesy budou spousˇteˇt TEX zbytecˇneˇ, ale nenı´ to obvykle´. Procesy bez prˇ´ıznaku A (Always) totizˇ budou TEXovat jen v prˇ´ıpadeˇ, zˇe je zdroja´k noveˇjsˇ´ı nezˇ log. Skriptı´k texloop je docela jednoduchy´. Ma´ 79 rˇa´dku˚, najdete ho na [1] a mu˚zˇete si ho prˇiohnout k obrazu sve´mu.
Prˇı´loha: Konecˇneˇ koncˇı´m s Emacsem V na´sledujı´cı´ prˇ´ıloze, ktera´ je ovsˇem delsˇ´ı, nezˇ cely´ cˇla´nek, rozvedu neforma´lnı´m zpu˚sobem sve´ zkusˇenosti s textovy´mi editory. Pro lidi, kterˇ´ı ocˇeka´vajı´ spı´sˇe nezaujate´ technicke´ informace a zejme´na pro fanousˇky Emacsu nenı´ tato prˇ´ıloha urcˇena. Pro uzˇivatele MS Windows take´ nenı´ tato prˇ´ıloha urcˇena. Tito uzˇivatele´ jisteˇ uzˇ poznali, zˇe jim je k nicˇemu kompletneˇ cely´ cˇla´nek. S interaktivnı´mi textovy´mi editory jsem se poprve´ setkal v DOSu a pote´ v UNIXu. Jine´ operacˇnı´ syste´my umozˇnˇujı´cı´ interakci s uzˇivatelem jsem nemeˇl tu cˇest poznat. V DOSu jsem po dlouhe´m vy´voji zakotvil u Qeditu, ktery´ jsem si prˇizpu˚sobil obrazu sve´mu. Jeho vy´chozı´ chova´nı´ bylo zrˇejmeˇ inspirova´no editorem Wordstar. Qedit meˇl prˇehledny´ konfiguracˇnı´ soubor s mozˇnostı´ jednoduche´ tvorby maker a kla´vesovy´ch zkratek. Ovsˇem to bylo zhruba prˇed dvaceti lety. Prˇi prˇechodu na UNIX jsem se naucˇil asponˇ za´klady editoru vi. Tento editor meˇl totizˇ tu vlastnost, zˇe se dal najı´t na skoro kazˇde´m UNIXu, i kdyby tam uzˇ nebylo vu˚bec nic jine´ho. Setkal jsem se vy´jimecˇneˇ i s UNIXy natolik orˇezany´mi, zˇe tam nebyl ani vi. Editovat konfiguracˇnı´ soubory syste´mu v rˇa´dkove´m editoru ed pak byla skutecˇna´ lahu˚dka. Tehdy na´s ale nic nemohlo odradit od nasˇeho nadsˇenı´ z UNIXu. Azˇ do roku 2011 jsem pouzˇ´ıval dva editory: vi a Emacs. Prvnı´ jmenovany´ jsem pouzˇ´ıval jako „odlehcˇeny´ editor“ pro editaci syste´movy´ch souboru˚. „Odlehcˇeny´ editor“ musı´ by´t snadno dostupny´ v kazˇde´m UNIXu a musı´ umeˇt spolupracovat s beˇzˇneˇ pouzˇ´ıvany´mi termina´ly. Nesmı´ se opı´rat o prˇ´ıtomnost Xserveru, protozˇe ten cˇasto nenı´ prˇi konfiguraci syste´mu prˇ´ıtomen. 2
Umı´m jen u´plne´ za´klady editoru vi a podobneˇ jako plno jiny´ch lidı´ meˇ psychicky nesmı´rneˇ vycˇerpa´va´ prˇepı´nat mezi dveˇma mo´dy tohoto editoru. Ale co, v dobeˇ pocˇa´tku UNIXu˚ nic jine´ho nebylo. Druhy´ jmenovany´ editor (Emacs) je kapitola sama pro sebe. Prˇed dvaceti lety meˇla jeho uzˇivatelska´ dokumentace 700 stra´nek, dnes jsou k Emacsu dokumenty dva, dohromady majı´ 1600 stra´nek. Tı´m se mi nikdy nepodarˇilo prokousat. Komu se to podarˇilo, necht’ se prˇihla´sı´ a pak hodı´ kamenem. Domnı´va´m se, zˇe editor ma´ slouzˇit a ne by´t strˇedem pozornosti a nutit uzˇivatele mu veˇnovat neu´meˇrnou pozornost. Emacs ma´ velmi neobvykly´ zpu˚sob ovla´da´nı´, ktery´ s my´m oblı´beny´m Qeditem z DOSu ma´ prama´lo spolecˇne´ho. Take´ pouzˇ´ıva´ naprosto neobvyklou terminologii, takzˇe najı´t neˇco konkre´tnı´ho v dokumentaci metodou grep je te´meˇrˇ nemozˇne´. Nevı´te totizˇ, co ma´te hledat. Navı´c je to komplikova´no tı´m, zˇe Emacs ma´ dokumentaci ulozˇenu ve sve´m sve´ra´zne´m forma´tu, ke ktere´mu nabı´zı´ prˇ´ıstup svy´m sve´ra´zny´m zpu˚sobem (programem info). Uvedu nama´tkou jen trˇi terminologicke´ sve´ra´znosti. Kla´vesovou zkratku Ctrl-A Emacs znacˇ´ı „C-a“. Kla´vesu Alt nazy´va´ „Meta“ a znacˇ´ı „M“. Symbol „M-A B“ v dokumentaci znamena´ „zma´cˇkni Alt a Shift, zma´cˇkni A, pust’Alt a sta´le drzˇ Shift, zma´cˇkni B“. Kdo nepustı´ kla´vesu Alt ve spra´vne´m okamzˇiku, ma´ smu˚lu, Emacs vykona´ neˇco jine´ho. Nikomu nenı´ prˇ´ıjemne´, kdyzˇ se mu Emacs takto smeˇje do ksichtu. Protozˇe Emacs byl v te´ dobeˇ jediny´ editor, ktery´ byl pouzˇitelny´ na rozsa´hlejsˇ´ı veˇci (vcˇetneˇ TEXova´nı´ rovnou z editoru), investoval jsem do neˇj asi meˇsı´c sve´ho zˇivota a pokusil se vytvorˇit alesponˇ pa´r vlastnı´ch kla´vesovy´ch zkratek na TEXova´nı´ a pro asponˇ trochu norma´lnı´ ovla´da´nı´. I pote´ jsem neˇktere´ slozˇiteˇjsˇ´ı u´koly (naprˇ. posuny sloupcovy´ch bloku˚) v Emacsu udeˇlat neumeˇl. Dalsˇ´ı cˇas stra´veny´ nad dokumentacı´, nezˇ bych doka´zal potrˇebnou informaci vyhledat, se mi hrubeˇ nevyplatil. Pokorneˇ jsem tedy pustil ve vedlejsˇ´ım oke´nku DOS emula´tor, v neˇm nahodil Qedit a u´kol vyrˇesˇil tam. Asi prˇed deseti lety prˇisˇla dalsˇ´ı neprˇ´ıjemnost v podobeˇ prˇechodu z verze Emacsu 19 na verzi vysˇsˇ´ı. Mnou pracneˇ vytvorˇena´ makra v nove´ verzi samozrˇejmeˇ nefungovala. Dokumentace se stala jesˇteˇ obludneˇjsˇ´ı a nesrozumitelneˇjsˇ´ı. Neˇjakou dobu jsem kromeˇ implicitnı´ verze Emacsu v UNIXove´ distribuci udrzˇoval vedle i starou verzi 19, na ktere´ jsem provozoval vesˇkerou svou pra´ci. Bohuzˇel, jak roky beˇzˇely, byla verze 19 sta´le obtı´zˇneˇji kompilovatelna´ pro nove´ distribuce. Zpocˇa´tku jsem se doka´zal povrtat v Ce´cˇkovy´ch zdrojı´ch a kompilaci neˇjak rozdy´chat, ale s prˇ´ıchodem dalsˇ´ıch verzı´ kompila´toru a noveˇjsˇ´ıch knihoven to sˇlo sta´le hu˚rˇ. Takzˇe jsem se rozhodl znovu investovat pa´r ty´dnu˚ sve´ho cˇasu, ponorˇit se do zru˚dne´ dokumentace a vytvorˇit pokud mozˇno tyte´zˇ kla´vesove´ zkratky, jako jsem pouzˇ´ıval pro Emacs 19. Od jednoho emacsove´ho guru jsem se dozveˇdeˇl dalsˇ´ı neprˇ´ıjemnost: nova´ verze uzˇ nebude umeˇt jednı´m klapnutı´m opravit sˇpatneˇ napsany´ kus rˇa´dku, ktery´ cˇloveˇk hledı´cı´ do kla´vesnice (mı´sto na monitor) napsal omylem v nespr8vn2 p5epnut0 kl8vesnici. Cituji na´zor tohoto emacsove´ho guru: naucˇte se psa´t vsˇemi deseti a dı´vat se prˇi psanı´ na monitor. Vsˇechny UNIXove´ editory, se ktery´mi jsem se setkal, trpı´ dalsˇ´ım neduhem: prˇedpokla´dajı´, zˇe cˇloveˇk sedı´ u vyorane´ kla´vesnice z doby kamenne´, ktera´ nema´ funkcˇnı´ kla´vesy na pohyb kurzoru. Takzˇe nejstrucˇneˇjsˇ´ı kla´vesove´ zkratky rˇesˇ´ı posun kurzoru. Naprˇ´ıklad Ctrl-F je posun o jedno polı´cˇko doprava. Ha, jak skveˇle´, ale jak k nicˇemu! Zacˇa´tecˇnicky´ tutoria´l k Emacsu je rovneˇzˇ plny´ takovy´ch tota´lneˇ zbytecˇny´ch informacı´. I tohle komplikuje vztahy mezi editorem a jeho potencia´lnı´mi uzˇivateli. Meˇl jsem mozˇnost mluvit s jednı´m prˇ´ıznivcem Emacsu. Zeptal jsem se ho, jak se da´ prˇepnout wordwrap mo´d z implicitnı´ho emacsı´ho chova´nı´, kdy je potrˇeba psa´t dlouhe´ slovo poslepu trˇeba za roh a teprve mezera za slovem toto slovo ulomı´ na dalsˇ´ı rˇa´dek. Ocˇeka´val bych norma´lnı´ chova´nı´, kdy se slovo ulomı´ v okamzˇiku, kdy kurzor dosa´hne nastavene´ hranice. Da´le jsem se chteˇl nechat poucˇit, jak efektivneˇ v dokumentaci zjistit, jak vypnout case-insensitive 3
mo´d prˇi povelu isearch. Zvy´raznˇova´nı´ syntaxe pro TEXove´ zdroja´ky je v Emacsu sva´za´no s novinkou, zˇe texty za podtrzˇ´ıtkem se zobrazujı´ zmensˇeneˇ (jako indexy). To pu˚sobı´ velmi rusˇiveˇ. Jak to opravit a neprˇijı´t o zvy´raznˇova´nı´? Ani na jednu ota´zku jsem nedostal uspokojivou odpoveˇd’. Emacs je z me´ho pohledu obluda, ktera´ se vymyka´ za´kladnı´mu za´konu UNIXu, ktery´ pravı´: UNIXove´ prostrˇedı´ sesta´va´ z maly´ch elementa´rnı´ch programu˚, ktere´ deˇlajı´ jen jeden dı´lcˇ´ı u´kol, kvu˚li ktere´mu byly navrzˇeny, a ten deˇlajı´ dobrˇe. Tyto programy vza´jemneˇ spolupracujı´. Ma´m na mysli trˇeba grep, awk, bash, bc, tar, gnuzip, rsync, TEX a dalsˇ´ı. Editor Emacs byl prvnı´m vy´znamny´m narusˇitelem tohoto za´kladnı´ho za´kona. Pak prˇisˇli dalsˇ´ı, o OO se nebudu radeˇji zminˇovat. Z vy´sˇe uvedene´ho vyply´va´, zˇe jsem prˇi editova´nı´ souboru˚ dvacet let trpeˇl. Dokonce jsem pomy´sˇlel na to, zˇe si napı´sˇu editor vlastnı´. Ale letos prˇisˇlo vysvobozenı´. Zacˇalo to tı´m, zˇe jsem si instaloval noveˇ syste´m do notebooku. Jako prvnı´ potrˇebuji mı´t odlehcˇeny´ editor na editova´nı´ konfiguracˇnı´ch souboru˚ syste´mu. V Gentoo Linuxu je pro tento u´cˇel prˇednastaven editor nano, ktery´ ale cˇloveˇka pravidelneˇ vyta´cˇ´ı dveˇma blby´mi ota´zkami, nezˇ ulozˇ´ı pozmeˇneˇny´ soubor a ukoncˇ´ı cˇinnost. Prˇeci jenom vi editor se svy´m Shift-ZZ vykona´ tuto pra´ci bez ptanı´ a hned. Editor vi v cˇiste´ podobeˇ uzˇ da´vno neexistuje, pouzˇ´ıval jsem tedy uzˇ dlouho jeho vim implementaci. A v nove´ verzi meˇ vim velmi rozhneˇval. Implicitneˇ ma´ nastaveno na kurzorove´ kla´vesy vlevo/vpravo chozenı´ po slovech. V tomto rezˇimu jsem vu˚bec nebyl schopen editovat. ˇ ekl jsem si, zˇe pokud do deseti minut v dokumentaci cˇi pomocı´ Google nenajdu, jak se tato R nova´ skveˇlost odstranˇuje, letı´ vim z me´ho pocˇ´ıtacˇe prycˇ. A taky zˇe leteˇl. Cˇ´ım ale vi nahradit? Prˇed deseti lety jsem videˇl v provozu editor joe, takzˇe vı´m, zˇe to je dalsˇ´ı mozˇny´ odlehcˇeny´ editor. Beˇhem pa´r vterˇin po jeho nainstalova´nı´ jsem veˇdeˇl, zˇe bez blbe´ho ptanı´ ulozˇ´ım soubor a ukoncˇ´ım cˇinnost editoru pomocı´ Ctrl-KX. Beˇhem pa´r minut jsem shledal, zˇe editor za teˇch deset let vy´razneˇ pokrocˇil kuprˇedu. Beˇhem hodiny uzˇ zacˇ´ına´m tusˇit, zˇe toto je editor, ktery´ mi nahradı´ nejen odlehcˇeny´ editor, ale take´ Emacs. Ma´ vsˇechny funkce, ktere´ pro sve´ editova´nı´ potrˇebuji. Vsˇe jsem se dozveˇdeˇl v kraticˇke´ manove´ stra´nce, online na´poveˇdeˇ a v prˇehledneˇ vyvedene´m vzorove´m konfiguracˇnı´m souboru /etc/joe/joerc. Jako trˇesˇnicˇku na dortu uvedu skutecˇnost, zˇe Emacs ma´ 25 kra´t veˇtsˇ´ı bina´rku nezˇ joe. Emacs navı´c dynamicky loaduje 43 dalsˇ´ıch knihoven, zatı´mco joe loaduje jen za´kladnı´ knihovny a ncurses. Editor joe deˇla´ prˇesneˇ to, k cˇemu byl urcˇen, a deˇla´ to dobrˇe. V souladu se za´kladnı´m za´konem UNIXu. Nı´zˇe uva´dı´m seznam vlastnostı´, ktere´ meˇ u joe editoru poteˇsˇily. Mnohe´ z nich jsem nikdy nedoka´zal v Emacsu nastavit. Netvrdı´m, zˇe by to v Emacsu nesˇlo, vzˇdyt’„Emacs umı´ vsˇechno“. Spı´sˇ je to kvu˚li me´ neschopnosti se orientovat v neprˇehledne´ emacsı´ dokumentaci. • Prˇi rychle´m hleda´nı´ i prˇi najdi-nahrad’ vnı´ma´ rozdı´ly mezi velky´mi a maly´mi pı´smeny. Da´
se to podle potrˇeby vypnout. • Kurzor se nesnazˇ´ı lepit na konce rˇa´dku ˚ , takzˇe prˇi posunova´nı´ dolu/nahoru neska´cˇe prˇi
sve´ pozici vpravo jako cˇamrda. • Prˇi rolova´nı´ dolu ˚ /nahoru obraz s sebou nesˇkube. • Wordwrap se chova´ norma´lneˇ. • Snadno prˇepnu do hexa mo´du. • V UTF8 termina´lu editor lze prˇepnout do stavu, kdy edituje ISO soubory a naopak
v ISO-termina´lu zase mohu editovat UTF8 ko´dovane´ soubory. • Nerˇesˇ´ı, co rˇesˇit nemusı´: fonty, prˇepı´na´nı´ kla´vesnice. To je starost termina´lu. • Jednodusˇe prˇeskocˇ´ım beˇhem editova´nı´ na mı´sto v souboru, ktere´ jsem neda´vno opustil a
pak se snadno vra´tı´m tam, kde jsem byl prˇedtı´m. • Editor si pamatuje polohu kurzoru prˇed ukoncˇenı´m. Kdyzˇ vlezu do souboru po neˇjake´ dobeˇ znovu, startuje v mı´steˇ, kde jsem soubor opustil. Taky si trvale pamatuje pouzˇite´ 4
prˇ´ıkazy pro prˇeklad a dalsˇ´ı veˇci. Historiı´ teˇchto prˇ´ıkazu˚ mohu procha´zet sˇipkami nahoru/dolu˚. • Nepta´ se blbeˇ na kazˇdou pitomost. ´ nik ze vsˇeho pomocı´ Ctrl-C je prˇirozeny´. Vy´chozı´ kla´vesove´ zkratky se podobajı´ zkrat•U ka´m v me´m stare´m dobre´m Qeditu (tj. jsou odvozeny z WordStaru). • Ma´ jednoduchou konfiguraci novy´ch zkratek a maker. Beˇhem chvı´le jsem si naprˇ´ıklad nastavil propojenı´ editoru s filtrem vlna, cozˇ byl u´kol, na ktery´ jsem z hlediska jeho obtı´zˇnosti v prˇ´ıpadeˇ Emacsu po cely´ch dvacet let rezignoval a vlnkoval soubory „rucˇneˇ“ ve vedlejsˇ´ım termina´lu. • Zobrazı´ ^M na koncı´ch rˇa´dku ˚ . Setka´va´m se totizˇ obcˇas se soubory majı´cı´mi pomrsˇene´ konce rˇa´dku (z DOSu nebo z MS Windows). Pokud se meˇ editor snazˇ´ı odstı´nit od tohoto proble´mu, je to sˇpatneˇ, nebot’pak vznikajı´ za´hadne´ chyby naprˇ´ıklad v shellovy´ch skriptech. Na druhe´ straneˇ je editor schopen se prˇizpu˚sobit (kdyzˇ chci) a editovat v DOSove´m mo´du koncu˚ rˇa´dku˚. • Konecˇneˇ zase umı´m snadno oznacˇit sloupcove´ bloky (i mysˇ´ı) a posunovat s jejich obsahem. • Syntakticke´ zvy´razn ˇ ova´nı´ je prˇ´ıjemne´ a ma´ jednoduche´ a prˇehledne´ konfiguracˇnı´ soubory. Beˇhem chvı´le jsem si vylepsˇil naprˇ´ıklad syntakticke´ zvy´raznˇova´nı´ TEXovy´ch zdroja´ku˚ k obrazu sve´mu. • Editor se naucˇ´ı slova pouzˇita´ v otevrˇene´m souboru a umozˇnı´ jejich rychle´ dopln ˇ ova´nı´. Stacˇ´ı napsat zacˇa´tek slova a zma´cˇknout prˇ´ıslusˇnou kla´vesu. Nebudu zde uva´deˇt vsˇechny podstatne´ vlastnosti editoru. Strucˇny´ seznam jeho mozˇnostı´ najdete beˇhem chvilky pomocı´ Google. Myslı´m si, zˇe editor nabı´zı´ vsˇe, co beˇzˇny´ uzˇivatel (jako jsem ja´) potrˇebuje pro norma´lnı´ pra´ci. Neˇktere´ nevy´hody editoru mohou plynout z faktu, zˇe je zcela za´visly´ na prostrˇedı´ termina´lu, ve ktere´m je spusˇteˇn. Na vstupu tedy snı´ma´ ty informace, ktere´ mu tam posˇle termina´l. Naprˇ´ıklad Xterm vysı´la´ prˇi zma´cˇknutı´ kla´vesy Backspace stejny´ ko´d jako prˇi zma´cˇknutı´ kla´vesy Delete a to je stejny´ ko´d jako prˇi Ctrl-H. Mezi teˇmito trˇemi klapkami pak editor nemu˚zˇe rozlisˇit a reaguje na vsˇechny jako Backspace. Chteˇl bych videˇt toho cˇloveˇka, ktery´ vyvı´jel termcap pro Xterm, kdyzˇ tam navrhnul Delete=Backspace. Asi se mu prˇed tı´mto rozhodnutı´m srazila hlava s zˇeleznicˇnı´m prazˇcem. Proble´m jsem si opravil u´pravou konfigurace Xtermu, ale od te´to chvı´le nema´m Xterm splnˇujı´cı´ oficia´lnı´ parametry. Kla´vesove´ zkratky Alt-něco se nedajı´ pouzˇ´ıt, nebot’je termina´l prˇevede na jednobytovou informaci typicky shodnou se zma´cˇknutı´m neˇjake´ klapky s akcentovany´m znakem. Editor se vu˚bec nedozvı´, zˇe byla zma´cˇknuta kla´vesa Alt. Znamena´ to, zˇe mu˚zˇeme pracovat pouze s kla´vesovy´mi zkratkami typu Ctrl-něco. Asponˇ se to le´pe pamatuje. V prˇ´ıpadeˇ zkratek Ctrl-něco ma´me k dispozici jen 32 mozˇnostı´, prˇi ktery´ch termina´l generuje ko´dy 0 azˇ 31 takto: Ctrl-@ je nula, Ctrl-A je 1, Ctrl-B je 2, atd., Ctrl-^ je 30 a Ctrl-_ je 31. Kdo zatı´m nevidı´ souvislost, podı´va´ se za doma´cı´ u´kol na ASCII tabulku. Prˇitom jesˇteˇ platı´, zˇe Escape=Ctrl-[. Ma´me ovsˇem sˇteˇstı´, zˇe kla´vesy F1, F2 atd. a neˇktere´ dalsˇ´ı vysı´lajı´ z termina´lu k aplikaci poneˇkud delsˇ´ı sekvenci znaku˚ (uvozenou ko´dem Escape), podle ktere´ aplikace rozpozna´, co bylo zma´cˇknuto. Prˇi zma´cˇknutı´ Ctrl-F1 je vygenerova´na jina´ escape sekvence nezˇ prˇi F1. Takzˇe tyto zkratky typu Ctrl-Fněco doka´zˇe editor rozpoznat a dokonce nespadajı´ do omezujı´cı´ch 32 mozˇnostı´ zmı´neˇny´ch drˇ´ıve. Ru˚zne´ termina´ly vysı´lajı´ bohuzˇel prˇi macˇka´nı´ kla´ves F1 a spol. ru˚zne´ escape sekvence. Neˇkdy se tyto sekvence dokonce prˇekry´vajı´ v ru˚zne´m vy´znamu. Naprˇ´ıklad RxVT a Xterm majı´ vza´jemneˇ prohozeny Home a End. Editor joe bohuzˇel neumı´ pracovat s konfiguracı´ escape sekvencı´ za´vislou na pouzˇite´m termina´lu. Ja´ pouzˇ´ıva´m vy´hradneˇ Xterm a Linuxovou konzoli a pro tyto dva typy termina´lu˚ jsem si upravil svou konfiguraci joe editoru. 5
Vy´sˇe popsane´ omezenı´ plyne z toho, zˇe chceme pouzˇ´ıt odlehcˇeny´ editor uvnitrˇ termina´lu, tj. trˇeba i na vzda´lene´m pocˇ´ıtacˇi s mizerny´m sı´t’ovy´m prˇipojenı´m. Dalsˇ´ı mozˇnou nevy´hodou joe editoru je jeho azˇ prˇ´ılisˇ jednoducha´ konfigurace maker. Nejsou k dispozici zˇa´dne´ podmı´nky, zˇa´dna´ pra´ce s promeˇnny´mi, jen sled za sebou jdoucı´ch elementa´rnı´ch pokynu˚ pro editor. Abych tedy mohl v joe prˇ´ıjemneˇ TEXovat, vytvorˇil jsem si bashovy´ skriptı´k texloop. V [1] najdete kromeˇ zmı´neˇne´ho skriptı´ku i mou uzˇivatelskou konfiguraci .joerc. Mu˚zˇete se tı´m inspirovat. Tak jako drˇ´ıve v Emacsu, jsem soustrˇedil i v joe editoru TEXova´nı´ na kla´vesu F7. Pomocı´ Ctrl-F7 zahajuji proces texloop v noveˇ zalozˇene´m okneˇ editoru. Editor si pamatuje posledneˇ vlozˇeny´ prˇ´ıkaz (i prˇ´ıkazy starsˇ´ı), takzˇe typicky nemusı´m vkla´dat cely´ prˇ´ıkaz texloop znovu. Pote´ mohu okno s procesem texloop skry´t (F6, Ctrl-KI) a mohu TEXovat pomocı´ F7. Skoro okamzˇiteˇ po zma´cˇknutı´ te´to kla´vesy se mi obnovı´ zobrazenı´ ve vedlejsˇ´ım prohlı´zˇecˇi PDF nebo DVI vy´stupu. Prˇitom (na rozdı´l od Emacsu) okno s vy´pisem zpra´v o zpracova´nı´ TEXu neobteˇzˇuje, kdyzˇ nechci, ale mohu se tam podı´vat (Ctrl-KI). Tı´m, zˇe jsem opustil Emacs a vim a prˇesˇel konecˇneˇ na norma´lnı´ editor, jsem si vy´razneˇ ulehcˇil zˇivot. Vymizela schizofrenie, zda v dane´ chvı´li chci TEXovat nebo editovat konfiguracˇnı´ soubory vzda´lene´ho serveru. Deˇla´m to od te´to chvı´le stejny´m editorem s jednotny´m zpu˚sobem ovla´da´nı´. Autor joe editoru Joseph H. Allen se prˇesneˇ strefil do my´ch prˇedstav, jak ma´ tento typ software vypadat. Mozˇna´ by meˇl mı´t tento cˇla´nek jiny´ na´zev: The Joy Of Joe.
Odkaz [1] http://petr.olsak.net/texinunix.html
6