Support tooltips for fringe indicators
* src/xdisp.c (note_fringe_highlight): New function. (note_mouse_highlight): Call it when the mouse is on the fringes. * src/frame.c (syms_of_frame) <left-fringe-help> <right-fringe-help>: DEFSYM them. * etc/NEWS: * doc/lispref/text.texi (Special Properties): * doc/lispref/display.texi (Other Display Specs): Document the new properties. * etc/TODO: Remove the todo item about this.
This commit is contained in:
parent
8b210a636f
commit
5734047b81
6 changed files with 80 additions and 6 deletions
|
@ -5501,6 +5501,10 @@ specification. The optional @var{face} specifies the face whose
|
|||
colors are to be used for the bitmap display. @xref{Fringe Bitmaps},
|
||||
for the details.
|
||||
|
||||
It also possible to add context help for fringe bitmaps through the
|
||||
@code{show-help-function} mechanism by using @code{left-fringe-help} or
|
||||
@code{right-fringe-help} text properties (@pxref{Special Properties}).
|
||||
|
||||
@item (space-width @var{factor})
|
||||
This display specification affects all the space characters within the
|
||||
text that has the specification. It displays all of these spaces
|
||||
|
|
|
@ -3663,6 +3663,15 @@ 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 left-fringe-help
|
||||
@itemx right-fringe-help
|
||||
@cindex help-echo text on fringes
|
||||
If any visible text of a buffer line has @code{left-fringe-help} or
|
||||
@code{right-fringe-help} string text property defined on it, then the
|
||||
string will be displayed for a corresponding line's fringe through
|
||||
@code{show-help-function} (@pxref{Help display}). This is useful when
|
||||
used together with fringe cursors and bitmaps (@pxref{Fringes}).
|
||||
|
||||
@item keymap
|
||||
@cindex keymap of character
|
||||
@kindex keymap @r{(text property)}
|
||||
|
|
6
etc/NEWS
6
etc/NEWS
|
@ -1847,6 +1847,12 @@ the handler code without unwinding the stack, such that we can record
|
|||
the backtrace and other dynamic state at the point of the error. See
|
||||
the Info node "(elisp) Handling Errors".
|
||||
|
||||
+++
|
||||
** Tooltips on fringes.
|
||||
It is now possible to provide tooltips on fringes by adding special text
|
||||
properties. See the "Special Properties" Info node in the Emacs Lisp
|
||||
Reference Manual.
|
||||
|
||||
+++
|
||||
** New 'pop-up-frames' action alist entry for 'display-buffer'.
|
||||
This has the same effect as the variable of the same name and takes
|
||||
|
|
4
etc/TODO
4
etc/TODO
|
@ -172,10 +172,6 @@ Change them to use report-emacs-bug.
|
|||
**** lm-report-bug
|
||||
**** tramp-bug
|
||||
**** c-submit-bug-report
|
||||
|
||||
** Allow fringe indicators to display a tooltip
|
||||
Provide a help-echo property?
|
||||
|
||||
** Add a defcustom that supplies a function to name numeric backup files
|
||||
Like 'make-backup-file-name-function' for non-numeric backup files.
|
||||
|
||||
|
|
|
@ -6383,6 +6383,7 @@ syms_of_frame (void)
|
|||
DEFSYM (Qchild_frame_border_width, "child-frame-border-width");
|
||||
DEFSYM (Qinternal_border_width, "internal-border-width");
|
||||
DEFSYM (Qleft_fringe, "left-fringe");
|
||||
DEFSYM (Qleft_fringe_help, "left-fringe-help");
|
||||
DEFSYM (Qline_spacing, "line-spacing");
|
||||
DEFSYM (Qmenu_bar_lines, "menu-bar-lines");
|
||||
DEFSYM (Qtab_bar_lines, "tab-bar-lines");
|
||||
|
@ -6390,6 +6391,7 @@ syms_of_frame (void)
|
|||
DEFSYM (Qname, "name");
|
||||
DEFSYM (Qright_divider_width, "right-divider-width");
|
||||
DEFSYM (Qright_fringe, "right-fringe");
|
||||
DEFSYM (Qright_fringe_help, "right-fringe-help");
|
||||
DEFSYM (Qscreen_gamma, "screen-gamma");
|
||||
DEFSYM (Qscroll_bar_background, "scroll-bar-background");
|
||||
DEFSYM (Qscroll_bar_foreground, "scroll-bar-foreground");
|
||||
|
|
61
src/xdisp.c
61
src/xdisp.c
|
@ -35730,6 +35730,59 @@ note_mode_line_or_margin_highlight (Lisp_Object window, int x, int y,
|
|||
}
|
||||
|
||||
|
||||
/* Take proper action when mouse has moved to the window WINDOW, with
|
||||
window-local x-position X and y-position Y. This is only used for
|
||||
displaying user-defined fringe indicator help-echo messages. */
|
||||
|
||||
static void
|
||||
note_fringe_highlight (Lisp_Object window, int x, int y,
|
||||
enum window_part part)
|
||||
{
|
||||
if (!NILP (help_echo_string))
|
||||
return;
|
||||
|
||||
/* Find a message to display through the help-echo mechanism whenever
|
||||
the mouse hovers over a fringe indicator. Both text properties and
|
||||
overlays have to be checked. */
|
||||
|
||||
/* Check the text property symbol to use. */
|
||||
Lisp_Object sym;
|
||||
if (part == ON_LEFT_FRINGE)
|
||||
sym = Qleft_fringe_help;
|
||||
else
|
||||
sym = Qright_fringe_help;
|
||||
|
||||
/* Translate windows coordinates into a vertical window position. */
|
||||
int hpos, vpos, area;
|
||||
struct window *w = XWINDOW (window);
|
||||
x_y_to_hpos_vpos (w, x, y, &hpos, &vpos, 0, 0, &area);
|
||||
|
||||
/* Get to the first glyph of a text row based on the vertical position
|
||||
of the fringe. */
|
||||
struct glyph *glyph = MATRIX_ROW_GLYPH_START(w->current_matrix, vpos);
|
||||
int glyph_num = MATRIX_ROW_USED(w->current_matrix, vpos);
|
||||
|
||||
/* Check all glyphs while looking for fringe tooltips. */
|
||||
|
||||
/* NOTE: iterating over glyphs can only find text properties coming
|
||||
from visible text. This means that zero-length overlays and
|
||||
invisibile text are NOT inspected. */
|
||||
for (;glyph_num; glyph_num--, glyph++)
|
||||
{
|
||||
Lisp_Object pos = make_fixnum(glyph->charpos);
|
||||
Lisp_Object help_echo = Qnil;
|
||||
|
||||
if (STRINGP(glyph->object) || BUFFERP(glyph->object))
|
||||
help_echo = get_char_property_and_overlay (pos, sym, glyph->object, NULL);
|
||||
|
||||
if (STRINGP (help_echo))
|
||||
{
|
||||
help_echo_string = help_echo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* EXPORT:
|
||||
Take proper action when the mouse has moved to position X, Y on
|
||||
frame F with regards to highlighting portions of display that have
|
||||
|
@ -35957,8 +36010,12 @@ note_mouse_highlight (struct frame *f, int x, int y)
|
|||
}
|
||||
else
|
||||
cursor = FRAME_OUTPUT_DATA (f)->nontext_cursor;
|
||||
else if (part == ON_LEFT_FRINGE || part == ON_RIGHT_FRINGE
|
||||
|| part == ON_VERTICAL_SCROLL_BAR
|
||||
else if (part == ON_LEFT_FRINGE || part == ON_RIGHT_FRINGE)
|
||||
{
|
||||
cursor = FRAME_OUTPUT_DATA (f)->nontext_cursor;
|
||||
note_fringe_highlight (window, x, y, part);
|
||||
}
|
||||
else if (part == ON_VERTICAL_SCROLL_BAR
|
||||
|| part == ON_HORIZONTAL_SCROLL_BAR)
|
||||
cursor = FRAME_OUTPUT_DATA (f)->nontext_cursor;
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue