Quelle est la séquence de touches la plus longue connue dans Emacs?

14

Qt prend en charge les raccourcis clavier de type Emacs , mais pour seulement jusqu'à quatre clés. Pour expliquer pourquoi cette limite devrait être augmentée, il serait utile de montrer des exemples de raccourcis clavier de type Emacs avec encore plus de clés que cela. Existe-t-il des exemples connus ou peut-être même un moyen de trouver par programme de longues séquences de touches définies dans les keymaps Emacs?

edit: Je pensais que c'était une connaissance commune, mais une séquence de touches est un ensemble de clés lu par read-key-sequence. Essayez F1 kpour votre candidat et voyez s'il décrit votre commande ou une autre sans rapport la précédant.

wasamasa
la source
Les seules auxquelles je peux penser du haut de ma tête sont les conversions de séquences d'échappement terminales, qui ne s'appliquent pas à Qt. Dépasser 3 vraies clés est inhabituel.
Gilles 'SO- arrête d'être méchant'
Merci d'avoir fourni le contexte / la raison de la question et le lien. À première vue - avant de le lire, je devinais à tort que la question pouvait être hors sujet et inutile pour personne.
Drew
Le problème avec cette question est que personne ne peut y répondre avec certitude. Tout le monde ne peut y répondre que pour sa configuration emacs. Ce n'est pas basé sur l'opinion mais c'est un peu subjectif.
Tobias
1
Cela inclut-il des arguments de préfixe? Si je veux descendre de mille lignes, je peux dire C-u 1 0 0 0 C-nqui est six touches.
Stig Hemmer
1
@StigHemmer No. Faites F1 k C-u 1 0 0 0 C-net voyez qu'il C-us'agit d'une séquence de touches en soi.
wasamasa

Réponses:

23

J'ai testé avec le script suivant,

(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))))))

Et le plus longtemps que j'obtiens avec mon .emacs.dest C-x c C-x r iqui est une commande de barre, et avec emacs -qj'obtiens C-x a i lqui exécute la commande inverse-add-mode-abbrev.

mkcms
la source
12
Ha. Me donne C-x M-c M-b u t t e r f l y:) J'avais oublié que j'avais fait ça ...
phils
where-is-internaldomine de loin le temps CPU ici, mais vous pouvez toujours raser facilement quelques cycles en ajoutant de manière destructive la liste la plus courte à la plus longue via (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil
1
@phils Je reconnais la référence, mais qu'avez-vous défini exactement pour cette commande?
Dan est en train de jouer par Firelight le
@DanNeely, je suppose que vous n'avez jamais vu M-x butterfly? Je viens de le lier à cette commande pour une authenticité accrue :)
phils
6

Je ne peux pas vous dire ce qui pourrait être le plus long quelque part, mais voici un peu d'informations qui pourraient vous aider.

  1. J'ai quelques bibliothèques qui fournissent un ensemble de commandes liées liées aux clés dans une table de clés que je lie à une clé de préfixe.

    Parce que je ne veux pas coopter les clés utilisateur, etc., je lie généralement une telle clé de préfixe sous, disons C-xou, pour les other-windowcommandes, sous C-x 4(keymap ctl-x-4-map).

  2. Les mêmes considérations s'appliquent aux groupes de commandes dans un tel clavier: ils obtiennent parfois leur propre clavier. Et ainsi de suite, récursivement.

  3. Je m'attends à ce qu'au moins certains utilisateurs puissent vouloir lier de tels keymaps (à n'importe quel niveau) à leurs propres clés de préfixe plus courtes, ou ils pourraient vouloir lier des commandes spécifiques à des séquences de touches plus courtes. Mais je ne veux pas faire ça dans la bibliothèque elle-même, évidemment.

Voici un exemple d'une telle touche assez longue: C-x 4 j t . % *(sept frappes), qui est liée à la commande icicle-bookmark-file-this-dir-all-tags-regexp-other-windowdans Bookmark + .

Anatomie:

  • Sur la C-x 4touche préfixe ( ctl-x-4-map).

  • Sur la jclé de préfixe, qui correspond à toutes les commandes permettant de passer à un signet .

  • Sur la tclé de préfixe, qui concerne toutes les commandes permettant de passer aux signets qui sont balisés d'une manière ou d'une autre.

  • Sur la .clé de préfixe, qui concerne toutes les commandes de saut vers les signets qui concernent les fichiers du répertoire actuel qui sont étiquetés d'une manière ou d'une autre.

  • Sur la %touche préfixe, qui est pour toutes les commandes pour sauter aux favoris qui sont des choses dans le répertoire courant qui ont des balises qui correspondent à une expression rationnelle , vous êtes invité à saisir.

  • Sur la *clé, qui est pour toutes les commandes pour sauter aux favoris qui sont des choses dans le répertoire courant qui ont des balises , ALL qui correspondent à une expression rationnelle , vous êtes invité à saisir. (En revanche, C-x 4 j t . % +concerne les signets dont CERTAINES balises correspondent à l'expression rationnelle.)

Tout cela est conventionnel dans Bookmark + (et certains correspondent aux conventions Dired, BTW): jest pour les commandes de saut , test pour le tag , .est pour le répertoire courant , %est pour regexp et *est pour tous ( +est pour certains ).


(Oh, et en utilisant @ le sexp de mkcms, je reçois C-x 4 j t f % *, ce qui est tout aussi longue. Le fest synonyme de fichier . Il est comme C-x 4 j t . % *, mais les signets candidats à la fin sont tous les signets de fichiers, pas seulement ceux des fichiers dans le répertoire courant ( .).)

A dessiné
la source
0

Magitajoute de longues séquences car il permet de basculer les options. Par exemple, lorsque vous demandez le journal, vous pouvez sélectionner des options courtes ou longues, si vous voulez des branches distantes ou non, si vous voulez l'affichage graphique des branches et ainsi de suite. La demande de base pour un journal est juste quelques touches du magit-statustampon, mais vous pouvez en ajouter beaucoup plus.

Il en va de même pour la validation, deux touches pour une validation de base, mais de nombreux ajouts facultatifs.

Donc, la question est sous spécifiée, envisagez-vous seulement un stock(quoi que cela signifie) emacs?

icare
la source
1
Loin de là, j'accepte des exemples venant de partout. Ce que vous décrivez est un ensemble de séquences de touches, chaque séquence de touches exécutant une seule commande. Pour avoir une idée de ce qu'est une séquence de touches, essayez d'utiliser F1 ket voyez combien de touches vous pouvez taper jusqu'à ce qu'elle décrive la commande.
wasamasa