From: Richard M. Stallman Date: Tue, 27 Aug 2002 18:45:01 +0000 (+0000) Subject: (x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and X-Git-Tag: ttn-vms-21-2-B4~13544 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0a1c83e745cfaca794d9a0dd4a3b63eeda8b3e21;p=emacs.git (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 --git a/src/xfns.c b/src/xfns.c index 4f23af432c8..caa54d97e2c 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -183,9 +183,12 @@ Lisp_Object Vx_bitmap_file_path; 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 @@ x_specified_cursor_type (arg, width) } 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 @@ x_set_cursor_type (f, arg, oldval) 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 @@ syms_of_xfns () 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 @@ syms_of_xfns () 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.