avvia emacsclient con focus dalla riga di comando


11

Quando avvio emacsclient dalla riga di comando come di seguito:

emacsclient -a '' -c "$@"

Inizia sempre in background (finestra del terminale sopra la finestra di emacsclient), quindi devo usare il mouse per fare clic sulla finestra per passare a emacsclient.

È davvero frustrante, posso ottenere emacsclient per focalizzare il frame che si apre quando viene richiamato dalla riga di comando?

inserisci qui la descrizione dell'immagine


Questa è probabilmente più una funzione dell'ambiente window manager / desktop che di emacs / emacsclient. Nel mio caso, il nuovo frame si apre sopra la finestra del terminale, ad esempio (Gnome 3.20 su Fedora 24).
NickD

Risposte:


14

Potresti essere in grado di utilizzare server-switch-hooke sollevare il riquadro. Qualcosa di simile a:

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

Se questo ti lascia senza focus sulla nuova cornice, potresti provare qualcosa del genere invece:

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

Se stai cercando di avere un comando shell per far apparire un frame Emacs (senza specificare uno o più file da modificare), puoi anche farlo dalla riga di comando:

emacsclient -e "(raise-frame)"

Non funziona ma sembra che se aggiungi un nome di file nella riga di comando, emacs si aprirà in primo piano ma senza file da aprire, rimarrà in background.
lucky1928

Se non è necessario passare argomenti del nome file, è anche possibile chiamare una funzione dalla riga di comando, ad esempio:emacsclient -e '(raise-frame)'
glucas

1
Il tuo consiglio (select-frame-set-input-focus (selezionato-frame)) ha funzionato per me.
Tim Stewart,

2

Questo problema è stato anche segnalato come problema ( vedi il problema # 7078 di spacemacs ). La soluzione di utilizzare uno script wrapper pubblicato lì ha funzionato per me. Per completezza aggiungerò il contenuto dello script qui:

#!/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

Non ho abbastanza punti reputazione per commentare qui. Ma sarebbe fantastico se le informazioni su dove posizionare il file server-switch-hookfossero aggiunte alla risposta di @glucas. Alla fine non ho avuto nessuna delle sue soluzioni per funzionare in modo completamente semplice ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.