我已经为我的语言定义了一个主要模式。 我正在尝试重新定义 C-x C-e,以便当我处于主要模式时,它会使用“我的”自定义解释器来评估表达式。
假设我的解释器只是一个命令行程序,可以像这样调用:
$my-interpreter <some expression>
我想,我需要做的就是进行系统调用,将表达式“before point”作为参数传递,并在回显区域中打印返回值。 这有多难,对吧?
问题:我不知道从哪里开始! 有什么提示吗?
谢谢。
最佳答案
您可以查看 shell-command
及其相关项,以及 thing-at-point
。这是一个非常简单的示例,它使用“解释器”(只是 shell echo
命令)来回显该处的单词:
(defun my-interpreter ()
(interactive)
(let ((arg (thing-at-point 'word)))
(when arg
(shell-command (concat "echo " arg)))))
(编辑以回应评论。)
如果您已为主要模式定义了键盘映射,则可以通过调用define-key
在您的主要模式中绑定(bind)C-x C-e
。否则,您可以使用 (local-set-key (kbd "C-x C-e") 'my-interpreter)
在本地绑定(bind)它。
我想到您可能对构建像 REPL 这样的交互式功能感兴趣。为此,您可以考虑 comint-mode
;请参阅EmacsWiki和 this post from Mastering Emacs获得灵感。
关于emacs - 重新定义 C-x C-e 以评估自定义语言表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397103/