diff --git a/src/channel.c b/src/channel.c
index 073694e..be25f5e 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1016,11 +1016,9 @@
 	{
 	    /* When using a pty the same FD is set on multiple parts, only
 	     * close it when the last reference is closed. */
-	    if ((part == PART_IN || channel->ch_part[PART_IN].ch_fd != *fd)
-		    && (part == PART_OUT
-				    || channel->ch_part[PART_OUT].ch_fd != *fd)
-		    && (part == PART_ERR
-				   || channel->ch_part[PART_ERR].ch_fd != *fd))
+	    if ((part == PART_IN || channel->CH_IN_FD != *fd)
+		    && (part == PART_OUT || channel->CH_OUT_FD != *fd)
+		    && (part == PART_ERR || channel->CH_ERR_FD != *fd))
 		fd_close(*fd);
 	}
 	*fd = INVALID_FD;
@@ -4592,6 +4590,7 @@
     }
     mch_clear_job(job);
 
+    vim_free(job->jv_tty_name);
     vim_free(job->jv_stoponexit);
     free_callback(job->jv_exit_cb, job->jv_exit_partial);
 }
@@ -5164,6 +5163,8 @@
     nr = job->jv_proc_info.dwProcessId;
 #endif
     dict_add_nr_str(dict, "process", nr, NULL);
+    dict_add_nr_str(dict, "tty", 0L,
+		   job->jv_tty_name != NULL ? job->jv_tty_name : (char_u *)"");
 
     dict_add_nr_str(dict, "exitval", job->jv_exitval, NULL);
     dict_add_nr_str(dict, "exit_cb", 0L, job->jv_exit_cb);
diff --git a/src/evalfunc.c b/src/evalfunc.c
index fc0e05d..aa8b140 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -838,6 +838,7 @@
     {"term_getsize",	1, 1, f_term_getsize},
     {"term_getstatus",	1, 1, f_term_getstatus},
     {"term_gettitle",	1, 1, f_term_gettitle},
+    {"term_gettty",	1, 1, f_term_gettty},
     {"term_list",	0, 0, f_term_list},
     {"term_scrape",	1, 2, f_term_scrape},
     {"term_sendkeys",	2, 2, f_term_sendkeys},
diff --git a/src/os_unix.c b/src/os_unix.c
index 7c4b318..c90ab34 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -4170,7 +4170,7 @@
  * When successful both file descriptors are stored.
  */
     static void
-open_pty(int *pty_master_fd, int *pty_slave_fd)
+open_pty(int *pty_master_fd, int *pty_slave_fd, char_u **namep)
 {
     char	*tty_name;
 
@@ -4190,6 +4190,8 @@
 	    close(*pty_master_fd);
 	    *pty_master_fd = -1;
 	}
+	else if (namep != NULL)
+	    *namep = vim_strsave((char_u *)tty_name);
     }
 }
 #endif
@@ -4384,7 +4386,7 @@
 	 * If the slave can't be opened, close the master pty.
 	 */
 	if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
-	    open_pty(&pty_master_fd, &pty_slave_fd);
+	    open_pty(&pty_master_fd, &pty_slave_fd, NULL);
 	/*
 	 * If not opening a pty or it didn't work, try using pipes.
 	 */
@@ -5189,9 +5191,9 @@
 mch_job_start(char **argv, job_T *job, jobopt_T *options)
 {
     pid_t	pid;
-    int		fd_in[2];	/* for stdin */
-    int		fd_out[2];	/* for stdout */
-    int		fd_err[2];	/* for stderr */
+    int		fd_in[2] = {-1, -1};	/* for stdin */
+    int		fd_out[2] = {-1, -1};	/* for stdout */
+    int		fd_err[2] = {-1, -1};	/* for stderr */
     int		pty_master_fd = -1;
     int		pty_slave_fd = -1;
     channel_T	*channel = NULL;
@@ -5209,15 +5211,9 @@
 
     /* default is to fail */
     job->jv_status = JOB_FAILED;
-    fd_in[0] = -1;
-    fd_in[1] = -1;
-    fd_out[0] = -1;
-    fd_out[1] = -1;
-    fd_err[0] = -1;
-    fd_err[1] = -1;
 
     if (options->jo_pty)
-	open_pty(&pty_master_fd, &pty_slave_fd);
+	open_pty(&pty_master_fd, &pty_slave_fd, &job->jv_tty_name);
 
     /* TODO: without the channel feature connect the child to /dev/null? */
     /* Open pipes for stdin, stdout, stderr. */
diff --git a/src/proto/terminal.pro b/src/proto/terminal.pro
index 556f9dd..157b6aa 100644
--- a/src/proto/terminal.pro
+++ b/src/proto/terminal.pro
@@ -23,6 +23,7 @@
 void f_term_getsize(typval_T *argvars, typval_T *rettv);
 void f_term_getstatus(typval_T *argvars, typval_T *rettv);
 void f_term_gettitle(typval_T *argvars, typval_T *rettv);
+void f_term_gettty(typval_T *argvars, typval_T *rettv);
 void f_term_list(typval_T *argvars, typval_T *rettv);
 void f_term_scrape(typval_T *argvars, typval_T *rettv);
 void f_term_sendkeys(typval_T *argvars, typval_T *rettv);
diff --git a/src/structs.h b/src/structs.h
index cfe72db..522e15a 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1478,6 +1478,7 @@
     PROCESS_INFORMATION	jv_proc_info;
     HANDLE		jv_job_object;
 #endif
+    char_u	*jv_tty_name;	/* controlling tty, allocated */
     jobstatus_T	jv_status;
     char_u	*jv_stoponexit; /* allocated */
     int		jv_exitval;
@@ -1537,18 +1538,20 @@
     JIO_OUT
 } job_io_T;
 
