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-command
isso.)
- 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.
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 whoami
no 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 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.
- Inicialização do servidor SSH com o comando
sudo service ssh --full-restart
.
- Usando PuTTY (faça o download aqui ), faça o login
localhost
no campo Hostname, tudo o resto é deixado como padrão. Você será solicitado a inserir seu nome de usuário e senha do Linux.
- 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 localhost
dessa 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.
Quando executado
showkey -a
no 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.
fonte
set-mark-command
é provavelmente o comando mais usado no Emacs (além deself-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.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.
fonte
Agora, esse problema foi corrigido no Windows 10, compilação 14965 . Verifica:
E instale atualizações, se você não tiver!
fonte
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
4 abra
cmd.exe
e executeagora estamos no console bash e executamos
5 Neste ponto, já devemos ver um novo terminal em Xming. E podemos executar o emacs no modo terminal.
E todas as ligações agora funcionam muito bem
a discussão relacionada está aqui https://github.com/Microsoft/BashOnWindows/issues/531
fonte
-nw
faz 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.