emacs-tutoriál je trochu upovídanější úvod do práce s textovým editorem emacs.


Den nultý

editovat

Emacs (viz w:emacs). Česky Emáč. Co je to? Hrozný dinosaurus, ve kterém se nedá nic "normálně" napsat? Anebo naopak "holka pro všechno"? Nebo hračka pro několik Unixových nadšenců?

Takové a podobné otázky si kladu snad už několik let. Na jedné straně cítím, že skutečně spolu s Emáčem bychom mohli hravě zvládnout mnoho problémů, na druhé straně jeho zdánlivá nepřítulnost (nepřístupnost) a moje pokračující stařecká lenost a pohodlnost mě drží v zajetí hromady všech možných Téšestsetdvojek, Joeů, MSeditorů, maximálně nějakých Emáčích náhražek, jako je Jove, Microemacs atd.

Dosud žiju v představě "svůj k svému". A tak jako je svou povahou jiný text zdrojáku a jiný text románu, tak si říkám, že je "normální" používat pro každý druh textové práce jiný editor. Přeci si kvůli opravě pár písmenek v assembleru nebudu volat Word. No to jistě ne. Ale jde z toho vyvodit, představa, že "velké" věci budu dělat ve "velkém" editoru a "malé" v "malém"? S dělem na pevnost, ale na vrabce vzduchovku? Zní to logicky.

Nicméně začala ve mě klíčit taková pochybnost: Není třeba Emáč takovým "dělem", které se dá dobře seštelovat i na takového neposedného vrabčáčka?

Ano, Emáč je svým způsobem pěkně velká obludka, vždyť jen jeho céčkové zdrojáky mají něco okolo 5 mega. Když jsem si stáhnul ze Simtelu jeho psí (rozuměj: DOSovou - někdo mu říká DOG) na šesti zapakovaných diskettách, nestačil jsem umazávat hadr (harddisk), abych je měl kam rozpakovat. Na druhé straně: pokud z mé pochybnosti nakonec vyklíčí pěkná Emáčí kytka - masožravá, která mi požere všechny ostatní editory a editůrky (nebudou už potřeba), nebylo by to uvolněné míst\ o na disku už dostatečným ziskem?

Takže:

  • GNU Emacs má porty na mnoho platforem. Například tento text píšu v Emáči pod DOSem a nebojím se, že mi v UNIXu to, co se teď naučím, nebude fungovat. Nainstaloval jsem si v DOSu kameninu nějakými residenty a jsem v pohodě.
  • Po svých minulých zkušenostech bych nedoporučoval místo 100% Emáče používat (kromě extrémních situací - a v žádném případě ne k učení) nějaké jeho zjednodušeniny a náhražky, kterým vesměs chybí elisp. Ve stylu klasické reklamy: Emáč jedině od GNU! :-)
  • K tomu elispu: je to takový klon jazyka Lisp. Pokud ho někdo z Emáče vyrve, je to, jako by vyrval někomu játra. Emáč zkrátka na elispu vyrost' a bez elispu nemůže být Emáč Emáčem. Aby nedošlo k omylu: netvrdím, že bez znalosti Elispu nenapášu v Emáči větu. Elisp neznám, ale píšu, ergo sum. Ale cítím, že neznalostí elispu ztrácím hodně a tak se ho ještě týden před koncem roku začínám učit (aby nezůstalo jen u novoročních předsevzetí). Aby nedošlo k druhému omylu: když jsem napsal, že elisp je takový nějaký klon Lispu, neznamená to, že si Emáč neporadí třeba s Common Lispem.
  • Začínáme. Je to jednodušší, než se na první pohled zdálo. Jako všechno jiné, dá se Emáč učit postupně, "na pochodu", chce to jediné: vytrvalost. Kdo se chce přidat, může.

