GNU Emacs - vždy je čo vylepšiť - #2 - Dash

20.09 | 17:03 | Richard | Richard

V minulej časti o vylepšeniach Emacsu sme si uviedli pár univerzálnych rozšírení. Dnes sa pozrieme iba na jedno, ktoré uľahčuje život programátorom. Dash.

1 Zeal

Niektorým programátorom vyhovuje zadať do vyhľadávača opis problému, alebo kľúčové slová a ich preferovaný vyhľadávací nástroj ich "obšťastní" hádam relevantnými výsledkami.
A potom sú i takí ako ja, ktorí majú radi všetko v offline verzii. Mať niečo na disku a nespoliehať sa na odkaz na internete, ktorý ľahko môže "vyhniť" (aj keď v prípade dokumentácie k programovacím jazykom to veľmi nehrozí), to prináša určitú mieru uspokojenia.

Osobne by som to prirovnal k zážitkom zo základnej školy, keď som nosil zubný strojček a chodil som ráno na jeho kontroly. A prišiel som domov už pred obedom, ale do školy som pochopiteľne nešiel. Namiesto toho som jazdil osamotene na bicykli na sídlisku, kde mimo vyučovania bolo nesmierne veľa detí (no proste '80-te roky), a to mi prinášalo úprimnú radosť. Proste byť zdravý a pritom byť vonku, počas školy, legálne. A tá nezvyčajná samota bola tiež super.

Na prehliadanie offline dokumentácie je dostupný projekt Zeal. Rozšírený program je napr. v repozitároch Debianu

sudo apt-get install zeal

Jedná sa o šikovný program, v ktorom je možné si stiahnuť databázy syntaxe príkazov pre všemožné jazyky.

Program umožňuje "fuzzy" hľadanie príkazov, a podľa typu a kvality dokumentácie renderuje stránku so syntaxou, príkladmi.

Samotné docset-y sú uložené (predvolene) v ~.local/share/Zeal/Zeal/docsets/.

No a týmto by sa dal aj tento príspevok ukončiť. Ak by sme to nechceli vylepšiť pre GNU Emacs.

 

2 Dash, helm-dash

Dash a najmä jeho verzie pre framework helm nazvaná príhodne helm-dash dokáže hľadať v spomínaných docsetoch. A zobrazovať ich pomocou eww, čo je emacsový internetový prehliadač.

Samotný helm-dash je najlepšie inštalovať pomocou manažéra rozšírení, nakoľko potrebuje k svojej práci i dash-docs, pochopiteľne helm a konečne cl-lib.

Upravíme si náš .emacs, prípadne hook, ktorý sa spúšťa pri práci s tým-ktorým súborom určitého programovacieho jazyka, na ukážku použijeme skriptovací tcl/tk:

(require 'helm-dash)
(helm-dash-activate-docset "Tcl")
(setq dash-docs-docsets-path "~/.local/share/Zeal/Zeal/docsets/")
(setq helm-dash-browser-func 'eww)
(setq helm-dash-enable-debugging nil)
(setq dash-docs-enable-debugging nil)

Myslím, že nie je potrebné opisovať, čo ktorý príkaz robí.

Tak si to vyskúšame. Otvorím súbor .tcl a kurzor umiestnim na nejakú funkciu, kľúčové slovo, konštantu… a zavolám funkciu helm-dash-at-point (prípadne nejakú definovanú klávesovú skratku).

A hurá, udeje sa magic a zobrazí sa nám zoznam s možnými výskytmi (ak by sme mali aktivovaných viac docsetov, tak by sme napr. mali možnosť vybrať printf pre bash a pre C…).

A nakoniec si pekne prečítame dokumentáciu a čo to z nej uchmatneme.

Samotné docsety je možné updatovať pomocou dash-docs-update-docset v Emacse, alebo hoci aj cez samotný Zeal.

A tu by sme mohli skončiť.

 

3 Kľúčové slová z docsetov ako slovník pre doplňovanie

Tak ešte jedna šikovná vec.
Emacs, podobne ako iné IDE, dokáže doplňovať slová, príkazy, …, pokiaľ je zadaných pár ich prvých písmen (predvolene 3). Na to sa používa staršie rozšírenie auto-complete, či novší company-mode.
Ja som od začiatkov používal auto-complete a keď sa aj objavilo company-mode, z rýdzej lenivosti som po ňom nesiahol.
Auto-complete používa, podľa nastavení, tri zdroje dopĺňania:

Pokusne si nahráme súbor pre arduino a vidíme napríklad, aké máme možnosti pre (v tomto ilustračnom príklade) knižnicu tft.

Hmm, čo takto tieto kľúčové slová dať do slovníka pre doplňovanie?

Nájdeme ich v:
~/.local/share/Zeal/Zeal/docsets/Arduino.docset/Contents/Resources/Tokens.xml

A samotné slová vyextrahujeme pomocou:

sed -n '/Name/{s/.*<Name>//;s/<\/Name.*//;p;}' Tokens.xml

Získame tak toto:

Súbor uložíme ako ~/.emacs.d/elpa/auto-complete-20170124.1845/dict/arduino-mode a máme to.

 

Takže na dnes je to všetko. Nabudúce si povieme ešte čo-to o ďalších vylepšeniach, na ktoré som si navykol.