8 votos

Envío de Control+Alt+ <char> al terminal en iTerm2

Cuando presiono Control + Command + i Me gustaría que iTerm2 enviara el acceso directo como C-M-i (es decir ctrl + alt + i ) a mi terminal.

Tengo

¿Cómo puedo hacerlo?

He probado con lo siguiente sin suerte: enter image description here

¿Alguna idea sobre cómo conseguir que esto funcione?

Actualización:

He leído lo siguiente aquí :

To have iTerm2 send "C-M-Space" to the terminal:
1) Open: Preferences > Profiles > some session you wish to edit > Keys.
2) Add a new key binding by pressing the "+" button.
3) Select the "Keyboard Shortcut" field, and press ctrl + option + space.
4) Select "Send Hex Code" in the "Action" list.
5) Type "0x1b 0x00" to the field below the list.
6) Click OK and close the preferences window.

Me pregunto si puedo seguir el mismo enfoque para mi problema. ¿Cómo puedo saber qué código hexadecimal tengo que enviar para Control+Command+i ?

Actualización 2

Después de leer este hilo Instalé Key Codes y encontré la siguiente información para Control + Command + i . ¿Qué se supone que debo introducir como hex code en iTerm2 para que esto funcione?

                                enter image description here

3voto

Amr Bekhit Puntos 131

Por fin he resuelto los distintos problemas para llegar a una solución. El problema parece ser que si el Control key es parte del atajo de teclado, entonces ninguna otra tecla modificadora que también sea presionada cambiará el código que es enviado por esa tecla. Si Control + i produce el ^i ( tab ), añadiendo más modificadores al atajo, se obtendrá el mismo ^i código, al menos cuando se utiliza iTerm2 . Esto puede estar ocurriendo a nivel de OSX o tal vez a nivel de Unix donde un termcap La tabla maneja la traducción de "teclas de terminal" a "códigos de salida". Se puede observar con iTerm2 utilizando "cat -v" o "vis -o" para ver la salida que se genera y también se ve cuando se utiliza Key Codes (sin iTerm2 corriendo) lo que hace que OSX sea el culpable más probable. Esta conclusión se ve apoyada por el hecho de que el usuario general no es capaz de redefinir ciertos atajos de teclado (sin dificultad) que están reservados para funciones básicas de OSX (como Command-Tab para el cambio de programa).

Es posible diferenciar programáticamente cualquier conjunto de modificadores pulsados con una tecla de carácter, pero esas banderas modificadoras son accesibles programáticamente dentro de OSX y por un conjunto de códigos totalmente único para cada conjunto diferente de teclas pulsadas. Para comprobarlo, utilice Key Codes y mientras sostiene el Control y pulsar una tecla de carácter y, a continuación, hacer lo mismo mientras se pulsan teclas modificadoras adicionales al mismo tiempo, tenga en cuenta que siempre se produce el mismo código de carácter. Sin embargo, Key Codes tiene acceso a las distintas claves que se están manteniendo y es capaz de mostrárnoslas en el campo "modificador" que revela. Y, si iTerm2 sólo podía ver los códigos estándar producidos por varias pulsaciones de teclas y no ver también las banderas modificadoras entonces iTerm2 por sí mismo no podría definir el rango de teclas de acceso directo que realmente es capaz de definir. Por otra parte, después de identificar cada conjunto de teclas modificadas de manera diferente de una manera única, iTerm2 parece pasar los códigos generados a OSX, donde se manejan de la misma manera que si se hubieran tecleado en un teclado, lo que resulta en una salida idéntica para los grupos de pulsaciones distinguibles. Así, por ejemplo, iTerm2 puede pasar el único Control + Alt + i código(s) determinado(s) para el uso de tmux pero OSX los coge y tira algunos detalles antes de entregarlos, haciendo que el código parezca sólo ^i cuando finalmente llegue para tmux para manejar. El enlace de acceso directo en tmux espera recibir el código que pensábamos enviar pero en el camino OSX ha eliminado la información sobre el Alt (Meta) lo mismo que haría si el atajo de teclado se hubiera escrito en un teclado.

La solución es encontrar una combinación de teclas que no se utilice para otra cosa y que se pueda transmitir sin que se cambie a otra combinación de teclas que sí se quiera utilizar. Ahí es donde Key Codes es útil ya que te permite probar muchas combinaciones de teclas y encontrar lo que las pulsaciones de teclas se traducen en "suficientemente únicas". Este es el proceso que utilicé para que me funcionara:

