Hlavní navigace

Doom Emacs: elegantní a snadno použitelné uživatelské rozhraní Emacsu

31. 8. 2021
Doba čtení: 31 minut

Sdílet

 Autor: Pixabay
Projekt Emacs lze považovat jak za (programovatelný) textový editor, tak i za platformu, na níž je možné postavit další aplikace, popř. původní editor upravit do zcela odlišné podoby.

Obsah

1. Doom Emacs – elegantní a snadno použitelné uživatelské rozhraní Emacsu

2. Emacs jako platforma, nikoli pouze textový editor

3. Instalace Emacsu

4. Instalace Doom Emacsu

5. Stav po instalaci Doom Emacsu

6. První spuštění Doom Emacsu

7. Základy ovládání Doom Emacsu

8. Základní editační příkazy v režimu Vimu

9. Práce s okny, přechody mezi okny

10. Základní operace se soubory

11. Doom Emacs a slavný Org-mode

12. Vedení agendy

13. Folding

14. Nástroj doom

15. Konfigurační soubory Doom Emacsu

16. Instalace nových balíčků

17. Příklad instalace nového balíčku

18. Změna stylu zobrazení Doom Emacsu

19. Předchozí články o Emacsu

20. Odkazy na Internetu

1. Doom Emacs – elegantní a snadno použitelné uživatelské rozhraní Emacsu

„Emacs is an all consuming black hole. Its users doom themselves, eternally.“

I přesto, že v současnosti existuje poměrně velké množství programátorských textových editorů postavených na moderních technologiích (jmenujme například Atom, Sublime Text 2, Light Table či projekt Kakoune), stále mnoho uživatelů – ať již se jedná o programátory, administrátory, testery atd. – používá dnes již klasické editory Vim a Emacs. Ostatně není se čemu divit, protože jak ve Vimu, tak i v Emacsu lze s texty pracovat velmi efektivně a navíc je možné si mnohé úlohy plně zautomatizovat, například prostým opakováním příkazu, použitím uživatelských maker, mapováním kláves či dokonce vytvořením složitějších skriptů/pluginů.

Obrázek 1: Podobným projektem, jako je dále popsaný Doom Emacs je i Spacemacs, s nímž jsme se již na stránkách Roota setkali.

Navíc Emacs nabízí i takové pokročilé technologie, jakou je slavný režim Org. Mezi uživateli Vimu a Emacsu se vedly mnohdy epické bitvy, ovšem v posledním desetiletí naopak můžeme vidět snahu o integraci možností obou editorů; typicky se jedná o kombinaci modálního Vimu s rozšiřitelností Emacsu. Jednou z nejpokročilejších (a současně i poměrně snadno použitelnou) kombinací možností Vimu a Emacsu je projekt nazvaný Spacemacs, který navíc umožňuje použití menu (vyvolávaného implicitně mezerníkem) s mnemotechnickými zkratkami, tj. bez nutnosti používat mnohdy poměrně těžkopádné kombinace Ctrl+Alt+… Spacemacs je ovšem v některých ohledech příliš „těžkotonážní“. Existuje ovšem ještě (minimálně) jeden projekt s podobným zaměřením a s velmi elegantním způsobem konfigurace (a vůbec správy). Tento projekt se jmenuje Doom Emacs a cílem dnešního článku je seznámit čtenáře se základy jeho ovládání i s tím, jak je ho možné konfigurovat.

Obrázek 2: Spuštění textového editoru Emacs se zobrazením hypertextového souboru s nápovědou s plnohodnotným grafickým uživatelským rozhraním. Jak uvidíme dále, je toto rozhraní v Doom Emacsu modifikováno, takže vypadá odlišně (můžeme říci, že moderně).

Důležité upozornění: v současnosti se používá několik typů textových editorů, v jejichž názvu objevíme slovo Emacs. Jedná se například o MicroEMACS a jeho varianty, z nichž jedna je používána a udržována Linusem Torvaldsem. Dnes se ovšem zaměříme na popis možností GNU Emacsu, i když popisovaný režim by měl být funkční i v XEmacsu (pokud ho ještě někdo používá namísto GNU Emacsu). Všechny popisované funkce je samozřejmě možné použít jak tehdy, když je GNU Emacs spuštěn s plnohodnotným grafickým uživatelským rozhraním, tak i v případě, že používáte GNU Emacs spuštěný v terminálu, například s využitím balíčku emacs-nox (nox = no X).

2. Emacs jako platforma, nikoli pouze textový editor

V posledních přibližně patnácti letech můžeme v oblasti textových editorů a integrovaných vývojových prostředí vidět znatelný a stále se zrychlující posun od specializovaných (ale současně i malých a rychlých) integrovaných vývojových prostředí k více či méně otevřeným platformám, které je možné rozšiřovat formou pluginů či balíčků. Příkladem specializovaného IDE může být prostředí Turbo Pascalu či Delphi, i když už Delphi nabízelo například instalaci uživatelských ovládacích prvků atd. Otevřenou, resp. do značné míry otevřenou platformou je například Eclipse a nově taktéž velmi oblíbené prostředí VSCode. A pravděpodobně právě existence podobných platforem způsobila, že vznikly nástroje Doom Emacs a Spacemacs. Skutečně zde můžeme vidět korelace: VSCode je platformou otevřenou pro tvorbu dalších rozšíření, kterých dnes existují stovky, ne-li tisíce (a každé nové rozšíření zvyšuje atraktivitu VSCode pro další uživatele, a to bez přispění autorů samotného VSCode).

Obrázek 3: Dnes již historické IDE Turbo Pascalu určené pouze pro jediný jazyk. Prakticky všechny nástroje jsou nedílnou součástí tohoto IDE (s výjimkou externích nástrojů grep a Turbo Debugger).

Podobně je tomu v případě Emacsu, který ovšem má pro nově příchozí uživatele „divnější“ ovládání a tím pádem i horší učící křivku. Navíc si uživatelé po instalaci Emacsu většinou musí jeho chování přizpůsobit (nainstalovat další podpůrné balíčky atd.), což je taktéž časově náročné a může to mnohé uživatele odradit. To se samozřejmě odráží například na žebříčcích popularity. Doom Emacs a Spacemacs se zaměřují právě na tuto oblast, protože uživatelům nabízí prostředí, které je do značné míry vyladěné, a to jak po grafické stránce (dnes tak populární tmavé pozadí), tak i po stránce ovládání, popř. zjednodušenou správou balíčků. Současně existence Doom Emacsu i Spacemacsu ukazuje, jak je Emacs flexibilním nástrojem.

