Terminal aberto do emacs

11

Existe uma maneira rápida (atalho de teclado) para abrir um emulador de terminal (no meu caso urxvt) no mesmo diretório que o arquivo no buffer atual do emacs?

aluna
fonte

Respostas:

15

A combinação M-!permite iniciar comandos de shell. Você pode usá-lo para iniciar um separado urxvt.

M-! urxvt RET

Eu apenas tentei com xterm(não tenho urxvt) e ele abriu no mesmo diretório que o arquivo no buffer.

Se você deseja definir um atalho, adicione algo semelhante no seu arquivo init:

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

No meu caso, vinculei o atalho a: Ctrl+ C- S.

rahmu
fonte
9

Eu costumo usar M-x term.

Você também pode fazer o checkout:

  • M-x terminal
  • M-x shell

M-x termestá lançando efetivamente um emulador de terminal escrito em elisp. Da ajuda:

termo
M-x ... RET Inicie um emulador de terminal em um novo buffer. (termo PROGRAMA)

term é uma função Lisp interativa compilada em `term.el '.

Inicie um emulador de terminal em um novo buffer. O buffer está no modo Term; veja `term-mode ' para os comandos a serem usados ​​nesse buffer.

Digite Cc b para alternar para outro buffer.

rahmu
fonte
11
Obrigado, eu não sabia M-x term, parece bom, mas não é exatamente o que eu quero. Eu quero começar não um shell (por exemplo, bashou zshem um emacs tampão, mas um emulador de terminal ( xtermou urxvt...).
estudante de
11
@student ter um olharmulti-term
Ulrich Dangel
8

O comando emacs M-x shelliniciará um shell em um novo buffer (ou mudará para um buffer de shell existente, se houver um). Se for um novo buffer de shell, ele será iniciado no diretório do arquivo que está sendo visitado no buffer atual. Se houver um buffer de shell existente, ele ainda estará no diretório em que você o deixou após o último uso. Para sempre obter o comportamento desejado, lembre-se de eliminar o buffer do shell quando terminar ( C-x k)

Se M-x shellhouver muita digitação, você pode definir uma chave global para iniciar um shell para você. Algo como (global-set-key (kbd "C-x S") 'shell)no seu arquivo de inicialização deve fazer isso (mas tenha cuidado para não mascarar outro comando útil com o seu atalho!)

Além disso, esteja ciente de que este é um "terminal burro", portanto alguns comandos, como as git commitopções necessárias -me as senhas, estarão em texto simples na tela.

D_Bye
fonte
3

Eu queria executar um aplicativo de terminal dedicado konsole,. Eu queria abrir uma nova aba no konsole, se estiver em execução, ou iniciar uma, se não estiver.

Desde que eu era mais jovem, então dividi a implementação entre emacs e bash. Eu chamo o seguinte defun do 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*")))

O defun chama o 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
Adobe
fonte
1

Na maioria das vezes eu uso shell-mode. Então, eu uso muito o shell-aqui . Mas quando eu preciso de terminal externo. Eu uso o urxvt-client com tmux usando este:

  • Crie um arquivo chamado 'term-here' em / usr / local / bin / contendo
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
  • Criar nova função no emacs
(defun term-here ()
  (interactive)
  (start-process "" nil "term-here"))
  • Vincule à sua chave favorita

Isso abrirá o urxvt-client (com tmux) em seu diretório atual. Eu o vinculo no mapa de modo direcionado.

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

Eu escolho o urxvt-client porque é rápido e simples. Não se esqueça de executar o seu urxvt-daemon na inicialização.

azzamsa
fonte
1

Se você tiver a helmestrutura de conclusão instalada, poderá helm-run-external-command (C-x c C-c C-x)executar um emulador de terminal de sua escolha ou qualquer outro programa externo no diretório do buffer atual.

chrimuelle
fonte