5

Bob Glickstein は、"Writing GNU Emacs Extensions" の第 3 章で、スクロール機能をアドバイスする方法について説明しています。(彼はそれらを可逆にすることを提案しているので、スクロールする前に状態を保存する必要があります。)

たとえば、スクロールアップコマンドの場合、このアドバイスは次のように行われます

(defadvice scroll-up-command (before reversibilate activate compile)
   "If it wants to be reversible, it must save the former state."
   (save-before-scroll))

良い。もちろん、すべてのスクロール コマンドに対してこれを行う必要があります。では、それらを順番に並べて、まとめてアドバイスしていきたいと思います。

(setq reversible-scroll-commands 
  [scroll-up-command 
   scroll-down-command 
   scroll-left-command 
   scroll-right-command])

(ベクトルを使用して 5 つの引用符を保存します。)

しかし今、私は立ち往生しています。

(mapcar 
  (lambda (fun-name)
    (defadvice fun-name (before reversibilate activate compile)
       "If it wants to be reversible, it must save the former state."
       (save-before-scroll)))
   reversible-scroll-commands)

defadvice はマクロであり、fun-name を評価しないため、(存在しない) 関数 fun-name を 4 回アドバイスします。

それを行う方法はありますか?

(私は Emacs 24 を使用しています)

4

1 に答える 1

3

未テスト:

(mapcar 
  (lambda (fun-name)
    (eval `(defadvice ,fun-name (before reversibilate activate compile)
             "If it wants to be reversible, it must save the former state."
             (save-before-scroll))))
   reversible-scroll-commands)

elispマニュアルのバッククォートに関するセクションを参照してください。

于 2012-07-05T09:03:32.997 に答える