inicie o emacsclient com foco na linha de comando

11

Quando inicio o emacsclient na linha de comando, como abaixo:

emacsclient -a '' -c "$@"

Ele sempre começa em segundo plano (janela do terminal na parte superior da janela do emacsclient), então eu tenho que usar o mouse para clicar na janela para mudar para o emacsclient.

É realmente frustrante, posso fazer com que o emacsclient focalize o quadro que aparece quando invocado na linha de comando?

insira a descrição da imagem aqui

lucky1928
fonte
Provavelmente, isso é mais uma função do gerenciador de janelas / ambiente de área de trabalho do que do emacs / emacsclient. No meu caso, o novo quadro aparece em cima da janela do terminal, por exemplo (Gnome 3.20 no Fedora 24).
NickD

Respostas:

14

Você pode usar server-switch-hooke elevar o quadro. Algo como:

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

Se isso deixar você sem foco no novo quadro, tente algo como:

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

Se você deseja ter um comando shell para exibir um quadro do Emacs (sem especificar um ou mais arquivos para editar), também pode fazer isso na linha de comando:

emacsclient -e "(raise-frame)"
glucas
fonte
Isso não funciona. mas parece que, se adicionar um nome de arquivo na linha de comando, o emacs aparecerá em primeiro plano, mas sem o arquivo para abrir, ele permanecerá em segundo plano.
precisa saber é o seguinte
Se você não precisa passar argumentos de nome de arquivo, também pode chamar uma função na linha de comando, por exemplo:emacsclient -e '(raise-frame)'
glucas 08/08/17
11
Seu conselho (selecionar quadro definir conjunto de entrada (quadro selecionado)) funcionou para mim.
Tim Stewart
2

Esse problema também foi relatado como um problema ( consulte a edição # 7078 da spacemacs ). A solução de usar um script de wrapper publicado lá funcionou para mim. Para completar, adicionarei o conteúdo do script aqui:

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

Não tenho pontos de reputação suficientes para comentar aqui. Mas seria ótimo se as informações sobre onde colocar o server-switch-hookitem pudessem ser adicionadas à resposta por @glucas. No final, não consegui nenhuma de suas soluções para funcionar de maneira totalmente direta ...

dalanicolai
fonte