summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-10-18 21:26:05 +0200
committerBram Moolenaar <Bram@vim.org>2019-10-18 21:26:05 +0200
commit89577b3b3e559d6ed8467b8e756f86f9f9607cae (patch)
treecf36ae89257af02be7e6a26c2958f18ea6afd028
parent92ea26b925a0835badb0af2d5887238a4198cabb (diff)
patch 8.1.2174: screen not recognized as supporting "sgr" mouse codesv8.1.2174
Problem: Screen not recognized as supporting "sgr" mouse codes. Solution: Recognize screen 4.7. (Jordan Christiansen, closes #5042)
-rw-r--r--src/term.c16
-rw-r--r--src/testdir/test_termcodes.vim94
-rw-r--r--src/version.c2
3 files changed, 104 insertions, 8 deletions
diff --git a/src/term.c b/src/term.c
index cfbd7fe597..fa4375e4e8 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4649,8 +4649,8 @@ not_enough:
if (tp[0] == CSI)
switch_to_8bit();
- // rxvt sends its version number: "20703" is 2.7.3.
// Screen sends 40500.
+ // rxvt sends its version number: "20703" is 2.7.3.
// Ignore it for when the user has set 'term' to xterm,
// even though it's an rxvt.
if (version > 20000)
@@ -4661,6 +4661,7 @@ not_enough:
int need_flush = FALSE;
int is_iterm2 = FALSE;
int is_mintty = FALSE;
+ int is_screen = FALSE;
// mintty 2.9.5 sends 77;20905;0c.
// (77 is ASCII 'M' for mintty.)
@@ -4706,14 +4707,21 @@ not_enough:
is_not_xterm = TRUE;
}
+ // screen sends 83;40500;0 83 is 'S' in ASCII.
+ if (arg[0] == 83)
+ is_screen = TRUE;
+
// Only set 'ttymouse' automatically if it was not set
// by the user already.
if (!option_was_set((char_u *)"ttym"))
{
// Xterm version 277 supports SGR. Also support
- // Terminal.app, iTerm2 and mintty.
- if (version >= 277 || is_iterm2 || is_mac_terminal
- || is_mintty)
+ // Terminal.app, iTerm2, mintty, and screen 4.7+.
+ if ((!is_screen && version >= 277)
+ || is_iterm2
+ || is_mac_terminal
+ || is_mintty
+ || (is_screen && arg[1] >= 40700))
set_option_value((char_u *)"ttym", 0L,
(char_u *)"sgr", 0);
// if xterm version >= 95 use mouse dragging
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
index ae20280fe3..c4d9cb004e 100644
--- a/src/testdir/test_termcodes.vim
+++ b/src/testdir/test_termcodes.vim
@@ -882,10 +882,35 @@ func Test_xx01_term_style_response()
set t_RV=
endfunc
+" This checks the iTerm2 version response.
+" This must be after other tests, because it has side effects to xterm
+" properties.
+func Test_xx02_iTerm2_response()
+ " Termresponse is only parsed when t_RV is not empty.
+ set t_RV=x
+
+ " Old versions of iTerm2 used a different style term response.
+ set ttymouse=xterm
+ call test_option_not_set('ttymouse')
+ let seq = "\<Esc>[>0;95;c"
+ call feedkeys(seq, 'Lx!')
+ call assert_equal(seq, v:termresponse)
+ call assert_equal('xterm', &ttymouse)
+
+ set ttymouse=xterm
+ call test_option_not_set('ttymouse')
+ let seq = "\<Esc>[>0;95;0c"
+ call feedkeys(seq, 'Lx!')
+ call assert_equal(seq, v:termresponse)
+ call assert_equal('sgr', &ttymouse)
+
+ set t_RV=
+endfunc
+
" This checks the libvterm version response.
" This must be after other tests, because it has side effects to xterm
" properties.
-func Test_xx02_libvterm_response()
+func Test_xx03_libvterm_response()
" Termresponse is only parsed when t_RV is not empty.
set t_RV=x
@@ -899,10 +924,73 @@ func Test_xx02_libvterm_response()
set t_RV=
endfunc
+" This checks the Mac Terminal.app version response.
+" This must be after other tests, because it has side effects to xterm
+" properties.
+func Test_xx04_Mac_Terminal_response()
+ " Termresponse is only parsed when t_RV is not empty.
+ set t_RV=x
+
+ set ttymouse=xterm
+ call test_option_not_set('ttymouse')
+ let seq = "\<Esc>[>1;95;0c"
+ call feedkeys(seq, 'Lx!')
+ call assert_equal(seq, v:termresponse)
+ call assert_equal('sgr', &ttymouse)
+
+ " Reset is_not_xterm and is_mac_terminal.
+ set t_RV=
+ set term=xterm
+ set t_RV=x
+endfunc
+
+" This checks the mintty version response.
+" This must be after other tests, because it has side effects to xterm
+" properties.
+func Test_xx05_mintty_response()
+ " Termresponse is only parsed when t_RV is not empty.
+ set t_RV=x
+
+ set ttymouse=xterm
+ call test_option_not_set('ttymouse')
+ let seq = "\<Esc>[>77;20905;0c"
+ call feedkeys(seq, 'Lx!')
+ call assert_equal(seq, v:termresponse)
+ call assert_equal('sgr', &ttymouse)
+
+ set t_RV=
+endfunc
+
+" This checks the screen version response.
+" This must be after other tests, because it has side effects to xterm
+" properties.
+func Test_xx06_screen_response()
+ " Termresponse is only parsed when t_RV is not empty.
+ set t_RV=x
+
+ " Old versions of screen don't support SGR mouse mode.
+ set ttymouse=xterm
+ call test_option_not_set('ttymouse')
+ let seq = "\<Esc>[>83;40500;0c"
+ call feedkeys(seq, 'Lx!')
+ call assert_equal(seq, v:termresponse)
+ call assert_equal('xterm', &ttymouse)
+
+ " screen supports SGR mouse mode starting in version 4.7.
+ set ttymouse=xterm
+ call test_option_not_set('ttymouse')
+ let seq = "\<Esc>[>83;40700;0c"
+ call feedkeys(seq, 'Lx!')
+ call assert_equal(seq, v:termresponse)
+ call assert_equal('sgr', &ttymouse)
+
+ set t_RV=
+endfunc
+
" This checks the xterm version response.
" This must be after other tests, because it has side effects to xterm
" properties.
-func Test_xx03_xterm_response()
+func Test_xx07_xterm_response()
" Termresponse is only parsed when t_RV is not empty.
set t_RV=x
@@ -944,8 +1032,6 @@ func Test_xx03_xterm_response()
set t_RV=
endfunc
-" TODO: check other terminals response
-
func Test_get_termcode()
try
let k1 = &t_k1
diff --git a/src/version.c b/src/version.c
index 73e7e532d1..e2e213e9f3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2174,
+/**/
2173,
/**/
2172,