关于使用Cx或Cc作为前缀键的约定


16

什么是使用的约定C-xC-c或者M-作为前缀键?

例如:是C-x等用于保存或访问缓冲区吗?是C-c等用于文本编辑吗?

背景

也许这是一个愚蠢的问题。我使用西班牙语键盘,有时会重新定义英语(QWERTY)键盘常用的键绑定。例如:shell命令在原始Emacs中绑定到M-!。我将其绑定到M-¡,因为M-!M-shift-1,我无法轻易按下。我想知道在进行此类更改时是否存在我要超越的约定


就像M-x是“执行扩展命令,这是您可以在Emacs中以交互方式完成的许多复杂内容的网关;它使您可以按名称运行任何Elisp函数”。并C-cC-x没有这样的描述?
Pinocchio

Answers:


21

如果您要讨论绑定键供自己使用,那么这就是规则:您可以绑定任何您喜欢的键。

如果要确保不绑定可能已经绑定的密钥,请使用C-c字母后跟。所有此类密钥都是为用户保留的(请参阅下一个)。


如果您谈论的是在编写的代码(例如,库)中绑定键供他人使用,则此处描述规则(惯例):Elisp手册的节点键绑定约定

与您的要求有关的主要规则是C-c

  • C-c LETTER在Lisp程序中不要将其定义为键。由C-c和组成的字母序列(大写或小写)供用户使用;它们是为用户保留的唯一序列,因此请不要阻止它们。

  • C-c后跟控制字符或数字组成的序列保留用于主要模式。

  • 组成的序列C-c,随后{}<>:;也预留作主要模式。

  • C-c为次要模式分配由后跟任何其他ASCII标点或符号字符组成的序列。绝对禁止在主要模式下使用它们,但是如果这样做,次要模式可能会不时地遮蔽主要模式绑定。

您会注意到,关于没有约定C-x。但是,这是一个未声明的约定,或者只是一个很好的建议/做法:如果替换了一些现有的标准Emacs绑定(即,从Emacs获得的分布式绑定,而没有加载任何第三方库),则可能会混淆或惹恼您的代码的某些用户。


您可以通过以下方式在Emacs中获取该文档:

  1. C-h i,以打开文档浏览器的信息。
  2. m el TAB RET,为 ENU EL ISP(TAB到完成),或者只需点击Elisp您的鼠标链接。
  3. key bi TAB然后n TAB RET完成Key Binding Conventions

或者,您可以i在Elisp手册中使用它来完成索引条目:

  1. C-h i m el TAB RET
  2. i key bi TAB,完成并向key binding您显示了两种可能性:key bindingkey binding, conventions for。键入, TAB完成到第二个,然后RET接受它。

最好遵循约定将C-c用户命令绑定并字母化。这样,您可以(几乎)确定不会从已经安装的或将来某天要安装的主要模式中覆盖其他绑定。
Tobias

1
@Tobias:不知道你在说什么。比什么更好?应该遵守所有的键绑定约定,包括C-c在第三方库中不绑定+ LETTER。
提请

您在回答的第一句话中正确指出,没有严格的私人使用规则。但是,出于我在第一条评论中给出的原因,建议遵循用户键绑定的约定。也许,您可以在第一部分的“ 一切顺利”规则下方添加一条注释。我只想说,德鲁。最好的问候,
Tobias

3
@Tobias:我补充了我想你说的话;谢谢。但是,对于键绑定,用户没有遵循的约定。该“约定用户的按键组合”,你说的是不是用户约定。它们是编码Lisp的约定,其他人将使用它们。(我知道您知道这一点。对于其他阅读本文的人,只想明确一点即可。)
Drew

什么是控制角色?
Didier A.

2

@Drew的答案更加细致和详细。

这是一个完全正确的问题!按照惯例,C-xemacs本身保留,而C-c前缀用于用户定义的键绑定。

看看这个,特别是“保留键”一节。我很确定emacs手册中也说明了这些信息,但是我现在似乎找不到它。约定在emacs lisp手册的部分中描述。


1
C-c用户保留不带修饰符的字母(小写或大写)。以其他开头的许多键序列C-c保留给主要模式使用-尤其是那些第二个按键也被控制键修改的模式。
Tobias '18

你是对的,当然。@Drew更好地回答了这个问题。
Panagiotis Koutsourakis,

就像M-x是“执行扩展命令,这是您可以在Emacs中以交互方式完成的许多复杂内容的网关;它使您可以按名称运行任何Elisp函数”。并C-cC-x没有这样的描述?
Pinocchio
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.