在鼠标右侧(x坐标> 0x7F)禁用帮助菜单

3
当我点击或滚动鼠标滚轮,并且它的指针位于屏幕右侧没有文本的部分时,emacs会显示如下的帮助菜单:
按PageUp键从迷你缓冲区中获取此缓冲区。或者,您可以使用上/下箭头(或历史记录键)更改 --/.../-- 在此缓冲区中,键入RET以选择附近的完成。
可能的完成是: e==>Emacs教程 E==>Emacs教程(选择语言)... --/.../-- a==>关于Emacs A==>关于GNU =================================================================================
;; 这是我的工作缓冲区
================================================================================= 帮助(向上/向下更改,PgUp进入菜单):e==>Emacs教程
这非常令人不安,我必须按C-g返回编辑界面。如何禁用此功能?
P.S. 我尝试按C-h k < LMB at right>,但它不显示键的代码,而是再次显示该菜单。
编辑(响应Stefan):
按下后:aaa <LMB at right> C-g C-h l,我看到以下序列:
... a a a ESC [ M SPC \300\256 6 ESC [ M # \300\256 6 C-g C-h l
据我发现,那些符号:\300\2566取决于我单击时光标的位置。\300\256是类似于水平坐标,6是垂直坐标。
我进一步调查了这个问题:当来自普通符号(如a}DEL)的y坐标变为像\300\200这样的代码时(这是导致帮助菜单的第一个值),菜单将出现。根据Unicode符号表DEL代码是U+007F(0b01111111),下一个值将是U+00800(0b10000000)(填充字符),它在另一个表中:C1控制和Latin-1补充
我使用GNU emacs 23.2.1,在PuTTy ssh客户端上。
2个回答

1

这听起来不像是Emacs默认配置中的任何功能。我建议你尝试:a a a <右键单击>,然后使用C-h l,它应该会显示Emacs最近接收到的几个事件。尝试在其中找出对应于(它们将出现在a a a之后)的事件,以查看当您执行此操作时操作系统发送给Emacs的内容。


谢谢,我会在后天尝试,当我获得那台机器的访问权限时,并报告结果。 - Necto
尝试过了: ... a a a ESC [ M SPC \300\256 6 ESC [ M # \300\256 6 C-g C-h l - Necto
@Necto:啊哈!听起来可能是Emacs的一个特性,有趣的字节序列可能是Putty生成的点击编码,显然Emacs错误地认为这些字节意味着你正在点击顶部行(显示菜单栏的行)。您可能需要M-x report-emacs-bug,以便更了解此代码的人可以尝试找出问题所在。也许在更近期的Emacs版本中已经修复了这个问题(不能保证,但值得一试)。 - Stefan

0

这实际上是一个bug。 以下是解决方法:

;; Disable menubar
(menu-bar-mode -1)

;; Workaround for "mouse on menu-bar" bug
(defun transform-to-start-event (event)
  (let ((y0 (second (window-inside-edges (selected-window))))
        (x0 (first (window-inside-edges (selected-window)))))
    (let ((x (- (car (third (second event))) #x3fff00 x0))
          (y (- (cdr (third (second event))) y0))
          (time (fourth (second event))))
      `(down-mouse-1 ,(posn-at-x-y x y (window-at 0 0) t)))))

(defun tmm-menubar-mouse (event)
  (interactive "e")
  (let ((evt (transform-to-start-event event)))
    (push (cons 'up-mouse-1 (cdr evt)) unread-command-events)
    (mouse-drag-track evt t)))

它禁用了菜单栏,但我也不需要它。 此外,它不能正确处理选择和滚动,但至少可以正确定位光标。


不确定为什么这个被踩了。对我来说,这解决了同样的问题,在一个基于终端的ssh会话中使用emacs。 - Benjie Holson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接