Poznámka: v kontextu popularity je dobré si uvědomit, že počet vývojářů se zdvojnásobí vždy přibližně za pět let. To znamená, že i když si nějaký nástroj udrží stávající vývojáře, mohou nově příchozí vývojáři celým žebříčkem popularity zamíchat. A projeví se zde i kladná zpětná vazba (a ta působí v obou směrech).
01

Obrázek 4: Jednou z prvních skutečně rozšiřitelných platforem je Eclipse.

Jak Doom Emacs tak i Spacemacs využívají možností existujících modulů a pluginů. Obě nadstavby například ve výchozím nastavení nabízí modální editaci souborů známou z Vimu. A toto řešení je do značné míry postaveno na režimu Evil, s nímž jsme se již na stránkách Roota setkali.

3. Instalace Emacsu

Poznámka: v této kapitole si popíšeme instalaci samotného Emacsu, která je provedena nezávisle na Doom Emacsu. Instalací Doom Emacsu se budeme zabývat až v kapitole navazující.

Doom Emacs není – i když by se to mohlo podle některých komentářů zdát – forkem Emacsu, jedná se skutečně „pouze“ o sadu konfiguračních skriptů a režimů určených pro klasický Emacs vhodně zkombinovaných se správcem balíčků. To mj. znamená, že ještě před instalací Doom Emacsu je nutné nainstalovat samotný Emacs (nikoli však XEmacs, i když teoreticky i taková kombinace by byla možná – není však oficiálně podporována). Samotný Emacs se nainstaluje s využitím balíčkovacího nástroje příslušné distribuce Linuxu.

To konkrétně znamená, že u distribucí založených na RPM/DNF se pro instalaci použije příkaz:

# dnf install emacs
 
Last metadata expiration check: 0:07:07 ago on Tue 09 Feb 2021 07:47:43 AM EST.
Package emacs-1:27.1-2.fc32.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
Poznámka: předchozí příkaz byl spuštěn na Fedoře 32 Server, kde je Emacs evidentně již součástí základní instalace systému (ovšem Vim taktéž, takže jsou obě skupiny uspokojeny).

U systémů založených na .deb balíčcích se pro instalaci Emacsu použije příkaz:

$ sudo apt-get install emacs
 
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  emacs-bin-common emacs-common emacs-el emacs-gtk imagemagick-6-common
  liblqr-1-0 libm17n-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libotf0
  m17n-db
Suggested packages:
  mailutils emacs-common-non-dfsg ncurses-term m17n-docs
  libmagickcore-6.q16-6-extra
The following NEW packages will be installed:
  emacs emacs-bin-common emacs-common emacs-el emacs-gtk imagemagick-6-common
  liblqr-1-0 libm17n-0 libmagickcore-6.q16-6 libmagickwand-6.q16-6 libotf0
  m17n-db
0 upgraded, 12 newly installed, 0 to remove and 401 not upgraded.
Need to get 36,5 MB of archives.
After this operation, 146 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
 
