Почему мой термин-мод-хук не выбирает линейный режим? - PullRequest
4 голосов
/ 25 июля 2011

Я написал эту функцию elisp:

(defun run (command)
  "Open a terminal running a command."
  (interactive "sCommand: ")
  (if (buffer-exists (concat "*" command "*" )) (kill-buffer (concat "*" command "*")))
  (let ((term-mode-hook (cons (lambda () (term-line-mode)) term-mode-hook)))
    (ansi-term (cons "sh" (cons "-i" (list "-c" command))) command)))

Это работает хорошо, за исключением того, что новые буферы ANSI-терминалов остаются в режиме символов (который используется по умолчанию), поэтому, насколько я могу судить, вызов term-line-mode ничего не делает. Если я заменю (term-line-mode) на (message "foo"), я увижу сообщение в буфере сообщений.

Определение term-line-mode в lisp / term.el:

(defun term-line-mode  ()
  "Switch to line (\"cooked\") sub-mode of term mode.
This means that Emacs editing commands work as normally, until
you type \\[term-send-input] which sends the current line to the inferior."
  (interactive)
  (when (term-in-char-mode)
    (use-local-map term-old-mode-map)
    (term-update-mode-line)))

Что я делаю не так?

1 Ответ

5 голосов
/ 25 июля 2011

Я не смог заставить "term-line-mode" работать так, как вы хотите, ни в одном из термина ловушек;однако, это работает, если вы посоветуете функцию «ansi-term»:

(defadvice ansi-term (after advice-term-line-mode activate)
  (term-line-mode))
...