Půjčil jsem kamarádovi nabíječku. Možná měl zpočátku nějaké problémy, ale když konečně objevil ten správný postup, tak své nadšené Heureka! zvěčnil na skříňku nabíječky nesmazatelným nápisem: ZAPÍNAT STUPNĚ POSTUPNĚ !

Ano, to je ten základní pedagogický postup, kterým se zvěčnil i náš Učitel národů. Já ty své stupně budu nazývat dny. Ne snad, že by mi dané téma muselo nutně zabrat celý den. Ale snad tu další pedagogickou myšlenku vhodně vystihne slogan: KAŽDÝ DEN S EMACSEM

DEN PRVNÍ

editovat
  1. Nainstaluji si Emáč:
  • v DOSu: Udělám si direktorář \EMACS, stáhnu si tam třebas EMACS1930 ze Simtelu ftp://pub.vse.cz/pub/ a stažené disketty si rozzipuju pkunzip -d *.zip a přidám adresář drive:\EMACS\BIN do PATHu. (To -d je tam důležité - rozbalí se vám to do potřebných podadresářů.)
  • v Linuxu - je standardní součástí snad všech "normálních" distribucí (Slackware, Debian, Redhat, ...)
  1. Pokud chci psát česky s diakritikou, předpokládám, že mám na systému nainstalovánu češtinu. Můžu se také poohlédnout po extenzi Emáče pro češtinu, emacs-czech, od Milana Zamazala. Předpokládám, že to pak umí všelijaké české fajnovůstky (třídění a já nevím co ještě), nicméně pro obyčejné psaní česky zatím používám obyčejný GNU emacs.
  2. Spustím Emáč z příkazové řádky:
> emacs bla-bla
  1. Píšu: Poprvé v Emáči. No to je krása!
  2. Uložím si svůj první výtvor: Ctrl-X Ctrl-S a ukončím emacs: Ctrl-X Ctrl-C. Tj.: držím neustále zmáčknutou klávesu Ctrl a přitom na klávesnici píšu písmena x s x c. Ale pardon. Mezi emacsisty se nepíše Ctrl, ale jen C. A pokud náhodou při psané písmene ještě nedržím Shift, pak to písmeno bude malé. Tedy správně tu ukončovací sekvenci napíšu jako:
C-x C-s
C-x C-c

DEN DRUHÝ

editovat

Vzpomínám na včerejšek: Jaké je heslo dne? Aha: KAŽDÝ DEN S EMASCEM. A jakže si čtu právě tenhle dokument? Na papíře? Nebo nějakým párkilovým kukátkem? Nebo snad ve Wordu? :-) Tak to ne. Jak se pouští emasc? No přeci jednodušše. A už jdu na to: emacs muj-emac

Po načtení souboru jste koukali na jeho začátek. Předpokládám, že vás napadlo dostat se na místo, kam jste předtím dočetli, pomocí kursorových kláves a že se vám to podařilo! Pokud je Emáč dobře nainstalován na písíčku, měly by fungovat všechny kursorové klávesy obvykle: šipky nahoru, dolů, vlevo, vpravo, PgUp, PgDn, Home, End ...

Ouha! Předpokládám, že si při čtení hned všechno zkoušíte (kdo by to nedělal, že ano ... kdo by to nedělal, ten by se toho moc nenaučil) a najednou - Home - a místo na začátku řádky jsme na začátku souboru a tak trochu otráveně zase hledáme místo, kde jsme předtím skončili. To není chyba - tomu se říká defaultní nastavení a optimisté už správně tuší, že to nebude nic neměnného. (Jak byla ta další poučka? Aha - trpělivost!)

Takže jak vlastně dostanu korsor na začátek a na konec řádky? C-a, C-e

Tahle zaklínadla jsem si nevymyslel já. V Emáči se takhle označuje stisk kláves. C- na začátku znamená, že držím klávesu Ctrl a k tomu mačkám další klávesu. Hm, nešlo by to napsat jasněji jako Ctrl-A nebo kratšeji ^A ? Taky jsem tak nejdřív myslel. Nakonec jsem pochopil, že bude lepší přizpůsobit se zvyklostem kraje a psát a chápat to takhle.

