保存并执行Emacs键盘宏

时间:2017-01-19 13:27:34

标签: emacs keyboard-shortcuts

我在Emacs中的另一个会话中执行个人宏时遇到问题。我成功创建了宏并执行了但是,在我想保存它以便在另一个时间执行它们之后。

为此我在@font-face { font-family: 'fontawesome'; src: url('/styles/fonts/fontawesome/fontawesome.eot?6840zz'); src: url('/styles/fonts/fontawesome/fontawesome.eot?6840zz#iefix') format('embedded-opentype'), url('/styles/fonts/fontawesome/fontawesome.ttf?6840zz') format('truetype'), url('/styles/fonts/fontawesome/fontawesome.woff?6840zz') format('woff'), url('/styles/fonts/fontawesome/fontawesome.svg?6840zz#icomoon') format('svg'); font-weight: normal; font-style: normal; }

中编写了这段代码
~/.emacs

但是当我在另一个文件(fset 'psTest (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("^X2^X2^X2^X2" 0 "%d")) arg))) 中调用我的宏时,Emacs不执行我的宏,而是在我的文件中写[ M- x psTest ]

key

我的所有命令:
在终端:
^X2^X2^X2^X2
在emacs中:
user@PC $ emacs ~/.emacs

在终端:
C-x ( C-x 2 C-x ) C-x C-k n psTest M-x insert-kbd-macro [ENTER] psTest [ENTER] C-x C-c
在emacs中:
user@PC $ cat ~/.emacs : (fset 'psTest (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ("^X2" 0 "%d")) arg)))
user@PC $ emacs ~/test
现在我的宏[M-psTest]在我的文件中写^ X2而不是执行[^ X2]分割屏幕。

我的错误在哪里? 感谢

2 个答案:

答案 0 :(得分:1)

问题在于宏定义中的序列"^X2"。它包含两个字符^X,而不是charset 0x18中的单个字符ascii (ASCII (ISO646 IRV)),emacs用它来引用C-x但显示为同样,虽然可能是不同的颜色。如果用前一个字符替换前两个字母序列并再次评估定义,它应该可以工作。

您可以插入角色 C-x 8 RET #x18 RET

PS:在您可以使用的位置显示有关特定角色的信息 M-x desribe-charwhat-cursor-position,默认绑定到 C-x =

答案 1 :(得分:1)

我同意 Simon Fromme

要插入C-x字符,您可以从其答案中省略#x前缀并输入:

CX 8 RET 1 8 RET

但是如果你不知道这个或任何其他角色的ascii代码的十六进制值,你也可以简单地输入 C-q C-x

然而,在您的情况下,我宁愿搜索与C-x 2序列相关联的函数。您可以使用以下任一方法轻松找到split-window-below

  • C-h k C-x 2 RET
  • M-x edit-last-kbd-macro RET

然后你可以编写一些更容易复制/粘贴/保存的代码,如:

(fset 'psTest #'split-window-below)

(defun psTest ()
  (interactive)
  (split-window-below))

这可能是开始学习emacs-lisp的好方法!