Ответы:
Комбинация M-!
позволяет запускать команды оболочки. Вы можете использовать его для запуска отдельного urxvt
.
M-! urxvt RET
Я только что попробовал с xterm
(у меня нет urxvt
), и он действительно открылся в том же каталоге, что и файл в буфере.
Если вы хотите определить ярлык, добавьте нечто подобное в ваш файл инициализации:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
В моем случае я связал ярлык с: Ctrl+ C- S.
Я обычно использую 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, чтобы переключиться на другой буфер.
multi-term
Команда emacs M-x shell
запустит оболочку в новом буфере (или переключится на существующий буфер оболочки, если он есть). Если это новый буфер оболочки, он будет запущен в каталоге посещаемого файла в текущем буфере. Если это существующий буфер оболочки, он все равно будет в том каталоге, где вы оставили его после последнего использования. Чтобы всегда получить желаемое поведение, не забудьте убить буфер оболочки, когда закончите с ним ( C-x k
)
Если M-x shell
вы слишком много печатаете, вы можете установить глобальный ключ для запуска оболочки. Это (global-set-key (kbd "C-x S") 'shell)
должно сделать что- то подобное в вашем файле запуска (но будьте осторожны, чтобы не замаскировать другую полезную команду с помощью ярлыка!)
Кроме того, имейте в виду, что это «тупой терминал», поэтому некоторые команды, такие как « git commit
Необходимые параметры», такие как -m
пароли, будут отображаться на экране в виде открытого текста.
Я хотел запустить специальное приложение терминала 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
Большую часть времени я использую shell-mode
. Так что я интенсивно использую шелл-тут . Но когда мне нужен внешний терминал. Я использую urxvt-клиент с tmux, используя это:
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
(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 при запуске.
Если у вас установлена helm
среда завершения, вы можете использовать ее helm-run-external-command (C-x c C-c C-x)
для запуска эмулятора терминала или любой другой внешней программы в каталоге текущего буфера.
M-x term
, это кажется хорошим, но это не совсем то, что я хочу. Я хочу запустить не оболочку (например,bash
илиzsh
в буфере emacs, а эмулятор терминала (xterm
илиurxvt
...).