如何捕获'M-0<;f4>;`事件并在Emacs中以该格式将其写入缓冲区?
我正在将格式化的击键捕获到一个缓冲区,该缓冲区与我已经工作了几天的 我几乎在我想要的地方就有了它,除了它似乎无法捕获由如何捕获'M-0<;f4>;`事件并在Emacs中以该格式将其写入缓冲区?,emacs,elisp,Emacs,Elisp,我正在将格式化的击键捕获到一个缓冲区,该缓冲区与我已经工作了几天的 我几乎在我想要的地方就有了它,除了它似乎无法捕获由触发的kmacro end或call宏命令或由C-x*触发的calc dispatch命令之外。我不确定还有什么可能遗漏,因为我的测试只暴露了这些异常 如果您不想这样做,以下是目前的功能: (defun vimgolf-capture-keystroke () (with-current-buffer (get-buffer-create vimgolf-keystrokes
触发的kmacro end或call宏
命令或由C-x*
触发的calc dispatch
命令之外。我不确定还有什么可能遗漏,因为我的测试只暴露了这些异常
如果您不想这样做,以下是目前的功能:
(defun vimgolf-capture-keystroke ()
(with-current-buffer (get-buffer-create vimgolf-keystrokes-buffer-name)
(end-of-buffer)
(if (not (or executing-kbd-macro prefix-arg))
(progn
(insert (key-description (this-command-keys)))
(insert " ")))))
(defun vimgolf-capture-keystrokes ()
(add-hook 'post-command-hook 'vimgolf-capture-keystroke))
(defun vimgolf-stop-capture-keystrokes ()
(remove-hook 'post-command-hook 'vimgolf-capture-keystroke))
(取消捕获击键()
(使用当前缓冲区(获取缓冲区创建按键缓冲区名称)
(缓冲区结束)
(如果(不是(或执行kbd宏前缀arg))
(项目
(插入(键说明(此命令键)))
(插入“;”))
(取消捕获击键()
(添加钩子“后命令钩子”和“捕捉击键”)
(定义停止捕捉击键()
(从捕捉击键中移除挂钩“后命令挂钩”)
我所知道的这两个问题函数之间唯一的联系是,它们都在完成实际执行的命令之前递归执行其他命令
通过将上述捕获函数转换为以下函数,我可以捕获命令的开头,但不能捕获命令的结尾:
(defun vimgolf-capture-keystrokes ()
(add-hook 'pre-command-hook 'vimgolf-capture-keystroke))
(defun vimgolf-stop-capture-keystrokes ()
(remove-hook 'pre-command-hook 'vimgolf-capture-keystroke))
(取消捕获击键()
(在捕捉击键时添加钩子“预命令钩子”)
(定义停止捕捉击键()
(从捕捉击键中移除挂钩“预命令挂钩”)
即使我从附加到缓冲区的限制中关闭执行kbd宏的,它仍然不会捕获该事件。我试图检查post命令钩子中的实际向量,在所有情况下,它都是我所期望的,但是对于
,它呈现一个空向量
那么如何将这些密钥放入捕获缓冲区呢
为了方便起见,我一直在使用质询ID4D2FB20E63B08B008B0000075
测试这个问题
我按下的确切键是C-em-4m-bm-ddc-bm-2m-2c-yc-yc-fm-0c-om-
这些键进入我的捕获缓冲区的方式和它现在的功能是C-em-4m-bm-d C-bm-2m-2c-yc-f C-o M-<:M-1v r C-u y
我记得--我刚刚试过,它捕获了那些特定的键。出于您的目的,另一件好事是它将捕获的密钥限制在当前缓冲区内。另外,您可以指定某些不会被记录的命令,这对于排除特定命令非常方便。(旁白;如果您为vimgolf模式
使用单独的“控制缓冲区”,为laediff模式
,则不会收到任何vimgolf特定的击键污染质询缓冲区的命令日志。)
上述软件包(目前)的限制是,它不会捕获在minibuffer中输入的击键(例如,对于M-x排序行RET
),但当(minibuffer p)
时,也可以通过捕获键来扩展
该包通过挂接到当前使用的命令前钩子
而不是命令后钩子
来工作。FWIW,如果您愿意,您可以不使用键描述中的尖括号——它们从来都不是必需的(没有任何用途——只是噪音)。库允许您这样做。描述