4

В emacs я часто открываю несколько буферов оболочки и использую rename-buffer для их отслеживания. Иногда я случайно закрываю оболочку, нажимая слишком много ^ D, или нахожусь в системе, которая автоматически отключает неактивные оболочки. Есть ли способ запустить новую оболочку в том же буфере? Поскольку я переименовал буфер в командной оболочке, Mx shell запустит оболочку в новом буфере оболочки , а не в текущем буфере.

2 ответа2

3

Вместо оболочки Mx запустите следующий код emacs lisp, используя M-:

(shell (current-buffer))
1

Это не идеально, но дает вам большую часть того, что вы хотите. Поместите этот код в ваш файл запуска .emacs :

(defun my-shell-mode-hook ()
  "Added to shell-mode-hook.  This function runs every time function shell
starts a shell."
  (rename-buffer "My Shell" 'unique))

(add-hook 'shell-mode-hook 'my-shell-mode-hook)

Не стесняйтесь изменить строку "My Shell" на другое имя. Если вы выполняете M-x shell RET находясь в буфере My Shell , то новая оболочка запускается в том же буфере. К сожалению, если вы сделаете это в другом буфере, вы получите новый буфер с именем My Shell<2> , который не так хорош. Я думаю, что последний эффект можно устранить, посоветовав функцию shell , чтобы она переключалась в буфер My Shell до фактического запуска реальной функции shell .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .