Jednoduché plánovanie a agenda, nielen v Emacs-e

26.12.2024 | 09:16 | Richard | Richard

Aplikácií na plánovanie času a pripomienok je neúrekom. Textových i grafických. Sólo aplikácií a tiež ako súčasť veľkých programov. A dnes sa zamieriame na program s názvom „pal“.

 

Užívateľ Emacs-u má predsa org-mode…?

Je to tak. Hoci používam Emacs na všetko, a hoci Emacs obsahuje mocný nástroj – org-mode, ktorý mimochodom zvládne všetko od tabuľkového procesora po písanie TeX dokumentov, a tento má úžasné možnosti plánovanie, agendy, štruktúrovaných TODO listov, filtrovania, prepojenia s hocičím – paradoxne na agendu ho nepoužívam.

V pradávnej minulosti mi stačilo, keď pri spustení terminálu nejaký program vypísal plány na dnešný a najbližšie dni. A práve na to som používal program pal. Podstatné veci naštastie stále dokážem udržať v hlave.

 

Pal

… je program pre linuxovú konzolu. Podobný ako prastarý cal, ale s nejakými vylepšeniami. A hlavným, že človek si môže vytvoriť niekoľko „kalendárov“, čo je de-facto zoznam udalostí priradených k dátumu a tiež uviesť zoznam úloh, ktoré sa budú, až do zmazania, pripomínať pri spustení programu.

Ak teda spustíme len príkaz pal, v konzole emulátora terminálu, tak dostaneme náhľad na kalendár. O niečo lepšie je použitie pal -r <od>-<do>, kde si môžeme vypísať i úlohy pre rozsah dní.

Obr. 0: pal a dnešné úlohy

 

pal.conf

Základom všetkého je dobre zdokumentovaný súbor pal.conf, nachádzajúci sa v ~/.pal/. Ten nás poučí, že je možné mať niekoľko kalendárov, ktoré sa „aktivujú“ príkazom file <kalendár>.pal. Napr. ja mám svoj osobný, t.j. zoznam úloh trvalých i spojených s dátumom, a ešte kalendár s meninami. Len dodám, že kalendár(e) v súbore pal.conf je akýsi „defaultný“, ktorý sa zobrazí pri volaní pal bez parametrov, ale aj iné, ktoré sa zobrazia pri explicitnom zadaní názvu kalendáru. Príklad uvediem neskôr, ako to používam v conky. Takisto je možné mať niekoľko .conf súborov.

pal.conf obsahuje ešte definície farieb, čo je vhodné, ak je užívateľ majiteľom farebného monitora (zažil som časy, keď to vôbec, ale vôbec nebolo bežné), definovanie 1. dňa v týždni, formát dátumu a iné.

 

<kalendár>.pal

Jedná sa o jednoduchý textový súbor, umiestnený predvolene v ~/.pal/, ktorý má nasledovnú podobu. Jedna udalosť na jednom riadku, pričom riadkové zlomy (v rámci poznámky) nie sú povolené, nuly namiesto dátumu definujú pravidelné opakovania:

RRRRMMDD Upozornenie č. 0  
RRRRMMDD Upozornenie č. 1  
RRRRMMDD Upozornenie č. 2  
RRRRMMDD Upozornenie č. 3

TODO Úloha č. 0
TODO Úloha č. 1
TODO Úloha č. 2
TODO Úloha č. 3

Napríklad (dátumy nemusia byť utriedené, ale dobrý textový editor to samozrejme spraví za nás):

20250125 Kúpa predraženej diaľničnej známky  → toto sa pripomenie len raz
00000108 Severín (meniny)	→ a toto 
00000109 Alexej	(meniny)        → a toto každoročne
00000001 Odpísať energie k prvému dňu každého mesiaca  → a táto pripomienka každý 1. deň v mesiaci

TODO Vybrať všetky peniaze z účtu a dať do ponožky
TODO Kúpiť si Maneki-Neko, nech zvládneme nový rok
DONE A toto sa už stalo!

 

Praktické použitie

No načo by nám bol kalendár a pripomienkovač, ak by nám pravidelne nepripomienkoval, že áno?

Ja som to kedysi riešil tak, že v ~/.bashrc/ som mal príkaz pal -r 1-2, ktorý mi pri otvorení okna (alebo tabu) konzoly vypísal udalosti na dnes a zajtrajšok. A tiež je dobré mať takto informáciu, čo sa na nás chystá.

Riešením by bol aj nejaký cron a výstup z príkazu pal -r… zobraziť pomocou nofifikačného démona.

Ja osobne to používam takto:

Na ploche mám vždy bežiace conky, ktoré sa updatuje 1× za minútu. A v ňom mám príkaz na spustenie shellového príkazu - ale to ešte zriedkavejšie (veď načo častejšie).

${offset 0}${color}TODO List
${offset 0}${color black} ${execi 3600 pal -c 0 -r 1-3 --nocolor | tail -n +2 | head -n -1}

