Почему clojure-mode заменяет fn каким-то фигурным символом f?

#emacs #clojure

#emacs #clojure

Вопрос:

Я только начал использовать emacs starter kit amp; clojure-mode. Теперь, когда я набираю или вставляю ‘ (fn ‘ в буфер в режиме clojure, символы ‘ fn ‘ заменяются в окне слегка фигурным символом f в нижнем регистре. Буфер сохранен правильно, но это крайне раздражает, особенно после того, как я обнаружил эту функцию нелегким путем — ломая голову над чьим-то «невозможным» фрагментом кода и редактируя его до однострочного, прежде чем забрезжил свет. Есть идеи, почему он это делает, или, что более важно, как его отключить?

Комментарии:

1. Черт возьми — он делает это с помощью lambda и в режиме common-lisp. Итак, я предполагаю, что это emacs starter kit, а не clojure-mode.

2. Лично мне это действительно нравится! Это бросается в глаза визуально и делает более очевидным, что это лямбда. Я бы задал другой вопрос: как можно легко добавить эту функцию во все мои emacse?

3. @Markc: Я с тобой. Мне это нравится.

4. Лямбда, смысл которого я вижу. Отправка ‘fn’ почти, но не совсем ‘f’, не так сильно.

5. Я тоже только что обнаружил это на собственном горьком опыте. Есть ли какое-нибудь место, где мы могли бы отредактировать символ? Например, использовать вместо этого лямбда?

Ответ №1:

Это можно отключить, добавив следующую строку в свой init.el после загрузки starter-kit-lisp.

 (remove-hook 'clojure-mode-hook 'esk-pretty-fn)
  

Затем повторно загрузите Emacs, чтобы это вступило в силу.

Ответ №2:

Извините, что отвечаю на свой собственный вопрос. Это есть в starter-kit-lisp.el. Найдите строку, начинающуюся (eval-after-load 'clojure-mode .

Комментарии:

1. Мне пришлось закомментировать строки, содержащие функцию, esk-pretty-fn а также (add-hook 'clojure-mode-hook 'esk-pretty-fn) в обоих starter-kit-lisp.el и starter-kit-lisp-autoloads.el

Ответ №3:

В emacs live вы можете отключить это поведение следующим образом:

В ~/.emacs.d/packs/live/clojure-pack/config/clojure-conf.el прокомментируйте эти строки:

 ;;(eval-after-load 'clojure-mode
;;  '(font-lock-add-keywords
;;    'clojure-mode `(("(\(fn\)[[[:space:]]"
;;                     (0 (progn (compose-region (match-beginning 1)
;;                                               (match-end 1) "λ")
;;                               nil))))))
;;
;;(eval-after-load 'clojure-mode
;;  '(font-lock-add-keywords
;;    'clojure-mode `(("\(#\)("
;;                     (0 (progn (compose-region (match-beginning 1)
;;                                               (match-end 1) "ƒ")
;;                               nil))))))
;;
;;(eval-after-load 'clojure-mode
;;  '(font-lock-add-keywords
;;    'clojure-mode `(("\(#\){"
;;                     (0 (progn (compose-region (match-beginning 1)
;;                                               (match-end 1) "∈")
;;                               nil))))))
  

Перезапустите emacs, и больше никаких причудливых символов не будет.