emacs - 重新定义 C-x C-e 以评估自定义语言表达式

标签 emacs elisp

我已经为我的语言定义了一个主要模式。 我正在尝试重新定义 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;请参阅EmacsWikithis post from Mastering Emacs获得灵感。

关于emacs - 重新定义 C-x C-e 以评估自定义语言表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24397103/

相关文章:

emacs - 如何在 emacs 中定期运行任务?

emacs - 以通用方式定义自定义 Emacs 钩子(Hook)

java - 寻找 pydoc analog for java 以从命令行读取文档

emacs - 你的 .emacs 里有什么?

emacs - 如何在 elisp 中覆盖/更改模式键绑定(bind)?

emacs - Emacs下Coq/Proof General中关键字和运算符的Unicode字形

search - 在 emacs lisp 中,有没有办法搜索与当前点重叠的字符串相匹配的文本?

emacs - 在最近的 Emacs 中在其他窗口中显示缓冲区

emacs - 我可以在 emacs 中对行的开头进行制表吗

emacs - 使用 font-lock-defaults 时在 Emacs 中设置文本属性