2010-05-07 12 views
14

Cada vez estoy más acostumbrado a hacer todo desde dentro de emacs, pero parece que eshell, shell y term solo ejecutarán una instancia cada uno. ¿Hay alguna manera de ejecutar múltiples terminales (preferiblemente término) dentro de emacs?Más de un terminal de emacs

+6

Todavía sucede de vez en cuando que las personas voten para cerrar las preguntas de emacs como "no relacionadas con la programación". No estoy de acuerdo Si la pregunta era sobre cómo formatear una perspectiva de Eclipse, o cómo configurar Visual Studio para leer un feed rss, nadie consideraría recomendar su cierre de esta manera. No tiene sentido tratar las preguntas relacionadas con emacs de esta manera. (ps: have a upvote) – Cheeso

Respuesta

8

Sólo hay que cambiar el nombre del búfer, he aquí una función para iniciar zsh y pedirá el nombre del búfer:

(defun zsh (buffer-name) 
    "Start a terminal and rename buffer." 
    (interactive "sbuffer name: ") 
    (term "/bin/zsh") 
    (rename-buffer buffer-name t)) 
17

Utilice el comando M-x rename-buffer para dar el shell actual amortiguar un nuevo nombre, a continuación, se puede iniciar un nuevo shell.

+11

También puede usar 'M-x rename-uniquely' para permitir que emacs encuentre el nuevo nombre –

5

Siempre se puede crear un nuevo shell con C-u-M x cáscara

+0

depende del sistema operativo subyacente, ya sea que obtenga OTRO shell o salte al existente –

2

Puede cambiar el nombre de un término y comenzar uno nuevo. Estoy usando algo así, lo tomé de otra persona .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))))) 

O puede tener un solo y empezar una screen session en ella.

1

Yo personalmente uso un paquete similar a screen que escribí, y hay otra versión disponible en el wiki aquí: elscreen. Proporciona enlaces de teclas convenientes para saltar a/entre las diferentes conchas.

0

I modificado la respuesta aceptada por Harpo para que se inicie un nuevo shell sin preguntar, conchas será nombrado en la forma * shell-1 *, * shell-2 *, * shell-3 * etc .:

(setq bash-counter 1) 
(defun bash() 
    "Start a bash shell" 
    (interactive) 
    (setq bash-counter (+ bash-counter 1)) 
    (let 
    ((explicit-shell-file-name "/bin/bash")) 
    (shell (concat "*shell-" (number-to-string bash-counter) "*")) 
    )) 
0

He aquí una pequeña función super ligero que se puede llamar de nombre el término que' vuelva a encender, y luego comience un nuevo término:

(defun new-ansi-term() 
    (interactive) 
    (if (string= "*ansi-term*" (buffer-name)) 
     (rename-uniquely)) 
    (ansi-term "/bin/bash")) 

une entonces que dentro de ANSI plazo, encontré esto funciona:

(defvar ansi-term-after-hook nil) 
(add-hook 'ansi-term-after-hook 
      '(lambda() 
      (define-key term-raw-map (kbd "C-t") 'new-ansi-term))) 
(defadvice ansi-term (after ansi-term-after-advice (org)) 
    (run-hooks 'ansi-term-after-hook)) 
(ad-activate 'ansi-term) 

Si a continuación también ates nueva-ansi plazo de Ct de la forma habitual, encontrará que cuando se No estoy mirando un término ansi, Ct enfocará el búfer de ansi-término, y luego si está mirando un término ansi, Ct lo cambiará a un nombre único y luego abrirá un nuevo término ansi para usted . Esto funciona muy bien en combinación con tabbar, que le mostrará todos sus términos ansi abiertos justo encima de la primera línea del búfer. Fácil de cambiar entre ellos ;-)

Cuestiones relacionadas