docs: add emacs-extensions.org — detailed guide for new packages
This commit is contained in:
471
notes/emacs-extensions.org
Normal file
471
notes/emacs-extensions.org
Normal file
@@ -0,0 +1,471 @@
|
||||
#+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
|
||||
Reference in New Issue
Block a user