我不知道的elisp,但我試圖做類似如下:重新定義ENTER鍵在Emacs
(add-hook
'scala-mode-hook
(lambda()
(define-key scala-mode-map (kbd "RET") (lambda()
(scala-newline)
(scala-indent-line)))))
目標是每次我打回車鍵來調用這兩個函數。我該如何做到這一點?
我不知道的elisp,但我試圖做類似如下:重新定義ENTER鍵在Emacs
(add-hook
'scala-mode-hook
(lambda()
(define-key scala-mode-map (kbd "RET") (lambda()
(scala-newline)
(scala-indent-line)))))
目標是每次我打回車鍵來調用這兩個函數。我該如何做到這一點?
你需要在你的define-key
後lambda
的(interactive)
形式。
編輯:
需要明確的是,內部形式應該是這樣的:
(lambda()
(interactive)
(scala-newline)
(scala-indent-line))
在鉤,你可以使用本地設置鍵,例如
(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)))
我基本上做這在這麼多的模式,我已經擠壓它們放在一起:
(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
在那裏,它也會爲你工作:)
只需鍵入C-j它會調用newline-and-indent
命令並按照您的要求進行操作。