Richten Sie Emacs unter Windows ein, um eine einzelne Instanz zu starten und Dateien in der vorhandenen Instanz zu öffnen

18

Ich interessiere mich besonders für die vollständige Windows-Erfahrung, einschließlich:

  • Automatisches Starten eines Servers, falls noch keiner gestartet ist
  • So rufen Sie emacs auf, damit der Server verwendet wird (z. B. über die Befehlszeile oder Tools von Drittanbietern)
  • Kontextmenü-Unterstützung (z. B. Klicken Sie mit der rechten Maustaste auf eine Datei und lassen Sie sie zur Anzeige und Bearbeitung an Emacs senden)

Ist eine solche Unterstützung sofort verfügbar?

Cristobalito
quelle

Antworten:

21

Automatisches Starten eines Servers, falls noch keiner gestartet ist

Dies sollte für alle Emacs-Builds gleich sein. Fügen Sie dieses Snippet Ihrem .emacsoder hinzu .emacs.d/init.el.

(require 'server)
(unless (server-running-p)
  (server-start)) 

Und dann starten Sie Emacs einfach, indem Sie die runemacs.exeausführbare Datei ausführen, die mit dem Build geliefert wird .

So rufen Sie emacs auf, damit der Server verwendet wird (z. B. über die Befehlszeile oder Tools von Drittanbietern)

Der Windows-Build von Emacs wird mit einer emacsclientw.exeausführbaren Datei im bin/Verzeichnis geliefert . Verwenden Sie den vollständigen Pfad zu dieser ausführbaren Datei als Editor Ihrer Wahl für Tools von Drittanbietern, die Sie konfigurieren müssen.

Kontextmenü-Unterstützung (z. B. Klicken Sie mit der rechten Maustaste auf eine Datei und lassen Sie sie zur Anzeige und Bearbeitung an Emacs senden)

  1. Klicken Sie mit der rechten Maustaste auf eine Datei und wählen Sie Open With -> Select Default Program.
  2. Navigieren Sie im folgenden Fenster zu der oben emacsclientw.exegenannten ausführbaren Datei und wählen Sie sie aus.
  3. Wenn Sie nicht möchten, dass Emacs der Standard ist, führen Sie die Schritte 1 und 2 erneut aus und wählen Sie ein anderes Programm als Standard aus.

emacsclientw.exe wird nun immer eine Option im Kontextmenü sein.

Malabarba
quelle
Danke - toller Punkt zum Server, ich habe nicht darüber nachgedacht.
Cristobalito
Sollte das in Bezug auf die emacsclient.exe nicht emacsclientw.exe sein? Außerdem dachte ich, Sie müssten dies mit dem Flag -a ausführen, um einen alternativen Editor anzugeben, wenn der Server nicht ausgeführt wird.
Cristobalito
Damit der Server ordnungsgemäß mit meiner Konfiguration funktioniert, musste ich auch eine Umgebungsvariable hinzufügen EMACS_SERVER_FILE, die auf mein .emacs.d\serverVerzeichnis verweist .
Ryan
@ Ryan Ich konnte dies zum Laufen bringen, ohne dass die Umgebungsvariable benötigt wurde - nur um sicherzustellen, dass der Server lief.
Cristobalito
Hmm, für mich die Auswertung der (server-running-p)Renditen :otherunter Windows (auch nach dem Versuch, diese Umgebungsvariable EMACS_SERVER_FILEeinzustellen.
Kaushal Modi
5

Automatisches Starten eines Servers, falls noch keiner gestartet ist

Ich empfehle dringend, eine Umgebungsvariable für ALTERNATE_EDITORzu setzen runemacs.exe. Auf diese Weise können Sie immer emacsclient aufrufen, auch wenn kein Server vorhanden ist. Fügen Sie einfach (Server-Start) zu Ihrer Init-Datei hinzu. Wenn ein Server nicht existiert, ruft emacsclient das auf, ALTERNATE_EDITORwas in unserem Fall emacs ist. Da emace einen Server in der init-Datei startet, werden alle neuen Aufrufe von emacsclient sofort ausgeführt.

So rufen Sie emacs auf, damit der Server verwendet wird (z. B. über die Befehlszeile oder Tools von Drittanbietern)

Verwenden Sie emacsclientw.exe -c -n "your_file", um Ihre_Datei zu öffnen. Das -cArgument erstellt einen neuen Grafikrahmen und -nermöglicht es Ihnen, den Rahmen zu schließen, ohne den Serverstatus zu verlieren. Sie können es sogar ohne Dateinamen aufrufen, um den *Scratch*Puffer zu öffnen . Funktioniert auch über eine Desktop-Verknüpfung. Wenn Sie emacsclient.exe(das fehlende w beachten) verwenden, wird jedes Mal, wenn Sie es aufrufen, eine Eingabeaufforderung für einige Sekunden eingeblendet.

Hinzufügen zum Kontextmenü

Emacswiki hat eine schöne Seite über das Hinzufügen von Emacs in das Kontextmenü hier . Sie müssen den Registrierungsknoten bearbeiten HKEY_CLASSES_ROOT\*, um eine Aktion zum Öffnen mit Emacs hinzuzufügen.

Vamsi
quelle
5

Andere haben den Serverteil beantwortet. Folgendes tue ich, um UNIX / GNU / Linux-ähnliche Dienstprogramme wie grepund zu erhalten diff:

  1. Installieren Sie Cygwin (einmaliger Vorgang).
  2. Laden cygwin-mount.el.
  3. Laden setup-cygwin.el.

Beachten Sie jedoch, dass es unterschiedliche Versionen von Cygwin gibt. Ich benutze eine ältere Version (weiß nicht, welche - schwer zu sagen, AFAICT). Keine Ahnung, ob Sie Probleme mit neueren Versionen haben werden.

Siehe auch:

Drew
quelle
Hinweis: Verwenden Sie nicht das cygwin EMACS. Installieren Sie den GNU-Build von ftp.gnu.org/gnu/emacs/windows
M Smith,
Ich empfehle nicht, Cygwin zu installieren, da es unerwünschte Nebenwirkungen geben kann (z. B. das Brechen anderer Gnu-Windows-Ports wie Emacs, GCC usw.), wenn nur einige Gnu-Tools zur Verfügung stehen. Installieren Sie stattdessen GnuWin32- Ports. Sie können das gesamte Paket oder ausgewählte Tools Ihrer Wahl installieren.
Seki
@Seki - Ja, Eli Zaretskii sagt dasselbe wie du. Alles, was ich sagen kann, ist, dass ich kein Problem hatte (und ich habe ernsthafte Zweifel, was Ihre Behauptung betrifft, dass es Emacs kaputt macht ). Aber (a) ich verwende eine alte Cygwin-Version und (b) ich verwende nicht die meisten von Cygwin bereitgestellten UNIX / GNU Linux-Dienstprogramme.
Drew
@drew: vielleicht übermäßig, um über "Emacs brechen" zu reden, "seltsames Verhalten verursachen" wäre besser gewesen. Beispielsweise bremst Cygwin Make die MinGW-Toolchain, wenn Sie Ihren Pfad nicht sorgfältig auf Cygwin-Tools überprüfen, die nicht berücksichtigt werden, oder standardmäßig, wenn keine anderen vorhanden sind. Es ist nicht auf Make beschränkt, viele andere Tools lassen sich nicht mischen und manchmal ist es subtil, auf das Problem hinzuweisen. Kurz gesagt, entweder haben Sie eine native Portierung von Emacs und es ist besser, native GNU-Tools zu haben, oder Sie können die gesamte Cygwin-Distribution einschließlich ihrer Emacs verwenden.
Seki
@Seki: Es scheint also, dass Cygwin und MingGW nicht gut zusammenspielen. Das überrascht mich nicht. (FWIW, ich habe nichts gegen die Verwendung von MingGW anstelle von Cygwin. Für mich war es einfach, Cygwin zu installieren, und ich verwende nicht genug davon, um auf Probleme gestoßen zu sein.)
Drew