3 votes

Sous OS X Lion 10.7.4, dans Terminal.app, je ne peux pas taper " C-M-@ " ou " C-M-% ", pourquoi ?

Sur mon MacBook Pro exécutant OS X Lion 10.7.4, il semble y avoir un problème de clavier. J'ai remarqué ce problème pour la première fois lorsque j'ai essayé d'utiliser le raccourci clavier par défaut pour exécuter les commandes suivantes mark-sexp y query-replace-regexp dans emacs, qui sont liés respectivement à C-M-@ y C-M-% par défaut. Comme j'utilise beaucoup emacs, ces deux puissantes fonctionnalités me manquent vraiment beaucoup.

Comme je n'ai pas d'expérience dans l'utilisation des types de terminaux, j'ai fait un débogage simple dans emacs :

  • C-M-f y C-M-b fonctionnent comme prévu. Le contrôle et l'option fonctionnent donc bien ensemble.
  • M-% , M-< y M-> fonctionnent comme prévu. Ainsi, l'option et le changement fonctionnent bien ensemble.
  • C-S-backspace ne fonctionne pas. (Mais je n'ai jamais essayé cette commande auparavant ; la première fois que je l'ai exécutée, c'est aujourd'hui, lorsque je l'ai trouvée dans le manuel d'emacs). Mais C-@ fonctionne comme prévu. Donc le contrôle et le changement de vitesse fonctionnent probablement bien ensemble.
  • Si je ne me trompe pas, la commande digit-argument est lié à C-9 , C-8 etc. Ces clés ne fonctionnent pas aussi bien. Je me suis assuré que dans System Preferences.app j'ai désactivé ces touches pour changer d'espace.

Dans les préférences de Terminal.app, j'ai sélectionné "utiliser l'option comme méta-touche" car cela facilite la saisie des raccourcis clavier emacs. J'ai également essayé de désactiver cette option et d'utiliser la touche ESC mais toujours sans succès. Avez-vous une idée ?

P.S. J'ai lancé X11.app et dans la fenêtre xterm j'ai lancé emacs. En utilisant ESC comme méta, C-M-% y C-M-@ fonctionnent parfaitement. Dans la version Cocoa d'Emacs, les deux fonctionnent parfaitement aussi. Je suppose donc qu'il s'agit d'un bug de Terminal.app ou qu'il y a peut-être un paramètre ou un commutateur de configuration que je peux modifier pour que cela fonctionne dans Terminal.app ?

Et voici la sortie de stty -a à partir du shell emacs, en espérant que cela soit utile...

bash-3.2$ stty -a
speed 9600 baud; 0 rows; 0 columns;
lflags: icanon isig iexten -echo echoe -echok echoke -echonl echoctl
    -echoprt -altwerase -noflsh -tostop -flusho -pendin -nokerninfo
    -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel -iutf8
    -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
    -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = <undef>; intr = ^C; kill = <undef>;
    lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
    status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
bash-3.2$ 

La même commande directement depuis le shell :

$ stty -a
speed 9600 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
    -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
    -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
    -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
    -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
    min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
    stop = ^S; susp = ^Z; time = 0; werase = ^W;
$

(Commentaire annexe : Il semble étrange que la syntaxe pour un bloc de code soit quatre espaces précédents. Est-ce que tous les utilisateurs de StackExchange sont censés savoir comment utiliser le langage paste(1) , sed(1) ou des modifications de rectangle)

6voto

Old Pro Points 5634

En général, les applications Mac qui attendent une saisie de texte à partir du clavier ne traitent pas les combinaisons C-S ou les combinaisons à chiffres. Les programmes qui fonctionnent avec les combinaisons contrôle-majuscule (comme tout ce qui tourne sous X11) le font en traitant les événements de touche comme des événements, et non comme des entrées de caractères. C'est ainsi qu'ils peuvent faire la différence entre Tab et Ctrl-i, qui génèrent tous deux le même caractère ASCII. (Vous pouvez lire en détail comment Lion (en réalité Cocoa) gère les événements clés si vous voulez vraiment savoir.)

Historiquement (à l'époque du télétype), il n'y avait que des lettres majuscules sur le clavier et il n'y avait pas de caractères d'accentuation (^) ou de soulignement (_). sur le clavier (au lieu de cela, il y avait une flèche vers le haut et une flèche vers l'arrière). La touche shift fonctionnait en basculant le bit de 16 et la touche control fonctionnait en mettant à zéro le bit de 64 des codes ASCII de 7 bits que le clavier produisait.

Cela signifie que la touche de contrôle n'avait aucun effet sur les 32 caractères du clavier dont le bit 64 était déjà à zéro (la plupart des caractères non alphabétiques, y compris les chiffres), et comme le télétype était volontairement limité aux lettres majuscules, la touche shift n'avait aucun effet sur la plupart des caractères alphabétiques (et lorsqu'elle avait un effet, elle produisait un caractère spécial comme @).

Une bizarrerie supplémentaire a été ajoutée lors de la migration vers la prise en charge du texte en minuscules, car les combinaisons de touches de contrôle étaient toutes tapées sans utiliser la touche majuscule, mais la lettre tapée sans utiliser la touche majuscule avait changé, et la décision a donc été de faire correspondre control-moins-casse à ce qui était control-plus-casse. Mais alors, que faites-vous avec control-shift ?

Pendant un certain temps, le problème a été résolu en faisant en sorte que la touche Contrôle mette également à zéro le bit 32, qui est ce qui différencie les lettres minuscules des lettres majuscules. Mais finalement, l'ASCII a été remplacé par l'Unicode et ce genre d'assignation de touches en double était un trop grand gaspillage d'espace clavier pour être autorisé à continuer, alors ils ont obtenu des mappages différents, et sur le clavier standard Mac US, la plupart des combinaisons C-S ne sont pas assignées.

Vous êtes donc confronté à l'héritage de la prise en charge de la saisie au clavier, qui remonte à l'époque du télétype. Les caractères que Terminal (et les autres applications OS X) ne prennent pas en charge sont des caractères que vous ne pouviez pas taper sur le clavier du télétype. Pour preuve, notez que C-S-2 (C-@), C-S-6 (C-^) et C-S-- (C-_) fonctionnent toutes, car ces touches ont été réaffectées depuis l'ASR-33, où S-2 était " (et @ était S-P), S-6 était &, et S-- était =, mais en général, les combinaisons contrôle-majuscule ne produisent aucun caractère.

0voto

recognizer Points 1011

Je partage juste,

J'ai essayé de personnaliser ces clés et en transposant option à command comme meta mais sans succès.

Ce que je réalise, c'est que Terminal.app ne reconnaît pas 4 boutons simultanément. Ou du moins je pense qu'elle ne le fait pas.

Cependant, ce peut vous aider à définir votre combinaison de touches dans les différents logiciels.

J'ai aussi découvert autre discussions à ce sujet également.

(btw digit-argument fonctionne avec M-{1..9}, pas avec C-{1..9} comme mentionné. bizarre)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X