Abyste mohli dělat něco rozumného s počítačem, potřebujete mít možnost ukládat texty do souborů a měnit texty, které jsou v souborech uloženy. Takové úkony vám umožní realizovat textový editor. Emacs je jeden z nejpopulárnějších editorů na světě - zejména proto, že i začátečníkům umožňuje bez problémů pracovat s textovými soubory. Klasický editor dodávaný s operačním systémem Unix, vi, probereme v dodatku A.
Než se začnete učit pracovat s editorem Emacs, musíte si najít nějaký soubor obsahující obyčejný text a zkopírovat si jej do domovského adresáře.
Na začátek by bylo riskantní editovat originální soubor, mohl by obsahovat důležité informace. Editor Emacs se spouští jednoduše:
/home/larry# emacs README
Pokud jste se rozhodli zkopírovat soubor /etc/rc, /etc/inittab nebo jiný, pak samozřejmě jako parametr uvedete jméno tohoto souboru - například emacs rc. Spuštění editoru Emacs může mít různý efekt. Záleží to na tom, v jakém prostředí jej spouštíte. V textovém terminálu zobrazujícím pouze textové znaky vytvoří nastartovaný editor Emacs okno přes celou obrazovku. Pokud jej spustíte v systému X Window, vytvoří si editor své vlastní okno. Budeme předpokládat, že jste spustili editor Emacs v textovém terminálu.
Vše, co zde budeme uvádět, bude platit i pro editor Emacs spuitiný v okně systému X Window. V systému X Window nezapomínejte přesunout kurzor myši na okno obsahující editor, jinak nebudete moci nic psát.
Vaše obrazovka (nebo okno v systému X Window) by měla vypadat přibližně tak, jak je zobrazena na obrázku 8.1. Většina obrazovky obsahuje text vašeho souboru. Obzvláště důležité jsou poslední dva řádky, zejména chcete-li se naučit pracovat s tímto editorem. Řádek obsahující dlouhé posloupnosti pomlček je řádek specifikující mód editoru (modeline).
Na uvedeném obrázku vidíte v předposledním řádku slovo “Top”. Může zde být také uvedeno slovo “All” a mohou se zde také vyskytovat malé rozdíly, což záleží na verzi editoru. Někteří uživatelé mají v tomto řádku zobrazen aktuální čas. Pod uvedeným řádkem se nachází informační a příkazový řádek, někdy označovaný jako “minibuffer”, jindy jako “echo area”.
Informační řádek slouží editoru ke komunikaci s uživatelem, k vypisování zpráv a někdy zde jeho prostřednictvím budete zadávat příkazy. Budou se zde objevovat takové pokyny, jako:
“For information about GNU project and its goals, type C-h C-p”. Zatím takové pokyny ignorujte, budeme se jimi zabývat později.
Než opravdu změníte text v nějakém souboru, musíte se naučit “pohybovat” textem a pohybovat kurzorem. Kurzor by měl být umístěn na začátku souboru v levém horním rohu obrazovky. Chcete-li kurzor posunout o jeden znak dopředu, stiskněte kombinaci kláves C-F (stiskněte klávesu Ctrl, držte ji stisknutou a stiskněte klávesu F). Kurzor se posune o jeden znak dopředu. Pokud budete obě klávesy stále držet stisknuty, bude se pohyb kurzoru opakovat. Všimněte si, že když kurzor dospěje na konec řádku, automaticky se přesune na začátek následujícího řádku. Opačného směru pohybu kurzoru dosáhnete pomocí kláves C-B. Pokud chcete posunout kurzor o jeden řádek dolů, použijte klávesy C-N, pokud jej chcete posunout o jeden řádek nahoru, stiskněte klávesy C-P.
Používání klávesy zajišťuje nejrychlejší způsob, jak při editování textu pohybovat kurzorem. Editor Emacs používá takové kombinace kláves, které při psaní udržují vaše ruce nad klávesnicí. Jestliže jste však zvyklí používat kurzorové klávesy, budou také fungovat.
Pokud pracujete v systému X Window, můžete k nastavení pozice textového kurzoru použít kurzor myši. Stačí kurzor myši nastavit na požadovanou pozici v textu a klepnout levým tlačítkem. Tento způsob je však velmi pomalý (jednou rukou musíte opustit klávesnici, uchopit myš, nastavit kurzor a pak se na klávesnici zase vrátit) a nedoporučujeme si na něj zvykat.
Většina uživatelů, kteří pracují s editorem Emacs dlouhodobě, používá k pohybu kurzoru výhradně klávesnici.
Pomocí kláves C-P a C-B nastavte kurzor opět na začátek souboru, tedy horní levý roh obrazovky. Nyní podržte klávesy C-B stisknuty poněkud déle. Uslyšíte pípnutí a v informačním řádku uvidíte zprávu “Beginning of buffer”.
V tomto okamžiku se asi podivíte. Co je to buffer?
Když editor Emacs zpracovává soubor, nepracuje ve skutečnosti se souborem přímo. Zkopíruje si jeho obsah do speciální pracovní oblasti, která se nazývá buffer - zde můžete obsah souboru modifikovat. Až ukončíte editaci souboru, dáte příkaz, aby editor buffer uložil. Do té doby zůstane obsah původního souboru nezměněn a změny se provádějí pouze uvnitř pracovní oblasti editoru.
Nyní jsme tedy připraveni obsah bufferu modifikovat. Vše, co jsme dělali doposud, bylo “nedestruktivní", což znamená, že jsme obsah bufferu neměnili. Předpokládejme, že chcete do editovaného souboru zapsat znak “X”. Jakmile stisknete klávesu X, změní se předposlední řádek obrazovky. Editor Emacs registruje změny v editovaném textu a jakmile nějaké nastanou, informuje o tom uživatele pomocí dvou hvězdiček před slovem Emacs. Pak bude uvedený řádek vypadat asi takto:
--**-Emacs: some_file.txt (Fundamental)--Top-------------------
Hvězdičky zůstanou zobrazeny do té doby, než obsah bufferu uložíte. Obsah bufferu můžete v průběhu editace ukládat průběžně vícekrát - stačí stisknout klávesy C-X C-S (stiskněte klávesu Ctrl, držte ji stisknutou a pak stiskněte klávesu “X” a “S”). Průběžné ukládání obsahu bufferu má význam především při vytváření nebo modifikaci velkých souborů.
Nyní si uvedeme seznam několika málo příkazů používaných v editoru Emacs spolu s těmi, které jsme již popsali. Je na vás, abyste si jejich používání procvičili. Než pokročíme dále, měli byste s těmito příkazy být důkladně seznámeni.
C-F | Posunutí kurzoru o jeden znak doprava. | C-V | Zobrazení následující stránky. | |
C-B | Posunutí kurzoru o jeden znak doleva. | C-L | Zobrazení stránky s aktuálním řádkem uprostřed. | |
C-N | Posunutí kurzoru o jeden řádek dolů. | C-D | Zrušení znaku, na kterém je umístěn kurzor. | |
C-P | Posunutí kurzoru o jeden řádek nahoru. | C-K | Zrušení textu od pozice kurzoru do konce řádku. | |
C-A | Umístění kurzoru na začátek řádku. | C-X C-S | Uložení obsahu bufferu do odpovídajícího souboru. | |
C-E | Umístění kurzoru na konec řádku. | Backsapce | Zrušení znaku vlevo od kurzoru. |
Pokud chcete rychle editovat soubory pod systémem X Window, máte poněkud ulehčenou situaci. Editovaný text je zobrazen pod nabídkou funkcí editoru, proto je práce s editorem intuitivnější.
V textovém módu uvedená nabídka není dostupná.
Když poprvé spustíte editor Emacs pod systémem X Window, obsahuje nabídka čtyři hlavní položky: Buffers, File, Edit a Help. Potřebujete-li si některou z položek hlavní nabídky zpřístupnit, nastavte kurzor myši na tuto položku, stiskněte levé tlačítko myši (držte je stále stisknuté). Pak přesuňte kurzor na požadovanou funkci a tlačítko myši uvolněte. Jestliže žádnou funkci vybrat nechcete, přesuňte kurzor myši mimo nabídku a opět uvolněte tlačítko myši.
Nabídka Buffers obsahuje seznam různých souborů, které v této relaci s editorem Emacs editujete. Nabídka File obsahuje příkazy pro zavádění a ukládání souborů. Funkce této nabídky podrobněji popíšeme později. Nabídka Edit obsahuje některé nejdůležitějií příkazy pro editování textového souboru a prostřednictvím nabídky Help si můžete interaktivně zobrazovat vybrané části dokumentace k editoru.
Jistě jste si všimli, že u každé funkce v nabídce je uvedena ekvivalentní kombinace kláves pro realizaci této funkce. Na jedné straně můžete funkce vyvolávat pomocí myši a menu, na druhé straně můžete k tomuto účelu používat ekvivalentní kombinace kláves, což je samozřejmě rychlejší.
V daném okamžiku je editor Emacs schopen pracovat s více soubory. Ve skutečnosti platí, že počet souborů, které mohou být současně uloženy v bufferech editoru, je omezen pouze velikostí paměti počítače. Po zadání příkazu C-X C-Fse do bufferu editoru Emacs zavádí nový soubor. Když tento příkaz zadáte, v příkazovém řádku se objeví výzva k zadání jména souboru:
Find file: ~/
Syntaxe používaná k zadání jména souboru je stejná, jako v příkazovém řádku příkazového procesoru; lomítka se používají k oddělení adresářů a podadresářů, znak ~ je interpretován jako váš domovský adresář. I zde funguje možnost automatického doplňování jména souboru - zadáte-li dostatek znaků k tomu, aby mohlo být jméno souboru jednoznačně identifikováno, pak stačí stisknout klávesu Tab a zbytek jména souboru se doplní automaticky (nebo se zobrazí seznam jmen všech souborů, která zadané specifikaci vyhovují). Podobnou funkci jako klávesa Tab má klávesa mezerník. Necháme na vás, abyste zjistili, v čem se funkce vyvolané těmito klávesami liší. Máte-li zadáno jméno souboru, který chcete editovat, stiskněte klávesu e; editor zavede obsah souboru do své pracovní oblasti a zobrazí jej na obrazovce. V terminologii editoru Emacs se tento proces nazývá vyhledání souboru. Najděte si nějaký další soubor a popsaným způsobem jej zaveďte do editoru. Nyní máte v editoru nový buffer. Budeme předpokládat, že původní má název some_file.txt a nový má název another_file.txt. Zdá se, že se váš první buffer ztratil. Pravděpodobně se divíte, kam se poděl.
Neobávejte se, stále zůstává uvnitř editoru a k jeho opětovnému zobrazení stačí stisknout klávesu C-X B. Pak se vás editor v příkazovém řádku zeptá, do kterého bufferu se má přepnout. Nabídne implicitní buffer, t.j. buffer, jehož obsah se zobrazí po stisknutí klávesy e (nemusíte jméno bufferu uvádět). Implicitní buffer je ten, který jste “opustili” jako poslední.
Jestliže tedy pracujete se dvěma soubory a často mezi nimi přepínáte, používejte klávesu C-XBa nemusíte při každém přepnutí zadávat jméno souboru. Samozřejmě můžete jméno uvádět, ale bude vás to zdržovat. I při přepínání mezi buffery lze použít funkci k doplňování jména - stejně jako v případě vyhledávání souboru. Po stisknutí klávesy Tab doplní editor automaticky jméno bufferu, je-li schopen jej z doposud zadaných znaků jednoznačně identifikovat. Kdykoliv jste v příkazovém řádku vyzváni k zadání jména, vyzkoušejte si, zda je editor schopen jméno automaticky doplnit.
Automatické doplňování vám ušetří spoustu času a editor je schopen je realizovat pokaždé, když má vybrat nějakou položku z nějakého předdefinovaného seznamu. Vše, co jste se naučili o příkazech pro editování v prvním bufferu platí i v druhém. Pokročme dále - v novém bufferu změňte nějaký text, ale neukládejte jej (pomocí kláves C-X C-S). Nyní předpokládejme, že nechcete provedené změny uložit a že chcete buffer zrušit. K tomu slouží příkaz C-XK. Nejdříve se vás editor zeptá, který buffer chcete zrušit. Stisknete-li klávesu e, zruší se implicitní buffer (což je asi nejčastější případ). Editor se vás znovu zeptá, zda chcete buffer opravdu zrušit, a když zadáte “yes” a stisknete e, pak jej konečně zruší.
Nyní byste se měli důkladně procvičit v zavádění souborů, jejich modifikaci, ukládání, přepínání mezi buffery a rušení bufferů. Ujistěte se, že needitujete nějaké důležité soubory, které by mohly poýkodit funkci vašeho systému.
Vytvořte si alespoň pět bufferů a vyzkoušejte si přepínání mezi nimi.
Když ukončíte práci s editorem Emacs, ujistěte se, že všechny buffery, které mají být uloženy jsou skutečně uloženy. Pak můžete editor ukončit pomocí kláves C-X C-C. Někdy se vás editor po zadání kláves C-XC-C v příkazovém řádku na něco zeptá. Nebuďte znepokojeni a odpovězte normálním způsobem. Jestliže se domníváte, že se budete do editoru chtít později vrátit, nepoužívejte klávesy C-XC-C, ale klávesu C-Z. Pak bude aktivita editoru pouze pozastavena. K opětovné aktivaci editoru můžete použít známý příkaz fg. Pozastavení editoru je mnohem efektivnější, než jej stále dokola ukončovat a znovu startovat, zejména když opakovaně editujete tytéž soubory.
V systému X Window má funkce C-Z jiný efekt - provede transformaci okna s editorem do ikony. Podrobně jsme tento mechanismus popsali v kapitole 5. Existují tedy dvě možnosti, jak transformovat okno obsahující editor do ikony - buď normálním způsobem pomocí správce oken, nebo pomocí klávesy C-Z. V systému X Window však k opětovné aktivaci editoru nelze použít příkaz fg - musíte použít správce oken.
Doposud jsme při práci s editorem Emacs používali kombinace kláves s klávesou Ctrl. Existují však další možné kombinace, a to s klávesou Meta. Těmto kombinacím se v terminologii editoru Emacs říká meta-klíče. Bohužel ne všechny klávesnice mají klávesu Meta umístěnu ve stejné poloze a některé ji nemají vůbec. V případě klávesnic u počítačů IBM PC je klávesa stotožná s klávesou a.
Klávesu si můžete otestovat. Stiskněte tu klávesu, o které si myslíte, že by mohla být klávesou s, a zároveň stiskněte klávesu X. Pokud se v příkazovém řádku objeví malá nápověda (zpravidla M-X), pak jste kýženou klávesu nalezli. Stiskněte klávesu C-G a znovu se vrátíte do bufferu editoru Emacs.
Jestliže se vám v příkazovém řádku nic neobjeví, stále existuje řešení. Místo klávesy Meta můžete použít klávesu Escape. Avšak v tomto případě ji nedržte stisknutou - stiskněte ji, uvolněte a zadejte další klávesu reprezentující danou funkci. Vyzkoušejte si naši oblíbenou kombinaci, tedy Escape a pak “X”. Nyní se vám v příkazovém řádku nápověda určitě objeví. Opět stiskněte klávesu C-G. Klávesa C-G je v editoru Emacs určena ke zrušení čehokoliv, co nehodláte realizovat. Editor zpravidla vyšle zvukový signál, aby vás upozornil, že danou funkci rušíte.
Označení M-X je analogické označení C-X (kde x je klávesa reprezentující nějakou funkci).
Pokud jste nalezli skutečný klíč Meta, pak jej používejte. Jinak budete muset používat popsanou sekvenci s klávesou Escape. Kdekoliv v následujícím textu uvidíte M-X, pak to znamená, že máte použít meta-klíč.
Editor Emacs, tak jako prakticky každý editor, umožňuje pracovat s bloky textu. Abyste tyto funkce mohli využívat, musíte mít prostředek pro definování začátku bloku a konce bloku.
V editoru Emacs se definice bloku realizuje pomocí nastavení dvou pozic v bufferu, které se označují jako mark (značka) a point. Chcete-li v bufferu nastavit začátek bloku, nastavte kurzor na požadovanou pozici a stiskněte klávesu C-s(SPC je zkratka pro mezerník). V příkazovém řádku se objeví zpráva “Mark set”.
Nyní je začátek bloku nastaven. Editor nepoužívá žádné zvýrazňovací prostředky k tomu, aby byl začátek bloku viditelný. A co konec bloku? Konec bloku je definován aktuální pozicí kurzoru. Proto se pro něj používá v terminologii editoru Emacs termín point. Point zrovna tak například znamená místo, od kterého se má vkládat text při kopírování nebo vkládání bloků. Nastavením začátku bloku a přesunutím kurzoru na kteroukoliv jinou pozici v textu je definován začátek a konec bloku. Tento blok se nazývá region. Region je tedy vždy část textu mezi značkou a aktuální pozicí kurzoru.
Pouhá definice regionu nezpřístupňuje blok ke kopírování. Nejdříve musíte blok “zkopírovat” (copy), abyste jej pak mohli “nalepit” (paste) někam jinam. Má-li se blok zkopírovat, stiskněte klávesu M-W. Nyní je blok uložen ve speciálním bufferu editoru Emacs. Jestliže nyní chcete blok nalepit někam jinam, nastavte si kurzor na požadovanou pozici a stiskněte C-Y.
Pokud chcete blok textu přesunout (a ne zkopírovat), pak místo příkazu M-W použijte příkaz C-W. Tímto způsobem se blok po přenesení do speciálního bufferu vymaže. Když zjistíte, že jste blok nechtěli vymazat, stiskněte klávesu C-Ya blok se obnoví. Místo, do kterého editor Emacs ukládá části textu, se nazývá kill-ring. U jiných editorů se tato oblast nazývá “clipboard” nebo “paste buffer”.
Existuje ještě jeden způsob, jak vystřihovat a nalepovat text: kdykoliv stisknete klávesu C-K, dojde ke zrušení textu od pozice kurzoru do konce řádku a přitom se zruiený text také ukládá do oblasti kill-ring. Pokud takto zrušíte více než jeden řádek, uloží se všechny řádky do oblasti kill-ring a vy máte možnost je později nalepit najednou.
Někdy je tento způsob přesouvání a kopírování textu rychlejší, než používat systém s označováním začátku a konce bloku. Záleží jen na vás, kterému způsobu dáte přednost.
V editoru Emacs máte několik možností, jak vyhledávat text. Některé způsoby jsou komplikované a nemá smysl je zde popisovat. Nejjednodušší a nejčastěji používaná metoda je tzv. postupné vyhledávání označované jako “isearch” (incremental search). Předpokládejme, že potřebujete vyhledat řetězec “gadfly” v následujícím textu:
I was growing afraid that we would run out of gasoline, when my
passenger exclaimed
''Gadzooks! There's gadfly in here!''.
Nastavte pozici kurzoru na začátek textu nebo na místo, o kterém víte, že předchází hledanému řetězci, a zadejte příkaz C-S. Tím nastavíte editor Emacs do módu vyhledávání. Nyní začněte zadávat řetězec, který chcete vyhledat. Jakmile však napíšete první znak, tedy “g” “přeskočí” kurzor na první výskyt písmene “g” v textu. Jestliže máte v editoru text uvedený v našem příkladu, pak kurzor skočí na začátek slova “growing”. Nyní napište písmeno “a” (druhé písmeno ve slově “gadfly”) a editor přesune kurzor na slovo “gasoline", protože vyhledal první výskyt dvojice znaků “ga”. Když zadáte další písmeno “di” skočí kurzor na slovo “gadzooks” a nakonec po zadání písmene “f” skočí na hledané slovo “gadfly”. Přitom jste nemuseli zadat kompletní hledaný řetězec.
Při postupném vyhledávání funguje editor Emacs tak, že po každém zadání dalšího znaku hledaného řetězce vyhledá první výskyt toho slova, jehož začátek je shodný s doposud zapsanými znaky. Jakmile zadáte tolik znaků, aby vyhledávání bylo jednoznačné, můžete funkci ukončit stisknutím klávesy e. Jestliže se domníváte, že hledaný řetězec je nad aktuální pozicí kurzoru, pak zadejte příkaz C-R, čímž inicializujete zpětné vyhledávání.
Pokud naleznete první výskyt zadaného řetězce, ale zajímá vás jeho další výskyt, pak znovu zadejte příkaz C-S. Editor Emacs vyhledá následující výskyt zadaného řetězce a tak můžete pokračovat dále. Když editor výskyt hledaného řetězce nenalezne, vypíše zprávu, že řetězec nenašel a začne znovu vyhledávat od začátku bufferu. Podobná pravidla platí pro příkaz C-R.
Nyní si popsané funkce vyzkoušejte. Najděte si soubor s anglickým textem a vyhledejte v něm výskyt slova “the”. Pak pomocí opakované funkce C-S najděte další výskyty. Všimněte si, že editor přitom vyhledá i jiné řetězce, například “them”, protože vyhovují zadané specifikaci. Jestliže chcete vyhledat pouze řetězec “the”, pak na konec hledaného řetězce budete muset přidat mezeru. Při editování hledaného řetězce můžete používat standardní editační klávesy Backspace a Delete. Chcete-li vyhledávání ukončit, vždy použijte klávesu Enter.
Editor Emacs také umožňuje nahradit výskyt jednoho řetězce jiným. Tento proces se v terminologii editoru Emacs označuje jako query-replace. Proces zahájíte tak, že stisknete M-X a napíšete query-replace a stisknete Enter.
I v případě zadávání příkazů funguje v editoru Emacs doplňování, a proto stačí, když například napíšete “query-r”, a stisknete klávesu Tab. Předpokládejme, že chcete řetězec “gadfly” nahradit řetězcem “housefly”. V příkazovém řádku “Query replace:” zadejte “gadfly” a stiskněte e. Pak budete opět vyzváni k zadání řetězce, kterým se má původní řetězec nahradit - zadejte “housefly”. Editor Emacs bude nyní procházet text, zastavovat kurzor na každém výskytu řetězce “gadfly” a bude se vás ptát, zda má nalezený řetězec nahradit. Pokud ano, stiskněte klávesu Y, pokud ne, stiskněte klávesu N. Jestliže je pro vás předcházející výklad příliš komplikovaný, popsané funkce si vyzkoušejte. Bude to mít pro vás větší význam, než kdybyste předcházející odstavce četli desetkrát.
Všechny funkce editoru Emacs vyvolané stisknutím nějaké kombinace kláves mají nějaký název, kterému editor “rozumí”. Například klávesa C-P znamená pro editor Emacs provedení vnitřní funkce previous-line. Všechny vnitřní funkce mohou být volány prostřednictvím svého jména, a to po stisknutí klávesu AltCtrl+X. Když například zapomenete, jaký klíč máte použít k nastavení kurzoru na předcházející řádek, stačí zadat: M-X previous-line a e. Vyzkoušejte si to a přesvědčte se, že C-P a M-X previous-line realizují tutéž funkci.
Autor editoru Emacs postupoval tak, že nejdříve definoval celou množinu vnitřních funkcí editoru a pak teprve navrhl klávesové zkratky pro realizaci nejčastěji používaných funkcí. Někdy je jednodušší použít explicitní volání funkce prostřednictvím M-X, než si pamatovat klávesovou zkratku svázanou s touto funkcí. Například funkce query-replace je u některých verzí editoru Emacs svázána s klávesou M-X. Kdo si ale má pamatovat takovou divnou kombinaci? Pokud budete náhradu řetězců provádět extrémně často, pak má samozřejmě smysl si klávesovou zkratku pamatovat.
Většina kláves, které stisknete, jsou písmena, číslice, případně další znaky, které se mají vkládat do textového bufferu. Každá z těchto kláves je svázána s funkcí, jež má jméno selfinsert-command. Tato funkce nedělá nic jiného, než že dané písmeno nebo číslici vloží do bufferu. Kombinace kláves, například s klávesou Ctrl, jsou obecně svázány s jinými funkcemi - pohyb kurzoru a podobně. Například kombinace C-V je svázána s funkcí scroll-up, což znamená, že se editovaný text posune o jednu obrazovku dolů.
Jak ale postupovat, když do textu chcete vložit řídící znak? Konec konců, řídící znaky jsou také znaky ASCII, i když zřídkakdy používané. Může se stát, že budete chtít do textu takový znak vložit. Proto v editoru Emacs existuje prostředek, který zabrání editoru interpretovat kombinaci klávesy s klávesou ¶jako příkaz. Klávesa C-Q je svázána se speciální funkcí, která má název quoted-insert. Jediné, co funkce quoted-insert dělá, je, že přečte následující klávesu a vloží ji do textového bufferu bez interpretace. Pokud chcete do textu vložit samotný znak C-Q, pak zadejte C-Q dvakrát.
V editoru Emacs existují některé funkce, jež nejsou svázány s žádnou kombinací kláves. Když například píšete dlouhý text, pak asi nebudete chtít ukončovat každý řádek klávesou e. Po editoru Emacs můžete chtít, aby to dělal za vás (po editoru Emacs můžete chtít cokoliv). Příkaz, který takovou funkci realizuje, má název auto-fill-mode. Není však implicitně svázán s žádnou kombinací kláves. Jestliže chcete tento příkaz inicializovat, zadejte M-X autofill-mode. Jak jsme si již řekli, “M-X” je klíč umožňující vyvolat vnitřní funkci editoru jménem. Takto byste mohli vyvolat i funkci next-line (následující řádek) nebo previous-line (předcházející řádek), ale to by bylo velmi neefektivní, protože uvedené funkce jsou svázány s klávesami C-N a C-P.
Mimochodem, když se po vyvolání funkce auto-fill-mode podíváte na předposlední řádek, uvidíte zde na pravé straně slovo Fill. Dokud se zde toto slovo vyskytuje, bude editor Emacs ukončovat řádky za vás. Když funkci “M-X auto-fill-mode” vyvoláte znovu, automatické ukončování řádků přestane fungovat - funkce je vytvořena jako přepínač.
Může se vám zdát, že zadávání funkcí prostřednictvím jejich dlouhých jmen není příliš pohodlné. Naštěstí i v tomto případě v editoru Emacs funguje doplňování jmen (stejně jako doplňování jmen souborů). Proto platí, že zřídkakdy budete muset vypisovat celé jméno funkce, písmeno po písmenu. Pokud si nejste jisti, zda bude editor schopen doplnit jméno, stiskněte klávesu Tab. V horším případě se vám objeví znak Tab, v lepším případě editor provede doplnění.
Editor Emacs má velmi rozsáhlou nápovědu. Tak rozsáhlou, že se o ní zmíníme jen velmi stručně. Nejvyšší úroveň nápovědy se vyvolá stisknutím klíče C-H a nějakého písmene. Například C-H Kvyvolá nápovědu vztahující se ke klíčům (budete vyzváni k zadání klíče a pak se objeví text s vysvětlením, jakou funkci klíč realizuje). C-HTvyvolá výukový program editoru Emacs. K důležitým klíčům patří C-HC-HC-H, kdy se vám objeví “nápověda o nápovědě”. Zde se dozvíte vše o systému nápovědy. Když znáte jméno funkce editoru Emacs (například save-buffer), ale nemůžete si vzpomenout na klíč k jejímu vyvolání, použijte C-HW(“where is”) a zadejte jméno funkce. Zrovna tak máte možnost zjistit podrobné informace o dané funkci - zadejte C-HFa pak jméno funkce.
Mějte na paměti, že editor Emacs je sice schopen doplňovat jména funkcí, avšak nemůžete na tuto vlastnost příliš spoléhat, pokud k nějaké funkci (jejíž název přesně neznáte) potřebujete nápovědu. Jestliže si myslíte, že můžete odhadnout slovo, kterým funkce začíná, zkuste je napsat a stiskněte Tab. Uvidíte, zda editor byl schopen funkci identifikovat. Pokud ne, zkuste něco jiného. Totéž platí pro jména souborů. I když si nemůžete vzpomenout, jak se jmenuje soubor, který jste editovali před mnoha měsíci, můžete název odhadnou a zkusit, co na to editor odpoví. Doplňování jmen je tedy nejen užitečné v tom, že šetří čas, ale pomáhá vám nalézt to, co jste již zapomněli, nebo to, co si přesně nepamatujete.
Existuje několik dalších znaků, které můžete zadat po příkazu C-H a tak získat nápovědu různým způsobem. Nejčastěji však budete používat C-HK, C-HWa C-HF. Až budete blíže seznámeni s editorem Emacs, vyzkoušejte si například C-H A. Pak se vás editor zeptá na řetězec a mezi všemi jmény funkcí nalezne to, které daný řetězec obsahuje. (Písmeno “a” je zkratkou pro “apropos” nebo “about”)
Jiný zdroj informací o editoru Emacs nabízí systém pro čtení dokumentace v hypertextovém formátu Info. Ten můžete inicializovat přímo z editoru Emacs tak, že stisknete klíč C-HI. Pak se vám objeví základní stránka systému Info, ve které najdete další pokyny, jak postupovat při vyhledávání informací.
Každý buffer editoru Emacs je spjat s tzv. módem. Módy byly zavedeny z toho důvodu, že například při psaní zprávy pro elektronickou poštu má uživatel jiné požadavky, než při psaní programu v jazyku C. Kdyby měl editor splňovat všechny požadavky najednou, bylo by jeho používání velmi komplikované.
Proto se autor editoru Emacs rozhodl řešit tuto situaci pomocí módů. Chování editoru se mění podle toho, s jakým módem je konkrétní buffer spjat. Jednotlivé módy se od sebe liší vazbou mezi klíči a funkcemi, ale jsou zde i jiné rozdíly.
Nejzákladnějším módem je mód fundamental, který nemá žádné speciální funkce. Uvedeme zde, co o základním módu říká samotný editor Emacs:
Fundamental mode: Major mode not specialized for anything in particular.Other major modes are defined by comparison with this one.
Právě uvedenou informaci jsem získal takto: zadal jsem příkaz CCtrl+X B (což znamená vyvolání funkce switch-to-buffer) a zadal jsem “foo” jako jméno bufferu, do kterého se chci přepnout. Protože buffer s takovým jménem nebyl doposud vytvořen, editor jej vytvořil a přepnul se do něj. Implicitně v něm nastavil základní mód (fundamental-mode). Všechny názvy módů mají tvar <modename>-mode a pomocí funkce “M-X” lze pro každý buffer specifikovat mód explicitně právě pomocí jeho názvu. Abych získal více informací o základním módu, zadal jsem příkaz C-H M. Nakonec se zobrazila všie uvedená informace o základním módu.
Od základního módu je odvozen mírně užitečnějií mód text-mode (textový mód), který má dva speciální příkazy: M-S pro funkci center-paragraph a M-S pro funkci center-line. Příkaz M-Sznamená, že máte stisknout klávesu s, držet ji stisknutou, a pak stisknout klávesu Shift a “S". Nyní si můžete vyzkoušet vytvořit nový buffer a definovat v něm textový mód. Pak stiskněte klíč C-H M. Objeví se vám informace o textovém módu. Možná nebudete všemu rozumět, ale jistě zde najdete užitečné informace.
V dalších oddílech si probereme některé z nejpoužívanějiích módů. Budete-li s nimi pracovat, nezapomeňte na klíč C-H M, kdykoliv budete chtít znát o aktuálním módu nějaké podrobnosti.
Jestliže použijete editor Emacs pro psaní programů v jazyku C, můžete po něm chtít, aby prováděl automatické odsazování. Soubory s příponou “.c” nebo “.h” zavádí editor Emacs automaticky v módu “c-mode”. To znamená, že jsou k dispozici některé speciální funkce vhodné pro psaní programů v jazyku C. Klávesa tje v módu c-mode svázána s funkcí c-indent-command. To znamená, že se po stisknutí klávesy tnevloží do textu znak Tab, ale dojde k automatickému odsazení řádku podle kontextu ve vytvářeném programu. Z toho vyplývá, že editor Emacs má jisté znalosti o syntaxi programů napsaných v jazyku C. V žádném případě však nepočítejte s tím, že vás bude editor upozorňovat na chyby v programu!
Navíc editor předpokládá, že jsou předcházející řádky odsazeny správně. Pokud v předcházejícím řádku chybí závorka, středník, složená závorka či cokoliv jiného, pak editor provede odsazení chybně. To je pro vás signál, že jste na něco zapomněli a můžete předcházející řádek opravit.
Uvedenou vlastnost editoru Emacs můžete využít ke kontrole oddělovačů ve zdrojovém programu. Nemusíte celý program číst od začátku a pracně hledat chybu, ale stačí zahájit odsazování řádků od začátku souboru pomocí klávesy t. Když dojde k nesprávnému odsazení, zkontrolujte předcházející řádek. Jinými slovy, v tomto směru za vás editor Emacs může udělat spoustu práce.
Tento mód pro vás bude užitečný jen tehdy, když používáte programovací jazyk Scheme. Tento jazyk není tak běžně používaným jazykem jako jazyk C nebo Pascal, ale v poslední době jeho popularita vzrůstá, a proto se mu budeme také věnovat. Většina toho, co platí pro jazyk Scheme, platí i pro jazyk Lisp.
Aby to nebylo tak jednoduché, v editoru Emacs jsou definovány dva módy pro programovací jazyk Scheme a každý uživatel se může rozhodnout, který mu bude lépe vyhovovat. Zaměříme se na popis módu s názvem cmuscheme a později, v oddíle o konfiguraci editoru Emacs, si vysvětlíme rozdíly mezi oběma módy. Nebuďte při čtení následujících řádků zneklidněni, když se váš editor Emacs bude chovat trochu jinak, než zde bude popisováno. V editoru lze konfigurovat prakticky vše a různé distribuce operačního systému Linux obsahují různě konfigurované editory Emacs.
V editoru Emacs můžete inicializovat interaktivní proces Scheme pomocí příkazu M-X runscheme. Takto vytvoříte buffer nazvaný “*scheme*”, ve kterém se nachází obvyklý příkazový řádek jazyka Scheme. V tomto řádku můžete zadávat výrazy v jazyku Scheme ukončené klávesou e, jazyk Scheme je bude vyhodnocovat a bude zobrazovat příslušné odpovědi. Tímto způsobem můžete, máte-li interaktivně komunikovat s procesem Scheme, zadat definice všech svých funkcí a aplikací v příkazové řádku. Jiná situace nastane v případě, že máte zdrojový kód zapsaný v nějakém samostatném souboru. Pak by mohlo být jednodušší editovat tento soubor a definice odeslat prostřednictvím bufferu Scheme.
Jestliže do editoru Emacs zavedete soubor s příponou “.ss” nebo “.scm”, pak se automaticky nastartuje mód Scheme mode. Pokud se z nějakých důvodů tento mód nenastartuje, můžete jej aktivovat prostřednictvím příkazu M-X scheme-mode. Tento mód ovšem není totožný s bufferem, ve kterém běží proces Scheme. V módu scheme-mode však máte k dispozici některé příkazy pro komunikaci s uvedeným bufferem.
Jestliže ve zdrojovém kódu jazyka Scheme máte vytvořenu definici nějaké funkce, pak ji stisknutím kláves C-CC-E můžete odeslat do bufferu, ve kterém běží proces Scheme. Pokud stisknete klávesy C-CM-E, pak se po odeslání definice funkce dostanete přímo do uvedeného bufferu a zde můžete zadávat interaktivní příkazy. Klávesy C-CC-L jsou určeny k zavedení souboru s kódem v jazyku Scheme (fungují pro buffer s procesem Scheme i pro buffer se zdrojovým kódem). Stejně jako u ostatních programovacích jazyků je klávesa Tab určena k odsazování řádků.
Pokud pracujete v bufferu, ve kterém běží proces Scheme, můžete používat klávesy M-P a M-N k zobrazení předcházejících nebo následujících příkazů (tzv. input history). Předpokládejme, že ladíte nějakou funkci, řekněme 'rotate', pro kterou jste použili argumenty, například:
> (rotate '(a b c d e))
pak můžete tento příkaz znovu zavést do příkazového řádku pomocí M-P. Nemusíte znovu v příkazovém řádku Scheme zadávat dlouhou sekvenci znaků a ušetříte tak spoustu času.
Editor Emacs má speciální módy jen pro několik málo programovacích jazyků. Patří mezi ně jazyk C, CCtrl+Ctrl+, Lisp a Scheme. (V současné době je dostupný mód snad pro každý programovací jazyk - např. Java, Python nebo JavaScript.)
Prostřednictvím editoru Emacs můžete také vytvářet a odesílat zprávy pro elektronickou poštu. K tomu je určen speciální buffer, tzv. “mail buffer”, který se inicializuje prostřednictvím klávesy C-XM. Nejdříve vyplníte položky “To:” a “Subject:” a pak se pomocí klíče C-N přenesete přes oddělovací čáru do pole, ve kterém můžete napsat zprávu. Oddělovací čáru nikdy needitujte ani nerušte, protože pak by editor Emacs nebyl schopen elektronickou zprávu odeslat. Oddělovací čáru používá k odlišení záhlaví od textu zprávy.
V poli pro text zprávy (pod oddělovací čarou) můžete uvést cokoliv. Po dokončení zprávy ji odešlete pomocí kláves C-CC-C. Editor Emacs obsah bufferu odešle.
Zkušení uživatelé editoru Emacs jsou až fanatičtí, pokud jde o zvyýování efektivity práce s editorem. Ve skutečnosti někdy stráví více času zvyýováním efektivity, než kolik pak ušetří. I když nechci, abyste se stali takovými fanatiky, existuje několik opatření, pomocí kterých se vám bude s editorem Emacs pracovat snadněji. Někteří zkušení uživatelé pohlížejí na začátečníky jako na hlupáky, protože neznají všechny “triky” s editorem. Já osobně tento druh elitářství odsuzuji, protože jsem také kdysi byl začátečníkem. Nyní se však opět věnujme editoru.
Pro pohyb kurzoru existují některé další klávesy. Víme, že pro pohyb kurzoru o jeden znak doprava je určen klíč C-F. Chcete-li “poskočit” s kurzorem o celé slovo, zadejte M-F. Vyzkoušejte si, co udělá příkaz M-B. To ale není vše. Pokud zapisujete věty tak, aby za poslední tečkou byly vždy dvě mezery, můžete pomocí klávesy M-E přeskakovat celé věty. Dvě mezery jsou podmínkou, protože jinak by editor nebyl schopen konec věty identifikovat. Opět si vyzkoušejte, jak funguje klíč M-A. Možná si to ani neuvědomujete a používáte opakovaně klíč C-F k posunu kurzoru na konec řádku. Připomínáme, že k tomuto účelu je určen klíč C-E a k nastavení kurzoru na začátek řádku je určen klíč C-A. Možná, že často používáte klíč pro posun kurzoru na následující řádek, a přitom byste měli použít klíč C-V, kdy se vám zobrazí následující stránka. Zrovna tak využívejte klíč M-V.
Pokud jste někde u konce řádku a všimnete si, že jste někde na začátku udělali chybu, pak nepoužívejte klávesy Backspace nebo Delete, abyste se dostali k chybnému místu. Museli byste jinak dobře napsaný řádek psát znovu. Místo toho používejte klíčů M-B, C-B, případně C-F, opravte chybu a pak se pomocí C-E vrašte na konec řádku.
Pokud zadáváte jméno souboru, nezadávejte je nikdy celé. Zadejte jen nezbytný počet znaků, které soubor jednoznačně identifikují. Pak vám editor Emacs zbývající znaky po stisknutí klávesy Tab nebo mezerníku automaticky doplní. -etřte sebe a ne procesor! Když píšete nějaký dlouhý text, používejte funkci pro automatické ukončování řádků. Klíč
M-Q vyvolá funkci fill-paragraph a lze jej použít ve všech textových módech. Také jej můžete použít k “zarovnání” již napsaného odstavce. Stačí nastavit kurzor na nějakou pozici uvnitř odstavce a stisknout M-Q.
Někdy je užitečné použít klíč C-XU, kdy se editor pokusí vrátit zpět provedené změny. Editor Emacs v tomto případě odhadne, kolik změn má vrátit, a jeho odhad je obvykle velmi inteligentní. Klíč C-XUmůžete použít opakovaně až do okamžiku, kdy editor vrátí poslední změnu, kterou si “pamatuje”.
Editor Emacs je tak velký a tak komplexní program, že má i svůj vlastní programovací jazyk. Vlastnosti editoru můžete modifikovat pomocí vlastních programů. Programovací jazyk integrovaný v editoru Emacs se jmenuje Emacs Lisp a je dialektem jazyka Lisp. Pokud máte s jazykem Lisp nějaké zkušenosti, pak se vám bude zdát opravdu přátelským. Pokud nemáte, ničeho se neobávejte. V tomto oddíle se nebudeme programováním v editoru Emacs zabývat příliš do hloubky a pokud se s jazykem Emacs Lisp budete chtít seznámit podrobněji, pak si prostudujte stránky dostupné v systému Info.
Většina funkcí editoru Emacs je definována pomocí kódu napsaného v jazyku Emacs Lisp. Většina z těchto souborů je distribuována spolu s editorem a kolektivně se nazývají “Emacs Lisp library”. Umístění této knihovny závisí na tom, jakým způsobem je editor Emacs instalován ve vašem systému. Nejčastěji jej můžete najít v adresáři: /usr/lib/emacs/lisp, /usr/lib/emacs/19.19/lisp a podobně. Číslo 19.19 značí verzi editoru Emacs a může se lišit od verze ve vašem systému.
Informace o uložení knihovny je uložena v interní proměnné load-path editoru Emacs, proto ji nemusíte pracně hledat v souborovém systému. Jestliže chcete zjistit hodnotu této proměnné, musíte ji vyhodnotit. To znamená, že musíte aktivovat interpretr Emacs Lisp. V editoru Emacs existuje speciální mód pro vyhodnocování výrazů jazyka Lisp zvaný lisp-interactionmode. S tímto módem je obvykle spjat buffer “*scratch*”. Pokud se vám jej nepodaří nalézt, vytvořte nový buffer s jakýmkoliv jménem a zadejte příkaz M-X lisp-interaction-mode.
Nyní se nacházíte v pracovním prostoru pro interaktivní komunikaci s interpretrem Emacs Lisp. Zadejte příkaz:
load-path
a pak stiskněte C-J. V módu interaktivní komunikace je klíč C-J svázán s funkcí evalprint-last-sexp. Slovo “sexp” znamená “s-expression” (s-výraz), což znamená vyváženou skupinu závorek - to je opravdu řečeno velmi zjednodušeně, ale brzy budete tušit, k čemu jsou takové výrazy užitečné při práci z jazykem Emacs Lisp. V každém případě po vyhodnocení proměnné load-path obdržíte zprávu, která bude vypadat přibližně takto:
load-path Ctrl+j
("/usr/lib/emacs/site-lisp/vm.5.35" "/home/kfogel/elithp" "/usr/lib/emacs/site-lisp" "/usr/lib/emacs/19.19/lisp")
Toto hlášení nebude vypadat v každém systému stejně, protože závisí na způsobu instalace editoru Emacs. Uvedený příklad pochází z mého počítače s procesorem 386, na němž běží operační systém Linux. Jak vyplývá z předcházejícího výpisu, proměnná load-path je seznam řetězců. Každý řetězec uvádí adresář, který by mohl obsahovat soubory náležící do systému Emacs. Když potřebuje editor Emacs zavést soubory obsahující kód Lisp, hledá tyto soubory v uvedených adresářích v uvedeném pořadí. Pokud je v proměnné load-path uveden adresář, který v souborovém systému neexistuje, editor jej ignoruje.
Ve fázi startování se editor Emacs pokouší nalézt soubor .emacs ve vašem domovském adresáři. Proto platí, že pokud chcete mít svoji vlastní konfiguraci editoru Emacs, měli byste používat soubor .emacs. Nejvýznamnijií konfigurační nastavení se týkají vazeb mezi klíči a funkcemi, proto se jim nyní budeme věnovat.
(global-set-key "\Ctrl+cl" 'goto-line)
Funkce global-set-key má dva argumenty: prvním z nich je klíč a druhým je funkce, která se má po stisknutí tohoto klíče realizovat. Slovo “global” znamená, že uvedená vazba mezi klíčem a funkcí bude platit ve všech hlavních módech. Existuje jiná funkce, local-setkey, jež nastavuje vazbu mezi klíčem a funkcí pro jediný buffer. V uvedeném příkladu jsme nastavili vazbu mezi klíčem C-C J a funkcí goto-line. Při definici klíče se musí použít řetězec, což znamená, že se klíč musí uzavřít do uvozovek. Speciální syntaxe “\Ctrl+<char>” znamená, že se má stisknout klávesa Ctrl, držet stisknutá, a pak se má stisknout klávesa <char>. Podobně platí, že “\Alt+<char>” indikuje kombinaci s klávesou Meta.
Konfigurace vazby mezi klíčem a funkcí vypadá jednoduše, ale kde získat informace o funkci “goto-line”? Nebo naopak, předpokládejme, že chci klíč C-C L svázat s funkcí, která umožní přeskočit na řádek specifikovaného pořadového čísla, ale jak mám zjistit jméno takové funkce?
V tomto okamžiku využijete vynikajících vlastností systému nápovědy, který je integrován v editoru Emacs. Jakmile se jednou rozhodnete, jaký druh funkce chcete použít, můžete použít editor Emacs k “vystopování” jejího jména. Jedna sice rychlá, ale ne příliš přímočará metoda spočívá v tom, že se využije schopnosti editoru Emacs doplňovat jména funkcí. Měli byste si pamatovat, že klíč C-H F vyvolá nápovědu popisující funkci (t.j. vyvolá funkci describe-function). Pak stiskněte Tab, aniž cokoliv zadáte. Tak “donutíte” editor Emacs doplnit prázdný řetězec. Jinými slovy, editor vypíše jména všech funkcí, které jsou v něm interně definovány. Uvedená operace bude chvíli trvat, protože takových funkcí je v editoru definováno opravdu mnoho.
Nyní stiskněte klíč C-G, čímž funkci describe-function přerušíte. Nyní v editoru existuje buffer nazvaný “*Completions*”, který obsahuje požadovaný seznam všech interních funkcí editoru Emacs. Přepněte se do tohoto bufferu a pomocí postupného vyhledávání najděte funkci, kterou chcete použít. Můžete například využít předpokladu, že funkce pro přechod na řádek specifikovaného čísla bude ve svém názvu obsahovat slovo “line”. Proto zadejte vyhledávání slova “line” a najdete tak všechny eventuality.
Vhodnější metoda spočívá v tom, že použijete klíče C-HA(t.j. vyvoláte funkci commandapropos), kdy se vám zobrazí všechny funkce obsahující specifikovaný řetězec. Výstup z funkce command-apropos se poněkud hůře třídí, než výstup z funkce describefunction. Vyzkoušejte si obě metody a vyberte tu, která vám bude lépe vyhovovat.
Samozřejmě se může stát, že budete hledat funkci, která v editoru Emacs neexistuje. V takovém případě si ji budete muset napsat sami. Nebudeme zde popisovat, jak se v jazyku Emacs Lisp programuje. Doporučujeme prostudovat si příklady v knihovně Emacs Lisp a přečíst si stránky systému Info popisující jazyk Emacs Lisp. Pokud znáte někoho, kdo programování v jazyku Emacs Lisp ovládá, jistě vám pomůže.
Definice vlastních funkcí editoru Emacs není nic těžkého. Abych vás trochu navnadil, za poslední rok jsem jich bez problémů vytvořil 131. Vyžaduje to trochu zkušeností, ale programování v jazyku Emacs Lisp zvládnete poměrně rychle.
Další konfigurační možnosti spočívají v tom, že se v souboru .emacs nastaví hodnoty jistých proměnných. Přidejte například do vašeho souboru .emacs následující řádek a pak znovu nastartujte editor Emacs:
(setq inhibit-startup-message t)
Editor Emacs kontroluje ve fázi startování proměnnou inhibit-startup-message a podle její hodnoty se rozhodne, zda zobrazovat jisté informace (o verzi editoru, zárukách a podobně) nebo ne. Uvedený výraz jazyka Lisp používá příkaz setq k nastavení proměnné inhibit-startup-message na hodnotu “t” což je speciální hodnota v jazyce Lisp pro “true”. Opakem je hodnota “nil” což je speciální hodnota pro “false”. V mém konfiguračním souboru .emacs se nacházejí některá nastavení, jež možná shledáte užitečnými:
(setq case-fold-search nil) ; gives case insensitivity in searching
;; make C programs ident the way I like them to:
(setq c-indent-level 2)
První výraz nastavuje způsob vyhledávání na tzv. case-insensitive, což znamená, že se při vyhledávání nerozlišují malá a velká písmena (a to dokonce i tehdy, když hledaný řetězec obsahuje buď pouze malá, nebo pouze velká písmena). V druhém výrazu se nastavuje odsazování řádků při psaní programů v jazyku C na hodnotu 2. Je to poněkud méně, než je implicitní nastavení, ale to záleží na individuálním vkusu a na tom, jaká hodnota odsazení učiní váš program napsaný v jazyku C čitelnějším.
V jazyku Lisp se komentářový řádek označuje znakem “;”. Editor Emacs ignoruje vše, co se nachází za tímto znakem. Výjimku tvoří případ, kdy se znak “;” nachází uvnitř řetězce.
Například:
;; Tyto dva řádky jsou v jazyku Lisp ignorovány, ale
;; následující s-výraz bude plně vyhodnocen:
(setq some-literal-string "An awkward pause; for no purpose.")
Doporučuje se, abyste změny ve zdrojových souborech pro jazyk Lisp komentovali, protože jinak například po šesti měsících určitě zapomenete, jakou změnu jste dělali. Komentář na celý řádek uvádějte dvojicí znaků ;;. Pak bude editor Emacs správně provádět odsazování řádků.
To, co jsme si řekli o vyhledávání interních funkcí editoru Emacs, platí i pro vyhledávání proměnných. Chcete-li vytvořit seznam všech proměnných, zadejte příkaz C-H v (describe-variable), nebo použijte C-HC-A (apropos). Použijete-li druhou možnost, pak musíte počítat s tím, že vám příkaz vyhledá funkce a proměnné dohromady.
Soubory se zdrojovým kódem v jazyku Emacs Lisp mají implicitní příponu “.el”, například “c-mode.el”. Aby však mohl kód vytvořený v jazyku Emacs Lisp běžet rychleji, umožňuje editor provést jakousi předkompilaci (soubory označované jako “byte-compiled”) a pak mají tyto soubory implicitní příponu “.elc”. Výjimku, pokud jde o implicitní příponu, tvoří soubor .emacs, jenž příponu “.el” nepotřebuje, neboš jej editor hledá automaticky ve fázi startování.
Chcete-li zavést interaktivně soubor s kódem v jazyku Lisp, použijte příkaz MCtrl+X loadfile. Editor vás vyzve k zadání jména souboru a pak specifikovaný soubor zavede do své pracovní oblasti. Jestliže chcete zavést soubor “zevnitř” jiného souboru napsaného v jazyku Lisp, postupujte takto:
(load "c-mode") ; tento příkaz zavede buď soubor c-mode.el, nebo c.mode.elc
Editor Emacs nejdříve k uvedenému jménu přidá příponu .elc a pokusí se jej nalézt v některém adresáři specifikovaném v proměnné load-path. Pokud jej nenajde, přidá příponu .el a hledání zopakuje. Jestliže není úspiiný ani v tomto případě, pak použije přímo řetězec předaný funkci load. Překlad můžete realizovat prostřednictvím příkazu AltCtrl+X bytecompile-file. Pokud však zdrojový soubor často aktualizujete, pak to zpravidla nemá smysl. Soubor .emacs nikdy nepřekládejte, ani mu nepřidávejte příponu .el.
Bezprostředně po zavedení souboru .emacs vyhledá editor Emacs soubor default.el a zavede jej. Tento soubor je obvykle umístěn v adresáři uvedeném v proměnné load-path s názvem site-lisp nebo local-elisp či v nějakém podobném adresáři (podívejte se na proměnnou load-path). Uživatelé, kteří provádějí údržbu editoru Emacs používají soubor default.el k nastavení globálních konfigurací, které pak platí pro každého uživatele v systému. Soubor default.el by také neměl být kompilován, protože se v něm často provádějí změny.
Jestliže váš osobní soubor .emacs obsahuje nějakou chybu, pak se editor Emacs nebude pokoušet načíst soubor default.el, ale zastaví svou činnost a vypíše hlášení: “Error in init file”. Uvidíte-li takové hlášení, pak jste pravděpodobně udělali nějakou chybu v souboru .emacs.
V souboru .emacs se ještě vyskytuje jeden druh výrazů. Knihovna Emacs Lisp někdy nabízí více sad programů, které realizují tytéž funkce různým způsobem. To znamená, že musíte specifikovat tu sadu, která se má používat (implicitní sada nemusí být pro vás vždy tou nejlepší). Tyto sady se například uplatňují v oblasti interaktivního rozhraní pro jazyk Scheme.
S editorem Emacs se standardně distribuují dvě sady funkcí interaktivního rozhraní pro jazyk Scheme: xscheme a cmuscheme.
prompt> /usr/lib/emacs/19.19/lisp/*scheme*
/usr/lib/emacs/19.19/lisp/cmuscheme.el
/usr/lib/emacs/19.19/lisp/cmuscheme.elc
/usr/lib/emacs/19.19/lisp/scheme.el
/usr/lib/emacs/19.19/lisp/scheme.elc
/usr/lib/emacs/19.19/lisp/xscheme.el
/usr/lib/emacs/19.19/lisp/xscheme.elc
Já osobně dávám přednost sadě cmuscheme před sadou xscheme, avšak editor Emacs implicitně používá sadu xscheme. Jak “donutit” editor Emacs, aby byl nakonfigurován v souladu s mým přáním? Do souboru .emacs jsem vložil následující řádky:
;; notice how the expression can be broken across two lines. Lisp
;; ignores whitespaces, generally:
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme, the way I like it". t)
Funkce autoload akceptuje jako argument jméno funkce (začínající apostrofem ') a “sdělí” editoru Emacs, že je tato funkce definována v jistém souboru. Jméno tohoto souboru se předává jako druhý argument, tedy řetězec (buď s příponou “.el”, nebo “.elc”). Soubor pak bude vyhledán v adresářích definovaných v proměnné load-path.
Zbývající argumenty jsou volitelné, ale jsou nezbytné v tomto případě: Třetí argument je dokumentačním řetězcem pro specifikovanou funkci. Pokud použijete funkci describefunction, pak se jako popis k vyhledané funkci objeví právě tento řetězec.
Čtvrtý argument “sdělí” editoru Emacs, že specifikovaná funkce může být volána interaktivně, t.j. pomocí klíče AltCtrl+X. V tomto případě je to velmi důležité, protože jedině tak lze spustit proces Scheme v prostředí editoru Emacs pomocí příkazu AltCtrl+x run-scheme.
Nyní, když je funkce run-scheme definována jako automaticky zaveditelná, co se stane, když se zadá příkaz AltCtrl+x run-scheme? Editor Emacs vyhledá funkci run-scheme, zjistí, zda je automaticky zaveditelná a zavede specifikovaný soubor (v našem případě “cmuscheme”). Protože kompilovaný soubor cmuscheme.elc existuje, editor jej zavede.
Tento soubor musí definovat funkci run-scheme, jinak dojde při jeho zavádění k chybě. Naštěstí tuto funkci skutečně definuje, proto jde vše hladce a já mám k dispozici své oblíbené rozhraní pro jazyk Scheme.
Automatické zavedení funkce zajiššuje, že bude editor Emacs schopen funkci najít, až ji budete potřebovat. Navíc můžete nad automaticky zaváděnými funkcemi získat jistou kontrolu. Dále platí, že automaticky zaveditelné funkce šetří paměš spotřebovanou editorem Emacs, protože se tyto funkce zavádějí až v okamžiku, kdy jsou potřebné. Řada příkazů není ve fázi startování editoru ve skutečnosti definována. Místo toho jsou nastaveny jako automaticky zaveditelné funkce. Pokud takový příkaz nezadáte, nikdy se odpovídající funkce nezavede. Uvedená vlastnost automatického zavádění funkcí je pro editor Emacs (a hlavně pro uživatele) “životně” důležitou. Kdyby editor ve fázi startování zaváděl všechny funkce, trvala by tato fáze asi dvacet minut a celá dostupná paměš vašeho počítače by byla obsazena. O automatické zavádění implicitních funkcí se nemusíte starat, editor Emacs je realizuje sám.
V této kapitole jsme zdaleka neuvedli vše, co byste měli znát o editoru Emacs. Je zde zhruba jedno procento informací. Budete-li editor intenzivně využívat, pak budete potřebovat znát spoustu dalších “triků” šetřících čas. Nejjednodušší bude, když vyčkáte, až budete muset řešit nějaký konkrétní problém. Pak vyhledáte funkci, která váš problém vyřeší.
Snad nejdůležitějií je, abyste uměli plně využívat systém nápovědy integrovaný v editoru Emacs. Řekněme například, že budete chtít vložit do editovaného textu obsah jiného souboru. Snadno uhodnete, že asi existuje funkce insert-file (vložení souboru). Máte-li svou domněnku potvrdit, použijte příkaz C-HF. V příkazovém řádku zadejte jméno funkce, kterou hledáte a o které si chcete přečíst nějaké informace. Protože víte, že editor Emacs je schopen doplňovat jména funkcí, můžete jako “počáteční” odhad uvést řetězec “insert”. Pak stačí stisknout klávesu Tab. Objeví se vám seznam všech funkcí obsahujících řetězec “insert” a funkce “insert-file” je jedna z nich.
Nyní si můžete přečíst spoustu informací o funkci insert-file a také ji můžete použít stačí zadat příkaz AltCtrl+x insert-file. Chcete-li také zjistit, zda je tato funkce svázána s nějakým klíčem, zadejte příkaz CtrlCtrl+h w insert-file a stiskněte e. Čím lépe budete znát vlastnosti systému nápovědy v editoru Emacs, tím snáze naleznete potřebné informace. Máte-li navíc dostatek erudice zkoumat nové věci a ochotu učit se, ušetříte mnoho času.
Jestliže si chcete objednat kopii manuálu k editoru Emacs a/nebo manuál “Emacs Lisp Programming”, poýlete objednávku na adresu:
Free Software Foundation
675 Mass Ave
Cambridge, MA 02139
USA
Oba tyto manuály jsou distribuovány v elektronické podobě spolu s editorem Emacs a jsou čitelné prostřednictvím systému Info (použijte klávesu C-H I, pomocí které inicializujete rozhraní mezi editorem Emacs a systémem Info). Na druhé straně, cena za uvedené manuály je opravdu mírná a navíc se získané peníze budou věnovat na vývoj kvalitního volně šířitelného programového vybavení. Také chceme poznamenat, že pomocí klíčů C-HC-C si můžete zobrazit informace o licenčních podmínkách platných pro editor Emacs. Jsou určitě zajímavější, než si teď myslíte, a pomohou vám vyjasnit si pojem “volné programové vybavení”. Pokud si myslíte, že pojem “volné programové vybavení” znamená, že daný program nic nestojí, pak si licenční podmínky rychle přečtěte.