Terminal ouvert depuis emacs

11

Existe-t-il un moyen rapide (raccourci clavier) pour ouvrir un émulateur de terminal (dans mon cas urxvt) dans le même répertoire que le fichier dans le tampon emacs actuel?

étudiant
la source

Réponses:

15

La combinaison M-!vous permet de lancer des commandes shell. Vous pouvez l'utiliser pour lancer un autre urxvt.

M-! urxvt RET

Je viens de l'essayer avec xterm(je n'ai pas urxvt) et il s'est ouvert dans le même répertoire que le fichier dans le tampon.

Si vous souhaitez définir un raccourci, ajoutez quelque chose de similaire dans votre fichier init:

(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))

Dans mon cas, j'ai lié le raccourci à: Ctrl+ C- S.

rahmu
la source
9

J'utilise habituellement M-x term.

Vous pouvez également commander:

  • M-x terminal
  • M-x shell

M-x termlance effectivement un émulateur de terminal écrit en elisp. De l'aide:

terme
M-x ... RET Démarrer un émulateur de terminal dans un nouveau tampon. (terme PROGRAMME)

term est une fonction Lisp interactive compilée dans `term.el '.

Démarrez un émulateur de terminal dans un nouveau tampon. Le tampon est en mode Term; voir `term-mode ' pour les commandes à utiliser dans ce tampon.

Tapez Cc b pour basculer vers un autre tampon.

rahmu
la source
1
Merci, je ne savais pas M-x term, ça a l'air sympa mais ce n'est pas exactement ce que je veux. Je ne veux pas démarrer un shell (par exemple bashou zshdans un tampon emacs mais un émulateur de terminal ( xtermou urxvt...).
étudiant
1
@student jeter un oeil àmulti-term
Ulrich Dangel
8

La commande emacs M-x shelldémarrera un shell dans un nouveau tampon (ou basculera vers un tampon shell existant, s'il y en a un). S'il s'agit d'un nouveau tampon shell, il sera démarré dans le répertoire du fichier visité dans le tampon courant. S'il s'agit d'un tampon shell existant, il sera toujours dans le répertoire où vous l'avez laissé après sa dernière utilisation. Afin d'obtenir toujours le comportement que vous souhaitez, n'oubliez pas de tuer le tampon shell lorsque vous en avez fini avec ( C-x k)

Si M-x shellc'est trop de frappe, vous pouvez définir une clé globale pour démarrer un shell pour vous. Quelque chose comme (global-set-key (kbd "C-x S") 'shell)dans votre fichier de démarrage devrait le faire (mais attention à ne pas masquer une autre commande utile avec votre raccourci!)

De plus, sachez qu'il s'agit d'un "terminal stupide", donc certaines commandes comme des git commitoptions comme -met les mots de passe seront en clair sur votre écran.

D_Bye
la source
3

Je voulais exécuter une application terminal dédié, konsole. Je voulais ouvrir un nouvel onglet dans konsole s'il est en cours d'exécution, ou en lancer un s'il ne l'est pas.

Depuis que j'étais plus jeune à l'époque, j'ai divisé l'implémentation entre emacs et bash. J'appelle le defun suivant d'emacs:

(defun bk-konsoles ()
  "Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
  (interactive)
  (let ((curDir default-directory))
    (shell-command (concat "bk_konsoles.bash \"" curDir "\" 2>&1 > /dev/null & disown") nil nil)
    (kill-buffer "*Shell Command Output*")))

Le defun appelle le script bash, bk_konsoles.bash:

#!/bin/bash

myPath=`echo $@ | sed 's/.$//'`

runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
    if [ "$@"!="" ]; then
        konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
    else
        konsole --new-tab 2>&1 > /dev/null
    fi
    wmctrl -a " – Konsole"
else
    konsole
fi
Adobe
la source
1

La plupart du temps, j'utilise shell-mode. J'utilise donc beaucoup shell-here . Mais quand j'ai besoin d'un terminal externe. J'utilise urxvt-client avec tmux en utilisant ceci:

  • Créez un fichier nommé 'term-here' dans / usr / local / bin / contenant
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Créer une nouvelle fonction dans emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Lier à votre clé préférée

Cela ouvrira urxvt-client (avec tmux) dans votre répertoire actuel. Je le lie dans dired-mode-map.

(use-package dired
  :ensure nil
  :ensure-system-package urxvt
  :bind ((:map dired-mode-map
           ("," . term-here))))

Je choisis urxvt-client car c'est simple et rapide. N'oubliez pas d'exécuter votre démon urxvt au démarrage.

azzamsa
la source
1

Si le helmframework de complétion est installé, vous pouvez utiliser helm-run-external-command (C-x c C-c C-x)pour exécuter un émulateur de terminal de votre choix ou tout autre programme externe dans le répertoire du tampon actuel.

chrimuelle
la source