summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lispref/text.texi6
-rw-r--r--etc/NEWS8
-rw-r--r--lisp/epa.el6
-rw-r--r--src/keyboard.c12
4 files changed, 23 insertions, 9 deletions
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index acf72340a9d..e63e634db04 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -3472,8 +3472,10 @@ function called to display help strings. These may be @code{help-echo}
properties, menu help strings (@pxref{Simple Menu Items},
@pxref{Extended Menu Items}), or tool bar help strings (@pxref{Tool
Bar}). The specified function is called with one argument, the help
-string to display. Tooltip mode (@pxref{Tooltips,,, emacs, The GNU Emacs
-Manual}) provides an example.
+string to display, which is passed through
+@code{substitute-command-keys} before being given to the function; see
+@ref{Keys in Documentation}. Tooltip mode (@pxref{Tooltips,,, emacs,
+The GNU Emacs Manual}) provides an example.
@end defvar
@node Format Properties
diff --git a/etc/NEWS b/etc/NEWS
index 4ab80f53fd7..85df71607ee 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -886,6 +886,7 @@ when signaling a file error. For example, it now reports "Permission
denied" instead of "permission denied". The old behavior was problematic
in languages like German where downcasing rules depend on grammar.
++++
** substitute-command-keys now replaces quotes.
That is, it converts documentation strings' quoting style as per the
value of the new custom variable ‘help-quote-translation’: ?‘ means
@@ -1008,6 +1009,7 @@ directory at point.
*** New macros `thread-first' and `thread-last' allow threading a form
as the first or last argument of subsequent forms.
++++
** Documentation strings now support quoting with curved single quotes
‘like-this’ in addition to the old style with grave accent and
apostrophe `like-this'. The new style looks better on today's displays.
@@ -1019,6 +1021,12 @@ key works) by typing ‘A-[’ and ‘A-]’. As described above under
string quotes.
+++
+** show-help-function's arg is converted via substitute-command-keys
+before being passed to the function. Help strings, help-echo
+properties, etc. can therefore contain command key escapes and
+quotation marks.
+
++++
** Time-related changes:
*** Time conversion functions now accept an optional ZONE argument
diff --git a/lisp/epa.el b/lisp/epa.el
index f6d60459777..a02f1e93545 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -462,14 +462,12 @@ If ARG is non-nil, mark the key."
(widget-create 'link
:notify (lambda (&rest _ignore) (abort-recursive-edit))
:help-echo
- (substitute-command-keys
- "Click here or \\[abort-recursive-edit] to cancel")
+ "Click here or \\[abort-recursive-edit] to cancel"
"Cancel")
(widget-create 'link
:notify (lambda (&rest _ignore) (exit-recursive-edit))
:help-echo
- (substitute-command-keys
- "Click here or \\[exit-recursive-edit] to finish")
+ "Click here or \\[exit-recursive-edit] to finish"
"OK")
(insert "\n\n")
(epa--insert-keys keys)
diff --git a/src/keyboard.c b/src/keyboard.c
index 91cca8e477e..5f8667586c4 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -2139,7 +2139,7 @@ show_help_echo (Lisp_Object help, Lisp_Object window, Lisp_Object object,
if (STRINGP (help) || NILP (help))
{
if (!NILP (Vshow_help_function))
- call1 (Vshow_help_function, help);
+ call1 (Vshow_help_function, Fsubstitute_command_keys (help));
help_echo_showing_p = STRINGP (help);
}
}
@@ -7720,7 +7720,8 @@ parse_menu_item (Lisp_Object item, int inmenubar)
/* Maybe help string. */
if (CONSP (item) && STRINGP (XCAR (item)))
{
- ASET (item_properties, ITEM_PROPERTY_HELP, XCAR (item));
+ ASET (item_properties, ITEM_PROPERTY_HELP,
+ Fsubstitute_command_keys (XCAR (item)));
start = item;
item = XCDR (item);
}
@@ -7781,7 +7782,12 @@ parse_menu_item (Lisp_Object item, int inmenubar)
return 0;
}
else if (EQ (tem, QChelp))
- ASET (item_properties, ITEM_PROPERTY_HELP, XCAR (item));
+ {
+ Lisp_Object help = XCAR (item);
+ if (STRINGP (help))
+ help = Fsubstitute_command_keys (help);
+ ASET (item_properties, ITEM_PROPERTY_HELP, help);
+ }
else if (EQ (tem, QCfilter))
filter = item;
else if (EQ (tem, QCkey_sequence))