Öppna terminal från emacs
On februari 14, 2021 by adminFinns det ett snabbt sätt (kortkommando) för att öppna en terminalemulator (i mitt fall urxvt) i samma katalog som filen i den aktuella emacs-bufferten?
Svar
Kombinationen M-!
låter dig starta skalkommandon. Du kan använda den för att starta en separat urxvt
.
M-! urxvt RET
Jag har precis provat det med xterm
(jag har inte urxvt
) och den öppnade i samma katalog som filen i bufferten.
Om du vill definiera en genväg, lägg till något liknande i din init-fil:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
I mitt fall band jag genvägen till: Ctrl + C – S .
Svar
Jag använder vanligtvis M-x term
.
Du kan också kassa:
-
M-x terminal
-
M-x shell
M-x term
lanserar effektivt en terminalemulator skriven i elisp. Från hjälp:
term
Mx … RET Starta en terminalemulator i en ny buffert. (term PROGRAM)term är en interaktiv kompilerad Lisp-funktion i` term.el ”.
Starta en terminalemulator i en ny buffert. Bufferten är i Term-läge; se `term-mode” för kommandon som ska användas i den bufferten.
Skriv Cc b för att växla till en annan buffert.
Kommentarer
Svar
kommandot emacs M-x shell
startar ett skal i en ny buffert (eller växlar till en befintlig skalbuffert, om det finns en). Om den är en ny skalbuffert, kommer den att startas i katalogen för filen som besöks i den aktuella bufferten. Om den är en befintlig skalbuffert, kommer den fortfarande att finnas i katalogen där du lämnade den efter att du använde den senast. r för att alltid få det beteende du vill ha, kom ihåg att döda skalbufferten när du är klar med det (C-x k
)
Om M-x shell
är för mycket att skriva, du kan ställa in en global nyckel för att starta ett skal åt dig. Något som (global-set-key (kbd "C-x S") "shell)
i din startfil bör göra det (men var försiktig så att du inte maskerar ett nytt användbart kommando med din genväg!)
Tänk också på att detta är en ”dumma terminal” så att vissa kommandon som git commit
behöver alternativ som -m
och lösenord kommer att vara i klartext på din skärm.
Svar
Jag ville köra en dedikerad terminalapplikation, konsole
. Jag ville öppna en ny flik i konsole om den är igång, eller starta en om den inte är.
Eftersom jag var yngre då delade jag implementeringen mellan emacs och bash. Jag kallar följande avstängda från 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
Oftast använder jag shell-mode
. Så jag använder starkt shell-here . Men när jag behöver extern terminal. Jag använder urxvt-client med tmux med detta:
- Skapa fil med namnet ”term-here” i / usr / local / bin / innehållande
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Skapa ny funktion i emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Bind till din favoritnyckel
Detta öppnar urxvt-client (med tmux) i din nuvarande katalog. Jag binder den i dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Jag väljer urxvt-klient eftersom det är snabbt och enkelt. Glöm inte att köra din urxvt-demon vid start.
Svar
Om du har helm
kompletteringsram installerat, du kan använda helm-run-external-command (C-x c C-c C-x)
för att köra en terminalemulator efter eget val eller något annat externt program i katalogen för den aktuella bufferten.
M-x term
, det verkar trevligt men är inte precis vad jag vill. Jag vill inte starta ett skal (till exempelbash
ellerzsh
i en emacs-buffert men en terminalemulator (xterm
ellerurxvt
…).multi-term