Qual è la sequenza di tasti più lunga conosciuta in Emacs?


14

Qt supporta l'associazione dei tasti in stile Emacs , tuttavia solo per un massimo di quattro tasti. Per chiarire il motivo per cui questo limite dovrebbe essere aumentato, sarebbe utile mostrare esempi di combinazioni di tasti in stile Emacs con ancora più chiavi. Esistono esempi noti per questo o forse anche un modo per trovare a livello di programmazione sequenze di tasti lunghe definite nelle mappe dei tasti di Emacs?

modifica: ho pensato che fosse una conoscenza comune, ma una sequenza di tasti è un insieme di chiavi come letto da read-key-sequence. Prova F1 kper il tuo candidato e vedi se descrive il tuo comando o uno non correlato che lo precede.


Le uniche che mi vengono in mente dalla parte superiore della mia testa sono le conversioni dalle sequenze di escape terminali, che non si applicano a Qt. Andare oltre 3 chiavi reali è insolito.
Gilles 'SO- smetti di essere malvagio' il

Grazie per aver fornito il contesto / motivo della domanda e il link. A prima vista - prima di leggerlo, stavo indovinando erroneamente che la domanda potesse essere fuori tema e non utile per nessuno.
Estratto il

Il problema con questa domanda è che nessuno può rispondere di sicuro. Tutti possono rispondere solo per la propria configurazione di emacs. Non è basato sull'opinione ma è un po 'soggettivo.
Tobias,

1
Questo include argomenti prefisso? Se voglio andare giù di mille righe, posso dire C-u 1 0 0 0 C-nquali sono le sei chiavi.
Stig Hemmer,

1
@StigHemmer No. Fai F1 k C-u 1 0 0 0 C-ne vedi che C-uè una sequenza di tasti a sé stante.
Wasamasa,

Risposte:


23

Ho testato con il seguente 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))))))

E il più lungo che ottengo con il mio .emacs.dè C-x c C-x r iquale è un comando helm, e con emacs -qottengo C-x a i lche esegue il comando inverse-add-mode-abbrev.


12
Ha. Mi dà C-x M-c M-b u t t e r f l y:) Mi ero dimenticato di averlo fatto ...
phils,

where-is-internaldomina di gran lunga qui il tempo della CPU, ma puoi comunque radere facilmente alcuni cicli anteponendo distruttivamente l'elenco più breve al più lungo (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Basil

1
@phils Riconosco il riferimento, ma cosa hai impostato esattamente per fare quel comando?
Dan è Fiddling by Firelight il

@DanNeely, immagino tu non abbia mai visto M-x butterfly? L'ho appena associato a quel comando per una maggiore autenticità :)
phils

6

Non posso rispondere a quello che potrebbe essere il più lungo là fuori da qualche parte, ma ecco un po 'di informazioni che potrebbero aiutare.

  1. Ho alcune librerie che forniscono una serie di comandi correlati associati alle chiavi in ​​una mappa chiave che associo a una chiave prefisso.

    Poiché non desidero cooptare chiavi utente ecc., In genere associo tale chiave di prefisso sotto, dire C-xo, per i other-windowcomandi, in C-x 4(mappa di tasti ctl-x-4-map).

  2. Le stesse considerazioni si applicano ai gruppi di comandi in tale keymap: a volte ottengono la propria keymap. E così via, ricorsivamente.

  3. Mi aspetto che almeno alcuni utenti potrebbero voler ricollegare tali keymap (a qualsiasi livello) alle proprie chiavi di prefisso più brevi o potrebbero voler associare comandi specifici a sequenze di tasti più brevi. Ma non voglio farlo nella biblioteca stessa, ovviamente.

Ecco un esempio di un tasto abbastanza lungo: C-x 4 j t . % *(sette sequenze di tasti), che è destinato a comandare icicle-bookmark-file-this-dir-all-tags-regexp-other-windowin Bookmark + .

Anatomia:

  • Sulla C-x 4chiave di prefisso ( ctl-x-4-map).

  • Sul jtasto prefisso, che è per tutti i comandi per saltare a un segnalibro .

  • Sul ttasto prefisso, che è per tutti i comandi per saltare ai segnalibri che sono in qualche modo taggati .

  • Sulla .chiave di prefisso, che è per tutti i comandi per saltare ai segnalibri che sono per i file nella directory corrente che sono in qualche modo taggati .

  • Sulla %chiave di prefisso, che è per tutti i comandi per saltare ai segnalibri che sono per cose nella directory corrente che hanno tag che corrispondono a una regexp che ti viene richiesto.

  • Sul *tasto, che è per tutti i comandi per saltare ai segnalibri che sono per cose nella directory corrente che hanno tag , TUTTI i quali corrispondono a una regexp che ti viene richiesta. (Al contrario, C-x 4 j t . % +è per i segnalibri ALCUNI dei cui tag corrispondono al regexp.)

Tutto ciò è convenzionale in Bookmark + (e in parte corrisponde a Convened Dired, BTW): jè per i comandi di salto , tè per i tag , .è per la directory corrente , %è per regexp ed *è per tutti ( +è per alcuni ).


(Oh, e usando sexp di @ mkcms, ottengo C-x 4 j t f % *, che è ugualmente lungo. Sta fper file . È come C-x 4 j t . % *, ma i segnalibri candidati per il completamento sono tutti i segnalibri di file, non solo quelli per i file nella directory corrente ( .).)


0

Magitaggiunge lunghe sequenze in quanto consente di alternare le opzioni. Ad esempio, quando si richiede il registro, è possibile selezionare opzioni brevi o lunghe, se si desidera o meno rami remoti, se si desidera la visualizzazione grafica dei rami e così via. La richiesta di base per un registro è solo un paio di sequenze di tasti dal magit-statusbuffer, ma è possibile aggiungerne molte altre.

Lo stesso vale per il commit, due sequenze di tasti per un commit di base, ma molte aggiunte opzionali.

Quindi la domanda è sotto specificata, stai considerando solo un stock(qualunque cosa significhi) emacs?


1
Lungi da ciò, accetto esempi che arrivano da qualsiasi luogo. Quello che descrivi è un insieme di sequenze di tasti, con ogni sequenza di tasti che esegue un comando. Per avere un'idea di cosa sia una sequenza di tasti, prova a usare F1 ke vedi quanti tasti puoi digitare fino a quando non descrive il comando.
Wasamasa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.