Otevřete terminál z emacsu
On 14 února, 2021 by adminExistuje rychlý způsob (klávesová zkratka) k otevření emulátoru terminálu (v mém případě urxvt) ve stejném adresáři jako soubor v aktuální vyrovnávací paměti emacs?
Odpověď
Kombinace M-!
umožňuje spouštět příkazy prostředí. Můžete jej použít ke spuštění samostatného urxvt
.
M-! urxvt RET
Zkusil jsem to s xterm
(nemám urxvt
) a otevřelo se ve stejném adresáři jako soubor ve vyrovnávací paměti.
Pokud chcete definovat zástupce, přidejte něco podobného do svého souboru init:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
V mém případě jsem zkratku svázal s: Ctrl + C – S .
Odpověď
Obvykle používám M-x term
.
Můžete také pokladna:
-
M-x terminal
-
M-x shell
M-x term
efektivně spouští emulátor terminálu napsaný v elispu. Z nápovědy:
termín
Mx … RET Spustit emulátor terminálu v nové vyrovnávací paměti. (termín PROGRAM)termín je interaktivní kompilovaná funkce Lisp v` term.el „.
Spustit emulátor terminálu v nové vyrovnávací paměti. Vyrovnávací paměť je v režimu Term; viz `term-mode“ , kde najdete příkazy, které se mají použít v této vyrovnávací paměti.
Chcete-li přepnout na jinou vyrovnávací paměť, zadejte Cc b.
Komentáře
odpověď
příkaz emacs M-x shell
spustí shell v nové vyrovnávací paměti (nebo přepne na stávající vyrovnávací paměť prostředí, pokud existuje). Pokud se jedná o novou vyrovnávací paměť prostředí, spustí se v adresáři soubor, který je navštěvován v aktuální vyrovnávací paměti. Pokud se jedná o existující vyrovnávací paměť prostředí, bude stále v adresáři, kde jste jej nechali po posledním použití. Chcete-li vždy dosáhnout požadovaného chování, nezapomeňte zabít vyrovnávací paměť shellu, až budete hotovi (C-x k
)
Pokud M-x shell
píše příliš mnoho, můžete nastavit globální klíč, který za vás spustí prostředí. Mělo by to udělat něco jako (global-set-key (kbd "C-x S") "shell)
ve vašem spouštěcím souboru (dávejte však pozor, abyste svou zkratkou nemaskovali další užitečný příkaz!)
Nezapomeňte, že se jedná o „hloupý terminál“, takže některé příkazy jako git commit
vyžadují možnosti jako -m
a hesla budou na vaší obrazovce v prostém textu.
Odpověď
Chtěl jsem spustit specializovanou terminálovou aplikaci konsole
. Chtěl jsem otevřít novou kartu v konzole, pokud je spuštěna, nebo spustit, pokud není.
Protože jsem byl mladší, rozdělil jsem implementaci mezi emacs a bash. Z emacsu volám následující defun:
(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 volá bash skript, 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
Odpověď
Většinu času používám shell-mode
. Takže hodně používám shell-here . Ale když potřebuji externí terminál. Používám urxvt-client s tmux pomocí tohoto:
- Vytvořit soubor s názvem „term-here“ v / usr / local / bin / obsahující
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Vytvořit novou funkci v emacsu
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Vázat na váš oblíbený klíč
Tím se otevře urxvt-client (s tmux) ve vašem aktuálním adresáři. Svázám to v dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Volím klienta urxvt, protože je rychlý a jednoduchý. Nezapomeňte spustit svého démona urxvt při spuštění.
Odpovědět
Pokud máte helm
nainstalován rámec dokončení, můžete použít helm-run-external-command (C-x c C-c C-x)
ke spuštění emulátoru terminálu podle vašeho výběru nebo jiného externího programu v adresáři aktuální vyrovnávací paměti.
M-x term
, vypadá to hezky, ale není to přesně to, co chci. Chci spustit ne shell (napříkladbash
nebozsh
ve vyrovnávací paměti emacs, ale v emulátoru terminálu (xterm
nebourxvt
…).multi-term