En OS X Lion 10.7.4 en Terminal.app no puedo escribir 'C-M- @' o 'C-M-%', ¿por qué?

3

En mi MacBook Pro con OS X Lion 10.7.4, parece que hay un problema con el teclado. Noté este problema por primera vez cuando intenté usar la combinación de teclas predeterminada para ejecutar mark-sexp y query-replace-regexp en emacs, que están vinculados respectivamente a C-M-@ y C-M-% de forma predeterminada. Como uso mucho emacs, realmente extraño mucho estas dos funciones poderosas.

Como no tengo experiencia en el manejo de tipos de terminales, etc., realicé algunas tareas de depuración simples en emacs:

  • C-M-f y C-M-b funcionan como se esperaba. Así que el control y la opción funcionan bien juntos.
  • M-% , M-< y M-> funcionan como se esperaba. Así que la opción y el turno funcionan bien juntos.
  • C-S-backspace no funciona. (Pero nunca he probado este comando antes; la primera vez que lo ejecuté fue hoy cuando lo encontré en el manual de emacs). Pero C-@ funciona como se esperaba. Por lo tanto, el control y el cambio probablemente funcionen bien juntos.
  • Si no me equivoco, el comando digit-argument está vinculado a C-9 , C-8 , etc. Estas teclas no funcionan tan bien. Me he asegurado de que en System Preferences.app he desactivado estas teclas para cambiar de espacio.

En las preferencias de Terminal.app, seleccioné "use option as meta key" ya que facilita la escritura de las combinaciones de teclas de Emacs. También intenté deshabilitar esta opción y usar ESC pero aún no he tenido éxito. ¿Alguna idea?

P.S. Lancé X11.app y en la ventana de xterm comencé emacs. Usando ESC como meta, C-M-% y C-M-@ funcionan perfectamente. En la versión Cocoa de Emacs, estos dos también funcionan perfectamente. Entonces, ¿supongo que es un error de Terminal.app o probablemente haya un cambio de configuración o configuración que pueda modificar para que funcione en Terminal.app?

Y aquí está la salida de stty -a de emacs shell, espero que sea útil ...

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$ 

El mismo comando directamente desde el 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;
$

(Comentario lateral: parece extraño que la sintaxis de un bloque de código sea cuatro espacios anteriores. ¿Se espera que todos los usuarios de StackExchange sepan cómo usar paste(1) , sed(1) o ediciones de rectángulo?)

    
pregunta kccqzy 13.05.2012 - 05:55

2 respuestas

6

En general, las aplicaciones de Mac que esperan entrada de texto desde el teclado no manejan combinaciones C-S o combinaciones de dígitos C. Los programas que funcionan con combos de cambio de control (como cualquier cosa que se ejecute en X11) lo hacen manejando eventos clave como eventos, no como entrada de caracteres. Así es como pueden diferenciar entre Tab y Ctrl-i, que generan el mismo carácter ASCII. (Puedes leer en detalle cómo Lion (realmente Cocoa) maneja eventos clave si realmente quieres saber.)

Históricamente (en los días del Teletipo), solo había letras en mayúsculas en el teclado, y no había caracteres de cometa (^) o de subrayado (_) en el teclado (en lugar de eso, hubo una flecha hacia arriba y una flecha hacia atrás). La tecla de cambio funcionó alternando el bit 16 y la tecla de control funcionó poniendo a cero el bit 64 del código ASCII de 7 bits que produjo el teclado.

Lo que esto significa es que la tecla de control no tuvo efecto para los 32 caracteres en el teclado que ya tenían su bit de 64 en cero (la mayoría de los caracteres no alfabéticos, incluidos los dígitos), y dado que el teletipo se limitó a propósito solo en letras mayúsculas, la tecla de mayúsculas no tuvo ningún efecto en la mayoría de los caracteres alfabéticos (y donde tuvo un efecto, produjo un carácter especial como @).

Se agregó rareza adicional en la migración a texto en minúsculas, ya que todas las combinaciones de teclas de control se escribieron sin usar la tecla Shift, pero ahora la letra escrita sin usar la tecla Shift ha cambiado, por lo que la decisión fue mapear el control - Caso inferior a lo que había sido control-mayúsculas. Pero entonces, ¿qué haces con el cambio de control?

Durante un tiempo, el problema se resolvió haciendo que la tecla de control también pusiera a cero el bit de los 32, que es lo que diferencia las letras minúsculas de las letras mayúsculas. Pero finalmente, ASCII fue reemplazado por Unicode y ese tipo de asignaciones de teclas duplicadas eran demasiado desperdicio de espacio en el teclado para permitir que continuaran, por lo que obtuvieron diferentes asignaciones, y en el teclado estándar de los EE. UU. De Mac, la mayoría de los combos C-S no están asignados.

Entonces, se ha encontrado con el soporte heredado para la entrada de teclado que se ejecuta en los días de Teletipo. La Terminal de caracteres (y otras aplicaciones de OS X) que no son compatibles son caracteres que no pudo escribir en el teclado de Teletype. Como prueba de esto, tenga en cuenta que CS-2 (C- @), CS-6 (C- ^) y CS-- (C-_) funcionan todos, porque esas claves se han vuelto a asignar desde el ASR-33 , donde S-2 era "(y @ era SP), S-6 era & amp ;, y S-- era =, pero en general los combos de cambio de control no producen caracteres de ningún tipo.

    
respondido por el Old Pro 13.05.2012 - 19:26
0

Solo compartiendo,

He intentado personalizar esas teclas y al transponer opción a comando como meta pero sin éxito.

Lo que me doy cuenta es que Terminal.app no reconoce el botón 4 simultáneamente. O al menos creo que no.

Sin embargo, esto puede ayudarlo a configurar su combinación de teclas en todo el software.

También descubrí otro discusiones relacionado con esto también.

(btw digit-argument funciona con M- {1..9}, no con C- {1..9} como se mencionó. extraño)

    
respondido por el Ikmal Ezzani 13.05.2012 - 17:00

Lea otras preguntas en las etiquetas