Открыть терминал из Emacs

11

Существует ли быстрый способ (сочетание клавиш) открыть эмулятор терминала (в моем случае urxvt) в том же каталоге, что и файл в текущем буфере emacs?

студент
источник

Ответы:

15

Комбинация M-!позволяет запускать команды оболочки. Вы можете использовать его для запуска отдельного urxvt.

M-! urxvt RET

Я только что попробовал с xterm(у меня нет urxvt), и он действительно открылся в том же каталоге, что и файл в буфере.

Если вы хотите определить ярлык, добавьте нечто подобное в ваш файл инициализации:

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

В моем случае я связал ярлык с: Ctrl+ C- S.

rahmu
источник
9

Я обычно использую M-x term.

Вы также можете оформить заказ:

  • M-x terminal
  • M-x shell

M-x termэффективно запускает эмулятор терминала, написанный на elisp. Из справки:

term
M-x ... RET Запустить эмулятор терминала в новом буфере. (термин ПРОГРАММА)

term - это интерактивная скомпилированная функция Lisp в `term.el '.

Запустите терминал-эмулятор в новом буфере. Буфер находится в режиме Term; смотрите `term-mode ' для команд, которые будут использоваться в этом буфере.

Введите Cc b, чтобы переключиться на другой буфер.

rahmu
источник
1
Спасибо, я не знал M-x term, это кажется хорошим, но это не совсем то, что я хочу. Я хочу запустить не оболочку (например, bashили zshв буфере emacs, а эмулятор терминала ( xtermили urxvt...).
студент
1
@student взгляните наmulti-term
Ульрих Дангел
8

Команда emacs M-x shellзапустит оболочку в новом буфере (или переключится на существующий буфер оболочки, если он есть). Если это новый буфер оболочки, он будет запущен в каталоге посещаемого файла в текущем буфере. Если это существующий буфер оболочки, он все равно будет в том каталоге, где вы оставили его после последнего использования. Чтобы всегда получить желаемое поведение, не забудьте убить буфер оболочки, когда закончите с ним ( C-x k)

Если M-x shellвы слишком много печатаете, вы можете установить глобальный ключ для запуска оболочки. Это (global-set-key (kbd "C-x S") 'shell)должно сделать что- то подобное в вашем файле запуска (но будьте осторожны, чтобы не замаскировать другую полезную команду с помощью ярлыка!)

Кроме того, имейте в виду, что это «тупой терминал», поэтому некоторые команды, такие как « git commitНеобходимые параметры», такие как -mпароли, будут отображаться на экране в виде открытого текста.

D_Bye
источник
3

Я хотел запустить специальное приложение терминала konsole. Я хотел открыть новую вкладку в konsole, если она запущена, или запустить ее, если она не запущена.

Так как я был моложе тогда, я разделил реализацию между emacs и bash. Я вызываю следующий defun из 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 вызывает 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
саман
источник
1

Большую часть времени я использую shell-mode. Так что я интенсивно использую шелл-тут . Но когда мне нужен внешний терминал. Я использую urxvt-клиент с tmux, используя это:

  • Создайте файл с именем 'term-here' в / usr / local / bin /, содержащий
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Создать новую функцию в Emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Привязать к вашему любимому ключу

Это откроет urxvt-client (с tmux) в вашем текущем каталоге. Я связываю это в dired-mode-map.

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

Я выбираю urxvt-client, потому что это быстро и просто. Не забудьте запустить свой urxvt-daemon при запуске.

azzamsa
источник
1

Если у вас установлена helmсреда завершения, вы можете использовать ее helm-run-external-command (C-x c C-c C-x)для запуска эмулятора терминала или любой другой внешней программы в каталоге текущего буфера.

chrimuelle
источник