- předchozí článek - následující článek - obsah - úvodní stránka - - předchozí část - následující část - první část -

Linuxové noviny 10/98

Začínáme s Emacsem: II

Michal Fadljevič, 9. října 1998

Z prvního dílu jsme si odnesli primární znalost C-x C-c - ukončení Emacsu. Dnes si krok po kroku probereme nastavení češtiny (píšeme rádi háčky a čárky, ne ?:-)), vaší klávesnice, aby vyhovovala, čtení dokumentace v systému Info a používání bufferů.

Čeština ve znakovém režimu

Příprava pro práci v našem rodném jazyce má dvě fáze. Za prvé je nutné mít nějaký konsolový ISO Latin 2 font. Například já používám font lat2-16.psf, který se mi líbí. Ten musí být v případě RH 4.2 umístěn v adresáři /usr/lib/kbd/consolefonts. Někam na konec souboru /etc/rc.d/rc.local jsem si přidal jeho aktivaci pomocí

$ setfont lat2-16.psf

Tímto jsme jinými slovy nainstalovali na konsoli český Latin 2 font. Mám pro tyhle účely soubory s abecedami v různém kódování, takže (na konsoli) jednoduše vyzkoušíme:

$ cat abeceda-lat2.txt
AÁBCČDĎEÉĚFGHIÍJKLMNŇOÓPQRŘSŠTŤUÚŮVWXYÝZŽ
aábcčdďeéěfghiíjklmnňoópqrřsštťuúůvwxyýzž

Výborně. Funguje to. Druhou fází je česká klávesnice. Tady není potřeba instalovat českou klávesnici do systému (i když i to je možné a nechci Vás od toho odrazovat), ale vystačíme s českou klávesnicí od Milana Zamazala (pdm@freesoft.cz) v jeho výborném počešťovacím balíku emacs-czech. Úplně košer by asi bylo nainstalovat českou klávesnici do systému, ale já s tím mám pořád v X window systému problémy a zatím mi stačí mít českou klávesnici v Emacsu. (Ta funguje i na konsoli i v prostředí X výborně.)

Pro svůj Emacs 19.34 jsem si nainstaloval emacs-czech-3.8.tar.gz, který je k nalezení v adresáři ftp://sunsite.mff.cuni.cz/i18n/Latin2/emacs/emacs-19 nebo na ftp://ftp.fi.muni.cz/pub/localization/emacs/ nebo na oficiálním URL http://www.freesoft.cz/software/emacs/czech/.

Přepněte se na root-a, rozbalte balík třeba v adresáři /tmp, přečtěte si README a lehce vše nainstalujete. Pozor, nezapomeňte před zadáním make upravit Makefile, je tam potřeba změnit nastavení na

LISPDIR=/usr/share/emacs/site-lisp a
INFODIR=/usr/info

Důležité je (jak se píše v dokumentaci) také upravit soubor /usr/info/dir. Přidejte si někam na začátek řádek

* emacs-czech:(emacs-czech.info). Čeština do Emacsu

přesně tak, jak je napsáno. Tím je skončena instalace češtiny pod superuživatelem a poslední věc, která je potřeba udělat (už jako normální uživatel), je přidat si do vašeho souboru /.emacs následující řádky. Ano, to už byste právě teď měli dělat se mnou :-).

$ cd
$ emacs -nw .emacs

;;; .emacs
(load "czech")
(if (not window-system)
	 (setq cz-redefine-alt-digits t))

Výborně, jen tak dál... Nezapomeňte soubor uložit C-x C-s. Tak, teď když skončíte a znovu nastartujete Emacs, měli byste bez problémů vidět i psát české znaky. Neděste se, že zápisu nahoře nerozumíte, já jsem mu z počátku také nerozuměl a nic tak hrozného se nedělo. Intuitivně každý vidí, že komentář se uvozuje jedním nebo více středníky (;) a že první řádek aktivuje Milanův modul s češtinou a poslední řádek pro nás připraví úpravu pro Emacs spuštěný na konsoli, kde je malý problém s numerickým blokem.

