Eu quero forçar o emacs a ser ativado, ser comprado para ser usado e 'roubar' o foco em determinadas circunstâncias. Por exemplo, quando eu termino um org-Pomodoro ou durante um lembrete de compromisso importante.
Agora, estou procurando uma maneira 'nativa' de fazer isso, apenas para reduzir dependências externas. (apenas o Linux é bom para mim, a plataforma cruzada seria melhor).
Isso é tecnicamente possível a partir do emacs?
Solução:
Se você estiver usando a GUI, isso funcionará bem:
(x-focus-frame nil)
[Por razões históricas ...] Eu tentei:
Visibilidade do quadro (não funciona)
(make-frame-visible)
E também:
(make-frame-invisible)
(make-frame-visible)
Mas estes parecem funcionar apenas se o Emacs já estiver ativado.
Elevação de quadro (não funciona)
O quadro mais baixo parece realmente ocultar o emacs.
(lower-frame)
Mas elevar o quadro de um temporizador não. Ou seja, nada acontece.
(raise-frame)
Parece que falta um 'ativar-emacs' antes de aumentá-lo.
[NOTA sobre solução externa]
Atualmente, como (solução alternativa / solução?) Eu uso um pouco do elisp:
(call-process "activateEmacs")
E o respectivo script bash: (pode ser necessário instalar o xdotool no seu sistema primeiro)
#!/bin/sh
sleep 0.5
xdotool search --onlyvisible --class emacs windowactivate
raise-frame
.(defvar my-timer (run-with-idle-timer 5 t (lambda () (raise-frame))))
. Suspenda o quadro comM-x (suspend-frame)
. Em 5 segundos, esse quadro reaparecerá.(suspend-frame)
e esperar lá sem clicar em outra janela. Mas se você suspender o quadro e continuar trabalhando em outro aplicativo, o emacs não reaparecerá. Pelo menos não no meu sistema (fedora 21 com o Mate desktop). Um exemplo simples é este:: (run-at-time "5 sec" nil '(lambda () (interactive) (message "trying to raise frame") (raise-frame)))
execute isso e pressione a tecla Alt-tab em outro aplicativo. A mensagem aparecerá no buffer, mas o emacs não será gerado ... Pensamentos?Respostas:
Se você estiver usando um sistema de janelas, poderá usá-lo
x-focus-frame
.Nota:
x-focus-frame
funciona para Windows e Linuxw32-focus-frame
no Windows.fonte
Quer
(x-focus-frame nil)
ou(other-frame 0)
vai fazê-lo. Não tenho certeza se existe alguma diferença de comportamento entre os dois.fonte