Учитывая имя команды emacs, как бы вы нашли привязки клавиш? (и наоборот)

Если я знаю имя команды emacs, говорит: "goto-line"; что, если я хочу спросить, есть ли какие-либо последовательности клавиш, связанные с этой командой?

И наоборот, учитывая последовательность клавиш, как я могу найти ее имя команды?

Ответ 1

Чтобы просто найти привязки клавиш для команды, вы можете использовать функцию справки emacs "где есть"

C-h w command-name

Если для команды установлено несколько привязок, они все будут перечислены.

Для обратного, учитывая последовательность клавиш, вы можете набрать

C-h k key-sequence

Чтобы получить команду, которая будет работать.

Вы можете получить подробную информацию о команде, а также о любой неинтерактивной определенной функции, набрав

C-h f function-name

Который предоставит вам подробную информацию о функции, включая любые привязки клавиш для нее, и

C-h v variable-name

предоставит вам информацию о любой (связанной) переменной. Карты ключей хранятся в переменных, однако коды ключей хранятся в необработанном формате. Попробуйте C-h v isearch-mode-map для примера.

Для получения дополнительной информации о получении справки вы можете ввести

C-h ?

Ответ 2

Чтобы в интерактивном режиме связать команду с сочетанием клавиш (или последовательностью клавиш в терминах Emacs), см. Выбранный ответ.

Для программного получения команды, привязанной к заданной последовательности клавиш, используйте функцию key-binding или lookup-key которая берет последовательность клавиш и возвращает свою связанную команду. Функция key-binding это то, что использует Ch k.

(key-binding (kbd "C-h m"))

возвращает команду, связанную с Ch m путем поиска во всех текущих раскладках клавиш. Функция lookup-key выполняет поиск в единой таблице lookup-key:

(lookup-key (current-global-map) (kbd "TAB")) ; => indent-for-tab-command
(lookup-key org-mode-map (kbd "TAB")) ; => org-cycle
(lookup-key text-mode-map (kbd "TAB")) ; => nil
(lookup-key isearch-mode-map (kbd "TAB")) ; => isearch-printing-char

Для программного получения всех последовательностей клавиш, привязанных к данной команде, возможно, используется функция where-is-internal. Кажется, что имя функции, оканчивающееся на internal, говорит о том, что пользователям Emacs не следует использовать их в своих файлах инициализации, но эта функция, имеющая строку документации, предлагает другое. Любой, кто рассматривает возможность использования where-is-internal должен сначала проверить, могут ли переназначенные ключи достичь своей цели.

Альтернативой для нахождения ключей, которые связаны с конкретной командой (например, forward-char), являются substitute-command-keys (например, (substitute-command-keys "\\[forward-char]")). Это особенно полезно в больших текстах.

Ответ 3

C-h w (или F1-w): where-is RET somecommandname RET

Делает то, что вы просите - перечисляет связанные ключи без дополнительной информации.:)

Ответ 4

Старый вопрос, но для новых читателей есть и другие хорошие способы увидеть привязки клавиш

M-x describe-bindings

Список всех доступных в настоящее время привязок, использование isearch, появление и т.д., чтобы хорошо использовать этот список.

M-x describe-prefix-map

Здесь отображаются все привязки, доступные в текущем режиме, вы можете использовать буфер отображения, как и любой другой буфер только для чтения Emacs, например, вы можете свободно искать строки и т.д.

M-x describe-mode

Также, как и общая информация о текущем режиме, он также перечисляет все доступные привязки клавиш.

M-x describe-minor-mode

Вам будет предложено ввести имя второстепенного режима, а затем отобразить информацию и привязки клавиш для этого второстепенного режима.

ПРИМЕЧАНИЕ. В приведенных ниже примерах используются дополнительные пакеты (доступны из MELPA)

Какой ключ

Это показывает привязки непосредственно перед их использованием. Введите префикс, например C-x или C-c, и будет показан список привязок, доступных в этом префиксе.

Вы также можете просмотреть список привязок клавиш, доступных из текущего режима, используя:

M-x which-key-show-top-level

Полезно привязать which-key-show-top-level к ключевому аккорду по вашему выбору, чтобы вы могли просматривать доступные ключи из любого места.

Например, C-s (isearch-forward) имеет обширную карту ключей, которая часто неизвестна. например M-s o запускает occur с помощью текущей строки поиска, о которой я не знал много лет с помощью Emacs. Благодаря поддержке which-key мне удалось обнаружить множество редких драгоценных камней в Emacs.

https://github.com/justbur/emacs-which-key

Кнопка руководства

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

https://github.com/kai2nenobu/guide-key