Wie kann ich grafische Mac OS X Emacs im Daemon-Modus ausführen?

24

Kurzform: Ich möchte die Mac OSX-Version von Emacs, die unter http://emacsformacosx.com/ zu finden ist, als Daemon ausführen und Grafik- und Text-Clients nach Bedarf verbinden.

Im Detail ist hier der Workflow, den ich möchte:

  1. Führen Sie beim Anmelden den Befehl aus, /Applications/Emacs.app/Contents/MacOS/Emacs --daemonum Emacs als Dämon zu starten. Ich weiß schon, wie das geht .

  2. Wenn ich Emacs von einem lokalen Terminal aus laufen lasse, möchte ich eine der folgenden Möglichkeiten haben:

    1. Wenn ich emacsan einer lokalen Eingabeaufforderung ausführe , öffne ich einen neuen Frame mit der ausgewählten Datei.
    2. Wenn Nummer 1 nicht möglich ist emacsclient, öffnen Sie , zumindest wenn ich über die Befehlszeile rufe, einen neuen Frame mit der ausgewählten Datei.
  3. Wenn ich Emacs von einem entfernten Terminal aus laufen lasse, möchte ich, dass ein Emacs im Textmodus gestartet wird, der mit dem Dämonprozess verbunden ist.

  4. Verwenden Sie Emacs.appden im Hintergrund ausgeführten Emacs-Daemon erneut, anstatt eine neue Instanz zu starten, und öffnen Sie ein neues Fenster.

Bisher bin ich nur in der Lage, die Punkte 1 und 2.2 zu erreichen, aber das sind die einfachen Teile. # 3 und # 4 sind die Dinge, die am meisten benötigt werden, um diese Arbeit zu machen. Weiß jemand, wie man diese Dinge vollbringt?

Chris R
quelle
1
Für andere, die diese Frage finden: Sie können auch M-x server-starteinen Emacs starten, ohne --daemon in den Servermodus zu wechseln. Gute Fragen, übrigens.
dmckee
1
... oder geben Sie (server-start)Ihre .emacs so ein, dass sie beim Start von emacsa
Doug Harris
Kann jemand erklären, wie man # 1 macht? Würden Sie es einfach zu einem Anmeldeobjekt machen?
Charlie Flowers
1
@Charlie Flowers emacswiki.org/emacs/EmacsAsDaemon#toc5
Colin

Antworten:

15
  1. Du hast das erledigt
  2. Ja, Sie möchten emacsclient verwenden. Fügen Sie die Option -c hinzu, um einen neuen Frame zu erhalten. Ich habe einen Alias, der es schneller macht und emacsclient anweist, nicht auf die Rückkehr des emacs-Servers zu warten:

    alias em='emacsclient -n'
    
  3. emacsclient -nw
  4. Ich bin mir darüber nicht sicher. Ich starte Emacs einmal und lade immer neue Dateien, entweder in Emacs oder mit meinem emAlias.

Aktualisieren:

In diesem Tipp erfahren Sie, wie Sie mit Platypus einen App-Wrapper um emacsclient erstellen. Sie können dann "Öffnen mit ..." verwenden , um mit Ihrem neuen App-Wrapper zu starten.

Doug Harris
quelle
Ja, das ist der wahre Trick, nicht wahr? Ich möchte nämlich, dass alle offenen OS-Aufrufe die laufenden Emacs verwenden, unabhängig davon, ob ich in einem Terminal oder in einem GUI-Kontext arbeite. Ich werde weiter suchen.
Chris R
Fand einen Verweis auf Platypus und aktualisierte meine Antwort.
Doug Harris
6
Ist das gelöst? Wie haben Sie Emacs.app dazu gebracht, eine Verbindung zum Dämon herzustellen?
Milchpost am
Ich möchte auch die Antwort auf Frage 4 wissen :)
jkp
2

Ja, hier ist eine ziemlich ausführliche Erklärung, wie man das gut macht. Ich habe verschiedene Methoden ausprobiert, um es zum Laufen zu bringen, aber nicht besser als hier beschrieben.

https://gist.github.com/304964

Prost!

Spitze
quelle
1
Der Link ist tot
Nisba
1

Für 4. fügen Sie dies in Ihren .emacs ein:

(setq ns-pop-up-frames nil)

Die Lösung zum Erstellen einer Mac-App (mit Platypus) funktioniert nicht, da Mac dieselbe Anwendung nicht zweimal öffnen kann.

Juanmirocks
quelle
1
Wenn Sie "open -n" verwenden, können Sie eine neue Instanz einer Anwendung öffnen, auch wenn diese bereits ausgeführt wird. Versuchen Sie dies im Terminal: open -n -a Emacs.app somefile.txt
Jörgen Lundberg
Ja, aber es öffnet sich ein neues Fenster, das ich nicht möchte
Juanmirocks
Vielleicht verstehe ich falsch, was Sie wollen, aber wenn Sie nicht möchten, dass ein neues Fenster erstellt wird, sondern ein vorhandenes verwendet wird, überspringen Sie das '-n'.
Jörgen Lundberg
Ja, ich möchte kein neues Fenster erstellen. open -a Emacs.appist sicherlich das, was ich tue, aber um im selben Instanz- / Daemon-Hintergrund eines vorhandenen Emacs geöffnet zu werden, muss ich (setq ns-pop-up-frames nil)in mein schreiben, .emacswie ich es in meiner Antwort geschrieben habe. Andernfalls wird trotzdem ein neues Fenster erstellt, mit oder ohne -n.
Juanmirocks