emacs-which-key
emacs-which-key copied to clipboard
Paging hint suggests C-h even when it's bound under given prefix and won't work
I believe the current implementation of which-key--next-page-hint
could be improved. There are two issues with it.
- If
help-char
(C-h
) is bound under the current prefix, then pressingC-h
will invoke the binding and notwhich-key-C-h-dispatch
, while the hint still reads [C-h paging/help], - no hint is displayed for
C-h-
prefix at all, even if we have manually bound some key towhich-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] asC-h
is not bound under this prefix in our configuration, -
C-w-
-> [<f1> or ? -> paging/help] asC-h
is bound under this prefix in our configuration, -
C-h-
-> [<f5> -> paging/help] as we have boundC-h <f5>
towhich-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.
Hi, I'm happy to consider a PR for this. I think it makes sense.