...
...
...
Install dictionaries-common for emacs
install/dictionaries-common: Byte-compiling for emacsen flavour emacs
Setting up emacs (1:26.3+1-1ubuntu2) ...
Processing triggers for mime-support (3.64ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for gnome-menus (3.36.0-1ubuntu1) ...
Processing triggers for libc-bin (2.31-0ubuntu9) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for install-info (6.7.0.dfsg.2-5) ...
Processing triggers for desktop-file-utils (0.24+linuxmint1) ...

Obrázek 5: V případě, že vám grafické uživatelské rozhraní u textových editorů z nějakého důvodu nevyhovuje a dáváte přednost použití terminálu, je možné Emacs startovat s volbou -nw nebo –no-window-system. Pokud se Emacs spouští například vzdáleně z textové konzole, samozřejmě se přepne do čistě textového rozhraní. Zde je konkrétně zobrazen klasický Emacs, nikoli Doom Emacs.

4. Instalace Doom Emacsu

Instalace samotného Doom Emacsu je relativně jednoduchá, protože se ve skutečnosti jedná „jen“ o sadu skriptů napsaných v Emacs Lispu doplněných o několik podpůrných skriptů. Nejdříve si můžete zazálohovat původní obsah adresáře .emacs.d, který obsahuje skripty a datové soubory s uživatelskou konfigurací Emacsu a je vytvořen již při instalaci Emacsu:

$ mv ~/.emacs.d ~/.emacs.d.backup

Ve druhém kroku si naklonujte Git repositář https://github.com/hlissner/doom-emacs, a to právě do adresáře .emacs.d:

$ git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d
 
Cloning into '/home/tester/.emacs.d'...
remote: Enumerating objects: 1077, done.
remote: Counting objects: 100% (1077/1077), done.
remote: Compressing objects: 100% (1027/1027), done.
remote: Total 1077 (delta 26), reused 617 (delta 11), pack-reused 0
Receiving objects: 100% (1077/1077), 983.87 KiB | 5.93 MiB/s, done.
Resolving deltas: 100% (26/26), done.

Nyní nastává třetí krok instalace, která se spustí tímto příkazem:

$ ~/.emacs.d/bin/doom install
 
> Installing straight...
  > Cloning use-package...
> Executing 'doom install' with Emacs 27.2 at 2021-08-27 10:22:14
  Installing Doom Emacs!
 
  > Creating .doom.d/
    ✓ Created .doom.d/
  - Creating .doom.d/init.el
  ✓ Done!
  - Creating .doom.d/config.el
  ✓ Done!
  - Creating .doom.d/packages.el
  ✓ Done!
 
  Installing plugins
  > Installing packages...
    > Building straight...
    - Checked out use-package: a7422fb8ab1baee19adb2717b5b47b9c3812a84c
    > Building use-package...
    > Building use-package > Building bind-key...
    > Building use-package...
    > Updating recipe repos...
    > Cloning auto-minor-mode...csmirror-mirror...
    - Checked out auto-minor-mode: 17cfa1b54800fdef2975c0c0531dad34846a5065
    > Building auto-minor-mode...
    > Cloning gcmh...
    - Checked out gcmh: 0089f9c3a6d4e9a310d0791cf6fa8f35642ecfd9
    > Building gcmh...
 
 
 
    ✓ Installed 138 packages
  Regenerating autoloads files
  > (Re)generating autoloads file...
    > Generating autoloads file...
    > Byte-compiling autoloads file...
    ✓ Generated .local/autoloads.27.2.elc
Poznámka: v průběhu instalace odpovězte na (obě) otázky „Y“:

Obrázek 6: Průběh instalace i s otázkou položenou uživateli.

Instalace je dokončena většinou až za několik minut, protože se stahují všechny balíčky, kterých je přibližně 130:

Obrázek 7: Dokončení instalace Doom Emacsu.

5. Stav po instalaci Doom Emacsu

Po dokončení instalace Doom Emacsu je vhodné se porozhlédnout po tom, jaké adresáře a soubory se objevily v domácím adresáři uživatele (jinam instalátor nezasahuje a ani k tomu nemá práva).

Adresář .emacs.d je interně poměrně rozsáhlý (zejména podadresář modules), ovšem platí, že do jeho obsahu se prakticky nikdy nemusí ručně zasahovat:

$ ls -1 ~/.emacs.d
 
bin
core
docs
early-init.el
init.el
init.example.el
LICENSE
modules
README.md
test

Z pohledu uživatele je mnohem důležitější nový adresář pojmenovaný příznačně .doom.d. Ten obsahuje tři soubory, s jejichž obsahem se už manipuluje, a to jak při instalaci balíčků, tak i při konfiguraci Doom Emacsu:

$ ls -1 ~/.doom.d/
 
config.el
init.el
packages.el
Poznámka: může být užitečné si obsah tohoto adresáře převést na Git repositář a mít tak k dispozici historii všech provedených změn, bude snadné mít sdílenou konfiguraci mezi větším množstvím počítačů atd.. Díky tomu, že obsahuje pouze tři soubory napsané v Emacs Lispu, nebude daný repositář obsahovat žádné „smetí“.

6. První spuštění Doom Emacsu

Při prvním spuštění Doom Emacsu se namísto standardní obrazovky se základními informacemi i prvky grafického uživatelského rozhraní zobrazí okno, které můžete vidět na screenshotu pod tímto odstavcem. Jedná se o speciální dokument s logem a menu, které uživateli (což v tomto případě může být i začátečník) nabízí nejčastěji prováděné operace či zobrazují dokumentaci Doom Emacsu. Nabízí se například otevření agendy využívající slavný Org mode (což byl mimochodem primární důvod pro autora tohoto článku si Doom Emacs vyzkoušet), seznam dříve otevřených souborů, seznam projektů (viz dále), otevření tří konfiguračních souborů Doom Emacsu a pochopitelně i stránka s dokumentací. Toto menu je „živé“ a lze ho (kromě dalších možností) ovládat i kurzorovými šipkami.

Obrázek 8: Doom Emacs po spuštění. Zde je již jasně vidět inspirace slavnou hrou Doom.

Poznámka: mimochodem – u každé položky menu je vpravo zobrazena i příslušná klávesová zkratka. Jedná se o sekvenci po sobě jdoucích kláves (nestlačují se tedy současně), takže SPC o A znamená postupný stisk mezerníku, klávesy o a Shift+A.

Obrázek 9: Doom Emacs po spuštění v terminálu.

Po dalším spuštění se navíc objeví položka menu umožňující obnovit předchozí stav Emacsu – velmi užitečná vlastnost (navíc není ve výchozím stavu povolena, což je taky dobře v případě, že se něco „nepovede“):

Obrázek 10: Doom Emacs po opětovném spuštění.

7. Základy ovládání Doom Emacsu

Nejdůležitější novinkou Doom Emacsu (ale i Spacemacsu) je změněný výchozí způsob ovládání celého prostředí textového editoru/platformy Emacs. Doom Emacs sice uživatelům nabízí ovládání podobné Vimu (tedy modální způsob), ovšem přidává k němu ještě další klávesu – mezerník neboli space. Ten je ve Vimu ve výchozím nastavení použit pro posun kurzoru doprava, tedy pro stejnou operaci, jakou poskytuje klávesa l nebo kurzorová šipka – což je ovšem škoda, obětovat největší klávesu dostupnou z obou ruk na tak nicotnou operaci! V Doom Emacsu se proto mezerníkem, po kterém následuje další klávesa, zobrazí menu s (většinou) mnemotechnickými zkratkami, například w pro operace s okny, f pro operace se soubory, vyvolá se ihned příslušný příkaz atd. Některé z těchto zkratek si popíšeme v navazujících kapitolách. Mnohé zkratky vedou k zobrazení dalšího pod-menu.

Obrázek 11: K dispozici je pochopitelně i nápověda napsaná přímo v Org mode.

Poznámka: ve skutečnosti je přidání tohoto menu velmi dobrým krokem, které může Emacs (a Vim) přiblížit i novým uživatelům, a to právě díky použití mnemotechnických zkratek, které obchází původní mnohdy ad-hoc zkratky používané oběma zmíněnými textovými editory.

8. Základní editační příkazy v režimu Vimu

Poznámka: v této kapitole i v několika navazujících kapitolách se setkáme s jedním problémem – různou terminologií používanou ve Vimu a v Emacsu. Týká se to převážně termínů režim (mode) a stav (status). Ve Vimu se totiž používá termín režim (mode) pro rozlišení mezi zadáváním základních editačních příkazů (normal mode), vkládáním příkazů na příkazovou řádku (command mode), vkládáním nového textu (insert mode) atd. – viz následující obrázek se zobrazením základních režimů Vimu. V Emacsu je však slovo režim/mode použito pro jiné účely (například samotný plugin Evil, na kterém je Doom Emacs částečně postaven, přináší nový evil-mode, blíže viz například Major-Modes), takže se namísto toho pro označení režimu Vi/Vimu používá slovo stav/state (normal state, insert state, …).

Obrázek 12: Režimy Vimu a způsob přechodu mezi nimi s využitím různých klávesových zkratek.

Po otevření bufferu (souboru) určeného pro editaci textový editor Doom Emacs přepne do výchozího – normálního – stavu (normal state), tj. je možné zadávat prakticky všechny editační příkazy, které znáte z Vimu (emulace je v tomto případě provedena na skutečně velmi dobré úrovni). Podporovány jsou samozřejmě i všechny operátory Vimu, dokonce včetně ROT13:

Operátor Význam Stručný popis
c change změna textu (delete a následný přechod do vkládacího režimu)
d delete vymazání textu
y yank kopie textu do registru
! filter filtrace přes externí příkaz
> shift right posun textu doprava o shiftwidth
< shift left posun textu doleva o shiftwidth
g~ swap case změna malých písmen na velké a naopak
gu lowercase změna na malá písmena (mínusky)
gU Uppercase změna na velká písmena (verzálky)
gq format zformátování textu
g? ROT13 rotace ASCII znaků o 13 pozic dopředu (režim modulo)
= indent změna zarovnání textu

Pro přepnutí do stavu vkládání se používají běžné příkazy a, A, i, I, o, O, c, R (stav přepisu) atd. Aktuálně nastavený stav je zobrazen na stavovém řádku každého bufferu (navíc je barevně zvýrazněn). Jedná se o zápis [N], [V], [I], [R] atd. Při zapnutí stavu psaní nového textu se navíc (v závislosti na konfigurace) objeví zpráva „– INSERT –“, podobně jako v samotném Vimu. Totéž platí pro režim vizuálního výběru bloků: „– VISUAL –“.

Klávesová zkratka C-SPC (neboli Ctrl+Space), která v Emacsu slouží pro nastavení značky, dostala poněkud odlišný význam – zapíná režim vizuálního výběru bloku (i když se stále vypisuje hlášení „Mark activated“). Je to vlastně logické, protože typické editační operace v Emacsu probíhají mezi pozicí kurzoru a nastavenou značkou (tzv. region) a ve Vimu pro vizuálně vybraný blok (tj. mezi začátkem bloku a pozicí kurzoru).

9. Práce s okny, přechody mezi okny

Ve Vimu se pro práci s okny (tedy „pohledy“ na editované soubory) používají klávesové zkratky začínající na Ctrl+W. Tato možnost zůstala zachována, ovšem navíc je v Doom Emacsu dostupné i menu pro práci s okny, které se vyvolává mnemotechnickou zkratkou SPC w s následujícími příkazy:

Klávesa Příkaz
n nové okno
s rozdělení aktivního okna horizontálně na dvě samostatná okna
v rozdělení aktivního okna vertikálně na dvě samostatná okna
   
+ vertikální zvětšení aktivního okna
vertikální zmenšení aktivního okna
> horizontální zvětšení aktivního okna
&kt; horizontální zmenšení aktivního okna
= všechna okna budou mít stejnou výšku
_ vertikální maximalizace aktivního okna
   
w přechod do další okno v pořadí
h přechod do okna nalevo
j přechod do okna dole
k přechod do okna nahoře
l přechod do okna napravo
   
H přesun aktivního okna doleva
J přesun aktivního okna dolů
K přesun aktivního okna nahoru
L přesun aktivního okna doprava
   
T z aktivního okna v rámci reálného okna Emacsu se stane skutečně samostatné okno (jakoby byl Emacs spuštěn dvakrát)
Poznámka: mnemotechnická pomůcka – pro přechody na další okno nalevo/napravo/nahoře/dole se po Ctrl+W nebo SPC w používají stejné klávesy, jako pro přesun kurzoru. Podobně pro přesun okna se používají tytéž klávesy, ovšem se Shiftem.

Obrázek 12: Menu pro práci s okny.

Poznámka: pokud nějakou klávesovou zkratku, například SPC w w (tedy přesun na další okno) zapíšete rychle, menu s operacemi se nezobrazí. To je ostatně dobře, protože rychlí a zkušení uživatelé nejsou operací zobrazení menu zdržováni. Jedná se o takřka ideální způsob, jak zajistit ovládání editoru pro začátečníky a současně i pro pokročilé uživatele.

10. Základní operace se soubory

Menu s nabídkou příkazů určených pro provádění operací se soubory se zobrazí po SPC f, tedy po stisku klávesy Space následované klávesou f (pochopitelně od slova file):

Obrázek 13: Zobrazení menu s nabídkou operací nad soubory.

Velmi užitečný je především příkaz SPC f r, který umožňuje vyhledávání v seznamu (resp. přesněji řečeno historii) dříve otevřených souborů:

Obrázek 14: Vyhledávání v historii dříve otevřených souborů.

Poznámka: opět pochopitelně platí, že rychle zapsaná zkratka, například výše zmíněná zkratka SPC f r znamená, že se menu s nabídkou operací pro soubory nezobrazí a příkaz se ihned provede.

11. Doom Emacs a slavný Org-mode

V tomto článku se nemůžeme alespoň ve stručnosti nezmínit o slavném Org-mode, už jen z toho důvodu, že samotná existence org-mode je dokonce pro mnohé (autora tohoto článku nevyjímaje :-) tou hlavní motivací pro použití Doom Emacsu (a zdaleka se nejedná pouze o programátory). S využitím org-mode je totiž možné pracovat se strukturovanými dokumenty obsahujícími osnovy, poznámky, tabulky, ale i další typy objektů, například i s grafy atd. – a to vše přímo z prostředí textového editoru a se zachováním významu všech editačních příkazů, možnosti ukládání do Gitu (historie, rozdíly) atd. Pro Vim sice existuje podobně koncipovaný projekt nazvaný vim-orgmode, ovšem ten prozatím kvality ani počtu funkcí původního org-mode nedosahuje (a je otázkou, do jaké míry lze Vim „ohnout“ tak, aby bylo shody dosaženo).

Obrázek 15: Pro ukázku využití Org-mode nemusíme chodit daleko, protože i dokumentace k Doom Emacsu je v něm napsaná.

Poznámka: instalace Org-mode není nutná, protože je automaticky nainstalován společně se samotným Doom Emacsem, což ostatně velmi dobře koresponduje s tím, pro jaké uživatele je Doom Emacs určen.

12. Vedení agendy

Na úvodní stránce Doom Emacsu se kromě dalších příkazů nabízí i příkaz určený pro zobrazení takzvané agendy:

Obrázek 16: Menu s příkazy pro zobrazení agendy, tedy agregovaného pohledu na org.soubory.

Jedná se o „pohled“, resp. přesněji řečeno o agregované informace získané ze souborů s koncovkou .org, které jsou uloženy v podadresáři org/ v domácím adresáři (tuto důležitou informaci by bylo vhodné zdůraznit v jinak velmi pěkné dokumentaci Doom Emacsu – jinak totiž příkaz pro zobrazení agendy může vypadat nefunkčně). Soubory v tomto podadresáři mohou obsahovat řádky se značkami TODO (apod.), popřípadě přímo řádky, které jsou naplánovány na určitý čas, a to konkrétně s využitím klávesové zkratky SPC m d s (dříve jen SPC m s – i Doom Emacs se postupně vyvíjí):

Obrázek 17: Prázdná agenda.

Po naplánování nějakého úkolu bude agregovaná agenda vypadat takto:

Obrázek 18: Zobrazení naplánovaného úkolu na určitý čas.

Soubory, z nichž se agenda vytváří, mohou obsahovat prakticky libovolné strukturované údaje odpovídající, popř. rozeznatelné funkcemi org mode. S těmito údaji lze provádět běžné operace, například změnit řádek na nadpis klávesovou zkratkou SPC m h, změnit řádek za položku nečíslovaného seznamu klávesovou zkratkou SPC m i apod.

Poznámka: obecně platí, že ovládání org mode se provádí klávesovou zkratkou začínající na SPC o, zatímco pro konkrétní úpravy jednotlivých souborů se používají klávesové zkratky začínající na SPC m – všechny dostupné příkazy jsou pochopitelně vypsány v nápovědě.

Elegantním způsobem je vyřešena práce s jednotlivými podstromy, tedy s řádky, které jsou umístěny pod nějakým nadpisem. Vše je založeno na základních příkazech pro pohyb kurzoru po dokumentu ve Vimu, což jsou klávesové zkratky h, j, k a l. Pro pohyb po nadpisech stejné úrovně potom slouží klávesové zkratky gj a gk (což vypadá logicky). Pro posun celých podstromů potom slouží klávesové zkratky Alt+j a Alt+k, což je opět logicky navázáno na původní klávesové zkratky pro pohyb kurzoru o řádek níže a výše. A konečně úroveň nadpisů se mění zkratkami Alt+h a Alt+l, což je opět logické – tyto příkazy jsou odvozeny od pohybu kurzoru doleva a doprava.

Poznámka: namísto Alt se v dokumentaci Emacsu používá M- nebo Meta, což je však pro nové uživatele matoucí. Naráží zde na sebe dva principy – snaha o konzistenci dokumentace napříč všemi platformami (včetně těch historických) a snaha o konzistenci označování kláves na prakticky jediné přeživší platformě – PC (dokonce i mnohé Apple klávesnice už mají přelepku s Alt).

Následující tabulka pomůže těm uživatelům, kteří používají původní režim editace Emacsu:

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ě

13. Folding

Základním příkazem dovolujícím orientaci v delších dokumentech je příkaz Tab, který dokáže skrýt či naopak ukázat text pod nadpisem (ve Vimu se jedná o takzvaný folding). Ovšem pro folding lze použít i původní klávesové zkratky Vimu, tedy zc pro uzavření současného podstromu, zo pro otevření současného podstromu, zM pro uzavření všech podstromů a konečně zR pro otevření všech podstromů.

Folding pochopitelně funguje i při editacích zdrojových souborů – zde je možné skrývat implementační detaily jednotlivých funkcí a metod.

14. Nástroj doom

Při některých úpravách a konfiguracích Doom Emacsu je nutné použít nástroj doom dostupný z příkazového řádku. Tento nástroj, resp. přesněji řečeno spustitelný soubor, je uložen v adresáři ~/.emacs.d/bin (který si můžete přidat na PATH):

$ ~/.emacs.d/bin/doom
 
Options:
  -h, --help
    Same as help command
  -y, --yes
    Auto-accept all confirmation prompts
  -d, --debug
    Enables on verbose output
  --doomdir DIR
    Use the private module at DIR (e.g. ~/.doom.d)
  --localdir DIR
    Use DIR as your local storage directory
  -C, --nocolor
    Disable colored output
 
Commands:
  help             Describe a command or list them all.
  install          Installs and sets up Doom Emacs for the first time.
  sync             Synchronize your config with Doom Emacs.
  env              Creates or regenerates your envvars file.
  upgrade          Updates Doom and packages.
  build            Byte-compiles & symlinks installed packages.
  purge            Deletes orphaned packages & repos, and compacts them.
  ci               TODO
 
  Diagnostics:     For troubleshooting and diagnostics
    doctor           Diagnoses common issues on your system.
    info             Output system info in markdown for bug reports.
    version          Show version information for Doom & Emacs.
 
  Compilation:     For compiling Doom and your config
    compile          Byte-compiles your config or selected modules.
    clean            Delete all *.elc files.
 
  Utilities:       Conveniences for interacting with Doom externally
    run              Run Doom Emacs from bin/doom's parent directory.

Velmi užitečný je zejména příkaz doom doctor, který zjistí, zda je instalace Emacsu i dalších podpůrných nástrojů provedena korektně a dokáže tak otestovat, zda nějaký problém tkví přímo v Doom Emacsu, samotném Emacsu, či zda „pouze“ chybí nějaký systémový nástroj:

$ ~/.emacs.d/bin/doom doctor
 
> Executing 'doom doctor' with Emacs 27.2 at 2021-08-29 09:21:25
  The doctor will see you now...
 
  > Checking your Emacs version...
  > Checking for Doom's prerequisites...
    x Couldn't find the `rg' binary; this a hard dependecy for Doom, file searches may not work at all
  > Checking for Emacs config conflicts...
  > Checking for great Emacs features...
  > Checking for private config conflicts...
  > Checking for stale elc files...
  > Checking for problematic git global settings...
  > Checking Doom Emacs...
    ✓ Initialized Doom Emacs 3.0.0-alpha
    ✓ Detected 29 modules
    ✓ Detected 116 packages
    > Checking Doom core for irregularities...
      ! Couldn't find the `fd' binary; project file searches will be slightly slower
      Found font material-design-icons.ttf
      Found font weathericons.ttf
      Found font octicons.ttf
      Found font fontawesome.ttf
      Found font file-icons.ttf
      Found font all-the-icons.ttf
    > Checking for stale elc files in your DOOMDIR...
    > Checking your enabled modules...
      > :lang markdown
          ! Couldn't find a markdown compiler, `markdown-preview' won't work
      > :lang sh
          ! Couldn't find shellcheck. Shell script linting will not work
  There are 1 errors!
  There are 3 warnings!
  ✓ Finished in 1.9840s
Poznámka: povšimněte si, že na mém systému nainstalovaném podle návodu, některé systémové utility chybí a je možné (resp. přesněji řečeno vhodné) je doinstalovat.

Na okraj zajímavá technologická perlička – nástroj doom je tvořen skriptem, který je napsán ve dvou programovacích jazycích. První část je určena pro spuštění (interpretaci) v shellu, druhá část v Emacs Lispu. Zajímavý (a přiznám se, že pro mě dříve neznámý) způsob je použit pro „zapoznámkování“ příkazů shellu tak, aby je Emacs Lisp ignoroval a současně aby se jednalo o skutečný příkaz shellu (resp. dva příkazy, z nichž první nic nedělá). Opačně to není problém, protože po několika řádcích je shell ukončen, takže zbytek souboru ignoruje:

#!/usr/bin/env sh
:; set -e # -*- mode: emacs-lisp; lexical-binding: t -*-
:; case "$EMACS" in *term*) EMACS=emacs ;; *) EMACS="${EMACS:-emacs}" ;; esac
:; $EMACS --version >/dev/null 2>&1 || { >&2 echo "Can't find emacs in your PATH"; exit 1; }
:; $EMACS --no-site-file --script "$0" -- "$@" || __DOOMCODE=$?
:; [ "${__DOOMCODE:-0}" -eq 128 ] && { sh "`$EMACS -Q --batch --eval '(princ temporary-file-directory)'`/doom.sh" "$0" "$@" && true; __DOOMCODE=$?; }
:; exit $__DOOMCODE
 
