Pokročilejší možnosti nabízené režimem org-mode v Emacsu

18. 10. 2018
Doba čtení: 26 minut

Sdílet

Ve druhém článku o slavném režimu org-mode pro editor Emacs se seznámíme s dalšími možnostmi, které tento plugin uživatelům nabízí. Ukážeme si například práci s kalendářem, agendou, časovači či s exportem dokumentů.

Obsah

1. Zpracování úkolů (task)

2. Nastavení volby (setq org-log-done t)

3. Odkazy na URL i na lokální soubory

4. Odkazy na lokální soubory

5. Agenda

6. Úkoly a kalendář

7. Pohled na týdenní plán a log

8. Tvorba delších dokumentů a článků v org-mode

9. Editace dokumentů a zarovnání (zformátování) jednotlivých odstavců

10. Pohyb v dokumentech podle jejich logické struktury

11. Export dokumentů: krátké zopakování z minula

12. Export vytvořeného dokumentu do Markdownu

13. Export vytvořeného dokumentu do AsciiDocu

14. Značky určené primárně pro export dokumentů do dalších formátů

15. Bloky se zdrojovým kódem

16. Speciální symboly a použití diagramů kreslených v Ditaa

17. Využití stopek

18. Hodiny a čas strávený na úkolech

19. Seznam již popsaných příkazů režimu org-mode

20. Odkazy na Internetu

1. Zpracování úkolů (task)

První užitečnou funkcí, s níž se v dnešním článku seznámíme, je práce se seznamem úkolů (task). Úkoly je možné zapisovat ve formě nadpisů s různými úrovněmi. S nadpisy již pracovat umíme, takže jen ve zkratce – úroveň nadpisu je určena počtem hvězdiček, které jsou zapsány na začátku řádku. Nadpisy jsou vizuálně rozlišeny od běžného textu, klávesou TAB můžeme řídit viditelnost nadpisů a textu různých úrovní a při exportu slouží informace o nadpisech pro vytvoření kapitol, podkapitol atd. Náš první dokument s úkoly bude zpočátku vypadat velmi jednoduše:

* Úkoly
** Přednáška Go vs Rust pro LinuxDays 2018
** Přednáška o vim-lsp
** Test plán pro Gemini service
** Článek o org-mode - úvod
** Článek o org-mode - to právě čtete :-)

Obrázek 1: Základní struktura souboru s úkoly tak, jak byla vypsána v předchozím odstavci.

Vzhledem k tomu, že se každý úkol může v daný okamžik nacházet v různém stadiu rozpracovanosti, nabízí režim org-mode uživatelům klávesovou zkratku C-c C-t. Po stisku této zkratky se postupně mění stav rozpracovanosti/dokončenosti úkolu, na kterém se nachází textový kurzor, mezi stavy „TODO“, „výchozí“ a „DONE“. Výsledek může vypadat následovně:

Obrázek 2: Označení stavu úkolů s využitím klávesové zkratky C-c C-t.

Náš textový dokument s úkoly nepatrně rozšíříme o další položky:

* Úkoly
** DONE Přednáška Go vs Rust pro LinuxDays 2018
** DONE Přednáška o vim-lsp
** TODO Test plán pro Gemini service
** DONE Článek o org-mode - úvod
** TODO Článek o org-mode - to právě čtete :-)
** Sprint #09
** Sprint #10
** Taky se nezapomenout nasnídat

Pokud se potřebujeme rychle podívat na seznam úkolů, na kterých je nutné pracovat (tedy úkolů ve stavu „TODO“), postačuje použít klávesovou zkratku C-c / t. Výsledek bude vypadat takto:

Obrázek 3: Zobrazení seznamu nedokončených úkolů.

V některých případech si pravděpodobně nevystačíte pouze se třemi stavy: TODO, (nic) a DONE. To však ani není zapotřebí, protože další stavy je možné relativně jednoduše přidat. Postačuje přímo do dokumentu vložit následující řádek, který přidává dva další stavy IN-PROGRESS a WAITING:

#+TODO: TODO IN-PROGRESS WAITING DONE
Poznámka: samozřejmě vám nic nebrání použít i počeštěné názvy atd.

2. Nastavení volby (setq org-log-done t)

V případě, že do vašeho konfiguračního souboru .emacs vložíte řádek nastavující proměnnou org-log-done na pravdivostní hodnotu true, bude se při ukončení úkolu, tedy po jeho přechodu do stavu „DONE“, automaticky doplňovat i časová značka:

Obrázek 4: Automatické vložení časové značky ve chvíli, kdy byl úkol dokončen.

Relativně snadno tedy můžeme úkoly ukončit a navíc kdykoli později zjistit, kdy k tomu došlo:

* Úkoly
** DONE Přednáška Go vs Rust pro LinuxDays 2018
   CLOSED: [2018-10-15 Po 21:29]
** DONE Přednáška o vim-lsp
   CLOSED: [2018-10-15 Po 21:29]
** TODO Test plán pro Gemini service
** DONE Článek o org-mode - úvod
   CLOSED: [2018-10-15 Po 21:29]
** TODO Článek o org-mode - to právě čtete :-)

Obrázek 5: Vzhledem k tomu, že je možné klávesou Tab ovlivňovat viditelnost, můžeme časové značky jednoduše skrýt.

Upravený konfigurační soubor .emacs může vypadat například následovně:

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
 
(package-initialize)
 
