2011-11-11 48 views
0

elisp是新手,需要帮助。绑定到键盘映射时,emacs功能的行为不同

我有一个页面下来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))))) 

左侧窗口中有这个函数文本文档。右边的窗口中有docview打开。

当我按下C-M-v时,它第一次正确运行,然后第二次正确运行。它似乎做了一个页面下来,然后一个页面交替,所以我从来没有进入下一页。

当我使用M-x noteview-pagedown以交互方式运行此功能时,它可以工作。

任何提示,为什么这不会从键盘宏工作,将不胜感激。

+0

运行上述代码后,“C-h k C-M-v”的输出是什么?另外,'noteview-mode-key-prefix'是在什么地方定义的? –

回答

1

您已经定义了一个

noteview模式地图

,但没有

noteview模式

。我不相信这个悬而未决的地图可以做任何事情,除非你在其他地方定义了小模式。

这在任何情况下都不应该是次要模式,即使它显示文档视图缓冲区,您似乎也想让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) 
0

我一无所知文档视图,但我只是做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。