当绑定到keymap时,Emacs函数的行为不同



第一次使用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交互运行这个函数时,它工作了。

如果你能告诉我为什么这不能在键盘宏中工作,我将不胜感激。

您已经定义了

noteview-mode-map

,但没有

noteview-mode

。我不相信这个悬空映射能做任何事情,除非你在其中定义了次要模式else

这在任何情况下都不应该是一个小模式,你似乎想让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)

我对doc-view一无所知,但我只是做了C-h f doc-view-scroll-up-or-next-page,它似乎说,为了让它移动到下一页,你必须有非nil 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 .

最新更新