Korzystanie z trybu demona w Gnome 3

14

Zmusiłem demona Emacsa do pracy za pomocą wiersza poleceń na stronie EmacsWiki , ale utknąłem na tym, jak zmusić klienta do uruchomienia przez program uruchamiający Gnome 3. Jak skonfigurować plik pulpitu Gnome, który uruchamia okno GUI, które łączy się z demonem Emacsa?

tbekolay
źródło

Odpowiedzi:

17

Używam Ubuntu, więc lokalizacja pliku pulpitu może być inna, ale myślę, że zawartość powinna być podobna.

$ 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

Ważną częścią jest:

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

Aby to wyjaśnić, prawdopodobnie powinno to być:

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

Z dokumentacji emacsclient te przełączniki wykonują następujące czynności:

-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

-cTworzy więc nową ramkę, a jeśli emacs nie jest jeszcze demonizowany, uruchamia nowego demona emacs -a "". Na koniec %Fnaprawia to, dzięki czemu można przeciągnąć plik tekstowy na ikonę i otworzy go.

Na marginesie możesz także rozważyć -F "((fullscreen . maximized))"wymuszenie maksymalizacji ramki przy uruchomieniu. Niestety nie pamiętam, która wersja emacsa jest wymagana, aby to działało.

zdeterminowany
źródło
1
Działa to świetnie, ale zawsze otwiera nowe okno Emacsa. W przypadku innych ikon programu uruchamiającego skoncentrowane jest istniejące okno. Czy istnieje sposób na uzyskanie takiego samego zachowania?
akaihola
2

Naprawdę poprawiam odpowiedź dgtized, aby odpowiedzieć na komentarz od akaihola. To znaczy, czego chcemy

  • skorzystać z funkcji demona Emacsa
  • przywołaj istniejącą ramkę lub utwórz ją, jeśli to konieczne.

Uważam, że tworzenie emacs25.desktoppliku zamiast emacsclient.desktopmagicznie działało (szczerze mówiąc, nie wiem dlaczego).

Więc zrobiłem:

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

(w zależności od systemu może nie być emacs25)

Następnie ~/.local/share/applications/emacs25.desktopzmieniłem wiersz Exec na:

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

Powłoka logowania bash zapewnia, że ​​demon ma moje pełne środowisko logowania.

I usunąłem TryExeclinię.

Na koniec dokonałem edycji, Nameaby móc rozpoznać ją w programie uruchamiającym, dotknąłem Super i kliknąłem prawym przyciskiem myszy, aby dodać mój nowy element do ulubionych. Zawsze mam dla siebie Emacsa, więc Super + 1 przywołuje go.

Name=GNU Emacs client

I wszystko wydaje się dobrze.

James Ferguson
źródło