Windows 10 linux bash shell ctrl + space não define marca no Emacs

12

No Windows 10, instalei o Subsistema para Linux Bash. Mas eu tenho um problema com o atalho no Emacs Ctrl+ spacenão marca ponto.

O que eu tentei e não ajudou:

  • Tentei desmarcar "ativar atalhos da tecla Ctrl" no menu de propriedades do console do Windows

  • Eu tentei usar diferentes terminais ConEmu sem sucesso.

Gostaria de saber se isso está de alguma forma relacionado ao ubuntu, que tem problemas semelhantes com ctrl + space, e o windows linux bash está usando repositórios do ubuntu.

Pawel Dubiel
fonte

Respostas:

3

Não há soluções para isso, em termos de fazer o Ctrl-Space passar pelo terminal Bash, no momento da redação deste artigo (1 de setembro de 2016) - mas há uma solução alternativa que pode ser suficiente para muitos usuários: use o PuTTY para conectar-se via SSH, que força o manuseio do Ctrl-Space. (No modo tty, é impossível distinguir Ctrl-Space de Ctrl- @, porque eles são o mesmo código de caractere, mas isso não deve ser um problema, pois, por padrão, o Emacs está configurado para lidar com set-mark-commandisso.)

  1. Instale o servidor OpenSSH com sudo apt-get install openssh-server. Se já estiver instalado, remova-o ( sudo apt-get remove openssh-server) e reinstale-o para restaurar os arquivos de configuração.
  2. Edite o arquivo / etc / ssh / sshd_config (com sudo), da seguinte maneira:

    • Se houver uma configuração de linha não comentada PermitRootLogin, comente-a. Adicionar uma linha PermitRootLogin no.
    • Adicione uma linha AllowUsers USERNAME, substituindo USERNAME pelo seu nome de usuário Linux (se você não souber o que é isso, execute o comando whoamino prompt do Bash).
    • Idealmente, você deve configurar a autenticação sem senha usando chaves SSH, mas como fazer isso está fora do escopo desta pergunta (existem muitos guias disponíveis; pesquise na web "ssh-keygen sem senha"). Enquanto isso, adicione ou remova o comentário da linha PasswordAuthentication yes.
    • Set UsePrivilegeSeparation no; provavelmente você encontrará uma linha no arquivo dizendo UsePrivilegeSeparation yes; basta mudar yespara noe salvar o arquivo / etc / ssh / sshd_config .

    Se algo der errado aqui, você poderá restaurar o arquivo repetindo a etapa 1.

  3. Inicialização do servidor SSH com o comando sudo service ssh --full-restart.
  4. Usando PuTTY (faça o download aqui ), faça o login localhostno campo Hostname, tudo o resto é deixado como padrão. Você será solicitado a inserir seu nome de usuário e senha do Linux.
  5. Corra emacs. Ctrl-space definirá a marca conforme desejado.

(Observe que as etapas acima não tornarão seu sistema capaz de aceitar conexões SSH de outros hosts. Para fazer isso, você também precisará alterar as regras de firewall do Windows para permitir a porta TCP de entrada 22.)

Em outra resposta, você disse: "mas a massa não é um terminal local". Não tenho certeza se você não sabia que poderia usar localhostdessa maneira ou se estava dispensando o PuTTY por causa da maior sobrecarga em relação a um terminal local. Neste último caso, não me preocuparia, uma sessão SSH interativa é uma carga extremamente leve. (Certamente é muito menos carregado do que executar um sistema X Window, para que você possa executar um GUI Emacs ou um xterm!)

A única desvantagem real de se executar dessa maneira em relação a um terminal direto é que os eventos de colagem são enviados letra por letra, como se você digitasse o conteúdo da área de transferência muito rapidamente, o que pode causar pares elétricos, indentação, expansão de trechos etc. fogo. (A pasta não deve acionar os comandos de acordes de teclas, pois há lógica para detectar uma colagem em andamento e desativar os acordes de teclas até que a colagem seja concluída.)

E também há pelo menos uma grande vantagem sobre o terminal Bash padrão: os eventos do mouse são suportados pelo PuTTY de uma forma que o Emacs possa responder; portanto, ironicamente, você pode mover o ponto com o mouse no PuTTY, mesmo que possa ' t com o terminal local.

Trey
fonte
5