(require 'evil)
(require 'evil-numbers)
 
(evil-mode 1)
(define-key evil-normal-state-map (kbd "C-a") 'evil-numbers/inc-at-pt)
(define-key evil-normal-state-map (kbd "C-x") 'evil-numbers/dec-at-pt)
 
(setq org-log-done t)
Poznámka: ve skutečnosti je možné tuto proměnnou nastavit i ve chvíli, kdy Emacs běží, například přes scratch buffer atd.

Obrázek 6: Další možnosti jsou samozřejmě popsány v nápovědě.

3. Odkazy na URL i na lokální soubory

Další užitečnou funkcí, kterou používají prakticky všichni uživatelé režimu org-mode, je možnosti vkládání odkazů (link) do dokumentu s poznámkami a úkoly. Odkaz může vést na prakticky jakýkoli dokument – ať již na lokální soubor (text, obrázek, …), tak na dokument určený obecnou URL (HTML stránka kdekoli na internetu atd.). Odkaz se vloží jednoduše poměrně snadno zapamatovatelnou klávesovou zkratkou C-c C-l. Po zadání této klávesové zkratky se Emacs nejdříve dotáže na adresu (link) na dokument:

Obrázek 7: Vkládání odkazu do diáře: specifikace adresy.

Po zadání adresy následuje další dotaz, tentokrát na popis odkazu, protože právě tento popis bude ve výchozím nastavení zobrazen v poznámkách a úkolech:

Obrázek 8: Vkládání odkazu do diáře: specifikace textového popisku odkazovaného dokumentu.

Ve výchozím nastavení jsou odkazy zobrazeny následujícím způsobem – odkaz je zvýrazněn (klasickým modrým podtrženým textem) a je u něj zobrazen jen textový popisek, nikoli celá adresa:

Obrázek 9: Takto jsou odkazy zobrazeny ve výchozím nastavení.

V případě potřeby je samozřejmě možné změnit způsob zobrazení tak, aby se zobrazila celá adresa, což je ukázáno na následujícím screenshotu:

Obrázek 10: Samozřejmě si však můžete prohlédnout i adresy odkazů.

Samotné odkazy se používají snadno – postačuje na ně umístit textový kurzor a použít klávesovou zkratku C-c C-o (pro vložení dokumentu to byla zkratka C-c C-l). Odkazovaný dokument se buď otevře přímo v Emacsu, nebo se použije nastavený webový prohlížeč, prohlížeč obrázků, přehrávač videa atd. Výchozí webový prohlížeč je samozřejmě možné nakonfigurovat:

Obrázek 11: Nastavení webových prohlížečů.

4. Odkazy na lokální soubory

Existuje ještě jedna užitečná klávesová zkratka C-c l, která slouží k zapamatování místa v libovolném souboru, kde se nachází textový kurzor. Je tedy možné si otevřít například zdrojový text a použít odkaz na něj. Celý postup si můžete prohlédnout na následující trojici screenshotů:

Obrázek 12: Při zadávání odkazů můžete postupně doplnit jméno libovolného lokálního souboru. Při zápisu jména souboru je samozřejmě podporováno doplnění cesty s využitím klávesy TAB.

Obrázek 13: Odkaz na lokální soubor se vizuálně nijak neliší od odkazu na soubor dostupný kdekoli na internetu.

Obrázek 14: Lokální soubor – pokud se jedná například o zdrojový kód a nikoli o video – se po použití klávesové zkratky C-c C-o otevře přímo v Emacsu v novém bufferu.

5. Agenda

V případě, že je nutné pracovat s větším množstvím úkolů, několika kalendáři a mnoha poznámkami, popř. pokud v org-mode připravujete články, může být užitečné si celou agendu rozdělit a pracovat s několika soubory. Například lze používat pro každý projekt zvláštní soubor s koncovkou .org. Dále je vhodné si nastavit seznam všech souborů obsahujících veškerou agendu, protože některé operace je možné v případě potřeby provádět globálně přes všechny zapamatované soubory. Soubory s agendou si nastavíte takto:

(custom-set-variables
'(org-agenda-files (quote ("~/org/projekt1/agenda.org"
                           "~/org/projekt2/agendaB.org"
                           "~/org/projekt3/agendaC.org"))))

Toto nastavení můžete provést až po spuštění Emacsu nebo přímo v konfiguračním souboru .emacs. Aktuálně editovaný soubor můžete přidat klávesovou zkratkou C-c [.

Ve chvíli, kdy Emacs ví, které soubory .org tvoří celou agendu, můžete použít nové příkazy. Jedním z nich je příkaz určený pro zobrazení všech úkolů, které jsou ve stavu TODO:

Obrázek 15: Jeden z příkazů, který pracuje s celou takzvanou agendou, je příkaz určený pro zobrazení všech úkolů, na nichž je nutné začít pracovat.

Další příkaz zobrazí agendu pro aktuální pracovní týden:

Obrázek 16: Další užitečný příkaz slouží pro zobrazení kalendáře s úkoly, které je nutné dokončit (prozatím však nemáme zadány žádné takové úkoly, takže je kalendář prázdný). W42 znamená číslo týdne v rámci roku.

6. Úkoly a kalendář

U jednotlivých úkolů je možné specifikovat datum jejich dokončení. Pro tento účel můžete použít klávesovou zkratku C.c . popř. C-c <. Po stisku C-c . se v novém bufferu zobrazí kalendář a Emacs se zeptá na datum (ve výchozím stavu se jedná o aktuální datum):

Obrázek 17: Zobrazení kalendáře ve chvíli, kdy je zapotřebí zadat datum, kdy má být úkol (teoreticky) dokončen.

Po výběru data se do dokumentu k aktuálnímu úkolu přidá informace o tom, na kdy je úkol naplánován. Postupně tedy můžeme náš dokument s úkoly upravit následovně:

* Úkoly
** DONE Přednáška Go vs Rust pro LinuxDays 2018
   CLOSED: [2018-10-15 Po 21:29]
** DONE Přednáška o vim-lsp
   CLOSED: [2018-10-15 Po 21:29]
** TODO Test plán pro Gemini service
   SCHEDULED: <2018-10-18 Čt>
** DONE Článek o org-mode - úvod
   CLOSED: [2018-10-15 Po 21:29]
** TODO Článek o org-mode - to právě čtete :-)
   SCHEDULED: <2018-10-17 St>
** Sprint #09
   SCHEDULED: <2018-10-19 Pa>
** Sprint #10
   SCHEDULED: <2018-11-12 Po>
** Taky se nezapomenout nasnídat
   SCHEDULED: <2018-10-15 Po>
   SCHEDULED: <2018-10-16 Ut>
   SCHEDULED: <2018-10-17 St>

Obrázek 18: Nabídka možností zobrazení shrnujících informací o úkolech a poznámkách.

Již zadaná data jsou samozřejmě editovatelná, ovšem vzhledem k tomu, že se org-mode snaží uživatelům pomoci, nabízí pro jejich změnu nové klávesové zkratky:

Klávesa Význam
S-right změna dne, kdy má být úkol dokončen
S-left změna dne, kdy má být úkol dokončen
S-up modifikace té jednotky, na které se nachází kurzor (rok, měsíc nebo den)
S-down modifikace té jednotky, na které se nachází kurzor (rok, měsíc nebo den)

První dvě klávesové zkratky ovšem mohou kolidovat s dalšími operacemi ve chvíli, kdy se kurzor nenachází přímo na datu.

Obrázek 19: Úkoly, ve kterých je naplánováno jejich dokončení (samozřejmě je otázkou, jak tomu bude ve skutečnosti :-).

7. Pohled na týdenní plán a log

V okamžiku, kdy jsme naplánovali data dokončení úkolů, je možné se vrátit k tématu, o němž jsme se již okrajově zmínili v páté kapitole, protože právě v tomto okamžiku má smysl si nechat zobrazit agendu pro aktuální pracovní týden (ve výchozím nastavení se v době vydání článku jedná o čtyřicátý druhý týden). Pro tento účel slouží klávesová zkratka C-c a a. Výsledek je ukázaný na následujícím screenshotu:

Obrázek 20: Zobrazení agendy pro aktuální pracovní týden ve chvíli, kdy máme naplánovány (a nedokončeny) další úkoly.

Po stisku klávesy „l“ je možné si zobrazit i přehledný log, tj. informace o tom, kdy například byly dokončeny úkoly atd.:

Obrázek 21: Zobrazení logu, v němž můžeme přehledně vidět čas dokončení úkolů (popř. čas, kdy se dokončení zapsalo do dokumentu).

V případě potřeby je možné nastavit jiné výchozí datum pro zobrazení přehledu úkolů. Například se můžeme posunout o deset dní dopředu:

(setq org-agenda-start-day "+10d")

8. Tvorba delších dokumentů a článků v org-mode

„Org-Mode Is One of the Most Reasonable Markup Languages to Use for Text“

Režim org-mode je možné v případě potřeby použít i pro tvorbu delších dokumentů, které se následně mohou převést (exportovat) do jiných formátů, z nichž některé budou popsány v navazujících kapitolách (Markdown, AsciiDoc) a další jsme si již popsali v předchozím článku (především HTML, LaTeX, částečně i PDF). Pro vytvoření základní struktury dokumentu se používají nám již známé řádky začínající hvězdičkami. Počet hvězdiček na začátku řádků přitom určuje úroveň jednotlivých kapitol a podkapitol. Při exportu jsou kapitoly a podkapitoly prakticky vždy převedeny korektně. Podobně je tomu i u seznamů, které mohou být číslované či nečíslované (s odrážkami). Pro zvýraznění textu v rámci jednotlivých odstavců slouží značky pro určení tučného písma, kurzivy, podtrženého textu, zdrojového kódu a konečně neformátovaného textu:

    1. *tučné písmo*
    2. /kurzíva/
    3. _podtržený text_
    4. +přeskrtnutý text+
    5. =úryvek zdrojového kódu=
    6. ~neformátovaný text~

Obrázek 22: Všechny nabízené možnosti formátování dokumentů ocení především uživatelé Emacsu spuštěného v grafickém režimu. V režimu textovém totiž nemusí být například zvýrazněno tučné písmo či kurzíva.

9. Editace dokumentů a zarovnání (zformátování) jednotlivých odstavců

Editace rozsáhlejších dokumentů v režimu org-mode je většinou naprosto bezproblémová, tj. málokdy se uživatelům „podaří“ nějakým omylem globálně změnit jejich strukturu. Samotné odstavce se vytváří zcela běžným způsobem. Pokud budete vyžadovat, aby se při psaní textu, popř. při jeho úpravách, používalo automatické formátování do odstavců, můžete si příslušný režim nastavit v menu Text. Jedná se o následující položky:

  • Auto Fill
  • Paragraph Indent

Tato nastavení je samozřejmě možné provést i zavoláním příslušného příkazu přes zkratku M-x. Například pro první příkaz stačí zadat:

M-x auto-fill-mode.

Odstavce je samozřejmě možné v případě potřeby zarovnat doleva, doprava, do bloku atd., ovšem při exportu se tyto informace mohou ztratit.

10. Pohyb v dokumentech podle jejich logické struktury

Ve chvíli, kdy se pracuje s delšími dokumenty (například rozsah tohoto článku přesáhne 50 kB, tj. přibližně 27 normostran, bakalářky či diplomky mohou být několikanásobně delší), je užitečné se naučit používat klávesové zkratky sloužící pro pohyb kurzoru na základě logické struktury dokumentu. V praxi to znamená, že se můžeme snadno přesouvat po jednotlivých kapitolách, sekcích, skočit na nadpis vyšší úrovně (začátek kapitoly) atd. – a to vše bez nutnosti měnit náhled na dokument pomocí klávesy TAB (což by bylo řešení, které by se zvolilo ve Vimu s využitím tzv.– foldingu – skládání). K dispozici jsou především následující klávesové zkratky:

Zkratka Význam klávesové zkratky
C-c C-n přesun kurzoru na další nadpis
C-c C-p přesun kurzoru na předchozí nadpis
C-c C-u přesun kurzoru na nadpis o úroveň výše, než je současný text
C-c C-j skok – skrytí běžného textu s následným přesunem kurzoru
C-c C-f přesun kurzoru na další nadpis stejné úrovně
C-c C-b přesun kurzoru na předchozí nadpis stejné úrovně

11. Export dokumentů: krátké zopakování z minula

Další vlastnost režimu org-mode, o které jsme se již ve stručnosti zmínili minule, spočívá v možnosti exportu dokumentů do různých souborových formátů, například do HTML, PDF, TeXu atd. Někteří uživatelé, kteří například musí odevzdávat články v TeXu či LaTeXu dokonce tyto články píšou přímo v org-mode a výsledné vygenerované soubory popř. pouze nepatrně poupraví a přidají do příslušné šablony (samozřejmě záleží na tom, zda má článek obsahovat spíše běžný strukturovaný text s tabulkami nebo velké množství vzorců a grafů).

Obrázek 23: Interaktivní dialog pro export diáře do různých formátů (tento screenshot jsme si již ukázali minule).

Režim org-mode podporuje export do mnoha formátů, ovšem u některých nabízených možností je nutné si nainstalovat další podpůrné knihovny. Například soubory PDF jsou vytvářeny přes LaTeX atd. Mezi podporované formáty patří především:

Označení Formát
ascii klasický textový (ASCII) formát
beamer LaTeX Beamer (prezentace)
html běžné HTML
icalendar iCalendar
latex LaTeX (běžný dokument)
md Markdown (viz další kapitoly)
odt OpenDocument Text
org samotný org formát
texinfo Texinfo (pro .info soubory)
man manuálové stránky

12. Export vytvořeného dokumentu do Markdownu

Formát Markdown pravděpodobně není nutné čtenářům Roota podrobněji představovat, protože se jedná o jednoduchý (někdy až moc jednoduchý) a populární formát, s nímž dokáže pracovat velké množství různých nástrojů (příkladem může být GitHub). Tento formát se v některých ohledech podobá formátu org-mode, takže by export měl být teoreticky bezproblémový. Ve skutečnosti však poměrně brzy narazíme na již zmíněnou jednoduchost Markdownu, například při práci s tabulkami atd.

Samotný export aktuálně editovaného dokumentu do Markdownu se provede příkazem:

M-x org-md-export-to-markdown

Zajímavé bude zjistit, jak se vlastně převede náš testovací dokument. Z výpisu níže je patrné, že Emacs nahradil ty části, které nemají v Markdownu ekvivalent, za HTML. To může být někdy nepříjemné, i když například první část s obsahem je možné snadno odstranit:

<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#sec-1">1. Tvorba delších dokumentů a článků v org-mode</a>
<ul>
<li><a href="#sec-1-1">1.1. Základní struktura dokumentů</a></li>
<li><a href="#sec-1-2">1.2. Editace dokumentů</a></li>
<li><a href="#sec-1-3">1.3. Zarovnání odstavců</a></li>
<li><a href="#sec-1-4">1.4. Vyznačování v textu</a></li>
</ul>
</li>
</ul>
</div>
</div>
 
# Tvorba delších dokumentů a článků v org-mode<a id="sec-1" name="sec-1"></a>
 
Režim org-mode je možné v případě potřeby použít i pro tvorbu
delších dokumentů, které se následně mohou převést (exportovat) do
jiných formátů.
 
## Základní struktura dokumentů<a id="sec-1-1" name="sec-1-1"></a>
 
Pro vytvoření základní struktury dokumentu se používají nám již
známé řádky začínající hvězdičkami. Počet hvězdiček na začátku řádků
přitom určuje úroveň jednotlivých kapitol a podkapitol.
 
## Editace dokumentů<a id="sec-1-2" name="sec-1-2"></a>
 
Samotné odstavce se vytváří zcela běžným způsobem. Pokud budete
vyžadovat, aby se při psaní textu popř. při jeho úpravách používalo
zarovnání, můžete si příslušný režim nastavit v menu Text. Jedná se
o položky:
-   Auto Fill
-   Paragraph Indent
 
Tato nastavení je samozřejmě možné provést i přes klávesovou zkratku
M-x auto-fill-mode.
 
## Zarovnání odstavců<a id="sec-1-3" name="sec-1-3"></a>
 
Samotné odstavce se vytváří zcela běžným způsobem. Pokud budete
vyžadovat, aby se při psaní textu popř. při jeho úpravách používalo
zarovnání, můžete si příslušný režim nastavit v menu Text.
 
## Vyznačování v textu<a id="sec-1-4" name="sec-1-4"></a>
 
Taktéž je možné použít několik značek přímo v textu. S těmito značkami
jsme se již setkali, takže jen krátce: **tučné písmo**, *kurzíva*,
<span class="underline">podtržené písmo</span>, `zdrojový kód` a `neformátovaný text`.
 
    for i in range(1, 10):
        print(i)

13. Export vytvořeného dokumentu do AsciiDocu

Zajímavé je, že export dokumentů z formátu org-mode do formátu AsciiDoc není přímo podporován, ale je zapotřebí použít externí nástroj. Ten naleznete na adrese https://github.com/yashi/org-asciidoc. Na rozdíl od výše zmíněného Markdownu je export do AsciiDocu většinou bezproblémový: převedou se dokonce i tabulky, odkazy na obrázky atd.

14. Značky určené primárně pro export dokumentů do dalších formátů

Při exportu dokumentů do jiných formátů, například při posílání a publikování článků, se někdy setkáme s nutností explicitního určení, kde končí odstavce a popř. musíme do odstavců vkládat konce řádků. Konce odstavců jsou specifikovány jednoduše – prázdným řádkem mezi odstavci (podobně jako v TeXu a LaTeXu). Jakékoli znaky konce řádku v rámci odstavce jsou tedy ignorovány. Proto, pokud je zapotřebí na nějakém místě provést zalomení řádku, je nutné použít dvojici znaků \\ (line break).

Dále se někdy setkáme s nutností vložit do dokumentu předformátovaný text. Zde máme několik možností. Delší bloky předformátovaného textu se vkládají mezi řádky #+BEGIN_EXAMPLE a #+END_EXAMPLE:

#+BEGIN_EXAMPLE
předformátovaný text
předformátovaný text
předformátovaný text
#+END_EXAMPLE

Kratší bloky můžeme označit jako předformátovaný text pomocí dvojtečky na začátku řádku:

: předformátovaný text

Před dvojtečku se mohou zapsat mezery, aby byl například text zarovnaný s ostatními odstavci:

    : předformátovaný text

V případě, že potřebujete zachovat konce řádků, odsazení a současně i všechny prázdné řádky, použijte jiný typ bloku:

#+BEGIN_VERSE
text
   se
      zachováním
      odsazení
   a
 
   prázdnými řádky
#+END_VERSE

15. Bloky se zdrojovým kódem

Režim org-mode podporuje i práci s textovými bloky, které obsahují zdrojový kód. Zápis takového bloku vyžaduje určení typu souboru, resp. přesněji řečeno normalizovaného jména programovacího jazyka. Podívejme se nyní na jednoduchý příklad převzatý z manuálu k režimu org-mode:

#+BEGIN_SRC emacs-lisp
(defun org-xor (a b)
  "Exclusive or."
  (if a (not b) b))
#+END_SRC

Zdrojový kód naprogramovaný v céčku:

#+BEGIN_SRC C
int main(int argc, char **argv) {
    return -1;
}
#+END_SRC

Seznam všech podporovaných programovacích jazyků lze nalézt na adrese https://orgmode.org/manual/Lan­guages.html#Languages. V současnosti se jedná o tyto jazyky:

Jazyk Označení
Asymptote asymptote
C C
Clojure clojure
D d
Graphviz dot
Emacs Lisp emacs-lisp
gnuplot gnuplot
Java java
LaTeX latex
Lisp lisp
Lua lua
Mscgen mscgen
Octave octave
Oz oz
Plantuml plantuml
Python python
Ruby ruby
Scheme scheme
Sed sed
SQL sql
Vala vala
Awk awk
C++ C++
CSS css
ditaa ditaa
Emacs Calc calc
Fortran fortran
Haskell haskell
Javascript js
Ledger ledger
Lilypond lilypond
MATLAB matlab
Objective Caml ocaml
Org mode org
Perl perl
Processing.js processing
R R
Sass sass
GNU Screen screen
shell sh
SQLite sqlite
Poznámka: pravděpodobně jste si povšimli, že kromě klasických programovacích jazyků jsou podporovány i souborové formáty, konfigurační soubory apod.

16. Speciální symboly a použití diagramů kreslených v Ditaa

Režim org-mode při exportu podporuje i použití indexů a speciálních symbolů. Začneme popisem indexů. Pokud se má do indexu zapsat pouze jediné slovo, můžeme použít ^text pro zápis horního indexu a _text pro zápis indexu dolního. Pokud je slov více, musí se celý text, který se má zobrazit v horním či spodním indexu, vložit do složených závorek, což opět připomíná LaTeX. Speciální symboly, například π nebo Γ, se vkládají pomocí \pi a \Gamma.

Užitečné může taktéž být použití nástroje Ditaa, který slouží k převodu diagramů vytvořených v ASCII artu do bitmapových obrázků, typicky do formátu PNG. Tento program navíc zachovává umístění jednotlivých uzlů v diagramu, nesnaží se tedy o přeuspořádání do jiné podoby. To mj. znamená, že Ditaa bude používána v jiných oblastech než nástroje dostupné v balíčku Graphviz.

Použití programu Ditaa je skutečně velmi jednoduché. Začněme s následujícím diagramem, který lze snadno vytvořit v jakémkoli textovém editoru (dokonce i v Notepadu, což ale od čtenářů tohoto článku neočekávám :-):

             +-------+    +------+
      +------+ Algol +--->| PL/I +
      |      +---+---+    +------+
      |          |
      |          |
      v          v
  +-------+  +-------+
  |  Perl |  | K&R C |
  +-------+  +---+---+
                 |
                 |
                 v
             +-------+
             | ANSI C|
             +-------+

Ditta automaticky zjistí, které znaky odpovídají uzlům a které hranám. Následně vytvoří tento obrázek:

Obrázek 24: První diagram vytvořený aplikací Ditaa.

V případě, že výsledný diagram neodpovídá očekávání, lze použít přepínač –debug, který povolí výpis různých ladicích informací na standardní výstup a současně do výsledného obrázku nakreslí mřížku:

ditaa version 0.9, Copyright (C) 2004--2009  Efstathios (Stathis) Sideris
 
Running with options:
debug
Reading file: ditta1.txt
Using grid:
    0123456789012345678901234567890123456789
 0 (                                      )
 1 (                                      )
 2 (               +-------+    +------+  )
 3 (        +------+ Algol +--->| PL/I +  )
 4 (        |      +---+---+    +------+  )
 5 (        |          |                  )
 6 (        |          |                  )
 7 (        v          v                  )
 8 (    +-------+  +-------+              )
 9 (    |  Perl |  | K&R C |              )
10 (    +-------+  +---+---+              )
11 (                   |                  )
12 (                   |                  )
13 (                   v                  )
14 (               +-------+              )
15 (               | ANSI C|              )
16 (               +-------+              )
17 (                                      )
18 (                                      )
Locale: en_US
Dialog.bold
Rendering to file: ditta1_3.png
Done in 0sec

Obrázek 25: První diagram vytvořený aplikací Ditaa při použití parametru –debug.

Velmi snadným způsobem lze změnit styl spojnic (hran) mezi uzly. Stačí, aby jediný znak ve spojnici byl nahrazen znakem : (dvojtečka) nebo = (rovnost) a celá hrana bude vykreslena čárkovaně. Proč postačuje změnit jediný znak? Je tomu tak z toho důvodu, aby úpravy diagramu byly velmi rychlé, bez nutnosti „překreslovat“ celou hranu:

             /-------\
      +------+ Algol +-+
      :      \---+---/ |
      |          |     |   +------+
      |          |     +-->| PL/I +
      v          v         \------/
  +-------+  +-------+
  |  Perl |  | K∓R C |
  \-------/  +---+---+
                 |
                 |
                 v
             /-------\
             | ANSI C|
             +-------+

Obrázek 26: Třetí diagram vytvořený aplikací Ditaa.

Poslední vlastností programu Ditaa je schopnost měnit tvar uzlů pomocí speciálních značek zapisovaných do složených závorek. Opět se podívejme na příklad:

             /------------------\
      +------+ cRED Algol {d}   +--+
      :      \---+-----------+--/  |
      |          |           |     |   +------------+
      |          |           |     +-->|   PL/I {s} |
      v          v           v         \------------/
  +-------+  +------------------+
  |  Perl |  | cBLU K&R C {io}  |
  \-------/  +---+-----------+--+
                 |           |
                 |           |
                 v           v
             /------------------\
             | cGRE ANSI C      |
             +------------------+

Obrázek 27: Diagram vytvořený aplikací Ditaa.

Diagramy psané v Ditaa se do dokumentů vkládají až překvapivě snadno:

#+BEGIN_SRC ditaa :file images/diagram-1.png
             +-------+    +------+
      +------+ Algol +--->| PL/I +
      |      +---+---+    +------+
      |          |
      |          |
      v          v
  +-------+  +-------+
  |  Perl |  | K&R C |
  +-------+  +---+---+
                 |
                 |
                 v
             +-------+
             | ANSI C|
             +-------+
#+END_SRC

17. Využití stopek

Při práci na úkolech je možné použít takzvané stopky (či časovače). Nejedná se ve skutečnosti o nic složitého, vlastně jen o rozšíření možností časových razítek. Klávesovou zkratkou C-c C-x . se stopky vynulují, zapnou a začnou běžet na pozadí. Další klávesová zkratka C-c C-x - slouží k vložení aktuální hodnoty stopek do textu. Pomocí C-c C-x , lze stopky pozastavit. V praxi bude dokument při použití stopek vypadat zhruba následovně:

0:00:00 spuštění časovače/stopek
- 0:00:21 :: začátek úkolu 1
- 0:20:33 :: konec úkolu 1
- 1:30:00 :: začátek úkolu 2
- 2:21:49 :: konec úkolu 2

18. Hodiny a čas strávený na úkolech

Poslední vlastnost org-mode, s níž se dnes seznámíme, opět souvisí s časem. Tentokrát se jedná o záznamy umožňující zjistit, kolik času zabral určitý úkol. K tomu se používají časové značky, které se do dokumentů vkládají následujícími klávesovými zkratkami:

Klávesová zkratka Význam klávesové zkratky
C-c C-x C-i zapnutí hodin pro vybraný úkol
C-c C-x C-o vypnutí hodin pro vybraný úkol
C-c C-x C-r vložení tabulky s přehledem času

Podívejme se nyní, jak vypadá dokument, do něhož jsou tyto časové značky vloženy. Povšimněte si, že je zaznamenán začátek úkolu, jeho konec a celkový čas:

* Úkoly
** DONE Přednáška Go vs Rust pro LinuxDays 2018
   CLOCK: [2018-10-06 Tue 16:14]--[2018-10-06 Tue 18:14] =>  2:00
** DONE Přednáška o vim-lsp
** TODO Test plán pro Gemini service
** DONE Článek o org-mode - úvod
** TODO Článek o org-mode - to právě čtete :-)
** Sprint #09
** Sprint #10
   CLOCK: [2018-10-16 Tue 15:12]--[2018-10-16 Tue 16:12] =>  1:00
