summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0087
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0087')
-rw-r--r--data/vim/patches/8.1.0087255
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 ///