Pohyb kursoru po slovech vzad nebo vpřed se dá učinit (podle očekávání) klávesami Ctrl-levá_šipka resp. Ctrl-pravá_šipka - oh, pardon, řekli jsme si, že už budeme psát ukázněně: C-left předcházející slovo C-right následující slovo

(Slovem se míní skupina písmen, oddělených mezerou nebo nějakým jiným znakem. Nemáme-li český Emáč, bude nám kursor poskakovat ne po slovech, ale zastaví se i na každém písmenku s diakritikou, protože ho nebude považovat za písmeno.)

Podobně můžeme běhat dozadu a dopředu po odstavcích. Odstavcem (paragrafem) se míní skupina řádek, oddělených alespoň jednou prázdnou řádkou: C-up předcházející odstavec C-down následující odstavec

Pozn: přemístit kursor můžeme také pomocí myši: levé tlačítko myši přemístí textový kursor na místo myšího.

Klávesy Delete a Backspace zase budou fungovat podle našeho očekávání - tj. výmaz znaku pod kursorem resp. před ním.

Z obvyklých editovacích příkazů nám zbývá ještě výmaz řádky: C-k 'K' se pamatuje jako 'kill'. Jenže funguje trošku neobvykle: Vymaže řádku od místa kursoru až do jejího konce - resp. do nejbližšího znaku 'nová-řádka' ('neviditelný' znak, který ukončuje každou řádku). Máme-li kursor na začátku řádky, musíme celou řádku vymazat vlastně nadvakrát: prvním stlačením C-k smažeme 'obsah' té řádky, takže kursor se bude nacházet na znaku 'nová-řádka'. Dalším stisknutím C-k se smaže tento samotný znak.

Dosud jsem používal obvyklého termínu 'kursor' pro 'většinou to blikavé, co nám ukazuje, místo v textu, kde budeme psát atd. ...' Ale Emáč má zkrátka svou vlastní terminologii - takže se polepším a místo 'kursor' budu používat ortodoxní termín 'bod' (point). On je mezi tím opravdu jistý rozdíl: zatímco kursor je skutečně to (většinou) blikavé, co je vidět, bod je myšlený bod mezi dvěma sousedními znaky v textu: např. je-li kursor pod písmenem 'd' ve slově 'sousedními', pak je bod mezi písmeny 'e' a 'd'.

Dalšími operacemi, obvyklými u editorů, je práce s bloky textu. Emáč jim samozřejmě neříká bloky, ale regiony. Jeden konec (lhostejno, zda jeden nebo druhý konec, tj. začátek či opravdu 'konec') regionu si označíme značkou (mark) - označkujeme (nebo omarkujeme?). Taková značka se umístí na posici bodu klávesami: C-SPC 'SPC' je samozřejmě mezerník (space). Pak bodem popojedeme kamsi a to, co nám zůstane mezi bodem a značkou, je právě region. Máme-li to štěstí a vhodně přizpůsobený terminál, vidíme celý region barevně odlišený. Co můžeme dělat s regionem: C-w vymazání z textu (zůstane uložený 'kdesi') (obvyklé CUT) C-y vložení ('odkudsi') zpátky do textu tam, kde je zrovna bod (obv. PASTE) M-w uložení 'kamsi', aniž by se text vymazal (obvykle známé jako COPY)

