Uma das minhas principais razões para usar o Emacs é obter um ambiente poderoso depois de ssh
acessar uma máquina remota. A primeira coisa que faço após iniciar o Emacs é executar M-x shell
para obter uma linha de comando. Como demora um pouco para o Emacs iniciar, seria muito conveniente ter uma opção para solicitar ao Emacs que iniciasse um shell quando eu o executasse, depois de analisar meu arquivo de inicialização (tenho alguns ganchos de shell configurados para fazer uma coisa e outra ) Idealmente, eu gostaria de poder executá-lo com uma opção adicional para não precisar adicionar nada específico ao meu arquivo de inicialização nas máquinas remotas (eu poderia configurar um bash
alias, se quisesse). Algo assim:
emacs afile1 afile2 -startShell
De fato, como o estabelecimento da conexão segura leva cerca de 30 segundos, o que eu realmente gostaria de fazer é criar o "iniciar um shell" no ssh
próprio comando, usando ssh
com -t
para iniciar um programa baseado em tela .
ssh -t me@remote emacs afile1 afile2 -startShell
Dei uma olhada na documentação dos argumentos da linha de comando para o Emacs, mas ainda estou começando no Emacs e Lisp e na personalização e não ficou imediatamente óbvio como proceder para lidar com os argumentos da linha de comando. Como eu faria isso?
( Pergunta relacionadaeshell
mencionada pelo usuário @Name.)
ssh -t me@remote 'emacs -f shell'
funciona como um sonho.Respostas:
Você pode usar a opção -f para chamar uma função emacs na linha de comando.
O comentário mostra como fazer isso através do ssh usando -t e essa é uma maneira. No entanto, tem algumas desvantagens. O principal é que você esteja executando o emacs remotamente, o que significa que você precisará ter todo o material de configuração do emacs no sistema remoto, além de manter alguns localmente para a sua versão local. Você também perde alguma flexibilidade se quiser fazer coisas local e remotamente e talvez se mover entre elas.
Uma alternativa seria executar o emacs localmente e iniciar um shell na linha de comando e, em seguida, ssh nesse shell. Você pode usar o tramp over ssh para editar arquivos etc e, em seguida, usar o shell para executar uma sessão ssh interativa.
Quando estiver confortável com isso, você pode olhar para alguns dos pacotes relacionados ao ssh disponíveis no emacs. Em seguida, deve ser possível chamar uma função de um desses pacotes na linha de comando para automatizar a criação de uma sessão ssh. Pode ser necessário escrever uma função de wrapper simples para facilitar isso. Então você terá apenas 1 configuração do emacs config para gerenciar e terá a flexibilidade adicional.
fonte
ssh -t ... 'emacs -f shell'
diretamente de um terminal é que eu tenho que manter uma configuração separada e remota do emacs atualizada. Eu brinquei com o tramp e agora reduzi o tempo de inicialização para um nível aceitável com o compartilhamento de conexão ssh, que é utilizável e extremamente útil para, por exemplo, ascp
conclusão de nomes de arquivos remotos. No entanto, ainda não é uma solução perfeita para execução em uma única sessão, e suas desvantagens atualmente superam suas vantagens.ssh
o prompt é exibido mal com alguns^
caracteres prefixados. Hoje tentei novamente e a edição de arquivos é contínua, mas o prompt ainda está desarrumado. Também o meu suspeito é que nem tudo será perfeito. Por exemplo, a execuçãoag
desencadeou um processo na máquina remota, mas tive menos sorte ao executar umrgrep
. Certamente parece que vale a pena examinar um pouco mais ( github.com/ieure/ssh-el no melpa parece interessante) quando eu tiver tempo - e postar de volta qualquer qs neste site; obrigado por criá-lo.