Яка найдовша відома ключова послідовність у Emacs?


14

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

редагувати: я вважав, що це загальновідоме значення, але послідовність клавіш - це набір ключів, прочитаних у read-key-sequence. Спробуйте F1 kсвого кандидата і подивіться, чи описує він вашу команду чи незв'язану команду, яка їй передує.


Єдине, що я можу придумати у верхній частині голови, - це перетворення з термінальної аварійної послідовності, яка не стосується Qt. Перехід вище 3-х справжніх клавіш незвичний.
Жиль "ТАК - перестань бути злим"

Дякуємо, що надали контекст / причину питання та посилання. На перший погляд - перед читанням я неправильно здогадувався, що питання може бути поза темою і нікому не корисно.
Дрю

Проблема цього питання полягає в тому, що ніхто не може відповісти на нього точно. Кожен може відповісти на нього лише за свою конфігурацію emacs. Вона не ґрунтується на думці, але є суб'єктивною.
Тобіас

1
Чи включає це аргументи префікса? Якщо я хочу піти на тисячу рядків вниз, я можу сказати, C-u 1 0 0 0 C-nщо це шість клавіш.
Стиг Хеммер

1
@StigHemmer No. Зробіть F1 k C-u 1 0 0 0 C-nі переконайтеся, що C-uце ключова послідовність сама по собі.
wasamasa

Відповіді:


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це якась команда керма, і emacs -qя отримую, C-x a i lяка виконує команду inverse-add-mode-abbrev.


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 Я розпізнаю посилання, але що саме ви встановили для цієї команди?
Ден - вогнем світла

@DanNeely, я думаю, ти ніколи не бачив M-x butterfly? Я просто прив’язав його до цієї команди для підвищення автентичності :)
phils

6

Я не можу відповісти про те, що довше може бути десь там, але ось один біт інформації, який може допомогти.

  1. У мене є кілька бібліотек, які надають набір пов'язаних команд, прив’язаних до клавіш у картографічній карті, які я прив'язую до ключа префікса.

    Оскільки я не хочу перебирати користувацькі ключі тощо, я зазвичай пов'язую такий префіксний ключ під, скажімо, C-xабо, для other-windowкоманд, під C-x 4(keymap 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для тегів , .для поточного каталогу , %для regexp і *для всіх ( +для деяких ).


(О, і використовуючи sexp @ mkcms, я розумію C-x 4 j t f % *, що однаково довгий. Потенція fдо файлу . Це як C-x 4 j t . % *, але закладки для завершення - це всі закладки файлів, а не лише файли в поточному каталозі ( .).)


0

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

Те ж саме стосується вчинення, два натискання клавіш для базової фіксації, але безліч додаткових доповнень.

Отже, питання не вказане, чи розглядаєте ви лише stock(що б там не було) емаки?


1
Далеко від цього я приймаю приклади, що приходять з будь-якого місця. Те, що ви описуєте, - це набір ключових послідовностей, хоча кожна послідовність ключів виконує одну команду. Щоб отримати уявлення про те, що таке послідовність клавіш, спробуйте скористатися F1 kі побачити, скільки клавіш можна набрати, поки вона не опише команду.
wasamasa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.