Risposte:
La combinazione M-!
consente di avviare i comandi della shell. Potresti usarlo per lanciarne uno separato urxvt
.
M-! urxvt RET
L'ho appena provato con xterm
(non ho urxvt
) e si è aperto nella stessa directory del file nel buffer.
Se vuoi definire un collegamento aggiungi qualcosa di simile nel tuo file init:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
Nel mio caso ho associato il collegamento a: Ctrl+ C- S.
Di solito uso M-x term
.
Puoi anche effettuare il checkout:
M-x terminal
M-x shell
M-x term
sta effettivamente lanciando un emulatore di terminale scritto in elisp. Dall'aiuto:
termine
M-x ... RET Avvia un emulatore di terminale in un nuovo buffer. (termine PROGRAMMA)term è una funzione Lisp compilata interattiva in `term.el '.
Avviare un emulatore di terminale in un nuovo buffer. Il buffer è in modalità Term; vedi `term-mode ' per i comandi da usare in quel buffer.
Digitare Cc b per passare a un altro buffer.
multi-term
Il comando emacs M-x shell
avvierà una shell in un nuovo buffer (o passerà a un buffer di shell esistente, se presente). Se si tratta di un nuovo buffer della shell, verrà avviato nella directory del file visitato nel buffer corrente. Se è un buffer di shell esistente, rimarrà comunque nella directory in cui è stato lasciato dopo l'ultimo utilizzo. Per ottenere sempre il comportamento desiderato, ricordati di eliminare il buffer della shell quando hai finito ( C-x k
)
Se M-x shell
si digita troppo, è possibile impostare una chiave globale per avviare una shell. Qualcosa come (global-set-key (kbd "C-x S") 'shell)
nel tuo file di avvio dovrebbe farlo (ma fai attenzione a non mascherare un altro comando utile con il tuo collegamento!)
Inoltre, tieni presente che si tratta di un "terminale stupido", quindi alcuni comandi come git commit
opzioni come -m
e le password saranno in chiaro sullo schermo.
Ho voluto eseguire un'applicazione terminale dedicato, konsole
. Volevo aprire una nuova scheda in konsole se è in esecuzione, o accenderne una in caso contrario.
Da quando ero più giovane allora ho diviso l'implementazione tra emacs e bash. Chiamo il seguente defun da 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*")))
Il defun chiama 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
Il più delle volte che uso shell-mode
. Quindi uso pesantemente shell-qui . Ma quando ho bisogno di un terminale esterno. Uso urxvt-client con tmux usando questo:
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
Questo aprirà urxvt-client (con tmux) nella directory corrente. Lo associo a map-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
Ho scelto urxvt-client perché è veloce e semplice. Non dimenticare di eseguire urxvt-daemon all'avvio.
Se è installato il helm
framework di completamento, è possibile utilizzare helm-run-external-command (C-x c C-c C-x)
per eseguire un emulatore di terminale di propria scelta o qualsiasi altro programma esterno nella directory del buffer corrente.
M-x term
, sembra carino ma non è esattamente quello che voglio. Voglio iniziare non una shell (ad esempiobash
ozsh
in un buffer emacs ma un emulatore di terminale (xterm
ourxvt
...).