Kean Johnston <kean(a)armory.com> writes:
 All,
 Attached is a small patch for console mode. It fixes two
 things. One, it fixes the cursor shape, as the termcap
 entries are reversed in the source (this has bugged me
 litterally for years, Im sorry I never submitted a patch
 sooner).
 The second part of the patch is to disable auto-margins
 if the terminal can, and uses them. This solves another
 problem I've had for a long time, where the screen could
 become corrupted under certain circumstances if the
 minibuffer display was too long.
 The patch is against 21.5.21, but the same could (and
 should) be done for 21.4 if there's to be another release
 of that. 
APPROVE COMMIT 21.4
Kean,
Thanks for the patch.  I committed it with the following entry in src/ChangeLog:
2005-11-27  Kean Johnston <kean(a)armory.com>
	* redisplay-tty.c (set_tty_modes):
	(reset_tty_modes): disable auto-margins if the terminal supports
	them.
	(init_tty_for_redisplay): fix cursor shape.
This patch will appear in 21.4.18.
Thank you,
  Vin
 Kean
 --- src/redisplay-tty.c.jkj	2005-01-24 15:34:07.000000000 -0800
 +++ src/redisplay-tty.c	2005-07-12 14:01:45.000000000 -0700
 @@ -874,6 +874,9 @@
    OUTPUT1_IF (c, TTY_SD (c).init_motion);
    OUTPUT1_IF (c, TTY_SD (c).cursor_visible);
    OUTPUT1_IF (c, TTY_SD (c).keypad_on);
 +
 +  if (TTY_FLAGS (c).auto_margins)
 +    OUTPUT1_IF (c, TTY_SD (c).disable_auto_margins);
  }
  
  /*****************************************************************************
 @@ -892,6 +895,9 @@
    OUTPUT1_IF (c, TTY_SD (c).cursor_normal);
    OUTPUT1_IF (c, TTY_SD (c).end_motion);
  
 +  if (TTY_FLAGS (c).auto_margins)
 +    OUTPUT1_IF (c, TTY_SD (c).enable_auto_margins);
 +
    {
      Lisp_Object frm = CONSOLE_SELECTED_FRAME (c);
  
 @@ -1197,12 +1203,14 @@
        TTY_SD (c).audio_bell = "\07";
      }
  
 -  TTY_SD (c).cursor_visible = tgetstr ("ve", &bufptr);
 -  TTY_SD (c).cursor_normal = tgetstr ("vs", &bufptr);
 +  TTY_SD (c).cursor_visible = tgetstr ("vs", &bufptr);
 +  TTY_SD (c).cursor_normal = tgetstr ("ve", &bufptr);
    TTY_SD (c).init_motion = tgetstr ("ti", &bufptr);
    TTY_SD (c).end_motion = tgetstr ("te", &bufptr);
    TTY_SD (c).keypad_on = tgetstr ("ks", &bufptr);
    TTY_SD (c).keypad_off = tgetstr ("ke", &bufptr);
 +  TTY_SD (c).disable_auto_margins = tgetstr ("RA", &bufptr);
 +  TTY_SD (c).enable_auto_margins = tgetstr ("SA", &bufptr);
  
  
    /*
 @@ -1215,6 +1223,7 @@
    TTY_FLAGS (c).memory_below_frame = tgetflag ("db");
    TTY_FLAGS (c).standout_width = tgetnum ("sg");
    TTY_FLAGS (c).underline_width = tgetnum ("ug");
 +  TTY_FLAGS (c).auto_margins = tgetflag ("am");
  
    if (TTY_FLAGS (c).standout_width == -1)
      TTY_FLAGS (c).standout_width = 0;
 --- src/console-tty-impl.h.jkj	2002-06-20 14:18:24.000000000 -0700
 +++ src/console-tty-impl.h	2005-07-12 14:01:51.000000000 -0700
 @@ -81,6 +81,8 @@
  					   character info */
      unsigned int flow_control :1;	/* Nonzero means use ^S/^Q as
  					   cretinous flow control.  */
 +    unsigned int auto_margins :1;	/* Nonzero means terminal wraps when
 +					   writing to the last column */
      int standout_width;		        /* # of spaces printed when
  				           change to standout mode */
      int underline_width;		/* # of spaces printed when
 @@ -174,6 +176,9 @@
      const char *keypad_off;		/* rmkx, ke */
  
      const char *orig_pair;		/* op, op */
 +
 +    const char *disable_auto_margins;	/* rmam, RA */
 +    const char *enable_auto_margins;	/* smam, SA */
    } sd;
  
    /* costs of various operations */