[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/