diff options
Diffstat (limited to 'data/vim/patches/8.1.0087')
-rw-r--r-- | data/vim/patches/8.1.0087 | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0087 b/data/vim/patches/8.1.0087 new file mode 100644 index 000000000..8f6a9c65d --- /dev/null +++ b/data/vim/patches/8.1.0087 @@ -0,0 +1,255 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0087 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0087 +Problem: v:shell_error is always zero when using terminal for "!cmd". +Solution: Use "exitval" of terminal-job. (Ozaki Kiichi, closes #2994) +Files: src/os_unix.c, src/os_win32.c, src/proto/terminal.pro, + src/terminal.c, src/testdir/test_terminal.vim + + +*** ../vim-8.1.0086/src/os_unix.c 2018-06-13 20:49:47.444338292 +0200 +--- src/os_unix.c 2018-06-19 19:53:43.794232600 +0200 +*************** +*** 4365,4370 **** +--- 4365,4371 ---- + char_u *tofree2 = NULL; + int retval = -1; + buf_T *buf; ++ job_T *job; + aco_save_T aco; + oparg_T oa; /* operator arguments */ + +*************** +*** 4374,4379 **** +--- 4375,4385 ---- + init_job_options(&opt); + ch_log(NULL, "starting terminal for system command '%s'", cmd); + buf = term_start(NULL, argv, &opt, TERM_START_SYSTEM); ++ if (buf == NULL) ++ goto theend; ++ ++ job = term_getjob(buf->b_term); ++ ++job->jv_refcount; + + /* Find a window to make "buf" curbuf. */ + aucmd_prepbuf(&aco, buf); +*************** +*** 4391,4399 **** + else + normal_cmd(&oa, TRUE); + } +! retval = 0; + ch_log(NULL, "system command finished"); + + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +--- 4397,4407 ---- + else + normal_cmd(&oa, TRUE); + } +! retval = job->jv_exitval; + ch_log(NULL, "system command finished"); + ++ job_unref(job); ++ + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +*** ../vim-8.1.0086/src/os_win32.c 2018-06-12 21:11:08.626548598 +0200 +--- src/os_win32.c 2018-06-19 19:53:43.798232583 +0200 +*************** +*** 4796,4801 **** +--- 4796,4802 ---- + long_u cmdlen; + int retval = -1; + buf_T *buf; ++ job_T *job; + aco_save_T aco; + oparg_T oa; /* operator arguments */ + +*************** +*** 4826,4831 **** +--- 4827,4835 ---- + if (buf == NULL) + return 255; + ++ job = term_getjob(buf->b_term); ++ ++job->jv_refcount; ++ + /* Find a window to make "buf" curbuf. */ + aucmd_prepbuf(&aco, buf); + +*************** +*** 4842,4850 **** + else + normal_cmd(&oa, TRUE); + } +! retval = 0; + ch_log(NULL, "system command finished"); + + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +--- 4846,4856 ---- + else + normal_cmd(&oa, TRUE); + } +! retval = job->jv_exitval; + ch_log(NULL, "system command finished"); + ++ job_unref(job); ++ + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +*** ../vim-8.1.0086/src/proto/terminal.pro 2018-05-17 13:52:53.000000000 +0200 +--- src/proto/terminal.pro 2018-06-19 19:53:43.798232583 +0200 +*************** +*** 55,59 **** +--- 55,60 ---- + void f_term_start(typval_T *argvars, typval_T *rettv); + void f_term_wait(typval_T *argvars, typval_T *rettv); + void term_send_eof(channel_T *ch); ++ job_T *term_getjob(term_T *term); + int terminal_enabled(void); + /* vim: set ft=c : */ +*** ../vim-8.1.0086/src/terminal.c 2018-06-18 22:15:46.255521457 +0200 +--- src/terminal.c 2018-06-19 19:53:43.798232583 +0200 +*************** +*** 5336,5341 **** +--- 5336,5347 ---- + } + } + ++ job_T * ++ term_getjob(term_T *term) ++ { ++ return term != NULL ? term->tl_job : NULL; ++ } ++ + # if defined(WIN3264) || defined(PROTO) + + /************************************** +*** ../vim-8.1.0086/src/testdir/test_terminal.vim 2018-06-12 18:04:28.038267855 +0200 +--- src/testdir/test_terminal.vim 2018-06-19 19:55:56.917638761 +0200 +*************** +*** 522,550 **** + exe buf . 'bwipe' + endfunc + +- " must be last, we can't go back from GUI to terminal +- func Test_zz_terminal_in_gui() +- if !CanRunGui() +- return +- endif +- +- " Ignore the "failed to create input context" error. +- call test_ignore_error('E285:') +- +- gui -f +- +- call assert_equal(1, winnr('$')) +- let buf = Run_shell_in_terminal({'term_finish': 'close'}) +- call Stop_shell_in_terminal(buf) +- call term_wait(buf) +- +- " closing window wipes out the terminal buffer a with finished job +- call WaitForAssert({-> assert_equal(1, winnr('$'))}) +- call assert_equal("", bufname(buf)) +- +- unlet g:job +- endfunc +- + func Test_terminal_list_args() + let buf = term_start([&shell, &shellcmdflag, 'echo "123"']) + call assert_fails(buf . 'bwipe', 'E517') +--- 522,527 ---- +*************** +*** 1546,1548 **** +--- 1523,1580 ---- + + exe buf . 'bwipe!' + endfunc ++ ++ " must be nearly the last, we can't go back from GUI to terminal ++ func Test_zz1_terminal_in_gui() ++ if !CanRunGui() ++ return ++ endif ++ ++ " Ignore the "failed to create input context" error. ++ call test_ignore_error('E285:') ++ ++ gui -f ++ ++ call assert_equal(1, winnr('$')) ++ let buf = Run_shell_in_terminal({'term_finish': 'close'}) ++ call Stop_shell_in_terminal(buf) ++ call term_wait(buf) ++ ++ " closing window wipes out the terminal buffer a with finished job ++ call WaitForAssert({-> assert_equal(1, winnr('$'))}) ++ call assert_equal("", bufname(buf)) ++ ++ unlet g:job ++ endfunc ++ ++ func Test_zz2_terminal_guioptions_bang() ++ if !has('gui_running') ++ return ++ endif ++ set guioptions+=! ++ ++ let filename = 'Xtestscript' ++ if has('win32') ++ let filename .= '.bat' ++ let prefix = '' ++ let contents = ['@echo off', 'exit %1'] ++ else ++ let filename .= '.sh' ++ let prefix = './' ++ let contents = ['#!/bin/sh', 'exit $1'] ++ endif ++ call writefile(contents, filename) ++ call setfperm(filename, 'rwxrwx---') ++ ++ " Check if v:shell_error is equal to the exit status. ++ let exitval = 0 ++ execute printf(':!%s%s %d', prefix, filename, exitval) ++ call assert_equal(exitval, v:shell_error) ++ ++ let exitval = 9 ++ execute printf(':!%s%s %d', prefix, filename, exitval) ++ call assert_equal(exitval, v:shell_error) ++ ++ set guioptions& ++ call delete(filename) ++ endfunc +*** ../vim-8.1.0086/src/version.c 2018-06-19 19:46:01.703936337 +0200 +--- src/version.c 2018-06-19 19:50:34.551011945 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 87, + /**/ + +-- +From "know your smileys": + :-) Funny + |-) Funny Oriental + (-: Funny Australian + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |