Obsah
1. Spacemacs: to nejlepší z Emacsu a Vimu
4. První spuštění Spacemacsu s volbou způsobu ovládání
5. Instalace dalších podpůrných balíčků
6. Konfigurační soubory Spacemacsu
7. Základní editační příkazy v režimu Vimu
8. Práce s registry (registers)
11. Proč se vlastně Spacemacs jmenuje Spacemacs?
12. Základní operace se soubory
13. Práce s okny, přechody mezi okny
14. Spacemacs a slavný Org-mode
16. Nové menu dostupné v režimu Org-mode
17. Obsah pokračování tohoto článku
1. Spacemacs: synergie mezi Emacsem a Vimem
„The best editor is neither Emacs nor Vim, it's Emacs *and Vim!*.“
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ů.
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. Pravděpodobně nejpokročilejší (a současně i nejsnáze 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+… Cílem tohoto článku je seznámit čtenáře se samotnou existencí Spacemacsu a se základy jeho ovládání. Podrobnějším popisem tohoto velmi užitečného nástroje se budeme zabývat až v navazujícím článku.
Obrázek 1: 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.
2. Instalace Emacsu
Spacemacs 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. To mj. znamená, že ještě před instalací Spacemacsu je nutné nainstalovat samotný Emacs (nikoli však XEmacs, i když teoreticky i taková kombinace by byla možná). 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 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 2: Pokud 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í.
3. Instalace Spacemacsu
Po instalaci samotného Emacsu a jeho základním otestování (pro naše potřeby pouze postačuje editor spustit a následně ukončit klávesovou zkratkou Ctrl+X Ctrl+C, která se v dokumentaci označuje C-x C-c) přikročíme k instalaci Spacemacsu. V případě, že byl Emacs právě čistě nainstalován, je instalace Spacemacsu snadná. Můžeme k ní použít archiv se všemi potřebnými soubory, jenž je dostupný na adrese https://github.com/syl20bnr/spacemacs/archive/master.zip:
$ wget https://github.com/syl20bnr/spacemacs/archive/master.zip --2021-02-06 09:35:45-- https://github.com/syl20bnr/spacemacs/archive/master.zip Resolving github.com (github.com)... 140.82.113.3 Connecting to github.com (github.com)|140.82.113.3|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://codeload.github.com/syl20bnr/spacemacs/zip/master [following] --2021-02-06 09:35:46-- https://codeload.github.com/syl20bnr/spacemacs/zip/master Resolving codeload.github.com (codeload.github.com)... 140.82.113.10 Connecting to codeload.github.com (codeload.github.com)|140.82.113.10|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘master.zip’ master.zip [ <=> ] 6.85M 18.8MB/s in 0.4s 2021-02-06 09:35:47 (18.8 MB/s) - ‘master.zip’ saved [7188146]
Tento archiv následně rozbalíme a jeho obsah přesuneme do adresáře ~/.emacs.d/.
Alternativně lze instalaci provést naklonováním Git repositáře se Spacemacsem, opět s tím, že se získané soubory (resp. celá adresářová struktura) mají uložit do adresáře ~/.emacs.d:
$ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
4. První spuštění Spacemacsu s volbou způsobu ovládání
Při prvním spuštění Spacemacsu se (kromě loga resp. alternativně jeho ASCII podoby) nejprve zobrazí otázka, jaký režim ovládání textového editoru má být nastaven jako výchozí. K dispozici je ovládání odvozené od Evil mode, tedy ovládání do značné míry připomínající textový editor Vim, ovšem s mnoha dalšími úpravami a vylepšeními. Alternativně je možné použít ovládání, které vychází ze samotného Emacsu. Třetím (konfigurovatelným) režimem je takzvaný hybridní režim, který primárně vychází z Vimu, ovšem ve vkládacím režimu (insert mode) se používají některé zkratky Emacsu.
Dotaz na výchozí způsob ovládání editoru se zobrazí jak v grafickém uživatelském prostředí, tak i při spuštění Emacsu v terminálu:
Obrázek 3: Nastavení výchozího způsobu ovládání v grafickém uživatelském rozhraní.
Obrázek 4: Nastavení výchozího způsobu ovládání v textovém terminálu. Všechny důležité informace jsou zobrazeny, i když možná ne v tak přehledné podobě, jako v případě použití GUI.
5. Instalace dalších podpůrných balíčků
V dalším kroku se instalační skript Spacemacsu zeptá, jaká distribuce s balíčky má být použita. Opět viz přiložené screenshoty:
Obrázek 5: Výběr distribuce s podpůrnými balíčky.
Ihned poté se zahájí instalace podpůrných balíčků, která může nějakou dobu trvat (přibližně desítky sekund). Vše je pochopitelně plně funkční jak při použití grafického uživatelského rozhraní, tak i „obyčejného“ terminálu:
Obrázek 6: Průběh instalace balíčků v GUI.
Obrázek 7: Dokončení instalace balíčků v GUI.
Obrázek 8: Průběh instalace balíčků v textovém terminálu.
Obrázek 9: Dokončení instalace balíčků v textovém terminálu.
Po dokončení instalace podpůrných balíčků je již Spacemacs připraven k použití.
6. Konfigurační soubory Spacemacsu
V průběhu instalace se v domácím adresáři vytvoří dvojice souborů nazvaná .spacemacs a .spacemacs.env. První z těchto souborů slouží pro nastavení vlastností textového editoru i celého prostředí Spacemacsu, druhý soubor obsahuje jména i hodnoty proměnných prostředí (environment variables). Pro nastavení resp. přesněji řečeno pro úpravu konfigurace je důležitější první ze zmíněných souborů, tedy soubor nazvaný .spacemacs, jehož editací lze kdykoli změnit chování Spacemacsu. Pro otevření tohoto souboru můžeme použít příkaz vyvolaný klávesami SPC f e d, tedy mezerník následovaný stiskem klávesy „f“, poté „e“ a nakonec „d“ (více informací bude uvedeno později; možná to není na první pohled patrné, ale „f“ a „e“ jsou snadno zapamatovatelnými mnemotechnickými zkratkami).
Pravděpodobně nejdůležitější volba souvisí se samotným ovládáním textového editoru. Tato volba se mění nastavením proměnné dotspacemacs-editing-style. Lze nastavit ovládání do značné míry kompatibilní s Vimem ('vim), se samotným Emacsem ('emacs) nebo již výše zmíněné hybridní ovládání ('hybrid):
;; One of `vim', `emacs' or `hybrid'. ;; `hybrid' is like `vim' except that `insert state' is replaced by the ;; `hybrid state' with `emacs' key bindings. The value can also be a list ;; with `:variables' keyword (similar to layers). Check the editing styles ;; section of the documentation for details on available variables. ;; (default 'vim) dotspacemacs-editing-style 'hybrid
Poměrně důležitá je i volba nazvaná dotspacemacs-scratch-buffer-persistent, která určuje, zda bude obsah scratch bufferu zachován i při opuštění editoru (to je potenciálně velmi užitečné, protože mnohdy právě tento buffer obsahuje „stav práce“ vývojáře):
;; If non-nil, *scratch* buffer will be persistent. Things you write down in ;; *scratch* buffer will be saved and restored automatically. dotspacemacs-scratch-buffer-persistent nil
V dalším textu se navíc budeme zabývat funkcí mezerníku, tedy klávesy Space, která se v Emacsu označuje symbolem SPC. Tato klávesa slouží jako prefix u mnoha příkazů, ovšem v případě potřeby je možné ji změnit na jinou klávesu:
;; The leader key (default "SPC") dotspacemacs-leader-key "SPC"
Další nastavení se týká takzvaných vrstev (layers), kterým se budeme věnovat později. Jednotlivé vrstvy je možné jednoduše odkomentovat nebo zakomentovat:
;; List of configuration layers to load. dotspacemacs-configuration-layers '(clojure python ;; ---------------------------------------------------------------- ;; Example of useful layers you may want to use right away. ;; Uncomment some layer names and press `SPC f e R' (Vim style) or ;; `M-m f e R' (Emacs style) to install them. ;; ---------------------------------------------------------------- ;; auto-completion ;; better-defaults emacs-lisp ;; git helm ;; lsp ;; markdown multiple-cursors ;; org ;; (shell :variables ;; shell-default-height 30 ;; shell-default-position 'bottom) ;; spell-checking ;; syntax-checking ;; version-control treemacs)
Obrázek 10: Povolení vrstvy s vylepšením editace souborů v Pythonu.
7. Základní editační příkazy v režimu Vimu
Obrázek 11: Režimy Vimu a způsob přechodu mezi nimi s využitím různých klávesových zkratek.
V případě, že bylo po instalaci Spacemacsu povoleno ovládání ve stylu editoru Vim, se po otevření bufferu (souboru) textový editor 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).
8. Práce s registry (registers)
Užitečným a často používaným nástrojem nabízeným textovým editorem Vim i režimem Evil (= Spacemacs při nastavení ovládání podobné Vimu) jsou takzvané registry. Jedná se o proměnné pojmenované jedním znakem, které v první řadě slouží pro kopii či přenos editovaných textů pomocí příkazů c (change), s (substitute), d (delete), y (yank) a p (paste), což vlastně znamená, že registry lze využít ve funkci pojmenovaných schránek (clipboard). Podobně jako v případě dále zmíněných značek, existují registry naplňované uživatelem a registry, jejichž obsah je měněn textovým editorem automaticky při provádění různých operací. Jména a význam některých důležitých registrů můžete najít v následující tabulce:
Registr | Význam |
---|---|
a-z | registry, které je možné přímo měnit uživatelem |
0 | použitý při příkazu yank (kopie textu) |
1–9 | registry naplňované automaticky příkazy d a c (delete, change) |
% | není ve výchozím nastavení přímo použit |
: | registr obsahující poslední příkaz, vhodné při vyvolání tohoto příkazu jako makra |
= | není ve výchozím nastavení přímo použit |
/ | registr obsahující posledně vyhledávaný řetězec (resp. text odpovídající regulárnímu výrazu) |
" | implicitní registr pro operace c, d, s nebo y |
– | implicitní registr pro operace, které mění menší část textu, než je jeden textový řádek |
Obrázek 12: Zobrazení registrů (registers, resp. přesněji řečeno evil-registers).
9. Použití značek (marks)
Další užitečnou věcí, kterou ve Vimu a samozřejmě i ve Spacemacsu najdeme, jsou takzvané značky (marks). Nejedná se však o značky vytvářené externími nástroji a ukládané většinou do souboru pojmenovaného tags, ale o interní seznam pozic kurzoru (jakési „špendlíky“ zapíchnuté do důležitých míst) v souboru, na které se lze během editace vrátit, nebo na něž se lze odkazovat. Podobnou funkcionalitu nabízí i mnohé další programátorské textové editory, ovšem u nich se většinou jedná o maximálně deset značek, zatímco ve Vimu může být značek mnohem více, protože každé značce je přiřazeno jednopísmenné označení.
Obrázek 13: Zobrazení značek (marks, resp. přesněji řečeno evil-marks).
V rámci jednoho souboru lze lokálně používat značky pojmenované malými písmeny a až z, zatímco značky pojmenované velkými písmeny A až Z si „pamatují“ i jméno souboru, v němž jsou definovány, tudíž se jedná o značky globální. Speciální význam mají značky se jmény 0 až 9 (naplňované většinou při ukončování Vimu či Emacsu) a taktéž v některých případech velmi užitečná značka ". Významy některých jmen značek (ve skutečnosti jich je ještě mnohem více) jsou vypsány v následující tabulce:
Jméno značky | Definice značky | Význam |
---|---|---|
a-z | manuálně | značky lokální v rámci souboru |
A-Z | manuálně | značky globální, ke značce je připojeno i jméno souboru |
" | automaticky | pozice kurzoru při zavření bloku |
^ | automaticky | pozice kurzoru, na níž se kurzor naposledy nacházel ve vkládacím režimu |
Práce se značkami je v mnoha ohledech velmi jednoduchá, ostatně všechny důležité příkazy najdete v následující tabulce:
Příkaz | Význam |
---|---|
:marks | výpis všech právě aktivních značek |
:marks značka | výpis vybrané značky |
ma – mz | definice lokální značky a-z |
mA – mZ | definice globální značky A-Z |
'a – 'z | skok na řádek, kde je značka definovaná (jedná se o příkaz pohybu kurzoru!) |
'A – 'Z | skok na soubor a řádek, kde je značka definovaná |
`a – `z | skok na přesné místo, kde je značka definovaná (jedná se o příkaz pohybu kurzoru!) |
'A – 'Z | skok na přesné místo (řádek i sloupec), kde je značka definovaná |
10. Uživatelská makra
Ve Vimu je možné definovat uživatelská makra, jejichž definice se uloží do zvoleného pracovního registru (definice makra obsahuje sekvenci stisknutých kláves, takže zde s výhodou využijeme především operátory zkombinované s příkazy pro pohyb v textu). Pro záznam makra se používá klávesová zkratka q[registr], například qa. Vim v tomto případě na stavový řádek vypíše slovo recording. V Emacsu je tomu nepatrně jinak, protože se namísto toho napíše zpráva:
Defining kbd macro...
Ukončení záznamu makra je provedeno pouze klávesou q. Ve Vimu se po zadání tohoto příkazu makro uloží do pracovního registru a slovo recording ze stavového řádku zmizí. Emacs (samozřejmě přepnutý do režimu evil) pracuje podobně, pouze navíc na stavový řádek vypíše zprávu:
Keyboard macro defined
Uživatelská makra lze přeložit do maker běžných v Emacsu. Postup je následující:
Makro vytvoříme běžným způsobem, tj. například qagU3wq pro převod tří slov na velká písmena. Následně zadáme příkaz:
:name-last-kbd-macro
a doplníme vhodné jméno makra, například „upcase3words“.
V posledním kroku si můžeme makro vypsat popř. vložit do souborů init.el či .emacs:
:insert-kbd-macro
Měl by se vypsat tento text:
(fset 'upcase3words "gU3w")
11. Proč se vlastně Spacemacs jmenuje Spacemacs?
Dostáváme se ke druhé polovině dnešního článku, takže je dobré si konečně položit otázku, která se vlastně sama nabízí: proč se vlastně Spacemacs jmenuje Spacemacs? Druhá část názvu je zřejmá – odkazuje se na Emacs, ale proč se na začátku vyskytuje slovo „space“? Spacemacs sice uživatelům nabízí ovládání podobné Vimu, 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.
Mezerníkem se zobrazí menu s (většinou) mnemotechnickými zkratkami, například w pro operace s okny, f pro operace se soubory 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 14: Menu zobrazené po stisku mezerníku.
Obrázek 15: Ve skutečnosti je toto menu mnohem rozsáhlejší, což nebylo na malé ploše předchozího okna patrné.
12. Základní operace se soubory
Menu s nabídkou příkazů pro operaci se soubory se zobrazí po SPC f, tedy po stisku klávesy Space následované klávesou f (pochopitelně od slova file):
Klávesa | Příkaz |
---|---|
b | helm-filtered-bookmarks |
c | Copy file to new file… |
f | helm-find-files |
h | hexl-find-file |
i | Insert file content… |
j | dired-jump |
l | Open file literally… |
o | Open with external app |
r | helm-recentf |
s | Save |
t | File tree |
A | Set another file for buffer… |
B | Find bookmark in file tree |
D | Delete… |
E | Open using sudo… |
F | helm-find-files |
J | open-junk-file |
L | helm-locate |
R | Rename… |
S | Save all |
T | Focus current file in file tree |
M-t | Focus tag in file tree |
ESC | +prefix |
e | Emacs/Spacemacs |
v | Variables |
y | Yank/Copy |
C | Convert |
Obrázek 16: Menu s nabídkou příkazů pro práci se soubory.
Z těchto příkazů (z nichž většina má asi zřejmý význam) se explicitně musíme zmínit o příkazu File tree, který zobrazí následující speciální buffer s výběrem souborů:
Obrázek 17: Stromová struktura adresáře.
Užitečný je u příkaz dired-jump, který zobrazí seznam souborů s možností jejich přímého výběru:
Obrázek 18: Přímý vizuální výběr souboru ze zobrazeného seznamu.
13. 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 ve Spacemacsu 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 |
---|---|
TAB | alternate-window |
+ | window-layout-toggle |
– | split-window-below |
. | window-transient-state |
/ | split-window-right |
1 | window-split-single-column |
2 | window-split-double-columns |
3 | window-split-triple-columns |
4 | window-split-grid |
= | balance-windows-area |
[ | shrink-window-horizontally |
] | enlarge-window-horizontally |
_ | maximize-horizontally |
b | switch-to-minibuffer-window |
d | delete-window |
f | follow-mode |
h | evil-window-left |
j | evil-window-down |
k | evil-window-up |
l | evil-window-right |
m | maximize-buffer |
o | other-frame |
r | rotate-windows-forward |
s | split-window-below |
t | current-window-dedication |
u | winner-undo |
v | split-window-right |
w | other-window |
x | kill-buffer-and-window |
{ | shrink-window |
| | maximize-vertically |
} | enlarge-window |
D | ace-delete-window |
F | make-frame |
H | evil-window-move-far-left |
J | evil-window-move-very-bottom |
K | evil-window-move-very-top |
L | evil-window-move-far-right |
M | ace-swap-window |
R | rotate-windows-backward |
Obrázek 19: Menu pro práci s okny.
Užitečné jsou například příkazy pro velmi rychlé rozdělení plochy na dva či tři sloupce, popř. na mřížku 2×2 okna: SPC w číslo:
Obrázek 20: Rozdělení plochy editoru do několika oken s různými buffery.
Z Vimu byly částečně převzaty příkazy určené pro přechod kurzoru do jiného okna. Jedná se o zkratku SPC w následovanou klávesou h/j/k/l, tedy klasickými klávesami použitými ve Vi/Vimu pro přesuny kurzoru. Stále je taktéž možné využít původní zkratky Ctrl+W h/j/k/l.
Obrázek 21: Rozdělení plochy editoru na mřížku 2×2 okna klávesovou zkratkou SPC w 4.
14. Spacemacs 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í 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.
Obrázek 22: Dokument s poznámkami vytvořenými v Org-mode. Povšimněte si použití různých úrovní nadpisů, použití číslovaných seznamů i seznamů s odrážkami a použití textových značek určených pro změnu stylu zobrazení písma.
Obrázek 23: Editace tabulek.
Obrázek 24: Zobrazení kalendáře ve chvíli, kdy je zapotřebí zadat datum, kdy má být úkol (teoreticky) dokončen.
15. Instalace Org-mode
Instalace Org-mode je v případě Spacemacsu až triviálně jednoduchá, protože postačuje upravit soubor .spacemacs, o kterém jsme se zmínili v šesté kapitole. Postačuje pouze odkomentovat jedinou položku org v sekci layers (vrstev), takže by tato položka mohla vypadat následovně:
;; List of configuration layers to load. dotspacemacs-configuration-layers '(clojure python ;; ---------------------------------------------------------------- ;; Example of useful layers you may want to use right away. ;; Uncomment some layer names and press `SPC f e R' (Vim style) or ;; `M-m f e R' (Emacs style) to install them. ;; ---------------------------------------------------------------- ;; auto-completion ;; better-defaults emacs-lisp ;; git helm ;; lsp ;; markdown multiple-cursors org ;; (shell :variables ;; shell-default-height 30 ;; shell-default-position 'bottom) ;; spell-checking ;; syntax-checking ;; version-control treemacs)
Po novém spuštění Spacemacsu dojde k automatickému stažení všech potřebných balíčků – toť vše, žádná další instalace ani konfigurace většinou není zapotřebí.
Obrázek 25: Org-mode prakticky bez problémů zkombinovaný se Spacemacsem.
16. Nové menu dostupné v režimu Org-mode
Po otevření souboru, který má být zpracováván v režimu Org-mode je možné použít nové menu dostupné pod klávesovou zkratkou SPC m. Toto menu je kontextově závislé na hlavním režimu Emacsu a bude tedy odlišné, pokud se editují souboru v Pythonu atd. V režimu Org vypadá toto menu následovně:
Klávesa | Příkaz |
---|---|
RET | org-ctrl-c-ret |
# | org-update-statistics-cookies |
' | org-edit-special |
* | org-ctrl-c-star |
, | org-ctrl-c-ctrl-c |
– | org-ctrl-c-minus |
a | org-agenda |
c | org-capture |
p | org-priority |
A | org-attach |
H | org-shiftleft |
J | org-shiftdown |
K | org-shiftup |
L | org-shiftright |
C-S-h | org-shiftcontrolleft |
C-S-j | org-shiftcontroldown |
C-S-k | org-shiftcontrolup |
C-S-l | org-shiftcontrolright |
M-RET | org-meta-return |
b | +babel |
d | +dates |
e | +export |
f | +feeds |
i | +insert |
s | +trees/subtrees |
t | +tables |
x | +text |
B | +org-brain |
C | +clocks |
T | +toggles |
Obrázek 26: Menu pro režim Org.
17. Obsah pokračování tohoto článku
Ve druhém článku o Spacemacsu se zaměříme na tři oblasti, které jsou zaměřeny čistě prakticky. Podrobněji si popíšeme práci s projekty psanými v Pythonu, ukážeme si některé praktické způsoby využití Org mode a taktéž se zmíníme o integraci s Gitem.
Obrázek 27: Kontextové menu pro Git.
18. 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 tři potenciálně zajímavé oblasti – režim Evil (jehož význam je patrný z výše uvedeného textu), slavný režim Org a taktéž jsme si popsali všechny důležité vlastnosti Emacs LISPu:
- 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/
19. Odkazy na Internetu
- 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 - 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 - 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 - 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/ - AutoLISP
https://en.wikipedia.org/wiki/AutoLISP - Seriál PicoLisp: minimalistický a výkonný interpret Lispu
https://www.root.cz/serialy/picolisp-minimalisticky-a-vykonny-interpret-lispu/ - Common Lisp
https://common-lisp.net/ - Getting Going with Common Lisp
https://cliki.net/Getting%20Started - Online Tutorial (Common Lisp)
https://cliki.net/online%20tutorial - Guile Emacs
https://www.emacswiki.org/emacs/GuileEmacs - Guile Emacs History
https://www.emacswiki.org/emacs/GuileEmacsHistory - Guile is a programming language
https://www.gnu.org/software/guile/ - MIT Scheme
http://groups.csail.mit.edu/mac/projects/scheme/ - SIOD: Scheme in One Defun
http://people.delphiforums.com/gjc//siod.html - CommonLispForEmacs
https://www.emacswiki.org/emacs/CommonLispForEmacs - Elisp: print, princ, prin1, format, message
http://ergoemacs.org/emacs/elisp_printing.html - Special Forms in Lisp
http://www.nhplace.com/kent/Papers/Special-Forms.html - Basic Building Blocks in LISP
https://www.tutorialspoint.com/lisp/lisp_basic_syntax.htm - Introduction to LISP – University of Pittsburgh
https://people.cs.pitt.edu/~milos/courses/cs2740/Lectures/LispTutorial.pdf - Why don't people use LISP
https://forums.freebsd.org/threads/why-dont-people-use-lisp.24572/