Files
emacs-org/notes/emacs-extensions.org

472 lines
17 KiB
Org Mode

#+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