Drobnosti k editování zdrojáků: lisp-mode je (viz docstring) určen pro jiné lispy než emacs lisp. Pro ten je emacs-lisp-mode. Ale normálně se mod stejně nastaví při otvírání souboru sám správně, podle prvního řádku nebo přípony.
Starostí s ukončováním závorek může zbavit paredit-mode (minor), který vkládá páry a usnadňuje manipualci se sexpy.
Pro psaní/čtení modulů se může hodit nameless mode, schovávající prefixy modulu.
Ale je fakt, že u žádného netuším jak se poperou s evil modem.
Je mi jasné že v článku nemůže být všechno co by člověk čekal, tak jen možná na doplnění:
V příkladech pro key binding je uvedeno interactive, možná stojí za to zmínit že lze použít i při definici funkce, a je to to co dělá z funkce příkaz použitelný s M-x nebo mapovatelný na klávesu.
Pokud se mluví o rozdílech mezi Lispy, za zmínění stojí dva další rozdíly - zda jsou jména funkcí ve stejném namespace jako proměnných (1-lisp vs 2-lisp, Scheme vs. Common/elisp), a zda jsou lokální proměnné vázány dynamicy nebo lexikálně (česká terminologie???) - a zrovna tady je teď u emacsu zajímavé období přechodu.
Moc díky za doplnění. Ono je toho skutečně mnohem víc, než se podařilo dát do článku (jsem si říkal, že zastavím někde na 40 kB textu, no má to přes 60 kB :-).
Pro paredit-mode existuje úprava evil-paredit, která hlídá párovost atd. Taky (zmíním příště) existuje rainbow-delimiters, což zhruba odpovídá rainbow-parenthesis ve Vimu (https://www.root.cz/clanky/uzitecne-skripty-a-pluginy-pro-textovy-editor-vim-3-cast/#k03). nameless mode přiznám se vůbec netuším jak bude fungovat.
Ještě k (interactive) - pravda pravda, jsem měl rozepsanou kapitolu, proč to tam musí být, ale vypadla do dalšího dílu. To se omlouvám, protože sám nemám rád, když se v tutoriálech objevují věty "toto nemusíte chápat, to si ukážeme jindy". Jenže zrovna u Elispu je toho na začátku tolik... (pár lidí jsem učil lisp, tak vím, jaká je to pro ně novinka, pokud něco podobného neměli ve škole - všechno je jinak :)
lexikální vazba - já to vždycky viděl psáno takto
Asi by bylo ideální si udělat podobný seznam, jako má Clojure:
https://clojure.org/reference/lisps
doplnil bych, že existuje IELM (Interactive Emacs Lisp Mode). Spustíte m-x ielm. Můžete mu nastavit pracovní buffer m-x ielm-change-working-buffer (c-c c-b), interaktivní funkce potom pracují s pracovním bufferem.
když nechcete, aby se výsledky tiskly do bufferu s kódem, můžete použít místo eval-print-last-sexp, jen eval-last-sexp (c-x c-e), výsledek se vytiskne do bufferu *Messages*.
GUILE v Emacsu je v dnešní době mrtvý projekt. Aktuálně se pracuje na čistě vlastním JITu. Paralelně s tím běží snahy přeložit elisp do cčka a tímhle způsobem předkompilovat veškerý elisp který jde s Emacsem.
To by sice nezrychlilo balíčky, ale Emacs ano, a to dost výrazně.
Poslední dobou dělá Emacs velké skoky vpřed.
podle mě zrychlení elispu ničemu nepomůže, pokud ho nadále některé moduly budou používat špatně. Například js2-mode zbytečně v elispu provádí syntaktické analýzy, aby umožnil refaktoring. Když otevřete velký mimifikovaný soubor, tak zamrzne editor. To by měly dělat procesy na pozadí (klidně další proces Emacsu). Mělo by se zabránit možnosti otevření velkých souborů s nesprávným módem. Ve vscode to mají vyřešené.
Kompletní analýza v elispu je naopak moc dobře. Problém ale je nepoužití multiprocessing modu pro přesunutí analýzy do jiné instance headless emacsu.
V elispu se multithreading řeší stejně jako v pythonu, bohužel se to moc často nepoužívá i když by mohlo.
Bohužel, vysvětlení všech proč je mimo scope teto diskuze.
"Mělo by se zabránit možnosti otevření velkých souborů s nesprávným módem."
Zrovna toto by šlo vyřešit pár řádkama kódu a změnu monkey patchnout do načteného balíčku z initu. Otazka 5 minut pro pokročilého Emacs usera.
A v lepším případě udělat pull request s opravou pro všechny.