Emacs pro mírně pokročilé: Registry a bookmarky

10. 4. 2001
Doba čtení: 5 minut

Sdílet

Jedněmi zavrhovaný, druhými vychvalovaný, terč mnoha posměšků a úšklebků, zdroj mnohých inspirací. Takový je editor Emacs. Obrovský a na první pohled neproniknutelný, velký a mocný pomocník, pokud se vám podaří ho zkrotit.

Následující série článků si klade cíl volně navázat na seriál o Emacsu, který na těchto stránkách již vycházel. Není tedy určena úplným začátečníkům. Měla by přiblížit některé „pokročilejší techniky a praktiky“, konkrétně zejména využití Emacsu při programování, čtení elektronické pošty, tvorbě publikací apod. Nelze ovšem říci, že by nemohla být přínosem pro začátečníky. S jistotou lze ovšem vzkázat čtenářům, které už teď svrbí ruce a hlavou se jim honí „vtipné“ reakce o „operačním systému bez editoru“ či podobně, že nenaleznou v tomto seriálu patřičné zalíbení. Uživatelé Emacsu (včetně autora tohoto článku) si jsou dobře vědomi velikosti tohoto editoru i jeho nevýhod. Ale konec planých řečí a s chutí do toho.

Naše povídání začneme poněkud mírně, a to tak obecnou funkcí editoru, že se hodí jak programátorům, tak například i překladatelům. Převážná většina dostupných editorů poskytuje uživatelům základní funkci: kopírování označeného bloku textu. Obvykle editor umožňuje takto nakládat s jednou částí textu, tzv. blokem. Emacs tuto „službu editoru“ rozšiřuje a přináší tzv. registry, které, jak uvidíme, slouží nejen pro uchovávání částí textu.

Registry v Emacsu jsou místa, kam lze ukládat text či pozice v bufferu pro pozdější použití. Text uložený do registru lze později jednou či vícekrát zkopírovat na dané místo; podobně se lze kdykoli přesunout na pozici uloženou v registru. Každý registr má jméno, kterým je jediný znak. Registr může uchovávat část textu, obdélníkový výřez textu (rectangle), pozici, konfiguraci okna nebo jméno souboru, ale v danou chvíli vždy pouze jeden takovýto záznam. Cokoli je v registru uloženo, zůstává zde do chvíle, kdy je do téhož registru uloženo něco jiného. K prohlížení obsahu registru slouží funkce  view-register.

Uložení pozice zaznamená místo v bufferu. Později se lze tedy na toto místo přesunout. Takovýto odskok na uloženou pozici automaticky přepíná do daného bufferu a posouvá pozici kursoru na uložené místo. Pozici lze do registru uložit pomocí funkce point-to-regiter, skok na pozici je pak realizován funkcí jump-to-register. Většina funkcí, o kterých budeme hovořit, má předdefinované klávesové zkratky a valná většina z nich začíná kombinací C-x r (i přesto, že se jedná o seriál pro mírně pokročilé, se sluší připomenout, že C-x r představuje v Emacsu kombinaci kláves Control a x následovaných klávesou r). Funkci uložení aktuální pozice do registru pojmenovaného například ‚R‘ vyvoláme pomocí C-x r <SPC> R. Podobně zadáním C-x r j R vyvoláme odskok na registr pojmenovaný ‚R‘. (Milovníci mnemotechnických pomůcek tuší správně, že ‚j‘ je počáteční písmeno anglického jump a ‚<SPC>‘ je zde analogií uložení značky v Emacsu.) Pokud chceme odskočit na pozici bufferu, který byl mezitím zavřen, pokusí se Emacs znovu otevřít daný soubor a vytvořit tak tentýž buffer.

Chceme-li vkládat opakující se část textu vícekrát, bývá často užitečné uložit si takovýto fragment do registru. Samozřejmě se v Emacsu nabízí možnost využít tzv. kill-ring-u, ten se ovšem během editace poměrně rychle mění. Alternativou tedy může být ukládání textu do registru. Ke zkopírování regionu (ohraničené části bufferu) do registru slouží funkce copy-to-register, tedy opět např. pro region pojmenovaný ‚R‘ klávesy C-x r s R. Vložení textu z registru ‚R‘ na aktuální pozici kursoru obsluhuje funkce insert-register, kterou lze vyvolat pomocí C-x r i R pro stejnojmenný registr. Pokud je před příkaz pro zkopírování textu do registru předřazen universal-argument (zkratka C-u, též tzv. numerický argument), bude kopírovaný text zároveň z bufferu odstraněn. Při vkládání textu bude kurzor umístěn před vložený text a značka nastavena na konec zkopírovaného textu. Prohození lze docílit opět pomocí tzv. numerického argumentu.

