Ну, кто-то уже задавал такой же вопрос для завершения . И я написал ответ , который, казалось, работал довольно хорошо.
Похоже, вы могли бы использовать то же решение, за исключением того, что вместо добавления к special-display-buffer-names
вы можете использовать переменную special-display-regexps
. Так что-то вроде:
(add-to-list 'special-display-regexps '(".*" my-display-buffers))
(defun my-display-buffers (buf)
"put all buffers in a window other than the one in the bottom right"
(let ((windows (delete (window-at (- (frame-width) 2) (- (frame-height) 4))
(delete (minibuffer-window) (window-list))))
(if (<= 2 (length windows))
(progn
(select-window (cadr windows))
(split-window-vertically)))
(let ((pop-up-windows t))
(set-window-buffer (car windows) buf)
(car windows)))))
Очевидно, вам придется изменить регулярное выражение, чтобы оно не совпадало с *Help*
и другими буферами, которые вам действительно нужны в правом нижнем окне.
Что касается консультирования display-buffer
, это будет работать. Вы можете посоветовать функции, написанные на c, advice работает практически во всех случаях, которые вам нужны, за исключением случаев, когда функции называются из c, или рекомендации макросов (которые не работают, поскольку макросы обычно уже расширяется везде, где они используются).