Ich möchte verhindern, dass der "erste" Klick auf einen Frame in einem inaktiven X-Fenster andere Auswirkungen hat, als den Frame zu aktivieren. Insbesondere möchte ich nicht, dass der Punkt neu positioniert wird.
Das Problem ist , dass ich nicht zu erkennen scheinen , dass er Rahmen war inaktiv , wenn ich die Maus - Klick erhalten. Der folgende Code zeigt also immer"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)
Wie erkenne ich, dass der Frame zuvor inaktiv war?
Oder hat jemand bereits erreicht, was ich anderswo zu tun versuche?
Hinweis: Ich frage nach etwas anderem als dieser anderen Frage , bei der es um inaktive Fenster geht, nicht um inaktive Frames.
mouse-set-point
und eine eigene Funktion erstellen, um zu tun, was Sie wollen. Machen Sie denC-h k
Mausklick und sehen Sie sich die beiden (2) Funktionen an , die dort aufgelistet sind.Antworten:
Ich denke nicht, dass dies innerhalb von Emacs möglich ist. Das Problem ist, dass der Fenstermanager diesen Rahmen auswählt, sobald Sie in den Rahmen klicken. Emacs sieht es somit sofort als den ausgewählten Frame.
Ihr eigener Testcode zeigt dies. Keine Empfehlung von
mouse-drag-region
odermouse-set-point
(oder einer anderen Emacs-Funktion) wird einen Unterschied machen.(Vielleicht gibt es etwas, das Sie auf X11-Ebene tun können - keine Ahnung.)
quelle
post-command-hook
, alle Punktpositionen aufzeichnen und zurücksetzen, wenn sich das ausgewählte Bild ändert? Es wäre nicht effizient, aber es würde funktionieren.post-command-hook
ist der letzte Ausweg eines Schurken. ;-) Wir alle benutzen es für viele Sachen, aber es ist ein schwerer Hammer.Nicht genau das, wonach Sie fragen, aber das funktioniert gut für mich:
Dies entspricht nicht genau Ihrer Anfrage, da nicht nur der Frame aktiviert wird, sondern auch das angeklickte Fenster. Aber ich finde das nützlich. Ein Doppelklick verschiebt den Punkt, ein Einzelklick nicht.
quelle