Otwórz terminal z emacsa
On 14 lutego, 2021 by adminCzy istnieje szybki sposób (skrót klawiaturowy) na otwarcie emulatora terminala (w moim przypadku urxvt) w tym samym katalogu jako plik w bieżącym buforze emacsa?
Odpowiedź
Kombinacja M-!
umożliwia uruchamianie poleceń powłoki. Możesz go użyć do uruchomienia oddzielnego urxvt
.
M-! urxvt RET
Właśnie wypróbowałem to z xterm
(nie mam urxvt
) i otworzył się w tym samym katalogu co plik w buforze.
Jeśli chcesz zdefiniować skrót, dodaj coś podobnego do swojego 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 .
Odpowiedź
Zwykle używam M-x term
.
Możesz także do kasy:
-
M-x terminal
-
M-x shell
M-x term
skutecznie uruchamia emulator terminala napisany w elisp. Z pomocy:
term
Mx … RET Uruchom emulator terminala w nowym buforze. (termin PROGRAM)termin to interaktywna skompilowana funkcja Lispa w` term.el ”.
Uruchom emulator terminala w nowym buforze. Bufor jest w trybie Term; zobacz „ term-mode , aby poznać polecenia używane w tym buforze.
Wpisz Cc b, aby przełączyć się do innego bufora.
Komentarze
Odpowiedz
Polecenie 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 plik odwiedzany w bieżącym buforze. Jeśli jest to istniejący bufor powłoki, nadal będzie w katalogu, w którym został pozostawiony po ostatnim użyciu. W porządku r, aby zawsze uzyskać pożądane zachowanie, pamiętaj o zabiciu bufora powłoki, kiedy skończysz z tym (C-x k
)
Jeśli M-x shell
to za dużo pisania, możesz ustawić klucz globalny, aby uruchomić powłokę za Ciebie. Coś w rodzaju (global-set-key (kbd "C-x S") "shell)
w pliku startowym powinno to zrobić (ale uważaj, aby nie maskować innego użytecznego polecenia za pomocą skrótu!)
Pamiętaj też, że jest to „głupi terminal”, więc niektóre polecenia, takie jak git commit
, wymagają opcji, takich jak -m
, a hasła będą w postaci zwykłego tekstu na ekranie.
Odpowiedź
Chciałem uruchomić dedykowaną aplikację terminalową, konsole
. Chciałem otworzyć nową kartę w konsoli, jeśli jest uruchomiona, lub odpalić, jeśli nie jest.
Odkąd byłem młodszy, podzieliłem implementację między emacs i bash. Wzywam następujący defun z 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
Odpowiedź
Najczęściej używam shell-mode
. Dlatego intensywnie używam shell-here . Ale kiedy potrzebuję zewnętrznego terminala. Używam klienta urxvt z tmux, używając tego:
- Utwórz plik o nazwie „term-tutaj” w / usr / local / bin / zawierający
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Utwórz nową funkcję w emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Powiąż z ulubionym kluczem
To otworzy urxvt-client (z tmux) w twoim bieżącym katalogu. Wiążę to na mapie trybu dired.
(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ć demona urxvt podczas uruchamiania.
Odpowiedź
Jeśli masz helm
framework do zakończenia, 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
, wydaje się fajny, ale nie jest dokładnie tym, czego chcę. Nie chcę zaczynać od powłoki (na przykładbash
lubzsh
w buforze emacsa, ale emulator terminala (xterm
luburxvt
…).multi-term