diff options
Diffstat (limited to 'content/cool-emacs/multi-process-emacs.md')
-rw-r--r-- | content/cool-emacs/multi-process-emacs.md | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/content/cool-emacs/multi-process-emacs.md b/content/cool-emacs/multi-process-emacs.md deleted file mode 100644 index 97d7ee67..00000000 --- a/content/cool-emacs/multi-process-emacs.md +++ /dev/null @@ -1,81 +0,0 @@ -+++ -title = "Multiprocess Emacs environment" -author = ["MichaĆ Sapka"] -date = 2024-06-17T17:46:00+02:00 -categories = ["emacs"] -draft = false -weight = 3002 -image_dir = "cool-emacs" -image_max_width = 480 -primary_menu = "cool-emacs-appendix" -abstract = "Running dedicated Emacs processes" -[menu] - [menu.cool-emacs-appendix] - weight = 3002 - identifier = "multiprocess-emacs-environment" -+++ - -The more you move into Emacs, the happier you may become. -But at the same time, Emacs is not a **real** shell, but a text editor. -This means there is no real way to manage functionality similarly one would manage applications. -It's all a buffer - the file you opened, each IRC channel, email list, and so on. -There are ways to manage it, like dedicated "workspace" plugins[^fn:1] or simple tabs. -But all those don't fit my mental model. -I am "Editing a file" or "chatting" or "writing a web page". -Those are separate concerns, so I want to have dedicated spaces for them. - -At the same time I want them in Emacs, as it gives me a unified interface. -I don't need to think how to change IRC channel, how to spell check, or how to actually write in my selected keybindings. - - -## Dedicated Emacs instances {#dedicated-emacs-instances} - -This led me to use multiple, dedicated Emacs instances. -This way, I've a got a dedicated IRC client, Code editor, Notepad, Email client, and so on. -I have unified interface, but at the same time it's still akin to dedicated programs. - -This has the added benefit of fault protection. -Tramp session hanging entire Emacs doesn't disconnect me from IRC, as those are separate processes. - -Therefore, I have functions which I call _ultimate modes_[^fn:2] to configure Emacs for given use case. - -A simple ultimate mode for IRC would look like: - -```emacs-lisp -(defun mms-irc-mode() - "use this instance of Emacs for IRC" - (interactive) - - (load-theme 'ef-bio) - - (erc-tls :server "irc.tilde.chat" :port "6697" - :nick "mms" :full-name "https://michal.sapka.me") - (erc-tls :server "irc.libera.chat" :port "6697" - :nick "mms" :full-name "https://michal.sapka.me") - ) -``` - -This simple function: - -- Loads a dedicated theme, so I won't get lost. IRC is a happy place, therefore green. -- Connects me to my servers - -ERC is configured elsewhere, so all auto-joins are there, just redacted, but nothing limits the number of things the ultimate mode setup up. -Want to defer loading of bigger package? -Want to reconfigure Ispell language? -Or maybe you want to load parts of Emacs configurations only when they make sense? -Shy is the limit! - -Now, I can either run `Emacs` and call `mms-irc-mode` or have a dedicated OS level key binding to run Emacs in this mode via: - -```shell -emacs --eval='(mms-irc-mode)' -``` - -This method could easily be expanded to run dedicated `emacs servers` and connected clients, but I wanted a simpler way. - -[^fn:1]: Like [perspective.el](https://github.com/nex3/perspective-el) -[^fn:2]: Yes, it breaks the musical theory naming scheme. - I could have used "tonic" there to run the `erc` and pla play with the wordplay, but I decided against it. - Dammit Jim, I'm an engineer, not a musician! - Also, diatonic modes don't fit the "larger than major" mode. |