Åbn terminal fra emacs
On februar 14, 2021 by adminEr der en hurtig måde (tastaturgenvej) til at åbne en terminalemulator (i mit tilfælde urxvt) i samme bibliotek som filen i den aktuelle emacs-buffer?
Svar
Kombinationen M-!
giver dig mulighed for at starte shell-kommandoer. Du kan bruge den til at starte en separat urxvt
.
M-! urxvt RET
Jeg har lige prøvet det med xterm
(jeg har ikke urxvt
), og det blev åbnet i samme bibliotek som filen i bufferen.
Hvis du vil definere en genvej, skal du tilføje noget lignende i din init-fil:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
I mit tilfælde bundet jeg genvejen til: Ctrl + C – S .
Svar
Jeg bruger normalt M-x term
.
Du kan også kassen:
-
M-x terminal
-
M-x shell
M-x term
lancerer effektivt en terminalemulator skrevet i elisp. Fra hjælp:
term
Mx … RET Start en terminalemulator i en ny buffer. (term PROGRAM)term er en interaktiv kompileret Lisp-funktion i` term.el “.
Start en terminalemulator i en ny buffer. Bufferen er i tilstanden Term; se `term-mode” for de kommandoer, der skal bruges i denne buffer.
Skriv Cc b for at skifte til en anden buffer.
Kommentarer
Svar
Emacs-kommandoen M-x shell
starter en shell i en ny buffer (eller skifter til en eksisterende shell-buffer, hvis der er en). Hvis den er en ny shell-buffer, startes den i biblioteket med filen, der bliver besøgt i den aktuelle buffer. Hvis den er en eksisterende shell-buffer, vil den stadig være i det bibliotek, hvor du forlod den efter sidst brugte den. I orde r for altid at få den opførsel, du ønsker, husk at dræbe shellbufferen, når du er færdig med den (C-x k
)
Hvis M-x shell
er for meget at skrive, du kan indstille en global nøgle til at starte en skal til dig. Noget som (global-set-key (kbd "C-x S") "shell)
i din startfil skal gøre det (men pas på ikke at maskere en anden nyttig kommando med din genvej!)
Vær også opmærksom på, at dette er en “dum terminal”, så nogle kommandoer som git commit
har brug for muligheder som -m
og adgangskoder vil være i almindelig tekst på din skærm.
Svar
Jeg ville køre en dedikeret terminalapplikation, konsole
. Jeg ønskede at åbne en ny fane i konsole, hvis den kører, eller fyre op, hvis den ikke er.
Da jeg var yngre tilbage, delte jeg implementeringen mellem emacs og bash. Jeg kalder 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 call 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
Det meste af tiden bruger jeg shell-mode
. Så jeg bruger stærkt shell-her . Men når jeg har brug for ekstern terminal. Jeg bruger urxvt-klient med tmux ved hjælp af dette:
- Opret fil med navnet “term-here” i / usr / local / bin / indeholdende
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Opret ny funktion i emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Bind til din yndlingsnøgle
Dette åbner urxvt-klient (med tmux) i din nuværende bibliotek. Jeg binder det i dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Jeg vælger urxvt-klient, fordi den er hurtig og enkel. Glem ikke at køre din urxvt-dæmon ved opstart.
Svar
Hvis du har helm
færdiggørelsesramme installeret, kan du bruge helm-run-external-command (C-x c C-c C-x)
til at køre en terminalemulator efter eget valg eller ethvert andet eksternt program i biblioteket med den aktuelle buffer.
M-x term
, det ser godt ud, men er ikke nøjagtigt, hvad jeg vil. Jeg vil ikke starte en shell (for eksempelbash
ellerzsh
i en emacs-buffer, men en terminalemulator (xterm
ellerurxvt
…).multi-term