2010-08-29 92 views
4

我不知道的elisp,但我試圖做類似如下:重新定義ENTER鍵在Emacs

(add-hook 
'scala-mode-hook 
(lambda() 
    (define-key scala-mode-map (kbd "RET") (lambda() 
              (scala-newline) 
              (scala-indent-line))))) 

目標是每次我打回車鍵來調用這兩個函數。我該如何做到這一點?

回答

7

你需要在你的define-keylambda(interactive)形式。

編輯:

需要明確的是,內部形式應該是這樣的:

(lambda() 
    (interactive) 
    (scala-newline) 
    (scala-indent-line)) 
2

在鉤,你可以使用本地設置鍵,例如

(add-hook 'scala-mode-hook 
    (lambda() 
    (local-set-key [return] 
     (lambda() 
      (scala-newline) 
      (scala-indent-line))))) 

雖然,也許這將是更容易使用類似標準的新行和縮進?

(add-hook 'scala-mode-hook 
    (lambda() 
    (local-set-key [return] 'newline-and-indent))) 
8

我基本上做這在這麼多的模式,我已經擠壓它們放在一起:

(mapcar (lambda (hooksym) 
      (add-hook hooksym 
        (lambda() 
         (local-set-key (kbd "C-m") 'newline-and-indent) 
        ))) 
     '(
      clojure-mode-hook 
      emacs-lisp-mode-hook 
      erlang-mode-hook 
      java-mode-hook 
      js-mode-hook 
      lisp-interaction-mode-hook 
      lisp-mode-hook 
      makefile-mode-hook 
      nxml-mode-hook 
      python-mode-hook 
      ruby-mode-hook 
      scheme-mode-hook 
      sh-mode-hook 
     )) 

只是堅持scala-mode-hook在那裏,它也會爲你工作:)

0

只需鍵入C-j它會調用newline-and-indent命令並按照您的要求進行操作。