# HG changeset patch # User Bram Moolenaar # Date 1616843704 -3600 # Node ID d3cabf12c991b586a2337fa7116641e60b466bad # Parent 2caf37eac41b38f0fb58743bc536a0704067dbbd patch 8.2.2662: there is no way to avoid some escape sequences Commit: https://github.com/vim/vim/commit/7007e31bde75b6360a1b54c7572e4f855458f37d Author: Bram Moolenaar Date: Sat Mar 27 12:11:33 2021 +0100 patch 8.2.2662: there is no way to avoid some escape sequences Problem: There is no way to avoid some escape sequences. Solution: Suppress escape sequences when the --not-a-term argument is used. (Gary Johnson) diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -995,6 +995,19 @@ is_not_a_term() return params.not_a_term; } +/* + * Return TRUE when the --not-a-term argument was found or the GUI is in use. + */ + static int +is_not_a_term_or_gui() +{ + return params.not_a_term +#ifdef FEAT_GUI + || gui.in_use +#endif + ; +} + // When TRUE in a safe state when starting to wait for a character. static int was_safe = FALSE; @@ -1528,9 +1541,7 @@ getout(int exitval) #endif // Position the cursor on the last screen line, below all the text -#ifdef FEAT_GUI - if (!gui.in_use) -#endif + if (!is_not_a_term_or_gui()) windgoto((int)Rows - 1, 0); #if defined(FEAT_EVAL) || defined(FEAT_SYN_HL) @@ -1640,9 +1651,7 @@ getout(int exitval) } // Position the cursor again, the autocommands may have moved it -#ifdef FEAT_GUI - if (!gui.in_use) -#endif + if (!is_not_a_term_or_gui()) windgoto((int)Rows - 1, 0); #ifdef FEAT_JOB_CHANNEL diff --git a/src/os_unix.c b/src/os_unix.c --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3343,7 +3343,7 @@ exit_scroll(void) else out_char('\n'); } - else + else if (!is_not_a_term()) { restore_cterm_colors(); // get original colors back msg_clr_eos_force(); // clear the rest of the display @@ -3370,9 +3370,12 @@ mch_exit(int r) { settmode(TMODE_COOK); #ifdef FEAT_TITLE - // restore xterm title and icon name - mch_restore_title(SAVE_RESTORE_BOTH); - term_pop_title(SAVE_RESTORE_BOTH); + if (!is_not_a_term()) + { + // restore xterm title and icon name + mch_restore_title(SAVE_RESTORE_BOTH); + term_pop_title(SAVE_RESTORE_BOTH); + } #endif /* * When t_ti is not empty but it doesn't cause swapping terminal diff --git a/src/testdir/test_startup.vim b/src/testdir/test_startup.vim --- a/src/testdir/test_startup.vim +++ b/src/testdir/test_startup.vim @@ -1043,6 +1043,32 @@ func Test_io_not_a_terminal() \ 'Vim: Warning: Input is not from a terminal'], l) endfunc +" Test for --not-a-term avoiding escape codes. +func Test_not_a_term() + CheckUnix + CheckNotGui + + if &shellredir =~ '%s' + let redir = printf(&shellredir, 'Xvimout') + else + let redir = &shellredir .. ' Xvimout' + endif + + " Without --not-a-term there are a few escape sequences. + " This will take 2 seconds because of the missing --not-a-term + let cmd = GetVimProg() .. ' --cmd quit ' .. redir + exe "silent !" . cmd + call assert_match("\", readfile('Xvimout')->join()) + call delete('Xvimout') + + " With --not-a-term there are no escape sequences. + let cmd = GetVimProg() .. ' --not-a-term --cmd quit ' .. redir + exe "silent !" . cmd + call assert_notmatch("\", readfile('Xvimout')->join()) + call delete('Xvimout') +endfunc + + " Test for the "-w scriptout" argument func Test_w_arg() " Can't catch the output of gvim. diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2662, +/**/ 2661, /**/ 2660,