Was ist die längste bekannte Tastenfolge in Emacs?

14

Qt unterstützt Emacs-ähnliche Tastenkombinationen , jedoch nur für bis zu vier Tasten. Um zu verdeutlichen, warum diese Grenze erhöht werden sollte, wäre es nützlich, Beispiele für Emacs-ähnliche Tastaturbelegungen mit noch mehr Tasten als dieser zu zeigen. Gibt es dafür bekannte Beispiele oder sogar eine Möglichkeit, programmgesteuert lange Schlüsselsequenzen zu finden, die in Emacs-Schlüsselkarten definiert sind?

edit: Ich dachte, das wäre allgemein bekannt, aber eine Tastenfolge besteht aus einer Reihe von Tasten, die von eingelesen werden read-key-sequence. Versuchen Sie es F1 kmit Ihrem Kandidaten und prüfen Sie, ob er Ihren Befehl beschreibt oder einen anderen, der ihm vorausgeht.

Wasamasa
quelle
Die einzigen, an die ich auf Anhieb denken kann, sind Konvertierungen von terminalen Escape-Sequenzen, die für Qt nicht zutreffen. Das Überschreiten von 3 echten Schlüsseln ist ungewöhnlich.
Gilles 'SO - hör auf böse zu sein'
Vielen Dank, dass Sie den Kontext / Grund für die Frage und den Link angegeben haben. Auf den ersten Blick - vor dem Lesen - habe ich fälschlicherweise vermutet, dass die Frage möglicherweise nicht zum Thema gehört und für niemanden hilfreich ist.
Drew
Das Problem bei dieser Frage ist, dass niemand sie mit Sicherheit beantworten kann. Jeder kann es nur für seine Emacs-Konfiguration beantworten. Es ist nicht meinungsbasiert, aber irgendwie subjektiv.
Tobias
1
Enthält dies Präfixargumente? Wenn ich tausend Zeilen nach unten gehen möchte, kann ich sagen, C-u 1 0 0 0 C-nwelches sechs Tasten sind.
Stig Hemmer
1
@StigHemmer Nein. Sehen F1 k C-u 1 0 0 0 C-nund tun Sie, das C-uist eine Tastenfolge für sich.
Wasamasa

Antworten:

23

Ich habe mit dem folgenden Skript getestet,

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

Und die längst ich mit meinem bekommen .emacs.dheißt , C-x c C-x r idas ist einiger Helm Befehl ein , und mit emacs -qI erhalten , C-x a i ldie dem Befehl ausführt inverse-add-mode-abbrev.

mkcms
quelle
12
Ha. Gibt mir C-x M-c M-b u t t e r f l y:) Ich hatte vergessen, dass ich das getan hatte ...
Phils
where-is-internaldominiert hier bei weitem die CPU-Zeit, aber Sie können sich trotzdem leicht ein paar Zyklen rasieren, indem Sie die kürzere Liste der längeren Via destruktiv voranstellen (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil
1
@phils Ich erkenne die Referenz, aber was genau haben Sie mit diesem Befehl gemacht?
Dan Neely
@ DanNeely, ich denke, du hast noch nie gesehen M-x butterfly? Ich habe es nur an diesen Befehl gebunden, um die Authentizität zu erhöhen :)
phils
6

Ich kann nicht sagen, was das längste irgendwo da draußen sein könnte, aber hier ist ein paar Info, die helfen könnten.

  1. Ich habe einige Bibliotheken, die eine Reihe verwandter Befehle bereitstellen, die an Schlüssel in einer Keymap gebunden sind, die ich an einen Präfixschlüssel binde.

    Da ich keine Benutzerschlüssel usw. auswählen möchte, binde ich einen solchen Präfixschlüssel normalerweise unter (keymap ), z. B. C-xoder für other-windowBefehle unter C-x 4(keymap ctl-x-4-map).

  2. Dieselben Überlegungen gelten für Befehlsgruppen in einer solchen Tastaturbelegung: Manchmal erhalten sie eine eigene Tastaturbelegung. Und so weiter, rekursiv.

  3. Ich gehe davon aus, dass zumindest einige Benutzer solche Keymaps (auf einer beliebigen Ebene) erneut mit ihren eigenen, kürzeren Präfix-Schlüsseln verknüpfen möchten oder bestimmte Befehle an kürzere Tastensequenzen binden möchten. Aber das möchte ich natürlich nicht in der Bibliothek selbst tun.

