]> git.eshelyaron.com Git - emacs.git/commitdiff
* termhooks.h (FRAME_MUST_WRITE_SPACES, FRAME_LINE_INS_DEL_OK)
authorDmitry Antipov <dmantipov@yandex.ru>
Mon, 14 Oct 2013 12:19:21 +0000 (16:19 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Mon, 14 Oct 2013 12:19:21 +0000 (16:19 +0400)
(FRAME_CHAR_INS_DEL_OK, FRAME_SCROLL_REGION_OK)
(FRAME_SCROLL_REGION_COST, FRAME_MEMORY_BELOW_FRAME):
Adjust to match the change described below.
(struct terminal): Move must_write_spaces, line_ins_del_ok,
char_ins_del_ok, scroll_region_ok, scroll_region_cost and
memory_below_frame members to...
* termchar.h (struct tty_display_info): ...here because they're
relevant only on TTYs.  Prefer unsigned bitfield where appropriate.
* term.c (init_tty):
* nsterm.m (ns_create_terminal):
* w32term.c (w32_create_terminal):
* xterm.c (x_create_terminal): Adjust users.
* dispnew.c (line_hash_code, line_draw_cost): Pass frame arg
to filter out non-TTY frames.  Adjust comment.
(scrolling): Adjust user.  Prefer eassert for debugging check.

src/ChangeLog
src/dispnew.c
src/nsterm.m
src/term.c
src/termchar.h
src/termhooks.h
src/w32term.c
src/xterm.c

index 9432c81ffd74a51749a121c16578431b6c5a6219..d9264f6a6911a31925cb7fb1962052c4a5ae5e30 100644 (file)
@@ -1,3 +1,22 @@
+2013-10-14  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * termhooks.h (FRAME_MUST_WRITE_SPACES, FRAME_LINE_INS_DEL_OK)
+       (FRAME_CHAR_INS_DEL_OK, FRAME_SCROLL_REGION_OK)
+       (FRAME_SCROLL_REGION_COST, FRAME_MEMORY_BELOW_FRAME):
+       Adjust to match the change described below.
+       (struct terminal): Move must_write_spaces, line_ins_del_ok,
+       char_ins_del_ok, scroll_region_ok, scroll_region_cost and
+       memory_below_frame members to...
+       * termchar.h (struct tty_display_info): ...here because they're
+       relevant only on TTYs.  Prefer unsigned bitfield where appropriate.
+       * term.c (init_tty):
+       * nsterm.m (ns_create_terminal):
+       * w32term.c (w32_create_terminal):
+       * xterm.c (x_create_terminal): Adjust users.
+       * dispnew.c (line_hash_code, line_draw_cost): Pass frame arg
+       to filter out non-TTY frames.  Adjust comment.
+       (scrolling): Adjust user.  Prefer eassert for debugging check.
+
 2013-10-14  Dmitry Antipov  <dmantipov@yandex.ru>
 
        * xfaces.c (PT_PER_INCH): Remove unused macro.
index 3c0fda0b7457d7a2e703303937fee22d8d837a2d..25acdd725dd7c071de32353600448a69c3240c8c 100644 (file)
@@ -1070,10 +1070,11 @@ prepare_desired_row (struct glyph_row *row)
 }
 
 
-/* Return a hash code for glyph row ROW.  */
+/* Return a hash code for glyph row ROW, which may
+   be from current or desired matrix of frame F.  */
 
 static int