Čeština v X window systému

Kromě všeho zmíněného v minulé kapitole musíte ještě nainstalovat do X window systému alespoň jeden font ISO Latin 2. Toto už bohužel přesahuje rámec toho textu, takže to ponechávám vaší aktivitě. Není to ale nic složitého :-) Můj tip: zkuste návod http://www.penguin.cz/czech-howto/.

Konfigurační soubor ~/.emacs

Soubor ~/.emacs čte Emacs podobně jako jiné programy vždy na začátku při startu, a tak je výhodné si do něj přidat veškeré vaše soukromé nastavení - tedy i češtinu. Bude nejspíš postupně přibývat s tím, jak budete náročnější a náročnější. To je dobře. Tak, teď můžete otevřít

$ emacs -nw abeceda-lat2.txt

a protože ho zřejmě nemáte, zkuste si pěkně napsat abecedu, jestli to vůbec jde. V pořádku.

Česká a US klávesnice se přepíná pomocí klávesy Pause nebo ekvivalentně pomocí sekvence C-x z z, pokud třeba nemáte na vaší klávesnici momentálně Pause. Ve stavové řádce dole vidíte zapínat a vypínat indikaci CZ. Funguje mrtvá klávesa a na konsoli se číslice v této konfiguraci píší pomocí M-<číslice>. V systému X funguje normálně numerický blok.

Dokumentace

Toto je nastavení, které vyhovuje například mně, ale je jasné, že někomu třeba nesedí. Pokud jste správně instalovali, můžete se podívat na dokumentaci k balíku emacs-czech. Ta je psána v hypertextovém systému Info a v Emacsu je samozřejmě dostupná a to takto:

C-hi spuštění Info
h spustí (takřka) interaktivní výuku použití Info
TAB skáče mezi kotvami
šipky pohyb v dokumentu
PgUp PgDn pohyb v dokumentu
Space DEL pohyb v dokumentu
Enter skok skrz kotvu, na které je kursor
u nahoru o jednu úroveň (dokumenty tvoří strom)
d nahoru do úvodního menu Info dokumentace
m <jméno_sekce> Enter
  skok přímo do sekce <jméno_sekce>
q ukončení prohlížení Info dokumentace

Tyto klávesy by vám pro začátek měly stačit a samozřejmě projděte si zmíněný tutorial C-h i h a experimentujte. Když si tedy spustíte Info C-h i, měli byste vidět řádek

* emacs-czech:(emacs-czech.info). Čeština do Emacsu

Napište m emacs-czech Enter a už si čtete dokumentaci k balíku emacs-czech. Dokumentace má v Emacsu už tradičně velmi vysokou úroveň a opravdu se z ní dá ledacos naučit. Mezi základní velké vymoženosti Emacsu patří

Obrovská konfigurovatelnost.

Takže jen s úctou žasněme, kolik možností konfigurace i tento balík má. Například možnost vytvořit si vaši vlastní klávesnici, třídění, konverze znakových sad atd. Velmi praktické věci, když vám různě lidé posílají e-maily a soubory převážně v kódování Win1250 - pak stačí v Emacsu dva tři akordy a hle text je v Latin 2 a můžeme ho lidsky číst a ne hádat, jestli "čtvereček je ž nebo ř".

Pokud vám toto nastavení nevyhovuje, zanořte se do Info dokumentace a čtete a čtěte a experimentujte s nastavením. Podobně jako k balíku emacs-czech, který jsme právě nainstalovali, je v systému Info dostupná velmi podrobná dokumentace i k vlastnímu Emacsu. Zkuste C-h i d m emacs Enter a jste tam. Zde najdete odpověď skoro na všechno, co vás zajímá a z čeho já vám tady říkám jen zlomky. Točí se vám hlava, kolik toho je, že? Mně se také točila. Ale nemusíte to číst všechno najednou, ne :-)?

Tak, teď s klidným srdcem opusťte dokumentaci Info pomocí klávesy q a budeme se věnovat bufferům, jedné ze základních abstrakcí v Emacsu.

Buffery

