Mercurial > vim
changeset 24242:d3cabf12c991 v8.2.2662
patch 8.2.2662: there is no way to avoid some escape sequences
Commit: https://github.com/vim/vim/commit/7007e31bde75b6360a1b54c7572e4f855458f37d
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 27 Mar 2021 12:15:04 +0100 |
parents | 2caf37eac41b |
children | 14bd3e0d0c71 |
files | src/main.c src/os_unix.c src/testdir/test_startup.vim src/version.c |
diffstat | 4 files changed, 50 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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
--- 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("\<Esc>", 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("\<Esc>", readfile('Xvimout')->join()) + call delete('Xvimout') +endfunc + + " Test for the "-w scriptout" argument func Test_w_arg() " Can't catch the output of gvim.