перезапуск процесса оболочки в буфере

перезапуск процесса оболочки в буфере

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

решение1

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

(shell (current-buffer))

решение2

Это не идеально, но это дает вам большую часть того, что вы хотите. Поместите этот код в ваш .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>, что не так красиво. Я думаю, что последний эффект можно устранить с помощьюконсультированиеfunction shell, так что она переключается на буфер My Shellперед фактическим запуском реальной shellфункции.

Связанный контент