** Taky se nezapomenout nasnídat
   CLOCK: [2018-10-16 Tue 16:12]--[2018-10-16 Tue 16:42] =>  0:30

Klávesovou zkratkou C-c C-x C-r si dokonce můžeme nechat zobrazit tabulku s přehledem celkového času. Základní formát této tabulky vypadá následovně:

#+BEGIN: clocktable :maxlevel 2 :scope file
#+CAPTION: Clock summary at [2018-10-16 Tue 16:14]
| Headline                               | Time   |      |
|----------------------------------------+--------+------|
| *Total time*                           | *3:30* |      |
|----------------------------------------+--------+------|
| Úkoly                                  | 3:30   |      |
| \emsp DONE Přednáška Go vs Rust pro... |        | 2:00 |
| \emsp Sprint #10                       |        | 1:00 |
| \emsp Taky se nezapomenout nasnídat    |        | 0:30 |
#+END:

Úpravou prvního řádku #+BEGIN: clocktable a přegenerováním tabulky můžeme například určit začátek a konec časového období, pro které je tabulka vygenerována:

ict ve školství 24

#+BEGIN: clocktable :tstart "<2018-08-08 Thu 10:00>"
                    :tend "<2018-09-10 Fri 12:00>"
#+END: clocktable

Popř. – což je velmi užitečné – můžeme čas určit relativně. Následující příklad, který je opět převzatý z dokumentace, určujem že se má tabulka vytvořit pro poslední týden (zápis „-1w“ značí „minus one week“)

