防止鼠标单击无效帧中的重新定位点


11

我要防止在非活动X窗口中单击框架上的“第一次”效果,而不是使框架处于活动状态。具体来说,我不想让它重新定位。

问题是,我似乎无法检测到他的帧不活动的时候,我得到了鼠标点击。因此,以下代码始终显示"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)

我如何检测到该框架以前处于非活动状态?

或者,是否有人已经实现了我在其他地方想要做的事情?

注意:我要问的是与其他问题不同的东西,它是关于不活动的窗口,而不是不活动的框架。


您想要修改其键盘快捷键mouse-set-point并创建自己的功能以执行所需的任何操作。做C-h k鼠标点击的东西,看到了两(2)功能被列出。
法律学家

您的相框没有标题栏和边框吗?为什么不单击这些而不是单击缓冲区呢?
德鲁

@lawlist:我认为这没有帮助,因为up事件要晚得多。我什至不知道在Down事件期间该框架处于非活动状态!
edam 2015年

2
@德鲁:好吧,我可以,但这很无聊。我宁愿只能够在X窗口中单击,就像在终端中运行emacs一样。
埃丹(Edam)

这确实是一个非常令人讨厌的行为。我完全不使用鼠标来防止这种情况。使用Alt + Tab和co。在帧之间切换。
GergelyPolonkai 2015年

Answers:


1

我认为Emacs不可能做到这一点。问题是,一旦您单击框架,窗口管理器就会选择该框架。因此,Emacs立即将其视为选定的框架。

您自己的测试代码显示了这一点。任何一个mouse-drag-regionmouse-set-point(或任何其他Emacs函数)的建议都不会有任何不同。

(也许您可以在X11级别上做一些事情-dunno。)


您是否不能通过跟踪选定的帧post-command-hook,记录所有的点位置并在选定的帧改变时将它们还原?效率不高,但是可以。
PythonNut

@PythonNut:gh。也许。尝试一下。post-command-hook是流氓的不得已。;-)我们都将它用于很多东西,但这是一把沉重的锤子。
Drew

1

并非完全符合您的要求,但这对我很有效:

(global-unset-key [down-mouse-1])   ; no dragging nonsense
(global-set-key [mouse-1] 'mouse-select-window)  ; no setting point

这不完全符合您的要求,因为不仅使框架处于活动状态,而且单击了窗口也是如此。但是,我发现这很有用。双击移动点,单击不移动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.