Obsah
1. Spacemacs a projekty vytvářené v Pythonu
2. Nastavení virtuálního prostředí Pythonu
3. Language Server Protocol: LSP
6. Povolení vrstev důležitých pro vývoj Pythonu
7. Spuštění Emacsu v roli IDE pro Python
8. Automatické doplňování názvů funkcí, metod, proměnných, parametrů
9. Kooperace s interaktivní smyčkou interpretru Pythonu (REPL)
11. Instalace Org-mode do Spacemacsu
12. Struktura dokumentů používaných v org-mode
13. Nadpisy, seznamy, tabulky, odkazy
14. Klávesové zkratky v režimu Org
17. Tvorba delších dokumentů a článků v org-mode
18. Balíček určený pro nastavení vizuálního stylu Spacemacsu
1. Spacemacs a projekty vytvářené v Pythonu
Ve druhém článku o Spacemacsu, který navazuje na článek z minulého týdne nazvaný Spacemacs: to nejlepší z editorů Emacs a Vim, si nejdříve ukážeme, jakým způsobem je možné Spacemacs použít ve funkci poměrně robustního integrovaného vývojového prostředí pro projekty vytvářené v Pythonu (ovšem podobně lze pracovat i s dalšími skriptovacími jazyky – většinou postačuje stáhnout a nakonfigurovat příslušný LSP). Následně se budeme zabývat slavným režimem Org, s nímž jsme se částečně seznámili již ve výše zmíněném úvodním článku. A v samotném závěru si řekneme, jak lze jednoduše změnit barvové schéma Spacemacsu s využitím vrstvy pojmenované Themes Megapack, která v současnosti obsahuje přibližně stovku barvových schémat, mezi kterými je možné se přepínat klávesovou zkratkou (například v závislosti na denní/noční době atd.).
Obrázek 1: Čistě nainstalovaný Emacs 26.3 připravený na přerod do Spacemacsu. Většina screenshotů pro dnešní článek byla vytvořena v Mintu, zatímco minule se jednalo o Fedoru.
Obrázek 2: Základní konfigurace Spacemacsu popsaná minule.
2. Nastavení virtuálního prostředí Pythonu
Spacemacs bude v režimu Pythonu používat jak samotný interpret Pythonu, tak i další podpůrné nástroje z rozsáhlého ekosystému tohoto jazyka. Samozřejmě je možné použít interpret i nástroje nainstalované přímo v operačním systému (či pro daného uživatele volbou –user), ovšem to může vést k některým problémům, které se začátečníkům mnohdy těžko odlaďují – například se nespustí dále popsaný LSP server atd. Proto je výhodnější využít možností nabízených například nástrojem virtualenv, který mj. umožňuje, aby jeden uživatel měl k dispozici libovolné množství virtuálních prostředí Pythonu, každé s vlastními balíčky a jejich verzemi. Pokud virtualenv není na operačním systému ve výchozím stavu nainstalován (případ Mintu a některých dalších uživatelsky orientovaných distribucí), provedeme jeho instalaci, a to buď nástrojem pip (zde záleží na konfiguraci systému – nové již používají Python 3 jako výchozí interpret):
$ pip install --user virtualenv
nebo explicitně:
$ pip3 install --user virtualenv
Při instalaci s volbou –user si doplňte nastavení cesty k podadresáři, v němž se nachází spustitelný soubor virtualenv:
export PATH=$PATH:~/.local/bin
Dále vytvoříme adresář, v němž budou nainstalovány balíčky pro jednotlivá virtuální prostředí. Tento adresář se může nacházet kdekoli a mít libovolné jméno. My pro jednoduchost použijeme „venv“:
$ mkdir venv
Vytvoříme nové virtuální prostředí nazvané „test“ a inicializujeme ho:
$ virtualenv venv/test $ cd venv/test/bin/ $ source activate
To, že se provedlo přepnutí do virtuálního prostředí Pythonu, se mj. projeví i na modifikované výzvě (prompt), která bude obsahovat název tohoto prostředí v závorkách:
(test) $
Pro jistotu si otestujeme, jaká verze Pythonu je v daném virtuálním prostředí aktivní:
(test) $ python Python 3.8.5 (default, Jul 28 2020, 12:59:40) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Obrázek 3: Instalace základních balíčků, na nichž je Spacemacs postavený.
3. Language Server Protocol: LSP
Language Server Protocol je otevřený standard navržený takovým způsobem, aby umožňoval komunikaci mezi textovými editory, popř. mezi integrovanými vývojovými prostředími (IDE) na jedné straně a různými typy programátorských nástrojů na straně druhé. Mezi nástroje, které je díky existenci LSP možné z editoru/IDE použít, mohou patřit zejména různé lintery, statické analyzátory kódu, programy pro kontrolu stylu zápisu programů, nástroje umožňující refaktoring zdrojového kódu, teoreticky i profilery atd. Nesmíme samozřejmě zapomenout na dnes již všemi programátory očekávané nástroje pro automatické doplňování jmen funkcí, metod, objektů atd., „inteligentní“ vyhledávání ve zdrojovém kódu, doskoky na definici funkce, objektu nebo proměnné apod. Všechny tyto nástroje mohou komunikovat s editorem/IDE přímo (pokud obsahují podporu pro LSP), nebo je možné využít nějaký obecnější nástroj, který je většinou nazývaný Language Server a který podporuje větší množství funkcí (typicky vyhledání definic, refaktoring a automatické doplňování; samozřejmě v závislosti na konkrétní implementaci).
Obrázek 4: Textový editor Emacs (v „klasické“ podobě, nikoli přebalený do Spacemacsu) ve funkci integrovaného vývojového prostředí.
Protokol je založen na formátu JSON, přesněji řečeno na protokolu JSON-RPC. Při použití LSP je textový editor či IDE považován za klienta a language server pochopitelně vystupuje v roli serveru, který klientovi poskytuje tzv. „language service“. Mezi klientem a serverem probíhá komunikace s využitím tří typů zpráv:
- Požadavek (request) je posílán klientem na server. Server musí na tento požadavek odpovědět. Používá se protokol JSON-RPC.
- Odpověď (response) serveru na požadavek klienta. Klient vždy dokáže spárovat svůj požadavek s odpovědí serveru (to je základ JSON-RPC).
- Oznamovací zprávy (notification) může posílat jak klient, tak i server, přičemž se na tyto zprávy nemusí posílat odpověď. Klient (editor) může například serveru ohlásit, že uživatel posunul kurzor na další funkci, ale prozatím od něj neočekává žádnou další službu.
Příklad komunikace (na levé straně je klient/editor, na straně pravé language server):
textDocument/didOpen -> textDocument/didChange -> <- textDocument/publishDiagnostics <- textDocument/didClose
Konkrétní tvar dotazu může vypadat takto:
{'method': 'textDocument/hover', 'jsonrpc': '2.0', 'id': 4, 'params': {'textDocument': {'uri': 'file:///home/ptisnovs/t.py'}, 'position': {'character': 0, 'line': 21}}}
Jeden typ notifikace vrácené serverem klientovi:
textDocument/publishDiagnostics {'uri': 'file:///home/ptisnovs/t.py', 'diagnostics': [{'source': 'pycodestyle', 'range': {'start': {'line': 3, 'character': 19}, 'end': {'line': 3, 'character': 21}}, 'message': 'W291 trailing whitespace', 'code': 'W291', 'severity': 2}]}
4. Python Language Server
V navazujících kapitolách si ukážeme, jakým způsobem je možné integrovat language server protocol do Spacemacsu. Aby bylo možné použít reálné příklady, použijeme konkrétní implementaci LSP určenou pro programovací jazyk Python. Tato implementace se jmenuje jednoduše Python Language Server, kráceně PYLS či jen pyls, implementace od společnosti Microsoft pak mspyls. Instalace Python Language Serveru je jednoduchá a provedeme ji s využitím nástroje pip. Přitom je instalace provedena do virtuálního prostředí Pythonu, což je užitečné, protože v jiném virtuálním prostředí může být nainstalován odlišný LSP (resp. odlišný server komunikující s Emacsem přes LSP).
Obrázek 5: Instalace LSP se nabízí i přímo v Emacsu.
5. Instalace LSP pro Python
Teoreticky postačuje instalovat pouze balíček nazvaný python-language-server:
$ pip install python-language-server
Ve skutečnosti je však užitečné nainstalovat i další doplňky k základnímu serveru (linter, formátovač atd.):
$ pip install 'python-language-server[all]'
Kromě toho si můžete vyzkoušet nainstalovat i další podpůrné nástroje, ke kterým je opět zajištěn přístup přes LSP:
Balíček | Stručný popis |
---|---|
pyls-mypy | typový systém (+ kontrola typů) v Pythonu (pokud používáte) |
pyls-isort | setřídění importovaných balíčků nástrojem isort |
pyls-black | pokročilá kontrola a formátování kódu nástrojem Black |
Průběh instalace závisí na tom, zda již máte nainstalovány všechny závislé balíčky či nikoli. V mém případě jsem již některé balíčky měl nainstalované (minimálně od doby psaní článku o Jedi), takže instalace byla prakticky okamžitá:
Collecting python-language-server Downloading https://files.pythonhosted.org/packages/9f/1d/2817b5dc2dd77f897410a11c1c9e2a6d96b3273c53d4219dd9edab7882af/python-language-server-0.21.2.tar.gz (51kB) Requirement already satisfied: future>=0.14.0 in ./.local/lib/python3.6/site-packages (from python-language-server) Requirement already satisfied: jedi>=0.12 in ./.local/lib/python3.6/site-packages (from python-language-server) Requirement already satisfied: python-jsonrpc-server in ./.local/lib/python3.6/site-packages (from python-language-server) Requirement already satisfied: pluggy in /usr/lib/python3.6/site-packages (from python-language-server) Requirement already satisfied: parso>=0.3.0 in ./.local/lib/python3.6/site-packages (from jedi>=0.12->python-language-server) Installing collected packages: python-language-server Running setup.py install for python-language-server: started Running setup.py install for python-language-server: finished with status 'done' Successfully installed python-language-server-0.21.2
Pro velmi rychlou kontrolu, zda instalace proběhla v pořádku, si můžete Python Language Server spustit a zjistit, zda příkaz vůbec existuje, popř. zda při spuštění nedojde k nějaké chybě:
$ pyls -v 2021-02-13 20:08:20,185 UTC - INFO - pyls.python_ls - Starting PythonLanguageServer IO language server
6. Povolení vrstev důležitých pro vývoj Pythonu
Nyní bychom již měli mít nainstalován jak Spacemacs, tak i nejdůležitější balíčky pro Python, zejména jazykový server, s nímž může Emacs komunikovat přes protokol LSP. Zbývá nám pouze povolit vrstvy (layers) důležité pro vývoj Pythonu. Připomeňme si, že vrstvami jsou označovány balíčky samotného Emacsu a především jejich konfigurace. Pokud změníte hodnotu symbolu dotspacemacs-configuration-layers v souboru .spacemacs (ten je umístěn v domácím adresáři), bude příslušný balíček či balíčky automaticky nainstalován při inicializaci Spacemacsu, popř. po stisku klávesové zkratky SPC f e R. Výchozí nastavení vrstev vypadá následovně:
;; List of configuration layers to load. dotspacemacs-configuration-layers '(;; ---------------------------------------------------------------- ;; 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)
Pro využití Spacemacsu jako IDE pro Python proveďte tyto úpravy:
;; List of configuration layers to load. dotspacemacs-configuration-layers '( ;; ---------------------------------------------------------------- ;; 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. ;; ---------------------------------------------------------------- python 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é inicializaci Spacemacsu dojde ke stažení a konfiguraci těchto balíčků:
Obrázek 6: Instalace balíčků z nově povolených vrstev.
7. Spuštění Emacsu v roli IDE pro Python
Spacemacs je ideální spouštět přímo v rámci virtuálního prostředí Pythonu. V tomto případě by se při otevření zdrojového souboru měl automaticky (na pozadí) nastartovat LSP server a měly by být k dispozici i další nástroje – zejména kontrola chyb ve skriptech, podpora automatického doplňování po stisku klávesy TAB, popř. možnost spuštění REPLu Pythonu s předáním části kódu, který se má v interaktivním shellu spustit. K dispozici je pochopitelně i nápověda:
Obrázek 7: Nápověda k režimu Pythonu.
Podívejme se nyní na některé možnosti, které jsou k dispozici.
Obrázek 8: Červeně jsou podtrženy chybně zapsané programové řádky nebo jejich části. Po najetí kurzorem myši se vypíšou podrobnější informace o chybě.
Obrázek 9: Detekují se i problémy se strukturou zápisu programového kódu (lintery).
Obrázek 10: Podrobnější informace o funkcích, metodách a proměnných dostupných v balíčku os.
8. Automatické doplňování názvů funkcí, metod, proměnných, parametrů
Mnoho funkcí nabízených kombinací vrstev Python a auto-completion je založeno na kontextové nabídce názvů funkcí, metod, tříd, parametrů atd. Typicky je taková nabídka zobrazena automaticky po stisku klávesy Tab.
Obrázek 11: Jednou z nejdůležitějších vlastností je automatické doplňování funkcí, metod, proměnných či parametrů (opět v závislosti na kontextu).
Obrázek 12: V pravé části je automaticky zobrazena dokumentace k použité třídě, resp. přesněji řečeno ke třídě, jejíž konstruktor se volá.
Obrázek 13: Nabídka metod a atributů objektu x, který je instancí třídy X, což LSP samozřejmě dokáže automaticky detekovat.
Obrázek 14: V dolní části okna si povšimněte nápovědy týkající se parametrů volané metody.
9. Kooperace s interaktivní smyčkou interpretru Pythonu (REPL)
Neméně důležitá funkcionalita při práci s Pythonem (ale i s dalšími skriptovacími jazyky) je představována možností spuštění a zobrazení interaktivní smyčky REPL přímo v prostředí Spacemacsu. Do takto inicializovaného interpretru je následně možné posílat části editovaných souborů (či celé soubory) a sledovat vypočtené a zobrazené výsledky. Opět se podívejme na sérii screenshotů, na nichž je tato funkcionalita postupně představena.
Obrázek 15: Po stisku klávesové zkratky SPC m se zobrazí menu, které se týká hlavního aktuálně nastaveného režimu. Takto menu vypadá ve chvíli, kdy je hlavním režimem Python.
Obrázek 16: Podmenu zobrazené po výběru klávesové zkratky SPC m c, což znamená „execute code“. Do interpretru Pythonu lze předat vybraný zdrojový soubor.
Obrázek 17: Výsledek spuštění našeho skriptu ukázal, že se v něm nachází chyby detekované za běhu (runtime).
Obrázek 18: Po opravě již bylo možné skript bez problémů spustit.
Obrázek 19: Menu zobrazené po výběru příkazu SPC m s nabízí možnosti předání určité části kódu do REPLu s možností jeho vykonání (tedy spuštění).
Obrázek 20: Aktivní interaktivní smyčka Pythonu.
Obrázek 21: Při ukončování Spacemacsu je nutné interpret, interpretry či další na pozadí spuštěné procesy ukončit.
10. Spacemacs a režim Org
Ve druhé třetině dnešního článku si ukážeme některé možnosti, které uživatelům nabízí kombinace Spacemacsu a slavného režimu Org, o němž jsme se ostatně již zmínili minule. Připomeňme si, že s využitím org-mode je 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.
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.
Výsledkem je přitom běžný textový soubor, který může přečíst jakýkoli uživatel, i ten, který Org nepoužívá. 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 23: Nápověda k režimu Org.
11. Instalace Org-mode do Spacemacsu
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 při popisu vrstev užitečných při práci s Pythonem. 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 '(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 24: Org-mode prakticky bez problémů zkombinovaný se Spacemacsem.
12. Struktura dokumentů používaných v org-mode
Na rozdíl od specializovaných aplikací určených pro organizaci času a správu poznámek pracuje plugin org-mode s čistě textovými soubory, v nichž se rozeznává několik textových značek, které je možné se velmi snadno naučit. Ostatně se stejným nebo hodně podobným principem, tj. s použitím běžných textových souborů s několika značkami, se pravděpodobně setkalo velké množství čtenářů tohoto článku: jedná se zejména o dnes populární formáty AsciiDoc, Markdown, ReStructuredText a podmnožiny těchto jazyků, které jsou použity například na GitHubu, některých systémech s wiki apod. Ostatně i samotný formát používaný org modem je podporován přímo na GitHubu – soubory tohoto typu jsou automaticky zformátovány před jejich zobrazením uživateli (v případě potřeby se lze ovšem podívat i na „raw“ podobu takových dokumentů).
Obrázek 25: Režim org-mode samozřejmě dává uživatelům k dispozici rozsáhlou nápovědu integrovanou do Emacsu (zde bez Spacemacsu).
Všechny nové příkazy (je jich několik set, pokud spočítáme všechny možné varianty!), které plugin org-mode nabízí, tak pracují nad čistě textovými daty, přičemž je nutné zdůraznit, že plugin nemá k dispozici žádné další „skryté“ soubory. V praxi to znamená především fakt, že si můžete poznámky a diář jednoduše synchronizovat mezi různými počítači (přes Git, popř. dokonce i přes starý dobrý nástroj rsync) a prakticky nikdy nedojde k poškození dat (pokud si je samozřejmě sami nesmažete nebo „nerozházíte“ některou pokročilejší operací).
Obrázek 26: Tento dokument o Org mode je psán přímo v Org mode.
13. Nadpisy, seznamy, tabulky, odkazy
S využitím textových značek se v org-mode rozlišuje několik různých tříd objektů. Jedná se především o nadpisy, které začínají hvězdičkami na začátku řádku. Podle počtu hvězdiček se rozlišují různé úrovně nadpisů – nadpisy nejvyšší úrovně jsou označeny jedinou hvězdičkou, nadpisy druhé úrovně dvěma hvězdičkami atd. Nadpisy jsou od ostatního textu vizuálně rozlišeny, to ovšem není jejich hlavní funkce. Nadpisy především slouží ke strukturování dokumentu a existuje několik příkazů pro změnu pohledu na dokument (viz navazující kapitolu), změnu jeho struktury apod. Nesmíme zapomenout ani na možnost exportu dokumentů do jiných formátů (PDF, HTML, LaTeX, …), v nichž samozřejmě struktura dokumentů hraje velkou roli.
Obrázek 27: Pro org-mode existuje i spousta zajímavých rozšíření, například toto rozšíření pro kooperaci s Jirou.
Mezi další třídu textových objektů poskytovaných modulem org-mode patří seznamy, které mohou být číslované nebo se může jednat o seznamy s odrážkami. U obou typů seznamů je možné do jisté míry ovlivnit styl zobrazení značek a kdykoli tento styl změnit (pro celý seznam!) s využitím k tomu určených příkazů. Třetí třídou textových objektů jsou odkazy, které mohou vést jak do stejného textového dokumentu, tak i do dokumentu jiného, na URL apod. A důležitá je i podpora tabulek, které tvoří nejkomplexnější textové objekty.
Obrázek 28: Možnosti exportu diáře/poznámek do různých formátů.
14. Klávesové zkratky v režimu Org
V režimu Org, tj. například při editaci souboru s koncovkou .org, má uživatel k dispozici poměrně velkou sadu nových klávesových zkratek. Ty – pokud se bavíme o ovládání převzatém z Vimu – ovšem nejsou kompatibilní se zkratkami oficiálního Org mode. Klávesové zkratky začínají klávesou SPC a musí se (pochopitelně) spouštět z normálního režimu, tedy nikoli z režimu vkládacího nebo dokonce přepisovacího. Všechny dostupné zkratky jsou pochopitelně popsány v nápovědě, jejichž části jsou ukázány na screenshotech.
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). Některé příkazy začínají sekvencí SPC a o (o znamená pochopitelně Org mode) a týkají se většinou celého dokumentu s poznámkami a agendou – vyhledávání schůzek, úkolů atd.:
Obrázek 29: Příkazy začínající sekvencí SPC a o.
Většina příkazů je však skryta v menu zobrazeném po stisku SPC m, kde m znamená (main) mode. Jedná se například o příkaz pro vytvoření nadpisu z aktuálního řádku SPC m *, výběr, resp. změna odrážek u seznamu SPC m -, přidání nálepky TODO či DONE (s časovým razítkem) SPC m Shift+l či přidání nálepky s prioritou SPC m Shift+j (snížení priority) a SPC m Shift+k (zvýšení priority). Mimochodem tyto poslední dva příkazy jsou odvozeny od zkratek j/k z Vimu. Příkazy pro přepínání mezi různými stavy začínají SPC m T.
Obrázek 30: Nápověda s příkazy režimu Org začínající zkratkou SPC m.
Pokud je určitá část textu vybrána (režim vizuálního výběru spuštěný příkazem v či V), lze vybranému textu určit styl příkazy začínajícími na SPC m x, za nímž následuje výběr stylu (tučné písmo b, kurzíva i, podtržené písmo s, kód c atd.). U nadpisů lze měnit jejich úroveň standardními Vimovskými zkratkami << a >>, které jsou mj. zmíněny v další nápovědě:
Obrázek 31: Klávesové zkratky odvozené (většinou) z Vimu.
Obrázek 32: Další klávesové zkratky související s různými dalšími objekty v textovém dokumentu (tabulky, seznamy, úkoly).
15. Seznamy
Při tvorbě poznámek a strukturovaných dokumentů je samozřejmě možné používat seznamy. Jak jsme se již dozvěděli v předchozích kapitolách, pracovat lze s číslovanými seznamy i se seznamy s odrážkami. Číslované seznamy typicky začínají celým číslem, za nímž následuje tečka nebo pravá kulatá závorka. Odrážky jsou reprezentovány znaky „-“, „+“ nebo „*“. Mezi těmito pěti možnostmi se můžete přepínat pomocí klávesové zkratky SPC m -. Tato zkratka je aplikována vždy na aktuální seznam, tj. na seznam, v němž se nachází textový kurzor.
Jakýkoli prvek seznamu je možné převést na nadpis s využitím zkratky SPC m *, nový prvek se přidává klávesovou zkratkou Alt+Enter (v GUI levý Alt) a poslední zajímavou volbou je C-c | pro převod seznamu na tabulku.Obrázek 33: Číslované seznamy.
Zaškrtávací políčka jsou dalším specializovaným typem seznamů. Do dokumentu se zapisují velmi jednoduchým a snadno zapamatovatelným způsobem:
*** Checkboxy - [ ] první - [ ] druhý - [ ] třetí
V případě, že je zapotřebí políčko „odškrtnout“, postačuje kdekoli na řádku použít příkaz SPC m T c (tedy mnemotechnicky main mode, toggle, checkbox):
*** Checkboxy - [X] první - [X] druhý - [ ] třetí
Obrázek 34: Změna číslování seznamu klávesovou zkratkou SPC m -.
16. Tabulky
Jednou z velmi důležitých vlastností pluginu org-mode je podpora pro práci s tabulkami. Díky tomu může Emacs pro některé účely nahradit i nástroje určené pro mnohem složitější operace s tabulkami (LibreOffice, …). Samozřejmě je stále zachován základní princip, který se celým org-mode prolíná: všechna data jsou reprezentována čistým textem bez speciálních datových struktur a řídicích znaků. Pouze se (v čitelné podobě) za tabulku mohou přidávat informace o vzorcích.
Obrázek 35: Tabulka, v níž jsou po editaci rozházené buňky.
Obrázek 36: Po stisku klávesy TAB se tabulka automaticky znovu zformátuje.
Popisem práce s tabulkami se budeme věnovat v samostatném článku.
17. Tvorba delších dokumentů a článků v org-mode
„Org-Mode Is One of the Most Reasonable Markup Languages to Use for Text“
Režim org-mode je možné v případě potřeby použít i pro tvorbu delších dokumentů, které se následně mohou převést (exportovat) do jiných formátů, z nichž některé budou popsány v navazujícím textu (Markdown, AsciiDoc). Pro vytvoření základní struktury dokumentu se používají nám již známé řádky začínající hvězdičkami. Počet hvězdiček na začátku řádků přitom určuje úroveň jednotlivých kapitol a podkapitol. Při exportu jsou kapitoly a podkapitoly prakticky vždy převedeny korektně. Podobně je tomu i u seznamů, které mohou být číslované či nečíslované (s odrážkami). Pro zvýraznění textu v rámci jednotlivých odstavců slouží značky pro určení tučného písma, kurzivy, podtrženého textu, zdrojového kódu a konečně neformátovaného textu:
1. *tučné písmo* 2. /kurzíva/ 3. _podtržený text_ 4. +přeškrtnutý text+ 5. =úryvek zdrojového kódu= 6. ~neformátovaný text~
Obrázek 37: Všechny nabízené možnosti formátování dokumentů ocení především uživatelé Emacsu spuštěného v grafickém režimu. V režimu textovém totiž nemusí být například zvýrazněno tučné písmo či kurzíva (v závislosti na konfiguraci terminálu).
Editace rozsáhlejších dokumentů v režimu org-mode je většinou naprosto bezproblémová, tj. málokdy se uživatelům „podaří“ nějakým omylem globálně změnit jejich strukturu. Samotné odstavce se vytváří zcela běžným způsobem. Pokud budete vyžadovat, aby se při psaní textu, popř. při jeho úpravách používalo automatické formátování do odstavců, můžete si příslušný režim nastavit v menu Text. Jedná se o následující položky:
- Auto Fill
- Paragraph Indent
Ve chvíli, kdy se pracuje s delšími dokumenty (například rozsah tohoto článku přesáhne 68kB, tj. přibližně 37 normostran, bakalářky či diplomky mohou být několikanásobně delší), je užitečné se naučit používat klávesové zkratky sloužící pro pohyb kurzoru na základě logické struktury dokumentu. V praxi to znamená, že se můžeme snadno přesouvat po jednotlivých kapitolách, sekcích, skočit na nadpis vyšší úrovně (začátek kapitoly) atd. – a to vše bez nutnosti měnit náhled na dokument pomocí klávesy TAB (což by bylo řešení, které by se zvolilo ve Vimu s využitím tzv.– foldingu – skládání). K dispozici jsou především následující klávesové zkratky:
Zkratka | Význam klávesové zkratky |
---|---|
gl | přesun kurzoru na další viditelný nadpis |
gh | přesun kurzoru na nadpis o úroveň výše, než je současný text |
gj | přesun kurzoru na další nadpis stejné úrovně |
gk | přesun kurzoru na předchozí nadpis stejné úrovně |
18. Balíček určený pro nastavení vizuálního stylu Spacemacsu
Posledním balíčkem, se kterým se dnes alespoň ve stručnosti setkáme, je balíček nazvaný Themes Megapack. Tento Emacsovský balíček je pochopitelně dostupný i ve formě vrstvy (layer), takže pro jeho instalaci pouze dostačuje nepatrná úprava souboru .spacemacs:
;; List of configuration layers to load. dotspacemacs-configuration-layers '(;; ---------------------------------------------------------------- ;; 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 themes-megapack treemacs)
Po instalaci balíčku (inicializace stiskem SPC f e R či restartu Spacemacsu) je možné klávesovou zkratkou SPC T s zobrazit menu s výběrem barvového schématu (těch existuje přibližně stovka):
Obrázek 38: Přepínání mezi barvovými režimy.
Obrázek 39: Přepínání mezi barvovými režimy – jeden z režimů se světlým pozadím.
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 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/ - Spacemacs: to nejlepší z editorů Emacs a Vim
https://www.root.cz/clanky/spacemacs-to-nejlepsi-z-editoru-emacs-a-vim/
20. 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 - 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 layers list
https://develop.spacemacs.org/layers/LAYERS.html - Themes Megapack layer
https://develop.spacemacs.org/layers/+themes/themes-megapack/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/ - 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/