I've gotten the Emacs daemon to work through the command line using the EmacsWiki page, but I'm stuck on how to get the client to run through the Gnome 3 launcher. How can I set up a Gnome desktop file that launches a GUI window that connects to the Emacs daemon?
I'm using Ubuntu, so the location of the desktop file may be different but I think the contents should be similar.
$ cat ~/.local/share/applications/emacsclient.desktop #!/usr/bin/env xdg-open [Desktop Entry] Version=1.0 Name=GNU Emacs 24 GenericName=Text Editor Comment=View and edit files MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; Exec=/usr/bin/emacsclient -c -a "" %F Icon=/usr/share/icons/hicolor/scalable/apps/emacs-snapshot.svg Type=Application Terminal=false Categories=Utility;Development;TextEditor; StartupWMClass=Emacs Name[en_US]=GNU Emacs 24
The important part is:
Exec=/usr/bin/emacsclient -c -a "" %F
To clarify that should probably be:
Exec=/usr/bin/emacsclient --create-frame --alternate-editor "" %F
From the documentation on emacsclient those switches do the following:
-c, --create-frame Create a new frame instead of trying to use the current Emacs frame -a EDITOR, --alternate-editor=EDITOR Editor to fallback to if the server is not running If EDITOR is the empty string, start Emacs in daemon mode and try connecting again
So it makes a new frame using
-c and then if emacs is not already daemonized it starts a new emacs daemon with
-a "". Finally, the
%F fixes it so you can drag a text file onto the icon and it will open it.
Just as an aside you might also look into including
-F "((fullscreen . maximized))" to force the frame to maximize at launch. Unfortunately, I can't remember which version of emacs is required for that to work.
I'm really just tweaking dgtized's answer to address the comment from akaihola. I.e. what we want is to
- make use of Emacs's daemon functionality
- summon an existing frame or create one if necessary.
I find that creating an
emacs25.desktop file rather than
emacsclient.desktop magically worked (frankly, I don't know why).
So I did:
cp /usr/share/applications/emacs25.desktop ~/.local/share/applications
(depending on your system, it may not be
Then in my
~/.local/share/applications/emacs25.desktop I changed the Exec line to be:
Exec=/bin/bash --login -c "emacsclient --alternate-editor= --create-frame %F"
The bash login shell makes sure the daemon has my full login environment.
And I removed the
Finally, I edited
Name so I'd be able to recognize it in the launcher, tapped Super and right clicked to add my new item to favorites. I always have Emacs the first item for me so then Super+1 summons it.
Name=GNU Emacs client
And all seems to be well.