Cliente SSH e Prompt de Comando substituem o Windows look-and-feel

2

O problema

Eu trabalhei exclusivamente no Windows. Eu posso lidar com isso.

Eu trabalhei exclusivamente no DOS (há muito tempo!). Eu posso lidar com isso.

Eu trabalhei exclusivamente no Unix. Eu posso lidar com isso.

Neste momento, estou desenvolvendo um aplicativo de linha de comando (python) em uma máquina Windows, testando-o em uma caixa do DOS (ou seja, o prompt de comando do Windows) e, em seguida, implantá-lo no Linux e executá-lo com o PuTTY.

Eu não posso lidar com isso.

Minha produtividade cai drasticamente quando CTRL-C corta em uma janela (Windows) e mata o processo em outro (DOS, Linux).

Minha produtividade cai drasticamente quando Enter copia a seleção em uma janela (DOS) e exclui a seleção em outra (Windows), e executa o comando atual parcialmente editado na terceira (PuTTY).

Minha produtividade cai drasticamente quando não consigo clicar em Desfazer, Casa ou Final.

A solução que estou procurando

Um cliente de linha de comando SSH / Bash que é executado no Windows e, na medida do possível, usa todos os atalhos padrão do Windows (Recortar, Copiar, Colar, Desfazer, Início, Fim, Inserir, Shift-Arrows etc.) trabalhe em uma linha de comando bash. Pontos de bônus se colocar o cursor entre as letras, e não sobre elas. Além disso, um drop-in de linha de comando DOS equivalente que é executado no Windows e fornece a mesma interface.

Eu aprecio que pode haver necessidade de botões especiais para realmente transferir códigos CTRL (como CTRL-C) até os casos em que eu precisar deles.

Eu suspeito que o cliente SSH precisará ser específico para um shell (para que ele saiba quando está no prompt de comando e quando está dentro de um aplicativo em execução).

Eu sei que existem muitos clientes SSH , mas eu sou procurando conselhos para uma necessidade particular. PuTTY parece uma rota de fuga para programadores Unix presos no Windows. Eu sou o oposto.

Alguém pode recomendar um (ou talvez uma combinação de um cliente SSH e uma substituição de linha de comando)?

Atualização: depois de ver as primeiras respostas aqui, transformei meus requisitos em um artigo do blog , que pode fornecer mais informações sobre a direção que estou procurando.

    
por Oddthinking 09.06.2010 / 06:14

4 respostas

2

