Windows 10 linux bash shell ctrl + espacio no establece marca en Emacs

12

En Windows 10 instalé Subsystem for Linux Bash. Pero tengo un problema con el acceso directo en Emacs Ctrl+ spaceno establece el punto de marca.

Lo que probé y no ayudó:

  • Traté de desmarcar "habilitar atajos de teclado Ctrl" en el menú de propiedades para la consola de Windows

  • Traté de usar diferentes terminales ConEmu sin éxito.

Me pregunto si esto está relacionado de alguna manera con ubuntu que tiene problemas similares con ctrl + space, y Windows Linux bash está utilizando repositorios de ubuntu.

Pawel Dubiel
fuente

Respuestas:

3

No hay soluciones para esto, en términos de hacer que Ctrl-Space pase a través del terminal Bash, en el momento de escribir este artículo (1 de septiembre de 2016), pero hay una solución que puede ser suficiente para muchos usuarios: use PuTTY para conectarse a través de SSH, que obliga a manejar Ctrl-Space. (En el modo tty, es imposible distinguir Ctrl-Space de Ctrl- @, porque son el mismo código de caracteres, pero eso no debería ser un problema, ya que por defecto Emacs está configurado para manejar de set-mark-commandesa manera).

  1. Instale el servidor OpenSSH con sudo apt-get install openssh-server. Si ya estaba instalado, elimínelo ( sudo apt-get remove openssh-server) y luego vuelva a instalarlo para restablecer los archivos de configuración.
  2. Edite el archivo / etc / ssh / sshd_config (con sudo), de la siguiente manera:

    • Si hay una configuración de línea PermitRootLoginno comentada, coméntela. Agrega una línea PermitRootLogin no.
    • Agregue una línea AllowUsers USERNAME, reemplazando USERNAME con su nombre de usuario de Linux (si no sabe qué es eso, ejecute el comando whoamien el indicador Bash).
    • Idealmente, debe configurar la autenticación sin contraseña utilizando claves SSH, pero cómo hacerlo está fuera del alcance de esta pregunta (hay muchas guías disponibles; busque en la web "ssh-keygen sin contraseña"). Mientras tanto, agregue o descomente la línea PasswordAuthentication yes.
    • Conjunto UsePrivilegeSeparation no; probablemente encontrará una línea en el archivo que dice UsePrivilegeSeparation yes; simplemente cambie yesa noy guarde el archivo / etc / ssh / sshd_config .

    Si algo sale mal aquí, puede restaurar el archivo repitiendo el paso 1.

  3. Inicie el servidor SSH con el comando sudo service ssh --full-restart.
  4. Usando PuTTY (descargue aquí ), inicie sesión localhosten el campo Nombre de host, todo lo demás queda como predeterminado. Se le pedirá que ingrese su nombre de usuario de Linux y su contraseña.
  5. Ejecutar emacs. Ctrl-space establecerá la marca como se desee.

(Tenga en cuenta que los pasos anteriores no , por sí mismos, hacer que su sistema capaz de aceptar conexiones SSH desde otros ordenadores. Para hacer eso, usted también tendrá que cambiar las reglas de su firewall de Windows para permitir el puerto TCP entrante 22.)

En otra respuesta dijiste, "pero la masilla no es una terminal local". No estoy seguro si no sabía que podría usarlo localhostde esta manera, o si estaba descartando PuTTY debido a la mayor sobrecarga en comparación con una terminal local. Si es lo último, no me preocuparía, una sesión SSH interactiva es una carga extremadamente ligera. (¡Ciertamente es mucho menos carga que ejecutar un sistema X Window para que pueda ejecutar una GUI Emacs o una xterm!)

La única desventaja real de ejecutar de esta manera frente a un terminal directo es que los eventos de pegado se envían letra por letra, como si escribiera el contenido del portapapeles muy rápido, lo que puede causar pares eléctricos, sangría, expansión de fragmentos, etc. fuego. (Pegar no debería hacer que se activen los comandos de acordes de teclas, ya que existe una lógica para detectar un pegado en curso y deshabilitar los acordes de teclas hasta que finalice el pegado).

Y también hay al menos una gran ventaja sobre el terminal Bash estándar: los eventos del mouse son compatibles con PuTTY en una forma a la que Emacs puede responder, por lo que, irónicamente, puede mover el punto con el mouse en PuTTY incluso si puede ' t con la terminal local.

Trey
fuente
5

