在emacs中创建多个eshell实例

7

想象一下:使用类似xmonad的方式在我的emacs窗口中平铺eshells。这个可行吗?我可以通过M-x eshell打开第一个eshell实例,但是后续调用只会将焦点放在第一个实例上。

8个回答

15

你可以这样做:

`C-u M-x eshell`
这将创建*eshell**eshell*<2>等。

7

我倾向于创建命名的shell:

(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会创建所需的shell。

4

eshell的文档字符串指出:“非数字前缀参数意味着创建一个新会话。”我一遍又一遍地输入M-- M-x eshell,每次都会打开一个新的eshell缓冲区。


该死。当我开始回答时,你的评论还没写出来 :) - Chris R

1

C-u M-x eshell 很好用,但我更喜欢使用命名 shell - make-shell 方法,在切换缓冲区时非常有用


0
扩展make-eshell,这将创建一个附加下一个计数器的eshell,就像eshell1eshell2等等。
(lexical-let ((count 1))
  (defun make-eshell-next-number ()
    (interactive)
    (eshell)
    (rename-buffer (concat "*eshell" (number-to-string count) "*"))
    (setq count (1+ count))))

0
也许以下解决方案更好。因为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

对于使用 ansi-term 的用户来说,调用 GNU Screen 是另一个选项


0

这是我实现的新 eshell 缓冲区 / 实例。

(defun eshell-new-buffer (args)
  "Create a new eshell buffer."
  (interactive "P")
  (eshell "new")
  )


(global-set-key (kbd "C-c e e") 'eshell)

(global-set-key (kbd "C-c e n") 'eshell-new-buffer)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接