diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-10-21 17:01:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-21 17:01:14 +0200 |
commit | b227a3c8d35b28a8bfcbbdd593deb6524a37a77f (patch) | |
tree | 4f14b10c7334db7bf6644f2e91bf2d54df88c0e6 | |
parent | 1cf50cbfd9b7121e5d209bdaf6a7627d44535416 (diff) | |
parent | bbd8f4e9a407022e89463852e76ed7426607a760 (diff) | |
download | rneovim-b227a3c8d35b28a8bfcbbdd593deb6524a37a77f.tar.gz rneovim-b227a3c8d35b28a8bfcbbdd593deb6524a37a77f.tar.bz2 rneovim-b227a3c8d35b28a8bfcbbdd593deb6524a37a77f.zip |
Merge #9141 from justinmk/pvs
-rw-r--r-- | src/nvim/screen.c | 89 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 2 |
2 files changed, 31 insertions, 60 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index a5b07bb49f..f6d162aec2 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -2474,7 +2474,7 @@ win_line ( if (ae.rgb_fg_color == -1 && ae.cterm_fg_color == 0) { line_attr_lowprio = cul_attr; } else { - if (line_attr != 0 && !(State & INSERT) && bt_quickfix(wp->w_buffer) + if (!(State & INSERT) && bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum) { line_attr = hl_combine_attr(cul_attr, line_attr); } else { @@ -5949,7 +5949,6 @@ void screenalloc(bool doclear) int new_row, old_row; int len; static bool entered = false; // avoid recursiveness - static bool done_outofmem_msg = false; int retry_count = 0; retry: @@ -6019,67 +6018,39 @@ retry: win_alloc_lines(aucmd_win); } - if (new_ScreenLines == NULL - || new_ScreenAttrs == NULL - || new_LineOffset == NULL - || new_LineWraps == NULL - || new_tab_page_click_defs == NULL) { - if (ScreenLines != NULL || !done_outofmem_msg) { - // Guess the size. - do_outofmem_msg((Rows + 1) * Columns); - - // Remember we did this to avoid getting outofmem messages over - // and over again. - done_outofmem_msg = true; - } - xfree(new_ScreenLines); - new_ScreenLines = NULL; - xfree(new_ScreenAttrs); - new_ScreenAttrs = NULL; - xfree(new_LineOffset); - new_LineOffset = NULL; - xfree(new_LineWraps); - new_LineWraps = NULL; - xfree(new_tab_page_click_defs); - new_tab_page_click_defs = NULL; - } else { - done_outofmem_msg = FALSE; - - for (new_row = 0; new_row < Rows; ++new_row) { - new_LineOffset[new_row] = new_row * Columns; - new_LineWraps[new_row] = FALSE; - - /* - * If the screen is not going to be cleared, copy as much as - * possible from the old screen to the new one and clear the rest - * (used when resizing the window at the "--more--" prompt or when - * executing an external command, for the GUI). - */ - if (!doclear) { - for (int col = 0; col < Columns; col++) { - schar_from_ascii(new_ScreenLines[new_row * Columns + col], ' '); - } - memset(new_ScreenAttrs + new_row * Columns, - 0, (size_t)Columns * sizeof(*new_ScreenAttrs)); - old_row = new_row + (screen_Rows - Rows); - if (old_row >= 0 && ScreenLines != NULL) { - if (screen_Columns < Columns) - len = screen_Columns; - else - len = Columns; - - memmove(new_ScreenLines + new_LineOffset[new_row], - ScreenLines + LineOffset[old_row], - (size_t)len * sizeof(schar_T)); - memmove(new_ScreenAttrs + new_LineOffset[new_row], - ScreenAttrs + LineOffset[old_row], - (size_t)len * sizeof(new_ScreenAttrs[0])); + for (new_row = 0; new_row < Rows; new_row++) { + new_LineOffset[new_row] = new_row * Columns; + new_LineWraps[new_row] = false; + + // If the screen is not going to be cleared, copy as much as + // possible from the old screen to the new one and clear the rest + // (used when resizing the window at the "--more--" prompt or when + // executing an external command, for the GUI). + if (!doclear) { + for (int col = 0; col < Columns; col++) { + schar_from_ascii(new_ScreenLines[new_row * Columns + col], ' '); + } + memset(new_ScreenAttrs + new_row * Columns, + 0, (size_t)Columns * sizeof(*new_ScreenAttrs)); + old_row = new_row + (screen_Rows - Rows); + if (old_row >= 0 && ScreenLines != NULL) { + if (screen_Columns < Columns) { + len = screen_Columns; + } else { + len = Columns; } + + memmove(new_ScreenLines + new_LineOffset[new_row], + ScreenLines + LineOffset[old_row], + (size_t)len * sizeof(schar_T)); + memmove(new_ScreenAttrs + new_LineOffset[new_row], + ScreenAttrs + LineOffset[old_row], + (size_t)len * sizeof(new_ScreenAttrs[0])); } } - /* Use the last line of the screen for the current line. */ - current_ScreenLine = new_ScreenLines + Rows * Columns; } + // Use the last line of the screen for the current line. + current_ScreenLine = new_ScreenLines + Rows * Columns; free_screenlines(); diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index dd22f00de0..9c9b9d4a7b 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -1857,7 +1857,7 @@ static void augment_terminfo(TUIData *data, const char *term, ut, "ext.set_underline_color", "\x1b[58:2:%p1%d:%p2%d:%p3%dm"); } else { data->unibi_ext.set_underline_color = (int)unibi_add_ext_str( - ut, "ext.set_underline_color", "\x1b[58:2:%p1%d:%p2%d:%p3%dm"); + ut, "ext.set_underline_color", "\x1b[58;2;%p1%d;%p2%d;%p3%dm"); } } } |