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.