Abrir terminal desde emacs

11

¿Existe una forma rápida (método abreviado de teclado) para abrir un emulador de terminal (en mi caso, urxvt) en el mismo directorio que el archivo en el búfer de emacs actual?

estudiante
fuente

Respuestas:

15

La combinación le M-!permite iniciar comandos de shell. Podrías usarlo para lanzar un separado urxvt.

M-! urxvt RET

Solo lo probé 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, limité el acceso directo a: Ctrl+ C- S.

rahmu
fuente
9

Yo suelo usar M-x term.

También puedes pagar:

  • M-x terminal
  • M-x shell

M-x termestá lanzando efectivamente un emulador de terminal escrito en elisp. De la ayuda:

término
M-x ... RET Iniciar un emulador de terminal en un nuevo búfer. (plazo PROGRAMA)

term 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; vea 'term-mode' para ver los comandos que se usarán en ese búfer.

Escriba Cc b para cambiar a otro búfer.

rahmu
fuente
1
Gracias, no lo sabía M-x term, parece agradable pero no es exactamente lo que quiero. Quiero comenzar no un shell (por ejemplo basho zshen un búfer de emacs sino un emulador de terminal ( xtermo urxvt...).
estudiante
1
@student eche un vistazomulti-term
Ulrich Dangel
8

El comando emacs M-x shelliniciará un shell en un nuevo búfer (o cambiará a un búfer de shell existente, si hay uno). Si se trata de un nuevo búfer de shell, se iniciará en el directorio del archivo que se está visitando en el búfer actual. Si se trata de un búfer de shell existente, seguirá estando en el directorio donde lo dejó la última vez que lo usó. 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 shellescribe demasiado, puede establecer una clave global para iniciar un shell por usted. Algo así 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 tonto", por lo que algunos comandos, como las git commitopciones de necesidad, -my las contraseñas estarán en texto sin formato en su pantalla.

D_Bye
fuente
3

Quería correr una aplicación de terminal dedicado, konsole. Quería abrir una nueva pestaña en konsole si se está ejecutando, o abrir una si no lo está.

Desde que era más joven en ese entonces dividí la implementación entre emacs y bash. Llamo al 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*")))

El defun llama a bash script 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
fuente
1

La mayoría de las veces que uso shell-mode. Así que uso mucho shell-here . Pero cuando necesito terminal externo. Yo uso urxvt-client con tmux usando esto:

  • Cree un archivo llamado 'term-here' en / usr / local / bin / 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"))
  • Vincula 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 simple. No olvide ejecutar su urxvt-daemon al inicio.

azzamsa
fuente
1

Si tiene helminstalado el marco de finalización, puede usarlo 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.

chrimuelle
fuente