Objetivo: Correr tmux en iTerm2 Quiero ser capaz de presionar Command-Control-i y tienen tmux ejecute el " select-pane -U "Comando".

  • Elige una tecla esotérica que no vayas a utilizar. Considere una secuencia de teclas múltiples con el tmux carácter de escape seguido de otra pulsación de tecla inusual que hace mucho menos probable que se necesite. Estoy eligiendo enviar el carácter de escape estándar de tmux ( 0x02 = ^b ) seguido de la secuencia de códigos ansi para F1 ( 0x1b 0x4f 0x50 ). Unas buenas teclas a tener en cuenta son los caracteres menos utilizados que se generan en un Mac manteniendo pulsado Alt ( Option ) y Shift con otra tecla de carácter.

  • Dentro de iTerm2 abra Preferencias y defina el atajo de teclado Comando+Control+i en los atajos de teclado globales o como atajo de teclado para un perfil específico.

    • Pulse el botón + para añadir un nuevo acceso directo.
    • Haga clic en el campo Atajo de teclado y mantenga pulsada la tecla Command y Control mientras presiona las teclas " i ".
    • Utilice el ratón para seleccionar " Send Hex Code " en el Action desplegable. (Al intentar utilizar Tab para salir del campo Acceso directo cambiará el valor del acceso directo).
    • Escriba la cadena " 0x02 0x1b 0x4f 0x50 " (sin las comillas y asumiendo que está utilizando el tmux carácter de escape, ^b = 0x02 ).
    • Pulse el botón OK para confirmar el acceso directo. Cerrar Preferences .
  • En iTerm2 , invocar un tmux sesión y definir la vinculación de la clave para los códigos iTerm2 enviará.

    • Invoque tmux como lo haría normalmente.
    • En el tmux escriba el comando: " tmux bind-key F1 select-pane -U " (sin las comillas.)

Pruébelo dividiendo su tmux en varios paneles apropiados e intente usar Command+Control+i para moverse por los paneles verticalmente. Si tiene éxito, probablemente querrá registrar su vinculación de teclas con las vinculaciones de inicio invocadas por tmux en el arranque.

Este método me funcionó bien y debería funcionar bien a menos que hayas utilizado de alguna manera todas las combinaciones de teclado posibles para otros usos. Métodos como éste, combinados con la práctica y la experiencia en adivinar el funcionamiento interno de un sistema, deberían ayudar a resolver situaciones como ésta, que pueden parecer extrañas y abrumadoras. Algunas partes de la explicación anterior son conjeturas razonables en cuanto a lo que está ocurriendo o que puede asignar la culpa al proceso equivocado, pero espero que sea útil como una guía de cómo los problemas como este puede ser abordado con menos de una comprensión completa de todo el sistema.

2voto

King110 Puntos 11

El método más sencillo para enviar combinaciones de teclas a la terminal es activar la configuración de +Esc es la tecla.

iTerm2 > Preferencias > Perfil > Teclas > cambiar "actos de teclas de opción" de normal a +Esc

1voto

Amr Bekhit Puntos 131

(La teoría se encuentra en los siguientes 3 párrafos y la mejor respuesta se desarrolla en el resto de esta larga explicación. El alerón es nuestra suposición educada de 0x89 como respuesta a la pregunta dada. Si no es así, probablemente tendrás que leer gran parte del resto y hacer algunas búsquedas por tu cuenta para saber exactamente qué debes enviar y cómo. Espero que esto le ayude).

Para solucionar esto lo primero es darse cuenta de que C-M-i no es lo mismo que Control + Command + I excepto cuando (en un contexto específico como un SO o un programa) el Command está configurado para ser el Meta clave. En iTerm las opciones para el Meta son una u otra de las teclas de Opción (Alt). En iTerm no se puede hablar de la tecla Comando como la tecla Meta aunque es posible capturar la pulsación de la tecla Comando definiéndola como un iTerm atajo de teclado. Entonces, ¿qué significa en iTerm pulsar Control + Command + i ? No está definido; no envía ningún carácter visible o invisible. (Esto se ve mejor invocando cat -v , vis -o u otro programa que muestre visiblemente los códigos invisibles y que intente varias pulsaciones de teclas)\N-.

Pero la idea de presionar C-M-i está algo definida y a menudo incluye el Meta con otra combinación de teclas equivale a pulsar la tecla ESCape seguido de la misma combinación de teclas. Eso parece ser lo que intentabas hacer al establecer una tecla para que saliera la secuencia de escape: ESC + ^i . Si eso no funcionó, entonces necesitamos saber qué cadena de caracteres/bytes es la que realmente quiere el programa que está tratando de controlar. Siguiendo el ejemplo que has señalado he creado una secuencia hexadecimal de 0x1B 0x09 que produjo la misma salida que tu secuencia ESC. (Hex 1B o 0x1B = Binario 000110111 = Octal 033 o \033 = Decimal 27 valor de 27 no 2 seguido de 7 después de un tiempo estos números particulares empiezan a significar ESCape carácter cuando uno los ve).

