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)))))
左窗口有一个定义了此功能的文本doc。右侧窗口有一个pdf,docview打开。
当我按下C-M-v时,第一次正确运行,第二次不正确。它似乎是一个页面向下然后是一个页面向上交替,所以我永远不会进入下一页。
当我使用M-x noteview-pagedown以交互方式运行此功能时,它可以正常工作。
任何关于为什么这不能通过键盘宏工作的提示将不胜感激。
答案 0 :(得分:1)
你已经定义了一个
noteview模式映射
,但没有
noteview模式
。我不相信这个悬垂的地图可以做任何事情,除非你已经定义了其他的小模式。
这在任何情况下都不应该是次要模式,你似乎想让C-M-v滚动其他窗口,即使它显示了一个doc-view缓冲区?
(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)
答案 1 :(得分:0)
我对doc-view一无所知,但我只是做了C-h f doc-view-scroll-up-or-next-page
,而且似乎要说为了让它移动到下一页,你必须有非零doc-view-continuous
。是这样的吗?这是doc:
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。