]> granicus.if.org Git - vim/commitdiff
patch 8.2.2662: there is no way to avoid some escape sequences v8.2.2662
authorBram Moolenaar <Bram@vim.org>
Sat, 27 Mar 2021 11:11:33 +0000 (12:11 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 27 Mar 2021 11:11:33 +0000 (12:11 +0100)
Problem:    There is no way to avoid some escape sequences.
Solution:   Suppress escape sequences when the --not-a-term argument is used.
            (Gary Johnson)

src/main.c
src/os_unix.c
src/testdir/test_startup.vim
src/version.c

index 369741abad71de7a5ee6b5f9088c22edd55fca57..30014d4be2753b97c95de41068ecb7af372f5aab 100644 (file)
@@ -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
index 1c807991741c254c9878e985090ee920b9747f0d..20c61106f90b941abcd6ab3bae9cf375af069a24 100644 (file)
@@ -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
index 323b019c1cb71ff0ed424deb3f9e536f220c5d4e..2d5fdcb246479fab568c0538b23afa7b8295603c 100644 (file)
@@ -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.
index 5596bbb27ccfd47995d93004401f19231f9b48e8..60fe36f0f6f190b86e4a4698887c5f776856737a 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2662,
 /**/
     2661,
 /**/