Exécution d'Emacs à partir de la barre des tâches Windows

8

Lorsque je souhaite basculer entre les programmes sous Windows, j'utilise généralement la touche Windows plus une touche numérique pour exécuter un programme à partir de ma barre des tâches. La plupart des programmes démarrent ou, s'il existe déjà une instance, la mettent au premier plan et se concentrent dessus. Mais Emacs (démarré avec runemacs.exe) créera une nouvelle entrée dans la barre des tâches, et l'utilisation du raccourci à nouveau ne fera que créer une nouvelle instance. Pour autant que je sache, je ne peux même pas basculer entre les différentes images en utilisant les commandes Emacs (j'ai essayé Cx 5 o).

Existe-t-il un moyen de faire en sorte que les utilisations ultérieures des raccourcis clavier Windows utilisent uniquement l'instance existante d'Emacs et, sinon, puis-je au moins le faire pour pouvoir naviguer facilement entre les différents cadres? J'ai essayé cet extrait:

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

de la réponse à cette question , mais cela n'a pas fait de différence.

resueman
la source
Pouvez-vous spécifier à quel extrait vous faites référence?
nispio
Cet extrait garantit qu'un serveur d'édition est créé la première fois qu'Emacs est exécuté. Les appels ultérieurs à Emacs qui souhaitent se connecter au même serveur d'édition doivent utiliseremacsclientw.exe
nispio
@nispio Ah, cela explique pourquoi cela ne fonctionnait pas. Existe-t-il un moyen de tout exécuter sur le même serveur d'édition sans avoir besoin de l'exécuter à partir de différents exécutables?
resueman
Cette réponse fonctionnera probablement: emacs.stackexchange.com/a/158/93 . Lorsque vous fournissez runemacs.exeun autre éditeur, vous pouvez appeler emacsclientw.exemême si aucun serveur d'édition n'est en cours d'exécution.
nispio
1
Voir mon commentaire à la réponse de nispio sur la façon d'éviter de créer un nouveau cadre.
Vamsi

Réponses:

5

Ajoutez ceci à votre fichier init pour vous assurer qu'un serveur d'édition est créé au démarrage d'emacs

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

Faites maintenant pointer votre raccourci Windows emacsclientw.execomme suit:

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

Cela devrait concentrer une trame Emacs existante (le cas échéant), sinon appeler runemacs.exeautrement. (Merci à Vamsi pour son aide dans le réglage des paramètres de commande)

nispio
la source
Cela fonctionne comme je le souhaite si je lui transmets un fichier à exécuter, mais si j'utilise simplement la commande telle quelle, elle affiche une erreur indiquant «nom de fichier ou argument requis».
resueman
@resueman Un -cindicateur résout-il ce problème?
nispio
2
@nispio One peut être utilisé C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe"pour éviter de créer un nouveau cadre et augmenter le cadre précédent.
Vamsi
@Vamsi mais sans la -cvolonté s'attend-il également à ce qu'un fichier soit visité? (Si vous ne pouvez pas dire que je ne suis pas sur une machine Windows en ce moment.)
nispio
@Vamsi Cela fonctionne parfaitement. @nispio il semble bien fonctionner sans -ctant qu'il a l' -eexpression.
resueman
7

Je suis tombé sur une autre réponse au problème sur SuperUser aujourd'hui. Cela semble plus hackish, mais le résultat est plus cohérent avec d'autres programmes sur Windows.

  1. Exécutez runemacs.exe sans icône préexistante dans la barre des tâches.
  2. Faites un clic droit sur l'icône Emacs en cours d'exécution dans la barre des tâches, puis cliquez sur "épingler ce programme à la barre des tâches".
  3. Fermer Emacs
  4. Faites un clic droit sur l'icône Emacs épinglée dans la barre des tâches, cliquez sur Propriétés et changez la cible d'emacs.exe en runemacs.exe.
resueman
la source
1
FWIW, c'est ce que je fais. Je n'ai pas compris que c'est ce que vous vouliez, d'après votre question. Je pensais que vous vouliez utiliser emacsclient, entre autres. BTW, Propertiesvous pouvez également définir le Start inrépertoire et ouvrir Emacs dans un fichier ou un répertoire particulier. (Je démarre Emacs avec Dired dans le Start inrépertoire. IOW, je passe le même dir ( "-quoted) que l'argument à runemacs.)
Drew
@Drew Je n'ai probablement pas très bien expliqué ce que je voulais. Je suis encore assez nouveau pour qu'il soit difficile de tout arranger. Merci pour les conseils.
resueman