Abra o terminal no emacs
On Fevereiro 14, 2021 by adminExiste uma maneira rápida (atalho de teclado) para abrir um emulador de terminal (no meu caso urxvt) no mesmo diretório como o arquivo no buffer emacs atual?
Resposta
A combinação M-!
permite que você inicie comandos do shell. Você pode usá-lo para iniciar um urxvt
separado.
M-! urxvt RET
Acabei de experimentar com xterm
(não tenho urxvt
) e ele foi aberto no mesmo diretório do arquivo no buffer.
Se você quiser definir um atalho, adicione algo semelhante ao seu arquivo init:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
No meu caso, limitei o atalho a: Ctrl + C – S .
Resposta
Eu costumo usar M-x term
.
Você também pode checkout:
-
M-x terminal
-
M-x shell
M-x term
está efetivamente lançando um emulador de terminal escrito em elisp. Da ajuda:
term
Mx … RET Iniciar um emulador de terminal em um novo buffer. (termo PROGRAMA)termo é uma função Lisp compilada interativa 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 naquele buffer.
Digite Cc b para mudar para outro buffer.
Comentários
Resposta
O comando emacs M-x shell
iniciará um shell em um novo buffer (ou alternará para um shell buffer existente, se houver). Se for um novo shell buffer, será iniciado no diretório de o arquivo que está sendo visitado no buffer atual. Se for um buffer de shell existente, ele ainda estará no diretório onde você o deixou após o último uso. r para obter sempre o comportamento que deseja, lembre-se de matar o buffer do shell quando terminar (C-x k
)
Se M-x shell
é 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)
em seu arquivo de inicialização deve servir (mas tome cuidado para não mascarar outro comando útil com seu atalho!)
Além disso, esteja ciente de que este é um “terminal burro” para que alguns comandos como git commit
precisem de opções como -m
e as senhas estarão em texto simples na tela.
Resposta
Eu queria executar um aplicativo de terminal dedicado, konsole
. Eu queria abrir uma nova aba no konsole se ele estivesse rodando, ou abrir uma se não estivesse.
Desde que eu era mais jovem, eu divido 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
Resposta
Na maioria das vezes, uso shell-mode
. Portanto, eu uso intensamente o shell-here . Mas quando preciso de terminal externo. Eu uso o urxvt-client com tmux usando isto:
- 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"
- Crie uma 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 ao mapa do modo dired.
(use-package dired :ensure nil :ensure-system-package urxvt :bind ((:map dired-mode-map ("," . term-here))))
Escolho o urxvt-client porque é rápido e simples. Não se esqueça de executar o urxvt-daemon na inicialização.
Resposta
Se você tiver o helm
estrutura de conclusão instalada, você pode usar helm-run-external-command (C-x c C-c C-x)
para executar um emulador de terminal de sua escolha ou qualquer outro programa externo no diretório do buffer atual.
M-x term
, parece bom, mas não é exatamente o que eu quero. Não quero iniciar um shell (por exemplobash
ouzsh
em um buffer emacs, mas um emulador de terminal (xterm
ouurxvt
…).multi-term