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

ben*_*hsu 8 emacs elisp

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

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

我知道很多这些工具可能已经有了emacs模式,我感兴趣的是如果不存在则如何快速构建一个.

Tik*_*vis 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))
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集成到语言的各自编辑模式中.

  • 这似乎是一个有用的答案,但可能不是创建模式的最佳方法?我希望看到`(define-derived-mode)`使用`,comint-mode`指定为父. (5认同)