Emacs中最长的已知键序列是什么?


14

Qt支持Emacs样式的键绑定,但是最多只支持四个键。为了说明为什么应该增加此限制,显示具有更多键的Emacs样式的键绑定示例很有用。是否有任何已知的示例,或者甚至可以以编程方式找到Emacs键映射中定义的长键序列?

编辑:我以为这是常识,但是一个键序列是由读取的一组键read-key-sequence。尝试F1 k寻找您的候选者,看看它是描述您的命令还是命令之前的无关命令。


我唯一想到的就是终端转义序列的转换,这不适用于Qt。超过3个实键是不寻常的。
吉尔(Gilles)'“ SO-不要邪恶”

感谢您提供问题和链接的上下文/原因。乍一看-在阅读之前,我错误地猜测该问题可能是题外话,对任何人都无济于事。
提请

这个问题的问题是没有人可以肯定地回答它。每个人都只能针对他/她的emacs配置进行回答。它不是基于观点的,而是一种主观的。
Tobias

1
这是否包括前缀参数?如果我想向下走一千行,我可以说C-u 1 0 0 0 C-n是六个键。
Stig Hemmer

1
@StigHemmer不行。F1 k C-u 1 0 0 0 C-n看看这C-u是一个关键的序列。
wasamasa

Answers:


23

我使用以下脚本进行了测试,

(key-description
 (car
  (sort
   (let (keyseqs)
     (mapatoms
      (lambda (sym)
        (when (commandp sym)
          (let ((where (where-is-internal sym nil nil t)))
            (when where
              (setq keyseqs (append keyseqs where)))))))
     keyseqs)
   (lambda (a b) (< (length b) (length a))))))

我用我获得最长的.emacs.d就是C-x c C-x r i这是一些执掌指挥,并与emacs -q我得到C-x a i l它运行的命令inverse-add-mode-abbrev


12
哈。给我C-x M-c M-b u t t e r f l y:)我忘了我已经做到了……
phils

where-is-internal到目前为止,这里占主导地位的CPU时间,但是您仍然可以通过将较短的列表破坏性地添加到较长的via中来轻松地剃掉几个周期(setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs))
罗勒

1
@phils我知道引用了,但是您究竟设置了该命令做什么?
Dan在火光旁摆弄

@DanNeely,我想你从未见过M-x butterfly?我只是将其绑定到该命令以提高真实性:)
phils

6

我无法回答某处最长的记录,但这可能会有所帮助。

  1. 我有一些库提供一组与绑定到前缀键的键映射中的键相关的命令。

    因为我不想选择用户密钥等,所以我通常在(keymap )下C-xother-window命令绑定或说这样的前缀密钥。C-x 4ctl-x-4-map

  2. 相同的注意事项适用于此类键盘图中的命令组:它们有时会获得自己的键盘图。依此类推。

  3. 我希望至少有些用户可能希望将任何这样的键映射(在任何级别)重新绑定到他们自己的较短的前缀键,或者他们可能希望将特定的命令绑定到较短的键序列。但是,显然我不想在库本身中这样做。

以下是一个这样的相当长的键的示例:C-x 4 j t . % *(7次击键),这势必命令icicle-bookmark-file-this-dir-all-tags-regexp-other-window书签+

解剖学:

  • C-x 4前缀键(ctl-x-4-map)上。

  • j前缀键上,用于所有跳转到书签的命令。

  • t前缀键上,用于所有跳转到以某种方式标记的书签的命令。

  • .前缀键上,该键用于所有命令,这些命令用于跳转到以某种方式标记当前目录中文件的书签。

  • %前缀键,这是所有的命令用于跳转到这是在事情书签当前目录标签匹配一个正则表达式将提示您输入。

  • *键上,该键用于所有跳转到书签的命令,这些命令用于当前目录中具有标记的事物,所有这些都您提示输入的正则表达式匹配。(通过对比,C-x 4 j t . % +是针对某些标签与正则表达式匹配的书签。)

所有这些在Bookmark + 中都是常规的(并且其中一些对应于Dired约定,BTW):j用于跳转命令,t用于标记.用于当前目录%用于regexp,并且*所有+对于某些)。


(呵呵,用@ mkcms的SEXP,我得到的C-x 4 j t f % *,这是同样长。该f代表文件。这就像C-x 4 j t . % *,但是对于完成候选书签是所有文件的书签,不只是那些在当前目录(文件.)。)


0

Magit添加长序列,因为它允许切换选项。例如,当您询问日志时,可以选择短选项或长选项,是否需要远程分支,是否需要图形化显示分支等等。对日志的基本请求只是magit-status缓冲区中的几次击键,但您可以添加更多击键。

提交同样适用,一次基本提交需要两次击键,但是有许多可选的附加项。

因此,问题未得到明确说明,您是否仅考虑stock(无论什么意思)emacs?


1
远非如此,我接受来自任何地方的例子。但是,您描述的是一组键序列,每个键序列都执行一个命令。要了解什么是按键序列,请尝试使用F1 k并查看您可以键入多少个按键,直到它描述了该命令。
wasamasa
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.