diff --git a/notes/emacs-new-features.org b/notes/emacs-new-features.org index 06ec142..dd8f9bf 100644 --- a/notes/emacs-new-features.org +++ b/notes/emacs-new-features.org @@ -1,169 +1,244 @@ -#+TITLE: Doom Emacs — testovací průvodce novými featurami +#+TITLE: Nové featury Doom Emacs — testovací průvodce #+DATE: 2026-02-23 -#+STARTUP: showall +#+AUTHOR: Daneel -* link-hint — rychlá navigace po odkazech -Umožňuje otevřít nebo zkopírovat jakýkoli odkaz v bufferu pomocí avy-style přeskakování. +Tento dokument popisuje všechny nové featury přidané do konfigurace. +Po každé změně je nutný =doom sync= + restart Emacsu. -** Prerekvizity -- =doom sync= proběhl úspěšně -- Buffer obsahuje alespoň jeden odkaz (org link, URL, file path) +* Prerekvizity -** Jak otestovat -1. Otevři libovolný org soubor s odkazy (např. =inbox.org=) -2. Stiskni =SPC j k= — měly by se objevit avy hinty na všech odkazech -3. Vyber hint → odkaz se otevře v prohlížeči/Emacsu -4. Stiskni =SPC j K= → vyber odkaz → URL se zkopíruje do clipboard +Než testuješ cokoli: -** Ověření -- =SPC j k= zobrazí hinty a odkaz se otevře -- =SPC j K= zkopíruje URL (ověř přes =C-y= / paste) +#+begin_src sh +cd ~/.doom.d # nebo kde máš doom config +doom sync +#+end_src -* Avy keybindings — skoky na znaky a řádky -Rozšířené avy bindingy pod =SPC j= pro rychlou navigaci v bufferu. +Pak restartuj Emacs. Bez toho nové balíčky nejsou dostupné. -** Prerekvizity -- =doom sync= proběhl úspěšně +* 1. link-hint — otevírání odkazů bez myši -** Jak otestovat -1. Otevři libovolný soubor s textem -2. =SPC j j= → zadej 2 znaky → avy zobrazí hinty na výskytech -3. Vyber hint → kurzor skočí na pozici -4. =SPC j l= → avy zobrazí hinty na řádcích → vyber řádek +Co dělá: zvýrazní všechny viditelné odkazy v bufferu a přiřadí jim +jednopísmenné zkratky. Stisknutím písmene odkaz otevřeš nebo zkopíruješ URL. -** Ověření -- Kurzor se přesune na vybranou pozici +Prerekvizita: =doom sync= dokončen. -* olivetti-mode — distraction-free psaní -Centruje text na šířku 90 znaků pro pohodlné čtení a psaní. +Jak testovat: +1. Otevři buffer s URL (Markdown, org, nebo jakýkoli text s http://) +2. Stiskni =SPC j k= → link-hint zvýrazní všechny odkazy +3. Stiskni písmeno vedle odkazu → odkaz se otevře v prohlížeči +4. Pro kopírování URL: =SPC j K= → stiskni písmeno → URL je v clipboardu -** Prerekvizity -- =doom sync= proběhl úspěšně +Ověření: pokud =SPC j k= zobrazí barevné písmeno u každého odkazu, funguje. -** Jak otestovat -1. Otevři org soubor — olivetti se zapne automaticky (hook) -2. Ověř, že text je vycentrovaný s okraji po stranách -3. Otevři markdown soubor — stejné chování -4. V jiném režimu (např. elisp): =SPC t o= pro manuální toggle +* 2. Avy — skok na libovolné místo v bufferu -** Ověření -- Org/markdown buffery mají centrovaný text na ~90 znaků -- =SPC t o= zapíná/vypíná olivetti v libovolném bufferu +Co dělá: zvýrazní každý výskyt dvou zadaných znaků a skoční na vybrané +místo bez pohybu myší. -* org-modern — vizuální vylepšení org-mode -Nahrazuje hvězdičky nadpisů symboly (◉○✸✿), vylepšuje tabulky a checkboxy. +Prerekvizita: Doom má avy v =:editor snippets= — je dostupný automaticky. -** Prerekvizity -- =doom sync= proběhl úspěšně - -** Jak otestovat -1. Otevři org soubor s nadpisy různých úrovní -2. Zkontroluj, že =*= jsou nahrazeny symboly ◉, ○, ✸, ✿ -3. Vytvoř tabulku — měla by mít vylepšený vizuální styl -4. Vytvoř checkbox =[X]= / =[ ]= — měl by být stylizovaný - -** Ověření -- Nadpisy používají Unicode symboly místo hvězdiček -- Tabulky a checkboxy vypadají vizuálně lépe - -* org-fragtog — automatický render LaTeX fragmentů -Při přesunutí kurzoru na/z LaTeX fragmentu se automaticky zobrazí/skryje náhled. - -** Prerekvizity -- =doom sync= proběhl úspěšně -- LaTeX nainstalovaný (=latexmk= v PATH) - -** Jak otestovat -1. Otevři org soubor a vlož LaTeX fragment: =$E = mc^2$= -2. Přesuň kurzor pryč z fragmentu → měl by se vyrenderovat jako obrázek -3. Přesuň kurzor zpět na fragment → zobrazí se zdrojový kód - -** Ověření -- LaTeX fragmenty se automaticky renderují/skrývají při pohybu kurzoru - -* org-super-agenda — skupiny v agenda view -Rozděluje agenda view do pojmenovaných skupin: Dnes, Brzy, Čekám, Kyndryl, ZTJ, Ostatní. - -** Prerekvizity -- =doom sync= proběhl úspěšně -- Existují org soubory s TODO položkami (různé stavy, tagy, deadlines) - -** Jak otestovat -1. Přidej několik TODO s různými vlastnostmi: - - =TODO= s deadline dnes - - =TODO= s deadline za 2 dny - - =WAIT= položka - - =TODO= s tagem =:kyndryl:= - - =TODO= s tagem =:ztj:= -2. Otevři agenda: =SPC o A a= (nebo =M-x org-agenda=, volba =a=) -3. Zkontroluj, že položky jsou rozděleny do skupin - -** Ověření -- Agenda zobrazuje sekce: Dnes, Brzy, Čekám, Projekt Kyndryl, ZTJ, Ostatní - -* org-noter — PDF anotace -Umožňuje vytvářet org poznámky synchronizované s pozicí v PDF dokumentu. - -** Prerekvizity -- =doom sync= proběhl úspěšně -- Existuje PDF soubor k anotování - -** Jak otestovat -1. Otevři PDF soubor v Emacsu (=pdf-view-mode=) -2. =SPC o n= → spustí org-noter session (vytvoří/otevře org soubor) -3. Naviguj na stránku v PDF -4. =SPC o N= → vloží poznámku na aktuální pozici - -** Ověření -- Emacs se rozdělí horizontálně (PDF vlevo, org vpravo) -- Poznámky jsou provázané s pozicí v PDF - -* GPTel rewrite — vylepšení textu přes AI -Odešle vybraný region do GPTel s instrukcí "vylepši" a nahradí odpovědí. - -** Prerekvizity -- =doom sync= proběhl úspěšně -- Env proměnná =OPENWEBUI_API_KEY= je nastavena -- AI backend (ai.apps.sukany.cz) je dostupný - -** Jak otestovat +Jak testovat: 1. Otevři soubor s textem -2. Označ region (=v= + pohyb v evil normal mode) -3. =SPC o g r= → region se odešle do GPTel → odpověď nahradí region -4. V org souboru: umísti kurzor na heading, =SPC o g p= → heading + obsah se odešle jako kontext do GPTel chatu +2. Stiskni =SPC j j= → zadej dva znaky (např. =th=) → Avy zvýrazní shody +3. Stiskni písmeno u cílového výskytu → kurzor skočí tam +4. Pro skok na řádek: =SPC j l= → zadej písmeno u řádku → skok -** Ověření -- =SPC o g r= nahradí vybraný text vylepšenou verzí -- =SPC o g p= otevře GPTel chat s obsahem heading jako kontextem +Ověření: kurzor přeskočí na vybranou pozici bez scrollování. -* git-link — kopírování URL na Gitea -Generuje webový odkaz na aktuální soubor/řádek v Gitea repozitáři. +* 3. olivetti-mode — klidný distraction-free mód -** Prerekvizity -- =doom sync= proběhl úspěšně -- Soubor je v git repozitáři s remote na =git.apps.sukany.cz= +Co dělá: horizontálně centruje text na šířku 90 znaků a ukryje postranní +rušivé prvky. Zapíná se *ručně* — automatické zapínání by rozbilo corfu. -** Jak otestovat -1. Otevři soubor v git repozitáři (např. v emacs-doom) -2. =SPC g y= → zkopíruje URL na aktuální soubor/řádek do clipboard -3. =SPC g Y= → zkopíruje URL na aktuální commit +Prerekvizita: =doom sync=, balíček =olivetti= nainstalován. -** Ověření -- URL v clipboard ukazuje na =git.apps.sukany.cz/...= a je funkční v prohlížeči +Jak testovat: +1. Otevři org nebo Markdown soubor +2. Stiskni =SPC t o= → text se vycentruje na střed okna +3. Stiskni =SPC t o= znovu → vrátí se do normálního layoutu -* Forge — Gitea integrace v Magitu -Přidává podporu pro Gitea issues, PRs a notifikace přímo v Magit. +Ověření: text se viditelně přesune od levého okraje do středu. -** Prerekvizity -- =doom sync= proběhl úspěšně -- Gitea API token vytvořen a uložen v =~/.authinfo=: - : machine git.apps.sukany.cz login daneel^forge password +*Důležité:* olivetti nesmí být auto-zapnuto v org bufferech — pokud ho +zapneš a pak otevřeš corfu popup, může se zobrazit mimo obrazovku. +Zapínej/vypínej ručně dle potřeby. -** Jak otestovat -1. Otevři Magit v repozitáři hostovaném na Gitea: =SPC g g= -2. Stiskni =N= (forge notifications) nebo ='= (forge dispatch) -3. =@ l l= — list issues +* 4. org-modern — vylepšený vizuál org-mode -** Ověření -- Forge se připojí ke Gitea API a zobrazí issues/PRs -- Pokud token chybí, Forge zobrazí chybu s instrukcí +Co dělá: nahrazuje ASCII hvězdičky u nadpisů Unicode symboly (◉ ○ ✸ ✿), +zvýrazňuje checkboxy. Aktivuje se *pouze* v souborech (ne v export bufferech). + +Prerekvizita: =doom sync=, balíček =org-modern= nainstalován. + +Jak testovat: +1. Otevři libovolný =.org= soubor +2. Nadpisy by měly mít místo =*= → =◉=, =**= → =○= atd. +3. Checkboxy =[ ]= a =[X]= vypadají jinak + +Ověření org exportu (klíčové): +1. Otevři org soubor s tabulkou a nadpisy +2. =SPC m e l o= (nebo =C-c C-e l o=) → PDF export +3. Export musí proběhnout bez chyby +4. Pokud export funguje, org-modern neinterferuje + +*Poznámka:* =org-modern-table= je záměrně vypnuto — tabulkové overlaye +mohou interferovat s LaTeX exportem. + +* 5. org-fragtog — automatický náhled LaTeX fragmentů + +Co dělá: když kurzor vstoupí do LaTeX fragmentu (=$E=mc^2$=), zobrazí +ho jako obrázek; když kurzor odejde, fragment zůstane jako obrázek. +Aktivuje se pouze v souborech, ne v export bufferech. + +Prerekvizita: =doom sync=, =org-fragtog= nainstalován, funkční =dvipng= +nebo =imagemagick= na macOS (=brew install imagemagick=). + +Jak testovat: +1. Otevři org soubor +2. Napiš inline LaTeX: =$E = mc^2$= +3. Pohni kurzorem ven z fragmentu → měl by se zobrazit jako obrázek +4. Pohni kurzorem dovnitř → obrázek zmizí, zobrazí se zdrojový kód + +Ověření: pokud =dvipng= není dostupný, org-fragtog selže tiše +(žádné chybové hlášení, jen nefunguje preview). + +Ověření org exportu: =SPC m e l o= musí stále fungovat. + +* 6. org-super-agenda — skupiny v agenda view + +Co dělá: rozděluje org agenda view do pojmenovaných skupin: +Dnes, Brzy (do 3 dnů), Čekám, Projekt Kyndryl, ZTJ, Ostatní. + +Prerekvizita: =doom sync=, =org-super-agenda= nainstalován. + +Jak testovat: +1. Otevři org agenda: =SPC o A= nebo =C-c a a= +2. Agenda by měla zobrazovat skupiny s názvy místo plochého seznamu +3. Položky s TODO =WAIT= by měly být ve skupině "Čekám" +4. Položky s tagem =:kyndryl:= nebo =:work:= ve skupině "Projekt Kyndryl" + +Ověření: viditelné nadpisy skupin v agenda bufferu. + +* 7. org-noter — anotace PDF v org-mode + +Co dělá: propojuje PDF soubor s org souborem poznámek. Stránkování +PDF a org poznámek je synchronizováno. + +Prerekvizita: =doom sync=, =org-noter= nainstalován, fungující pdf-tools +(=SPC m P= pro otevření PDF přes pdf-view). + +Jak testovat: +1. Otevři PDF soubor (měl by se otevřít v pdf-view, ne v Preview) +2. Stiskni =SPC o n= → spustí org-noter session +3. Vytvoří nový org soubor poznámek, nebo vybere existující +4. Posouvej PDF → org soubor se synchronizuje s aktuální stránkou +5. Přidej poznámku: =SPC o N= → vloží org heading s pozicí v PDF + +Ověření: org heading obsahuje =:NOTER_PAGE:= property s číslem stránky. + +* 8. GPTel — rewrite regionu a org heading jako kontext + +Co dělá: dvě nové funkce v GPTel: +- =SPC o g r= → pošle označený region s instrukcí "vylepši text" + a nahradí ho odpovědí +- =SPC o g p= → pošle obsah aktuálního org headingu jako kontext + do GPTel chatu + +Prerekvizita: gptel funkční (=SPC o g g= otevírá chat). + +Jak testovat (rewrite): +1. Otevři soubor s textem +2. Označ region (visual mode: =v= pak pohyb) +3. Stiskni =SPC o g r= +4. Počkej — region se nahradí vylepšenou verzí textu + +Jak testovat (org heading): +1. Otevři org soubor +2. Postav kurzor do headingu se zápisem +3. Stiskni =SPC o g p= → obsah headingu se pošle jako kontext do GPTel chatu + +Ověření: zpráva =GPTel: text vylepšen= nebo =GPTel: heading '...' odeslán= +v minibufferu. + +* 9. git-link — kopírování URL na Gitea + +Co dělá: zkopíruje URL aktuální souboru/řádku na Gitea instanci +(=git.apps.sukany.cz=) do clipboardu. + +Prerekvizita: =doom sync=, =git-link= nainstalován, soubor musí být +v git repozitáři s remote na Gitea. + +Jak testovat: +1. Otevři soubor v emacs-doom nebo jiném Gitea repo +2. Postav kurzor na konkrétní řádek +3. Stiskni =SPC g y= → URL zkopírována do clipboardu +4. Ověř pbpaste: otevři terminál, spusť =pbpaste= → mělo by být URL jako: + =https://git.apps.sukany.cz/martin/emacs-doom/src/branch/master/config.el#L42= +5. Pro URL commitu: =SPC g Y= + +Ověření: URL v clipboardu odpovídá aktuálnímu souboru a řádku. + +* 10. Forge — Gitea integrace v Magit + +Co dělá: přidává pull request a issue management přímo do Magit. +Forge musí vědět o Gitea instanci. + +Prerekvizita: =doom sync=, API token v =~/.authinfo=. + +Nastavení tokenu: +1. Přihlas se na =https://git.apps.sukany.cz= +2. Settings → Applications → Generate new token (scope: =repo=) +3. Přidej do =~/.authinfo= (v domovském adresáři): + #+begin_src + machine git.apps.sukany.cz login daneel^forge password + #+end_src +4. Nastav oprávnění: =chmod 600 ~/.authinfo= + +Jak testovat po nastavení tokenu: +1. Otevři Magit: =SPC g g= +2. Stiskni =@= → Forge menu +3. =@ f= → fetch forge data (PRy, issues) +4. =SPC g i= → seznam issues pro aktuální repo + +Ověření: bez tokenu Forge selže s chybou autentizace (očekávané chování). +S tokenem zobrazí PRy a issues z Gitea. + +* Shrnutí klíčových keybindingů + +| Klávesa | Funkce | +|-----------+-------------------------------| +| SPC j k | link-hint — otevři odkaz | +| SPC j K | link-hint — kopíruj URL | +| SPC j j | avy-goto-char-2 | +| SPC j l | avy-goto-line | +| SPC t o | olivetti-mode toggle | +| SPC o n | org-noter | +| SPC o N | org-noter-insert-note | +| SPC o g r | GPTel rewrite region | +| SPC o g p | GPTel org heading jako kontext| +| SPC g y | git-link (kopíruj URL) | +| SPC g Y | git-link-commit | + +* Řešení problémů + +** corfu nefunguje po olivetti +Pokud zapneš olivetti (=SPC t o=) a pak corfu popup zmizí nebo se zobrazí +mimo obrazovku: vypni olivetti (=SPC t o= znovu) a corfu se vrátí. +Olivetti mění vizuální marginy, corfu to nezvládne v kombinaci. + +** org export selže +Ověř že =org-modern-mode= není aktivní v export bufferu: +=M-x org-modern-mode= v normálním org bufferu je OK. +Pokud export stále selhává, zkus =M-x org-modern-mode= (toggle off) +a exportuj znovu — pokud pak funguje, nahlás to. + +** org-fragtog nefunguje (LaTeX preview) +Vyžaduje imagemagick: =brew install imagemagick= +Ověř: =M-x org-toggle-latex-fragment= — pokud to funguje, org-fragtog +by měl fungovat taky. + +** Forge: "Invalid token" +Zkontroluj format =~/.authinfo= — musí být přesně: +=machine git.apps.sukany.cz login daneel^forge password TOKEN= +(bez uvozovek, bez mezer navíc)