Obdélníkové výřezy v textu jsou specialitou Emacsu, kterou málokdo používá. Jedná se o nelineární části textu, reprezentované seznamem řetězců. Alespoň okrajově se zmíníme, že vložení takovéhoto výřezu (rectangle) se provádí pomocí funkce copy-rectangle-to-register, tedy opět např. pro region se jménem ‚R‘ zkratkou C-x r r R. Pro vložení slouží již zmiňovaná funkce insert-register.

Jelikož bych nerad čtenáře unavil přílišnými podrobnostmi, které si může přečíst v manuálu, pouze informativně se zde zmíním, že další možností, jak využít schopnost editoru „registrovat“ vaši práci, je ukládaní konfigurace okna či rámce do registrů. Pokud se vám stává, že velmi často editujete nějaký konkrétní soubor, lze do registru uložit jméno souboru. Řekněme, že jako správce systému často editujete soubor ‚/etc/passwd‘, pak pomocí lisp-ovského kódu (který lze například vložit do konfiguračního souboru) (set-register ?p '(file . "/etc/passwd")) uložíte do registru jménem ‚p‘ toto jméno souboru. Pokaždé, když nyní zatoužíte editovat tento soubor, stačí jednoduše odskočit ( C-x r j p) na tento registr. Pro úplnost dodejme, že kromě všech předešlých informací lze do registrů ukládat také čísla.

Bookmarky

Řeknete si „nojo, dobrá věc tyhle registry, ale když Emacs zavřu, mám po registrech“. Registry lze samozřejmě uchovávat i po opuštění editoru (např. způsobem, jaký jsme viděli při „registraci“ jména souboru). Nicméně další možností je použití tzv. bookmarků. Bookmarky jsou velmi podobné registrům. Na rozdíl od nich mohou ovšem mít dlouhá jména (rozuměj více než jeden znak) a automaticky přetrvávají při dalších spuštěních. Pro práci s bookmarky slouží celá řada funkcí. O všech se nebudeme rozepisovat a uvedeme pouze ty nejužitečnější.

ict ve školství 24

Typickým použitím bookmarků je uložení aktuální pozice v různých bufferech. Tedy například pomocí C-x r m (funkce bookmark-set) nastavíme bookmark na aktuální pozici otevřeného souboru, a jako defaultní jméno nabídne Emacs jméno souboru. Takto lze však také pokládat značky i na zajímavá místa v info stránkách. Jiné než defaultní jméno bookmarku zadáme snadno z klávesnice, přímo v promtu. Pro skok na příslušný bookmark slouží kombinace C-x r b BOOKMARK, kde BOOKMARK je zadané jméno bookmarku (Emacs nabízí jako defaultní posledně navštívený), volaná funkce se jmenuje bookmark-jump. Výpis bookmarků lze získat pomocí C-x r l ( list-bookmarks). Bookmarky lze ukládat buď explicitně pomocí funkce bookmark-save, anebo v případě, že jste je neuložili, se Emacs při ukončení práce sám zeptá, zda je má uložit. Standardně se ukládají do souboru ‚~/.emacs.bmk‘.

Ani výklad o registrech, ani ten o bookmarcích není úplný. Seriál však nemá sloužit jako náhrada manuálu, nýbrž jako návod či průvodce pro ty, kteří se rozhodli využívat Emacs lépe a efektivněji než doposud. Rád bych na tomto místě poznamenal, že obsah seriálu můžete ovlivnit svými reakcemi a názory. Několik příštích dílů bych rád věnoval Emacsu a programování. Dozvíte se, jak měnit odsazování, jak lze kompilovat, ladit a spouštět programy v prostředí Emacsu, jak používat software pro správu verzí (zejména CVS), či jak pracovat s tagy.