2013-05-16 2 views
2

Я пытаюсь сопоставить c-u m-x indent-pp-sexp с одним ключом, например F5, , так что работа с Emacs не разрушает мои отпечатки пальцев.emacs отображает несколько нажатий клавиш и команду на один ключ

Я использую (global-set-key (kbd "C-u M-x indent-pp-sexp") "<f5>"), но я получаю следующее сообщение об ошибке:

global-set-key: Key sequence C-u M-x i n d e n t - p p - s e x p starts with non-prefix key C-u 

EDIT

С помощью этой функции лямбда (global-set-key (kbd "<f5>") (lambda (interactive) (universal-argument) (indent-pp-sexp t)))

Получение ошибки:

recursive-edit: Wrong type argument: commandp, (lambda (interactive) (universal-argument) (indent-pp-sexp t)) 

Weird, потому что univeral-argument не принимает никаких параметров, и indent-pp-sexp принимают булевым

ответ

2

У вас есть аргументы неправильного путь вокруг, и вы свяжете ключи к функциям, а не к другой последовательности клавиш. Возможно, вы действительно ищете named macro; или вы можете написать некоторые фактические Lisp и связать, что F5:

(global-set-key (kbd "<f5>") 
       (function (lambda() (interactive) (indent-pp-sexp t)))) 

Наличие аргумента в виде вызова, как представляется, достаточно для выбора функции Префикс аргумент.

1

Вам не хватает списка аргументов лямбда. Кроме того, я думаю, что передача t в indent-pp-sexp отменяет необходимость вызова universal-argument.

(global-set-key (kbd "<f5>") #'(lambda() 
           (interactive) 
           (indent-pp-sexp t))) 
0

Я такой нуб, как вы, но мне уже приходилось определять основные вещи, такие как создание макросов. Я действительно не знаю, что не так с вашим кодом, но вот пошаговое руководство, как я делаю что-то дома. Сначала вам нужно нажать F3. Затем введите ваши нажатия клавиш, и, когда закончите, нажмите F4. Поздравляем, вы определили анонимный макрос. Вы можете воспроизвести его столько раз, сколько хотите, снова нажав F4. Когда вы достаточно сыграли, введите M-x name-last-keybord-macro и назовите его, например. foobar. Перейдите в свой каталог ~/.emacs.d/macros/ (сделайте это, если у вас его нет), и зайдите в файл, который вы назовете foobar.el. В его буфере M-x insert-kbd-macro. Когда вас спросят о имени, скажите foobar. Вы увидите, что emacs ввел содержимое вашего только что записанного макроса в файл. Сохрани это. Откройте файл .emacs, и добавить строки:

(load (expand-file-name "~/.emacs.d/macros/foobar.el")) 
(global-set-key (kbd "M-<f5>") 'foobar) 

и вещи начинают работать для меня после перезагрузки с M-F5 как связывание для foobar.el макросъемки.

Смежные вопросы