Emacs umisťuje text do struktury/kontejneru, kterému se říká buffer. (Zatím mě nenapadl dobrý překlad, takže se tímto omlouvám jazykovým puristům - budu používat hrubě buffer.) Při běhu Emacsu buffery vznikají a zanikají podle potřeby. Na obrazovce v pracovní oblasti se zobrazují okna (window), kde v každém okně se zobrazuje právě jeden buffer. Je možné, že se nějaký daný buffer právě nezobrazuje v žádném okně a také je možné, že se zobrazuje ve dvou a více oknech zároveň. Pro jednoduchost zatím předpokládejme, že máte na obrazovce jedno velké okno a to nám zatím vystačí.

Ačkoliv nejtypičtější buffer je samozřejmě buffer vzniklý načtením nějakého souboru, můžete se přepínat a dívat/pracovat i v ostatních (vzpomínáte na prohlížení dokumentace Info - to byly také buffery, které vám subsystém Info zobrazoval a nechal vás jimi procházet).

Podívejme se na základní buffery, se kterými se budete v Emacsu často setkávat. Třeba hned na začátku při startu Emacsu tímto způsobem

$ emacs -nw

se ocitnete v bufferu nazvaném *scratch* ("zelená louka"). Je to proto, abyste se nedívali do prázdna a mohli začít třeba něco psát. Tímto bufferem se neznepokojujte, automaticky se vytváří a většinou ho vůbec nepoužíváte. Dalším je buffer *Messages*, kam Emacs píše zprávy, které vznikly při vaší práci a zobrazovaly se v komunikačním řádku dole, než byly přepsány jinou hláškou. Občas se hodí podívat se, co že za chybové/varovné hlášky se vlastně vypisovaly. Zde jsou přehledně příkazy pro práci s buffery a okny:

C-x k zruš tento buffer (kill-buffer)
C-x 1 chci jen jedno okno s tímto bufferem (delete-other-windows)
C-x 2 rozděl okno na 2 okna pod sebou
C-x C-b přepni mě do bufferu Buffer List, který obsahuje seznam viditelných bufferů, které právě teď v Emacsu existují. Velmi praktická věc, zvláště když editujete třeba 10 souborů, zároveň čtete poštu a podobně. V tomto bufferu se můžete normálně pomocí šipek a podobně pohybovat, a pokud stisknete Enter přesunete se do kýženého bufferu.
C-x b Přepne vás do dalšího bufferu (switch-to-buffer)
C-x o Přepne vás do dalšího okna (pokud máte na obrazovce víc než jedno okno samozřejmě) (other-window)
C-M-v Posuň text ve vedlejším okně (scroll-other-window). Tento příkaz vypadá poměrně zběsile, ale uvidíte, že je krajně praktický.

Vyzkoušejte si přeskakování mezi jednotlivými buffery pomocí C-x C-b, potom vybrat pomocí šipek a Enter. Přeskakování mezi jednotlivými buffery je jedna z nejčastějších operací, proto si ji dobře prozkoušejte.

Minimálně ještě příkaz g je v bufferu Buffer List velmi užitečný, znamená obnov obsah tohoto bufferu. Pokud vás zajímají i další příkazy v bufferu *Buffer List*, stiskněte podle rady ve stavové řádce ?. Obrazovka se vám rozdělí vedví a v dolní části už čtete dokumentaci použití tohoto bufferu. Podle rady v dolní řádce stiskněte několikrát C-M-v a až budete mít čtení dost, C-x 1 a je to. Toto je velmi častá operace. Často vám totiž různé subsystémy Emacsu ve chvíli, kdy je více možností volby, připraví pro větší pohodlí možnosti (completion==doplňování) tímto způsobem do vedlejšího okna a výše zmíněné kombinace kláves vám umožní si nabídku prohlédnout a potom nadbytečné okno zrušit.

Soubory

Samozřejmě nejvíce bufferů bude obsahovat soubory, které budete editovat. Pojďme rovnou k přehledné tabulce nejpoužívanějších akcí:

C-x C-f <výběr-souboru> Enter
  Načtení existujícího souboru nebo vytvoření nového souborového bufferu (find-file)
