Öffnen Sie das Terminal von Emacs

9

Gibt es eine schnelle Möglichkeit (Tastenkombination), einen Terminalemulator (in meinem Fall urxvt) im selben Verzeichnis wie die Datei im aktuellen Emacs-Puffer zu öffnen ?

Schüler
quelle

Antworten:

14

Mit dieser Kombination M-!können Sie Shell-Befehle starten. Sie können es verwenden, um eine separate zu starten urxvt.

M-! urxvt RET

Ich habe es gerade mit versucht xterm(ich habe es nicht urxvt) und es wurde im selben Verzeichnis wie die Datei im Puffer geöffnet.

Wenn Sie eine Verknüpfung definieren möchten, fügen Sie Ihrer Init-Datei etwas Ähnliches hinzu:

(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))

In meinem Fall habe ich die Verknüpfung gebunden an: Ctrl+ C- S.

Rahmu
quelle
7

Ich benutze normalerweise M-x term.

Sie können auch auschecken:

  • M-x terminal
  • M-x shell

M-x termstartet effektiv einen in elisp geschriebenen Terminalemulator. Aus der Hilfe:

term
M-x ... RET Startet einen Terminalemulator in einem neuen Puffer. (Begriff PROGRAMM)

term ist eine interaktive kompilierte Lisp-Funktion in `term.el '.

Starten Sie einen Terminalemulator in einem neuen Puffer. Der Puffer befindet sich im Term-Modus. Siehe `term-mode ' für die Befehle, die in diesem Puffer verwendet werden sollen.

Geben Sie Cc b ein, um zu einem anderen Puffer zu wechseln.

Rahmu
quelle
Danke, ich wusste es nicht M-x term, es scheint schön, ist aber nicht genau das, was ich will. Ich möchte keine Shell starten (zum Beispiel bashoder zshin einem Emacs-Puffer, sondern einen Terminal-Emulator ( xtermoder urxvt...).
Student
@ Student werfen Sie einen Blick aufmulti-term
Ulrich Dangel
7

Der Befehl emacs M-x shellstartet eine Shell in einem neuen Puffer (oder wechselt zu einem vorhandenen Shell-Puffer, falls vorhanden). Wenn es sich um einen neuen Shell-Puffer handelt, wird er im Verzeichnis der Datei gestartet, die im aktuellen Puffer besucht wird. Wenn es sich um einen vorhandenen Shell-Puffer handelt, befindet er sich weiterhin in dem Verzeichnis, in dem Sie ihn nach der letzten Verwendung verlassen haben. Denken Sie daran, den Shell-Puffer zu beenden, wenn Sie damit fertig sind ( C-x k) , um immer das gewünschte Verhalten zu erzielen.

Wenn Sie M-x shellzu viel tippen, können Sie einen globalen Schlüssel festlegen, um eine Shell für Sie zu starten. So etwas wie (global-set-key (kbd "C-x S") 'shell)in Ihrer Startdatei sollte es tun (aber achten Sie darauf, keinen anderen nützlichen Befehl mit Ihrer Verknüpfung zu maskieren!)

Beachten Sie auch, dass dies ein "dummes Terminal" ist, sodass einige Befehle wie " git commitErforderliche Optionen" -mund "Kennwörter" im Klartext auf Ihrem Bildschirm angezeigt werden.

D_Bye
quelle
2

Ich wollte eine dedizierte Terminalanwendung ausführen konsole. Ich wollte einen neuen Tab in der Konsole öffnen, wenn er ausgeführt wird, oder einen starten, wenn dies nicht der Fall ist.

Da ich damals jünger war, habe ich die Implementierung zwischen Emacs und Bash aufgeteilt. Ich nenne das folgende Defun von 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*")))

Der Defun ruft das Bash-Skript auf 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
Adobe
quelle
0

Die meiste Zeit benutze ich shell-mode. Also benutze ich hier stark Shell- . Aber wenn ich ein externes Terminal brauche. Ich benutze urxvt-client mit tmux wie folgt:

  • Erstellen Sie eine Datei mit dem Namen 'term-here' in / usr / local / bin / mit
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Erstellen Sie eine neue Funktion in Emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Binden Sie an Ihren Lieblingsschlüssel

Dadurch wird urxvt-client (mit tmux) in Ihrem aktuellen Verzeichnis geöffnet. Ich binde es in dired-mode-map.

(use-package dired
  :ensure nil
  :ensure-system-package urxvt
  :bind ((:map dired-mode-map
           ("," . term-here))))

Ich wähle urxvt-client, weil es schnell und einfach ist. Vergessen Sie nicht, Ihren urxvt-Daemon beim Start auszuführen.

Azzamsa
quelle
0

Wenn Sie das helmCompletion Framework installiert haben, können Sie helm-run-external-command (C-x c C-c C-x)einen Terminalemulator Ihrer Wahl oder ein anderes externes Programm im Verzeichnis des aktuellen Puffers ausführen.

chrimuelle
quelle