Abra o terminal do emacs

9

Existe 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 atual do emacs?

    
por student 07.08.2012 / 14:06

5 respostas

14

A combinação M-! permite que você ative comandos do shell. Você poderia usá-lo para iniciar um urxvt separado.

M-! urxvt RET

Eu apenas tentei com xterm (não tenho urxvt ) e ele foi aberto no mesmo diretório que o 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 eu limitei o atalho a: Ctrl + C - S .

    
por 07.08.2012 / 16:12
7

Eu geralmente uso M-x term .

Você também pode fazer o checkout:

  • M-x terminal
  • M-x shell

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

term
M-x ... RET Start a terminal-emulator in a new buffer. (term PROGRAM)

term is an interactive compiled Lisp function in 'term.el'.

Start a terminal-emulator in a new buffer. The buffer is in Term mode; see 'term-mode' for the commands to use in that buffer.

Type C-c b to switch to another buffer.

    
por 07.08.2012 / 14:45
6

O comando emacs M-x shell iniciará um shell em um novo buffer (ou alternará 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 for um buffer de shell existente, ele ainda estará no diretório em que você o deixou depois de usá-lo pela última vez. Para sempre obter o comportamento desejado, 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) no seu arquivo de inicialização deve fazê-lo (mas tenha cuidado para não mascarar outro comando útil com o seu atalho!)

    
por 07.08.2012 / 14:49
2

Eu queria executar um aplicativo de terminal dedicado, konsole . Eu queria abrir uma nova aba no konsole se ela estivesse rodando, ou acionar um, se não estiver.

Desde que eu era mais jovem naquela época, dividi a implementação entre o emacs e o 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 comando defun chama 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
    
por 09.07.2014 / 08:02
0

Na maior parte do tempo, uso shell-mode . Então eu uso muito shell-here . Mas quando preciso de terminal externo. Eu uso o urxvt-client com o 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"))
  • Vincular à sua chave favorita

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

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

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

    
por 02.12.2018 / 02:56