Использование режима демона в Gnome 3

14

Я заставил демона Emacs работать через командную строку с помощью страницы EmacsWiki , но я застрял на том, как заставить клиента запускаться через Gnome 3. Как настроить файл рабочего стола Gnome, который запускает окно графического интерфейса пользователя, которое подключается к демону Emacs?

tbekolay
источник

Ответы:

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 требуется для этого.

dgtized
источник
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чтобы я мог распознать его в панели запуска, коснулся Super и щелкнул правой кнопкой мыши, чтобы добавить мой новый элемент в избранное. У меня всегда Emacs - первый предмет для меня, так что Super + 1 вызывает его.

Name=GNU Emacs client

И все вроде бы хорошо.

Джеймс Фергюсон
источник