void term_redisplay(void) { size_t topline; Window *wp; cur_topline = topline = 0; calculate_start_column(cur_wp); for (wp = head_wp; wp != NULL; wp = wp->next) { if (wp == cur_wp) cur_topline = topline; draw_window(topline, wp); /* Draw the status line only if there is available space after the buffer text space. */ if (wp->fheight - wp->eheight > 0) draw_status_line(topline + wp->eheight, wp); topline += wp->fheight; } term_redraw_cursor(); }
void term_redisplay (void) { /* Calculate the start column if the line at point has to be truncated. */ Buffer bp = get_window_bp (cur_wp); size_t lastcol = 0, t = tab_width (bp); size_t o = window_o (cur_wp); size_t lineo = o - get_buffer_line_o (bp); col = 0; o -= lineo; set_window_start_column (cur_wp, 0); size_t ew = get_window_ewidth (cur_wp); for (size_t lp = lineo; lp != SIZE_MAX; --lp) { col = 0; for (size_t p = lp; p < lineo; ++p) { char c = get_buffer_char (bp, o + p); if (isprint (c)) col++; else col += strlen (make_char_printable (get_buffer_char (bp, o + p), col, t)); } if (col >= ew - 1 || (lp / (ew / 3)) + 2 < lineo / (ew / 3)) { set_window_start_column (cur_wp, lp + 1); col = lastcol; break; } lastcol = col; } /* Draw the windows. */ cur_topline = 0; size_t topline = 0; for (Window wp = head_wp; wp != NULL; wp = get_window_next (wp)) { if (wp == cur_wp) cur_topline = topline; draw_window (topline, wp); topline += get_window_fheight (wp); } term_redraw_cursor (); }