我想玩和试验一些软件工具,每个工具都有一个命令行界面。其中一些工具包括hbase,pig,erlang和prolog。我想使用emacs作为这些工具的UI,就像使用M-x run-python运行python shell或使用ielm模式运行Lisp解析器一样。
我是否可以遵循以emacs模式包装其中一个命令行工具的方法?我正在寻找能显示工具提示的东西,让我用C-c C-n / C-p搜索历史记录,将当前输入提交到我按Enter键的工具流程,并显示工具的输出。
我知道很多这些工具可能已经有了emacs模式,我对如何在没有任何东西的情况下快速构建它感兴趣。
答案 0 :(得分:7)
我最近为gosu语言建立了一个“劣等的gosu模式”。它实际上非常简单:我只是扩展了comint
这是shell
和ielm
所基于的模式。以下是代码的重要部分:
(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集成到各种语言的编辑模式中。