]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_set_cursor_type): Set FRAME_BLINK_OFF_CURSOR and
authorRichard M. Stallman <rms@gnu.org>
Thu, 29 Aug 2002 14:37:33 +0000 (14:37 +0000)
committerRichard M. Stallman <rms@gnu.org>
Thu, 29 Aug 2002 14:37:33 +0000 (14:37 +0000)
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.

src/w32fns.c

index 9e1602e8d6c808093fb93665eec561e373bd8b3b..9901734a4ebbd8a9e5b80d89cab78f97767b65af 100644 (file)
@@ -202,9 +202,12 @@ Lisp_Object Vw32_charset_info_alist;
 #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 @@ 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;
 }
@@ -2401,13 +2406,34 @@ 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.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;
+    }
 }
 \f
 void
@@ -14870,6 +14896,10 @@ syms_of_w32fns ()
   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 @@ system to handle them.  */);
 
   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");