Ausführen von Emacs über die Windows-Taskleiste

8

Wenn ich in Windows zwischen Programmen wechseln möchte, verwende ich normalerweise die Windows-Taste plus eine Zifferntaste, um ein Programm über meine Taskleiste auszuführen. Die meisten Programme werden entweder ausgeführt oder, falls bereits eine Instanz vorhanden ist, in den Vordergrund gerückt und konzentriert. Emacs (gestartet mit runemacs.exe) erstellt jedoch einen neuen Eintrag in der Taskleiste, und wenn Sie die Verknüpfung erneut verwenden, wird nur eine neue Instanz erstellt. Soweit ich das beurteilen kann, kann ich nicht einmal mit Emacs-Befehlen zwischen den verschiedenen Frames wechseln (ich habe Cx 5 o ausprobiert).

Gibt es eine Möglichkeit, dies so zu gestalten, dass bei der späteren Verwendung der Windows-Hotkeys nur die vorhandene Instanz von Emacs verwendet wird. Wenn nicht, kann ich es zumindest so machen, dass ich problemlos zwischen den verschiedenen Frames navigieren kann? Ich habe dieses Snippet ausprobiert:

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

von der Antwort auf diese Frage , aber es machte keinen Unterschied.

Resueman
quelle
Können Sie angeben, auf welches Snippet Sie sich beziehen?
Nispio
Dieses Snippet stellt sicher, dass beim ersten Ausführen von Emacs ein Bearbeitungsserver erstellt wird. Nachfolgende Aufrufe von Emacs, die eine Verbindung zum gleichen Bearbeitungsserver herstellen möchten, müssenemacsclientw.exe
nispio
@nispio Ah, das erklärt, warum es nicht funktioniert hat. Gibt es eine Möglichkeit, alles auf demselben Bearbeitungsserver auszuführen, ohne dass verschiedene ausführbare Dateien ausgeführt werden müssen?
Resueman
Diese Antwort wird wahrscheinlich funktionieren: emacs.stackexchange.com/a/158/93 . Wenn Sie runemacs.exeeinen alternativen Editor bereitstellen , können Sie auch dann aufrufen emacsclientw.exe, wenn kein Bearbeitungsserver ausgeführt wird.
Nispio
1
Siehe meinen Kommentar zu Nispios Antwort, wie man das Erstellen eines neuen Rahmens vermeidet.
Vamsi

Antworten:

5

Fügen Sie dies Ihrer Init-Datei hinzu, um sicherzustellen, dass beim Starten von Emacs ein Bearbeitungsserver erstellt wird

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

Stellen Sie nun Ihre Windows-Verknüpfung emacsclientw.exewie folgt ein:

C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe"

Dies sollte einen vorhandenen Emacs-Frame (falls vorhanden) fokussieren oder anderweitig aufrufen runemacs.exe. (Vielen Dank an Vamsi für die Hilfe beim Einstellen der Befehlsparameter.)

Nispio
quelle
Dies funktioniert so, wie ich es möchte, wenn ich eine Datei zum Ausführen übergebe. Wenn ich den Befehl jedoch unverändert verwende, wird der Fehler "Dateiname oder Argument erforderlich" angezeigt.
Resueman
@resueman Behebt eine -cFlagge das Problem?
Nispio
2
@nispio Man kann verwenden C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe", um das Erstellen eines neuen Frames zu vermeiden und den vorherigen Frame anzuheben.
Vamsi
@Vamsi aber ohne das -cwird es auch eine Datei zu besuchen erwarten? (Wenn Sie nicht sagen können, dass ich gerade nicht auf einem Windows-Computer bin.)
Nispio
@Vamsi Das funktioniert perfekt. @nispio es scheint gut zu funktionieren, -csolange es den -eAusdruck hat.
Resueman
7

Ich bin heute auf eine andere Antwort auf das Problem mit SuperUser gestoßen . Es scheint hackischer zu sein, aber das Ergebnis stimmt besser mit anderen Programmen unter Windows überein.

  1. Führen Sie runemacs.exe ohne bereits vorhandenes Symbol in der Taskleiste aus.
  2. Klicken Sie mit der rechten Maustaste auf das laufende Emacs-Symbol in der Taskleiste und klicken Sie auf "Dieses Programm an die Taskleiste anheften".
  3. Emacs schließen
  4. Klicken Sie mit der rechten Maustaste auf das angeheftete Emacs-Symbol in der Taskleiste, klicken Sie auf Eigenschaften und ändern Sie das Ziel von emacs.exe in runemacs.exe.
Resueman
quelle
1
FWIW, das ist was ich tue. Ich habe nicht verstanden, dass Sie das wollten, von Ihrer Frage. Ich dachte, Sie wollten unter anderem emacsclient verwenden. Übrigens können PropertiesSie in auch das Start inVerzeichnis festlegen und Emacs für eine bestimmte Datei oder ein bestimmtes Verzeichnis öffnen. (Ich starte Emacs mit Dired im Start inVerzeichnis. IOW, ich übergebe das gleiche "Verzeichnis ( -zitiert) wie das Argument an runemacs.)
Drew
@Drew Ich habe wahrscheinlich nicht erklärt, was ich sehr gut wollte. Ich bin noch neu genug, dass es schwierig ist, alles gerade zu halten. Danke für die Tipps.
Resueman