aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan de Boyne Pollard <postmaster@localhost>2017-05-22 22:46:56 +0100
committerJonathan de Boyne Pollard <J.deBoynePollard-newsgroups@NTLWorld.com>2017-06-03 18:53:27 +0100
commit5b07ca1dfde4d44a11e3052b552f48fe61034247 (patch)
treecb42f1fe194082d53803add50c71ac5b873029df /src
parentdbc25f5a87cf3bcfe1caac1eb1ff8b3a6978a415 (diff)
downloadrneovim-5b07ca1dfde4d44a11e3052b552f48fe61034247.tar.gz
rneovim-5b07ca1dfde4d44a11e3052b552f48fe61034247.tar.bz2
rneovim-5b07ca1dfde4d44a11e3052b552f48fe61034247.zip
tui: Use what scrolling PuTTY has.
PuTTY does not implement DECLRMM or DECSLRM, but it does implement DECSTBM. So allow using PuTTY terminal scrolling when the scroll rectangle is the full width of the terminal.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/tui/tui.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index abe0e17d8a..23096725be 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -56,6 +56,7 @@ typedef enum TermType {
kTermDTTerm,
kTermXTerm,
kTermTeraTerm,
+ kTermPuTTY,
} TermType;
typedef struct {
@@ -1172,6 +1173,9 @@ static TermType detect_term(const char *term, const char *colorterm)
if (STARTS_WITH(term, "teraterm")) {
return kTermTeraTerm;
}
+ if (STARTS_WITH(term, "putty")) {
+ return kTermPuTTY;
+ }
return kTermUnknown;
}
@@ -1220,13 +1224,15 @@ static void fix_terminfo(TUIData *data)
unibi_set_if_empty(ut, unibi_cursor_invisible, "\x1b[?25l");
unibi_set_if_empty(ut, unibi_flash_screen, "\x1b[?5h$<100/>\x1b[?5l");
unibi_set_if_empty(ut, unibi_exit_attribute_mode, "\x1b(B\x1b[m");
+ unibi_set_if_empty(ut, unibi_from_status_line, "\x07");
unibi_set_if_empty(ut, unibi_set_tb_margin, "\x1b[%i%p1%d;%p2%dr");
unibi_set_if_empty(ut, unibi_set_lr_margin, "\x1b[%i%p1%d;%p2%ds");
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");
+ }
+ if (data->term == kTermXTerm || data->term == kTermRxvt || data->term == kTermPuTTY) {
unibi_set_if_empty(ut, unibi_change_scroll_region, "\x1b[%i%p1%d;%p2%dr");
unibi_set_if_empty(ut, unibi_clear_screen, "\x1b[H\x1b[2J");
- unibi_set_if_empty(ut, unibi_from_status_line, "\x07");
unibi_set_bool(ut, unibi_back_color_erase, true);
}
@@ -1271,7 +1277,7 @@ static void fix_terminfo(TUIData *data)
"\x1b[8;%p1%d;%p2%dt");
}
- if (data->term == kTermXTerm || data->term == kTermRxvt) {
+ if (data->term == kTermXTerm || data->term == kTermRxvt || data->term == kTermPuTTY) {
data->unibi_ext.reset_scroll_region = (int)unibi_add_ext_str(ut, NULL,
"\x1b[r");
}