;; The garbage collector isn't as important during CLI ops. A higher threshold
;; makes it 15-30% faster, but set it too high and we risk runaway memory usage
;; in longer sessions.
(setq gc-cons-threshold 134217728)   ; 128mb
 
;; Prioritize non-byte-compiled source files in non-interactive sessions to
;; prevent loading stale byte-code.
(setq load-prefer-newer t)
Poznámka: část určená pro interpretaci shellem je zobrazena tučně.

15. Konfigurační soubory Doom Emacsu

Při konfiguraci Doom Emacsu, popř. při instalaci, povolování či naopak zakazování pluginů, se pracuje pouze se třemi konfiguračními soubory, které je užitečné, jak již víme, přidat do nějakého systému pro správu verzí, například do Gitu. Tato trojice souborů je uložena do podadresáře ~/.doom.d:

$ ls -l .doom.d/
 
total 20
-rw-r--r--. 1 tester tester 2327 Aug 27 10:22 config.el
-rw-r--r--. 1 tester tester 9355 Aug 27 18:06 init.el
-rw-r--r--. 1 tester tester 2114 Aug 27 10:22 packages.el

Nejprve se podívejme na soubor init.el. Ten obsahuje (ve formě doom!) seznam modulů, které jsou povoleny, popř. naopak zakomentované moduly, které povolit z nějakého důvodu nechceme. Pozor je zapotřebí si dát pozor i na to, že pořadí modulů v tomto souboru určuje i pořadí jejich skutečného načítání do Emacsu – někdy se totiž mohou moduly navzájem ovlivňovat. Povšimněte si, že moduly jsou sdruženy do skupin – uživatelské rozhraní, chování editoru, další nástroje atd.:

