Hlavní navigace

Outline editory (6)

Pavel Tišnovský 4. 11. 2004

V dnešní části seriálu o outline editorech si ukážeme, jakým způsobem je možné zpracovávat hierarchicky strukturovaný text s osnovou ve dvou pokročilých a současně i programovatelných textových editorech - Emacsu a jEditu.

Obsah

1. Textový editor jEdit v roli outline editoru

    1.1 Globální nastavení foldingu pro všechny dále editované soubory
    1.2 Lokální nastavení pouze pro aktivní buffer
    1.3 Trvalé nastavení foldingu pro konkrétní soubor
    1.4 Použití myši pro práci s osnovou
    1.5 Klávesové zkratky
2. Emacs jako outline editor
    2.1 Posuny v osnově
    2.2 Zobrazení částí osnovy
    2.3 Skrytí částí osnovy
3. Obsah dalšího pokračování tohoto seriálu

1. Textový editor jEdit v roli outline editoru

V této kapitole bude popsán způsob, jakým je možné používat známý textový editor jEdit v roli outline editoru. Nejprve si však stručně řekněme, jakým typem aplikace editor jEdit vlastně je. jEdit, který si můžete opatřit z jeho domovské stránky www.jedit.org, patří do kategorie programátorských textových editorů, které je však možné použít i pro editaci běžného (tj. odstavcového či, chcete-li, zalamovaného) textu, například zdrojových textů HTML stránek nebo TeXovských dokumentů.

Ovládání tohoto editoru je pro běžného uživatele jednodušší než v případěvimu či Emacsu (zejména z toho důvodu, že se snaží být konzistentní s ostatními aplikacemi), přitom však zůstává zachována většina důležitých operací s textem včetně podpory složitých maker.

Zvláštností tohoto editoru je, že je celý naprogramovaný v Javě, a vzhledem k jeho modulárnímu návrhu (a mimo jiné také kvalitnímu programátorskému rozhraní – API) podporuje poměrně snadné připojení dalších modulů (pluginů), kterých už bylo do dnešní doby vytvořeno značné množství. Seznam modulů je možné získat na výše uvedené domovské stránce editoru jEdit.

Pluginy je však také možné instalovat přímo z editoru, který se sám připojí na svoji indexovou stránku, získá seznam pluginů a nabídne jejich popis uživateli.

Tento editor obsahuje již ve své základní verzi podporu pro tvorbu osnovy (tj. hierarchie textu), která je povolena zapnutím editačního módu „outline“. Podobně jako ve vimu, i zde je práce s osnovou těsně spjata s foldingem, ovšem s tím rozdílem, že se v jEditu nerozlišuje mezi nadpisy a odstavcovým textem (ten se ve vimu, resp. v jeho nadstavbě TVO, označoval znakem roury – | – na začátku řádku).

Specifikace textu, který má být pomocí foldingu „srolován“ do jediné řádky, je možné v jEditu provádět dvěma navzájem odlišnými způsoby (vynechávám speciální nastavení dostupné například po instalaci pluginu LazyFolds):

  1. Implicitní folding – hierarchie textu (tj. osnova) je založena, podobně jako u zmiňovaných maker TVO, na počtu bílých znaků na začátku každého řádku (v jEditu se proto tomuto režimu také říká režim indent). Nemusí se však nutně používat značky TAB, stačí pouze mezery SPC (space). Výhodou tohoto způsobu členění textu do osnovy je značná jednoduchost, zvláště pokud se pro členění jednotlivých kapitol používají značky TAB a příslušné klávesové zkratky (viz níže). Použití těchto značek také mimo jiné zajistí „kompatibilitu“ s TVO – sám jsem tento díl kvůli tréninku sepsal vjEditu a poté načetl do vimu, kde se ihned korektně zvýraznily jednotlivé kategorie textu.
  2. Explicitní folding – hierarchii určuje uživatel zápisem speciálních značek do textu. Tento typ značek, který je mimochodem podporován i ve vimu, je nastaven tak, že pro začátek textu v osnově je vyhrazena trojice znaků {{{ a pro konec trojice }}}. Výhodou explicitních značek je možnost jejich umístění do již hotového (například importovaného) textu bez nutnosti jeho přeformátování. Nevýhodou je samozřejmě zvýšená pracnost při ručním psaní značek, kterou je však možné částečně odstranit vhodným použitím maker.

V obou případech foldingu jsou zabalené části textu barevně odlišeny, každé úrovni v hierarchii je možné dokonce přiřadit vlastní barvu. Nyní si povězme, jakým způsobem se folding v jEditu povo­luje. Existují tři možnosti, které se liší zejména svojí působností na všechny, nebo pouze vybrané soubory:

