简体   繁体   中英

Redefining ENTER key in Emacs

I don't know elisp, but I'm trying to do something like the following:

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

Goal is to call the two functions each time I hit the ENTER key. How do I actually do this?

I do essentially this in so many modes that I've squashed them all together:

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

Just stick scala-mode-hook in there somewhere and it'll work for you too :)

You need an (interactive) form after the lambda in your define-key .

EDIT:

To be clear, the inner form should look like:

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

In hook you can use local-set-key, for example

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

although, maybe it will be easier to use something like standard newline-and-indent?

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

只需输入Cj,它就会调用newline-and-indent命令并完全按照你的要求执行操作。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM