点击emacs会消除x选择

时间:2011-07-14 20:20:53

标签: emacs mouse clipboard drag gnome

当我使用鼠标点击emacs窗口的时候,我希望粘贴到缓冲区中的x选项被吹掉了。这似乎是由于我应用左键导致无意中“拖拽副本”时手的轻微移动造成的。我不相信我能够打破这种特殊的习惯。

我发现阻止这种情况的一个解决方案是设置:

(setq mouse-drag-copy-region nil)

然而,这有一个令人遗憾的副作用,即阻止我在emacs中使用鼠标拖动功能。有没有办法控制鼠标拖动行为,以便忽略点击,除非它在缓冲区中展开两个或多个字符?

我正在使用GNU emacs 23.3.1在Centos 5.x + GNOME 2上进行编码,以防它有所作为。

这似乎是一个GTK / X问题;我可以与其他应用程序产生类似的行为。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是修改mouse-drag-track中的mouse.el功能。要查找函数定义, M-x查找函数鼠标拖动轨迹RET

将其复制到.emacs文件中并进行一处小改动。找到如下所示的and语句:

(and mouse-drag-copy-region
     do-mouse-drag-region-post-process
     (let (deactivate-mark)
       (copy-region-as-kill region-commencement
                            region-termination)))

并修改它以进行检查以确保该区域至少为2个字符。我已将此检查设为10个字符以便于测试:

(and mouse-drag-copy-region
     (>= (abs (- region-commencement region-termination)) 10) ;; THIS IS NEW
     do-mouse-drag-region-post-process
     (let (deactivate-mark)
       (copy-region-as-kill region-commencement
                            region-termination)))

我没有通过建议或钩子或变量设置看到干净的方法。 确保在定义(require 'mouse)之前有一个mouse-drag-track,以确保覆盖内置定义,而不是覆盖您的定义。您还可以在重定义上方的.emacs中添加一个检查,以提醒您检查要覆盖的库/函数的新版本:

(unless (eq emacs-major-version 23)
  (error "check for new mouse-drag-track"))

答案 1 :(得分:0)

这是在2001年引入源代码历史记录的emacs中的一个错误。我发布了一个可以应用于本地安装的补丁。希望emacs维护人员能够进一步调查。

这是我的补丁和讨论:

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00818.html