Hm, co je to ta klávesa 'M'? Tak jako C- symbolisovalo klávesu 'Ctrl', tak M- symbolisuje klávesu 'Meta'. Menší potíž je ta, že klávesu s takovým nápisem na své klávesnici těžko najdete. A proto dost silně závisí na tom, na jakém stroji a v jakém prostředí a jakým způsobem máte Emáč nainstalovaný a nakonfigurovaný. Ve většině implementací na PC se nabízí použít pro tajemnou klávesu 'Meta' známou klávesu 'Alt'. Můžete vyzkoušet. Pokud se nepovede, je obvyklá ještě jedna běžná alternativa: jako klávesu 'Meta' použít 'Esc' (Escape). Nicméně v jejich použití je jeden drobný, leč podstatný rozdíl: zatímco při použití klávesy 'Alt' tuto klávesu držíme stisknutou po celou dobu, kdy tiskneme další klávesu (podobně jako 'Ctrl' nebo 'Shift' - klávesy tiskneme najednou), při použití klávesy 'Esc' tuto klávesu před stisknutím další klávesy musíme uvolnit (klávesy tiskneme postupně).

A pro dnešek ještě poslední z 'obvyklých' editačních příkazů: vyhledávání a nahrazování textových řetězců: C-s vyhledávání (vpřed) C-r vyhledávání (vzad) M-% vyhledávání a nahrazení

(jak jste si všimli, pro M-% vlastně musím pravděpodobně tisknout najednou tři klávesy: 'Alt', 'Shift' a nakonec klávesu '5', která 'shiftovaná' znamená procento.)

A nakonec: C-_ 'zpátky na stromy' Tento příkaz (Ctrl podtržítko) se původně jmenuje 'undo' a udělá to, že přivede náš text do takového stavu, v jakém byl před posledním editačním 'zákrokem'. Takže pokud se někdy 'uklepneme', můžeme tu pohromu zase uvést zpátky, jako by se nechumelilo.

Takže: už známe obvyklé editační příkazy Tudíž: ode dneška si dáme závazek, že už nebudeme používat žádný jiný editor, než Emáč, Emáč, Emáč. Nainstalujeme si jeho jméno do všech možných Norton/Volkov/M602/aj./commanderů a kdyby nás snad v noci slavík k T602 lákal, hodíme po něm klávesnicí.

DEN TŘETÍ

editovat

Minule jsem na vás ušil takovou malou boudu a teď se bojím: dočte vůbec někdo až sem? Co s editorem, který se od všech ostatních editorů liší jen tím, že je desetkrát větší, trochu neohrabanější a s ovládáním lehce krolomným (pardon, prstolomným)? To ti, kterým už ta trpělivost došla.

Ti o něco trpělivější si jen povzdechnou: no jo, takových už jsme si užili, co se dá dělat. Zkrátka našprtáme se zase nějaké nové prstoklady a budeme umět zase další editor - třeba to k něčemu časem bude. Takoví očekavají, že dneska proberem další řádku příkazů, další den další a další zase další ... no a tak dál, až zkrátka si řekneme všechny příkazy a bude konec kursu. No, obávám se, že během takového postupu by postupně odpadávali další a další a kdo by zbyl, by měl minimální naději, že někdy pochopí, co je vlastně Emáč. Ono totiž znát nazpaměť různé kombinace kláves nerovná se znát Emáč. On totiž Emáč vůbec netkví v nějakých klávesových kombinacích a jejich zručném používání. A už vůbec ne v takových kombinacích, které bychom se teď začali učit nazpaměť.

Tak tedy - znova od začátku a trochu víc popořádku: Emáč je textový editor a jako takový samozřejmě disponuje určitou množinou příkazů, jak manipulovat s textem a dělat různé jiné užitečné věci. Jenže tato množina příkazů nerovná se množina nějakých klávesových grifů, které jsme se až doposud učili. Samozřejmě, že mezi příkazy a mačkáním kláves existuje nějaká souvislost, ale tato souvislost není nijak pevně daná, ale je daná tabulkou tzv. 'key-bindings', která popisuje, jakými klávesovými kombinacemi je možno vyvolat ten který příkaz.