Yo uso ConEmu. No hay una manera elegante, pero se puede resolver usando la macro.

  1. Abra "Configuración" (haga clic en el icono en la parte superior).
  2. Haga clic en "Teclas y macros".
  3. En el lado derecho, desplácese hacia abajo hasta que vea "Macro 01" .. Opciones "Macro 32", y elija cualquiera que esté disponible (no importa).
    Tomemos Macro 01 para este ejemplo.
  4. Seleccione "Espacio" en el primer menú desplegable.
  5. Seleccione "Ctrl" en el segundo menú desplegable. Deje los 2 menús desplegables restantes intactos.
  6. Pegue a continuación en el campo Macro 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. Arriba básicamente envía una M-x select-mark-commandcadena a emacs. Ahora haga clic en "Guardar configuración".


Debería verse así al final:

ingrese la descripción de la imagen aquí

Akira Ishikawa
fuente
Funciona como encanto. ¡Fantástico!
chriskelly
2

Cuando se ejecuta showkey -aen la consola windows / ubuntu-bash, muestra que ctrl + espacio solo envía un espacio plano.

Y es el mismo problema con la sesión ssh a cualquier otra máquina Linux ctrl + space se envía como espacio plano.

El mismo comportamiento es con cualquier otra terminal basada en Windows (conemu, consolez, MobaXTerm), excepto que la masilla puede manejar esto bien, pero la masilla no es una terminal local.

Creo que los terminales de Windows no tienen asignaciones para algunas secuencias. El mismo problema es con otras combinaciones como ctrl + 1 ctrl + 2 .. etc. Aquí se requiere un terminal que pueda manejar las asignaciones de teclado para sí mismo como masilla, por ejemplo.

Creo que este problema debería solucionarse en futuras versiones de Windows Bash Terminal.

Pawel Dubiel
fuente
Peor aún, tampoco parece pasar ctrl- @, que es el otro enlace para set-mark. Si alguien está realmente vinculado, puede usar Mx set-mark-command. Lo correcto por ahora, probablemente, es establecer un enlace clave para otra cosa.
Jim Hunziker
@JimHunziker Dado que set-mark-commandes probablemente el comando más utilizado en Emacs (aparte de self-insert-command), volver a entrenar los dedos es una pregunta muy, muy pronunciada, especialmente si ha estado usando Emacs durante más de 25 años como yo.
Trey
@Trey agregó otra respuesta, si no te importa ejecutar xming en Windows
Pawel Dubiel
@PawelDubiel Vea mi respuesta que acabo de agregar. (Le di instrucciones más detalladas de las necesarias para que usted pueda ayudar a los lectores posteriores). Por alguna razón, rechazó PuTTY, pero no dijo cuál es esa razón. Sin duda, es una opción que pone mucha menos carga en el sistema que xming + un terminal X.
Trey
2

Este proyecto le permite usar MinTTY como un terminal alternativo: https://github.com/mintty/wsltty . Se deriva de PuTTY, pero no requiere SSH. Y al igual que PuTTY, maneja Ctrl-space muy bien.

Joel Dice
fuente
1

Este problema ahora está solucionado en Windows 10 build 14965 . Cheque:

[Environment]::OSVersion

¡E instale actualizaciones si no lo ha hecho!

oblio
fuente
Agregue más detalles a su respuesta: el enlace puede dejar de funcionar en algún momento en el que su respuesta se vuelva inútil.
djsmiley2k TMW
0

Hay un truco ya que podemos instalar X Server para Windows

1 primero instala xming para windows

2 comenzar xming

3 luego desde windows bash install

sudo apt-get install rxvt-unicode-256color

4 luego abrir cmd.exey ejecutar

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

ahora estamos en la consola bash y corremos

(DISPLAY=:0 urxvtc &)

5 En este punto, ya deberíamos ver un nuevo terminal en Xming. Y podemos ejecutar emacs en modo terminal.

emacs -nw

Y todos los enlaces ahora funcionan bien

la discusión relacionada está aquí https://github.com/Microsoft/BashOnWindows/issues/531

Pawel Dubiel
fuente
¿Por qué es esta una solución superior al uso de PuTTY? Si fuera a ejecutar Emacs en modo GUI, lo entendería, pero su uso de -nwhace que se ejecute en una terminal, al igual que lo haría con PuTTY, excepto que ahora tiene que ejecutar un segundo sistema completo de ventanas, desde mi prueba rápida, te costará casi 500 MB de memoria más allá de ejecutar un sshd y PuTTY y tendrá un costo de CPU similarmente más alto.
Trey
@trey 500MB ¿estás seguro? en mi sistema es exactamente 5mb
Pawel Dubiel
Ah, leí mal las unidades, tienes razón. Pero el número comparable sshd + PuTTY es aproximadamente el 25% del otro número, sea lo que sea ;-)
Trey