Ahora, Key Codes fue un buen intento siendo el mismo tipo de idea que usar cat o vis para visualizar los caracteres que se envían. El problema es que Key Codes no está funcionando dentro de iTerm pero está funcionando dentro de OS X. Se podría decir que el Command La clave es OS X's Meta pero esa línea de pensamiento no es útil ya que OS X define la función de su Meta clave bastante diferente de cómo iTerm define su Meta llave. Si entra en Key Codes y prueba a pulsar Control + i con y sin el Command verás que la diferencia está en los modificadores resultantes; pero los modificadores son banderas internas dentro de OS X que OS X crea examinando qué teclas se pulsan. El código de salida real es el más cercano al carácter Unicode mostrado ( 0x09 ) y verás que tanto con como sin el Command recibes el mismo carácter. Pero eso es ilusorio de todos modos ya que lo que realmente sucede es que OS X obtiene el código de la llave y los valores de los modificadores e interpreta esos códigos como quiere. Control + i es lo más parecido a "enviar" un ^i pero añade el Command y, si el Finder es la recepción de los resultados, se obtiene uno de los varios Get Info comandos; otro programa puede interpretarlo como quiera. Se trata de tortugas sobre tortugas sobre tortugas hasta el final, es decir, lo que se empieza puede acabar haciendo muchas cosas diferentes dependiendo de lo que se reinterprete, etc.

Ahora tengo que intentar darte una respuesta que te sirva, pero lo anterior era necesario para mostrar por qué no puedo asegurarlo. Pero puedo hacer una conjetura. En primer lugar, el contexto es iTerm y supongo que está ejecutando un programa en iTerm que hace algo en respuesta a lo que se dice C-M-i. Si, en iTerm Configuro una tecla Opción/Alt para que sea la tecla Meta y luego presiono esa tecla con el ^i teclas esperaremos que ocurra lo que queremos que ocurra. Así que averigüemos qué se envía al hacer eso. Si usas Key Caps no dirá nada diferente ya que estás de nuevo fuera de iTerm. Pero cuando uso el cat -v que hace todo lo posible para que lo invisible sea visible en la pantalla y pulse C-M-i, entonces junto con un extraño carácter en forma de diamante obtengo la cadena M-^i que parece ser una forma de decir M-C-i . Eso se ve bien.

Ahora salgo del cat programa y vaya a la vis -o que intentará darme algunos valores octales para algunos de los caracteres invisibles. Ahora presionando C-M-i me da un valor octal (después de pulsar return) de \211 así como ese divertido diamante. (Octal 211 o \211 = Binario 10001001 = Hex 89 o 0x89; lo cual es alentador ya que cuando antes encendí el Meta clave en iTerm me dio un aviso a que Meta se solía utilizar en los sistemas más antiguos y los nuevos sistemas suelen utilizar el +ESC secuencia de códigos ¡de vuelta al punto de partida! También he visto que lo que el Meta era dar salida al carácter imprimible de 7 bits ASCII con su bit de orden superior (el bit más a la izquierda, normalmente a cero) a 1. Si se quita el 1 más a la izquierda de la codificación binaria de lo que recibimos, nos queda un 1001 binario = ¡Decimal 9! 9 es el carácter que presiona ^i "manda fuera". Eso se ve bien.

Para cerrar el círculo y comprobarlo más a fondo puedo volver a iTerm, asegurarme de que he apagado mi Meta (por si acaso) y definir un nuevo atajo de teclado a alguna tecla que envíe un 0x89 (Hex 89 ). A continuación, abra una nueva ventana para que los cambios estén activos y pulse la tecla que asignó al 0x89 con vis -o corriendo para interpretar a sus personajes. Sale la misma graciosa forma de diamante y la cadena octal \211 . Así que parece que hemos configurado una tecla de acceso directo para producir C-M-i a lo mejor de lo que sabemos.

Que esa tecla haga lo que quieres depende de que el programa que quiere ese código de teclado maneje lo que le hemos dado. Sin saber más esto es una conjetura. Si falla entonces hay que profundizar en el programa final que se está controlando [me atrevería a decir que Emacs pero, Hola Utilizo vi así que qué sé yo ;-] Espero que algunas de las técnicas e ideas presentadas aquí le ayuden a determinar cómo enviar los códigos correctos una vez que los haya encontrado. Espero que esto funcione para usted. Tenga en cuenta que sin todo el alboroto se puede obtener una idea bastante buena de que va a funcionar o no va a funcionar mediante la activación de un Meta clave en iTerm y presionando C-M-i para ver si funciona; si es así, proceda a definir su tecla de acceso directo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X