Hier ist ein Beispiel für eine solche relativ lange Taste: C-x 4 j t . % *(sieben Tastenanschläge), die icicle-bookmark-file-this-dir-all-tags-regexp-other-windowin Bookmark + zwangsläufig zum Befehl wird .

Anatomie:

  • Auf dem C-x 4Präfixschlüssel ( ctl-x-4-map).

  • Auf der jPräfix-Taste, die für alle Befehle zum Springen auf ein Lesezeichen steht .

  • Auf der tPräfixtaste, die für alle Befehle zum Springen zu Lesezeichen verwendet wird, die in irgendeiner Weise markiert sind .

  • Auf dem .Präfixschlüssel, der für alle Befehle zum Springen zu Lesezeichen gilt, die sich auf Dateien im aktuellen Verzeichnis beziehen, die in irgendeiner Weise mit Tags versehen sind .

  • Auf dem %Präfixschlüssel, der für alle Befehle zum Springen zu Lesezeichen im aktuellen Verzeichnis steht , die Tags enthalten , die mit einem regulären Ausdruck übereinstimmen, nach dem Sie gefragt werden.

  • Auf der *Taste, die für alle Befehle zum Springen zu Lesezeichen im aktuellen Verzeichnis steht , die Tags haben , von denen ALLE mit einem regulären Ausdruck übereinstimmen Sie werden. (Im Gegensatz dazu C-x 4 j t . % +ist für Lesezeichen SOME von deren Tags entsprechen den regulären Ausdruck.)

Alles das ist konventionell Bookmark + (und ein Teil davon entspricht Dired Konventionen, BTW): jist für Sprungbefehle für ist markiert , ist für strom Verzeichnis , ist für regexp , und ist für alle (t.%*+ für einige ).


(Oh, und mit @ mkcms's sexp bekomme ich C-x 4 j t f % *, was gleich lang ist. Das fsteht für Datei . Es ist wie C-x 4 j t . % *, aber die Kandidaten-Lesezeichen für die Vervollständigung sind alle Datei-Lesezeichen, nicht nur die für Dateien im aktuellen Verzeichnis ( .).)

Drew
quelle
0

MagitFügt lange Sequenzen hinzu, da die Optionen umgeschaltet werden können. Wenn Sie beispielsweise nach dem Protokoll fragen, können Sie kurze oder lange Optionen auswählen, ob Sie entfernte Verzweigungen oder nicht, ob Sie die grafische Anzeige von Verzweigungen usw. wünschen. Die grundlegende Anforderung für ein Protokoll ist nur ein paar Tastatureingaben von dermagit-status Puffer, aber Sie können viele weitere hinzufügen.

Gleiches gilt für das Festschreiben, zwei Tastenanschläge für ein einfaches Festschreiben, aber viele optionale Ergänzungen.

Die Frage ist also unter präzisiert, ziehen Sie nur einen stock(was auch immer das bedeutet) Emac in Betracht ?

icarus
quelle
1
Im Gegenteil, ich akzeptiere Beispiele von überall her. Sie beschreiben jedoch eine Reihe von Tastensequenzen, wobei jede Tastensequenz einen Befehl ausführt. Um eine Vorstellung von einer Tastensequenz zu erhalten, versuchen F1 kSie, die Anzahl der Tasten zu ermitteln, die Sie eingeben können, bis der Befehl beschrieben wird.
Wasamasa