aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/drawline.c34
-rw-r--r--src/nvim/mark.c8
-rw-r--r--src/nvim/memline.c4
-rw-r--r--src/nvim/options.lua3
-rw-r--r--src/nvim/terminal.c3
5 files changed, 27 insertions, 25 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index 4eaea4c6be..851ed55f6e 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -73,7 +73,7 @@ typedef struct {
int col; ///< visual column on screen, after wrapping
int boguscols; ///< nonexistent columns added to "col" to force wrapping
int old_boguscols; ///< bogus boguscols
- int vcol_off; ///< offset for concealed characters
+ int vcol_off_co; ///< offset for concealed characters
int off; ///< offset relative start of line
@@ -865,9 +865,9 @@ static void win_line_start(win_T *wp, winlinevars_T *wlv)
static void fix_for_boguscols(winlinevars_T *wlv)
{
- wlv->n_extra += wlv->vcol_off;
- wlv->vcol -= wlv->vcol_off;
- wlv->vcol_off = 0;
+ wlv->n_extra += wlv->vcol_off_co;
+ wlv->vcol -= wlv->vcol_off_co;
+ wlv->vcol_off_co = 0;
wlv->col -= wlv->boguscols;
wlv->old_boguscols = wlv->boguscols;
wlv->boguscols = 0;
@@ -987,7 +987,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
int conceal_attr = win_hl_attr(wp, HLF_CONCEAL);
bool is_concealing = false;
bool did_wcol = false;
-#define vcol_hlc(wlv) ((wlv).vcol - (wlv).vcol_off)
+#define vcol_hlc(wlv) ((wlv).vcol - (wlv).vcol_off_co)
assert(startrow < endrow);
@@ -2216,9 +2216,9 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
} else {
int saved_nextra = wlv.n_extra;
- if (wlv.vcol_off > 0) {
+ if (wlv.vcol_off_co > 0) {
// there are characters to conceal
- tab_len += wlv.vcol_off;
+ tab_len += wlv.vcol_off_co;
}
// boguscols before fix_for_boguscols() from above.
if (wp->w_p_lcs_chars.tab1 && wlv.old_boguscols > 0
@@ -2260,27 +2260,27 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
}
// n_extra will be increased by fix_for_boguscols()
- // macro below, so need to adjust for that here
- if (wlv.vcol_off > 0) {
- wlv.n_extra -= wlv.vcol_off;
+ // below, so need to adjust for that here
+ if (wlv.vcol_off_co > 0) {
+ wlv.n_extra -= wlv.vcol_off_co;
}
}
}
{
- int vc_saved = wlv.vcol_off;
+ int vc_saved = wlv.vcol_off_co;
// Tab alignment should be identical regardless of
// 'conceallevel' value. So tab compensates of all
// previous concealed characters, and thus resets
- // vcol_off and boguscols accumulated so far in the
+ // vcol_off_co and boguscols accumulated so far in the
// line. Note that the tab can be longer than
// 'tabstop' when there are concealed characters.
fix_for_boguscols(&wlv);
// Make sure, the highlighting for the tab char will be
// correctly set further below (effectively reverts the
- // FIX_FOR_BOGSUCOLS macro).
+ // fix_for_boguscols() call).
if (wlv.n_extra == tab_len + vc_saved && wp->w_p_list
&& wp->w_p_lcs_chars.tab1) {
tab_len += vc_saved;
@@ -2408,7 +2408,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
prev_syntax_id = syntax_seqnr;
if (wlv.n_extra > 0) {
- wlv.vcol_off += wlv.n_extra;
+ wlv.vcol_off_co += wlv.n_extra;
}
wlv.vcol += wlv.n_extra;
if (is_wrapped && wlv.n_extra > 0) {
@@ -2739,9 +2739,9 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
wlv.col++;
} else if (wp->w_p_cole > 0 && is_concealing) {
wlv.skip_cells--;
- wlv.vcol_off++;
+ wlv.vcol_off_co++;
if (wlv.n_extra > 0) {
- wlv.vcol_off += wlv.n_extra;
+ wlv.vcol_off_co += wlv.n_extra;
}
if (is_wrapped) {
// Special voodoo required if 'wrap' is on.
@@ -2872,7 +2872,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, int col_rows, s
}
wlv.boguscols = 0;
- wlv.vcol_off = 0;
+ wlv.vcol_off_co = 0;
wlv.row++;
// When not wrapping and finished diff lines, break here.
diff --git a/src/nvim/mark.c b/src/nvim/mark.c
index 1273093d8b..6ce42bb7fe 100644
--- a/src/nvim/mark.c
+++ b/src/nvim/mark.c
@@ -1243,11 +1243,11 @@ void mark_adjust_buf(buf_T *buf, linenr_T line1, linenr_T line2, linenr_T amount
if (win != curwin || by_api) {
if (win->w_topline >= line1 && win->w_topline <= line2) {
if (amount == MAXLNUM) { // topline is deleted
- if (line1 <= 1) {
- win->w_topline = 1;
+ if (by_api && amount_after > line1 - line2 - 1) {
+ // api: if the deleted region was replaced with new contents, topline will
+ // get adjusted later as an effect of the adjusted cursor in fix_cursor()
} else {
- // api: if the deleted region was replaced with new contents, display that
- win->w_topline = (by_api && amount_after > line1 - line2 - 1) ? line1 : line1 - 1;
+ win->w_topline = MAX(line1 - 1, 1);
}
} else if (win->w_topline > line1) {
// keep topline on the same line, unless inserting just
diff --git a/src/nvim/memline.c b/src/nvim/memline.c
index 70304f6816..5acf4f0c37 100644
--- a/src/nvim/memline.c
+++ b/src/nvim/memline.c
@@ -30,6 +30,10 @@
// changed (lines appended/deleted/changed) or when it is flushed it gets a
// positive number. Use mf_trans_del() to get the new number, before calling
// mf_get().
+//
+// "Mom, can we get ropes?"
+// "We have ropes at home."
+// Ropes at home:
#include <assert.h>
#include <errno.h>
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index 411acbcc82..ca8e1eaec5 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -6573,9 +6573,6 @@ return {
top are deleted if new lines exceed this limit.
Minimum is 1, maximum is 100000.
Only in |terminal| buffers.
-
- Note: Lines that are not visible and kept in scrollback are not
- reflown when the terminal buffer is resized horizontally.
]=],
full_name = 'scrollback',
redraw = { 'current_buffer' },
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 5a343b4972..edde7ff57a 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -307,7 +307,8 @@ void terminal_open(Terminal **termpp, buf_T *buf, TerminalOptions opts)
// Set up screen
term->vts = vterm_obtain_screen(term->vt);
vterm_screen_enable_altscreen(term->vts, true);
- vterm_screen_enable_reflow(term->vts, true);
+ // TODO(clason): reenable when https://github.com/neovim/neovim/issues/23762 is fixed
+ // vterm_screen_enable_reflow(term->vts, true);
// delete empty lines at the end of the buffer
vterm_screen_set_callbacks(term->vts, &vterm_screen_callbacks, term);
vterm_screen_set_unrecognised_fallbacks(term->vts, &vterm_fallbacks, term);