#emacs #elisp
#emacs #elisp
Вопрос:
Новичок в elisp и нуждается в помощи.
У меня есть простая функция, которая выводит docview, когда фрейм разделен на два окна:
(defun noteview-pagedown ()
(interactive)
(with-selected-window (other-window-for-scrolling)
(doc-view-scroll-up-or-next-page nil)))
(defconst noteview-mode-keys
'(("C-M-v" . noteview-pagedown)))
; lifted from android-mode.el
(defvar noteview-mode-map (make-sparse-keymap))
(add-hook 'noteview-mode-hook
(lambda ()
(dolist (spec noteview-mode-keys)
(define-key
noteview-mode-map
(read-kbd-macro (concat noteview-mode-key-prefix " " (car spec)))
(cdr spec)))))
В левом окне есть текстовый документ с определением этой функции. В правом окне открыт PDF-файл с docview.
Когда я нажимаю C-M-v, она выполняется правильно в первый раз, затем неправильно во второй раз. Кажется, что она попеременно перемещает страницу вниз, а затем страницу вверх, поэтому я никогда не перехожу к следующей странице.
Когда я запускаю эту функцию в интерактивном режиме с помощью M-x noteview-pagedown, она работает.
Любые подсказки о том, почему это не будет работать с макроса клавиатуры, были бы оценены.
Комментарии:
1. Какой результат будет
C-h k C-M-v
после выполнения приведенного выше кода? Кроме того,noteview-mode-key-prefix
где-то определено?
Ответ №1:
Вы определили
noteview-mode-map
, но нет
режим просмотра заметок
. Я не убежден, что эта зависшая карта может когда-либо что-либо делать, если только вы не определили второстепенный режим где-либо еще.
В любом случае это не должно быть второстепенным режимом, вы, похоже, хотите заставить C-M-v прокручивать другое окно, даже когда оно показывает буфер просмотра документа?
(defun my-scroll-up (arg)
(interactive "P")
(with-selected-window (other-window-for-scrolling)
(if (eq 'doc-view-mode major-mode)
(doc-view-scroll-up-or-next-page arg)
(scroll-up arg))))
(define-key (current-global-map) [remap scroll-up] 'my-scroll-up)
Ответ №2:
Я ничего не знаю о doc-view, но я только что сделал C-h f doc-view-scroll-up-or-next-page
, и, кажется, там говорится, что для перехода на следующую страницу у вас должно быть значение, отличное от нуля doc-view-continuous
. Так ли это? Вот документ:
Scroll page up ARG lines if possible, else goto next page.
When `doc-view-continuous' is non-nil, scrolling upward
at the bottom edge of the page moves to the next page.
Otherwise, goto next page only on typing SPC (ARG is nil).
HTH.