-line_hash_code (struct glyph_row *row)
+line_hash_code (struct frame *f, struct glyph_row *row)
 {
   int hash = 0;
 
@@ -1086,7 +1087,7 @@ line_hash_code (struct glyph_row *row)
        {
          int c = glyph->u.ch;
          int face_id = glyph->face_id;
-         if (FRAME_MUST_WRITE_SPACES (SELECTED_FRAME ())) /* XXX Is SELECTED_FRAME OK here? */
+         if (FRAME_MUST_WRITE_SPACES (f))
            c -= SPACEGLYPH;
          hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + c;
          hash = (((hash << 4) + (hash >> 24)) & 0x0fffffff) + face_id;
@@ -1101,12 +1102,13 @@ line_hash_code (struct glyph_row *row)
 }
 
 
-/* Return the cost of drawing line VPOS in MATRIX.  The cost equals
-   the number of characters in the line.  If must_write_spaces is
-   zero, leading and trailing spaces are ignored.  */
+/* Return the cost of drawing line VPOS in MATRIX, which may
+   be current or desired matrix of frame F.  The cost equals
+   the number of characters in the line.  If must_write_spaces
+   is zero, leading and trailing spaces are ignored.  */
 
 static int
-line_draw_cost (struct glyph_matrix *matrix, int vpos)
+line_draw_cost (struct frame *f, struct glyph_matrix *matrix, int vpos)
 {
   struct glyph_row *row = matrix->rows + vpos;
   struct glyph *beg = row->glyphs[TEXT_AREA];
@@ -1116,7 +1118,7 @@ line_draw_cost (struct glyph_matrix *matrix, int vpos)
   ptrdiff_t glyph_table_len = GLYPH_TABLE_LENGTH;
 
   /* Ignore trailing and leading spaces if we can.  */
-  if (!FRAME_MUST_WRITE_SPACES (SELECTED_FRAME ())) /* XXX Is SELECTED_FRAME OK here? */
+  if (!FRAME_MUST_WRITE_SPACES (f))
     {
       /* Skip from the end over trailing spaces.  */
       while (end > beg && CHAR_GLYPH_SPACE_P (*(end - 1)))
@@ -4595,8 +4597,7 @@ scrolling (struct frame *frame)
   struct glyph_matrix *current_matrix = frame->current_matrix;
   struct glyph_matrix *desired_matrix = frame->desired_matrix;
 
-  if (!current_matrix)
-    emacs_abort ();
+  eassert (current_matrix);
 
   /* Compute hash codes of all the lines.  Also calculate number of
      changed lines, number of unchanged lines at the beginning, and
@@ -4609,7 +4610,7 @@ scrolling (struct frame *frame)
       /* Give up on this scrolling if some old lines are not enabled.  */
       if (!MATRIX_ROW_ENABLED_P (current_matrix, i))
        return 0;
-      old_hash[i] = line_hash_code (MATRIX_ROW (current_matrix, i));
+      old_hash[i] = line_hash_code (frame, MATRIX_ROW (current_matrix, i));
       if (! MATRIX_ROW_ENABLED_P (desired_matrix, i))
        {
          /* This line cannot be redrawn, so don't let scrolling mess it.  */
@@ -4619,8 +4620,8 @@ scrolling (struct frame *frame)
        }
       else
        {
-         new_hash[i] = line_hash_code (MATRIX_ROW (desired_matrix, i));
-         draw_cost[i] = line_draw_cost (desired_matrix, i);
+         new_hash[i] = line_hash_code (frame, MATRIX_ROW (desired_matrix, i));
+         draw_cost[i] = line_draw_cost (frame, desired_matrix, i);
        }
 
       if (old_hash[i] != new_hash[i])
@@ -4630,7 +4631,7 @@ scrolling (struct frame *frame)
        }
       else if (i == unchanged_at_top)
        unchanged_at_top++;
-      old_draw_cost[i] = line_draw_cost (current_matrix, i);
+      old_draw_cost[i] = line_draw_cost (frame, current_matrix, i);
     }
 
   /* If changed lines are few, don't allow preemption, don't scroll.  */
index 5f034a4dff35eb75807126d2d13fc3136a61d78c..b0067d85eaeecb1851a05ed1cb04127d8af7c2ec 100644 (file)
@@ -4091,11 +4091,6 @@ ns_create_terminal (struct ns_display_info *dpyinfo)
   terminal->delete_frame_hook = x_destroy_window;
   terminal->delete_terminal_hook = ns_delete_terminal;
 
-  terminal->scroll_region_ok = 1;
-  terminal->char_ins_del_ok = 1;
-  terminal->line_ins_del_ok = 1;
-  terminal->memory_below_frame = 0;
-
   return terminal;
 }
 
index 7cf0795aa7d9548b25cfcdaa7c5b14f06201c85e..58e0f2abd45395d7581c085d0e2205d484e61c6f 100644 (file)
@@ -4203,9 +4203,9 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
   /* Since we make MagicWrap terminals look like AutoWrap, we need to have
      the former flag imply the latter.  */
   AutoWrap (tty) = MagicWrap (tty) || tgetflag ("am");
