1
0
forked from aniani/vim

patch 9.1.1281: extra newline output when editing stdin

Problem:  extra newline output when editing stdin
Solution: remove outputting when reading from stdin in non-terminal mode
          (Abhijit Barik)

fixes: #16856
closes: #17047

Co-authored-by: LemonBoy <LemonBoy@users.noreply.github.com>
Signed-off-by: Abhijit Barik <Abhijit.Barik@ivanti.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Abhijit Barik
2025-04-06 16:12:06 +02:00
committed by Christian Brabandt
parent ba73766788
commit 221927b2bf
3 changed files with 65 additions and 1 deletions

View File

@@ -660,7 +660,7 @@ vim_main2(void)
#if defined(UNIX) || defined(VMS)
// When switching screens and something caused a message from a vimrc
// script, need to output an extra newline on exit.
if ((did_emsg || msg_didout) && *T_TI != NUL)
if ((did_emsg || msg_didout) && *T_TI != NUL && params.edit_type != EDIT_STDIN)
newline_on_exit = TRUE;
#endif

View File

@@ -781,6 +781,68 @@ func Test_progpath()
call assert_match('vim\c', v:progname)
endfunc
func Test_stdin_no_newline()
CheckScreendump
CheckUnix
CheckExecutable bash
let $PS1 = 'TEST_PROMPT> '
let buf = RunVimInTerminal('', #{rows: 20, cmd: 'bash --noprofile --norc'})
call TermWait(buf, 100)
" Write input to temp file
call term_sendkeys(buf, "echo hello > temp.txt\<CR>")
call TermWait(buf, 200)
call term_sendkeys(buf, "bash -c '../vim --not-a-term -u NONE -c \":q!\" -' < temp.txt\<CR>")
call TermWait(buf, 200)
" Capture terminal output
let lines = []
for i in range(1, term_getsize(buf)[0])
call add(lines, term_getline(buf, i))
endfor
" Find the command line in output
let cmd_line = -1
for i in range(len(lines))
if lines[i] =~ '.*vim.*--not-a-term.*'
let cmd_line = i
break
endif
endfor
if cmd_line == -1
call assert_report('Command line not found in terminal output')
else
let next_line = -1
for i in range(cmd_line + 1, len(lines))
if lines[i] =~ '\S'
let next_line = i
break
endif
endfor
if next_line == -1
call assert_report('No prompt found after command execution')
else
call assert_equal(cmd_line + 1, next_line, 'Prompt should be on the immediate next line')
call assert_match('.*TEST_PROMPT>.*', lines[next_line], 'Line should contain the prompt PS1')
endif
endif
" Clean up temp file and exit shell
call term_sendkeys(buf, "rm -f temp.txt\<CR>")
call term_sendkeys(buf, "exit\<CR>")
call TermWait(buf, 200)
if job_status(term_getjob(buf)) ==# 'run'
call StopVimInTerminal(buf)
endif
unlet $PS1
endfunc
func Test_silent_ex_mode()
" must be able to get the output of Vim.
CheckUnix

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1281,
/**/
1280,
/**/