paredit сопоставление фигурных скобок в swank-clojure repl

Я использую emacs 24 в Windows 7 и установил clojure-mode от technomancy вместе с бета-версией paredit 23. Я загружаю исходный файл из своего проекта leiningen и получаю ответ, используя clojure-jack-in. Проблема в том, что хотя paredit включен как в режиме Clojure, так и в repl, фигурные скобки не сопоставляются в repl только в исходных файлах.

Как я могу заставить его соответствовать фигурным скобкам в repl?


person pventura    schedule 22.12.2011    source источник


Ответы (2)


Я добавил следующее в свой файл .emacs, который помогает мне (я не изобретал это сам, это фрагмент, который я нашел где-то в Интернете, но я не могу вспомнить, где):

(defun setup-slime-repl-paredit ()
  (define-key slime-repl-mode-map
    (kbd "DEL") 'paredit-backward-delete)
  (define-key slime-repl-mode-map
    (kbd "{") 'paredit-open-curly)
  (define-key slime-repl-mode-map
    (kbd "}") 'paredit-close-curly)
  (modify-syntax-entry ?\{ "(}")
  (modify-syntax-entry ?\} "){")
  (modify-syntax-entry ?\[ "(]")
  (modify-syntax-entry ?\] ")[")
  (modify-syntax-entry ?~ "'   ")
  (modify-syntax-entry ?, "    ")
  (modify-syntax-entry ?^ "'")
  (modify-syntax-entry ?= "'"))

(add-hook 'slime-repl-mode-hook 'setup-slime-repl-paredit)

(add-hook 'slime-repl-mode-hook       'enable-paredit-mode)
person Gert    schedule 22.12.2011

Возьмите пакет durendal от Фила Хагельберга, который предоставляет некоторые улучшения для слизи, специфичные для clojure, а затем попробуйте этот фрагмент кода:

(require 'durendal)
(durendal-enable t)

(defun slime-clojure-repl-setup ()
  (when (string-equal (slime-lisp-implementation-name) "clojure")
    (set-syntax-table clojure-mode-syntax-table)
    (setq lisp-indent-function 'clojure-indent-function)))

(add-hook 'slime-repl-mode-hook 'slime-clojure-repl-setup)

В будущем Фил может включить функциональность durendal в сам swank-clojure в качестве дополнительной полезной нагрузки lisp, после чего вышеперечисленное станет ненужным.

person sanityinc    schedule 22.12.2011
comment
Я попытался установить durendal, который затем потребовал, чтобы я установил слизь и слизь-репл. Даже после установки их всех и добавления кода выше он по-прежнему не выполнял сопоставление фигурных скобок. - person pventura; 23.12.2011
comment
Странный. Я полагаю, вы перезапустили свой Emacs? Durendal предоставляет точно такую ​​же функцию ловушки, которую @gertalot предоставил выше. Но поскольку у вас все равно есть это решение, все готово. Для справки, специфичный для Clojure фрагмент моей конфигурации emacs находится здесь: github.com/purcell/emacs.d/blob/master/init-clojure.el - person sanityinc; 23.12.2011
comment
@sanityinc - действительно ли мой фрагмент из Дюрандаля? Я не знаю, где я это нашел, но если это так, я отредактирую и добавлю кредит. - person Gert; 23.12.2011
comment
@gertalot Может быть, но я думаю, что это был фрагмент, который какое-то время плавал в конфигурациях Emacs разных людей, прежде чем был включен в durendal. - person sanityinc; 23.12.2011
comment
Да, я перезапускал emacs каждый раз после изменений. Я тоже подумал, что это странно. - person pventura; 23.12.2011