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.