Když si Emáč nově nainstaluji, existuje tu taková předpřipravená tabulka 'default key bindings' - což jsou právě ty prstoklady, které jsme se v minulých dnech šprtali. Ale nikdo (tím méně tvůrci Emacsu) nás nenutí k tomu, abychom jich používali. Naopak: není problém si vhodně nakonfigurovat Emasc tak, aby se choval tak, jako náš oblíbený editor. Samozřejmě, když jsem se to dozvěděl, měl jsem silnou tendenci tohoto zjištění okamžitě využít, svázat výmaz řádku s C-y, atd. ... Nakonec jsem to z jistých důvodů neudělal a proto: nedoporučuji se v tom příliš unáhlovat. Prosím - opět strpení. Vydržme zatím už jen s tím pouhým hřejivým vědomím, že až už to opravdu nepůjde dál vydržet a bude nejhůř, tak si celý Emáč budeme moct převálcovat podle svého. Ale předtím - zkusme nejprve pochopit, co to ten Emáč vlastně je, co umí a co se s ním dá dělat.

Pro zopakování: názvy příkazů jsou to, co se nemění, vazby kláves (key bindings) je to, co lze lehce nastavit. Proto je vhodnější si říkat názvy příkazů, co dělají a jen tak mimochodem občas uvést jejich defaultní vazbu s klávesami. Jak se vlastně jmenují ty příkazy, které už umíme používat:

Klávesa 1 Anebo1 Popis2 Poznámka
C-x C-s save-buffer 3)
C-x C-c save-buffers-kill-emacs 4)
C-b left backward-char
C-f right forward-char
C-p up previous-line
C-n down next-line
M-b C-left backward-word
M-f C-right forward-word
M-{ C-up backward-paragraph
M-} C-down forward-paragraph
M-v prior scroll-down 5)
C-v next scroll-up 5)
C-a beginning-of-line
C-e end-of-line
M-< home beginning-of-buffer 3)
M-> end end-of-buffer 3)
insert overwrite-mode 6)
C-d delete delete-char
DEL delete-backward-char 7)
C-k kill-line
C-w kill-region
M-w kill-ring-save 8)
C-y yank
C-s isearch-forward 9)
C-r isearch-backward 9)
M-% query-replace
C-_ undo


Poznámky:

1) V prvních dvou sloupečcích jsou uvedeny defaultní klávesy. V prvním sloupečku jsou "standardní" kombinace, které by měly fungovat na jakékoliv alfanumerické klávesnici. Druhý sloupeček ukazuje využití klávesnice PC, vybavené kursorovými a dalšími speciálními klávesami.

2) Ve třetím sloupečku jsou jména příkazů. Předpokládám, že budou srozumitelné i pro ty, kterým angličtina činí potíže.

3) Během editace je soubor z disku natažen do bufferu, tj. vyhrazené části paměti, ve které probíhají změny. Proto se nehovoří o uložení 'souboru', ale o uložení bufferu.

4) Před ukončením (dosl. 'zabitím') Emáče je zkontrolováno, jsou-li uloženy všechny změny z bufferů na disk.

5) 'prior' označuje na PC klávesnici klávesu PgUp, 'next' klávesu PgDn. Je zřejmé, že při povelu 'o stránku (obrazovku) výš' musí text rolovat dolů, při 'stránce níž' naopak nahoru.

6) Normálně se Emáč spustí v 'insert módu', kdy nový text je vpisován mezi starý. Klávesa 'insert' zapíná a vypíná 'overwrite' mód, ve kterém nově psaný textr přepisuje starý. Tento mód je signalizován na stavovém (předposledním) řádku návěštím 'Ovwrt'.

7) 'DEL' zde (z historických důvodů) označuje klávesu 'backspace'. Označení pro další speciální klávesy jsou např: RET, TAB, LFD, ESC, SPC

8) 'kill-ring' označuje kruhovou frontu, do které se ukládají všechny vymazané části textu. Viz dále.

9) 'isearch' označuje 'inkrementální (přírůstkové) vyhledávání': už během zadávání hledaného výrazu editor vyhledává odpovídající řetězce.

