Deschideți terminalul de la emacs
On februarie 14, 2021 by adminExistă un mod rapid (comandă rapidă de la tastatură) de a deschide un emulator de terminal (în cazul meu urxvt) în același director ca fișier din buffer-ul emacs curent?
Răspuns
Combinația M-!
vă permite să lansați comenzi shell. Puteți să-l utilizați pentru a lansa un urxvt
separat.
M-! urxvt RET
Tocmai am încercat-o cu xterm
(nu am urxvt
) și s-a deschis în același director cu fișierul din buffer.
Dacă doriți să definiți o comandă rapidă adăugați ceva similar în fișierul inițial:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
În cazul meu, am legat comanda rapidă la: Ctrl + C – S .
Răspuns
De obicei folosesc M-x term
.
De asemenea, puteți checkout:
-
M-x terminal
-
M-x shell
M-x term
lansează efectiv un emulator de terminal scris în elisp. Din ajutor:
termen
Mx … RET Porniți un terminal-emulator într-un tampon nou. (termen PROGRAM)termenul este o funcție Lisp interactivă compilată în` term.el „.
Porniți un terminal-emulator într-un tampon nou. Tamponul este în modul Term; consultați `term-mode” pentru comenzile de utilizat în acel buffer.
Tastați Cc b pentru a comuta la un alt buffer.
Comentarii
Răspuns
Comanda emacs M-x shell
va porni un shell într-un buffer nou (sau va trece la un buffer shell existent, dacă există unul). Dacă este „un buffer shell nou, va fi pornit în directorul de fișierul fiind vizitat în bufferul curent. Dacă este un buffer shell existent, va fi în continuare în directorul în care l-ați lăsat după ultima utilizare. r pentru a obține întotdeauna comportamentul dorit, nu uitați să ucideți buffer-ul de shell când ați terminat (C-x k
)
Dacă scrie prea mult, puteți seta o cheie globală pentru a porni un shell pentru dvs. Ceva ca (global-set-key (kbd "C-x S") "shell)
din fișierul dvs. de pornire ar trebui să o facă (dar aveți grijă să nu mascați o altă comandă utilă cu comanda rapidă!)
De asemenea, rețineți că acesta este un „terminal prost”, astfel încât unele comenzi precum git commit
au nevoie de opțiuni precum -m
și parolele vor fi în text clar pe ecran.
Răspuns
Am vrut să rulez o aplicație terminal dedicată, konsole
. Am vrut să deschid o filă nouă în konsole dacă rulează sau să aprind una dacă nu este.
De când eram mai tânăr atunci am împărțit implementarea între emacs și bash. Apel următoarea defun de la 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 apelează script 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
Răspuns
De cele mai multe ori folosesc shell-mode
. Așa că folosesc foarte mult shell-here . Dar când am nevoie de terminal extern. Folosesc urxvt-client cu tmux folosind acest lucru:
- Creați fișierul numit „term-here” în / usr / local / bin / care conține
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Creați o funcție nouă în emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Legați-vă de cheia preferată
Aceasta va deschide urxvt-client (cu tmux) în directorul curent. Îl leg în dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Aleg urxvt-client deoarece este rapid și simplu. Nu uitați să rulați urxvt-daemon la pornire.
Răspuns
Dacă aveți helm
cadru de finalizare instalat, puteți utiliza helm-run-external-command (C-x c C-c C-x)
pentru a rula un terminal-emulator la alegere sau orice alt program extern din directorul bufferului curent.
M-x term
, pare frumos, dar nu este exact ceea ce vreau. Vreau să pornesc nu un shell (de exemplubash
sauzsh
într-un buffer emacs, dar un emulator terminal (xterm
sauurxvt
…).multi-term