Ich habe kürzlich meinen ersten Mac seit einem Jahrzehnt gekauft und bin dabei, ihn zu konfigurieren. Ich bin ein Emacs-Benutzer und habe festgestellt, dass ich nur normale Emacs und keine Aquamacs verwenden möchte, damit ich meine vorhandene Konfiguration von anderen Betriebssystemen aus verwenden kann. Ich habe versucht, viele Anleitungen zu befolgen, die ich online gefunden habe (wie diese , diese und diese von der Site, von der ich Emacs heruntergeladen habe ), und habe versucht, die Teile auf verschiedene Arten zu kombinieren, aber noch nie Dinge in einen Zustand gebracht, der sich sogar dem nähert, was ich gewohnt bin / auf das ich gehofft habe:
- Ein Emacs-Daemon wird entweder beim Start oder sobald ich ihn benötige ausgeführt . entweder ist in Ordnung. Alle neuen Emacs-Frames werden von demselben Server unterstützt.
- Wenn ich eine Textdatei über den Finder öffne, wird die Datei in Emacs geöffnet, wenn möglich in einem vorhandenen grafischen Rahmen.
- Wenn ich Emacs.app ausführe, verwendet das System den im Hintergrund ausgeführten Emacs-Daemon erneut, anstatt eine neue Instanz zu starten und ein neues Fenster darauf zu öffnen. ( Hutspitze )
- Wenn ich Emacs von einem Terminal aus starte, erledigt das Terminal seine Geschäfte, ohne darauf zu warten, dass ich mit Emacs fertig bin (es sei denn, ich verwende '-nw').
- AFAIK sollte Emacs zu keinem Zeitpunkt während der oben beschriebenen Vorgänge in einem Zustand ("Server-Bearbeitungsmodus?") Befinden, in dem ich auf die Eingabe warte
C-x #
, obwohl ich kein tiefes Verständnis für diesen habe. - (Ich würde dies als Bonus betrachten.) Es gibt eine Möglichkeit für mich, Emacs von einem Terminal aus aufzurufen, damit Emacs einen vorhandenen Frame nach Möglichkeit wiederverwendet.
Wie könnte ich Emacs so konfigurieren, dass es sich so verhält?
Ich bin besonders ratlos, wenn ich den Finder dazu bringe, Dinge in Emacs so zu öffnen, wie ich es möchte (# 2), da die Anleitungen, die ich gefunden habe, im Allgemeinen eine Reihe von Aliasnamen, Applescripts, Bash-Skripten usw. erstellen und ich nicht sicher bin Ich möchte dem Finder mitteilen, dass er zum Öffnen von Textdateien verwendet werden soll.
Vielen Dank!
A. @lawlist fragt: "Wird standardmäßig ein neuer Frame geöffnet, wenn Sie eine neue Datei vom Terminal aus öffnen, obwohl ein Frame vorhanden ist?" Die Antwort lautet: Wenn ich einen Server wie hier beschrieben beim Start starte , einen Frame öffne und dann eine Datei durch Eingabe öffne /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n <whatever>
, kann ich die Datei in einem vorhandenen Frame öffnen. Wenn derzeit kein Frame geöffnet ist, muss ich "-nc" verwenden oder wenn ich versuche, eine Datei zu öffnen, passiert nichts.
B. @lawlist fragt: "Möchten Sie, dass der Dämon beim Anmelden ausgeführt wird, oder reicht es aus, Emacs nach dem Anmelden manuell zu laden?" Manuell laufen wäre in Ordnung.
M-x server-start
startet den Server manuell,emacsclient
damit er mit ihm kommunizieren kann. Ich habe(server-start)
in meineinit.el
Datei eingefügt, anstatt beim Anmelden einen Daemon zu verwenden. Viele Benutzer bevorzugen jedoch die Anmeldeoption für den Daemon. Und natürlich.emacs
wäre die Datei ein geeigneter Ort für(server-start)
.ns-find-file
- wird automatisch aktiviert, wenn eine Datei mit Emacs.app verknüpft ist. Meine Intercept-Datei-Funktion in den obigen Links ändert sich auch,ns-find-file
wenn Sie daran interessiert sind. Natürlich muss Emacs gebaut werden--with-ns
.Antworten:
Fügen Sie
(setq ns-pop-up-frames nil)
einer Konfigurationsdatei wie z~/.emacs
. B. Emacs.app Dateien in einem vorhandenen Frame anstelle eines neuen Frames öffnen .Sie können eine Datei von einem Terminal mit
open -a emacs file
oder öffnenemacsclient -n file
. Wenn Emacs.app nicht geöffnet ist, aber einEmacs --daemon
Prozess vorliegt ,emacsclient -n file
funktioniert dies aus irgendeinem Grund nichtemacsclient -nc file
.Stellen Sie sicher, dass Sie die
emacsclient
Binärdatei verwenden, die in der von Ihnen verwendeten Emacs-Version enthalten ist/Applications/Emacs.app/Contents/MacOS/bin/emacsclient
, oder/usr/local/bin/emacsclient
wenn Sie Emacs mit Homebrew installiert haben.Um einen Emacs-Server bei der Anmeldung zu starten, speichern Sie diese Liste beispielsweise wie folgt
~/Library/LaunchAgents/my.emacsdaemon.plist
:Die Liste wird beim nächsten Anmelden automatisch geladen, Sie können sie jedoch sofort durch Ausführen laden
launchctl load ~/Library/LaunchAgents/my.emacsdaemon.plist
.Bearbeiten: Ich weiß immer noch nicht, warum Leute Dateitypen mit einer AppleScript-Anwendung anstatt nur mit Emacs.app verknüpfen. Das Skript in der Antwort von kuzzooroo könnte jedoch auch als Shell-Skript geschrieben werden:
Sie können Platypus verwenden , um das Skript als Anwendung zu speichern:
Ich habe gerade angefangen, Emacs zu verwenden, aber ich habe ein völlig anderes Setup. Ich habe meine eigene Emacs-Anwendung erstellt, indem ich eine Kopie von iTerm.app erstellt, den CFBundleIdentifier in der Info.plist so geändert habe, dass die Anwendung eine andere Voreinstellungsdatei verwendet, und den Standardbefehl auf gesetzt habe
/usr/local/bin/emacs
. Ich habe hinzugefügt(server-start)
zu~/.emacs
und ich öffne die benutzerdefinierte Emacs Anwendung bei der Anmeldung. Ich habe Platypus verwendet, um eine Anwendung zu erstellen, die ausgeführt wird,emacsclient -n "$@";open -b my.emacs
und sie zur Standardanwendung für Textdateien gemacht.quelle
Lauris Lösung in Kombination mit den Vorschlägen aus den Kommentaren hat meine Probleme weitgehend gelöst. Ich habe unten ein Applescript eingefügt, das ich aus Sachen zusammengefügt habe, die ich online gefunden habe. Das Skript hilft dabei, einige verbleibende Falten auszugleichen, z. B. ist das Verhalten etwas besser, wenn kein aktueller Emacs-Frame vorhanden ist.
BEARBEITEN: Der Zweck des Skripts besteht darin, TXT-Dateien im Finder zuzuordnen.
quelle