Le shell bash de Windows 10 ctrl + espace ne définit pas la marque dans Emacs

12

Dans Windows 10, j'ai installé Subsystem for Linux Bash. Mais j'ai un problème avec le raccourci dans Emacs Ctrl+ spacequi ne définit pas le point de repère.

Ce que j'ai essayé et n'a pas aidé:

  • J'ai essayé de décocher "activer les raccourcis clavier Ctrl" dans le menu des propriétés de la console Windows

  • J'ai essayé d'utiliser différents terminaux ConEmu sans succès.

Je me demande si cela est en quelque sorte lié à ubuntu qui a des problèmes similaires avec ctrl + espace, et Windows Linux bash utilise des référentiels ubuntu.

Pawel Dubiel
la source

Réponses:

3

Il n'y a pas de solution à cela, en termes de faire passer Ctrl-Espace via le terminal Bash, au moment de la rédaction de ce document (1 septembre 2016) - mais il existe une solution de contournement qui peut être suffisante pour de nombreux utilisateurs: utilisez PuTTY pour vous connecter via SSH, qui force la gestion de Ctrl-Espace. (En mode tty, il est impossible de distinguer Ctrl-Espace de Ctrl-@, car ce sont les mêmes codes de caractères, mais cela ne devrait pas être un problème, car par défaut Emacs est configuré pour gérer de set-mark-commandcette façon.)

  1. Installez le serveur OpenSSH avec sudo apt-get install openssh-server. S'il était déjà installé, supprimez-le ( sudo apt-get remove openssh-server), puis réinstallez-le pour réinitialiser les fichiers de configuration.
  2. Modifiez le fichier / etc / ssh / sshd_config (avec sudo), comme suit:

    • S'il existe un paramètre de ligne non PermitRootLogincommenté, mettez-le en commentaire. Ajoutez une ligne PermitRootLogin no.
    • Ajoutez une ligne AllowUsers USERNAME, en remplaçant USERNAME par votre nom d'utilisateur Linux (si vous ne savez pas ce que c'est, exécutez la commande whoamià votre invite Bash).
    • Idéalement, vous devez configurer l'authentification sans mot de passe à l'aide des clés SSH, mais la façon de procéder est hors de portée de cette question (il existe de nombreux guides disponibles; recherchez sur le Web "ssh-keygen sans mot de passe"). En attendant, ajoutez ou décommentez la ligne PasswordAuthentication yes.
    • Set UsePrivilegeSeparation no; vous trouverez probablement une ligne dans le fichier disant UsePrivilegeSeparation yes; changez simplement le yesen noet enregistrez le fichier / etc / ssh / sshd_config .

    Si quelque chose ne va pas ici, vous pouvez restaurer le fichier en répétant l'étape # 1.

  3. Démarrez le serveur SSH avec la commande sudo service ssh --full-restart.
  4. En utilisant PuTTY (télécharger ici ), connectez-vous avec localhostdans le champ Hostname, tout le reste par défaut. Il vous sera demandé de saisir votre nom d'utilisateur Linux et votre mot de passe.
  5. Courez emacs. Ctrl-espace définira la marque comme vous le souhaitez.

(Notez que les étapes ci-dessus ne permettront pas en soi à votre système d'accepter les connexions SSH d' autres hôtes. Pour ce faire, vous devrez également modifier vos règles de pare-feu Windows pour autoriser le port TCP 22 entrant.)

Dans une autre réponse, vous avez dit: "mais le mastic n'est pas un terminal local". Je ne sais pas si vous ne saviez pas que vous pouviez utiliser localhostde cette manière, ou si vous rejetiez PuTTY en raison de la surcharge supplémentaire par rapport à un terminal local. Si ce dernier, je ne m'inquiète pas, une session SSH interactive est une charge extrêmement légère. (C'est certainement beaucoup moins de charge que d'exécuter un système X Window, vous pouvez donc exécuter une interface graphique Emacs ou un xterm!)

Le seul inconvénient réel à fonctionner de cette façon par rapport à un terminal droit est que les événements de collage sont envoyés lettre par lettre, comme si vous tapiez très rapidement le contenu du presse-papiers, ce qui peut provoquer des paires électriques, des indentations, une expansion des extraits, etc. Feu. (Le collage ne doit pas provoquer le déclenchement des commandes d'accords de touche, car il existe une logique pour détecter un collage en cours et désactiver les accords de clé jusqu'à ce que le collage soit terminé.)

Et il y a au moins un très gros avantage par rapport au terminal Bash standard: les événements de souris sont pris en charge par PuTTY sous une forme à laquelle Emacs peut répondre, donc, ironiquement, vous pouvez déplacer le point avec la souris dans PuTTY même si vous le pouvez '' t avec le terminal local.

Trey
la source
5

