Obsah
1. Doom Emacs – elegantní a snadno použitelné uživatelské rozhraní Emacsu
2. Emacs jako platforma, nikoli pouze textový editor
5. Stav po instalaci 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
15. Konfigurační soubory Doom Emacsu
17. Příklad instalace nového balíčku
18. Změna stylu zobrazení Doom Emacsu
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ě).
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.
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
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!
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
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
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.
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.
8. Základní editační příkazy v režimu Vimu
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) |
Obrázek 12: Menu pro práci s okny.
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ů.
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á.
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.
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.
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
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)
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
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:
Obrázek 24: Změna vzhledu Doom Emacsu.
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:
- 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/ - Ú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/ - Ú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/ - Ú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/ - Ú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/ - Úpravy Emacsu s Emacs Lisp: dokončení popisu Emacs Lispu
https://www.root.cz/clanky/upravy-emacsu-s-emacs-lisp-dokonceni-popisu-emacs-lispu/ - Ú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/ - Základy použití režimu org-mode v Emacsu
https://www.root.cz/clanky/zaklady-pouziti-rezimu-org-mode-v-emacsu/ - Pokročilejší možnosti nabízené režimem org-mode v Emacsu
https://www.root.cz/clanky/pokrocilejsi-moznosti-nabizene-rezimem-org-mode-v-emacsu/ - Spacemacs: to nejlepší z editorů Emacs a Vim
https://www.root.cz/clanky/spacemacs-to-nejlepsi-z-editoru-emacs-a-vim/ - 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
- Doom Emacs: An Emacs For Vim Users
https://www.inmotionhosting.com/blog/doom-emacs-for-vim-users/ - Doom Emacs na GitHubu
https://github.com/hlissner/doom-emacs - Getting Started Guide
https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org - Why I use Doom Emacs
https://daviskirkendall.com/2021/08/05/why-i-use-doom-emacs/ - My Doom Emacs Configuration
https://www.soitflows.xyz/posts/my-doom-emacs-configuration/ - Doom Emacs – Getting Started
https://www.youtube.com/watch?v=dr_iBj91eeI - Doom Emacs For Noobs
https://www.youtube.com/watch?v=iab2z21cRqA - Emacs Doom Themes
https://awesomeopensource.com/project/hlissner/emacs-doom-themes - The Ultimate Doom Emacs Cheatsheet
https://naghdbishi.ir/Doom-Emacs-Cheat-Sheet/README.html - 10+ tips using org-mode in Doom Emacs | Why I Think Doom Emacs is the Best Writing Software
https://www.youtube.com/watch?v=WyQ4zEo8_Ig - Org Mode Basics In Doom Emacs
https://www.youtube.com/watch?v=34zODp_lhqg - An Introduction to Spacemacs
https://spin.atomicobject.com/2016/08/30/introduction-to-spacemacs/ - Beginners tutorial (Spacemacs)
https://github.com/syl20bnr/spacemacs/blob/master/doc/BEGINNERS_TUTORIAL.org - Spacemacs For Noobs (video)
https://www.youtube.com/watch?v=VBYsa3Kpkz8 - Generating Gantt Charts with Org-mode
https://irreal.org/blog/?p=8447 - Creating Gantt charts by Exporting to TaskJuggler
https://orgmode.org/worg/org-tutorials/org-taskjuggler.html - Langserver.org
https://langserver.org/ - Language Server Protocol
https://microsoft.github.io/language-server-protocol/ - Language Server Protocol Specification
https://microsoft.github.io/language-server-protocol/specification - Implementations Language Servers
https://microsoft.github.io/language-server-protocol/implementors/servers - JSON-RPC 2.0 Specification
https://www.jsonrpc.org/specification - Why You Should Know the Language Server Protocol
https://tomassetti.me/what-is-the-language-server-protocol/ - Language Server Protocol: A Language Server For DOT With Visual Studio Code
https://tomassetti.me/language-server-dot-visual-studio/ - Python Language Server
https://github.com/palantir/python-language-server - Jedi – an awesome autocompletion/static analysis library for Python
https://github.com/davidhalter/jedi - What is lsp
https://www.reddit.com/r/vim/comments/7lnhrt/which_lsp_plugin_should_i_use/ - Vim-lsp
https://github.com/prabirshrestha/vim-lsp - Using LSP & clangd in Vim
https://jonasdevlieghere.com/vim-lsp-clangd/ - Org tutorial
https://gist.github.com/safijari/d9b1ed8a3f4cd10e632e04353c6abdfe - Org layer
https://www.spacemacs.org/layers/+emacs/org/README.html - Spacemacs, Emacs, and Org-mode tips
https://ontologicalblog.com/spacemacs-emacs-and-org-mode-tips/ - Python Development in Spacemacs (video)
https://www.youtube.com/watch?v=r-BHx7VNX5s - Použití Language Server Protocolu v textovém editoru Vim
https://www.root.cz/clanky/pouziti-language-server-protocolu-v-textovem-editoru-vim/ - Microsoft Python Language Server
https://github.com/Microsoft/python-language-server - Language Server Protocol Support for Emacs
https://emacs-lsp.github.io/lsp-mode/ - isort
https://pycqa.github.io/isort/ - Python with Emacs: py(v)env and lsp-mode
https://ddavis.io/posts/emacs-python-lsp/ - Evil (Emacs Wiki)
https://www.emacswiki.org/emacs/Evil - Evil (na GitHubu)
https://github.com/emacs-evil/evil - Evil (na stránkách repositáře MELPA)
https://melpa.org/#/evil - Evil Mode: How I Switched From VIM to Emacs
https://blog.jakuba.net/2014/06/23/evil-mode-how-to-switch-from-vim-to-emacs.html - GNU Emacs (home page)
https://www.gnu.org/software/emacs/ - GNU Emacs (texteditors.org)
http://texteditors.org/cgi-bin/wiki.pl?GnuEmacs - An Introduction To Using GDB Under Emacs
http://tedlab.mit.edu/~dr/gdbintro.html - An Introduction to Programming in Emacs Lisp
https://www.gnu.org/software/emacs/manual/html_node/eintr/index.html - 27.6 Running Debuggers Under Emacs
https://www.gnu.org/software/emacs/manual/html_node/emacs/Debuggers.html - GdbMode
http://www.emacswiki.org/emacs/GdbMode - Emacs (Wikipedia)
https://en.wikipedia.org/wiki/Emacs - Emacs timeline
http://www.jwz.org/doc/emacs-timeline.html - Emacs Text Editors Family
http://texteditors.org/cgi-bin/wiki.pl?EmacsFamily - Vrapper aneb spojení možností Vimu a Eclipse
https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/ - 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/ - Emacs/Evil-mode – A basic reference to using evil mode in Emacs
http://www.aakarshnair.com/posts/emacs-evil-mode-cheatsheet - From Vim to Emacs+Evil chaotic migration guide
https://juanjoalvarez.net/es/detail/2014/sep/19/vim-emacsevil-chaotic-migration-guide/ - Introduction to evil-mode {video)
https://www.youtube.com/watch?v=PeVQwYUxYEg - EINE (Emacs Wiki)
http://www.emacswiki.org/emacs/EINE - EINE (Texteditors.org)
http://texteditors.org/cgi-bin/wiki.pl?EINE - ZWEI (Emacs Wiki)
http://www.emacswiki.org/emacs/ZWEI - ZWEI (Texteditors.org)
http://texteditors.org/cgi-bin/wiki.pl?ZWEI - Zmacs (Wikipedia)
https://en.wikipedia.org/wiki/Zmacs - Zmacs (Texteditors.org)
http://texteditors.org/cgi-bin/wiki.pl?Zmacs - TecoEmacs (Emacs Wiki)
http://www.emacswiki.org/emacs/TecoEmacs - Micro Emacs
http://www.emacswiki.org/emacs/MicroEmacs - Micro Emacs (Wikipedia)
https://en.wikipedia.org/wiki/MicroEMACS - EmacsHistory
http://www.emacswiki.org/emacs/EmacsHistory - Seznam editorů s ovládáním podobným Emacsu či kompatibilních s příkazy Emacsu
http://www.finseth.com/emacs.html - evil-numbers
https://github.com/cofi/evil-numbers - Debuggery a jejich nadstavby v Linuxu (1.část)
http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu/ - Debuggery a jejich nadstavby v Linuxu (2.část)
http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-2-cast/ - Debuggery a jejich nadstavby v Linuxu (3): Nemiver
http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-3-nemiver/ - Debuggery a jejich nadstavby v Linuxu (4): KDbg
http://fedora.cz/debuggery-a-jejich-nadstavby-v-linuxu-4-kdbg/ - 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/ - How to configure org-mode in spacemacs
https://stackoverflow.com/questions/51125978/how-to-configure-org-mode-in-spacemacs - Org mode
https://orgmode.org/ - The Org Manual
https://orgmode.org/manual/index.html - Org-Mode Reference Card
https://orgmode.org/orgcard.pdf - Org-mode Tutorial 1 – Introduction and basics
https://www.youtube.com/watch?v=vCyBu8Az254 - Getting Started With Org Mode
https://www.youtube.com/watch?v=SzA2YODtgK4 - Org as a spreadsheet system: a short introduction
https://orgmode.org/worg/org-tutorials/org-spreadsheet-intro.html - Kakoune (modální textový editor)
http://kakoune.org/ - Vim-style keybinding in Emacs/Evil-mode
https://gist.github.com/troyp/6b4c9e1c8670200c04c16036805773d8 - Emacs – jak začít
http://www.abclinuxu.cz/clanky/navody/emacs-jak-zacit - Programovací jazyk LISP a LISP machines
https://www.root.cz/clanky/programovaci-jazyk-lisp-a-lisp-machines/ - Evil-surround
https://github.com/emacs-evil/evil-surround - Spacemacs
http://spacemacs.org/ - Lisp: Common Lisp, Racket, Clojure, Emacs Lisp
http://hyperpolyglot.org/lisp - Common Lisp, Scheme, Clojure, And Elisp Compared
http://irreal.org/blog/?p=725 - Does Elisp Suck?
http://irreal.org/blog/?p=675 - Emacs pro mírně pokročilé (9): Elisp
https://www.root.cz/clanky/emacs-elisp/ - If I want to learn lisp, are emacs and elisp a good choice?
https://www.reddit.com/r/emacs/comments/2m141y/if_i_want_to_learn_lisp_are_emacs_and_elisp_a/ - Clojure(Script) Interactive Development Environment that Rocks!
https://github.com/clojure-emacs/cider - An Introduction to Emacs Lisp
https://harryrschwartz.com/2014/04/08/an-introduction-to-emacs-lisp.html - Emergency Elisp
http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html - Racket
https://racket-lang.org/ - The Racket Manifesto
http://felleisen.org/matthias/manifesto/ - MIT replaces Scheme with Python
https://www.johndcook.com/blog/2009/03/26/mit-replaces-scheme-with-python/ - Adventures in Advanced Symbolic Programming
http://groups.csail.mit.edu/mac/users/gjs/6.945/ - Why MIT Switched from Scheme to Python (2009)
https://news.ycombinator.com/item?id=14167453 - Starodávná stránka XLispu
http://www.xlisp.org/