Quero impedir que o "primeiro" clique em um quadro em uma janela X inativa tenha qualquer efeito, exceto para tornar o quadro ativo. Especificamente, não quero que ele reposicione o ponto.
O problema é que não consigo detectar que o quadro estava inativo quando clico no mouse. Portanto, o código a seguir sempre mostra "y"
:
;; detect if frame is active when clicking
(defun my/mouse-drag-region (event)
(interactive "e")
(mouse-minibuffer-check event)
(let* ((window (caadr event))
(frame (window-frame window)))
(if (eql frame (selected-frame))
(print "y")
(print "n"))))
(global-set-key [down-mouse-1] 'my/mouse-drag-region)
Como detecto que o quadro estava inativo anteriormente?
Ou alguém já conseguiu o que estou tentando fazer em outro lugar?
Nota: Estou pedindo algo diferente do que essa outra pergunta , que é sobre janelas inativas, e não quadros inativos.
mouse-set-point
e criar sua própria função para fazer o que quiser.C-h k
Clique com o mouse e veja as duas (2) funções listadas lá.Respostas:
Eu não acho que isso seja possível no Emacs. O problema é que, assim que você clica no quadro, o gerenciador de janelas seleciona esse quadro. O Emacs vê-o imediatamente como o quadro selecionado.
Seu próprio código de teste mostra isso. Sem assessoria de qualquer
mouse-drag-region
oumouse-set-point
(ou qualquer outra função Emacs) fará qualquer diferença.(Talvez haja algo que você possa fazer no nível X11 - não sei.)
fonte
post-command-hook
, gravar todas as posições dos pontos e revertê-las quando o quadro selecionado mudar? Não seria eficiente, mas funcionaria.post-command-hook
é o último recurso de um canalha. ;-) Todos nós o usamos para muitas coisas, mas é um martelo pesado.Não é exatamente o que você está pedindo, mas isso funciona bem para mim:
Isso não corresponde exatamente à sua solicitação, pois o quadro não é apenas ativado, mas a janela é clicada. Mas acho isso útil. O clique duplo move o ponto, o clique único não.
fonte