Jaka jest najdłuższa znana sekwencja klawiszy w Emacsie?

14

Qt obsługuje skróty klawiszowe w stylu Emacsa , jednak tylko dla maksymalnie czterech klawiszy. Aby wyjaśnić, dlaczego ten limit powinien zostać zwiększony, przydatne byłoby pokazanie przykładów skrótów klawiszowych w stylu Emacsa z jeszcze większą liczbą klawiszy. Czy są jakieś znane przykłady tego, a może nawet sposób programowego wyszukiwania długich sekwencji klawiszy zdefiniowanych w mapach klawiszy Emacsa?

edycja: Myślałem, że to powszechna wiedza, ale sekwencja klawiszy to zestaw kluczy wczytywanych przez read-key-sequence. Spróbuj F1 kkandydata i sprawdź, czy opisuje twoje polecenie, czy też niepowiązane z nim polecenie.

wasamasa
źródło
Jedyne, o czym mogę myśleć z góry, to konwersje z końcowych sekwencji ucieczki, które nie dotyczą Qt. Wyjście powyżej 3 prawdziwych kluczy jest niezwykłe.
Gilles „SO- przestań być zły”
Dziękujemy za podanie kontekstu / przyczyny pytania i linku. Na pierwszy rzut oka - przed przeczytaniem niepoprawnie zgadywałem, że pytanie może być nie na temat i nie jest pomocne dla nikogo.
Drew
Problem z tym pytaniem polega na tym, że nikt na pewno nie może na nie odpowiedzieć. Każdy może odpowiedzieć tylko na swoją konfigurację emacs. Nie jest oparty na opiniach, ale jest w pewnym sensie subiektywny.
Tobias
1
Czy obejmuje to argumenty przedrostkowe? Jeśli chcę zejść o tysiąc linii w dół, mogę powiedzieć, C-u 1 0 0 0 C-nco to jest sześć klawiszy.
Stig Hemmer
1
@StigHemmer Nie. Zrób F1 k C-u 1 0 0 0 C-ni zobacz, że C-ujest to sekwencja klawiszy sama w sobie.
wasamasa,

Odpowiedzi:

23

Testowałem za pomocą następującego skryptu,

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

I najdłużej otrzymuję .emacs.dto, C-x c C-x r iktóre jest jakimś poleceniem steru, a wraz z emacs -qtym, C-x a i lktóry uruchamia polecenie inverse-add-mode-abbrev.

mkcms
źródło
12
Ha. Daje mi C-x M-c M-b u t t e r f l y:) Zapomniałem, że to zrobiłem ...
Phils
where-is-internalzdecydowanie dominuje tutaj czas procesora, ale nadal możesz z łatwością ogolić kilka cykli, destrukcyjnie przygotowując krótszą listę do dłuższej poprzez (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil
1
@ phils Rozpoznaję odwołanie, ale co dokładnie ustawiłeś dla tego polecenia?
Dan bawi się Firelight
@ DanNeely, chyba nigdy nie widziałeś M-x butterfly? Po prostu związałem to z tym poleceniem dla zwiększenia autentyczności :)
phils
6

Nie mogę odpowiedzieć na pytanie, co może być najdłużej, ale tutaj jest kilka informacji, które mogą pomóc.

  1. Mam kilka bibliotek, które udostępniają zestaw powiązanych poleceń powiązanych z klawiszami w mapie klawiszy, którą łączę z kluczem prefiksu.

    Ponieważ nie chcę kooptować kluczy użytkownika itp., Zwykle wiążę taki klucz prefiksu pod, powiedzmy C-xlub, dla other-windowpoleceń, pod C-x 4(mapa klawiszy ctl-x-4-map).

  2. Te same uwagi dotyczą grup poleceń w takiej mapie klawiszy: czasami otrzymują własną mapę klawiszy. I tak dalej, rekurencyjnie.

  3. Oczekuję, że przynajmniej niektórzy użytkownicy mogą chcieć ponownie powiązać takie mapy klawiszy (na dowolnym poziomie) z własnymi, krótszymi kluczami z prefiksem lub mogą chcieć powiązać określone polecenia z krótszymi sekwencjami klawiszy. Ale oczywiście nie chcę tego robić w samej bibliotece.

Oto przykład jednego z takich dość długich klawiszy: C-x 4 j t . % *(siedem naciśnięć klawiszy), który należy wykonać w poleceniu icicle-bookmark-file-this-dir-all-tags-regexp-other-windoww zakładce + .

Anatomia:

  • W C-x 4kluczu prefiksu ( ctl-x-4-map).

  • Na jklawiszu prefiksu, który jest dla wszystkich poleceń do przejścia do zakładki .

  • Na tklawiszu prefiksu, który jest dla wszystkich poleceń przejścia do zakładek, które są w jakiś sposób oznaczone .

  • Na .klawiszu prefiksu, który jest dla wszystkich poleceń przejścia do zakładek, które dotyczą plików w bieżącym katalogu, które są w jakiś sposób oznaczone .

  • Na %kluczu przedrostka, który jest dla wszystkich poleceń do skoków do zakładek, które są dla rzeczy w bieżącym katalogu , które mają znaczniki , które pasują do wyrażenia regularnego , zostaniesz poproszony o.

  • Na *klucz, który jest dla wszystkich poleceń do skoków do zakładek, które są dla rzeczy w bieżącym katalogu , które mają znaczniki , ALL które pasują do wyrażenia regularnego , zostaniesz poproszony o. (Dla kontrastu, C-x 4 j t . % +dotyczy zakładek, których NIEKTÓRE znaczniki pasują do wyrażenia regularnego.)

Wszystko to jest konwencjonalny w zakładki + (a niektóre z nich odpowiada konwencji DIRED, BTW): jsłuży do skoku poleceń, tjest oznaczone , .jest dla bieżącej-katalogu , %jest dla regexp , i *jest dla wszystkich ( +dla niektórych ).


(Aha, i używając sexp @ mkcms, rozumiem C-x 4 j t f % *, który jest równie długi. Skróty fdla pliku . To jak C-x 4 j t . % *, ale zakładki do uzupełnienia to wszystkie zakładki plików, nie tylko te dla plików w bieżącym katalogu ( .).)

Rysował
źródło
0

Magitdodaje długie sekwencje, ponieważ pozwala przełączać opcje. Na przykład, gdy poprosisz o dziennik, możesz wybrać krótkie lub długie opcje, jeśli chcesz zdalnych gałęzi, czy nie, jeśli chcesz graficzne wyświetlanie gałęzi i tak dalej. Podstawowe żądanie dziennika to tylko kilka naciśnięć klawiszy z magit-statusbufora, ale możesz dodać wiele innych.

To samo dotyczy zatwierdzania, dwa naciśnięcia klawiszy dla podstawowego zatwierdzenia, ale wiele opcjonalnych dodatków.

Pytanie jest więc sprecyzowane, czy bierzesz pod uwagę tylko stockemacs (cokolwiek to oznacza)?

Ikar
źródło
1
Daleko od tego akceptuję przykłady pochodzące z dowolnego miejsca. Opisujesz jednak zestaw sekwencji klawiszy, przy czym każda sekwencja klawiszy wykonuje jedno polecenie. Aby dowiedzieć się, co to jest sekwencja klawiszy, spróbuj użyć F1 ki zobacz, ile klawiszy można wpisać, dopóki nie opisuje polecenia.
wasamasa,