Переопределение клавиши ВВОД в Emacs - PullRequest
4 голосов
/ 29 августа 2010

Я не знаю, elisp, но я пытаюсь сделать что-то вроде следующего:

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

Цель - вызывать две функции каждый раз, когда я нажимаю клавишу ВВОД. Как мне на самом деле это сделать?

Ответы [ 4 ]

8 голосов
/ 29 августа 2010

Я делаю это по существу во многих режимах, что я их всех сплющил:

(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 и это будет работать и для вас:)

7 голосов
/ 29 августа 2010

Вам нужна форма (interactive) после lambda в вашем define-key.

РЕДАКТИРОВАТЬ:

Чтобы быть понятным, внутренняя форма должна выглядетькак:

(lambda ()
  (interactive)
  (scala-newline)
  (scala-indent-line))
2 голосов
/ 29 августа 2010

В хуке вы можете использовать local-set-key, например

(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)))
0 голосов
/ 30 августа 2010

Просто введите Cj , он вызовет команду newline-and-indent и сделает именно то, что вы просите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...