在Gnome 3中使用守护程序模式


Answers:


17

我正在使用Ubuntu,因此桌面文件的位置可能不同,但我认为内容应该相似。

$ 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

重要的部分是:

Exec=/usr/bin/emacsclient -c -a "" %F

要澄清的可能应该是:

Exec=/usr/bin/emacsclient --create-frame --alternate-editor "" %F

根据emacsclient上的文档,这些开关执行以下操作:

-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

因此,它将使用创建一个新框架-c,然后如果尚未守护emacs,则使用来启动一个新的emacs守护程序-a ""。最后,对其进行%F修复,以便您可以将文本文件拖到图标上,它将打开它。

顺便说一句,您可能还会考虑-F "((fullscreen . maximized))"在启动时强制框架最大化。不幸的是,我不记得要运行哪个版本的emacs。


1
否则,此方法效果很好,但始终会打开一个新的Emacs窗口。对于其他启动器图标,将聚焦现有窗口。有没有办法得到相同的行为?
akaihola

2

我真的只是在调整dgtized的答案,以解决akaihola的评论。即我们想要的是

  • 利用Emacs的守护程序功能
  • 召集现有框架,或在必要时创建一个框架。

我发现创建emacs25.desktop文件而不是emacsclient.desktop神奇地工作(坦率地说,我不知道为什么)。

所以我做了:

cp /usr/share/applications/emacs25.desktop ~/.local/share/applications

(取决于您的系统,可能不是emacs25

然后在我~/.local/share/applications/emacs25.desktop中将Exec行更改为:

Exec=/bin/bash --login -c "emacsclient --alternate-editor= --create-frame %F"

bash登录外壳程序确保守护程序具有我的完整登录环境。

然后我取消了TryExec生产线。

最后,我进行了编辑,Name以便能够在启动器中识别它,点按“超级”,然后右键单击以将新项目添加到收藏夹。我总是将Emacs放在第一位,所以Super + 1召唤了它。

Name=GNU Emacs client

一切似乎都很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.