Åpne terminal fra emacs
On februar 14, 2021 by adminEr det en rask måte (hurtigtast) for å åpne en terminalemulator (i mitt tilfelle urxvt) i samme katalog som filen i gjeldende emacs-buffer?
Svar
Kombinasjonen M-!
lar deg starte skallkommandoer. Du kan bruke den til å starte en egen urxvt
.
M-! urxvt RET
Jeg prøvde det bare med xterm
(jeg har ikke urxvt
) og den ble åpnet i samme katalog som filen i bufferen.
Hvis du vil definere en snarvei, legg til noe lignende i init-filen:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
I mitt tilfelle bundet jeg snarveien til: Ctrl + C – S .
Svar
Jeg bruker vanligvis M-x term
.
Du kan også kasse:
-
M-x terminal
-
M-x shell
M-x term
lanserer effektivt en terminalemulator skrevet i elisp. Fra hjelpen:
term
Mx … RET Start en terminalemulator i en ny buffer. (begrep PROGRAM)term er en interaktiv kompilert Lisp-funksjon i` term.el «.
Start en terminalemulator i en ny buffer. Bufferen er i Term-modus; se `term-mode» for kommandoene som skal brukes i den bufferen.
Skriv inn Cc b for å bytte til en annen buffer.
Kommentarer
Svar
emacs-kommandoen M-x shell
starter et skall i en ny buffer (eller bytter til en eksisterende skallbuffer, hvis det er en). Hvis det er en ny skallbuffer, vil den startes i katalogen til filen som besøkes i gjeldende buffer. Hvis den er en eksisterende skallbuffer, vil den fremdeles være i katalogen der du la den etter at du sist brukte den. r for alltid å få oppførselen du vil ha, husk å drepe skallbufferen når du er ferdig med den (C-x k
)
Hvis M-x shell
er for mye å skrive, du kan angi en global nøkkel for å starte et skall for deg. Noe som (global-set-key (kbd "C-x S") "shell)
i oppstartsfilen din burde gjøre det (men vær forsiktig så du ikke maskerer en annen nyttig kommando med snarveien din!)
Vær også oppmerksom på at dette er en «dum terminal» så noen kommandoer som git commit
trenger alternativer som -m
og passord vil være i ren tekst på skjermen.
Svar
Jeg ønsket å kjøre en dedikert terminalapplikasjon, konsole
. Jeg ønsket å åpne en ny fane i konsole hvis den kjører, eller fyre opp en hvis den ikke er.
Siden jeg var yngre da delte jeg implementeringen mellom emacs og bash. Jeg kaller følgende defun fra 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*")))
Defun calls bash script, 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
Svar
Mesteparten av tiden bruker jeg shell-mode
. Så jeg bruker sterkt shell-her . Men når jeg trenger ekstern terminal. Jeg bruker urxvt-client med tmux ved å bruke dette:
- Opprett fil med navnet «term-here» i / usr / local / bin / inneholder
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Opprett ny funksjon i emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Bind til favorittnøkkelen din
Dette åpner urxvt-client (med tmux) i din nåværende katalog. Jeg binder den i dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Jeg velger urxvt-klient fordi det er raskt og enkelt. Ikke glem å kjøre urxvt-demonen din ved oppstart.
Svar
Hvis du har helm
ferdigstilt rammeverk installert, kan du bruke helm-run-external-command (C-x c C-c C-x)
til å kjøre en terminalemulator etter eget valg eller et hvilket som helst annet eksternt program i katalogen til den nåværende bufferen.
M-x term
, det virker fint, men er ikke akkurat det jeg vil. Jeg vil ikke starte et skall (for eksempelbash
ellerzsh
i en emacs-buffer, men en terminalemulator (xterm
ellerurxvt
…).multi-term