Abrir terminal desde emacs
On febrero 14, 2021 by admin¿Existe una forma rápida (atajo de teclado) para abrir un emulador de terminal (en mi caso urxvt) en el mismo directorio como el archivo en el búfer emacs actual?
Respuesta
La combinación M-!
le permite ejecutar comandos de shell. Puede usarlo para iniciar un urxvt
separado.
M-! urxvt RET
Acabo de probarlo con xterm
(no tengo urxvt
) y se abrió en el mismo directorio que el archivo en el búfer.
Si desea definir un acceso directo, agregue algo similar en su archivo de inicio:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
En mi caso, enlacé el acceso directo a: Ctrl + C – S .
Respuesta
Normalmente uso M-x term
.
También puedes pago:
-
M-x terminal
-
M-x shell
M-x term
está lanzando efectivamente un emulador de terminal escrito en elisp. De la ayuda:
term
Mx … RET Iniciar un emulador de terminal en un nuevo búfer. (término PROGRAMA)término es una función Lisp compilada interactiva en` term.el «.
Inicie un emulador de terminal en un nuevo búfer. El búfer está en modo Término; consulte `term-mode» para conocer los comandos a utilizar en ese búfer.
Escriba Cc b para cambiar a otro búfer.
Comentarios
Responder
El comando emacs M-x shell
iniciará un shell en un nuevo búfer (o cambiará a un búfer de shell existente, si hay uno). Si es «un nuevo búfer de shell,» se iniciará en el directorio de el archivo que se está visitando en el búfer actual. Si es un búfer de shell existente, todavía estará en el directorio donde lo dejó después de usarlo por última vez. r para obtener siempre el comportamiento que desea, recuerde eliminar el búfer de shell cuando «haya terminado con él (C-x k
)
Si M-x shell
es demasiado tipeo, puede establecer una clave global para iniciar un shell por usted. Algo como (global-set-key (kbd "C-x S") "shell)
en su archivo de inicio debería hacerlo (¡pero tenga cuidado de no enmascarar otro comando útil con su acceso directo!)
Además, tenga en cuenta que este es un «terminal tonta», por lo que algunos comandos como git commit
necesitan opciones como -m
y las contraseñas estarán en texto plano en la pantalla.
Respuesta
Quería ejecutar una aplicación de terminal dedicada, konsole
. Quería abrir una nueva pestaña en konsole si se está ejecutando, o iniciar una si no lo está.
Desde que era más joven, dividí la implementación entre emacs y bash. Llamo a la siguiente defun de 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*")))
La defun llama al 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
Respuesta
La mayoría de las veces utilizo shell-mode
. Así que uso mucho shell-here . Pero cuando necesito un terminal externo. Yo uso urxvt-client con tmux usando esto:
- Crear archivo llamado «term-here» en / usr / local / bin / que contiene
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
- Crear nueva función en emacs
(defun term-here () (interactive) (start-process "" nil "term-here"))
- Vincular a tu clave favorita
Esto abrirá urxvt-client (con tmux) en su directorio actual. Lo ato en dired-mode-map.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Elijo urxvt-client porque es rápido y sencillo. No olvide ejecutar su urxvt-daemon al inicio.
Responda
Si tiene el helm
marco de finalización instalado, puede usar helm-run-external-command (C-x c C-c C-x)
para ejecutar un emulador de terminal de su elección o cualquier otro programa externo en el directorio del búfer actual.
M-x term
, parece agradable, pero no es exactamente lo que quiero. No quiero iniciar un shell (por ejemplo,bash
ozsh
en un búfer emacs pero en un emulador de terminal (xterm
ourxvt
…).multi-term