2011-03-16 44 views
1

我想写的东西,会在Emacs向后移动一个窗口,并绑定到C-x S-o为什么elisp函数不起作用(就像我期望的那样)?

(global-set-key [C-x S-o] '(other-window -1)) 

当我加载的.emacs方含吧,东西坏了,我所有的滚动条重新出现(前面已经禁用)和C-x S-O的功能与C-x o完全相同。

一个修复会很好,但我也很感激为什么它不起作用的解释。

回答

2

你搞砸的关键载体,我相信你必须使用一个单一的函数名,不带参数,使这项工作:

(global-set-key "\C-xO" 'my-other-window) 

(defun my-other-window() 
    (interactive) 
    (other-window -1) 
) 

有关详细信息,请参阅manual

(info "(emacs)Init Rebinding") 
+0

出于某种原因,我认为lisp有咖喱。 – Squidly 2011-03-16 20:01:13

+0

@MrBones这不是关于currying,这是关于Emacs需要绑定到某个键的东西。 'interactive' – 2011-04-06 21:12:21

6

您不能直接调用带有参数的函数,如global-set-key。它应该是这样的:

(global-set-key [C-x S-o] (lambda() (interactive) (other-window -1))) 

它以一种匿名交互形式包装你想要的功能。

+0

如果需要更多信息,请参见[绑定键的命令](http://www.gnu.org/s/emacs/manual/html_node/elisp/Key-Binding-Commands.html)和[ Key Lookup](http://www.gnu.org/s/emacs/manual/html_node/elisp/Key-Lookup.html); Emacs Lisp手册;后一页告诉你什么样的事情可以作为'global-set-key'的参数给出。 – dfan 2011-03-16 13:52:11

+0

如果你使用关键矢量,它应该是[?\ C-x?\ O]我认为。 – Tyler 2011-03-16 14:13:45

+0

这实际上不起作用。它和我做的一样。但是,我从Tyler的回答中将关键描述更改为“\ C-xO”,这一切都很好。 – Squidly 2011-03-16 18:34:12

1

有两个问题与您的代码:

  1. 您在为需要interactive (它也值得读wiki
  2. 这是一个好主意,使用​​来读你想要的键绑定,
    例如, (global-set-key (kbd "C-x O") '...)
相关问题