Open terminal van emacs
Geplaatst op februari 14, 2021 door adminIs er een snelle manier (sneltoets) om een terminalemulator (in mijn geval urxvt) te openen in de dezelfde directory als het bestand in de huidige emacs-buffer?
Antwoord
De combinatie M-!
stelt u in staat shell-opdrachten te starten. Je zou het kunnen gebruiken om een aparte urxvt
te starten.
M-! urxvt RET
Ik heb het net geprobeerd met xterm
(ik heb geen urxvt
) en het werd geopend in dezelfde map als het bestand in de buffer.
Als je een snelkoppeling wilt definiëren, voeg dan iets soortgelijks toe aan je init-bestand:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
In mijn geval heb ik de snelkoppeling gebonden aan: Ctrl + C – S .
Antwoord
Ik gebruik meestal M-x term
.
Je kunt ook afrekenen:
-
M-x terminal
-
M-x shell
M-x term
lanceert effectief een terminalemulator geschreven in elisp. Met behulp van de hulp:
term
Mx … RET Start een terminal-emulator in een nieuwe buffer. (term PROGRAM)term is een interactieve gecompileerde Lisp-functie in` term.el “.
Start een terminal-emulator in een nieuwe buffer. De buffer bevindt zich in Term-modus; zie `term-mode voor de commandos die in die buffer moeten worden gebruikt.
Typ Cc b om naar een andere buffer over te schakelen.
Reacties
Answer
Het emacs-commando M-x shell
zal een shell starten in een nieuwe buffer (of overschakelen naar een bestaande shellbuffer, als die er is). Als het een nieuwe shellbuffer is, wordt deze gestart in de directory van het bestand dat wordt bezocht in de huidige buffer. Als het een bestaande shell-buffer is, bevindt het zich nog steeds in de map waar je het hebt achtergelaten nadat je het voor het laatst hebt gebruikt. r om altijd het gewenste gedrag te krijgen, vergeet dan niet om de shell-buffer te doden wanneer u “klaar bent met (C-x k
)
Als M-x shell
is te veel typen, je kunt een algemene sleutel instellen om een shell voor je te starten. Iets als (global-set-key (kbd "C-x S") "shell)
in uw opstartbestand zou het moeten doen (maar pas op dat u geen ander nuttig commando maskeert met uw snelkoppeling!)
Houd er ook rekening mee dat dit een “dumb terminal” dus sommige commandos zoals git commit
hebben opties nodig zoals -m
en wachtwoorden zullen in leesbare tekst op je scherm verschijnen.
Answer
Ik wilde een speciale terminal-applicatie draaien, konsole
. Ik wilde een nieuw tabblad openen in konsole als het actief is, of er een opstarten als dat niet het geval is.
Omdat ik toen jonger was, heb ik de implementatie opgesplitst tussen emacs en bash. Ik noem de volgende defun van 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*")))
De defun roept bash-script aan, 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
Antwoord
Meestal gebruik ik shell-mode
. Dus ik gebruik shell-here intensief. Maar als ik een externe terminal nodig heb. Ik gebruik urxvt-client met tmux en gebruik dit:
- Maak een bestand met de naam “term-here” in / usr / local / bin / met
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Nieuwe functie maken in emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Binden aan je favoriete sleutel
Dit opent urxvt-client (met tmux) in je huidige directory. Ik bind het in een dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Ik kies urxvt-client omdat het snel en eenvoudig is. Vergeet niet uw urxvt-daemon bij het opstarten uit te voeren.
Answer
Als u de helm
completering framework geïnstalleerd, kunt u helm-run-external-command (C-x c C-c C-x)
gebruiken om een terminal-emulator naar keuze of een ander extern programma in de directory van de huidige buffer uit te voeren.
M-x term
, het lijkt leuk maar is niet precies wat ik wil. Ik wil geen shell starten (bijvoorbeeldbash
ofzsh
in een emacs-buffer maar een terminalemulator (xterm
ofurxvt
…).multi-term