Comment envoyer C- / (c'est-à-dire contrôle-barre oblique) au terminal?

13

J'essaie d'exécuter Emacs dans un terminal. J'ai activé l '"option d'utilisation en tant que méta" dans les préférences du terminal et c'est donc environ 95% qui fonctionne correctement.

La séquence de touches ctrl- / (ou en notation Emacs C- /) est "annuler". Cette séquence de touches fait simplement sonner le terminal. Comment puis-je réparer ça?

Kevin Peterson
la source
FWIW, cela fonctionne dans iTerm2 - iterm2.com - mais je pense que je vais simplement me recycler pour utiliser ^ _ partout, pour être plus portable.
Steven R. Loomis
@ StevenR.Loom est portable? ni control- / ni control-_ ne fonctionne sous Android ...
Michael
@Michael J'ai dit portable car il est représentable en ASCII (voir réponse acceptée) et peut donc transiter sans problème les connexions réseau. De plus, il semble être utilisable sur la plupart des claviers physiques que j'ai vus. Je n'ai pas essayé d'associer un clavier à l'appareil Android, faites-vous référence à un clavier souple ou dur?
Steven R. Loomis
@ Logiciel StevenR.Loomis ... la partie contrôle semble être ignorée, ce qui entraîne des tentatives pour annuler l'insertion d'une barre oblique ou d'un trait de soulignement.
Michael

Réponses:

19

Contrôle - /ne fait pas partie de l'ensemble des codes de contrôle standard . Il n'est pas directement représentable comme une frappe dans de nombreuses émulations de terminal. Une telle frappe n'est détectable correctement que dans certains «modes scancode» ou «mode GUI» spécifiques à la plate-forme (où l'API vous indique exactement quelles touches et quels modificateurs sont utilisés). Votre émulateur de terminal émet un bip, car il s'agit en fait d'une frappe non valide.

Les codes de contrôle standard ne couvrent que les versions «Control» de

  • @ A- Z [\]^_(ASCII 0 - 31), et
  • ? (ASCII 127)

Dans la plupart des programmes d'émulation de terminal fonctionnant avec la plupart des dispositions de touches américaines, vous devrez peut-être appuyer sur Shiftpour générer certains des «codes de contrôle»:

  • C- @ is ControlShift2(puisque @is Shift2)
  • C- ^ est ControlShift6(depuis ^est Shift6)
  • C-_ est ControlShift-(depuis _est Shift-)
  • Cependant, C-? peut ne pas être toujours ControlShift/(puisque ?est Shift/); C-? est généralement généré par Backspace(sur les claviers Apple, la clé étiquetée simplement «supprimer» sans le symbole supplémentaire ⌦) ou Delete(celle avec ⌦ sur les claviers Apple).

Dans Emacs basé sur tty, vous pouvez généralement utiliser C-_ pour undoau lieu de C- /.

Chris Johnsen
la source
1
Merci pour la réponse complète. Je vais essayer de jouer avec différents types de terminaux pour voir si je peux le faire fonctionner.
Kevin Peterson
1
"Différents types de terminaux"? Voulez-vous dire différents programmes d'émulation de terminal, ou faites-vous référence à la valeur $ TERM, qui dans Terminal est définie via Terminal> Préférences> Paramètres> [profil]> Avancé> Déclarer le terminal comme ? (Tout ce que cette préférence fait est de définir la valeur de $ TERM. Cela ne change pas le fonctionnement de l'émulation de terminal.) Control- / est une fonctionnalité de X11 et n'est pas prise en charge par Cocoa ou Terminal.
Chris Page
5

Ctrl- / envoie 0x1f qui est équivalent à Ctrl-_ depuis l'époque de VT102. Il existe de nombreux émulateurs VT100 mais ce sont en fait des émulateurs VT102. iTerm2 fonctionne car il suit ce comportement.

Seuls les émulateurs strictement conformes à la spécification VT100 ne peuvent pas envoyer Ctrl- /. Je crois que l'application Terminal est l'un d'entre eux.

Le VT100 masque les 2 bits les plus significatifs de l'ASCII 7 bits lorsque la touche de commande est enfoncée. / est 0x2f, o est 0x6f. Lorsque les 2 bits sont masqués, ils sont tous les deux 0x0f. Le VT100 peut envoyer Ctrl-o mais pas Ctrl- /.

Kenji Noguchi
la source
Cela devrait être la réponse acceptée.
ocodo