C-x C-v <výběr-souboru> Enter
  Načtení souboru jako náhrada za tento buffer (find-alternate-file). Toto je úžasná funkce. Popíšu reálný příklad. Chtěl jsem editovat soubor Makefile. Jako správný lenoch jsem zadával C-x C-f MA Space Enter. Přeloženo do češtiny - v dialogu výběru souboru jsem chtěl napsat jako obvykle tak maximálně 2 znaky ze jména souboru a doplnit automaticky mezerníkem nebo tabulátorem. Samozřejmě jsem místo Ma zadal MA, takže nebohý Emacs usoudil, že chci nový soubor a vytvořil mi jej. Já chci ale opravdu ten starý dobrý Makefile, takže přesně v tuhle chvíli užiji C-x C-v <výběr-souboru> a už edituji ten soubor který jsem chtěl.
C-x C-s Ulož tento buffer (save-buffer)
C-x s Ulož všechny editované buffery, které to potřebují (save-some-buffers)
C-x k Zruš tento buffer (kill-buffer)
C-x C-w <nové-jméno>
  Zapiš tento buffer pod novým jménem (write-file)
C-x C-c Ukončení seance editoru Emacsu (save-buffers-kill-emacs)

Takže od teď už nebudeme zbytečně startovat a ukončovat Emacs znovu a znovu pro každý soubor, ale nastartujeme ho prostým

$ emacs -nw

a pomocí příkazů, které už umíme, můžeme opracovávat (já sám interně říkám soustružit :-)) spousty souborů za den.

Připomínám, že názvy v závorkách jsou jména funkcí v Emacsu. Každá operace v Emacsu je realizována funkcí, která se nějak jmenuje. To, že třeba klávesová sekvence C-x C-c provede uložení změněných souborů a konec Emacsu (save-buffers-kill-emacs), je věc navázání (key bindings). Proto se snažím, kde to jde, zmínit jméno funkce. Osvětlím to na příkladu: Řekněme, že jste z nějakého důvodu zvyklý(-á) na to, že klávesa F10 ukončí editor a nelíbí se vám, že standardně Emacs ukončujete pomocí C-x C-c. V Emacsu to není žádný problém. Stačí připsat někam do souboru ~/.emacs následující:

 (global-set-key [f10] 'save-buffers-kill-emacs)

Závěrem malý dárek. Protože princip lokality a kešování platí i pro práci se soubory (mám vyzkoušeno), je velmi praktické udělat si na jednu klávesu přepnutí do posledně editovaného bufferu. Tato funkce přímo v Emacsu není, ale zde je řešení, které jsem před lety někde v News-ové skupině gnu.emacs.help viděl (a aktivně si ho nakopíroval :-)). Pokud můžete číst News, pak vám tuto skupinu v začátcích velmi doporučuji. Sám jsem se tam čtením příspěvků přiučil mnohému. Jen poznámka - před tím než pošlete svoji otázku, otevřete si dokumentaci a hledejte alespoň 5 minut + projděte si FAQ (C-h F). Z 80% tam vždycky najdete odpověď a ušetříte tím už tak přetíženým odborníkům čas a energii na vlastní vylepšování programu. Řešení je následující. Opět do ~/.emacs si přidejte toto:

;;;--------------
(defun toggle-buffers ()
  "Steps to the next buffer in list,
   putting the current buffer
   at the top of the selection list."
  (interactive)
  (switch-to-buffer (other-buffer))
)
(global-set-key [f5] 'toggle-buffers)

Anebo můžete použít definici klávesového makra, která je nepatrně méně robustní, ale jednodušší:

(global-set-key [f5] "\C-xb\r")

A při příštím startu bude fungovat klávesa F5 jak jsme chtěli. Takže na místo C-x C-b šipka_dolů Enter stačí teď už jen F5. Podobným způsobem se dá udělat spousta kouzel, která šetří váš čas a mentální energii :-) *


- předchozí část - následující část - první část - - předchozí článek - následující článek - obsah - úvodní stránka -