Obrázek 19: Konfigurační soubor init.el.

V souboru config.el je uvedena skutečná konfigurace, která ovlivňuje jak chování samotného Doom Emacsu, tak i například org.mode atd. Nalezneme zde i konfiguraci barevného designu Emacsu, použitých fontů atd.

Obrázek 20: Doom Emacs nakonfigurovaný tak, že zobrazuje standardní menu i nástrojový pruh (toolbar).

Poslední konfigurační soubor packages.el slouží zejména pro správu balíčků (což již ostatně naznačuje jeho název). Jeho použití si ukážeme v navazujících dvou kapitolách.

16. Instalace nových balíčků

Instalace nových balíčků se v Doom Emacsu liší od klasického Emacsu, popř. i od Spacemacsu. Namísto standardních postupů založených na příkazech install-package se jméno požadovaného balíčku přidá do souboru packages.el a následně se instalace provede příkazem doom sync. Navíc je možné doom sync v případě potřeby vrátit nebo spustit doom doctor pro zjištění, zda v průběhu instalace nedošlo k nějaké chybě. Způsob instalace nového modulu bude ukázán v navazující kapitole.

Obrázek 21: Povolení či zákaz balíčku.

17. Příklad instalace nového balíčku

Instalace nového balíčku je snadná, pokud ovšem znáte jméno tohoto balíčku. Pro ilustraci si ukažme instalaci balíčku nazvaného evil-tutor, který obsahuje návod k používání režimu evil, tedy emulace Vimu v Emacsu.