1.1 Globální nastavení foldingu pro všechny dále editované soubory

První možnost nastavení foldingu je globální, tj. platí pro všechny dále editované soubory daného typu. Tuto možnost tedy použijeme v případě, že máme mnoho souborů, u kterých chceme s osnovou pracovat. Globální nastavení foldingu se provádí výběrem příkazu Global Options, které nalezneme v roletovém menu Utilities. Po výběru zmíněného příkazu se objeví dialog, který vidíte na prvním obrázku.

Globální nastavení foldingu
Obrázek 1: Globální nastavení foldingu

Pro povolení foldingu je zapotřebí v levé části dialogu (mimochodem, jde prakticky taktéž o osnovu!) vybrat položku Editing a v pravé části zvolit na řádku Folding mode jeden z nabízených způsobů specifikace jednotlivých foldů, tj. buď explicitní režim se speciálními znaky {{{ a }}}, nebo režim založený na počtu bílých znaků na začátku řádku.

1.2 Lokální nastavení pro aktivní buffer

Globální nastavení popisované podle návodu v předchozím odstavci je vhodné provádět pouze při existenci většího počtu souborů stejného typu. Existuje však ještě možnost nastavit folding pouze pro aktivní buffer (buffer odpovídá jedné instanci editovaného textu v paměti textového procesoru, nemusí se tedy nutně jednat o konkrétní soubor). Toto nastavení se opět provádí výběrem z roletového menu Utilities, tentokrát se ovšem vybere příkaz Buffer Options. Po výběru tohoto příkazu se zobrazí dialog podobný tomu, který je zobrazen na následujícím obrázku.

Lokální nastavení foldingu pro aktivní buffer
Obrázek 2: Lokální nastavení foldingu pro aktivní buffer

Ve výše zobrazeném dialogu je zapotřebí změnit položku na řádku označeném textem Folding mode. Na výběr jsou stejné možnosti jako v předchozím zmiňovaném případě, tj. při nastavování globálních voleb.

1.3 Trvalé nastavení foldingu pro konkrétní soubor

Poslední možností, jak nastavit folding, je použití takzvaných modelines tak, jak to již delší dobu známe z editorů typu vim a Emacs. Jedná se o uložení konfiguračních voleb přímo v editovaném souboru, tyto volby musí být uloženy v takovém formátu, aby je editor korektně rozpoznal a aby nebyly v editovaném textu při dalším zpracování na obtíž (například při překladu zdrojového souboru s vloženými volbami nebo při zobrazení vytvářené HTML stránky v prohlížeči). Konfigurační volby mají nejvyšší prioritu a jsou obnoveny při načítání souboru do editoru, tj. jsou spjaty právě s oním konkrétním souborem.

Pro nastavení implicitního foldingu, založeného na bílých znacích na začátku řádku, je nutné na prvních nebo posledních deseti řádcích v textovém souboru uvést příkaz:

:folding=indent:

Pro nastavení explicitního foldingu, založeného na kombinaci složených závorek, se uvede příkaz:

:folding=explicit:

Toto nastavení má vyšší prioritu než nastavení globální. Zajímavé a užitečné přitom je, že se nastavení projeví ihned po uložení souboru, tj. stačí napsat do souboru pouze jeden ze dvou výše uvedených řádků a stisknout klávesovou zkratku CTRL+S (Save). Je to v mnoha případech mnohem rychlejší než hledání odpovídajících příkazů z menu a dialogů.

1.4 Použití myši pro práci s osnovou

Při práci v jEditu je možné pro otevírání a zavírání jednotlivých částí osnovy používat mimo jiné i myš. Stačí použít ikony na levém svislém pruhu nazývaném gutter. Tyto ikony mají podobu malých trojúhelníků zobrazených ve výšce řádku, na kterém se nachází nadpis – viz třetí ilustrační obrázek. Pokud je zobrazen text na nižší úrovni osnovy, než je text na aktivním řádku, směřuje trojúhelník směrem dolů, pokud je text schován (zabalen) ve foldu, směřuje trojúhelník směrem doprava. Kliknutím myší na ikonu trojúhelníku se hierarchie pod aktivním řádkem střídavě balí a rozbaluje. Pokud se současně stiskne i klávesa Shift, je možné rozbalit i všechny nižší úrovně hierarchie.

Ikony pro rozbalení a skrytí různých částí osnovy
Obrázek 3: Ikony pro rozbalení a skrytí různých částí osnovy

Funkce myši při práci s hierarchií lze nastavit v dialogu vyvolaném opět z menu Utilities výběrem volby Global Optionsna místě označeném Mouse – viz čtvrtý ilustrační obrázek.

