tags: software title: Temna strana sily author: rpt date: 2023-06-10 aside: Dovolte bych suse predpokladal, (GOL)Emacs ze vsichni znate tu. Jiz nekolikrat jsem konstatoval, ze ve svate valce editoru stojim jednoznacne na strane vi a jeho klonu, ale neskodi poznat nepritele vic do hloubky. Protentokrat vsak odlozime retardovanou valecnickou retoriku a podivame se prastary kus SW jmenem Emacs www.gnu.org/.../emacs a jeho klony. Nebot kazdy SW ma sve silne a slabe stranky a v podstate jde o to, jak zapadne do toho, cemu se hezky cesky rika pracovni workflow. ## Emacs Nebudu opakovat vse, co se o Emacsu lze dozvedet jinde, napr. ze jde o OS bez slusneho editoru apod. Kdo chce zkusit, pro toho mam nekolik doporuceni. Predevsim se vykaslete na pluginy a pouzivejte vanilla Emacs.[1] Spousta lidi doporucuje pouzivat plugin Evil www.emacswiki.org/.../Evil, ktery od Emacsu prinasi prostredi a prstoklad Vimu. Nedelejte to! Chcete-li pochopit, jak Emacs funguje, je lepsi, alespon zpocatku, pouzivat emacsovsky insert mod (jiny nema) a klavesove zkratky. Maji svou logiku, ac se vi-lainovi muze zdat cizi. Pro zacatek nedoporucuju pouzivat ani Ivy www.emacswiki.org/.../IvyCounselSwiper a podobne pluginy usnadnujici vyhledavani funkci a dalsich veci. Duvody jsou stejne jako u Evil. Tyto veci znesnadnuji pochopit Emacs tak, jak skutecne je. Kdysi jsem se snazil Emacs pouzivat jako hlavni editor a zacal jsem u Spacemacs www.spacemacs.org, tj. Emacs plus Evil plus Ivy plus dalsich milion pluginu, jejichz ovladani je pres veskerou snahu autoru vzajemne ne zcela kompatibilni a zpusobuje zmatek. Castecne poucen jsem instaloval cisty Emacs a narval ho pluginama sam. Vysledek nebyl lepsi, spis naopak. S Vimem mam dost podobnou zkusenost. Je treba volit a pridavat pluginy velmi opatrne. Dale doporucuju pouzivat architekturu server-klient. Tzn. spustit Emacs jako daemona pri spusteni pocitace, pak je spousteni klientu rychlejsi. Zejmena pokud Emacs pouzivate na otevirani souboru odjinud, tedy nikoli primo z Emacsu. Mam radsi Emacs bez listy, nabidek a vstupni obrazovky a tyto veci lze v konfiguracnim souboru snadno vypnout, ale pro zacatek to nedoporucuju.[2] Emacs je cistokrevny GUI program, ackoliv ma i CLI verzi. Pouzivate-li Xorg, neni duvod nepouzivat GUI verzi. CLI neni rychlejsi a GUI se da zjednodusit tak, ze prakticky vypada jako CLI. Kdo s Emacsem zacina, tomu doporucuju standardni vzhled. Kdyz neco clovek nevi, casto se k tomu doklika pres nabidky. Na druhou stranu prijde cas, kdy je dobre se od berlicek odstrihnout. Cloveka to donuti se do programu skutecne ponorit. ## Org-mode Tolik o Emacsu a nyni se presuneme k Org-mode orgmode.org. Tento plugin od Carstena Dominika je duvod, proc mnoho lidi vubec pouziva Emacs. Org-mode je outliner, o kterych jsem tu uz psal pripad-markdown.html. Ale je mnohem vic. Koneckoncu Org-mode ani Emacs samotny se zrovna neridi unixovskou filozofii, aby program delal jednu vec a delal ji dobre. Jenze kazde pravidlo ma smysluplne vyjimky. Org-mode je nepochybne overkill. Tim chci rict, ze umi nakupni seznam, ale kdo by ho k tak primitivnimu ucelu pouzival? Leda s aplikaci do telefonu, ktera pro Org-mode take existuje! Ale seznamy mohou byt mnohem komplikovanejsi a s Org-mode je lze pomerne snadno ridit diky hierarchickemu usporadani. Zdroj je porad TXT soubor, zaroven je k dispozici lehky markup, sofistikovany todo list a system hyperlinku. Hodi se jako nastroj pro dokumentaci, osobni wiki i planovaci kalendar. Nebo vsechno dohromady. A tady se dostavame k jadru veci. Tim je dle meho soudu system jednoho souboru. Vse v jednom dava smysl, pokud je k dispozici nastroj ke snadne manipulaci s komplexnim souborem. Tzn. mit prehled o hlavnich a vnorenych tematech, snadno se dostat k hledanemu, mit moznost vytvaret dilci prehledy. K tomu casove znacky, schedule, deadline, tagy a export do jinych formatu. Diky Org-mode lze skutecne "zit" v jednom souboru. Neznamena to, ze musim nutne mit pouze 1 soubor, spis mit hlavni dokument, jakysi hub, odkud se dostanu ke vsem ostatnim. Prirozene to neni jediny zpusob, jak organizovat sve veci, psat dokumentaci, osobni wiki a jinou beletrii. Obycejny textovy editor a sada unixovskych nastroju nahradi valnou cast vseho, co nabizi Org-mode. Princip jednoho souboru se v tomto pripade zda byt spise nepraktickym, ale dalsi omezeni Org-mode zde neplati. Usporadani TXT souboru je ciste na nas, zadny markup nas neomezuje, s vyjimkou souboru pro calendar(1). Nektere veci, jako export do ruznych formatu, vsak k dispozici nejsou nebo vyzaduji specializovane nastroje jako lowdown(1) ci texinfo(1), jez jdou nad ramec zakladniho systemu a nuti cloveka pouzivat nejaky markup. Terminalovi asketove toto beztak nepotrebuji. Co jde nad ramec souboru sdilenych pres gopher, je od zleho. Jaky je muj verdikt? Vcelku pozitivni. Emacs a Org-mode maji jednu velkou vyhodu: jsou multiplatformni. Kdo je nucen pracovat ve Windows, ma k dispozici presne tentyz nastroj. TXT je samozrejme take univerzalni, ale unixovske nastroje uz nikoliv a me se na Windows nikdy nepodarilo docilit stejne hladkeho workflow. I Vim je multiplatformni, vcetne pluginu, takze neni vylozene nutne presedlat na Emacs. Na druhou stranu Vim a Org-mode nejdou dohromady. Org-mode je sity na miru Emacsu a zadny z vimovskych pluginu ho neumi dobre. Kdo chce uzivat Org-mode, mel by se naucit Emacs. Nyni bude rec o dvou Emacsech, ktere jsou konzistentni s unixovskou filozofii. ## Mg Editor mg(1) Je jednim ze ctyr zakladnich editoru na OpenBSD.[3] Samozrejme jsem ho zkousel, ale nikdy konzistentne nepouzival. Podobne jako vi neumi Unicode. A podobne jako vi je maly rychly a urceny vyhradne k editaci textu. V manualu k nemu je jedna krasna veta, ktera dava odpovedi na vsechny otazky: | It is compatible with emacs because there shouldn’t be any | reason to learn more editor types than emacs or vi(1). ## Vile Dostavame se do neprobadanych koncin. Thomas Dickey z invisible-island.net invisible-island.net je kdyz uz ne tvurcem, tak alespon udrzovatelem nekolika velmi znamych programu. Xterm(1) neni treba predstavovat. Priznivci surfovani na vlnach internetu a gopherove speleologie zajiste znaji lynx(1). Mnohem mene lidi, troufam si tvrdit, zna vile(1) neboli VI Like Emacs. A je to skoda. Jde o cistokrevny vi-like editor, ktery se lehce otrel o emacsovy svet a odnesl si z nej par lepsich napadu. Cistokrevny znamena, ze muzete ocekavat chovani tradicniho vi ci nvi, nikoliv Vim. Proto se budeme nadale bavit jen o tom, co nedela jako vi. Co prvni uderi do oci, je zpusob, jakym vile pracuje s buffery a okny. Tady je Emacs videt asi nejvic a je to dle meho soudu pohodlnejsi zpusob prace s vice soubory nebo s vice pohledy na jeden soubor nez u nvi. Podobne jako u Emacsu lze skrolovat buffer v druhem okne, aniz by bylo treba tam presouvat kurzor. Tento priklad dobre ilustruje emacsovske chapani bufferu jako kontajneru na texty, se kterymi clovek pracuje. Mohou to byt otevrene soubory nebo nove, dosud neulozene odstavce textu ci vystupy externich programu. Naproti tomu nvi pouziva buffery pro ukladani textovych vynatku, nikoliv otevrenych souboru. Ve vile k tomuto ucelu slouzi registry a pristupuje se do nich stejne jako v nvi, tedy s pomoci uvozovek a cisla ci pismena. Take nvi umi editovat vice souboru najednou a umi rozdelit okno na dve casti, pricemz v kazde lze editovat jiny soubor nebo jinou cast souboru. V tomto ohledu ma dokonce vyhodu, umi rozdelit okno i svisle, zatimco vile pouze vodorovne. Ale vile buffery cisluje a umoznuje snadnejsi a interaktivnejsi zpusob, jak mezi nimi prepinat. Dve podtrzitka za sebou prepnou na predchozi buffer. Jedno podtrzitko zobrazi ocislovany seznam bufferu, takze podtrzitko-cislo skoci na prislusny buffer. Hvezdicka zobrazi seznam bufferu v jinem bufferu. Zmeny jsou vazany na buffer, nikoli na okno, takze undo je mozne provest v jinem okne nez puvodni zmenu. Mimochodem, pro vsechny extra funkce vile zavadi emacsovske kontrolni sekvence ^A a ^X. To prvni me trochu mrzi, nebot ve nvi pomerne casto vyuzivam vyhledavani slova pod kurzorem. Na druhou stranu tyto sekvence v kombinaci s tradicnimi prikazy vi casto modifikuji chovani techto prikazu. Dalsi myslenkou prevzatou z Emacsu je major-mode. S touto casti jsem zatim prilis neexperimentoval, ale vsiml jsem si pri editaci javascriptu, ze je takovy major-mode spusten a ze to ma vliv na odsazeni textu. Zjevne vile obsahuje celou radu techto modu uz v zakladu a dalsi se daji naprogramovat, nebot vile dava k dispozici jednoduche API. To se sice neda ani zdaleka srovnat s Elispem nebo Lua, ale chovani editoru jim lze docela dobre ovlivnit. Sekvence M-x v Emacsu umoznuje spustit interni funkci ci prikaz. V Emacsu je vlastne vsechno funkce s internim nazvem a pro nektere z nich existuji zakladni klavesove zkrakty. Ve vile se funkce take daji spustit pomoci nazvu, pres dvojtecku jako standardni vi prikazy. S pomoci techto prikazu se prave programuji pluginy ci konfigurace editoru, coz myslim take kopiruje funkcionalitu Emacsu. Odhodlal jsem se k dlouhodobejsimu pouzivani tohoto editoru a zatim jsem spise prijemne prekvapen. Nejspis je to dano tim, ze jsem se nemusel ucit mnoho noveho. Po vetsinu casu si skutecne vystacim s tim, co znam z (n)vi. Pouzivani bufferu je snadne a hodnotim ho velmi pozitivne. Vetsi interaktivita editoru je nekdy velmi prijemna a jindy zase ne. Trochu me to zaskocilo u substituce, kde se program pta na jednotlive promenne prikazu substitute. Soucasti filozofie (n)vi je prikaz jako kratky program, coz ve nvi vyborne podporuje miniokno s prikazovou historii, jez hojne vyuzivam. Interaktivita se s timto pojetim ponekud miji. Dosud jsem neproveroval prikaz global, ale v manualu je o nem pomerne dlouhe povidani, takze asi take doznal urcitych zmen. Nic z toho ovsem neni game changer. Chybi ex(1), ktery by se ve vile dle autora jmenoval exile, ale ten zas tak moc nepostradam. A tim konci muj vylet do neznamych vod, jimiz nevedou me bezne lodni trasy. Obcas je zajimave zkouset (staro)novy software, zejmena od starsich od programatoru. Snad diky omezeni na strane hardwaru o sve praci vice premysleli a jejich programy jsou takove nenapadne perly, ac po nich dnes uz pes nestekne. Vile k takovym programum rozhodne patri. ~~~~~~~~ 1. V reci Emacsu jde o packages, ale nadale budu pouzivat pojem plugin. Emacs je programovatelny editor. Ma vlastni odrudu programovaciho jazyka Lisp a neskutecne mnozstvi pluginu. Evil, o kterem bude rec za chvilku, je vlastne vrstva, ktera do editoru pridava funkcionalitu Vimu. 2. Pozor, pri prvnim spusteni Emacs uklada skryty adresar pro konfiguracni soubory ~/.emacs.d. Je potreba ho smazat, jinak Emacs ignoruje ~/.config/emacs/init.el 3. Koho by to zajimalo, ty ostatni jsou vi(1) a samozrejme ed(1). Ten ctvrty je xedit(1), ale nikdy jsem ho nepouzil a technicky vzato je soucasti Xenocara.