Rastreando meu caminho do shell no Emacs

6

Não faz muito tempo, eu encontrei o seguinte fragmento precioso que permite ao Emacs rastrear meu diretório atual em qualquer buffer de ansi-term .

Mais especificamente, se eu cd <some/path> de dentro de um terminal dentro do Emacs, e eu pressionar C-x C-f , o Emacs executará find-file de <some/path> diretamente, o que é muito, muito útil.

if [ -n "$INSIDE_EMACS" ]; then
  chpwd() { print -P "3AnSiTc %d" }
  print -P "3AnSiTu %n"
  print -P "3AnSiTc %d"
fi

No entanto, o truque acima não funciona se eu ssh para uma máquina remota a partir do shell. Idealmente, neste caso, se eu pressionar C-x C-f , o Emacs deve reconhecer que eu fiz ssh em alguma máquina, e use o tramp para executar find-file na máquina correspondente e no caminho remoto.

Isso me leva às duas perguntas a seguir:

  1. Como e por que o snippet acima funciona?
  2. Como posso estendê-lo para que ele também possa rastrear meus caminhos remotos depois que eu ssh em outra máquina?
por Amelio Vazquez-Reina 27.04.2014 / 00:43

1 resposta

1

Primeiro, como mencionado no comentário de Robert, seu snippet não é válido. No mínimo, você precisa de um ponto-e-vírgula ou de uma nova linha antes de } . As instruções de impressão provavelmente não estão corretas.

No entanto, há o suficiente aqui para adivinhar o que está acontecendo, então vou explicar isso.

Quando você executa ansi-term , ele chama um shell com a variável de ambiente $INSIDE_EMACS set. O código shell então faz outras coisas, o principal é redefinir a função chpwd para que ela imprima coisas adicionais, que sem dúvida incluem o diretório de trabalho atual. Você pode facilmente verificar isso observando que em cada comando você provavelmente verá o diretório atual em algum lugar na área de prompt após a conclusão do último comando.

Quando o termo ans vê algo parecido com um diretório no início de uma linha, ele rastreia isso. Então, nesse sentido, esse código não é especial; o diretório poderia ter sido mostrado de várias maneiras, como a adição de \w ao prompt por meio da configuração da variável de ambiente PS1 .

Como para o item 2, consulte " Abre o arquivo remoto enquanto estiver no buffer / janela do emacs ansi-term: ansi-term + tramp "

    
por 21.06.2015 / 08:42

Tags