Nastavení funkce myši při práci s osnovou
Obrázek 4: Nastavení funkce myši při práci s osnovou

Menu pro práci s osnovou
Obrázek 5: Menu pro práci s osnovou

1.5 Klávesové zkratky

Kromě ovládání outline editoru pomocí myši je samozřejmě možné využít i většího množství klávesových zkratek. V dalším odstavci popíšu pouze nejpoužívanější zkratky s tím, že pomocí konfiguračního dialogu jEditu je možné tyto zkratky jednoduše změnit za jiné. Veškeré příkazy, které jsou dostupné pomocí klávesových zkratek, lze vyvolat i volbou příkazu z menu Folding. Mezi nejužitečnější klávesové zkratky patří:

Alt+Šipka doprava – tento příkaz způsobí posun řádku, na kterém je kurzor (nebo vybraného textu), směrem doprava, tj. provede se posun na nižší úroveň hierarchie.

Alt+Šipka doleva – opak předchozího příkazu, tj. posun řádku s kurzorem nebo vybraného textu směrem doleva, což způsobí zvýšení textu v hierarchii (osnově).

Alt+Šipka nahoru – posun na nejbližší nadpis výše.

Alt+Šipka dolů – posun na nejbližší nadpis níže.

Ctrl+E U – posun na rodičovský nadpis, tj. na nejbližší nadpis na vyšší úrovni hierarchie.

Alt+BackSpace – zabalení textu na úrovni osnovy, ve které se nachází kurzor. Ten přitom nemusí stát přímo na nadpisu, ale kdekoliv na nižší úrovni v osnově.

Alt+Enter – opak předchozí klávesové zkratky. Provede se rozbalení textu. Kurzor přitom musí stát na nadpisu, pod kterým je text zabalen. Tento příkaz má stejný význam jako kliknutí levým tlačítkem myši na ikonu trojúhelníku na levém okraji okna – gutteru.

Alt+Shift+Enter – jedná se o silnější verzi předchozí klávesové zkratky. Zatímco při použití zkratky Alt+Enter se osnova rozbalila jen do nejblíže nižší úrovně a další úrovně zůstaly sbaleny, představuje navíc stiskutá klávesa Shift požadavek na rozbalení všech podúrovní. Stejného účinku je možné dosáhnout kliknutím levým tlačítkem myši na ikonu trojúhelníku se současně stisknutou klávesouShift.

Ctrl+E C uzavřít všechny foldy, tj. zobrazit pouze nadpisy na nejvyšší úrovni hierarchie.

Ctrl+E X rozbalit všechny foldy.

Ctrl+E Enter číslo – rozbalení až do n-té úrovně specifikované číslem – velmi užitečný příkaz.

Ctrl+E A přidání explicitního foldu – pracuje však pouze v režimu explicit.

Ctrl+E S výběr explicitního foldu – taktéž pracuje pouze v režimu explicit.

Ctrl+E N N zobrazí se pouze aktivní fold, ostatní nejsou viditelné – lze odstranit příkazem Ctrl+E X.

Ctrl+E N S zobrazí se pouze vybraný fold či text, ostatní nejsou viditelné – lze odstranit příkazem Ctrl+E X.

A to je vše, další věci s osnovou nelze v jEditu bez přítomnosti dalších rozšiřujících modulů provádět. Zejména chybí filtry pro provádění výstupu do dalších souborových formátů (LaTeX, HTML, XML) a pro specifikaci hypertextových odkazů. Je však možné předpokládat, že vznikl či brzy vznikne modul, který bude práci s osnovou podporovat lépe a radostněji ;-)

2. Emacs jako outline editor

Dalším textovým editorem, který může pracovat jako outline editor, je známý Emacs (tento editor sice popisuji až na posledním místě, ve skutečnosti však vznikl mnohem dříve než předchozí dva editory). Emacs je, velmi zjednodušeně řečeno, složen ze dvou částí: z jádra, které dodává potřebnou základní funkcionalitu i s interpreterem jazyka Lisp, a dále z velmi rozsáhlé sady funkcí naprogramovaných v dialektu programovacího jazyka Lisp. V Lispu ostatně spočívá největší síla Emacsu, protože se jedná o jeden z nejflexibil­nějších programovacích jazyků s velikou vyjadřovací silou.

Při zpracování textu v Emacsu je možné pro každý buffer nastavit vždy jeden z mnoha režimů (módů) a tyto módy je možné během práce s textem libovolně přepínat nebo dokonce kombinovat. Jedním z těchto režimů je i režim Outline, po jehož zapnutí se Emacs chová jako outline editor se zachováním všech jeho dalších vlastností. Zapnutí outline režimu se provede příkazem:

