Je suis de plus en plus habitué à tout faire depuis l'intérieur d'emacs, mais il semble que eshell, shell et term n'exécuteront qu'une instance chacun. Existe-t-il un moyen d'exécuter plusieurs terminaux (de préférence terme) à l'intérieur d'emacs?Plus d'un terminal emacs
Répondre
Il vous suffit de renommer le tampon, voici une fonction pour démarrer zsh et demande 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))
Utilisez la commande M-x rename-buffer
pour donner le shell courant tampon un nouveau nom, alors vous pouvez commencer une nouvelle coquille.
Vous pouvez également utiliser 'M-x rename-uniquely' pour laisser Emacs trouver le nouveau nom –
Vous pouvez toujours créer un nouveau shell avec C-u shell M-x
dépend de l'OS sous-jacent, si vous obtenez un autre shell ou sauter à l'existant –
Vous pouvez renommer un terme et commencer une nouvelle. J'utilise quelque chose comme ça, je l'ai pris chez quelqu'un d'autre.
(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 avoir un seul et commencer une screen session en elle.
J'ai modifié la réponse acceptée par Harpo pour qu'il démarre une nouvelle coquille sans demander, des coquillages sera nommé sous la forme * shell-1 *, * shell-2 *, * coquille 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) "*"))
))
Voici une petite fonction super léger que vous pouvez appeler pour renommer automatiquement le terme que vous » re sur, puis commencer un nouveau terme:
(defun new-ansi-term()
(interactive)
(if (string= "*ansi-term*" (buffer-name))
(rename-uniquely))
(ansi-term "/bin/bash"))
ensuite à se lier qu'à l'intérieur terme ansi, je trouve 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 Rabattre aussi nouveau-ansi-terme Ct de façon normale, vous constaterez que lorsque vous Ne regardez pas un terme d'ansi, Ct mettra l'accent sur le tampon ansi-terme, et si vous regardez un terme-année, Ct le renommera en un nom unique, puis ouvrira un nouveau terme pour vous . Cela fonctionne très bien en combinaison avec tabbar, qui vous montrera tous vos ansi-termes ouverts juste au-dessus de la première ligne du tampon. Facile de basculer entre eux ;-)
Il arrive encore de temps en temps que les gens votent pour fermer les questions Emacs comme "non liés à la programmation". Je ne suis pas d'accord. Si la question concernait la mise en forme d'une perspective Eclipse ou la configuration de Visual Studio pour la lecture d'un flux RSS, personne ne songerait à la recommander de la sorte. Cela n'a aucun sens de traiter les questions liées à emacs de cette façon. (ps: avoir un upvote) – Cheeso