Question Plus d'un terminal emacs


Je suis de plus en plus habitué à tout faire depuis emacs, mais il semble que eshell, shell et term ne lanceront qu'une seule instance. Existe-t-il un moyen d’exécuter plusieurs terminaux (de préférence des termes) dans emacs?


14
2018-05-07 03:08


origine


Réponses:


Il vous suffit de renommer le tampon, voici une fonction pour démarrer zsh et demander le nom du tampon:

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

8
2018-05-07 13:25



Utilisez la commande M-x rename-buffer pour donner un nouveau nom au buffer actuel, vous pouvez alors lancer un nouveau shell.


17
2018-05-07 03:11



Vous pouvez toujours créer un nouveau shell avec Coquille C-u M-x


5
2018-05-07 03:32



http://www.emacswiki.org/emacs/MultiTerm


2
2018-05-07 03:09



Vous pouvez renommer un terme et en commencer un nouveau. J'utilise quelque chose comme ça, je l'ai pris de quelqu'un d'autre .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)))))

Ou vous pouvez en avoir juste un et commencer un séance d'écran dedans.


2
2018-05-07 04:46



J'utilise personnellement un screen-comme le paquet que j'ai écrit, et il y a une autre version disponible sur le wiki ici: elscreen. Il fournit des raccourcis clavier pratiques permettant de passer directement d'un shell à un autre.


1
2018-05-07 04:57



J'ai modifié la réponse acceptée par Harpo pour qu'elle lance un nouveau shell sans invite, les shells seront nommés sous la forme * 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
2018-03-21 14:21



Voici une petite fonction très légère que vous pouvez appeler pour renommer automatiquement le terme sur lequel vous vous trouvez, puis commencer un nouveau terme:

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

Ensuite, pour lier cela dans ansi-term, j'ai trouvé cela fonctionne:

(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 vous liez ensuite new-ansi-term à Ct de la manière habituelle, vous constaterez que lorsque vous ne regardez pas un terme, Ct va focaliser le tampon ansi-term, et si vous regardez A terme, Ct le renommera sous un nom unique, puis ouvrira un nouveau terme pour vous. Cela fonctionne très bien en combinaison avec la tabbar, qui vous montrera tous vos termes ouverts juste au-dessus de la première ligne du tampon. Facile à basculer entre eux ;-)


0
2017-09-07 07:54