bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Setting cursor-type does not trigger redisplay of cursor


From: Juri Linkov
Subject: Re: Setting cursor-type does not trigger redisplay of cursor
Date: Tue, 01 Nov 2005 11:18:16 +0200
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux)

> (defun set-cursor-adaptive ()
>   (setq cursor-type (if (eq (char-after (point)) ?\n) '(bar . 5) t)))
> (add-hook 'post-command-hook 'set-cursor-adaptive)
>
> However, it turns out that this doesn't work as well as it should --
> apparently changing `cursor-type' does not affect the shape of the
> cursor until after it is redrawn, either by changing the position of
> point, or by redrawing the frame.

As I see, this works correctly in the CVS version.

BTW, I use this code to change cursor type and color:

(defun my-change-cursor ()
  "Change cursor color and type depending on insertion mode and input method."
  (set-cursor-color
   (cond (current-input-method "OrangeRed4")
         (t                    "black")))
  (set-cursor-type
   (cond (overwrite-mode       'box)
         (t                    'bar))))
(add-hook 'post-command-hook 'my-change-cursor)

There is no function `set-cursor-type' in CVS.  I use the patch below.
Note that it changes frame parameters instead of the buffer-local
variable `cursor-type'.  I think this causes less trouble.  Perhaps
this patch could be installed in CVS.

Index: lisp/frame.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/frame.el,v
retrieving revision 1.230
diff -c -r1.230 frame.el
*** lisp/frame.el       21 Oct 2005 08:27:04 -0000      1.230
--- lisp/frame.el       1 Nov 2005 09:17:22 -0000
***************
*** 903,917 ****
--- 903,928 ----
    (modify-frame-parameters (selected-frame)
                           (list (cons 'cursor-color color-name))))
  
+ (defun set-cursor-type (cursor-type)
+   "Set the text cursor type of the selected frame to CURSOR-TYPE.
+ When called interactively, prompt for the name of the type to use.
+ To get the frame's current cursor type, use `frame-parameters'."
+   (interactive (list (intern (completing-read
+                             "Cursor type: "
+                             '("box" "hollow" "bar" "hbar" nil)))))
+   (modify-frame-parameters (selected-frame)
+                          (list (cons 'cursor-type cursor-type))))
+ 
  (defun set-mouse-color (color-name)
    "Set the color of the mouse pointer of the selected frame to COLOR-NAME.
  When called interactively, prompt for the name of the color to use.

-- 
Juri Linkov
http://www.jurta.org/emacs/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]