Let’s Make Emacs Faster!
1. Find The systemd Service File For emacs
sudo find / -iname emacs.service
#output
iamyaash@fedora:~/Projects/gh/iamyaash/spells$ sudo find / -iname emacs.service
[sudo] password for iamyaash:
/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/emacs.service
/usr/lib/systemd/user/emacs.service
cd /usr/lib/systemd/user
2. Verify emacs.service, Whether It’s Set To Run emacs --daemon
iamyaash@fedora:~ $ cat /usr/lib/systemd/user/emacs.service
[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
[Service]
Type=notify
ExecStart=/usr/bin/emacs --fg-daemon
# Emacs will exit with status 15 after having received SIGTERM, which
# is the default "KillSignal" value systemd uses to stop services.
SuccessExitStatus=15
# The location of the SSH auth socket varies by distribution, and some
# set it from PAM, so don't override by default.
# Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure
[Install]
WantedBy=default.target
This service run the emacs and as long as it runs the daemon it’s fine!
3. Let’s enable & start This Service
systemctl --user enable emacs.service
systemctl --user start emacs.service
The service file is under the /systemd/user directory, we must have to use the --user flag while executing the command.
Note: Make sure to kill any
emacsprocesses in the background or else it won’t run!
ps aux | grep emacs ## or ps -ef | grep emacs
killall emacs
kill <pid>
4. Set Alias for emacsclient For Terminal Execution
nvim ~/.bashrc
alias emacscl="emacsclient -c -a 'emacs'"
source ~/.bashrc
5. Create a Desktop Icon for GUI Execution
sudo find / -iname emacs.desktop
Duplicate the existing desktop file:
sudo cp /usr/share/applications/emacs.desktop /usr/share/applications/emacsclient.desktop
Modify configurations inside the emacsclient.desktop:
#replace Name & Exec only
Name=Emacsclient
Exec=emacsclient -c -a 'emacs' %F
Alternate
If you do not want the daemon to run automatically when the device boots, but instead want to start it manually whenever needed, you can simply use scripts to handle this.
emacs server (daemon)
Note: Make sure to store the scripts safe and secure!
touch emacs-server.sh
nvim emacs-server.sh
Paste this into emacs server.sh:
#!/bin/bash
echo "Initializing \`emacs --daemon\` server"
/usr/bin/emacs --daemon
emacs client (client)
touch emacs-client.sh
nvim emacs-client.sh
Paste this into emacs-client.sh:
#!/bin/bash
echo "Opening emacs client \`emasclient -c -a 'emacs'\`"
emacsclient -c -a 'emacs'
Change Permissions for Execution
chmod 755 emacs-server.sh emacs-client.sh
Summary
With this setup, the emacs --daemon runs in the background and can execute tasks instantly when using emacsclient. Suitable for people who use emacs as a daily driver and in need of speeding things up!