Otwórz terminal od emacsa

11

Czy istnieje szybki sposób (skrót klawiaturowy), aby otworzyć emulator terminala (w moim przypadku urxvt) w tym samym katalogu, co plik w bieżącym buforze emacs?

student
źródło

Odpowiedzi:

15

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.

rahmu
źródło
9

Zwykle używam M-x term.

Możesz także zrealizować transakcję:

  • M-x terminal
  • M-x shell

M-x termskutecznie 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.

rahmu
źródło
1
Dzięki, nie wiedziałem M-x term, wygląda miło, ale nie jest dokładnie tym, czego chcę. Chcę uruchomić nie powłokę (na przykład bashlub zshw buforze emacsa, ale emulator terminala ( xtermlub urxvt...).
uczeń
1
@student spójrz namulti-term
Ulrich Dangel
8

Komenda emacs M-x shelluruchomi 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 shelljest 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 commitopcje takie jak -mi hasła, będą wyświetlane na ekranie jako zwykły tekst.

D_Bye
źródło
3

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
Cegła suszona na słońcu
źródło
1

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:

  • Utwórz plik o nazwie „term-here” 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 emacsie
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Powiąż z ulubionym kluczem

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.

azzamsa
źródło
1

Jeśli masz helmzainstalowaną 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.

chrimuelle
źródło