Configurer Emacs sur Windows pour démarrer une seule instance et ouvrir des fichiers dans l'instance existante

18

Je suis particulièrement intéressé par l'expérience Windows complète, notamment:

  • Démarrage automatique d'un serveur s'il n'est pas déjà démarré
  • Comment appeler emacs pour qu'il utilise le serveur (par exemple à partir de la ligne de commande ou d'outils tiers)
  • Prise en charge du menu contextuel (par exemple, cliquez avec le bouton droit sur un fichier et autorisez-le à être envoyé à emacs pour consultation et modification)

Un tel support est-il disponible dès le départ?

cristobalito
la source

Réponses:

21

Démarrage automatique d'un serveur s'il n'est pas déjà démarré

Cela devrait être le même pour toute construction Emacs. Ajoutez cet extrait à votre .emacsou .emacs.d/init.el.

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

Et puis lancez simplement emacs en exécutant l' runemacs.exeexécutable fourni avec la build.

Comment appeler emacs pour qu'il utilise le serveur (par exemple à partir de la ligne de commande ou d'outils tiers)

La version Windows d'Emacs est livrée avec un emacsclientw.exeexécutable dans le bin/répertoire. Utilisez le chemin d' accès complet à cet exécutable comme éditeur de votre choix sur tous les outils tiers que vous devez configurer.

Prise en charge du menu contextuel (par exemple, cliquez avec le bouton droit sur un fichier et autorisez-le à être envoyé à emacs pour consultation et modification)

  1. Faites un clic droit sur un fichier, sélectionnez Open With -> Select Default Program.
  2. Dans la fenêtre qui apparaît, accédez à votre emacsclientw.exeexécutable mentionné ci-dessus et choisissez-le.
  3. Si vous ne voulez pas qu'Emacs soit la valeur par défaut, recommencez les étapes 1 et 2, en choisissant un autre programme par défaut.

emacsclientw.exe sera désormais toujours une option dans le menu contextuel.

Malabarba
la source
Merci - grand point sur le serveur, je ne pensais pas.
cristobalito
En ce qui concerne emacsclient.exe, ne devrait-il pas s'agir d'emacsclientw.exe? De plus, je pensais que vous deviez l'exécuter avec l'indicateur -a pour spécifier un éditeur alternatif si le serveur ne fonctionnait pas.
cristobalito
Afin que le serveur fonctionne correctement avec ma configuration, j'ai également dû ajouter une variable d'environnement EMACS_SERVER_FILEqui pointait vers mon .emacs.d\serverrépertoire.
Ryan
@Ryan J'ai pu faire fonctionner cela sans avoir besoin de la variable d'environnement - juste nécessaire pour m'assurer que le serveur fonctionnait.
cristobalito
Hmm, pour moi, évaluer les (server-running-p)retours :othersur Windows (même après avoir essayé de définir cette EMACS_SERVER_FILEvariable env.
Kaushal Modi
5

Démarrage automatique d'un serveur s'il n'est pas déjà démarré

Je recommande fortement de définir une variable d'environnement pour ALTERNATE_EDITORto runemacs.exe. De cette façon, vous pouvez toujours appeler emacsclient même s'il n'y a pas de serveur. Ajoutez simplement (démarrage du serveur) à votre fichier init. Quand un serveur n'existe pas, emacsclient appelle le ALTERNATE_EDITORqui est emacs dans notre cas. Depuis qu'emace démarre un serveur dans le fichier init, tout nouvel appel à emacsclient sera instantané.

Comment appeler emacs pour qu'il utilise le serveur (par exemple à partir de la ligne de commande ou d'outils tiers)

Utilisez emacsclientw.exe -c -n "your_file"pour ouvrir votre_fichier. L' -cargument crée un nouveau cadre graphique et -nvous permet de fermer le cadre sans perdre l'état du serveur. Vous pouvez même l'appeler sans nom de fichier pour ouvrir le *Scratch*tampon. Fonctionne également à partir d'un raccourci sur le bureau. L'utilisation de emacsclient.exe(notez le w manquant) fera apparaître une invite de commande pendant quelques secondes à chaque appel.

Ajout au menu contextuel

Emacswiki a une belle page sur l'ajout d'Emacs au menu contextuel ici . Il s'agit de modifier le nœud de registre HKEY_CLASSES_ROOT\*pour ajouter une action à ouvrir avec emacs.

Vamsi
la source
5

D'autres ont répondu à la partie serveur. Voici ce que je fais pour obtenir des utilitaires de type UNIX / GNU / Linux tels que grepet diff:

  1. Installez Cygwin (opération unique).
  2. Charge cygwin-mount.el.
  3. Charge setup-cygwin.el.

Cependant, sachez qu'il existe différentes versions de Cygwin. J'utilise une version plus ancienne (ne sais pas laquelle - difficile à dire, AFAICT). Je ne sais pas si vous aurez des problèmes avec les versions récentes.

Voir également:

A dessiné
la source
Remarque: N'utilisez pas le cygwin EMACS. Installez la version GNU à partir de ftp.gnu.org/gnu/emacs/windows
M Smith
Je ne recommande pas d'installer Cygwin, car il peut y avoir des effets secondaires indésirables (comme casser d'autres ports Windows gnu comme emacs, gcc, ...), juste pour avoir quelques outils gnu. Installez plutôt les ports GnuWin32 . Vous pouvez installer l'ensemble du package ou les outils sélectionnés de votre choix.
Seki
@Seki - Oui, Eli Zaretskii dit la même chose que toi. Tout ce que je peux dire, c'est que je n'ai eu aucun problème (et j'ai de sérieux doutes quant à votre affirmation selon laquelle il aurait brisé Emacs ). Mais (a) j'utilise une ancienne version de Cygwin et (b) je n'utilise pas la plupart des utilitaires UNIX / GNU Linux fournis par Cygwin.
attiré le
@drew: peut-être excessif pour parler de "casser" emacs, "provoquer un comportement bizarre" aurait été mieux. Par exemple, Cygwin Make freinera la chaîne d'outils MinGW si vous ne vérifiez pas soigneusement votre chemin pour les outils Cygwin qui ne sont pas pris en compte ou pris en compte par défaut s'il n'en existe pas d'autre. Il ne se limite pas à Make, de nombreux autres outils ne peuvent pas se mélanger et il est parfois subtil de pointer le problème. Donc, en bref, soit vous avez un port natif d'Emacs et il est préférable d'avoir des outils GNU natifs, soit vous pouvez utiliser toute la distribution Cygwin, y compris ses emacs.
Seki
@Seki: Il semble donc que votre point principal est que Cygwin et MingGW ne jouent pas bien ensemble. Cela ne m'étonne pas. (FWIW, je n'ai rien contre l'utilisation de MingGW au lieu de Cygwin. Pour moi, il était simple d'installer Cygwin, et je n'en utilise pas assez pour avoir rencontré des problèmes.)
Drew