+#define CH_PART_FD(part)	ch_part[part].ch_fd
+
 /* Ordering matters, it is used in for loops: IN is last, only SOCK/OUT/ERR
  * are polled. */
 typedef enum {
     PART_SOCK = 0,
-#define CH_SOCK_FD	ch_part[PART_SOCK].ch_fd
+#define CH_SOCK_FD	CH_PART_FD(PART_SOCK)
 #ifdef FEAT_JOB_CHANNEL
     PART_OUT,
-# define CH_OUT_FD	ch_part[PART_OUT].ch_fd
+# define CH_OUT_FD	CH_PART_FD(PART_OUT)
     PART_ERR,
-# define CH_ERR_FD	ch_part[PART_ERR].ch_fd
+# define CH_ERR_FD	CH_PART_FD(PART_ERR)
     PART_IN,
-# define CH_IN_FD	ch_part[PART_IN].ch_fd
+# define CH_IN_FD	CH_PART_FD(PART_IN)
 #endif
     PART_COUNT
 } ch_part_T;
diff --git a/src/terminal.c b/src/terminal.c
index edb4b75..c24ac9e 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -57,12 +57,16 @@
  * - add 't' to mode()
  * - set 'filetype' to "terminal"?
  * - use win_del_lines() to make scroll-up efficient.
+ * - Make StatusLineTerm adjust UserN highlighting like StatusLineNC does, see
+ *   use of hightlight_stlnc[].
  * - implement term_setsize()
  * - add test for giving error for invalid 'termsize' value.
  * - support minimal size when 'termsize' is "rows*cols".
  * - support minimal size when 'termsize' is empty?
  * - implement "term" for job_start(): more job options when starting a
  *   terminal.
+ * - support ":term NONE" to open a terminal with a pty but not running a job
+ *   in it.  The pty can be passed to gdb to run the executable in.
  * - if the job in the terminal does not support the mouse, we can use the
  *   mouse in the Terminal window for copy/paste.
  * - when 'encoding' is not utf-8, or the job is using another encoding, setup
@@ -97,6 +101,10 @@
     job_T	*tl_job;
     buf_T	*tl_buffer;
 
+    /* used when tl_job is NULL and only a pty was created */
+    int		tl_tty_fd;
+    char_u	*tl_tty_name;
+
     int		tl_terminal_mode;
     int		tl_channel_closed;
 
@@ -1925,6 +1933,26 @@
 }
 
 /*
+ * "term_gettty(buf)" function
+ */
+    void
+f_term_gettty(typval_T *argvars, typval_T *rettv)
+{
+    buf_T	*buf = term_get_buf(argvars);
+    char_u	*p;
+
+    rettv->v_type = VAR_STRING;
+    if (buf == NULL)
+	return;
+    if (buf->b_term->tl_job != NULL)
+	p = buf->b_term->tl_job->jv_tty_name;
+    else
+	p = buf->b_term->tl_tty_name;
+    if (p != NULL)
+	rettv->vval.v_string = vim_strsave(p);
+}
+
+/*
  * "term_list()" function
  */
     void
@@ -2216,6 +2244,7 @@
     if (term->tl_winpty == NULL)
 	goto failed;
 
+    /* TODO: if the command is "NONE" only create a pty. */
     spawn_config = winpty_spawn_config_new(
 	    WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN |
 		WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN,
@@ -2359,6 +2388,7 @@
 
     create_vterm(term, rows, cols);
 
+    /* TODO: if the command is "NONE" only create a pty. */
     argvars[0].v_type = VAR_STRING;
     argvars[0].vval.v_string = cmd;
     setup_job_options(&opt, rows, cols);
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 48ee1c4..cc5afc3 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -30,6 +30,12 @@
 
 func Test_terminal_basic()
   let buf = Run_shell_in_terminal()
+  if has("unix")
+    call assert_match("^/dev/", job_info(g:job).tty)
+    call assert_match("^/dev/", term_gettty(''))
+  else
+    call assert_equal("", job_info(g:job).tty)
+  endif
   call Stop_shell_in_terminal(buf)
   call term_wait(buf)
 
diff --git a/src/version.c b/src/version.c
index 3711461..9eb8b1a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    846,
+/**/
     845,
 /**/
     844,
