* src/keyboard.c (help_echo_substitute_command_keys): New function.
(help_echo_echo, parse_menu_item): Use it.
(syms_of_keyboard): Define Qhelp_echo_inhibit_substitution.
* doc/lispref/text.texi (Special Properties), etc/NEWS: Document
the effect of 'help-echo-inhibit-substitution'.
@anchor{Text help-echo}
If text has a string as its @code{help-echo} property, then when you
move the mouse onto that text, Emacs displays that string in the echo
-area, or in the tooltip window (@pxref{Tooltips}).
+area, or in the tooltip window (@pxref{Tooltips}), after passing it
+through @code{substitute-command-keys}.
If the value of the @code{help-echo} property is a function, that
function is called with three arguments, @var{window}, @var{object} and
This feature is used in the mode line and for other active text.
+@item help-echo-inhibit-substitution
+@cindex help-echo text, avoid command-key substitution
+@kindex help-echo-inhibit-substitution @r{(text property)}
+If the first character of a @code{help-echo} string has a
+non-@code{nil} @code{help-echo-inhibit-substitution} property, then it
+is displayed as-is by @code{show-help-function}, without being passed
+through @code{substitute-command-keys}.
+
@item keymap
@cindex keymap of character
@kindex keymap @r{(text property)}
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, which is passed through
-@code{substitute-command-keys} before being given to the function; see
+@code{substitute-command-keys} before being given to the function,
+unless the help string has a non-@code{nil}
+@code{help-echo-inhibit-substitution} property on its first character; see
@ref{Keys in Documentation}. See the code of Tooltip mode
(@pxref{Tooltips,,, emacs, The GNU Emacs Manual}) for an example of a
mode that uses @code{show-help-function}.
+++
** 'define-globalized-minor-mode' now takes BODY forms.
++++
+** New text property 'help-echo-inhibit-substitution'.
+Setting this on the first character of a help string disables
+conversions via 'substitute-command-keys'.
+
\f
* Changes in Emacs 27.1 on Non-Free Operating Systems
return c;
}
+/* Substitute key descriptions and quotes in HELP, unless its first
+ character has a non-nil help-echo-inhibit-substitution property. */
+
+static Lisp_Object
+help_echo_substitute_command_keys (Lisp_Object help)
+{
+ if (STRINGP (help)
+ && SCHARS (help) > 0
+ && !NILP (Fget_text_property (make_fixnum (0),
+ Qhelp_echo_inhibit_substitution,
+ help)))
+ return help;
+
+ return Fsubstitute_command_keys (help);
+}
+
/* Display the help-echo property of the character after the mouse pointer.
Either show it in the echo area, or call show-help-function to display
it by other means (maybe in a tooltip).
if (STRINGP (help) || NILP (help))
{
if (!NILP (Vshow_help_function))
- call1 (Vshow_help_function, Fsubstitute_command_keys (help));
+ call1 (Vshow_help_function, help_echo_substitute_command_keys (help));
help_echo_showing_p = STRINGP (help);
}
}
if (CONSP (item) && STRINGP (XCAR (item)))
{
ASET (item_properties, ITEM_PROPERTY_HELP,
- Fsubstitute_command_keys (XCAR (item)));
+ help_echo_substitute_command_keys (XCAR (item)));
start = item;
item = XCDR (item);
}
{
Lisp_Object help = XCAR (item);
if (STRINGP (help))
- help = Fsubstitute_command_keys (help);
+ help = help_echo_substitute_command_keys (help);
ASET (item_properties, ITEM_PROPERTY_HELP, help);
}
else if (EQ (tem, QCfilter))
/* Tool-bars. */
DEFSYM (QCimage, ":image");
DEFSYM (Qhelp_echo, "help-echo");
+ DEFSYM (Qhelp_echo_inhibit_substitution, "help-echo-inhibit-substitution");
DEFSYM (QCrtl, ":rtl");
staticpro (&item_properties);