Configuration d'emacsclient sur MS Windows

13

J'essaie de configurer le démon du serveur emacs et d'utiliser emacsclient sur MS Windows afin que les fichiers puissent être ouverts rapidement sans le délai et les frais généraux associés au démarrage d'instances supplémentaires d'emacs pour chaque fichier ouvert. Je suis les instructions spécifiques fournies dans emacswiki pour MS Windows qui impliquent:

  1. Exécuter emacs en tant que démon, runemacs.exe --daemon
  2. Suivi en invoquant emacsclientw.exeavec les options appropriées.

Le démarrage du démon réussit (je vois emacs.exe dans la liste des processus), mais l'invocation d'emacsclient produit des erreurs. Le wiki dit de créer un raccourci vers emacsclientw.exeet de changer la cible en

X:\path\to\emacs\bin\emacsclientw.exe -na "X:\path\to\emacs\bin\emacsclientw.exe" -c -n

Est-ce correct? Il semble que le client soit appelé deux fois. L'utilisation de la cible comme indiqué n'exécute pas le programme et génère l'erreur "nom de fichier ou argument requis". Utiliser uniquement la première partie de la cible indiquée ci-dessus

X:\path\to\emacs\bin\emacsclientw.exe -na

produit une erreur générique. Utiliser uniquement la deuxième partie

X:\path\to\emacs\bin\emacsclientw.exe -c -n

produit l'erreur «Pas de socket ou d'éditeur alternatif». (Les options officielles d'emacsclient sont décrites ici. )

Aucune suggestion? Emacs fonctionne correctement en mode standard, c'est-à-dire pas en mode démon. Version 25.1. Je préférerais exécuter le démon plutôt que de démarrer le serveur dans mon fichier d'initialisation.

Snelephant
la source

Réponses:

6

Je ne suis pas sûr des conseils de la page emacswiki. Ce que vous voulez faire est le suivant:

  • Lancez un client emacs connecté au serveur emacs en cours d'exécution.
  • Si le serveur emacs n'est pas en cours d'exécution, démarrez-le, puis connectez le client emacs.
  • N'attendez pas la fin du client (si vous commencez à partir d'une ligne de commande).

La commande que j'utilise est

C:\emacs\bin\emacsclientw.exe -n -c -a ""

Le -n signifie n'attendez pas la fin du client lorsque vous lancez à partir de la ligne de commande. L' option -a vous permet de spécifier un autre éditeur si le serveur emacs ne fonctionne pas , mais si vous lui donnez une chaîne vide, il essaiera de démarrer le serveur emacs et de s'y connecter. Enfin, si vous mettez ceci dans un raccourci Windows, vous voulez également ajouter un -c qui ouvrira un nouveau cadre ( voir les options emacsclient ).

Voici mon raccourci, cela fonctionne pour moi (sous Windows 7, emacs 25.3). Je ne sais pas pourquoi la page emacswiki a mis une autre invocation d'emacsclientw comme éditeur alternatif qui n'a aucun sens.

Je dois ajouter que lorsque j'essaie d'omettre l' option -c lors de l'exécution en tant que raccourci , cela donne une erreur.

raccourci emacsclientw

Angelo
la source
La configuration du raccourci emacsclientw.exe de la manière indiquée produit: Error: Cannot connect even after starting the Emacs daemonConfirmé que ce raccourci lance le processus démon, mais les fichiers restent ouverts dans leur propre instance emacs. Testé avec et sans privilèges d'administrateur. Emacs 25.1, Windows 7.
Snelephant
@Snelephant, hmm, je ne sais pas ce qui pourrait mal se passer. J'ai même rétrogradé à emacs 25.1 et mon raccourci fonctionnait toujours. Comment ouvrez-vous des fichiers via un menu contextuel ou avec la commande dans le raccourci suivi du nom de fichier?
Angelo
L'erreur se produit à la fois lorsque je clique sur le raccourci vers emacsclientw.exe lui-même sans fichier spécifié et lorsque je clique sur un raccourci vers un fichier texte avec emacsclientw.exe et le nom de fichier spécifié dans le champ Cible. En fait, je ne suis pas clair sur la méthode prévue pour ouvrir des fichiers dans le client sous Windows? Je voudrais simplement cliquer sur le fichier dans l'Explorateur Windows. Cliquer sur un fichier dans OSX semble ouvrir le fichier dans une instance existante, mais cliquer sur un fichier dans Windows crée une instance distincte. Remarque J'ai configuré Windows pour ouvrir des fichiers texte à l'aide du fichier runemacs.exe fourni avec emacs.
Snelephant
Si vous avez configuré Windows pour ouvrir des fichiers texte avec runemacs.exe, ils s'ouvriront dans des processus Emacs distincts. Vous voudriez changer cette association pour utiliser emacsclientw à la place.
glucas
@glucas Modification des associations de fichiers texte vers le raccourci vers emacsclientw.exe comme Angelo l'a décrit. Cliquer sur un fichier texte produit le même Error: Cannot connect even after starting the Emacs daemon.
Snelephant
2

La commande que j'utilise est:

emacsclientw.exe --create-frame --no-wait --alternate-editor runemacs.exe --server-file %APPDATA%\.emacs.d\server\server

(Si le dossier bin Emacs n'est pas sur votre PATH, utilisez les chemins d'accès complets pour emacsclientw.exeet runemacs.exe.)

ou avec les noms d'options courts et l'astuce de chaîne vide,

emacsclientw.exe -c -n -a "" -f %APPDATA%\.emacs.d\server\server

Notez que l'astuce de chaîne vide pour -adémarrera le démon s'il n'est pas en cours d'exécution, mais ce n'est pas censé fonctionner avant Emacs 26 (je suis toujours sur 25). Avant 26, vous devez spécifier explicitement l'éditeur alternatif. J'ai utilisé runemacs.exe, mais mon Emacs est configuré pour démarrer le serveur et le laisser fonctionner.

Étant donné que Windows n'a pas les sockets de domaine Unix locaux emacsclientnormalement utilisés pour se connecter au serveur, il doit recourir à une socket TCP réseau. Pour des raisons de sécurité évidentes, vous ne voulez pas que n'importe qui sur votre réseau accède à l'ensemble de votre système de fichiers via le serveur Emacs. Ainsi, il emacsclientfaut connaître le bon port (éphémère) et le jeton de sécurité écrits dans le fichier serveur avant que le serveur ne lui permette de se connecter.

Si le serveur est déjà en cours d'exécution, vous ne devriez pas en avoir besoin -a(mais cela ne fait pas de mal). Vous pouvez définir la ALTERNATE_EDITORvariable d'environnement au lieu d'utiliser -a.

Si vous définissez la EMACS_SERVER_FILEvariable d'environnement, vous n'avez pas besoin de la spécifier à nouveau avec -f.

gilch
la source
0

Pour Emacs 26.3 et Windows 10 fonctionne:

Démon : C:\YOUR_EMACS\emacs-26.3\bin\emacs.exe "--daemon"

Client : par exemple:C:\YOUR_EMACS\emacs-26.3\bin\emacsclientw.exe "temp.org"

Lorsque vous ajoutez un exécutable Emacs dans PATH, vous pouvez facilement l'ouvrir emacsclientw.exedepuis n'importe où. Vous pouvez également ajouter un démon dans le dossier de démarrage: C:\Windows\System32\cmd.exe /c start /high emacs.exe "--daemon"

Michal
la source