#+TITLE: Installfest: Emacs Org mode aneb organizujte svůj život v ASCII #+DATE: <2017-03-05 Sun> #+AUTHOR: Michal Sojka #+EMAIL: sojkam1@fel.cvut.cz „Slidy“ z mého workshopu na Installfestu. K dispozici i ve formě [[./org-mode.txt][org-mode zdrojáku]], jen je potřeba změnit příponu z .txt na .org. #+TOC: headlines 1 * About - ASCII by mělo být spíš UTF-8, ale to nezní tak „cool“ :-) - O mě - Pracuji na ČVUT, FEL - Embedded systémy (≈ low-level stuff) - Emacs používám od r. 1998 - Patřím k lidem, kteří v Emacsu žijí - Vim používám také a nic proti němu nemám :-) * Org-mode - Pokud je /Emacs/ označován jako *operační systém*, /org-mode/ bychom mohli nazvat *kancelářský balík* - Outliner - Základní funkcionalita; snaha je, aby další funkce nekomplikovaly použití org-mode jako outlineru. - Značkovací jazyk (markup) - Prostředí pro přípravu textových dokumentů - Tabulkový kalkulátor - Kalendář, plánovač, organizér - a určitě mnoho dalšího... - Dokumentace: «C-h i d m org RET» - Nekonečné možnosti konfigurace - «M-x customize-group RET org RET» * Outliner - Nadpisy =^*+= - M-RET – nový nadpis - M-šipky, M-S-šipky – změny úrovně či pořadí - C-c C-u – o úroveň výš, C-c C-j – skok, [[info:org#Motion][info:org#Motion]] - Schovávání: TAB, S-TAB - Seznamy - odrážkové, číslované, … - S-←,→ - Mnohé klávesové zkratky stejné jako u nadpisů - Konverze «C-c *», «C-c -» * Značkovací jazyk (markup) - *Tučné*, /kurzíva/, _podtrženo_ =verbatim=, +přeskrtnuto+, ~kód~ \alpha, $x=\sum_1^n k_i$ - Tabulky – nejsnadnější zadávaní jednoduchých tabulek do počítače =| xxx | yyy «TAB»= - Obrázky: ~[[./file.jpg]​]~ - Příklady, zdrojáky se zvýrazňováním syntaxe - Zkratky: => - * Nadpis obsahující cíl - #+NAME: cíl - … [[cíl]] - Externí odkazy («C-c l») - =[[file:source.c::main(int]] argc= - [[elisp:(tetris)]] - odkazy na emaily… - „Rádiové cíle“: =<<>>= <<>> Příklad: Rádio bylo vynalezeno roku 1893. * Organizace - Todo – každý nadpis může být položkou „TODO“ «S-←,→» - Seznam stavů je konfigurovatelný - «C-c a t» – all TODOs = agenda - Seznam souborů pro tvorbu agendy (např. jeden .org soubor pro projekt) - Scheduled/deadline: C-c C-s, C-c C-d - «.» = dnes, «S-šipky» - Rozumí i textu: např. „May 1“ nebo „Wed“ - Záznam odpracovaného času na úkolech «C-c C-x C-i», «C-c C-x C-o» - [[elisp:(org-clock-report)]] - Souhrn splnění podúkolů =[/]=, =[%]= - [ ] Checkboxy «C-c C-c» - Tagy u nadpisů :tag:, «C-c C-c» - hledání podle tagů: «C-c a m» * Rychlý záznam TODO (capture) - Vyžaduje konfiguraci - Globální klávesa «C-c c» - Šablony - předvyplněný obsah, kam se má „TODO“ uložit #+BEGIN_SRC elisp (setq org-capture-templates '(("t" "Todo" entry (file+headline "~/org/gtd.org" "Tasks") "* TODO %?\n %i\n %a") ("j" "Journal" entry (file+datetree "~/org/journal.org") "* %?\nEntered on %U\n %i\n %a"))) #+END_SRC * Export - «C-c C-e» - Plain text, HTML, OpenDocument, … - Relativně snadná tvorba vlastních exportů (např. Doxygen) - Nastavení exportu v hlavičce – «C-c C-e #» * Babel - Práce se zdrojovými kódy - Podpora více jazyků v jednom dokumentu a interakce mezi nimi - „Literate programming“ - „Reproducible research“ (executable documentation) #+NAME: shell-test #+BEGIN_SRC sh :exports both :results verbatim for i in $(seq 3); do date; sleep 1; done ls -l #+END_SRC Výsledky vidíme níže: #+RESULTS: shell-test : Wed 8 Mar 10:44:56 CET 2017 : Wed 8 Mar 10:44:57 CET 2017 : Wed 8 Mar 10:44:58 CET 2017 : total 24 : -rw-r--r-- 1 wsh wsh 6696 Mar 5 21:52 graph.png : -rw-r--r-- 1 wsh wsh 6232 Mar 8 10:42 index.org : -rw-r--r-- 1 wsh wsh 6232 Mar 8 10:44 org-mode.txt - Editace: «C-c '» - Spuštění: «C-c C-c» - Argumenty v hlavičce - :results verbatim drawer * Babel example Run the benchmark (shell script) on a remote server: #+BEGIN_SRC sh :dir /compile.felk.cvut.cz:installfest :exports code mbw -a -q 10 | awk '{ print $1, $3, $9 }' #+END_SRC #+tblname: mbw-results #+RESULTS: | 0 | MEMCPY | 2193.945 | | 1 | MEMCPY | 2334.267 | | 2 | MEMCPY | 2368.546 | | 3 | MEMCPY | 2396.358 | | 4 | MEMCPY | 2411.382 | | 5 | MEMCPY | 2417.211 | | 6 | MEMCPY | 2434.867 | | 7 | MEMCPY | 2436.054 | | 8 | MEMCPY | 2433.682 | | 9 | MEMCPY | 2460.025 | | 0 | DUMB | 2494.388 | | 1 | DUMB | 2513.826 | | 2 | DUMB | 2511.301 | | 3 | DUMB | 2508.781 | | 4 | DUMB | 2506.894 | | 5 | DUMB | 2510.67 | | 6 | DUMB | 2508.151 | | 7 | DUMB | 2518.892 | | 8 | DUMB | 2475.86 | | 9 | DUMB | 2465.483 | | 0 | MCBLOCK | 3248.863 | | 1 | MCBLOCK | 3172.589 | | 2 | MCBLOCK | 3161.555 | | 3 | MCBLOCK | 3175.611 | | 4 | MCBLOCK | 3184.713 | | 5 | MCBLOCK | 3174.603 | | 6 | MCBLOCK | 3164.557 | | 7 | MCBLOCK | 3170.577 | | 8 | MCBLOCK | 3166.561 | | 9 | MCBLOCK | 3188.776 | Gnuplot code to plot the results of the above command. #+BEGIN_SRC gnuplot :var data=mbw-results :file graph.png :exports both set key right bottom Left set grid set title "mbw results" set xlabel "Attempt" set ylabel "Bandwidth [MiB/s]" set style data lp set yrange [0:] plot "< grep MEMCPY ".data using 1:3 title "MEMCPY", \ "< grep DUMB ".data using 1:3 title "DUMB", \ "< grep MCBLOCK ".data using 1:3 title "MCBLOCK" #+END_SRC #+RESULTS: [[file:graph.png]] * Properties - «C-c C-x p» - Key-value přiřazené k nadpisu - Může měnit různé nastavení pro danou sekci - Lze používat i jako jednoduchou databázi (hledání podle properties apod.) - Column view «C-c C-x C-c»