围绕命令行程序构建emacs包装模式的方法?

时间:2011-12-25 04:56:30

标签: emacs elisp

我想玩和试验一些软件工具,每个工具都有一个命令行界面。其中一些工具包括hbase,pig,erlang和prolog。我想使用emacs作为这些工具的UI,就像使用M-x run-python运行python shell或使用ielm模式运行Lisp解析器一样。

我是否可以遵循以emacs模式包装其中一个命令行工具的方法?我正在寻找能显示工具提示的东西,让我用C-c C-n / C-p搜索历史记录,将当前输入提交到我按Enter键的工具流程,并显示工具的输出。

我知道很多这些工具可能已经有了emacs模式,我对如何在没有任何东西的情况下快速构建它感兴趣。

1 个答案:

答案 0 :(得分:7)

我最近为gosu语言建立了一个“劣等的gosu模式”。它实际上非常简单:我只是扩展了comint这是shellielm所基于的模式。以下是代码的重要部分:

(require 'comint)
(defun inferior-gosu-mode ()
  (interactive)
  (comint-mode)
  (setq comint-prompt-regex inferior-gosu-prompt)
  (setq major-mode 'inferior-gosu-mode)
  (setq mode-name "Inferior Gosu")
  (setq mode-line-process '(":%s"))
  (use-local-map 'inferior-gosu-mode-map))

use-local-map位就是您定义特殊键绑定的位置;我把它作为comint绑定的副本:

(defvar inferior-gosu-mode-map nil)
(unless inferior-gosu-mode-map
  (setq inferior-gosu-mode-map (copy-keymap comint-mode-map)))

在此之后我有一些简单的代码定义了一个命令来启动一个进程,如果它存在,它将弹出*inferior-gosu*缓冲区。我还在正常的gosu模式中添加了一些代码来打开一个劣质的gosu shell。

简而言之:使用comint

以下是整个代码的链接,但没有更多内容:https://github.com/TikhonJelvis/Gosu-Mode/blob/master/inferior-gosu-mode.el

自然随意使用您想要的代码;您可能还想查看正常的gosu模式,看看如何将erlang和prolog集成到各种语言的编辑模式中。

相关问题