Где-то между 24.4.1-й версией ГНУ Емакса и последним слепком из гита, сопровождающему shell.el
стукнуло в голову, что M-x shell
должна открывать оболочку не в текущем окне, как это было ранее, а в новом.
Материально это выражается в том, что в районе 720-й строчки оного shell.el
(pop-to-buffer-same-window buffer)
заменили на (pop-to-buffer buffer)
.
Мне такая перемена совершенно не по душе, как мне вернуть старое поведение?
Понятно, что я могу просто взять функцию shell
, скопировать ее целиком в ~/.emacs
и поправить, как я захочу.
Однако, насколько мне позволяют понять мои более чем скромные знания Елиспа и умение гуглить, правильно здесь будет написать что-то такое:
(defadvice shell-same-window (around shell activate)
(letf (((symbol-function 'pop-to-buffer)
(lambda (buffer &rest args)
(pop-to-buffer-same-window buffer))))
ad-do-it))
Однако это просто и молча не работает, а если попытаться откинуть в диагностических целях адвайс:
(letf (((symbol-function 'pop-to-buffer)
(lambda (buffer &rest args)
(pop-to-buffer-same-window buffer))))
(shell))
то я получаю ошибку, смысл которой от меня ускользает:
pop-to-buffer-same-window: Variable binding depth exceeds max-specpdl-size
Где я накосячил?