Windows 10 shell bash linux bash + espaço não marca o Emacs

12

No Windows 10, instalei o Subsystem para Linux Bash. Mas eu tenho um problema com o atalho no Emacs Ctrl + o espaço não define o ponto de marcação.

O que eu tentei e não ajudou:

  • Eu tentei desmarcar a opção "Ativar atalhos da tecla Ctrl" no menu de propriedades do console do Windows

  • Eu tentei usar o terminal ConEmu diferente sem sucesso.

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

    
por Pawel Dubiel 12.06.2016 / 09:04

6 respostas

3

Não há soluções para isso, em termos de fazer o Ctrl-Space passar pelo terminal Bash, no momento em que este texto foi escrito (1 de setembro de 2016) - mas há uma solução alternativa que pode ser suficiente para muitos usuários: use o PuTTY para conectar via SSH, o 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, já que por padrão o Emacs está configurado para manipular set-mark-command dessa maneira.)

  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 forma:

    • Se houver uma configuração de linha descomentada PermitRootLogin , comente. Adicione uma linha PermitRootLogin no .
    • Adicione uma linha AllowUsers USERNAME , substituindo USERNAME pelo seu nome de usuário do Linux (se você não sabe o que é isso, execute o comando whoami em seu prompt do Bash).
    • Idealmente, você deve configurar a autenticação sem senha usando chaves SSH, mas como fazer isso está fora do escopo desta questão (há muitos guias disponíveis; pesquise na web por "passwordless ssh-keygen"). Enquanto isso, adicione ou descomente a linha PasswordAuthentication yes .
    • Defina UsePrivilegeSeparation no ; provavelmente você encontrará uma linha no arquivo dizendo UsePrivilegeSeparation yes ; basta alterar o yes para no e salvar o arquivo / etc / ssh / sshd_config .

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

  3. Inicialize o servidor SSH com o comando sudo service ssh --full-restart .
  4. Usando o PuTTY (faça o download aqui ), faça o login com localhost no Nome do host, tudo o mais deixado como padrão. Você será solicitado a digitar seu nome de usuário do Linux e sua senha.
  5. Executar emacs . Ctrl-space irá definir a marca como desejado.

(Note que os passos acima não , por si só, tornam o seu sistema capaz de aceitar conexões SSH de outros hosts. Para fazer isso, você também terá que altere as regras de firewall do Windows para permitir a porta TCP de entrada 22.)

Em outra resposta você disse, "mas a putty não é um terminal local." Não tenho certeza se você não estava ciente de que poderia usar localhost dessa maneira, ou se estava descartando o PuTTY devido à sobrecarga maior em relação a um terminal local. Se este último, eu não me preocupo, uma sessão SSH interativa é uma carga extremamente leve. (É certamente muito menos carga do que rodar um sistema X Window, então você pode rodar um GUI Emacs ou um xterm!)

A única desvantagem real em rodar desta forma em relação a um terminal direto é que os eventos paste são enviados letra a letra, como se você digitasse o conteúdo da área de transferência muito rápido, o que pode causar pares elétricos, recuos, expansão de snippets etc para disparar. (Colar deve não fazer com que os comandos de acordes sejam disparados, já que há lógica para detectar uma pasta em andamento e desabilitar acordes de tecla até que a colagem seja concluída.)

E há pelo menos uma grande vantagem sobre o terminal Bash padrão: os eventos de mouse são suportados pelo PuTTY em uma forma que o Emacs pode responder, então, ironicamente, você pode mover o ponto com o mouse no PuTTY mesmo se você não pode com o terminal local.

    
por 02.09.2016 / 00:27
5

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

  1. Abra "Configurações" (clique no ícone na parte superior).
  2. Clique em "Chaves e macros".
  3. No lado direito, role para baixo até ver "Macro 01" .. "Macro 32" e escolha qualquer um que esteja disponível (não importa). Vamos Macro 01 para este exemplo.
  4. Selecione "Espaço" no primeiro 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-command string para emacs. Agora clique em "Salvar configurações".

Deverá ter esta aparência no final:

    
por 01.10.2016 / 04:44
2

Ao executar showkey -a no console do windows / ubuntu-bash, mostra que o ctrl + space está apenas enviando um espaço simples.

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

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

Acho que os terminais do Windows não têm mapeamentos para algumas sequências. O mesmo problema é com outras combinações como ctrl + 1 ctrl + 2 .. etc. Aqui é necessário um terminal que possa manipular os mapeamentos de teclado para ele, como massa, por exemplo.

Eu acredito que este problema deve ser corrigido em versões futuras do terminal do Windows Bash.

    
por 15.06.2016 / 22:20
2

Este projeto permite que você use o MinTTY como um terminal alternativo: link . É derivado do PuTTY, mas não requer SSH. E como o PuTTY, ele manipula o Ctrl-space bem.

    
por 27.09.2016 / 19:17
1

Este problema está agora corrigido em Windows 10 build 14965 . Verifique:

[Environment]::OSVersion

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

    
por 12.04.2017 / 11:25
0

Há um hack como podemos instalar o X Server for Windows

1 primeiro instale xming para janelas

2 start xming

3 depois do windows bash install

sudo apt-get install rxvt-unicode-256color

4 abra cmd.exe e execute

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

agora estamos no console bash e rodamos

(DISPLAY=:0 urxvtc &)

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

emacs -nw

E todas as ligações agora funcionam bem

a discussão relacionada está aqui link

    
por 02.09.2016 / 00:07