-  terminal->memory_below_frame = tgetflag ("db");
+  tty->memory_below_frame = tgetflag ("db");
   tty->TF_hazeltine = tgetflag ("hz");
-  terminal->must_write_spaces = tgetflag ("in");
+  tty->must_write_spaces = tgetflag ("in");
   tty->meta_key = tgetflag ("km") || tgetflag ("MT");
   tty->TF_insmode_motion = tgetflag ("mi");
   tty->TF_standout_motion = tgetflag ("ms");
@@ -4225,7 +4225,7 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
     tty->specified_window = height;
 
     FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
-    terminal->char_ins_del_ok = 1;
+    tty->char_ins_del_ok = 1;
     baud_rate = 19200;
   }
 #else  /* MSDOS */
@@ -4238,7 +4238,7 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
     get_tty_size (fileno (tty->input), &width, &height);
     FrameCols (tty) = width;
     FrameRows (tty) = height;
-    terminal->char_ins_del_ok = 0;
+    tty->char_ins_del_ok = 0;
     init_baud_rate (fileno (tty->input));
   }
 #endif /* MSDOS */
@@ -4257,12 +4257,12 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
   tty->delete_in_insert_mode = 1;
 
   UseTabs (tty) = 0;
-  terminal->scroll_region_ok = 0;
+  tty->scroll_region_ok = 0;
 
   /* Seems to insert lines when it's not supposed to, messing up the
      display.  In doing a trace, it didn't seem to be called much, so I
      don't think we're losing anything by turning it off.  */
-  terminal->line_ins_del_ok = 0;
+  tty->line_ins_del_ok = 0;
 
   tty->TN_max_colors = 16;  /* Must be non-zero for tty-display-color-p.  */
 #endif /* DOS_NT */
@@ -4393,17 +4393,17 @@ use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
 
   UseTabs (tty) = tabs_safe_p (fileno (tty->input)) && TabWidth (tty) == 8;
 
-  terminal->scroll_region_ok
+  tty->scroll_region_ok
     = (tty->Wcm->cm_abs
        && (tty->TS_set_window || tty->TS_set_scroll_region || tty->TS_set_scroll_region_1));
 
-  terminal->line_ins_del_ok
+  tty->line_ins_del_ok
     = (((tty->TS_ins_line || tty->TS_ins_multi_lines)
         && (tty->TS_del_line || tty->TS_del_multi_lines))
-       || (terminal->scroll_region_ok
+       || (tty->scroll_region_ok
            && tty->TS_fwd_scroll && tty->TS_rev_scroll));
 
-  terminal->char_ins_del_ok
+  tty->char_ins_del_ok
     = ((tty->TS_ins_char || tty->TS_insert_mode
         || tty->TS_pad_inserted_char || tty->TS_ins_multi_chars)
        && (tty->TS_del_char || tty->TS_del_multi_chars));
index 031f4e4034bbd2a57d82fd2a348d15ab9d5c2a0e..feb89e02d0ebce68c3fd6e93f6a45e3bcf62b092 100644 (file)
@@ -197,6 +197,25 @@ struct tty_display_info
 
   /* Non-zero means we are displaying a TTY menu on this tty.  */
   unsigned showing_menu : 1;
+
+  /* Nonzero means spaces in the text must actually be output;
+     can't just skip over some columns to leave them blank.  */
+  unsigned must_write_spaces : 1;
+
+  /* Nonzero if TTY can insert and delete lines.  */
+  unsigned line_ins_del_ok : 1;
+
+  /* Nonzero if TTY can insert and delete chars.  */
+  unsigned char_ins_del_ok : 1;
+
+  /* Nonzero if TTY supports setting the scroll window.  */
+  unsigned scroll_region_ok : 1;
+
+  /* Nonzero if TTY remembers lines scrolled off bottom.  */
+  unsigned memory_below_frame : 1;
+
+  /* Cost of setting the scroll window, measured in characters.  */
+  int scroll_region_cost;      
 };
 
 /* A chain of structures for all tty devices currently in use. */
