diff --git a/src/channel.c b/src/channel.c
index f5d86ed..98a668c 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -5002,6 +5002,8 @@
     static void
 job_free_contents(job_T *job)
 {
+    int		i;
+
     ch_log(job->jv_channel, "Freeing job");
     if (job->jv_channel != NULL)
     {
@@ -5019,6 +5021,12 @@
     vim_free(job->jv_tty_out);
     vim_free(job->jv_stoponexit);
     free_callback(job->jv_exit_cb, job->jv_exit_partial);
+    if (job->argv != NULL)
+    {
+	for (i = 0; job->argv[i] != NULL; i++)
+	    vim_free(job->argv[i]);
+	vim_free(job->argv);
+    }
 }
 
     static void
@@ -5463,6 +5471,8 @@
 #endif
     jobopt_T	opt;
     ch_part_T	part;
+    int		len;
+    int		i;
 
     job = job_alloc();
     if (job == NULL)
@@ -5593,11 +5603,21 @@
 #endif
     }
 
+    /* Save the command used to start the job */
+    len = 0;
+    for (i = 0; argv[i] != NULL; i++)
+	len++;
+    job->argv = (char_u **)alloc(sizeof(char_u *) * (len + 1));
+    if (job->argv == NULL)
+	goto theend;
+    for (i = 0; argv[i] != NULL; i++)
+	job->argv[i] = vim_strsave((char_u *)argv[i]);
+    job->argv[i] = NULL;
+
 #ifdef USE_ARGV
     if (ch_log_active())
     {
 	garray_T    ga;
-	int	    i;
 
 	ga_init2(&ga, (int)sizeof(char), 200);
 	for (i = 0; i < argc; ++i)
@@ -5661,6 +5681,8 @@
 {
     dictitem_T	*item;
     varnumber_T	nr;
+    list_T	*l;
+    int		i;
 
     dict_add_nr_str(dict, "status", 0L, (char_u *)job_status(job));
 
@@ -5689,6 +5711,33 @@
     dict_add_nr_str(dict, "exitval", job->jv_exitval, NULL);
     dict_add_nr_str(dict, "exit_cb", 0L, job->jv_exit_cb);
     dict_add_nr_str(dict, "stoponexit", 0L, job->jv_stoponexit);
+
+    l = list_alloc();
+    if (l != NULL)
+    {
+	dict_add_list(dict, "cmd", l);
+	for (i = 0; job->argv[i] != NULL; i++)
+	    list_append_string(l, job->argv[i], -1);
+    }
+}
+
+/*
+ * Implementation of job_info() to return info for all jobs.
+ */
+    void
+job_info_all(list_T *l)
+{
+    job_T	*job;
+    typval_T	tv;
+
+    for (job = first_job; job != NULL; job = job->jv_next)
+    {
+	tv.v_type = VAR_JOB;
+	tv.vval.v_job = job;
+
+	if (list_append_tv(l, &tv) != OK)
+	    return;
+    }
 }
 
 /*
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 599d61a..62dc40e 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -682,7 +682,7 @@
     {"items",		1, 1, f_items},
 #ifdef FEAT_JOB_CHANNEL
     {"job_getchannel",	1, 1, f_job_getchannel},
-    {"job_info",	1, 1, f_job_info},
+    {"job_info",	0, 1, f_job_info},
     {"job_setoptions",	2, 2, f_job_setoptions},
     {"job_start",	1, 2, f_job_start},
     {"job_status",	1, 1, f_job_status},
@@ -7007,10 +7007,15 @@
     static void
 f_job_info(typval_T *argvars, typval_T *rettv)
 {
-    job_T	*job = get_job_arg(&argvars[0]);
+    if (argvars[0].v_type != VAR_UNKNOWN)
+    {
+	job_T	*job = get_job_arg(&argvars[0]);
 
-    if (job != NULL && rettv_dict_alloc(rettv) != FAIL)
-	job_info(job, rettv->vval.v_dict);
+	if (job != NULL && rettv_dict_alloc(rettv) != FAIL)
+	    job_info(job, rettv->vval.v_dict);
+    }
+    else if (rettv_list_alloc(rettv) == OK)
+	job_info_all(rettv->vval.v_list);
 }
 
 /*
diff --git a/src/proto/channel.pro b/src/proto/channel.pro
index dcf29b8..2505df5 100644
--- a/src/proto/channel.pro
+++ b/src/proto/channel.pro
@@ -68,5 +68,6 @@
 job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg);
 char *job_status(job_T *job);
 void job_info(job_T *job, dict_T *dict);
+void job_info_all(list_T *l);
 int job_stop(job_T *job, typval_T *argvars, char *type);
 /* vim: set ft=c : */
diff --git a/src/structs.h b/src/structs.h
index 35433b1..55dd1fe 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -271,10 +271,10 @@
 # define w_p_scl w_onebuf_opt.wo_scl	/* 'signcolumn' */
 #endif
 #ifdef FEAT_TERMINAL
-    char_u	*wo_tk;
-#define w_p_tk w_onebuf_opt.wo_tk	/* 'termkey' */
-    char_u	*wo_tms;
-#define w_p_tms w_onebuf_opt.wo_tms	/* 'termsize' */
+    char_u	*wo_twk;
+# define w_p_twk w_onebuf_opt.wo_twk	/* 'termwinkey' */
+    char_u	*wo_tws;
+# define w_p_tws w_onebuf_opt.wo_tws	/* 'termwinsize' */
 #endif
 
 #ifdef FEAT_EVAL
@@ -1488,6 +1488,7 @@
     int		jv_copyID;
 
     channel_T	*jv_channel;	/* channel for I/O, reference counted */
+    char_u	**argv;		/* command line used to start the job */
 };
 
 /*
@@ -2262,6 +2263,9 @@
 #ifdef FEAT_LISP
     char_u	*b_p_lw;	/* 'lispwords' local value */
 #endif
+#ifdef FEAT_TERMINAL
+    long	b_p_twsl;	/* 'termwinscroll' */
+#endif
 
     /* end of buffer options */
 
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index ce573f9..805fa8d 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -508,6 +508,16 @@
   let info = job_info(job)
   call assert_equal("dead", info.status)
   call assert_equal("term", info.stoponexit)
+  call assert_equal(2, len(info.cmd))
+  call assert_equal("test_channel_pipe.py", info.cmd[1])
+
+  let found = 0
+  for j in job_info()
+    if j == job
+      let found += 1
+    endif
+  endfor
+  call assert_equal(1, found)
 endfunc
 
 func Test_nl_pipe()
diff --git a/src/version.c b/src/version.c
index b1b7f4a..53aba0d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1742,
+/**/
     1741,
 /**/
     1740,
