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

lucky1928
la source
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)"
glucas
la source
Ç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 ...

dalanicolai
la source