démarrer emacsclient avec focus depuis la ligne de commande


11

Lorsque je démarre emacsclient à partir de la ligne de commande comme ci-dessous:

emacsclient -a '' -c "$@"

Cela commence toujours en arrière-plan (fenêtre de terminal en haut de la fenêtre emacsclient), donc je dois utiliser la souris pour cliquer sur la fenêtre pour passer à emacsclient.

C'est vraiment frustrant, puis-je demander à emacsclient de concentrer le cadre qui apparaît lorsqu'il est appelé à partir de la ligne de commande?

entrez la description de l'image ici


C'est probablement plus une fonction du gestionnaire de fenêtres / environnement de bureau, que d'emacs / emacsclient. Dans mon cas, le nouveau cadre apparaît en haut de la fenêtre du terminal, par exemple (Gnome 3.20 sur Fedora 24).
NickD

Réponses:


14

Vous pourrez peut-être utiliser le server-switch-hooket soulever le cadre. Quelque chose comme:

(add-hook 'server-switch-hook #'raise-frame)

Si cela vous laisse sans vous concentrer sur le nouveau cadre, vous pouvez essayer quelque chose comme ceci à la place:

(add-hook 'server-switch-hook (lambda () (select-frame-set-input-focus (selected-frame))))

Si vous cherchez à avoir une commande shell pour afficher un cadre Emacs (sans spécifier un ou plusieurs fichiers à modifier), vous pouvez également le faire à partir de la ligne de commande:

emacsclient -e "(raise-frame)"

Ça ne marche pas. mais il semble que si vous ajoutez un nom de fichier sur la ligne de commande, emacs apparaîtra au premier plan mais sans fichier à ouvrir, il restera en arrière-plan.
lucky1928

Si vous n'avez pas besoin de passer des arguments de nom de fichier, vous pouvez également appeler une fonction à partir de la ligne de commande, par exemple:emacsclient -e '(raise-frame)'
glucas

1
Vos conseils (sélection de trame-set-entrée-focus (trame sélectionnée)) ont fonctionné pour moi.
Tim Stewart

2

Ce problème a également été signalé comme un problème ( voir le numéro de spacemacs 7078 ). La solution d'utiliser un script wrapper affiché ici a fonctionné pour moi. Pour être complet, j'ajouterai le contenu du script ici:

#!/usr/bin/bash

if [[ "$#" -lt 1 ]] ; then
    emacsclient -c -e \
                "(select-frame-set-input-focus (selected-frame))" \
                "(delete-other-windows)" \
                "(spacemacs/home)" else
    emacsclient -c -e \
                "(select-frame-set-input-focus (selected-frame))" \
                "(delete-other-windows)" \
                "(find-file \"$1\")" fi

Je n'ai pas assez de points de réputation pour commenter ici. Mais ce serait bien si des informations sur l'endroit où les placer server-switch-hookpouvaient être ajoutées à la réponse par @glucas. En fin de compte, je n'ai obtenu aucune de ses solutions pour travailler de manière parfaitement simple ...

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.