Emacs M-x命令用于调用“GUI风格”菜单

10
问题:在使用某些Emacs变种时,如果需要使用特定于操作系统的桌面功能,如何查找执行基于GUI的操作的M-x等效命令? 背景:传统理解认为,Emacs中的所有内容都是命令,并且只要您知道命令的名称,就可以通过M-x调用命令。假设这个说法是正确的,那么如何找到触发“桌面” Emacs 变体中“GUI-style”菜单的命令的名称呢?
例如,如果我使用鼠标选择File菜单以打开文件,则会弹出特定于操作系统的“GUI”样式的文件打开对话框,等待我的输入。
如何查找执行完全相同操作的M-x等效命令呢?
我曾经以为 describe-key
M-x menu-find-file-existing

该功能不调用“GUI”样式的文件打开对话框。相反,它使用 Emacs 内部的非 GUI、OS 中立变体。

2个回答

8
你需要欺骗Emacs,让它认为键盘没有被使用,这不像欺骗它认为鼠标已经被使用那么直观。 :)
(defadvice find-file-read-args (around find-file-read-args-always-use-dialog-box act)
  "Simulate invoking menu item as if by the mouse; see `use-dialog-box'."
  (let ((last-nonmenu-event nil))
    ad-do-it))

在WinXP上测试了Emacs 22.2.1。我相信这种范式已经存在一段时间了,所以它应该可以在旧版的Emacs上工作。不知道XEmacs是否也有类似的功能。


4

哇,很高兴你问了这个问题。我一直想查找这个信息。

按下C-h k,然后选择菜单选项,可以告诉你这个信息。例如,选择菜单/edit/paste,你会得到以下内容:

<menu-bar> <edit> <paste> 运行 `menu-bar.el' 中的交互式编译Lisp函数clipboard-yank。
它绑定到<paste>, <f18>, <menu-bar> <edit> <paste>。
(clipboard-yank)
插入剪贴板内容或最后一个被删除的文本。

如果你想要详细信息,请访问menu-bar-el链接查看LISP源代码。

(defun menu-find-file-existing ()
  "Edit the existing file FILENAME."
  (interactive)
  (let* ((mustmatch (not (and (fboundp 'x-uses-old-gtk-dialog)
                  (x-uses-old-gtk-dialog))))
     (filename (car (find-file-read-args "Find file: " mustmatch))))
    (if mustmatch
    (find-file-existing filename)
      (find-file filename))))

如果我没记错的话,M-x describe-key 相当于 Emacs 默认的 C-h k。很高兴知道它不仅可以描述按键绑定,还可以描述更多内容。不过遗憾的是,它似乎无法描述触发特定操作系统对话框的图形界面变化。 - dreftymac

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