Eu uso o ConEmu. Não existe uma maneira elegante, mas pode ser resolvida usando a macro.

  1. Abra "Configurações" (clique no ícone na parte superior).
  2. Clique em "Teclas e macros".
  3. No lado direito, role para baixo até ver as opções "Macro 01". "Macro 32" e escolha qualquer uma que esteja disponível (não importa).
    Vamos pegar a Macro 01 neste exemplo.
  4. Selecione "Espaço" no 1º menu suspenso.
  5. Selecione "Ctrl" no segundo menu suspenso. Deixe os 2 menus suspensos restantes intocados.
  6. Cole abaixo no campo Macro da GUI :

    keys("\e");keys("x");keys("s");keys("e");keys("t");keys("-");keys("m");keys("a");keys("r");keys("k");keys("-");keys("c");keys("o");keys("m");keys("m");keys("a");keys("n");keys("d");keys("\n")
  7. Acima basicamente envia M-x select-mark-commandstring para o emacs. Agora clique em "Salvar configurações".


Deve ficar assim no final:

insira a descrição da imagem aqui

Akira Ishikawa
fonte
funciona como charme. Fantástico!
precisa saber é o seguinte
2

Quando executado showkey -ano console do Windows / ubuntu-bash, mostra que ctrl + space está enviando um espaço simples.

E é o mesmo problema da sessão ssh para qualquer outra máquina linux, o ctrl + space é enviado como espaço simples.

O mesmo comportamento ocorre com qualquer outro terminal baseado em janelas (conemu, consolez, MobaXTerm) - exceto que o putty pode lidar com isso muito bem, mas o putty não é um terminal local.

Eu acho que os terminais do Windows não têm mapeamentos para algumas seqüências. O mesmo problema ocorre com outras combinações, como ctrl + 1 ctrl + 2 .. etc. Aqui é necessário o terminal que pode manipular os mapeamentos do teclado, por exemplo, como massa de vidraceiro.

Acredito que esse problema deve ser corrigido em versões futuras do terminal Windows Bash.

Pawel Dubiel
fonte
Pior ainda, também não parece passar ctrl- @, que é a outra ligação para o set-mark. Se alguém estiver em um vínculo real, poderá usar o comando Mx set-mark-command. A coisa certa a fazer por agora, provavelmente, é definir uma ligação de chave para outra coisa.
Jim Hunziker
@ JimHunziker Dado que esse set-mark-commandé provavelmente o comando mais usado no Emacs (além de self-insert-command), treinar os dedos para isso é uma pergunta muito, muito íngreme - especialmente se você usa o Emacs há mais de 25 anos como eu.
Trey
@Trey acrescentou outra resposta, se você não se importa em execução Xming em janelas
Pawel Dubiel
@PawelDubiel Veja minha resposta apenas adicionada. (Dei instruções mais detalhadas do que o necessário para ajudar os leitores posteriores.) Você dispensou o PuTTY por algum motivo, mas não disse qual é esse motivo. É certamente uma opção que coloca muito menos carga no sistema do que xming + um terminal X.
Trey
2

Este projeto permite que você use o MinTTY como um terminal alternativo: https://github.com/mintty/wsltty . É derivado do PuTTY, mas não requer SSH. E, como o PuTTY, ele lida com o espaço Ctrl muito bem.

Joel Dice
fonte
1

Agora, esse problema foi corrigido no Windows 10, compilação 14965 . Verifica:

[Environment]::OSVersion

E instale atualizações, se você não tiver!

oblio
fonte
Adicione mais detalhes à sua resposta - o link pode parar de funcionar em algum momento em que sua resposta se torne inútil.
djsmiley2k TMW
0

Há um hack, pois podemos instalar o X Server para Windows

1 primeira instalação do xming para windows

2 iniciar xming

3, em seguida, a partir do Windows bash install

sudo apt-get install rxvt-unicode-256color

4 abra cmd.exee execute

bash.exe -c "urxvtd -q -o -f; bash" 

agora estamos no console bash e executamos

(DISPLAY=:0 urxvtc &)

5 Neste ponto, já devemos ver um novo terminal em Xming. E podemos executar o emacs no modo terminal.

emacs -nw

E todas as ligações agora funcionam muito bem

a discussão relacionada está aqui https://github.com/Microsoft/BashOnWindows/issues/531

Pawel Dubiel
fonte
Por que essa é uma solução alternativa superior ao uso do PuTTY? Se você executaria o Emacs no modo GUI, eu entenderia, mas seu uso -nwfaz com que ele funcione em um terminal, como faria com o PuTTY, exceto que agora você precisa executar um segundo sistema de janelas inteiro - a partir de meu teste rápido, isso custará quase 500 MB de memória além da execução de um sshd e PuTTY e terá um custo de CPU igualmente mais alto.
Trey
@trey 500MB você tem certeza? no meu sistema é exatamente 5MB
Pawel Dubiel
Ah, eu li mal as unidades, você está certo. Mas o sshd comparável + número PuTTY é cerca de 25% do outro número, seja ele qual for ;-)
Trey