Создайте более одного экземпляра eshell в emacs - PullRequest
5 голосов
/ 30 марта 2010

Подумайте: облицовка моего окна emacs eshells, а-ля xmonad.Это возможно?Я могу Mx eshell, чтобы открыть первый экземпляр eshell, но будущие вызовы просто фокусируют первый экземпляр.

Ответы [ 7 ]

12 голосов
/ 30 марта 2010

Вы можете сделать это:

`C-u M-x eshell`

Это создаст *eshell*, *eshell*<2> и т. Д.

6 голосов
/ 30 марта 2010

Мой предпочтительный подход заключается в создании именованных оболочек:

(defun make-shell (name)
  "Create a shell buffer named NAME."
  (interactive "sName: ")
  (setq name (concat "$" name))
  (eshell)
  (rename-buffer name))

это суть. Тогда M-x make-shell name создаст желаемую оболочку.

4 голосов
/ 30 марта 2010

Строка документации для eshell гласит, что «нечисловой префикс arg означает создание нового сеанса». Я набирал M-- M-x eshell снова и снова, и каждый раз он открывал новый буфер eshell.

1 голос
/ 18 мая 2011

C-u M-x eshell прекрасно работает, но я предпочитаю именованные оболочки - подход make-shell , полезен при переключении буферов

0 голосов
/ 21 ноября 2015

Расширение на make-eshell , это создает eshell, добавляющий следующий счетчик, так что это похоже на eshell1 , eshell2 и т. Д.:

(lexical-let ((count 1))
  (defun make-eshell-next-number ()
    (interactive)
    (eshell)
    (rename-buffer (concat "*eshell" (number-to-string count) "*"))
    (setq count (1+ count))))
0 голосов
/ 06 мая 2014

Mybe, следующее решение лучше. Потому что буфер eshell определяется значением eshell-buffer-name. Вам не нужно переименовывать буфер.

(defun buffer-exists (bufname)   
  (not (eq nil (get-buffer bufname))))

(defun make-shell (name)
  "Create a shell buffer named NAME."
  (interactive "sName: ")
  (if (buffer-exists "*eshell*")
      (setq eshell-buffer-name name)
    (message "eshell doesnot exists, use the default name: *eshell*"))
  (eshell))
0 голосов
/ 10 ноября 2010

Invoking GNU Screen - это еще один вариант для тех, кто использует ANSI-термин

...