From 838418cee84442665eab8a2318869aac907f9099 Mon Sep 17 00:00:00 2001 From: Peter Oliver Date: Tue, 8 Jun 2021 16:04:17 +0100 Subject: [PATCH] From .desktop files, reuse a frame or start a new Emacs as required * doc/emacs/misc.texi: (Using Emacs as a Server) Explain emacsclient.desktop. * etc/NEWS: (Emacs Server): Explain emacsclient.desktop. * emacs-mail.desktop, etc/emacsclient.desktop: Automatically try to reuse an existing frame, open a new frame, or start a new Emacs daemon. Add actions for specific behaviours. --- doc/emacs/misc.texi | 7 +++++++ etc/NEWS | 9 +++++++++ etc/emacs-mail.desktop | 16 +++++++++++++--- etc/emacsclient.desktop | 11 ++++++++++- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index 027133cc3a..4bb2d72cc2 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1757,6 +1757,13 @@ Emacs Server @code{3}. (If there is no server with that name, an error is signaled.) Currently, this feature is mainly useful for developers. + If your operating system’s desktop environment is +@url{https://www.freedesktop.org/wiki/Specifications/,,freedesktop.org-compatible} +(which is true of most GNU/Linux and other recent Unix-like GUIs), you +may use the @dfn{Emacs (Client)} menu entry to connect to an Emacs +server with @command{emacsclient}. If the daemon is not already +running, it will be started for you. + @menu * TCP Emacs server:: Listening to a TCP socket. * Invoking emacsclient:: Connecting to the Emacs server. diff --git a/etc/NEWS b/etc/NEWS index 64b39d737a..c0cfd9fe9a 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -539,6 +539,15 @@ an edit instead of marking it as "Done" (which the 'C-x #' command does). The 'emacsclient' program exits with an abnormal status as result of this command. ++++ +*** New desktop integration for connecting to the server. +If your operating system’s desktop environment is +freedesktop.org-compatible (which is true of most GNU/Linux and other +recent Unix-like GUIs), you may use the new "Emacs (Client)" desktop +menu entry to open files in an existing Emacs instance rather than +starting a new one. If the daemon is not already running, it will be +started for you. + ** Perl mode --- diff --git a/etc/emacs-mail.desktop b/etc/emacs-mail.desktop index 0c5fab1dd1..251afa100c 100644 --- a/etc/emacs-mail.desktop +++ b/etc/emacs-mail.desktop @@ -1,12 +1,22 @@ [Desktop Entry] Categories=Network;Email; Comment=GNU Emacs is an extensible, customizable text editor - and more -Exec=emacs -f message-mailto %u -# If you prefer to use emacsclient, use this instead -#Exec=emacsclient -e '(message-mailto "%u")' Icon=emacs Name=Emacs (Mail) MimeType=x-scheme-handler/mailto; NoDisplay=false Terminal=false Type=Application + +Exec=emacs -f message-mailto %u +# # If you prefer to use emacsclient, use this instead: +# Exec=sh -c 'emacsclient --alternate-editor= --display="$DISPLAY" --eval "(message-mailto \"%u\")"' +# Actions=new-window;new-instance; + +# [Desktop Action new-window] +# Name=New Window +# Exec=emacsclient --alternate-editor= --create-frame --eval '(message-mailto "%u")' + +# [Desktop Action new-instance] +# Name=New Instance +# Exec=emacs -f message-mailto %u diff --git a/etc/emacsclient.desktop b/etc/emacsclient.desktop index 3feb83c729..43f2c31ddd 100644 --- a/etc/emacsclient.desktop +++ b/etc/emacsclient.desktop @@ -3,10 +3,19 @@ Name=Emacs (Client) GenericName=Text Editor Comment=Edit text 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=emacsclient -c %F +Exec=sh -c 'if [ -n "$*" ]; then exec emacsclient --alternate-editor= --display="$DISPLAY" "$@"; else exec emacsclient --alternate-editor= --create-frame; fi' placeholder %F Icon=emacs Type=Application Terminal=false Categories=Development;TextEditor; StartupWMClass=Emacsd Keywords=Text;Editor; +Actions=new-window;new-instance; + +[Desktop Action new-instance] +Name=New Window +Exec=emacsclient --alternate-editor= --create-frame %F + +[Desktop Action new-instance] +Name=New Instance +Exec=emacs %F -- 2.31.1