Odpowiedzi:
Ta kombinacja M-!
umożliwia uruchamianie poleceń powłoki. Możesz go użyć do uruchomienia osobnego urxvt
.
M-! urxvt RET
Właśnie próbowałem z xterm
(nie mam urxvt
) i otworzyło się w tym samym katalogu, co plik w buforze.
Jeśli chcesz zdefiniować skrót, dodaj coś podobnego do pliku init:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
W moim przypadku powiązałem skrót z: Ctrl+ C- S.
Zwykle używam M-x term
.
Możesz także zrealizować transakcję:
M-x terminal
M-x shell
M-x term
skutecznie uruchamia emulator terminala napisany w elisp. Z pomocy:
termin
M-x ... RET Uruchom emulator terminala w nowym buforze. (termin PROGRAM)term jest interaktywną skompilowaną funkcją Lisp w `term.el '.
Uruchom emulator terminala w nowym buforze. Bufor jest w trybie Term; zobacz „term-mode”, aby zapoznać się z poleceniami używanymi w tym buforze.
Wpisz Cc b, aby przełączyć na inny bufor.
multi-term
Komenda emacs M-x shell
uruchomi powłokę w nowym buforze (lub przełączy się na istniejący bufor powłoki, jeśli taki istnieje). Jeśli jest to nowy bufor powłoki, zostanie uruchomiony w katalogu odwiedzanego pliku w bieżącym buforze. Jeśli jest to istniejący bufor powłoki, nadal będzie w katalogu, w którym go zostawiłeś po ostatnim użyciu. Aby zawsze uzyskać pożądane zachowanie, pamiętaj o zabiciu bufora powłoki, gdy skończysz ( C-x k
)
Jeśli M-x shell
jest zbyt dużo pisania, możesz ustawić klucz globalny, aby uruchomić dla ciebie powłokę. (global-set-key (kbd "C-x S") 'shell)
Powinno to zrobić coś takiego jak w pliku startowym (ale uważaj, aby nie maskować innego przydatnego polecenia za pomocą skrótu!)
Pamiętaj też, że jest to „głupi terminal”, więc niektóre polecenia, takie jak git commit
opcje takie jak -m
i hasła, będą wyświetlane na ekranie jako zwykły tekst.
Chciałem uruchomić odpowiednią aplikację terminala, konsole
. Chciałem otworzyć nową kartę w konsoli, jeśli jest uruchomiona lub uruchomić ją, jeśli nie jest.
Od kiedy byłem młodszy, podzieliłem implementację między emacsa i basha. Nazywam następujący defun od emacsa:
(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*")))
Defun wywołuje skrypt 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
Większość czasu używam shell-mode
. Więc mocno używam tu powłoki . Ale kiedy potrzebuję zewnętrznego terminala. Używam klienta urxvt z tmux, używając tego:
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"))
Spowoduje to otwarcie klienta urxvt (z tmux) w bieżącym katalogu. Wiążę to w dired-mode-map.
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
Wybieram urxvt-client, ponieważ jest szybki i prosty. Nie zapomnij uruchomić swojego demona urxvt podczas uruchamiania.
Jeśli masz helm
zainstalowaną strukturę uzupełniania, możesz użyć helm-run-external-command (C-x c C-c C-x)
do uruchomienia wybranego emulatora terminala lub dowolnego innego programu zewnętrznego w katalogu bieżącego bufora.
M-x term
, wygląda miło, ale nie jest dokładnie tym, czego chcę. Chcę uruchomić nie powłokę (na przykładbash
lubzsh
w buforze emacsa, ale emulator terminala (xterm
luburxvt
...).