#+BEGIN: clocktable :tstart "<-1w>" :tend "<now>"
#+END: clocktable
Ještě se divíte, že pro někoho je org-mode skutečně „killer app“? A to jsme si ještě zdaleka neřekli o všech vlastnostech, které tento režim uživatelům nabízí.

19. Seznam již popsaných příkazů režimu org-mode

V této kapitole jsou pro úplnost vypsány všechny příkazy režimu org-mode, s nimiž jsme se seznámili dnes popř. v předchozím článku:

Objekt Klávesová zkratka Význam klávesové zkratky
strom/podstrom TAB změna viditelnosti konkrétního vybraného podstromu (postupně se rotuje mezi různými úrovněmi)
strom/podstrom S-TAB změna viditelnosti obsahu celého bufferu (dokumentu)
celý dokument C-u C-u TAB výchozí nastavení viditelnosti
celý dokument C-u C-u C-u TAB zobrazení obsahu celého souboru, tj. celé jeho struktury
     
seznam M-RET přidání dalšího prvku do (ne)číslovaného seznamu
seznam C-c – postupná změna typu prvku (číslovaný seznam atd.)
seznam C-c ^ seřazení seznamu
seznam C-c * převedení aktivního prvku na nadpis
seznam C-c | převod seznamu (i jiného bloku) na tabulku
seznam M-šipka nahoru přesun prvku v rámci seznamu nahoru
seznam M-šipka dolů přesun prvku v rámci seznamu dolů
     