J'utilise ConEmu. Il n'y a pas de méthode élégante, mais cela peut être résolu en utilisant la macro.

  1. Ouvrez "Paramètres" (cliquez sur l' icône en haut).
  2. Cliquez sur "Clés et macros".
  3. Sur le côté droit, faites défiler vers le bas jusqu'à ce que vous voyiez les options "Macro 01" .. "Macro 32", et choisissez celle qui est disponible (peu importe).
    Prenons Macro 01 pour cet exemple.
  4. Sélectionnez "Espace" dans le 1er menu déroulant.
  5. Sélectionnez "Ctrl" dans le 2ème menu déroulant. Laissez les 2 menus déroulants restants intacts.
  6. Collez ci-dessous dans le champ 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. Ci-dessus envoie essentiellement une M-x select-mark-commandchaîne à emacs. Cliquez maintenant sur "Enregistrer les paramètres".


Cela devrait ressembler à ceci à la fin:

entrez la description de l'image ici

Akira Ishikawa
la source
fonctionne comme du charme. Fantastique!
chriskelly
2

Lors de l'exécution showkey -adans la console windows / ubuntu-bash, cela montre que ctrl + espace envoie simplement un espace simple.

Et c'est le même problème avec la session ssh pour tout autre machine Linux, ctrl + espace est envoyé en espace simple.

Le même comportement s'applique à tout autre terminal basé sur Windows (conemu, consolez, MobaXTerm) - sauf que putty peut gérer cela correctement, mais putty n'est pas un terminal local.

Je pense que les terminaux Windows n'ont pas de mappages pour certaines séquences. Le même problème est avec d'autres combinaisons comme ctrl + 1 ctrl + 2 .. etc. Ici est requis un terminal qui peut gérer les mappages de clavier pour lui-même comme du mastic par exemple.

Je crois que ce problème devrait être résolu dans les futures versions du terminal Windows Bash.

Pawel Dubiel
la source
Pire encore, il ne semble pas non plus passer ctrl- @, qui est l'autre liaison pour set-mark. Si quelqu'un est dans une vraie liaison, il peut utiliser Mx set-mark-command. La bonne chose à faire pour l'instant, probablement, est de définir une liaison de clé à autre chose.
Jim Hunziker du
@JimHunziker Étant donné que set-mark-commandc'est probablement la commande la plus fréquemment utilisée dans Emacs (à part self-insert-command), recycler ses doigts pour cela est une question vraiment très difficile, surtout si vous utilisez Emacs depuis plus de 25 ans comme moi.
Trey
@Trey a ajouté une autre réponse, si cela ne vous dérange pas d'exécuter xming sur Windows
Pawel Dubiel
@PawelDubiel Voir ma réponse vient d'être ajoutée. (J'ai donné des instructions plus détaillées que nécessaire pour que vous aidiez les lecteurs ultérieurs.) Vous avez rejeté PuTTY pour une raison quelconque, mais vous n'avez pas précisé la raison. C'est certainement une option qui met beaucoup moins de charge sur le système que xming + un terminal X.
Trey
2

Ce projet vous permet d'utiliser MinTTY comme terminal alternatif: https://github.com/mintty/wsltty . Il est dérivé de PuTTY, mais ne nécessite pas SSH. Et comme PuTTY, il gère très bien l'espace Ctrl.

Joel Dice
la source
1

Ce problème est désormais résolu dans Windows 10 build 14965 . Vérifier:

[Environment]::OSVersion

Et installez les mises à jour si vous ne l'avez pas fait!

oblio
la source
Veuillez ajouter plus de détails à votre réponse - le lien peut cesser de fonctionner à un moment où votre réponse devient inutile.
djsmiley2k TMW
0

Il y a un hack car nous pouvons installer X Server pour Windows

1 première installation de xming pour windows

2 démarrer xming

3 puis à partir de l'installation de Windows Bash

sudo apt-get install rxvt-unicode-256color

4 puis ouvrez cmd.exeet exécutez

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

maintenant, nous sommes dans la console bash et exécutons

(DISPLAY=:0 urxvtc &)

5 À ce stade, nous devrions déjà voir un nouveau terminal à Xming. Et nous pouvons exécuter emacs en mode terminal.

emacs -nw

Et toutes les fixations fonctionnent maintenant très bien

la discussion connexe est ici https://github.com/Microsoft/BashOnWindows/issues/531

Pawel Dubiel
la source
Pourquoi est-ce une solution de contournement supérieure à l'utilisation de PuTTY? Si vous deviez exécuter Emacs en mode GUI, je le comprendrais, mais votre utilisation de le -nwfait fonctionner dans un terminal, comme il le ferait avec PuTTY, sauf que vous devez maintenant exécuter un deuxième système de fenêtrage entier - à partir de mon test rapide, cela va vous coûter près de 500 Mo de mémoire au-delà de l'exécution d'un sshd et de PuTTY et aura un coût CPU également plus élevé.
Trey
@trey 500MB êtes-vous sûr? sur mon système est exactement 5 Mo
Pawel Dubiel
Ah, j'ai mal lu les unités, vous avez raison. Mais le nombre comparable sshd + PuTTY représente environ 25% de l'autre nombre, quel qu'il soit ;-)
Trey