diff options
| author | Zajcev Evgeny <zevlg@yandex.ru> | 2020-01-27 15:49:46 +0300 |
|---|---|---|
| committer | Eli Zaretskii <eliz@gnu.org> | 2020-02-07 12:00:14 +0200 |
| commit | 63fd6c9ef050f8077823b3a45c841dc255257f3b (patch) | |
| tree | eeb5071fe9162229d658d46a238b2fe95af642c3 /src | |
| parent | c4be80112556e06bd7e92138e44051cc8c62e709 (diff) | |
| download | emacs-63fd6c9ef050f8077823b3a45c841dc255257f3b.tar.gz | |
Support for (box . SIZE) 'cursor-type'
This allows control of the minimum size of a masked image under
which the box cursor becomes hollow.
* buffer.c (cursor-type): Add commentary about (box . SIZE)
'cursor-type'.
* xdisp.c (get_specified_cursor_type): Check for 'cursor-type'
of the form (box . SIZE).
(get_window_cursor_type): Check masked image size for
(box . SIZE) 'cursor-type'.
* doc/emacs/display.texi (Cursor Display):
* doc/emacs/display.texi (Cursor Parameters): Add description
of (box . SIZE) 'cursor-type'.
* etc/NEWS: Mention the new (box . SIZE) 'cursor-type'.
Diffstat (limited to 'src')
| -rw-r--r-- | src/buffer.c | 3 | ||||
| -rw-r--r-- | src/xdisp.c | 28 |
2 files changed, 17 insertions, 14 deletions
diff --git a/src/buffer.c b/src/buffer.c index 5c65d4d4d19..cc7d4e4817c 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -6247,6 +6247,9 @@ Values are interpreted as follows: t use the cursor specified for the frame nil don't display a cursor box display a filled box cursor + (box . SIZE) display a filled box cursor, but make it + hollow if cursor is under masked image larger than + SIZE pixels in either dimension. hollow display a hollow box cursor bar display a vertical bar cursor with default width (bar . WIDTH) display a vertical bar cursor with width WIDTH diff --git a/src/xdisp.c b/src/xdisp.c index 68a504fb2d4..038b8e53669 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -30741,14 +30741,6 @@ get_specified_cursor_type (Lisp_Object arg, int *width) return BAR_CURSOR; } - if (CONSP (arg) - && EQ (XCAR (arg), Qbar) - && RANGED_FIXNUMP (0, XCDR (arg), INT_MAX)) - { - *width = XFIXNUM (XCDR (arg)); - return BAR_CURSOR; - } - if (EQ (arg, Qhbar)) { *width = 2; @@ -30756,11 +30748,16 @@ get_specified_cursor_type (Lisp_Object arg, int *width) } if (CONSP (arg) - && EQ (XCAR (arg), Qhbar) && RANGED_FIXNUMP (0, XCDR (arg), INT_MAX)) { *width = XFIXNUM (XCDR (arg)); - return HBAR_CURSOR; + + if (EQ (XCAR (arg), Qbox)) + return FILLED_BOX_CURSOR; + else if (EQ (XCAR (arg), Qbar)) + return BAR_CURSOR; + else if (EQ (XCAR (arg), Qhbar)) + return HBAR_CURSOR; } /* Treat anything unknown as "hollow box cursor". @@ -30898,12 +30895,15 @@ get_window_cursor_type (struct window *w, struct glyph *glyph, int *width, struct image *img = IMAGE_OPT_FROM_ID (f, glyph->u.img_id); if (img != NULL && IMAGEP (img->spec)) { - /* Arbitrarily, interpret "Large" as >32x32 and >NxN + /* Interpret "large" as >SIZExSIZE and >NxN + where SIZE is the value from cursor-type in form (box . SIZE), where N = size of default frame font size. - This should cover most of the "tiny" icons people may use. */ + So, setting cursor-type to (box . 32) should cover most of + the "tiny" icons people may use. */ if (!img->mask - || img->width > max (32, WINDOW_FRAME_COLUMN_WIDTH (w)) - || img->height > max (32, WINDOW_FRAME_LINE_HEIGHT (w))) + || (CONSP (BVAR (b, cursor_type)) + && img->width > max (*width, WINDOW_FRAME_COLUMN_WIDTH (w)) + && img->height > max (*width, WINDOW_FRAME_LINE_HEIGHT (w)))) cursor_type = HOLLOW_BOX_CURSOR; } } |
