Emacs - Использование «Выбрать все» в функции (как найти функцию, привязанную к клавише) - PullRequest
16 голосов
/ 22 октября 2009

Я пытаюсь выяснить Элиспа, и я наткнулся на контрольно-пропускной пункт.

Мне нужна функция, которая будет делать отступ для всего файла. Сейчас я выбираю весь файл ( C-x h ), а затем выполняю M-x indent-region (в котором есть клавиша быстрого доступа).

Я хотел бы объединить это с одним нажатием клавиши, но не могу понять, как сделать C-x h в функции.

Спасибо

Ответы [ 2 ]

22 голосов
/ 22 октября 2009

Чтобы узнать, что Emacs будет делать, когда вы вызываете определенную комбинацию клавиш, добавьте к ней префикс: C-h k . В вашем случае вы наберете:

C-h k C-x h

, что дает

C-x h запускает команду mark-whole-buffer, который является интерактивная скомпилированная функция Lisp в `Simple.el».

Это связано с C-х ч, , (Наценка весь-буфер)

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

Примечание: Вы также можете использовать Ch K (обратите внимание, что K написано с большой буквы), что приведет вас к документации для команды.

12 голосов
/ 22 октября 2009

Стоит отметить, что вы не хотите использовать метку и точку в неинтерактивном коде; Вы хотите (indent-region (point-min) (point-max)), а не (save-excursion (mark-whole-buffer) (call-interactively indent-region)), хотя эффекты похожи.

(Не для того, чтобы испортить веселье, но вся последовательность будет выглядеть примерно так: (global-set-key (kbd "C-M-r") (lambda () (interactive) (indent-region (point-min) (point-max))).)

...