Какая самая длинная из известных последовательностей ключей в Emacs?

14

Qt поддерживает привязки клавиш в стиле Emacs , но только для четырех ключей. Чтобы понять, почему этот предел должен быть увеличен, было бы полезно показать примеры комбинаций клавиш в стиле Emacs с еще большим количеством клавиш. Есть ли известные примеры для этого или, может быть, даже способ программно найти последовательности длинных клавиш, определенные в таблицах ключей Emacs?

редактировать: я думал, что это было общеизвестно, но последовательность клавиш представляет собой набор ключей, как прочитано в read-key-sequence. Попробуйте F1 kдля своего кандидата и посмотрите, описывает ли он вашу команду или не связанный с ней предшествующий.

wasamasa
источник
Единственное, о чем я могу подумать, - это преобразования из терминальных escape-последовательностей, что не относится к Qt. Пройдя выше 3-х реальных ключей, это необычно.
Жиль "ТАК - перестань быть злым"
Спасибо за предоставление контекста / причины вопроса и ссылки. На первый взгляд - прежде чем читать, я неправильно догадывался, что вопрос может быть не по теме и никому не нужен.
Дрю
Проблема с этим вопросом в том, что никто не может ответить на него точно. Каждый может ответить на него только за свою emacs-конфигурацию. Это не основано на мнении, но это отчасти субъективно.
Тобиас
1
Включает ли это префиксные аргументы? Если я хочу пройти тысячу строк, я могу сказать, C-u 1 0 0 0 C-nчто это шесть клавиш.
Стиг Хеммер
1
@ Стигхеммер Нет. Сделай F1 k C-u 1 0 0 0 C-nи посмотри, что C-uэто сама по себе последовательность клавиш.
Васамаса

Ответы:

23

Я проверил с помощью следующего скрипта,

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

И самое длинное, что я получаю с моим, .emacs.dэто C-x c C-x r iкакая-то команда helm, а с чем emacs -qя получаю, C-x a i lкоторая запускает команду inverse-add-mode-abbrev.

mkcms
источник
12
Ха. Дает мне C-x M-c M-b u t t e r f l y:) Я забыл, что я сделал это ...
Филс
where-is-internalбезусловно, доминирует здесь время процессора, но вы все равно можете легко сократить несколько циклов, деструктивно добавляя более короткий список к более длинному (setq keyseqs (nconc (where-is-internal sym nil nil t) keyseqs)).
Василий
1
@phils Я узнаю ссылку, но что именно вы задали для этой команды?
Дэн возится от Firelight
@ Дэнни, наверное, ты никогда не видел M-x butterfly? Я просто связал это с этой командой для повышения подлинности :)
phils
6

Я не могу ответить о том, что самое длинное может быть где-то там, но вот одна информация, которая может помочь.

  1. У меня есть несколько библиотек, которые предоставляют набор связанных команд, связанных с клавишами в таблице ключей, которые я связываю с префиксным ключом.

    Поскольку я не хочу использовать пользовательские ключи и т. Д., Я обычно связываю такой префиксный ключ в, скажем, C-xили, для other-windowкоманд, в C-x 4(таблица ключей ctl-x-4-map).

  2. Те же соображения применимы к группам команд в такой карте ключей: они иногда получают свою собственную карту ключей. И так далее, рекурсивно.

  3. Я ожидаю, что по крайней мере некоторые пользователи могут захотеть привязать любые такие комбинации клавиш (на любом уровне) к своим собственным, более коротким, префиксным ключам, или они могут захотеть привязать определенные команды к более коротким последовательностям клавиш. Но я не хочу делать это в самой библиотеке, очевидно.

Вот пример одного такого довольно длинного ключа: C-x 4 j t . % *(семь нажатий), который связан с командой icicle-bookmark-file-this-dir-all-tags-regexp-other-windowв Bookmark + .

Анатомия:

  • На C-x 4префиксном ключе ( ctl-x-4-map).

  • На jклавишу префикса, которая предназначена для всех команд перехода в закладку .

  • На tпрефиксном ключе, который предназначен для всех команд перехода в закладки, помеченные каким-либо образом.

  • На .префиксном ключе, который предназначен для всех команд перехода в закладки для файлов в текущем каталоге , помеченных каким-либо образом.

  • На %префиксном ключе, который предназначен для всех команд для перехода к закладкам, предназначенным для объектов в текущем каталоге , у которых есть теги , соответствующие регулярному выражению, для которого вас запрашивают.

  • На *ключе, который предназначен для всех команд для перехода к закладкам, предназначенным для объектов в текущем каталоге , имеющих теги , ВСЕ из которых соответствуют регулярному выражению, которое вам предлагается. (Напротив, C-x 4 j t . % +для закладок НЕКОТОРЫЕ из тегов соответствуют регулярному выражению.)

Все это является обычным в Bookmark + (и некоторые из них соответствуют соглашениям Dired, BTW): jдля команд перехода , tдля тегов , .для текущего каталога , %для регулярных выражений и *для всех ( +для некоторых ).


(О, и с использованием sexp @ mkcms, я получаю C-x 4 j t f % *, что равно длине. Стенд fдля файла . Это похоже C-x 4 j t . % *, но кандидаты в закладки для завершения - это все закладки файлов, а не только файлы в текущем каталоге ( .).)

Нарисовалась
источник
0

Magitдобавляет длинные последовательности, так как позволяет переключать опции. Например, когда вы запрашиваете журнал, вы можете выбрать короткие или длинные опции, если вы хотите удаленные ветки или нет, если вы хотите графическое отображение ветвей и так далее. Основной запрос для журнала - просто пара нажатий клавиш из magit-statusбуфера, но вы можете добавить еще много.

То же самое касается фиксации, двух нажатий клавиш для базового коммита, но множества дополнительных дополнений.

Таким образом, вопрос недостаточно конкретизирован, вы рассматриваете только stock(что бы это ни значило) emacs?

Икар
источник
1
Я далек от этого, я принимаю примеры, поступающие откуда угодно. То, что вы описываете, представляет собой набор последовательностей клавиш, причем каждая последовательность клавиш выполняет одну команду. Чтобы понять, что такое последовательность клавиш, попробуйте использовать F1 kи посмотреть, сколько клавиш вы можете набрать, пока она не описывает команду.
Васамаса