Como inicio um shell automaticamente após iniciar o emacs

8

Uma das minhas principais razões para usar o Emacs é obter um ambiente poderoso depois de sshacessar uma máquina remota. A primeira coisa que faço após iniciar o Emacs é executar M-x shellpara 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 bashalias, 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 sshpróprio comando, usando sshcom -tpara 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.)

TooTone
fonte
pode :). ssh -t me@remote 'emacs -f shell'funciona como um sonho.
TooTone
@Nome obrigado Tentei, mas eu estava dizendo que você poderia adicionar seu comentário como resposta e eu o aceitaria porque soluciona o meu problema. Ou talvez minha pergunta deva ser marcada como duplicada. Seria bom não deixá-lo aberto, de qualquer maneira.
TooTone

Respostas:

4

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.

emacs -f shell

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.

Tim X
fonte
1
Você tem razão em que a principal desvantagem de usar 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, a scpconclusã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.
TooTone 17/02/15
Outras opções ssh que podem ajudar a incluir o nível certo de compactação ssh. Quais são os inconvenientes de uma única sessão que você está enfrentando?
Tim X
Ontem, tive um problema em que um arquivo que eu abri era somente leitura e também quando ssho 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ção agdesencadeou um processo na máquina remota, mas tive menos sorte ao executar um rgrep. 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.
TooTone
Dependendo do seu caso de uso, obter o tramp exatamente correto pode ser um desafio, mas vale a pena. O prompt bagunçado parece que você pode ter caracteres de escape de cores ansi. Talvez o pacote ansi-color precise ser carregado. Além disso, tente usar o tramp sem nenhuma configuração - os padrões geralmente estão no local. O tamp é poderoso, mas complexo de configurar às vezes.
Tim X