checkbox C-c C-c zaškrtnutí/zrušení zaškrtnutí políčka
checkbox C-c C-x C-b zaškrtnutí/zrušení více políček
checkboxy C-c # výpočet % nebo zlomku dokončených úkolů
     
tabulka C-c * přepočet jednoho řádku
tabulka C-u C-c * přepočet celé tabulky
tabulka C-c } zobrazení indexů řádků i sloupců
tabulka M-šipka doleva prohození dvou sloupců
tabulka M-šipka doprava prohození dvou sloupců
tabulka M-šipka nahoru prohození dvou řádků
tabulka M-šipka dolů prohození dvou řádků
     
dokument C-c C-l vložení odkazu (linku) do dokumentu
dokument C-c C-o přechod na dokument, na nějž vede odkaz (link)
dokument C-c l vložení linku na editovaný (otevřený) dokument
     
dokument C-c C-n přesun kurzoru na další nadpis
dokument C-c C-p přesun kurzoru na předchozí nadpis
dokument C-c C-u přesun kurzoru na nadpis o úroveň výše, než je současný text
dokument C-c C-j skok – skrytí běžného textu s následným přesunem kurzoru
dokument C-c C-f přesun kurzoru na další nadpis stejné úrovně
dokument C-c C-b přesun kurzoru na předchozí nadpis stejné úrovně
     
