unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Richard Stallman <rms@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Emacs 21.2 display bugs: variables: cursor-type; properties: display, before-string, after-string, invisible, intangible
Date: Sun, 26 May 2002 16:25:35 -0600 (MDT)	[thread overview]
Message-ID: <200205262225.g4QMPZp06445@aztec.santafe.edu> (raw)
In-Reply-To: <iq661ll235.fsf@localhost.localdomain> (message from Joe Wells on 18 May 2002 19:53:34 +0100)

    ;; * The buffer's value of cursor-type is ignored when the buffer's
    ;; window is not the selected window.  Instead, the usual hollow box
    ;; cursor is displayed.

Do you like the results of this change?

*** xterm.c.~1.734.~	Sat May 25 17:30:04 2002
--- xterm.c	Sun May 26 17:25:30 2002
***************
*** 11649,11654 ****
--- 11649,11655 ----
    struct frame *f = XFRAME (w->frame);
    int new_cursor_type;
    int new_cursor_width;
+   int cursor_off_state = 0;
    struct glyph_matrix *current_glyphs;
    struct glyph_row *glyph_row;
    struct glyph *glyph;
***************
*** 11688,11738 ****
       marked off, draw no cursor.  In all other cases, we want a hollow
       box cursor.  */
    new_cursor_width = -1;
    if (cursor_in_echo_area
        && FRAME_HAS_MINIBUF_P (f)
        && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window))
      {
        if (w == XWINDOW (echo_area_window))
  	new_cursor_type = FRAME_DESIRED_CURSOR (f);
!       else if (!NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
! 					   w->buffer)))
! 	new_cursor_type = HOLLOW_BOX_CURSOR;
        else
  	new_cursor_type = NO_CURSOR;
      }
!   else
      {
!       if (f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame
! 	  || w != XWINDOW (f->selected_window))
! 	{
! 	  if ((MINI_WINDOW_P (w) && minibuf_level == 0)
! 	      || NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
! 					    w->buffer))
! 	      || NILP (XBUFFER (w->buffer)->cursor_type))
! 	    new_cursor_type = NO_CURSOR;
! 	  else
! 	    new_cursor_type = HOLLOW_BOX_CURSOR;
! 	}
        else
! 	{
! 	  struct buffer *b = XBUFFER (w->buffer);
  
! 	  if (EQ (b->cursor_type, Qt))
! 	    new_cursor_type = FRAME_DESIRED_CURSOR (f);
! 	  else
! 	    new_cursor_type = x_specified_cursor_type (b->cursor_type, 
! 						       &new_cursor_width);
! 	  if (w->cursor_off_p)
! 	    {
! 	      if (new_cursor_type == FILLED_BOX_CURSOR)
! 		new_cursor_type = HOLLOW_BOX_CURSOR;
! 	      else if (new_cursor_type == BAR_CURSOR && new_cursor_width > 1)
! 		new_cursor_width = 1;
! 	      else
! 		new_cursor_type = NO_CURSOR;
! 	    }
! 	}
      }
  
    /* If cursor is currently being shown and we don't want it to be or
       it is in the wrong place, or the cursor type is not what we want,
--- 11689,11748 ----
       marked off, draw no cursor.  In all other cases, we want a hollow
       box cursor.  */
    new_cursor_width = -1;
+   new_cursor_type = -2;
+ 
+   /* Echo area */
    if (cursor_in_echo_area
        && FRAME_HAS_MINIBUF_P (f)
        && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window))
      {
        if (w == XWINDOW (echo_area_window))
  	new_cursor_type = FRAME_DESIRED_CURSOR (f);
!       else if (NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
! 					  w->buffer)))
! 	new_cursor_type = NO_CURSOR;
        else
+ 	cursor_off_state = 1;
+     }
+ 
+   /* Nonselected window or nonselected frame.  */
+   else if (f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame
+ 	   || w != XWINDOW (f->selected_window))
+     {
+       if ((MINI_WINDOW_P (w) && minibuf_level == 0)
+ 	  || NILP (Fbuffer_local_value (Qcursor_in_non_selected_windows,
+ 					w->buffer))
+ 	  || NILP (XBUFFER (w->buffer)->cursor_type))
  	new_cursor_type = NO_CURSOR;
+       else
+ 	cursor_off_state = 1;
      }
! 
!   /* If new_cursor_type isn't decided yet, decide it now.  */
!   if (new_cursor_type == -2)
      {
!       struct buffer *b = XBUFFER (w->buffer);
! 
!       if (EQ (b->cursor_type, Qt))
! 	new_cursor_type = FRAME_DESIRED_CURSOR (f);
        else
! 	new_cursor_type = x_specified_cursor_type (b->cursor_type, 
! 						   &new_cursor_width);
!     }
  
!   /* Dim out or hollow out the cursor,
!      if it has blinked off or for nonselected windows.  */
!   if (w->cursor_off_p || cursor_off_state)
!     {
!       if (new_cursor_type == FILLED_BOX_CURSOR)
! 	new_cursor_type = HOLLOW_BOX_CURSOR;
!       else if (new_cursor_type == BAR_CURSOR && new_cursor_width > 1)
! 	new_cursor_width = 1;
!       else
! 	new_cursor_type = NO_CURSOR;
      }
+ 
+   /* Now new_cursor_type is correct.  */
  
    /* If cursor is currently being shown and we don't want it to be or
       it is in the wrong place, or the cursor type is not what we want,

  parent reply	other threads:[~2002-05-26 22:25 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <iq661ll235.fsf@localhost.localdomain>
2002-05-20 14:47 ` Emacs 21.2 display bugs: variables: cursor-type; properties: display, before-string, after-string, invisible, intangible Richard Stallman
2002-05-20 19:23   ` Joe Wells
2002-05-21 15:57     ` Richard Stallman
2002-05-21 19:49       ` Joe Wells
2002-05-26 22:25 ` Richard Stallman [this message]
2002-05-31  8:35   ` Joe Wells
2002-06-01 21:03     ` Richard Stallman
2002-05-26 22:25 ` Richard Stallman
2002-05-26 23:29   ` Joe Wells
2002-05-31  8:45   ` Joe Wells
2002-06-01 21:05     ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200205262225.g4QMPZp06445@aztec.santafe.edu \
    --to=rms@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).