Emacs daemon

Ako daemon už niekoľko rokov používam aj prehrávač hudby (najskôr xmms2, potom mpd), takže som si už nejakú dobu takúto funkciu želal aj pre Emacs.

Emacs od verzie 23 má plne zabudovanú podporu spúšťania ako daemon a po niekoľkých mesiacoch musím skonštatovať, že som konečne spokojný. Skúšal som rôzne riešenia v predchádzajúcich verziách, ale nepodarilo sa mi to vyladiť k mojej spokojnosti.

Teraz stručne popíšem “setup”, ktorý mi vyhovuje. Používam 2 inštancie, jednu ako oddelený mailový klient (Wanderlust) a jednu na všetko ostatné (org-mode, LaTeX, programovanie, písanie textov). Príkazy, ktoré uvediem je možné si pomocou xbindkeys nastaviť na nejakú klávesovú skratku, nebudem uvádzať svoje, pretože to nie je podstatné.

Základom je spustenie daemona a klienta k nemu (klient je len nový frame, ktorý sa môže kedykoľvek zatvoriť a daemon to neovplyvní):

alias emacsd='emacs --daemon'
alias emacs='emacsclient -c'

Dôležité je aj vedieť daemona správne ukončiť, tieto aliasy ukončujú interaktívne a neinteraktívne (bezpodmienečné ukončenie bez uloženia zmien):

alias emacs-kill="emacsclient -e \"(progn (setq desktop-save \\\"~/\\\") (save-some-buffers) (kill-emacs))\""
alias emacs-kill-9="emacsclient -e \"(progn (setq desktop-save \\\"~/\\\") (save-some-buffers) (setq kill-emacs-hook 'nil) (kill-emacs))\""

Keď už máme stále bežiaci Emacs, tak na otvorenie súboru v ňom som si vytvoril funkciu aj so skráteným názvom eo:

emacs-open() { emacsclient -e "(find-file \"$1\")'" }
alias eo=emacs-open

Na záver som aplikoval nejaký vizuálny tuning, pretože štart Emacsu v textovom režime (platí aj pre daemon) nemôže nastaviť niektoré veci týkajúce sa len Gtk+ verzie:

emacsclient -c -e '(set-cursor-color "green")' -e '(load "~/.emacs.d/tabbar.el")' -e "(set-face-font 'tooltip \"DejaVu Sans 7\")"

A nakoniec ešte spustenie samostatného Emacsu s e-mailovým klientom, ktorý nepoužíva desktop (ukladanie zoznamu otvorených bufferov, histórie, atď.):

emacs -eval '(wl)' --no-desktop

Takéto oddelenie síce má svoje nevýhody, ale naopak ak potrebujem otvárať obrovské foldery až s desaťtisícami mailov, tak časom dokáže nabobtnať a je lepšie ho ukončiť a spustiť znovu.

Comments

Error: Call to a member function getTplFile() on null

Error: Call to a member function getTplFile() on null

An unforeseen error has occured. This is most likely a bug somewhere. It might be a problem in the blogtng plugin.

More info has been written to the DokuWiki error log.