# HG changeset patch # User Richard M. Stallman # Date 1030473901 0 # Node ID 9e33c7ce63795fed81fadf7c95dcaecb78233181 # Parent 004e8a6d7bd59adac2788afec4f997506ffbc01e (x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and FRAME_BLINK_OFF_CURSOR_WIDTH using defaults and Vblink_cursor_alist. (Vblink_cursor_alist): New variable. (syms_of_xfns): Initialize and defvar it. (x_specified_cursor_type): Recognize Qbox for filled box. Exceptions are hollow boxes. (Qbox, Qhollow): New variables. (syms_of_xfns): Initialize and staticpro them. diff -r 004e8a6d7bd5 -r 9e33c7ce6379 src/xfns.c --- a/src/xfns.c Tue Aug 27 18:42:48 2002 +0000 +++ b/src/xfns.c Tue Aug 27 18:45:01 2002 +0000 @@ -183,9 +183,12 @@ Lisp_Object Vx_pixel_size_width_font_regexp; +/* How to blink the cursor off. */ +Lisp_Object Vblink_cursor_alist; + Lisp_Object Qauto_raise; Lisp_Object Qauto_lower; -Lisp_Object Qbar, Qhbar; +Lisp_Object Qbar, Qhbar, Qbox, Qhollow; Lisp_Object Qborder_color; Lisp_Object Qborder_width; Lisp_Object Qbox; @@ -1873,11 +1876,13 @@ } else if (NILP (arg)) type = NO_CURSOR; + else if (EQ (arg, Qbox)) + type = FILLED_BOX_CURSOR; else - /* Treat anything unknown as "box cursor". + /* Treat anything unknown as "hollow box cursor". It was bad to signal an error; people have trouble fixing .Xdefaults with Emacs, when it has something bad in it. */ - type = FILLED_BOX_CURSOR; + type = HOLLOW_BOX_CURSOR; return type; } @@ -1888,12 +1893,33 @@ Lisp_Object arg, oldval; { int width; + Lisp_Object tem; FRAME_DESIRED_CURSOR (f) = x_specified_cursor_type (arg, &width); f->output_data.x->cursor_width = width; /* Make sure the cursor gets redrawn. */ cursor_type_changed = 1; + + /* By default, set up the blink-off state depending on the on-state. */ + + if (FRAME_DESIRED_CURSOR (f) == FILLED_BOX_CURSOR) + FRAME_BLINK_OFF_CURSOR (f) = HOLLOW_BOX_CURSOR; + else if (FRAME_DESIRED_CURSOR (f) == BAR_CURSOR && FRAME_CURSOR_WIDTH (f) > 1) + { + FRAME_BLINK_OFF_CURSOR (f) = BAR_CURSOR; + FRAME_BLINK_OFF_CURSOR_WIDTH (f) = 1; + } + else + FRAME_BLINK_OFF_CURSOR (f) = NO_CURSOR; + + tem = Fassoc (arg, Vblink_cursor_alist); + if (!NILP (tem)) + { + FRAME_BLINK_OFF_CURSOR (f) + = x_specified_cursor_type (XCDR (tem), &width); + f->output_data.x->blink_off_cursor_width = width; + } } void @@ -11844,6 +11870,10 @@ staticpro (&Qbar); Qhbar = intern ("hbar"); staticpro (&Qhbar); + Qbox = intern ("box"); + staticpro (&Qbox); + Qhollow = intern ("hollow"); + staticpro (&Qhollow); Qborder_color = intern ("border-color"); staticpro (&Qborder_color); Qborder_width = intern ("border-width"); @@ -11954,6 +11984,14 @@ init_x_parm_symbols (); + DEFVAR_LISP ("blink-cursor-alist", &Vblink_cursor_alist, + doc: /* Alist specifying how to blink the cursor off. +Each element has the form (ON-STATE . OFF-STATE). Whenever the +`cursor-type' frame-parameter or variable equals ON-STATE, +comparing using `equal', Emacs uses OFF-STATE to specify +how to blink it off. */); + Vblink_cursor_alist = Qnil; + DEFVAR_BOOL ("cross-disabled-images", &cross_disabled_images, doc: /* Non-nil means always draw a cross over disabled images. Disabled images are those having an `:conversion disabled' property.