Недавно я создал «низший режим госу» для языка госу. На самом деле все оказалось довольно просто: я только что расширил 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
- это место, где вы определяете специальные привязки клавиш; У меня есть только копия привязки коминта:
(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.
Вкратце: используйте comint
.
Вот ссылка на весь код, но в этом нет ничего большего: https://github.com/TikhonJelvis/Gosu-Mode/blob/master/inferior-gosu-mode.el
Естественно, не стесняйтесь использовать этот код так, как вы хотите; Возможно, вы захотите взглянуть на обычный режим gosu, чтобы увидеть, как вы можете интегрировать свой erlang и пролог в соответствующие режимы редактирования языков.