${offset 0}${color}Meniny dnes
${offset 0}${color black} ${execi 3600 pal -f ~/.pal/sk_cal.conf -r 1 -c 0 --nocolor | tail -n 2 | head -n 1}

Takže: pomocou execi 3600 sa spustí 1× za hodinu príkaz pal -c 0 -r 1-3 --nocolor | tail -n +2 | head -n -1, ktorý oreže nefarebný výstup z pal na zobrazenie relevantných častí. A analogicky aj vypíše, kto má dnes meniny.

„Rozblurované“ to vyzerá takto:

Obr. 1: Conky na pracovnej ploche

Ešte dodám, že editovanie .pal súborov nemusí užívateľ robiť v textovom editore, po spustení pal -m program ponúka akýsi interaktívny režim zadávanie, editácie a mazania údajov. Nie je to ako pokročilý calcurse alebo kdejaký plánovač (napríklad to mal tuším (možno i stále má) KMail (používal som to okolo roku 2004 ☺)).

Ale na moje poznámky to bohate stačí. Navyše si skriptom posielam .pal na dropbox a ten súbor/priečinok mám jedným klikom prístupný na ploche mobilu. Keby náhodou.

Ostatné veci držím (zatiaľ) v hlave. A na pokročilé poznámky, ktoré ale nesúvisia s agendou a denným plánovaním, používam Zettelkasten (viď starší zápisok).

 

A zase späť k Emacsu

Celý život/príroda sa deje v cykloch. Niekedy je podmienka cyklu daná a jasná hneď, niekedy sa zmení mnohokrát. A v takomto cykle sa vrátim k Emacsu, z prvej kapitoly.

Tie .pal súbory sú tak primitívne, že nie je potrebné na nich používať žiadny extra nástroj. Avšak napriek tomu som si ich editovanie chcel zpríjemniť. Tak som si na to vytvoril tzv. mode, t.j. malý program v Emacs lispe, ktorý do Emacsu pridá par funkcionalít po otvorení .pal súboru.

 

Vytvoril som niekoľko interaktívnych funkcií, ktoré:

Plus je tam nejaké farebné zvýrazňovanie (až dvoch) kľúčových slov.

 

Mnohé (needitačné) funkcie sú vlastne volaniami programu pal, s výstupom do ďalšieho buffra.

Obr 2: Výber z interaktívnych funkcií

Nakoľko nemám ambíciu z toho vytvárať nejaký inštalovateľný balík, tak som do konfiguračného súboru pre Emacs (môže to byť historicky ~/.emacs, alebo hoci ~/.emacs.d/init.el) pridal:

(add-to-list 'load-path "/home/richard/.emacs.d/vendor/pal-mode") 
(setq auto-mode-alist (cons '("\\.pal\\'" . pal-mode) auto-mode-alist)) 
(autoload 'pal-mode "pal-mode" "Pal editing mode." t)

Čo spôsobí načítanie .el súboru pri otvorení .pal. Otvorenie toho súboru môže byť „ručné“, ale napríklad ja som si v Emacse vytvoril na to položku v jednom osobnom menu (ako na také menu – to možno bude obsahom iného blogu).

 

Epilóg

Parafr. „Toľko námahy a pritom je to taká…“

Ale nie – pre mňa to má zásadný význam. Rýchlo sa dostanem k zoznamu úloh, zmením, vyhľadám. Trochu sa pocvičím v menej tradičnom jazyku. Všetko zo všeobjímajúceho prostredia obľúbeného programu. Toto mám rád, keď na čo najviac úloh používam jeden program.

Teraz to znie protichodne – jednak mám rád malé programy a súčasne adorujem veľký balík ako Emacs?

Raz som o tom písal v jednom zápisku, a patrí sa spomenúť to znovu:

„Emacs ide touto cestou: minimalisticky zobrazuje a edituje text. Minimalisticky robí kontrolu preklepov (napr. pomocou aspell). Minimalisticky automaticky dopĺňa text. Minimalisticky robí záložné kópie.

V sume to už nebude minimalistické. Avšak sústava nástrojov minimalistická určite je.“

Preto Emacs je minimalistický nástroj, podobne, ako napríklad shell. Rozdiel je v tom, aký kód (teda v akom jazyku) sa vyhodnocuje.

A samozrejme, trochu „v tom má prsty“ i človečenský nepokoj. A darmo sa varuje pred „šahaním na niečo, čo funguje“! Je to totiž veľmi lákavé - ja to vidím aj v svojej pracovnej praxe, kde sa nám podarí vyladiť sústavu strojov, ktoré majú veľa mechanických i elektronických záludností… a vždy to chce niekto trochu pozmeniť. A často sa to aj pobabre.

Tento nepokoj je hybnou silou spoločnosti.

Link na stiahnutie: https://gitlab.com/my_elisp/pal-mode/

PF '25. 🥳🍾🍻🥂🎆🎇