【问题标题】:Emacs M-x commands for invoking "GUI-style" menus用于调用“GUI 样式”菜单的 Emacs M-x 命令
【发布时间】:2008-12-24 01:48:42
【问题描述】:

问题:在我的 Emacs 变体使用特定于操作系统的桌面功能的情况下,我如何找到在 Emacs 中执行基于 GUI 的操作的 M-x 等效命令?

背景: 传统的理解是,Emacs 中的一切都是命令,只要知道命令的名称,就可以通过 M-x 调用命令。假设这个陈述是正确的,那么在基于“桌面”的 Emacs 变体中,如何找到用于触发“GUI 样式”菜单的命令名称?

例如,如果我要通过鼠标选择“文件”菜单来打开文件,则会弹出特定于操作系统的“GUI”样式的文件打开对话框,等待我的输入。

我怎样才能找到做同样事情的 M-x 等效命令?

认为 describe-key 会告诉我我需要知道什么,但它是使用的指示:

M-x menu-find-file-existing

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

【问题讨论】:

    标签: user-interface emacs scripting elisp command


    【解决方案1】:

    你需要让 Emacs 认为键盘没有被使用,这不如让 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 是否类似地工作。

    【讨论】:

      【解决方案2】:

      哇,很高兴你这么问。我一直想自己查一下。

      C-h k 后跟菜单选项会告诉您这一点。例如,这里是您通过选择菜单/编辑/粘贴获得的结果:

      运行命令 clipboard-yank 这是 `menu-bar.el' 中的一个交互式编译的 Lisp 函数。 它绑定到 。 (剪贴板猛拉) 插入剪贴板内容,或最后一段被杀死的文本。

      如果您想了解详细信息,请点击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。很高兴知道它可以描述的不仅仅是键绑定。不幸的是,它似乎没有描述特定于 GUI 的变化来触发特定于操作系统的对话框。
      猜你喜欢
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多