Do souboru packages.el přidejte tento řádek:

(package! evil-tutor)

Následně se mimo Emacs spustí příkaz doom sync:

$ ~/.emacs.d/bin/doom sync
 
> Executing 'doom sync' with Emacs 27.2 at 2021-08-30 17:29:06
  > Synchronizing your config with Doom Emacs...
    > Regenerating envvars file at "~/.emacs.d/.local/env"
      ✓ Successfully generated "~/.emacs.d/.local/env"
    > Installing packages...
      - Checked out project: 4072f35d85bf0a1c669329d66633e4819f497c1c
      > Building project...
      > Updating recipe repos...
        ✓ melpa updated (b692054 -> 6cc5983)
 
 
 
      > Cloning evil-tutor...
      > Building evil-tutor...
      ✓ Installed 15 packages
    > (Re)building packages...
      - No packages need rebuilding
    > Purging orphaned packages (for the emperor)...
      - No builds to purge
      - Skipping elpa packages
      - Skipping repos
      - Skipping regrafting
    > (Re)generating autoloads file...
      > Generating autoloads file...
      > Byte-compiling autoloads file...
      ✓ Generated .local/autoloads.27.2.elc
    - Restart Emacs or use 'M-x doom/reload' for changes to take effect
  ✓ Finished in 24.4805s
Poznámka: povšimněte si, že se skutečně provedla instalace požadovaného balíčku (kromě dalších operací).

Seznam balíčků získáte příkazem Alt-x list-packages.

Obrázek 22: Spuštění právě nainstalovaného balíčku.

Obrázek 23: Spuštění právě nainstalovaného balíčku.

18. Změna stylu zobrazení Doom Emacsu

Na závěr se ještě podívejme na způsob změny stylu zobrazení Doom Emacsu. K dispozici je poměrně velké množství barevných témat, která lze najít na stránce https://awesomeopensource­.com/project/hlissner/emacs-doom-themes. Změníme výchozí téma na doom-dracula (poměrně populární). V souboru config.el provedeme změnu na řádku:

