Subject: [PATCH] Fix keybinding support for *-auto-reveal

From: Paul Nelson <[email-masked]>
Date: Fri, 20 Sep 2024 16:52:48 +0200

Hello,

I just realized that my earlier patch
8db1e90b6d25beb72b5ebbc706b6def64794dcf8 broke key-binding support for
auto-reveal (i.e., using left/right rather than C-f/b to open previews
and folds).  The attached patch remedies this.  Details below.

Thanks, best,

Paul

---

The user option *-auto-reveal-commands consists of both functions and
lists for keybinding:

(defcustom preview-auto-reveal-commands
  '((key-binding [left])
    (key-binding [right])
    backward-char
    forward-char
    pop-to-mark-command
    undo)
  "List of commands that may cause a preview to be revealed.
This list is consulted by the default value of `preview-auto-reveal'."
  :type '(repeat (choice (function :tag "Function")
                         (sexp :tag "Key binding"))))

When we call (apply #'preview-arrived-via
preview-auto-reveal-commands), the lists for keybinding are not
evaluated, so we never pick up the command to which left/right are
bound.  The attach patch remedies this issue by first evaluating any
keybinding.

In retrospect, a more uniform approach would have been to have all
elements of *-auto-reveal-commands be "something that gets evaluated",
i.e.,

(defcustom preview-auto-reveal-commands
  '((key-binding [left])
    (key-binding [right])
    #'backward-char
    #'forward-char
    #'pop-to-mark-command
    #'undo)
    ...)

This would allow a more uniform default implementation of
*-auto-reveal.  Given that the docstring for *-auto-reveal-commands
says that it should consist of either functions or key bindings, I
think the proposed solution is acceptable.  It's also a bit simpler
for me, since I have a couple packages that add functions (rather than
function symbols) to *-auto-reveal-commands.