položka (úkol) C-c . vložení
položka (úkol) C-c C-t změna stavu úkolu (ve výchozím nastavení TODO→nic→DONE)
položka (úkol) C-c / t zobrazení úkolů ve stavu „DONE“
položka (úkol) C-c C-x C-i zapnutí hodin pro vybraný úkol
položka (úkol) C-c C-x C-o vypnutí hodin pro vybraný úkol
     
dokument C-c C-x C-r vložení tabulky s přehledem času
     
datum S-right změna dne, kdy má být úkol dokončen
datum S-left změna dne, kdy má být úkol dokončen
datum S-up modifikace té jednotky, na které se nachází kurzor (rok, měsíc nebo den)
datum S-down modifikace té jednotky, na které se nachází kurzor (rok, měsíc nebo den)

20. Odkazy na Internetu

  1. Org-Mode Reference Card
    https://orgmode.org/orgcard.pdf
  2. Org-mode Tutorial 1 – Introduction and basics
    https://www.youtube.com/wat­ch?v=vCyBu8Az254
  3. Getting Started With Org Mode
    https://www.youtube.com/wat­ch?v=SzA2YODtgK4
  4. Org as a spreadsheet system: a short introduction
    https://orgmode.org/worg/org-tutorials/org-spreadsheet-intro.html
  5. David O'Toole Org tutorial
    https://orgmode.org/worg/org-tutorials/orgtutorial_dto.html
  6. Org mode beginning at the basics
    https://orgmode.org/worg/org-tutorials/org4beginners.html
  7. A Guided Tour of Emacs
    https://www.gnu.org/softwa­re/emacs/tour/
  8. Emacs (Wikipedia)
    https://en.wikipedia.org/wiki/Emacs
  9. Emacs timeline
    http://www.jwz.org/doc/emacs-timeline.html
  10. Emacs Text Editors Family
    http://texteditors.org/cgi-bin/wiki.pl?EmacsFamily
  11. Evil (Emacs Wiki)
    https://www.emacswiki.org/emacs/Evil
  12. Evil (na GitHubu)
    https://github.com/emacs-evil/evil
  13. Evil (na stránkách repositáře MELPA)
    https://melpa.org/#/evil
  14. Evil Mode: How I Switched From VIM to Emacs
    https://blog.jakuba.net/2014/06/23/e­vil-mode-how-to-switch-from-vim-to-emacs.html
  15. Emacs/Evil-mode – A basic reference to using evil mode in Emacs
    http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet
  16. From Vim to Emacs+Evil chaotic migration guide
    https://juanjoalvarez.net/es/de­tail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/
  17. Introduction to evil-mode {video)
    https://www.youtube.com/wat­ch?v=PeVQwYUxYEg
  18. GNU Emacs (home page)
    https://www.gnu.org/software/emacs/
  19. GNU Emacs (texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?GnuEmacs
  20. GNU Emacs Lisp Reference Manual: Point
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­lisp/Point.html
  21. GNU Emacs Lisp Reference Manual: Narrowing
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­lisp/Narrowing.html
  22. GNU Emacs Lisp Reference Manual: Functions that Create Markers
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­lisp/Creating-Markers.html
  23. GNU Emacs Lisp Reference Manual: Motion
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­lisp/Motion.html#Motion
  24. GNU Emacs Lisp Reference Manual: Basic Char Syntax
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­lisp/Basic-Char-Syntax.html
  25. Elisp: Sequence: List, Array
    http://ergoemacs.org/emac­s/elisp_list_vs_vector.html
  26. Elisp: Property List
    http://ergoemacs.org/emac­s/elisp_property_list.html
  27. Elisp: Hash Table
    http://ergoemacs.org/emac­s/elisp_hash_table.html
  28. Elisp: Association List
    http://ergoemacs.org/emac­s/elisp_association_list.html
  29. The mapcar Function (An Introduction to Programming in Emacs Lisp)
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­intr/mapcar.html
  30. Anaphoric macro
    https://en.wikipedia.org/wi­ki/Anaphoric_macro
  31. Some Common Lisp Loop Macro Examples
    https://www.youtube.com/wat­ch?v=3yl8o6r_omw
  32. The Roots of Lisp
    http://www.paulgraham.com/ro­otsoflisp.html
  33. An Introduction To Using GDB Under Emacs
    http://tedlab.mit.edu/~dr/gdbin­tro.html
  34. An Introduction to Programming in Emacs Lisp
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­intr/index.html
  35. 27.6 Running Debuggers Under Emacs
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­macs/Debuggers.html
  36. GdbMode
    http://www.emacswiki.org/e­macs/GdbMode
  37. Vrapper aneb spojení možností Vimu a Eclipse
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/
  38. Vrapper aneb spojení možností Vimu a Eclipse (část 2: vyhledávání a nahrazování textu)
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse-cast-2-vyhledavani-a-nahrazovani-textu/
  39. EINE (Emacs Wiki)
    http://www.emacswiki.org/emacs/EINE
  40. EINE (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?EINE
  41. ZWEI (Emacs Wiki)
    http://www.emacswiki.org/emacs/ZWEI
  42. ZWEI (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?ZWEI
  43. Zmacs (Wikipedia)
    https://en.wikipedia.org/wiki/Zmacs
  44. Zmacs (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?Zmacs
  45. Command-line document conversion tools for writers
    https://opensource.com/ar­ticle/17/3/document-conversion-tools-writers
  46. How I use Emacs and Org-mode to implement GTD
    http://members.optusnet.com­.au/~charles57/GTD/gtd_wor­kflow.html
  47. Outlining Your Notes with Org
    http://sachachua.com/blog/2008/01/ou­tlining-your-notes-with-org/
  48. Org-mode Teaser Demo
    https://github.com/novoid/org-mode-workshop/blob/master/featureshow/org-mode-teaser.org
  49. Taking notes with a timer
    https://orgmode.org/manual/Ti­mers.html
  50. Markdown
    https://daringfireball.net/pro­jects/markdown/
  51. Exporting from org-mode to markdown
    https://emacs.stackexchan­ge.com/questions/4279/expor­ting-from-org-mode-to-markdown
  52. org-asciidoc
    https://github.com/yashi/org-asciidoc
  53. Org-Mode Is One of the Most Reasonable Markup Languages to Use for Text
    https://karl-voit.at/2017/09/23/orgmode-as-markup-only/
  54. Karl Voit on the Superiority of Org Mode Markup
    http://irreal.org/blog/?p=6627
  55. Languages (pro org-mode)
    https://orgmode.org/manual/Lan­guages.html
  56. Babel: Languages
    https://orgmode.org/worg/org-contrib/babel/languages.html

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.