emacs-which-key icon indicating copy to clipboard operation
emacs-which-key copied to clipboard

Paging hint suggests C-h even when it's bound under given prefix and won't work

Open crzcrz opened this issue 10 months ago • 1 comments

I believe the current implementation of which-key--next-page-hint could be improved. There are two issues with it.

  1. If help-char (C-h) is bound under the current prefix, then pressing C-h will invoke the binding and not which-key-C-h-dispatch, while the hint still reads [C-h paging/help],
  2. no hint is displayed for C-h- prefix at all, even if we have manually bound some key to which-key-C-h-dispatch there.

I've made a crude prototype that attempts to display a hint with keys that would actually work under the given prefix.

(defun which-key--next-page-hint (prefix-keys)
  "Return string for next page hint."
  (when which-key-use-C-h-commands
    (let* ((user-paging-key (concat prefix-keys " " which-key-paging-key))
           (paging-key (concat prefix-keys " " (help-key)))
           (help-prefix (equal (vector help-char)
                               (vconcat (kbd prefix-keys))))
           (keys '()))
      (when (eq 'which-key-C-h-dispatch
                (key-binding (kbd user-paging-key)))
        (push which-key-paging-key keys))
      (unless help-prefix
        (push "?" keys)
        (push "<f1>" keys)
        (unless (key-binding (kbd paging-key))
          (push (help-key) keys)))
      (when keys
        (which-key--propertize (format "[%s%spaging/help]"
                                       (string-join keys " or ")
                                       which-key-separator)
                               'face 'which-key-note-face)))))

Now we get nice hints:

  • C-x- -> [C-h or <f1> or ? -> paging/help] as C-h is not bound under this prefix in our configuration,
  • C-w--> [<f1> or ? -> paging/help] as C-h is bound under this prefix in our configuration,
  • C-h- -> [<f5> -> paging/help] as we have bound C-h <f5> to which-key-C-h-dispatch in our configuration.

One remaining issue with my prototype is that a hint will be still displayed for evil prefixes while it shouldn't, as it is not possible to make any binding to which-key-C-h-dispatch there.

crzcrz avatar Mar 30 '24 18:03 crzcrz

Hi, I'm happy to consider a PR for this. I think it makes sense.

justbur avatar Apr 09 '24 18:04 justbur