Сага о пользе исходников

Jan 14, 2016 14:02

Как известно, в emacs'е есть всё, кроме хорошего текстового редактора. А в самом лучшем текстовом редакторе - ViM'е нет и сотой доли возможностей emacs'а. Эта проблема имеет тривиальное решение в виде расширений емакса, добавляющие в него функционал Вима. В частности - evil-mode.
Поставил я себе такой "плагин" и живу-радуюсь. Но одно омрачило мою радость - отсутствие прокрутки полстраницы вверх по Ctrl-u. Вниз - по Ctrl-d пожалуйста, а обратно нет. Мелочь, а неприятно...
Гугл ответа не дал. Пришлось искать самому. В итоге в файле evil-maps.el нахожу странные строчки:

(when evil-want-C-u-scroll
(define-key evil-motion-state-map (kbd "C-u") 'evil-scroll-up))

Замечу, что кейбиндинг для Ctrl-d в этом файле безусловный. Странно.
Переменная evil-want-C-u-scroll в данном случае явно равна
nil
 .
Придётся её искать. Обнаруживается она в файле evil-vars.el и выглядит так:

nil(defcustom evil-want-C-u-scroll nil
"Whether \"C-u\" scrolls like in Vim."
:type 'boolean
:group 'evil
:set #'(lambda (sym value)
(set-default sym value)
(when (boundp 'evil-motion-state-map)
(cond
((and (not value)
(eq (lookup-key evil-motion-state-map (kbd "C-u"))
'evil-scroll-up))
(define-key evil-motion-state-map (kbd "C-u") nil))
((and value
(not (lookup-key evil-motion-state-map (kbd "C-u"))))
(define-key evil-motion-state-map (kbd "C-u") 'evil-scroll-up))))))

Я даже думать не стал, что тут к чему и просто поменял nil на t. Сохранил, перезапустил и... ноль результата. Впрочем это было ожидаемо, потому что емакс грузит не исходные тексты, а компилированные библиотеки (файлы *.elc). После компиляции и перезапуска сакраментальная клавиатурная комбинация заработала, как надо.
Что дальше? Правильно, откатываемся назад (чтоб при обновлениях опять не ломать голову над этой проблемой) и в своём файле инициализации (у меня это не .emacs, а init.el, где я гружу посторонние модули) после подгрузки evil'а вставляем строчку:

(define-key evil-motion-state-map (kbd "C-u") 'evil-scroll-up)

Работает!
Проблема решена, польза обладания исходниками доказана и остаётся только один вопрос - почему привязка к клавиатурной комбинации у прокрутки вниз безусловна, а у прокрутки вверх - условная и по умолчанию не работает?
Но этого я пока ещё не понял. Тут надо копать...

*nix, lisp

Previous post Next post
Up