2010-03-29 10 views
5

Pensa: piastrellando la mia finestra di emacs con eshells, a la xmonad. È possibile? Posso usare M-x eshell per aprire la prima istanza di eshell, ma le chiamate future si concentrano solo sulla prima istanza.Creare più di un'istanza eshell in emacs

risposta

12

Si può fare questo:

`C-u M-x eshell` 

Questo creerà *eshell*, *eshell*<2>, e così via.

4

La docstring per eshell afferma che "Un prefisso non numerico arg significa creare una nuova sessione." Ho digitato M-- M-x eshell ripetutamente e ogni volta ha aperto un nuovo buffer eshell.

+1

C-u M-x eshell funziona troppo. – ataylor

+0

Accidenti. Il tuo commento non è stato scritto quando ho iniziato la mia risposta :) –

6

Il mio approccio preferito è quello di generare le coperture denominate:

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

è il succo del discorso. Quindi M-x make-shell name creerà la shell desiderata.

0

Invocare GNU schermo è un'altra opzione per coloro che utilizzano ANSI-termine

1

Cu Mx eshell grandi opere, ma preferisco gusci di nome - make-shell approccio, è utile quando si passa buffer

0

Mybe, la seguente soluzione è meglio. Perché il buffer eshell è determinato dal valore di eshell-buffer-name. Non è necessario rinominare il buffer.

(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

Ampliando make-eshell, questo crea un eshell aggiungendo il contatore successivo, quindi è come eshell1, eshell2, ecc .:

(lexical-let ((count 1)) 
    (defun make-eshell-next-number() 
    (interactive) 
    (eshell) 
    (rename-buffer (concat "*eshell" (number-to-string count) "*")) 
    (setq count (1+ count))))