2017-07-30 19:28 GMT+03:00 Bram Moolenaar <[email protected]>:
>
> 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.

Maybe extend this to “[rows, cols, type, attrs]”? Third entry is
something like “"invisible" / "block" / "underscore" / "bar" / …”,
last entry is a dictionary defining blink, highlight attributes, etc.
This would describe cursor state better should you implement cursor
shaping support.

> +
> +               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.

-- 
-- 
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.
  • Patch 8.0.0818 Bram Moolenaar
    • Re: Patch 8.0.0818 Nikolay Aleksandrovich Pavlov

Raspunde prin e-mail lui