patch 8.0.0821: cannot get the title and status of a terminal window
Problem: Cannot get the title and status of a terminal window.
Solution: Implement term_gettitle() and term_getstatus().
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 2c11de1..fc0e05d 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -836,6 +836,8 @@
{"term_getjob", 1, 1, f_term_getjob},
{"term_getline", 1, 2, f_term_getline},
{"term_getsize", 1, 1, f_term_getsize},
+ {"term_getstatus", 1, 1, f_term_getstatus},
+ {"term_gettitle", 1, 1, f_term_gettitle},
{"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/proto/terminal.pro b/src/proto/terminal.pro
index 63cda59..2478929 100644
--- a/src/proto/terminal.pro
+++ b/src/proto/terminal.pro
@@ -20,6 +20,8 @@
void f_term_getjob(typval_T *argvars, typval_T *rettv);
void f_term_getline(typval_T *argvars, typval_T *rettv);
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_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/terminal.c b/src/terminal.c
index b289f6c..d04b99e 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -36,15 +36,11 @@
* that buffer, attributes come from the scrollback buffer tl_scrollback.
*
* TODO:
- * - Problem with statusline (Zyx, Christian)
* - Make CTRL-W "" paste register content to the job?
* - in bash mouse clicks are inserting characters.
* - mouse scroll: when over other window, scroll that window.
* - For the scrollback buffer store lines in the buffer, only attributes in
* tl_scrollback.
- * - Add term_status(): "" if not a terminal, "running" if job running,
- * "finished" if finished, "running,vim" when job is running and in
- * Terminal mode, "running,vim,pending" when job output is pending.
* - When the job ends:
* - Need an option or argument to drop the window+buffer right away, to be
* used for a shell or Vim. 'termfinish'; "close", "open" (open window when
@@ -560,7 +556,7 @@
}
/*
- * Return TRUE if the job for "buf" is still running.
+ * Return TRUE if the job for "term" is still running.
*/
static int
term_job_running(term_T *term)
@@ -1799,6 +1795,46 @@
}
/*
+ * "term_getstatus(buf)" function
+ */
+ void
+f_term_getstatus(typval_T *argvars, typval_T *rettv)
+{
+ buf_T *buf = term_get_buf(argvars);
+ term_T *term;
+ char_u val[100];
+
+ rettv->v_type = VAR_STRING;
+ if (buf == NULL)
+ return;
+ term = buf->b_term;
+
+ if (term_job_running(term))
+ STRCPY(val, "running");
+ else
+ STRCPY(val, "finished");
+ if (term->tl_terminal_mode)
+ STRCAT(val, ",terminal");
+ rettv->vval.v_string = vim_strsave(val);
+}
+
+/*
+ * "term_gettitle(buf)" function
+ */
+ void
+f_term_gettitle(typval_T *argvars, typval_T *rettv)
+{
+ buf_T *buf = term_get_buf(argvars);
+
+ rettv->v_type = VAR_STRING;
+ if (buf == NULL)
+ return;
+
+ if (buf->b_term->tl_title != NULL)
+ rettv->vval.v_string = vim_strsave(buf->b_term->tl_title);
+}
+
+/*
* "term_list()" function
*/
void
diff --git a/src/version.c b/src/version.c
index 8733db2..875119f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 821,
+/**/
820,
/**/
819,