Alt+X outline-mode (Enter)

Po zadání tohoto příkazu je možné psát text a organizovat ho do osnovy. Úroveň jednotlivých nadpisů není specifikována znaky TAB, jak tomu bylo v případě vimu a jEditu, ale počtem hvězdiček na začátku řádku (původní znak hvězdička se ovšem dá pomocí proměnnéoutline-regexp změnit na jiný znak). Jednou hvězdičkou je uvozen nadpis na nejvyšší úrovni, dvěma hvězdičkami nadpis na úrovni nižší atd. Odstavcový text se zapisuje bez zvláštních znaků.

Buffer v Emacsu se zapnutým módem outline
Obrázek 6: Buffer v Emacsu se zapnutým módem outline

Mezi základní příkazy, které je možné v outline režimu používat, patří:

2.1 Posuny v osnově

Při práci s osnovou je zapotřebí co nejrychlejším způsobem přeskakovat na její jednotlivé části, tj. na předcházející či následující nadpisy a podnadpisy. K tomuto účelu Emacs disponuje několika příkazy, které jsou uvedeny v následujícím přehledu:

Ctrl+C Ctrl+U posun textu v hierarchii směrem nahoru (up), tj. k začátku textu.

Ctrl+C Ctrl+N posun textu v hierarchii směrem dolů (next)), tj. ke konci textu.

Ctrl+C Ctrl+P posun kurzoru na předchozí (previous) nadpis.

Ctrl+C Ctrl+F posun kurzoru na následující (forward) nadpis na stejné úrovni hierarchie.

Ctrl+C Ctrl+B posun kurzoru na předchozí nadpis na stejné úrovni hierarchie.

2.2 Zobrazení částí osnovy

Zobrazení či naopak skrytí částí osnovy je v Emacsu reali­zováno (stejně jako v jEditu a vimu) pomocí foldingu. Následuje přehled klávesových zkratek pro zobrazení částí osnovy či dokonce osnovy celé:

Ctrl+C Ctrl+A zobrazí (rozbalí) se všechny položky v osnově.

Ctrl+C Ctrl+E zobrazí (rozbalí) se tělo textu pod nadpisem.

Ctrl+C Ctrl+K zobrazí se všechny podnadpisy.

Ctrl+C Ctrl+Tab zobrazí se nejbližší podnadpisy.

Ctrl+C Ctrl+S zobrazení podstromu (na nižší úrovni hierarchie).

2.3 Skrytí částí osnovy

Opakem příkazů pro zobrazení částí osnovy jsou samozřejmě příkazy pro skrytí zadaného textu:

Ctrl+C Ctrl+T zabalení (skrytí) těla textu.

Ctrl+C Ctrl+C skrytí těla textu pod aktivním nadpisem.

Ctrl+C Ctrl+D skrytí podstromu pod aktivním nadpisem.

Ctrl+C Ctrl+Q zobrazení podsekcí.

Jak je z předchozího textu patrné, jsou možnosti jEditu aEmacsu při práci s osnovou takřka vyrovnané. jEdit navíc disponuje příkazem pro zobrazení osnovy až do zadané úrovně hierarchie (specifikované číslem). Dlužno říci, že Emacs měl folding, který tvoří základ práce s osnovou, aplikovaný o několik let dříve než vim a jEdit, to však nic nemění na skutečnosti, že je dnes možné osnovu s úspěchem a celkem jednoduše používat ve všech třech zmíněných textových editorech.

3. Obsah dalšího pokračování

V následující části tohoto seriálu, která již (konečně) bude částí závěrečnou, se budu věnovat především formátům souborů pro přenos osnovy mezi různými aplikacemi. Také bych rád představil velmi zajímavou aplikaci FreeMind, což sice není outline editor (jedná se o editor „myšlenkových map“), nicméně je ho možné použít na podobnou činnost jako outline editory.

Našli jste v článku chybu?

12. 11. 2004 18:23

Pavel (neregistrovaný)

Dobry den,
existuje nejaka jednoducha cesta jak prevest plaintext z jEdit (s osnovou) do HTML (nebo nejakeho jineho vhodneho formatu) tak, aby sel nejak dal pouzit (treba nacist do textoveho editoru, pridat formatovani a vytisknout)?


8. 11. 2004 16:01

Michal (neregistrovaný)

diky za tematicky zajimavy serial a za upozorneni, ze tuto zajimavou funkci podporuje i Emacs. jEdit je fajn ale na prikazove radce si ho proste nepustim.

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Podnikatel.cz: Na poslední chvíli šokuje vyjímkami v EET

Na poslední chvíli šokuje vyjímkami v EET

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET