我想玩和试验一些软件工具,每个工具都有一个命令行界面.其中一些工具包括hbase,pig,erlang和prolog.我想使用emacs作为这些工具的UI,就像我可以运行带有Mx run-python的python shell或带有ielm模式的Lisp解释器一样.
我是否可以遵循以emacs模式包装其中一个命令行工具的方法?我正在寻找能显示工具提示的东西,让我用Cc Cn/Cp搜索历史记录,将当前输入提交到我按Enter键的工具流程,并显示工具的输出.
我知道很多这些工具可能已经有了emacs模式,我感兴趣的是如果不存在则如何快速构建一个.
我最近为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))
Run Code Online (Sandbox Code Playgroud)
该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)))
Run Code Online (Sandbox Code Playgroud)
在此之后,我有一些简单的代码定义了一个命令来启动一个进程,*inferior-gosu*如果它存在,它将弹出打开缓冲区.我还在正常的gosu模式中添加了一些代码来打开一个劣质的gosu shell.
简而言之:使用comint.
这里是整个代码的链接,但它没有更多内容:https://github.com/TikhonJelvis/Gosu-Mode/blob/master/inferior-gosu-mode.el
自然随意使用您想要的代码; 您可能还想查看正常的gosu模式,看看如何将erlang和prolog集成到语言的各自编辑模式中.