Ответ 1
Я думаю, что это именно то, что вы хотите.
Функция удаления-завершения-окна-буфера будет выполняться каждый раз, когда вы вводите команду. Он находит все текущие окна и извлекает из него буфер. Затем он проверит, является ли имя буфера "* Completions *", буфером, который вас бесит, и, если это так, уничтожит буфер и удалит соответствующее окно.
Наконец, он передает выходную строку вашим следующим хукам comint-preoutput-filter-functions.
Почему есть выходной аргумент? Смотрите документ comint-preoutput-filter-functions; лучше объяснил там.
(defun delete-completion-window-buffer (&optional output)
(interactive)
(dolist (win (window-list))
(when (string= (buffer-name (window-buffer win)) "*Completions*")
(delete-window win)
(kill-buffer "*Completions*")))
output)
(add-hook 'comint-preoutput-filter-functions 'delete-completion-window-buffer)
Но на самом деле буфер завершения меня не сильно беспокоит. Что беспокоит, так это то, что команда "очистить" не работает хорошо. Для того, чтобы решить вашу проблему я гугл shell-mode, там ничего нет.
Но я получил решение моей проблемы EmacsWiki.
(defun clear-shell ()
(interactive)
(let ((comint-buffer-maximum-size 0))
(comint-truncate-buffer)))
(define-key shell-mode-map (kbd "C-l") 'clear-shell)
Я связываю его с Ctrl-L, обычным терминальным связыванием.
Хороший код Надеюсь, вам понравится!