diff src/terminal.c @ 11882:69e7379f46db v8.0.0821

patch 8.0.0821: cannot get the title and status of a terminal window commit https://github.com/vim/vim/commit/b000e328efcf859d14454ffd241d44f6d14f300b Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 30 19:38:21 2017 +0200 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().
author Christian Brabandt <cb@256bit.org>
date Sun, 30 Jul 2017 19:45:03 +0200
parents 45558e0507e8
children 7928d62d29ee
line wrap: on
line diff
--- 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 @@ term_convert_key(term_T *term, int c, ch
 }
 
 /*
- * 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 @@ f_term_getsize(typval_T *argvars, typval
 }
 
 /*
+ * "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