(setq doom-theme 'doom-dracula)

Po restartu Doom Emacsu by se mělo barevné schéma (pokud existuje) použít:

MIf Dolejsova

Obrázek 24: Změna vzhledu Doom Emacsu.

Poznámka: ke všeobecné spokojenosti si ještě na pozadí pusťte hudbu z Dooma.

19. Předchozí články o Emacsu

Textovým editorem Emacs jsme se již na stránkách Rootu několikrát zabývali, a to jak v samostatných článcích, tak i ve dvojici seriálů. Popsali jsme si zejména čtyři potenciálně zajímavé oblasti – režim Evil (jehož význam je možná patrný i z výše uvedeného textu), slavný režim Org, použití LSP (language server protokolu) a taktéž jsme si popsali všechny důležité vlastnosti Emacs LISPu. Prozatím poslední dva články, pochopitelně kromě článku dnešního, byly věnovány Spacemacsu:

  1. Evil: kombinace editačních příkazů Vimu a síly Emacsu
    https://www.root.cz/clanky/evil-kombinace-editacnich-prikazu-vimu-a-sily-emacsu/
  2. Úpravy Emacsu a tvorba nových modulů s využitím Emacs Lispu
    https://www.root.cz/clanky/upravy-emacsu-a-tvorba-novych-modulu-s-vyuzitim-emacs-lispu/
  3. Úpravy Emacsu a tvorba nových modulů s využitím Emacs Lispu (2)
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-zakladni-konstrukce-jazyka/
  4. Úpravy Emacsu s Emacs Lisp: všemocné makro cl-loop a knihovna dash
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-vsemocne-makro-cl-loop-a-knihovna-dash/
  5. Úpravy Emacsu s Emacs Lisp: možnosti nabízené knihovnou Dash
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-moznosti-nabizene-knihovnou-dash/
  6. Úpravy Emacsu s Emacs Lisp: dokončení popisu Emacs Lispu
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-dokonceni-popisu-emacs-lispu/
  7. Úpravy Emacsu s Emacs Lisp: základní interní datové struktury Emacsu
    https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-manipulace-se-zakladnimi-datovymi-strukturami-emacsu/
  8. Základy použití režimu org-mode v Emacsu
    https://www.root.cz/clanky/zaklady-pouziti-rezimu-org-mode-v-emacsu/
  9. Pokročilejší možnosti nabízené režimem org-mode v Emacsu
    https://www.root.cz/clanky/po­krocilejsi-moznosti-nabizene-rezimem-org-mode-v-emacsu/
  10. Spacemacs: to nejlepší z editorů Emacs a Vim
    https://www.root.cz/clanky/spacemacs-to-nejlepsi-z-editoru-emacs-a-vim/
  11. Spacemacs: práce s projekty psanými v Pythonu a režim Org
    https://www.root.cz/clanky/spacemacs-prace-s-projekty-psanymi-v-pythonu-a-rezim-org/

20. Odkazy na Internetu

  1. Doom Emacs: An Emacs For Vim Users
    https://www.inmotionhostin­g.com/blog/doom-emacs-for-vim-users/
  2. Doom Emacs na GitHubu
    https://github.com/hlissner/doom-emacs
  3. Getting Started Guide
    https://github.com/hlissner/doom-emacs/blob/develop/docs/get­ting_started.org
  4. Why I use Doom Emacs
    https://daviskirkendall.com/2021/08/05/why-i-use-doom-emacs/
  5. My Doom Emacs Configuration
    https://www.soitflows.xyz/posts/my-doom-emacs-configuration/
  6. Doom Emacs – Getting Started
    https://www.youtube.com/wat­ch?v=dr_iBj91eeI
  7. Doom Emacs For Noobs
    https://www.youtube.com/wat­ch?v=iab2z21cRqA
  8. Emacs Doom Themes
    https://awesomeopensource­.com/project/hlissner/emacs-doom-themes
  9. The Ultimate Doom Emacs Cheatsheet
    https://naghdbishi.ir/Doom-Emacs-Cheat-Sheet/README.html
  10. 10+ tips using org-mode in Doom Emacs | Why I Think Doom Emacs is the Best Writing Software
    https://www.youtube.com/wat­ch?v=WyQ4zEo8_Ig
  11. Org Mode Basics In Doom Emacs
    https://www.youtube.com/wat­ch?v=34zODp_lhqg
  12. An Introduction to Spacemacs
    https://spin.atomicobject­.com/2016/08/30/introducti­on-to-spacemacs/
  13. Beginners tutorial (Spacemacs)
    https://github.com/syl20bnr/spa­cemacs/blob/master/doc/BE­GINNERS_TUTORIAL.org
  14. Spacemacs For Noobs (video)
    https://www.youtube.com/wat­ch?v=VBYsa3Kpkz8
  15. Generating Gantt Charts with Org-mode
    https://irreal.org/blog/?p=8447
  16. Creating Gantt charts by Exporting to TaskJuggler
    https://orgmode.org/worg/org-tutorials/org-taskjuggler.html
  17. Langserver.org
    https://langserver.org/
  18. Language Server Protocol
    https://microsoft.github.io/language-server-protocol/
  19. Language Server Protocol Specification
    https://microsoft.github.io/language-server-protocol/specification
  20. Implementations Language Servers
    https://microsoft.github.io/language-server-protocol/implementors/servers
  21. JSON-RPC 2.0 Specification
    https://www.jsonrpc.org/specification
  22. Why You Should Know the Language Server Protocol
    https://tomassetti.me/what-is-the-language-server-protocol/
  23. Language Server Protocol: A Language Server For DOT With Visual Studio Code
    https://tomassetti.me/language-server-dot-visual-studio/
  24. Python Language Server
    https://github.com/palantir/python-language-server
  25. Jedi – an awesome autocompletion/static analysis library for Python
    https://github.com/davidhalter/jedi
  26. What is lsp
    https://www.reddit.com/r/vim/com­ments/7lnhrt/which_lsp_plu­gin_should_i_use/
  27. Vim-lsp
    https://github.com/prabirshrestha/vim-lsp
  28. Using LSP & clangd in Vim
    https://jonasdevlieghere.com/vim-lsp-clangd/
  29. Org tutorial
    https://gist.github.com/sa­fijari/d9b1ed8a3f4cd10e632e0­4353c6abdfe
  30. Org layer
    https://www.spacemacs.org/la­yers/+emacs/org/README.html
  31. Spacemacs, Emacs, and Org-mode tips
    https://ontologicalblog.com/spacemacs-emacs-and-org-mode-tips/
  32. Python Development in Spacemacs (video)
    https://www.youtube.com/watch?v=r-BHx7VNX5s
  33. Použití Language Server Protocolu v textovém editoru Vim
    https://www.root.cz/clanky/pouziti-language-server-protocolu-v-textovem-editoru-vim/
  34. Microsoft Python Language Server
    https://github.com/Microsoft/python-language-server
  35. Language Server Protocol Support for Emacs
    https://emacs-lsp.github.io/lsp-mode/
  36. isort
    https://pycqa.github.io/isort/
  37. Python with Emacs: py(v)env and lsp-mode
    https://ddavis.io/posts/emacs-python-lsp/
  38. Evil (Emacs Wiki)
    https://www.emacswiki.org/emacs/Evil
  39. Evil (na GitHubu)
    https://github.com/emacs-evil/evil
  40. Evil (na stránkách repositáře MELPA)
    https://melpa.org/#/evil
  41. 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
  42. GNU Emacs (home page)
    https://www.gnu.org/software/emacs/
  43. GNU Emacs (texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?GnuEmacs
  44. An Introduction To Using GDB Under Emacs
    http://tedlab.mit.edu/~dr/gdbin­tro.html
  45. An Introduction to Programming in Emacs Lisp
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­intr/index.html
  46. 27.6 Running Debuggers Under Emacs
    https://www.gnu.org/softwa­re/emacs/manual/html_node/e­macs/Debuggers.html
  47. GdbMode
    http://www.emacswiki.org/e­macs/GdbMode
  48. Emacs (Wikipedia)
    https://en.wikipedia.org/wiki/Emacs
  49. Emacs timeline
    http://www.jwz.org/doc/emacs-timeline.html
  50. Emacs Text Editors Family
    http://texteditors.org/cgi-bin/wiki.pl?EmacsFamily
  51. Vrapper aneb spojení možností Vimu a Eclipse
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/
  52. 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/
  53. Emacs/Evil-mode – A basic reference to using evil mode in Emacs
    http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet
  54. From Vim to Emacs+Evil chaotic migration guide
    https://juanjoalvarez.net/es/de­tail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/
  55. Introduction to evil-mode {video)
    https://www.youtube.com/wat­ch?v=PeVQwYUxYEg
  56. EINE (Emacs Wiki)
    http://www.emacswiki.org/emacs/EINE
  57. EINE (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?EINE
  58. ZWEI (Emacs Wiki)
    http://www.emacswiki.org/emacs/ZWEI
  59. ZWEI (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?ZWEI
  60. Zmacs (Wikipedia)
    https://en.wikipedia.org/wiki/Zmacs
  61. Zmacs (Texteditors.org)
    http://texteditors.org/cgi-bin/wiki.pl?Zmacs
  62. TecoEmacs (Emacs Wiki)
    http://www.emacswiki.org/e­macs/TecoEmacs
  63. Micro Emacs
    http://www.emacswiki.org/e­macs/MicroEmacs
  64. Micro Emacs (Wikipedia)
    https://en.wikipedia.org/wi­ki/MicroEMACS
  65. EmacsHistory
    http://www.emacswiki.org/e­macs/EmacsHistory
  66. Seznam editorů s ovládáním podobným Emacsu či kompatibilních s příkazy Emacsu
    http://www.finseth.com/emacs.html
  67. evil-numbers
    https://github.com/cofi/evil-numbers
  68. Debuggery a jejich nadstavby v Linuxu (1.část)
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu/
  69. Debuggery a jejich nadstavby v Linuxu (2.část)
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-2-cast/
  70. Debuggery a jejich nadstavby v Linuxu (3): Nemiver
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-3-nemiver/
  71. Debuggery a jejich nadstavby v Linuxu (4): KDbg
    http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-4-kdbg/
  72. Debuggery a jejich nadstavby v Linuxu (5): ladění aplikací v editorech Emacs a Vim
    https://mojefedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-5-ladeni-aplikaci-v-editorech-emacs-a-vim/
  73. How to configure org-mode in spacemacs
    https://stackoverflow.com/qu­estions/51125978/how-to-configure-org-mode-in-spacemacs
  74. Org mode
    https://orgmode.org/
  75. The Org Manual
    https://orgmode.org/manual/index.html
  76. Org-Mode Reference Card
    https://orgmode.org/orgcard.pdf
  77. Org-mode Tutorial 1 – Introduction and basics
    https://www.youtube.com/wat­ch?v=vCyBu8Az254
  78. Getting Started With Org Mode
    https://www.youtube.com/wat­ch?v=SzA2YODtgK4
  79. Org as a spreadsheet system: a short introduction
    https://orgmode.org/worg/org-tutorials/org-spreadsheet-intro.html
  80. Kakoune (modální textový editor)
    http://kakoune.org/
  81. Vim-style keybinding in Emacs/Evil-mode
    https://gist.github.com/tro­yp/6b4c9e1c8670200c04c16036805773d8
  82. Emacs – jak začít
    http://www.abclinuxu.cz/clan­ky/navody/emacs-jak-zacit
  83. Programovací jazyk LISP a LISP machines
    https://www.root.cz/clanky/pro­gramovaci-jazyk-lisp-a-lisp-machines/
  84. Evil-surround
    https://github.com/emacs-evil/evil-surround
  85. Spacemacs
    http://spacemacs.org/
  86. Lisp: Common Lisp, Racket, Clojure, Emacs Lisp
    http://hyperpolyglot.org/lisp
  87. Common Lisp, Scheme, Clojure, And Elisp Compared
    http://irreal.org/blog/?p=725
  88. Does Elisp Suck?
    http://irreal.org/blog/?p=675
  89. Emacs pro mírně pokročilé (9): Elisp
    https://www.root.cz/clanky/emacs-elisp/
  90. If I want to learn lisp, are emacs and elisp a good choice?
    https://www.reddit.com/r/e­macs/comments/2m141y/if_i_wan­t_to_learn_lisp_are_emacs_an­d_elisp_a/
  91. Clojure(Script) Interactive Development Environment that Rocks!
    https://github.com/clojure-emacs/cider
  92. An Introduction to Emacs Lisp
    https://harryrschwartz.com/2014/04/08/an-introduction-to-emacs-lisp.html
  93. Emergency Elisp
    http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html
  94. Racket
    https://racket-lang.org/
  95. The Racket Manifesto
    http://felleisen.org/matthi­as/manifesto/
  96. MIT replaces Scheme with Python
    https://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/
  97. Adventures in Advanced Symbolic Programming
    http://groups.csail.mit.e­du/mac/users/gjs/6.945/
  98. Why MIT Switched from Scheme to Python (2009)
    https://news.ycombinator.com/i­tem?id=14167453
  99. Starodávná stránka XLispu
    http://www.xlisp.org/

Autor článku

Pavel Tišnovský vystudoval VUT FIT a v současné době pracuje ve společnosti Red Hat, kde vyvíjí nástroje pro OpenShift.io.