Я становлюсь более привыкшим к выполнению всего из emacs, но кажется, что eshell, оболочка и термин только выполнят один экземпляр каждый. Существует ли способ выполнить несколько терминалов (предпочтительно термин) внутри emacs?
Вам просто нужно переименовать буфер, вот функция для запуска zsh и запроса имени буфера:
(defun zsh (buffer-name)
"Start a terminal and rename buffer."
(interactive "sbuffer name: ")
(term "/bin/zsh")
(rename-buffer buffer-name t))
Вы можете переименовать термин и начать новый. Пользуюсь примерно таким, брал у кого-то .emacs.
(require 'term)
(defun visit-ansi-term ()
"If the current buffer is:
1) a running ansi-term named *ansi-term*, rename it.
2) a stopped ansi-term, kill it and create a new one.
3) a non ansi-term, go to an already running ansi-term
or start a new one while killing a defunt one"
(interactive)
(let ((is-term (string= "term-mode" major-mode))
(is-running (term-check-proc (buffer-name)))
(term-cmd "/bin/bash")
(anon-term (get-buffer "*ansi-term*")))
(if is-term
(if is-running
(if (string= "*ansi-term*" (buffer-name))
(call-interactively 'rename-buffer)
(if anon-term
(switch-to-buffer "*ansi-term*")
(ansi-term term-cmd)))
(kill-buffer (buffer-name))
(ansi-term term-cmd))
(if anon-term
(if (term-check-proc "*ansi-term*")
(switch-to-buffer "*ansi-term*")
(kill-buffer "*ansi-term*")
(ansi-term term-cmd))
(ansi-term term-cmd)))))
Или вы можете иметь только один и запускать в нем сеанс экрана .
Я лично использую screen
-подобный пакет, который я написал, и есть другая версия, доступная в вики здесь: elscreen. Он предоставляет удобные привязки клавиш для перехода к различным оболочкам.
Используйте команду M-x rename-buffer
, чтобы дать текущему буферу оболочки новое имя, после чего вы сможете запустить новую оболочку.
Вы всегда можете создать новую оболочку с помощью C-u M-x shell