]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0481: Vim9: term_getjob() throws an exception on error v9.1.0481
authorErnie Rael <errael@raelity.com>
Thu, 13 Jun 2024 15:24:54 +0000 (17:24 +0200)
committerChristian Brabandt <cb@256bit.org>
Thu, 13 Jun 2024 15:24:54 +0000 (17:24 +0200)
Problem:  Vim9: term_getjob() throws an exception on error
Solution: Return null_job instead, when there is no job
          (Ernie Rael)

closes: #14984

Signed-off-by: Ernie Rael <errael@raelity.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/doc/terminal.txt
src/terminal.c
src/testdir/test_vim9_builtin.vim
src/version.c

index 0f0b42a64b19c87bf77dbf9be4bf45594dcee30e..f509ea979a5c5fca0a7b1dec7548bbe9a1dc1241 100644 (file)
@@ -1,4 +1,4 @@
-*terminal.txt* For Vim version 9.1.  Last change: 2024 Jun 08
+*terminal.txt* For Vim version 9.1.  Last change: 2024 Jun 13
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -647,7 +647,8 @@ term_getcursor({buf})                                       *term_getcursor()*
 term_getjob({buf})                                     *term_getjob()*
                Get the Job associated with terminal window {buf}.
                {buf} is used as with |term_getsize()|.
-               Returns |v:null| when there is no job.
+               Returns |v:null| when there is no job. In Vim9 script, return
+               null_job when there is no job.
 
                Can also be used as a |method|: >
                        GetBufnr()->term_getjob()
index 07b69c6a7c639dd9d42fadaad6dd71c9cec04945..648fc7872897641318801fbfb66dd5d8eede358f 100644 (file)
@@ -6171,8 +6171,16 @@ f_term_getjob(typval_T *argvars, typval_T *rettv)
     buf = term_get_buf(argvars, "term_getjob()");
     if (buf == NULL)
     {
-       rettv->v_type = VAR_SPECIAL;
-       rettv->vval.v_number = VVAL_NULL;
+       if (in_vim9script())
+       {
+           rettv->v_type = VAR_JOB;
+           rettv->vval.v_job = NULL;
+       }
+       else
+       {
+           rettv->v_type = VAR_SPECIAL;
+           rettv->vval.v_number = VVAL_NULL;
+       }
        return;
     }
 
index 3200b73358bfe5f19fc7f89ec534f6933b24ce6a..6b1a50d4169ab20e1cc917b3bef0a67b35de8395 100644 (file)
@@ -4557,6 +4557,7 @@ enddef
 def Test_term_getjob()
   CheckRunVimInTerminal
   v9.CheckSourceDefAndScriptFailure(['term_getjob(0z10)'], ['E1013: Argument 1: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 1'])
+  v9.CheckSourceDefAndScriptSuccess(['assert_true(term_getjob(0) == null_job)'])
 enddef
 
 def Test_term_getline()
index 89ba9fc3922b3af9a6f2c91043436a37b0642db3..1360d1cfc38461d65227f481d0935005509e8c40 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    481,
 /**/
     480,
 /**/