# HG changeset patch # User Richard M. Stallman # Date 1030631853 0 # Node ID 398a8f34fb26151080cf91a0b753061c5a14e528 # Parent f0b41fba299505f47795022864a575277ab94f45 (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_w32fns): Initialize and defvar it. (x_specified_cursor_type): Recognize Qbox for filled box. Exceptions are hollow boxes. (Qbox, Qhollow): New variables. (syms_of_w32fns): Initialize and staticpro them. diff -r f0b41fba2995 -r 398a8f34fb26 src/w32fns.c --- a/src/w32fns.c Thu Aug 29 13:12:05 2002 +0000 +++ b/src/w32fns.c Thu Aug 29 14:37:33 2002 +0000 @@ -202,9 +202,12 @@ #define VIETNAMESE_CHARSET 163 #endif +/* 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; @@ -2386,11 +2389,13 @@ } else if (NILP (arg)) type = NO_CURSOR; - else - /* Treat anything unknown as "box cursor". + else if (EQ (arg, Qbox)) + type = FILLED_BOX_CURSOR; + else + /* 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; } @@ -2401,13 +2406,34 @@ Lisp_Object arg, oldval; { int width; - + Lisp_Object tem; + FRAME_DESIRED_CURSOR (f) = x_specified_cursor_type (arg, &width); f->output_data.w32->cursor_width = width; /* Make sure the cursor gets redrawn. This is overkill, but how often do people change cursor types? */ update_mode_lines++; + + /* 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.w32->blink_off_cursor_width = width; + } } void @@ -14870,6 +14896,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"); @@ -15110,6 +15140,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_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path, doc: /* List of directories to search for bitmap files for w32. */); Vx_bitmap_file_path = decode_env_path ((char *) 0, "PATH");