index 2c819ad58e30a69cb0a48436d76592cb2ba33d1b..52f30b4bf984c26a2926fd9d0b0e0a9033487a90 100644 (file)
@@ -402,21 +402,6 @@ struct terminal
      the function `set-keyboard-coding-system'.  */
   struct coding_system *keyboard_coding;
 
-  /* Terminal characteristics.  */
-  /* XXX Are these really used on non-termcap displays?  */
-
-  int must_write_spaces;       /* Nonzero means spaces in the text must
-                                  actually be output; can't just skip over
-                                  some columns to leave them blank.  */
-  int line_ins_del_ok;          /* Terminal can insert and delete lines.  */
-  int char_ins_del_ok;          /* Terminal can insert and delete chars.  */
-  int scroll_region_ok;         /* Terminal supports setting the scroll
-                                   window.  */
-  int scroll_region_cost;      /* Cost of setting the scroll window,
-                                   measured in characters.  */
-  int memory_below_frame;      /* Terminal remembers lines scrolled
-                                   off bottom.  */
-
   /* Window-based redisplay interface for this device (0 for tty
      devices). */
   struct redisplay_interface *rif;
@@ -617,12 +602,12 @@ tset_selection_alist (struct terminal *t, Lisp_Object val)
 /* Chain of all terminal devices currently in use.  */
 extern struct terminal *terminal_list;
 
-#define FRAME_MUST_WRITE_SPACES(f) ((f)->terminal->must_write_spaces)
-#define FRAME_LINE_INS_DEL_OK(f) ((f)->terminal->line_ins_del_ok)
-#define FRAME_CHAR_INS_DEL_OK(f) ((f)->terminal->char_ins_del_ok)
-#define FRAME_SCROLL_REGION_OK(f) ((f)->terminal->scroll_region_ok)
-#define FRAME_SCROLL_REGION_COST(f) ((f)->terminal->scroll_region_cost)
-#define FRAME_MEMORY_BELOW_FRAME(f) ((f)->terminal->memory_below_frame)
+#define FRAME_MUST_WRITE_SPACES(f) (FRAME_TTY (f)->must_write_spaces)
+#define FRAME_LINE_INS_DEL_OK(f) (FRAME_TTY (f)->line_ins_del_ok)
+#define FRAME_CHAR_INS_DEL_OK(f) (FRAME_TTY (f)->char_ins_del_ok)
+#define FRAME_SCROLL_REGION_OK(f) (FRAME_TTY (f)->scroll_region_ok)
+#define FRAME_SCROLL_REGION_COST(f) (FRAME_TTY (f)->scroll_region_cost)
+#define FRAME_MEMORY_BELOW_FRAME(f) (FRAME_TTY (f)->memory_below_frame)
 
 #define FRAME_TERMINAL_CODING(f) ((f)->terminal->terminal_coding)
 #define FRAME_KEYBOARD_CODING(f) ((f)->terminal->keyboard_coding)
index 1073179fa3467fea437cd01e26416ceb132f13e6..b128fbeaa9c4dfde250db80c6f673474d3fcd522 100644 (file)
@@ -6252,11 +6252,6 @@ w32_create_terminal (struct w32_display_info *dpyinfo)
   terminal->delete_terminal_hook = x_delete_terminal;
 
   terminal->rif = &w32_redisplay_interface;
-  terminal->scroll_region_ok = 1;    /* We'll scroll partial frames. */
-  terminal->char_ins_del_ok = 1;
-  terminal->line_ins_del_ok = 1;         /* We'll just blt 'em. */
-  terminal->memory_below_frame = 0;   /* We don't remember what scrolls
-                                        off the bottom. */
 
   /* We don't yet support separate terminals on W32, so don't try to share
      keyboards between virtual terminals that are on the same physical
index f73c093cefce49dc7b372dd456e23f87182f7420..9d1107e10bd7a6923dc93fa018abea7b811ea525 100644 (file)
@@ -10509,11 +10509,6 @@ x_create_terminal (struct x_display_info *dpyinfo)
   terminal->delete_terminal_hook = x_delete_terminal;
 
   terminal->rif = &x_redisplay_interface;
-  terminal->scroll_region_ok = 1;    /* We'll scroll partial frames. */
-  terminal->char_ins_del_ok = 1;
-  terminal->line_ins_del_ok = 1;         /* We'll just blt 'em. */
-  terminal->memory_below_frame = 0;   /* We don't remember what scrolls
-                                        off the bottom. */
 
   return terminal;
 }