para trabalho de terminal eu uso ' mintty ' que pode ser usado como parte do ' cygwin '. então eu obviamente executo um shell "real" (zsh no meu caso), embora o powershell não seja tão ruim (a parte ruim é realmente o terminal que o windows fornece. é horrível).

  • você pode iniciar o cmd.exe a partir do interior do bash / zsh
  • você tem ssh no cygwin
  • você pode alterar a aparência do cursor no mintty (assim ele aparece como | em vez de um bloco)
  • você pode marcar o texto como no xterm e com ctrl + leftclick você pode iniciar um aplicativo apropriado naquele texto marcado (digamos que você marca http://superuser.com e ctrl + leftclick - > um navegador é acionado, caso você tenha selecionado C: \ Windows o explorador é acionado, etc.)

a única outra maneira de fazê-lo é desenvolver diretamente no servidor remoto através de uma sessão ssh, usando um editor decente (vim vem à mente).

    
por 09.06.2010 / 07:18
1

Isso é difícil, devido às convenções do Unix e à divisão de responsabilidades pelo manuseio de entrada entre terminal, driver de terminal e shell. Mas há algumas coisas que você pode fazer.

Como já foi mencionado, usando o mintty, Ctrl + Insert e Shift + Insert copiam e colam da área de transferência do Windows. O terminal não pode cortar, porque não tem controle sobre o buffer de linha do shell. Esses atalhos vieram do padrão Common User Access (CUA) da IBM. Eles apareceram pela primeira vez nos aplicativos do DOS e estão no Windows desde o início.

Ctrl + X / C / V, entretanto, veio do Mac. Indiscutivelmente mais conveniente, mas o grande problema com o uso de um terminal é que Ctrl + C é a chave de interrupção, com muitos aplicativos que o usam para coisas como o Cancel também. Além disso, Ctrl + V é a chave padrão para 'inserção entre aspas' em um shell, que remove qualquer significado especial do próximo pressionamento de tecla, e Ctrl + X é a primeira chave para muitos atalhos de dois passos.

Eu não acho que haja alguma maneira de usar a tecla Shift + para marcar o texto no bash. Em vez disso, pressione Ctrl + Espaço para definir a "marca" e, em seguida, se você mover o cursor, o texto entre a marca e o cursor será selecionado. Infelizmente você não consegue ver a seleção (chamada "região"), então você tem que lembrar onde você colocou a marca.

(Zsh funciona da mesma forma, mas ao contrário do bash, ele realça a seleção. A questão 84 do Enhancement para mintty solicita a habilidade de selecionar texto usando o teclado no nível do terminal. Tal recurso provavelmente usaria Shift + seta).

Agora, os atalhos padrão para operar na "região" são os do emacs, mas você pode alterá-los para o estilo Mac, colocando o seguinte em um arquivo chamado .inputrc no seu diretório pessoal. (Leia tudo sobre .inputrc em link )

"\C-x": kill-region
"\C-c": copy-region-as-kill
"\C-v": yank

Mas espere, e o significado especial dessas teclas? Bem, você acabou de perder todos os atalhos Ctrl + X em duas etapas, então você teria que revincular os que você realmente precisa. Enquanto isso, a função Ctrl + V pode ir para Ctrl + Q:

"\C-q": quoted-insert

Isso deixa o importantíssimo Ctrl + C. Isso é realmente tratado pelo driver do terminal, então você precisa movê-lo para outro lugar usando 'stty'. O Mintty possui uma seqüência de controle que permite que o código de tecla Escape seja alterado de forma que possa ser usado como a chave de interrupção. Colocar isso no script de inicialização do bash fará isso:

echo $'\e[7728h'
stty intr ^\

Os códigos de tecla do Mintty para várias chaves especiais também permitem que algumas outras configurações stty sejam alteradas para o estilo do Windows:

  • swtch ^] susp ^] - pausa em vez de Ctrl + Z para dormir um processo
  • eof ^^ - Ctrl + Enter, em vez disso, Ctrl + D para o final do arquivo
  • werase ^_ - Ctrl + Backspace em vez de Ctrl + W para apagar uma palavra
  • lnext ^q - Ctrl + Q em vez de Ctrl + V para inserção literal do próximo caractere

Você também pode querer remover os atalhos do driver de terminal para parar (^ S) e iniciar (^ Q) a saída, que não são muito úteis, mas que são capazes de causar confusão:

stty start - stop -

De volta a .inputrc, há várias associações de teclas no estilo do Windows:

# Ctrl+Left/Right to move by whole words
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# Ctrl+Backspace/Delete to delete whole words
"\e[3;5~": kill-word
"\C-_": backward-kill-word

# Ctrl+Shift+Backspace/Delete to delete to start/end of the line
"\e[3;6~": kill-line
"\xC2\x9F": backward-kill-line

# Alt-Backspace and Ctrl+Z for undo
"\e\d": undo
"\C-z":undo

Por fim, você pode encontrar os seguintes atalhos úteis também. Eles procuram uma linha na história que comece igual à sua atual:

# Ctrl-Up/Down for searching command history
"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward
    
por 25.06.2010 / 08:51
0

Acho que o Cygwin faz o que você quer ... mas eu não uso há alguns anos. Na verdade, vou instalá-lo agora mesmo para ver como funciona. É um pouco exagero ser usado apenas para um cliente ssh.

    
por 09.06.2010 / 07:18
0

ok, outra maneira de resolver seu problema:

editando os arquivos que você tem que editar em um editor local e gravando-os em "disco" você os transfere de volta para o servidor.

opções:

  • vim pode fazer isso através do netrw-plugin (que faz parte da distribuição padrão agora, iirc)
  • O emacs parece suportar isso via tramp , mas também parece ter um pequeno issues .
  • configure um ssh-tunnel para um samba-share na máquina remota para montá-lo localmente
  • experimente expanddrive ("monta o sftp no seu explorador")
  • experimente o sshfs para Windows através do dokan-sshfs .
por 11.06.2010 / 07:09