Patch 8.0.0818
Problem:    Cannot get the cursor position of a terminal.
Solution:   Add term_getcursor().
Files:      runtime/doc/eval.txt, src/evalfunc.c, src/terminal.c,
            src/proto/terminal.pro


*** ../vim-8.0.0817/runtime/doc/eval.txt        2017-07-30 18:19:24.116358017 
+0200
--- runtime/doc/eval.txt        2017-07-30 18:24:20.906242151 +0200
***************
*** 2370,2375 ****
--- 2370,2376 ----
  tanh({expr})                  Float   hyperbolic tangent of {expr}
  tempname()                    String  name for a temporary file
  term_getattr({attr}, {what}   Number  get the value of attribute {what}
+ term_getcursor({buf})         List    get the cursor position of a terminal
  term_getjob({buf})            Job     get the job associated with a terminal
  term_getline({buf}[, {row}])  String  get a line of text from a terminal
  term_getsize({buf})           List    get the size of a terminal
***************
*** 7902,7907 ****
--- 7911,7929 ----
                        strike
                        reverse
  
+ term_getcursor({buf})                                 *term_getcursor()*
+               Get the cusor position of terminal {buf}. Returns a list with
+               three numbers: [rows, cols, visible].  "rows" and "cols" are
+               zero based.  "visible" is one when the cursor is visible, zero
+               when it is hidden.
+               
+               This is the cursor position of the terminal itself, not of the
+               Vim window.
+ 
+               {buf} must be the buffer number of a terminal window. If the
+               buffer does not exist or is not a terminal window, an empty
+               list is returned.
+ 
  term_getjob({buf})                                    *term_getjob()*
                Get the Job associated with terminal window {buf}.
                {buf} is used as with |term_getsize()|.
*** ../vim-8.0.0817/src/evalfunc.c      2017-07-30 18:19:24.116358017 +0200
--- src/evalfunc.c      2017-07-30 18:25:32.793729591 +0200
***************
*** 832,837 ****
--- 832,838 ----
      {"tempname",      0, 0, f_tempname},
  #ifdef FEAT_TERMINAL
      {"term_getattr",  2, 2, f_term_getattr},
+     {"term_getcursor",        1, 1, f_term_getcursor},
      {"term_getjob",   1, 1, f_term_getjob},
      {"term_getline",  1, 2, f_term_getline},
      {"term_getsize",  1, 1, f_term_getsize},
*** ../vim-8.0.0817/src/terminal.c      2017-07-30 18:19:24.116358017 +0200
--- src/terminal.c      2017-07-30 18:23:51.354452849 +0200
***************
*** 53,59 ****
   *      :term <24x80> <close> vim notes.txt
   * - To set BS correctly, check get_stty(); Pass the fd of the pty.
   * - do not store terminal window in viminfo.  Or prefix term:// ?
-  * - add term_getcursor() - return cursor position: [row, col, visible]
   * - add a character in :ls output
   * - add 't' to mode()
   * - when closing window and job has not ended, make terminal hidden?
--- 53,58 ----
***************
*** 1637,1642 ****
--- 1636,1659 ----
  }
  
  /*
+  * Get the buffer from the first argument in "argvars".
+  * Returns NULL when the buffer is not for a terminal window.
+  */
+     static buf_T *
+ term_get_buf(typval_T *argvars)
+ {
+     buf_T *buf;
+ 
+     (void)get_tv_number(&argvars[0]);     /* issue errmsg if type error */
+     ++emsg_off;
+     buf = get_buf_tv(&argvars[0], FALSE);
+     --emsg_off;
+     if (buf == NULL || buf->b_term == NULL)
+       return NULL;
+     return buf;
+ }
+ 
+ /*
   * "term_getattr(attr, name)" function
   */
      void
***************
*** 1671,1691 ****
  }
  
  /*
!  * Get the buffer from the first argument in "argvars".
!  * Returns NULL when the buffer is not for a terminal window.
   */
!     static buf_T *
! term_get_buf(typval_T *argvars)
  {
!     buf_T *buf;
  
!     (void)get_tv_number(&argvars[0]);     /* issue errmsg if type error */
!     ++emsg_off;
!     buf = get_buf_tv(&argvars[0], FALSE);
!     --emsg_off;
!     if (buf == NULL || buf->b_term == NULL)
!       return NULL;
!     return buf;
  }
  
  /*
--- 1688,1710 ----
  }
  
  /*
!  * "term_getcursor(buf)" function
   */
!     void
! f_term_getcursor(typval_T *argvars, typval_T *rettv)
  {
!     buf_T     *buf = term_get_buf(argvars);
!     list_T    *l;
  
!     if (rettv_list_alloc(rettv) == FAIL)
!       return;
!     if (buf == NULL)
!       return;
! 
!     l = rettv->vval.v_list;
!     list_append_number(l, buf->b_term->tl_cursor_pos.row);
!     list_append_number(l, buf->b_term->tl_cursor_pos.col);
!     list_append_number(l, buf->b_term->tl_cursor_visible);
  }
  
  /*
*** ../vim-8.0.0817/src/proto/terminal.pro      2017-07-30 16:51:35.622144012 
+0200
--- src/proto/terminal.pro      2017-07-30 18:25:37.713694511 +0200
***************
*** 16,21 ****
--- 16,22 ----
  char_u *term_get_status_text(term_T *term);
  int set_ref_in_term(int copyID);
  void f_term_getattr(typval_T *argvars, typval_T *rettv);
+ void f_term_getcursor(typval_T *argvars, typval_T *rettv);
  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);
*** ../vim-8.0.0817/src/version.c       2017-07-30 18:19:24.120357988 +0200
--- src/version.c       2017-07-30 18:25:14.161862439 +0200
***************
*** 771,772 ****
--- 771,774 ----
  {   /* Add new patch number below this line */
+ /**/
+     818,
  /**/

-- 
       "To whoever finds this note -
       I have been imprisoned by my father who wishes me to marry
       against my will.  Please please please please come and rescue me.
       I am in the tall tower of Swamp Castle."
   SIR LAUNCELOT's eyes light up with holy inspiration.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui