将键绑定到 emacs 中的否定参数 + 命令

bind key to negative-argument + command in emacs

我正在尝试将前面带有否定参数的命令绑定到 M-b。我 post 我的代码。

工作

(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))))    

我怎样才能让它工作?

您遇到的具体问题很容易解决:

(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)))