¿Cuál es la secuencia de teclas más larga conocida en Emacs?

14

Qt admite combinaciones de teclas de estilo Emacs , sin embargo, solo para hasta cuatro teclas. Para aclarar por qué debería aumentarse este límite, sería útil mostrar ejemplos de combinaciones de teclas de estilo Emacs con incluso más teclas que eso. ¿Hay ejemplos conocidos de esto o tal vez incluso una forma de encontrar mediante programación secuencias de teclas largas definidas en mapas de teclas de Emacs?

Edit: Me pareció que era de conocimiento común, pero una secuencia de teclas es un juego de llaves leer en por read-key-sequence. Intente F1 kcon su candidato y vea si describe su comando o uno no relacionado que lo precede.

wasamasa
fuente
Los únicos que puedo pensar en la parte superior de mi cabeza son las conversiones de secuencias de escape terminales, que no se aplican a Qt. Ir por encima de 3 claves reales es inusual.
Gilles 'SO- deja de ser malvado'
Gracias por proporcionar el contexto / motivo de la pregunta y el enlace. A primera vista, antes de leerlo, estaba adivinando incorrectamente que la pregunta podría estar fuera de tema y no sería útil para nadie.
Dibujó el
El problema con esta pregunta es que nadie puede responderla con seguridad. Todos pueden responderlo solo por su configuración de emacs. No se basa en la opinión, pero es un poco subjetiva.
Tobias
1
¿Esto incluye argumentos de prefijo? Si quiero ir mil líneas más abajo, puedo decir C-u 1 0 0 0 C-ncuál es seis teclas.
Stig Hemmer
1
@StigHemmer No. Haga F1 k C-u 1 0 0 0 C-ny vea que C-ues una secuencia de teclas por sí sola.
wasamasa

Respuestas:

23

Probé con el siguiente script,

(key-description
 (car
  (sort
   (let (keyseqs)
     (mapatoms
      (lambda (sym)
        (when (commandp sym)
          (let ((where (where-is-internal sym nil nil t)))
            (when where
              (setq keyseqs (append keyseqs where)))))))
     keyseqs)
   (lambda (a b) (< (length b) (length a))))))

Y lo que más tiempo obtengo con mi .emacs.des C-x c C-x r icuál es algún comando de timón, y con lo emacs -qque obtengo C-x a i lque ejecuta el comando inverse-add-mode-abbrev.

mkcms
fuente
12
Decir ah. Me da C-x M-c M-b u t t e r f l y:) Me había olvidado de que había hecho eso ...
Phil
where-is-internalaquí domina el tiempo de la CPU, pero aún puede reducir fácilmente algunos ciclos al anteponer destructivamente la lista más corta a la vía más larga (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil
1
@phils Reconozco la referencia, pero ¿qué configuró exactamente ese comando?
Dan está jugando con Firelight el
@DanNeely, ¿supongo que nunca has visto M-x butterfly? Simplemente lo vinculé a ese comando para aumentar la autenticidad :)
phils
6

No puedo responder sobre cuál podría ser el más largo en algún lugar, pero aquí hay un poco de información que podría ayudar.

  1. Tengo algunas bibliotecas que proporcionan un conjunto de comandos relacionados vinculados a teclas en un mapa de teclas que enlazo a una tecla de prefijo.

    Debido a que no quiero cooptar las teclas de usuario, etc., normalmente asocio dicha clave de prefijo debajo de, digamos C-xo, para other-windowcomandos, debajo de C-x 4(mapa de teclas ctl-x-4-map).

  2. Las mismas consideraciones se aplican a grupos de comandos en dicho mapa de teclas: a veces obtienen su propio mapa de teclas. Y así sucesivamente, recursivamente.

  3. Espero que al menos algunos usuarios quieran volver a vincular dichos mapas de teclas (en cualquier nivel) a sus propias teclas de prefijo, más cortas, o que quieran vincular comandos específicos a secuencias de teclas más cortas. Pero no quiero hacer eso en la biblioteca en sí, obviamente.

Aquí hay un ejemplo de una de estas teclas bastante largas: C-x 4 j t . % *(siete pulsaciones de teclas), que está obligado a ordenar icicle-bookmark-file-this-dir-all-tags-regexp-other-windowen Bookmark + .

Anatomía:

  • En la C-x 4tecla de prefijo ( ctl-x-4-map).

  • En la jtecla de prefijo, que es para todos los comandos para saltar a un marcador .

  • En la ttecla de prefijo, que es para todos los comandos para saltar a marcadores que están etiquetados de alguna manera.

  • En la .tecla de prefijo, que es para todos los comandos para saltar a marcadores que son para archivos en el directorio actual que están etiquetados de alguna manera.

  • En la %tecla de prefijo, que es para todos los comandos para saltar a marcadores que son para cosas en el directorio actual que tienen etiquetas que coinciden con una expresión regular que se le solicita.

  • En la *tecla, que es para todos los comandos para saltar a marcadores que son para cosas en el directorio actual que tienen etiquetas , TODOS los cuales coinciden con una expresión regular que se le solicita. (Por el contrario, C-x 4 j t . % +es para marcadores ALGUNAS de cuyas etiquetas coinciden con la expresión regular).

Todo eso es convencional en Bookmark + (y parte corresponde a convenciones de Dired, por cierto): jes para comandos de salto , tes para etiquetado , .es para directorio actual , %es para regexp y *es para todos ( +es para algunos ).


(Ah, y usando el sexp de @ mkcms, obtengo C-x 4 j t f % *, que es igualmente largo. fSignifica archivo . Es como C-x 4 j t . % *, pero los marcadores candidatos para completar son todos marcadores de archivo, no solo aquellos para archivos en el directorio actual ( .).)

Dibujó
fuente
0

Magitagrega secuencias largas ya que permite alternar las opciones. Por ejemplo, cuando solicita el registro, puede seleccionar opciones cortas o largas, si desea ramas remotas o no, si desea la visualización gráfica de ramas, etc. La solicitud básica de un registro es solo un par de pulsaciones del magit-statusbúfer, pero puede agregar muchas más.

Lo mismo se aplica a la confirmación, dos pulsaciones de teclas para una confirmación básica, pero muchas adiciones opcionales.

Entonces la pregunta está debajo de lo especificado, ¿solo está considerando un stock(lo que sea que eso signifique) emacs?

Ícaro
fuente
1
Lejos de eso, acepto ejemplos que vienen de cualquier parte. Sin embargo, lo que describe es un conjunto de secuencias de teclas, con cada secuencia de teclas ejecutando un comando. Para tener una idea de qué es una secuencia de teclas, intente usar F1 ky vea cuántas teclas puede escribir hasta que describa el comando.
wasamasa