2016-10-13 2 views
0

Я пытаюсь связать с M-b команду, которой предшествует отрицательный аргумент. Я отправляю свой код.bind key to negative-argument + command в emacs

работает

(global-unset-key (kbd "M-f"))               
(global-set-key (kbd "M-f") 'forward-whitespace)          

не работает

(global-unset-key (kbd "M-b"))               
(global-set-key (kbd "M-b") (lambda() (interactive) (negative-argument(forward-whitespace))))  

Как я могу сделать это работает?

ответ

2

Конкретная проблема у вас есть решается легко:

(global-set-key (kbd "M-b") (lambda() (interactive) (forward-whitespace -1))) 

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

Это не очень трудно:

(defmacro call-with-negative-argument (command) 
    `(lambda() 
    (interactive) 
    (prefix-command-preserve-state) 
    (setq prefix-arg '-) 
    (universal-argument--mode) 
    (call-interactively ,command))) 
(global-set-key (kbd "...") (call-with-negative-argument forward-whitespace)) 

, но, на самом деле, любой совместимый функция также будет работать нормально, как это:

(defmacro call-with-negative-argument (command) 
    `(lambda() 
    (interactive) 
    (,command -1))) 
+0

спасибо! Относительно этого ответа у меня, к сожалению, есть еще один вопрос: посмотрите http://stackoverflow.com/questions/40024130/tell-emacs-to-interpret-words-breaking-them-at-newline-and-whitespace – Nisba