2

<mouse-4>Emacs にはいくつかのカスタム スクロール関数があり、1 つのスクロール イベントが 2 つまたは<mouse-5>アクションを送信するというバグを回避するのに役立ちます。私は持っている:

(setq scroll-down-this-time t)

(defun my-scroll-down-line ()
    (interactive "@")
    (if scroll-down-this-time
        (progn
          (scroll-down-line)
          (setq scroll-down-this-time nil))
      (setq scroll-down-this-time t)))

(setq scroll-up-this-time t)

(defun my-scroll-up-line ()
    (interactive "@")
    (if scroll-up-this-time
        (progn
          (scroll-up-line)
          (setq scroll-up-this-time nil))
      (setq scroll-up-this-time t)))

(global-set-key (kbd "<mouse-4>") 'my-scroll-down-line)
(global-set-key (kbd "<mouse-5>") 'my-scroll-up-line)

(interactive "@")これは完全に機能しますが、それがまさに私が望むものではないことを除けば. これにより、マウスの下にあるバッファがスクロールされ、キーボード フォーカスが取得されます。スクロールする方法が必要ですが、キーボードのフォーカスを盗むことはありません((setq mouse-wheel-follow-mouse 't)通常のスクロールライブラリのように)。どうすればこれを達成できますか?

私は Emacs の開発版を使用しているので、新しい機能を提供することを恐れないでください。

4

1 に答える 1

1

<mouse-4>andを再定義するべきではありません<mouse-5>が、代わりに次のようにします。

(mouse-wheel-mode 1)

(defvar alternating-scroll-down-next t)
(defvar alternating-scroll-up-next t)

(defun alternating-scroll-down-line (&optional arg)
  (when alternating-scroll-down-next
    (scroll-down-line (or arg 1)))
  (setq alternating-scroll-down-next (not alternating-scroll-down-next)))

(defun alternating-scroll-up-line (&optional arg)
  (when alternating-scroll-up-next
    (scroll-up-line (or arg 1)))
  (setq alternating-scroll-up-next (not alternating-scroll-up-next)))

(setq mwheel-scroll-up-function 'alternating-scroll-up-line)
(setq mwheel-scroll-down-function 'alternating-scroll-down-line)
于 2012-07-17T23:27:01.097 に答える