#+TITLE: Emacs Extensions — Instalace a Workflow #+DATE: [2026-02-24 Tue] #+OPTIONS: toc:3 * Přehled keybindings | Klávesa | Příkaz | Popis | |-------------+--------------------------+--------------------------------| | =SPC o c= | org-caldav-sync | Sync kalendáře s CalDAV | | =SPC o k= | kubel | Kubernetes management | | =SPC o C= | cfw:open-org-calendar | Vizuální kalendář | | =SPC u= | vundo | Vizuální undo tree | | =SPC s e= | iedit-mode | Editace všech výskytů | | =SPC s q= | org-ql-search | Org-ql dotaz | | =SPC s Q= | org-ql-view | Org-ql uložené pohledy | | =SPC n r u= | org-roam-ui-mode | Org-roam graf v prohlížeči | | =SPC b b= | citar-open | Otevřít referenci | | =SPC b i= | citar-insert-citation | Vložit citaci | | =SPC b n= | citar-open-notes | Poznámky k článku | | =SPC b r= | citar-refresh | Obnovit bibliografii | | =SPC t g= | langtool-check | Kontrola gramatiky | | =SPC t G= | langtool-check-done | Zrušit zvýraznění gramatiky | | =, C i= | org-clock-in | Začít měřit čas (org) | | =, C o= | org-clock-out | Ukončit měření | | =, C r= | org-clock-report | Výpis odpracovaného času | | =, A s= | org-anki-sync-entry | Sync heading do Anki | | =, A S= | org-anki-sync-all | Sync vše do Anki | | =C-M-n/p= | combobulate-navigate | Navigace po AST uzlech | | =C-M-u/d= | combobulate-navigate | Nahoru/dolů v AST | * Tier 1 — Vysoký dopad ** org-caldav — Sync s CalDAV Obousměrná synchronizace org souborů s CalDAV serverem. Události z org se promítnou do kalendáře a naopak. *** Instalace Balíček je v =packages.el=, konfigurace v =config.el=. Server: =cal.apps.sukany.cz=, uživatel =martin@sukany.cz=. Heslo v =~/.openclaw/.env= (=$CALDAV_PASSWORD=). *** Keybindings | Klávesa | Příkaz | Popis | |-----------+-------------------+--------------------| | =SPC o c= | org-caldav-sync | Spustit sync | *** Příklad workflow 1. Otevři =~/org/personal.org=, přidej heading s datem: =* Schůzka <2026-03-01 Sun 14:00-15:00>= 2. =SPC o c= — sync s CalDAV 3. Událost se objeví v kalendáři na =cal.apps.sukany.cz= 4. Změny z kalendáře se stáhnou do =~/org/caldav-inbox.org= *** Tipy - Sync směr je =twoway= — funguje oběma směry - =caldav-inbox.org= slouží jako přijímací soubor pro nové události ze serveru - Před prvním syncnem vytvoř =~/org/caldav-inbox.org= (prázdný soubor stačí) ** envrc — Per-project prostředí Automaticky načítá =.envrc= soubory přes direnv při vstupu do projektového adresáře. Proměnné prostředí se nastaví per-buffer. *** Instalace #+begin_src shell # direnv musí být nainstalovaný brew install direnv # macOS sudo apt install direnv # Debian/Ubuntu #+end_src Balíček se aktivuje globálně po startu Emacsu. *** Příklad workflow 1. V kořeni projektu vytvoř =.envrc=: =export DATABASE_URL=postgres://...= 2. =direnv allow= v shellu 3. Otevři soubor z projektu v Emacsu — envrc automaticky nastaví proměnné 4. =M-x envrc-show= ukáže aktuální prostředí bufferu *** Tipy - Funguje per-buffer, ne globálně — různé projekty mají různé proměnné - Kombinuj s =.env= soubory přes =dotenv= layout v =.envrc= ** embark — Kontextové akce Doom vertico modul embark zahrnuje. Embark nabízí kontextové akce nad aktuálním cílem (soubor, symbol, URL) v minibufferu nebo v bufferu. *** Keybindings Doom výchozí: =C-.= v minibufferu nebo bufferu spustí embark-act. Prompter nastaven na =embark-keymap-prompter= — zobrazí klávesovou mapu dostupných akcí. *** Příklad workflow 1. =SPC f f= (find file) — začni psát název souboru 2. =C-.= na kandidátovi — embark ukáže akce: otevřít, smazat, kopírovat cestu, grep... 3. Vyber akci klávesou (např. =d= pro delete, =c= pro copy) *** Tipy - =C-;= = embark-dwim (provede nejpravděpodobnější akci rovnou) - Funguje i mimo minibuffer — na symbolu v kódu nabídne dokumentaci, definici ** wgrep — Editovatelný grep Umožňuje editovat výsledky grepu přímo v grep bufferu a uložit změny do všech souborů najednou. *** Příklad workflow 1. =SPC s p= (project search) — hledej =old_function= 2. V grep bufferu: =C-c C-p= (wgrep-change-to-wgrep-mode) 3. Použij =:%s/old_function/new_function/g= (evil substitute) 4. =C-c C-c= — uloží změny do všech souborů 5. =C-c C-k= — zruší změny *** Tipy - =wgrep-auto-save-buffer= je zapnutý — soubory se uloží automaticky po =C-c C-c= - Kombinuj s =SPC s p= (ripgrep) pro refactoring přes celý projekt ** kubel — Kubernetes management Interaktivní rozhraní pro správu Kubernetes zdrojů přímo z Emacsu. Cluster: =infra01.sukany.cz=, přístup přes kubeconfig. *** Keybindings | Klávesa | Příkaz | Popis | |-----------+-------------------------------+------------------------| | =SPC o k= | kubel | Otevřít kubel | | =g= | kubel-get-resource-details | Detail zdroje | | =E= | kubel-exec-pod | Exec do podu | | =l= | kubel-get-pod-logs | Logy podu | | =d= | kubel-describe-resource | Describe | | =D= | kubel-delete-resource | Smazat zdroj | *** Příklad workflow 1. =SPC o k= — otevře kubel s aktuálním kontextem 2. Vyber namespace (kubel zobrazí seznam) 3. =l= na podu — zobrazí logy 4. =E= na podu — otevře shell v podu přes vterm *** Tipy - Kubeconfig musí být správně nastaven (=~/.kube/config= nebo =$KUBECONFIG=) - Pro přepínání kontextů použij =kubel-set-context= * Tier 2 — Kvalita života ** org-clock — Sledování času Vestavěná funkce org-mode pro sledování času stráveného na úkolech. Konfigurace přidává persistenci a přehledný reporting. *** Keybindings | Klávesa | Příkaz | Popis | |---------+-------------------+--------------------------| | =, C i= | org-clock-in | Začít měřit | | =, C o= | org-clock-out | Ukončit | | =, C r= | org-clock-report | Tabulka odpracovaného | | =, C d= | org-clock-display | Zobrazit časy v bufferu | *** Příklad workflow 1. Na org heading: =, C i= — začne měření 2. Pracuj na úkolu 3. =, C o= — ukončí měření, zapíše LOGBOOK 4. =, C r= — vloží clocktable s přehledem časů *** Tipy - =org-clock-persist= ukládá stav přes restart Emacsu - Formát =h:mm= — hodiny a minuty, ne dny - Nulové záznamy se automaticky mažou ** combobulate — Strukturální editace Tree-sitter navigace a editace po syntaktických uzlech. Funguje v Pythonu, Go, JS, TypeScriptu. *** Keybindings | Klávesa | Příkaz | Popis | |---------+--------------------------------+--------------------------| | =C-M-n= | combobulate-navigate-next | Další sourozenec | | =C-M-p= | combobulate-navigate-previous | Předchozí sourozenec | | =C-M-u= | combobulate-navigate-up | Rodičovský uzel | | =C-M-d= | combobulate-navigate-down | Potomek | *** Příklad workflow 1. Otevři Python soubor s funkcemi 2. Kurzor na =def= — =C-M-n= přeskočí na další funkci 3. =C-M-u= — přejde na třídu obsahující funkci 4. =C-M-d= — vstoupí do prvního potomka (první metoda) *** Tipy - Vyžaduje tree-sitter gramatiky pro daný jazyk - V Go funguje na =func=, =if=, =for= blocích ** iedit — Editace více výskytů Označí všechny výskyty slova pod kurzorem a umožní je editovat simultánně. *** Keybindings | Klávesa | Příkaz | Popis | |-----------+-------------+----------------------------| | =SPC s e= | iedit-mode | Zapnout/vypnout iedit | *** Příklad workflow 1. Kurzor na proměnné =counter= 2. =SPC s e= — všechny výskyty =counter= se zvýrazní 3. Edituj — změna se projeví na všech místech najednou 4. =SPC s e= znovu — ukončí iedit *** Tipy - Pro omezení rozsahu: nejdřív vyber region, pak =SPC s e= - Kombinuj s =C-;= (embark) pro komplexnější refactoring ** vundo — Vizuální undo Zobrazí undo historii jako strom s větvemi. Umožňuje navigovat mezi různými stavy souboru. *** Keybindings | Klávesa | Příkaz | Popis | |---------+--------+--------------------------| | =SPC u= | vundo | Otevřít undo tree | *** Příklad workflow 1. Udělej několik změn v souboru (edituj, undo, edituj jinak) 2. =SPC u= — zobrazí se strom s větvemi 3. Šipkami naviguj mezi stavy, =RET= potvrdí vybraný stav 4. =q= zavře vundo *** Tipy - Unicode symboly pro přehledný strom (=vundo-unicode-symbols=) - Doom =undo= modul zajišťuje undo-fu — vundo ho doplňuje vizuální navigací ** breadcrumb — Kontext v header-line Zobrazuje aktuální pozici v kódu (funkce, třída, metoda) v header-line bufferu. *** Příklad workflow Automaticky se aktivuje v =prog-mode= a =cperl-mode=. Při navigaci kódem vidíš v horní liště např. =MyClass > my_method > if block=. *** Tipy - Nepotřebuje LSP — pracuje s imenu - Užitečné při navigaci ve velkých souborech * Tier 3 — Doplňkové ** org-anki — Anki flashcards Exportuje org headings jako Anki kartičky. Heading = přední strana, obsah = zadní strana. *** Keybindings | Klávesa | Příkaz | Popis | |---------+-----------------------+------------------------| | =, A s= | org-anki-sync-entry | Sync aktuální heading | | =, A S= | org-anki-sync-all | Sync vše | | =, A d= | org-anki-delete-entry | Smazat kartičku | *** Příklad workflow 1. V org souboru: #+begin_example * Co je CIDR notace? Způsob zápisu IP adres s prefixem sítě, např. 192.168.1.0/24. #+end_example 2. =, A s= — sync do Anki decku "Emacs" 3. Anki musí běžet s AnkiConnect pluginem *** Tipy - Výchozí deck: "Emacs" — změň v konfiguraci podle potřeby - Anki + AnkiConnect musí běžet lokálně (port 8765) ** org-ql — Query language pro org Vyhledávání v org souborech pomocí s-expression dotazů. Silnější než org-agenda filtry. *** Keybindings | Klávesa | Příkaz | Popis | |-----------+----------------+--------------------------| | =SPC s q= | org-ql-search | Interaktivní dotaz | | =SPC s Q= | org-ql-view | Uložené pohledy | *** Příklad workflow 1. =SPC s q= — zadej dotaz: #+begin_example (and (todo "TODO") (tags "work") (deadline :to today)) #+end_example 2. Zobrazí se všechny pracovní TODO s deadline dnes 3. Plain-text syntax funguje taky: =todo:TODO tags:work deadline:to=today= *** Tipy - Kombinuj s =org-ql-view= pro ukládání častých dotazů - Podporuje regulární výrazy v =regexp= predikátu ** calfw — Vizuální kalendář Zobrazuje org-agenda události v měsíčním kalendáři. *** Keybindings | Klávesa | Příkaz | Popis | |-----------+-------------------------+--------------------| | =SPC o C= | cfw:open-org-calendar | Otevřít kalendář | *** Příklad workflow 1. =SPC o C= — otevře měsíční pohled 2. Šipky pro navigaci mezi dny/týdny 3. Události z org-agenda se zobrazí v buňkách *** Tipy - Po org-caldav sync zobrazí i události z CalDAV serveru - =M= přepne na měsíční, =W= na týdenní pohled ** org-roam-ui — Graf poznámek Webové rozhraní zobrazující graf propojení org-roam poznámek v prohlížeči. *** Keybindings | Klávesa | Příkaz | Popis | |-------------+--------------------+----------------------| | =SPC n r u= | org-roam-ui-mode | Spustit/zastavit UI | *** Příklad workflow 1. =SPC n r u= — spustí lokální server 2. Otevře se prohlížeč s interaktivním grafem 3. Kliknutí na uzel otevře poznámku v Emacsu 4. Graf se aktualizuje při ukládání souborů *** Tipy - Synchronizuje téma s Emacsem (=org-roam-ui-sync-theme=) - Sleduje aktuální buffer (=org-roam-ui-follow=) ** dirvish — Moderní správce souborů Nahrazuje dired moderním rozhraním s náhledy, ikonami a git integrací. *** Keybindings | Klávesa | Příkaz | Popis | |---------+---------------------------------+--------------------------| | =h= | dired-up-directory | Nahoru | | =l= | dired-find-file | Otevřít | | =s= | dirvish-quicksort | Řazení | | =TAB= | dirvish-subtree-toggle | Rozbalit/sbalit adresář | | =q= | dirvish-quit | Zavřít | | =M-f= | dirvish-history-go-forward | Historie vpřed | | =M-b= | dirvish-history-go-backward | Historie zpět | *** Příklad workflow 1. =SPC .= (find file) nebo =SPC o -= (dired) — dirvish přebírá dired 2. =TAB= na adresáři — rozbalí obsah inline (subtree) 3. =h/l= navigace jako v rangeru 4. Git status se zobrazuje ikonami vedle souborů *** Tipy - Atributy zahrnují nerd-icons, git-msg, file-time, file-size - Boční panel: 35 znaků šířka * BibTeX / Citar — Správa literatury Citar je součástí Doom biblio modulu. Slouží ke správě bibliografických referencí, citací a poznámek k článkům. ** Instalace a setup Citar je nainstalován automaticky (Doom biblio modul v =init.el=). Konfigurace: - Bibliografie: =~/org/references.bib= - Poznámky: =~/org/notes/= - PDF články: =~/org/papers/= Vytvoř tyto adresáře a =references.bib= soubor: #+begin_src shell mkdir -p ~/org/notes ~/org/papers touch ~/org/references.bib #+end_src ** Keybindings | Klávesa | Příkaz | Popis | |-----------+------------------------+----------------------| | =SPC b b= | citar-open | Otevřít referenci | | =SPC b i= | citar-insert-citation | Vložit citaci | | =SPC b n= | citar-open-notes | Poznámky k článku | | =SPC b r= | citar-refresh | Obnovit bibliografii | ** Workflow: citace v org dokumentech 1. Stáhni BibTeX záznam článku (z Google Scholar, DOI...) 2. Vlož do =~/org/references.bib= 3. V org dokumentu: =SPC b i= — vyber referenci z minibufferu 4. Citar vloží citační klíč: =[cite:@author2024]= ** Workflow: poznámky k článkům 1. =SPC b b= — otevře PDF článku z =~/org/papers/= 2. =SPC b n= — otevře/vytvoří poznámkový soubor v =~/org/notes/= 3. Kombinuj s org-noter pro anotace přímo v PDF *** Tipy - BibTeX soubory exportuj z Zotero nebo přímo z Google Scholar - =SPC b r= po přidání nových záznamů do =.bib= souboru * Grammar check (LanguageTool) LanguageTool kontroluje gramatiku a styl textu. Podporuje češtinu. ** Instalace #+begin_src shell # Stáhni LanguageTool mkdir -p ~/languagetool cd ~/languagetool wget https://languagetool.org/download/LanguageTool-stable.zip unzip LanguageTool-stable.zip # JAR musí být na ~/languagetool/languagetool-commandline.jar #+end_src ** Keybindings | Klávesa | Příkaz | Popis | |-----------+----------------------+--------------------------| | =SPC t g= | langtool-check | Zkontrolovat buffer | | =SPC t G= | langtool-check-done | Zrušit zvýraznění | ** Příklad workflow 1. Napiš text v org nebo markdown 2. =SPC t g= — LanguageTool zvýrazní chyby 3. Kurzor na chybu — zobrazí návrh opravy 4. =SPC t G= — vyčistí zvýraznění po opravách ** Tipy - Výchozí jazyk: čeština (=cs=) - Pro anglické texty: =M-x langtool-check= s argumentem "en" - Vyžaduje Javu (JRE) * Obecné tipy pro kombinaci nástrojů - *Refactoring:* =SPC s p= (ripgrep) → =C-c C-p= (wgrep) → edituj → =C-c C-c= uloží do všech souborů - *Org workflow:* org-caldav sync (=SPC o c=) → calfw zobrazení (=SPC o C=) → org-clock měření (=, C i=) - *Studium:* citar otevře článek (=SPC b b=) → org-noter anotace (=SPC o n=) → org-anki kartičky (=, A s=) - *Code navigation:* breadcrumb v header-line + combobulate (=C-M-n/p/u/d=) + iedit (=SPC s e=) - *Kubernetes:* kubel (=SPC o k=) + envrc pro per-project kubeconfig