aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2019-07-23 19:20:07 +0200
committerGitHub <noreply@github.com>2019-07-23 19:20:07 +0200
commit5cccfa7c5a3cd1683c8a36da02b424d4469b2143 (patch)
treee0aef31c417c6df9a44129cd0d01e86c30882dbb
parent0d5f629208bc916bdefaea690177846e9269b4fa (diff)
parent465a0a3c09ece20c16c08e694ec9f47aeafb47fc (diff)
downloadrneovim-5cccfa7c5a3cd1683c8a36da02b424d4469b2143.tar.gz
rneovim-5cccfa7c5a3cd1683c8a36da02b424d4469b2143.tar.bz2
rneovim-5cccfa7c5a3cd1683c8a36da02b424d4469b2143.zip
Merge #10558 from erw7/fix-text-overrides-line-number2
Windows: Fix text overrides line number
-rw-r--r--src/nvim/os/env.c8
-rw-r--r--src/nvim/tui/tui.c7
2 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c
index b067de608b..2278c325ea 100644
--- a/src/nvim/os/env.c
+++ b/src/nvim/os/env.c
@@ -105,6 +105,10 @@ bool os_env_exists(const char *name)
return (r == 0 || r == UV_ENOBUFS);
}
+/// Sets an environment variable.
+///
+/// @warning Existing pointers to the result of os_getenv("foo") are
+/// INVALID after os_setenv("foo", …).
int os_setenv(const char *name, const char *value, int overwrite)
FUNC_ATTR_NONNULL_ALL
{
@@ -121,9 +125,11 @@ int os_setenv(const char *name, const char *value, int overwrite)
}
#endif
uv_mutex_lock(&mutex);
- pmap_del2(envmap, name);
int r = uv_os_setenv(name, value);
assert(r != UV_EINVAL);
+ // Destroy the old map item. Do this AFTER uv_os_setenv(), because `value`
+ // could be a previous os_getenv() result.
+ pmap_del2(envmap, name);
if (r != 0) {
ELOG("uv_os_setenv(%s) failed: %d %s", name, r, uv_err_name(r));
}
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 42e5b9b270..58ef540707 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -222,6 +222,8 @@ static void terminfo_start(UI *ui)
#ifdef WIN32
os_tty_guess_term(&term, data->out_fd);
os_setenv("TERM", term, 1);
+ // Old os_getenv() pointer is invalid after os_setenv(), fetch it again.
+ term = os_getenv("TERM");
#endif
// Set up unibilium/terminfo.
@@ -1585,6 +1587,11 @@ static void patch_terminfo_bugs(TUIData *data, const char *term,
unibi_set_if_empty(ut, unibi_set_left_margin_parm, "\x1b[%i%p1%ds");
unibi_set_if_empty(ut, unibi_set_right_margin_parm, "\x1b[%i;%p2%ds");
}
+
+#ifdef WIN32
+ // XXX: workaround libuv implicit LF => CRLF conversion. #10558
+ unibi_set_str(ut, unibi_cursor_down, "\x1b[B");
+#endif
} else if (rxvt) {
// 2017-04 terminfo.src lacks these. Unicode rxvt has them.
unibi_set_if_empty(ut, unibi_enter_italics_mode, "\x1b[3m");