2011-03-16 78 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") '...)
相關問題