O stisku kláves, spojených symbolicky pomlčkami, např. C-a nebo M-%, budeme hovořit jako o 'klávese' (key). Pokud k vykonání nějakého příkazu stačí takováto 'klávesa', budeme ji nazývat 'kompletní' (complete key). V některých případech - např. uložení souboru nebo ukončení Emascu, viz první dva příklady - musíme napřed stisknout C-x a pak ještě další klávesu, neboť C-x samo o sobě nepředstavuje žádný příkaz, je to jen jakási "předložka" - proto takovou klávesu nazýváme prefixovou (prefix key).

DEN ČTVRTÝ

editovat

Buffer je část paměti, ve které má Emáč umístěný text, se kterým pracuje. Takových bufferů může být víc. Nesmí nás mýlit, že při editování vidíme text na obrazovce: obrazovka je jen jakýmsi okénkem do bufferu, kde je skutečně uložen editovaný text. A skutečně - obrazovku je možno rozdělit na několik okének a každým okénkem pozorovat určité místo v určitém bufferu.

Abychom se v bufferech dokázali orientovat, dáme každému bufferu vlastní, jedinečné jméno. Toto jméno může, ale nemusí být shodné se jménem editovaného souboru.

Terminologická poznámka: pokud pouštíme Emáč v X-windows, tak jednotlivá 'X-okénka' se v emáčí řeči nazývají 'rámy' (frames). Výraz 'okénko' (window) v emáčí řeči znamená, že každý rám může být rozdělen na další, menší okénka. V případě, že máme Emáč na normálním znakovém terminálu, pak celou plochu obrazovky můžeme chápat jako jeden 'rám' a tudíž ji můžeme dělit na okénka.

Okénko má tři části: - největší plochu zabírá zobrazený text z bufferu - předposlední řádek je stavový - ukazuje stav editovaného bufferu - poslední řádek, nazývaný 'echo area', je oblastí, kde se zobrazují všelijaké krátké texty, zprávy, hlášky atd. Také slouží k zobrazení tzv. minibufferu, který slouží ke vstupu argumentů (například při zadání vzoru, který se má vyhledat).

Ve stavovém řádku vidím právě teď, například:

--**-Emacs: muj-emac.kam 19:57 (T:Text Ovwrt Fill)--L364--C64--61%-----

což lze vykládat:

  • -- Počáteční pomlčky
  • ** Buffer byl změněn
  • - Emacs: Právě pracuji s Emacsem (můžu spouštet i jiné programy)
  • muj-emac.kam Jméno bufferu (shodou okolností stejné jako soubor)
  • 19:57 Kolik máme hodin:minut
  • T: Text Hlavní mód (major mode): Textový Další možné módy: Fundamentální (tj. nejméně specializovaný), Lisp, C, Texinfo aj.
  • Ovwrt Fill Vedlejší módy (minor modes):
    • Overwrite: starý text je přepisován novým
    • Fill mode: text se automaticky zalamuje na konci řádků
  • --
  • L364 bod je právě na 364. řádce (počítáno od prvého)
  • --
  • C64 bod je právě před 64. sloupcem (počítáno od nultého)
  • 61% 'Nad' okénkem je už 61% textu. jiné možnosti:
    • Top - okénko je na začátku bufferu
    • Bot - okénko je na konci bufferu
    • All - v okénku je vidět celý buffer

Už výše jsme naznačili rozdíl mezi kursorem a bodem. Kursor je na obrazovce typicky jen jeden a označuje zpravidla místo, kam se bude bezprostředně dál psát, takže mám-li na obrazovce např. více okének, může být kursor pouze v jednom z nich, zatímco body jsou posazené v různých textech v jednotlivých okénkách. Anebo: během vyplňování argumentu se přesune kursor do 'echo area', ale bod zůstane na svém místě v textu.

Externí reference

editovat