Patch 8.0.0893
Problem: Cannot get the scroll count of a terminal window.
Solution: Add term_getscrolled().
Files: src/terminal.c, src/proto/terminal.pro, src/evalfunc.c,
runtime/doc/eval.txt, src/testdir/test_terminal.vim
*** ../vim-8.0.0892/src/terminal.c 2017-08-08 21:52:18.314629597 +0200
--- src/terminal.c 2017-08-08 23:05:20.738622853 +0200
***************
*** 40,53 ****
* - 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
* job finishes).
* - add option values to the command:
* :term <24x80> <close> vim notes.txt
* - support different cursor shapes, colors and attributes
* - make term_getcursor() return type (none/block/bar/underline) and
* attributes (color, blink, etc.)
* - MS-Windows: no redraw for 'updatetime' #1915
- * - term_getline() and term_scrape() don't work once the job exited. Use the
- * buffer and scrollback, remembering the topline from when the job exited.
* - To set BS correctly, check get_stty(); Pass the fd of the pty.
* For the GUI fill termios with default values, perhaps like pangoterm:
*
http://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/head:/main.c#L134
--- 40,54 ----
* - 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
* job finishes).
+ * patch by Yasuhiro: #1950
* - add option values to the command:
* :term <24x80> <close> vim notes.txt
+ * or use:
+ * :term ++24x80 ++close vim notes.txt
* - support different cursor shapes, colors and attributes
* - make term_getcursor() return type (none/block/bar/underline) and
* attributes (color, blink, etc.)
* - MS-Windows: no redraw for 'updatetime' #1915
* - To set BS correctly, check get_stty(); Pass the fd of the pty.
* For the GUI fill termios with default values, perhaps like pangoterm:
*
http://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/head:/main.c#L134
***************
*** 2026,2031 ****
--- 2027,2045 ----
}
/*
+ * "term_getscrolled(buf)" function
+ */
+ void
+ f_term_getscrolled(typval_T *argvars, typval_T *rettv)
+ {
+ buf_T *buf = term_get_buf(argvars);
+
+ if (buf == NULL)
+ return;
+ rettv->vval.v_number = buf->b_term->tl_scrollback_scrolled;
+ }
+
+ /*
* "term_getsize(buf)" function
*/
void
*** ../vim-8.0.0892/src/proto/terminal.pro 2017-08-06 14:57:44.939764548
+0200
--- src/proto/terminal.pro 2017-08-08 22:56:08.898699415 +0200
***************
*** 21,26 ****
--- 21,27 ----
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_getscrolled(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);
*** ../vim-8.0.0892/src/evalfunc.c 2017-08-07 20:51:39.654616269 +0200
--- src/evalfunc.c 2017-08-08 22:55:36.882936396 +0200
***************
*** 835,840 ****
--- 835,841 ----
{"term_getcursor", 1, 1, f_term_getcursor},
{"term_getjob", 1, 1, f_term_getjob},
{"term_getline", 2, 2, f_term_getline},
+ {"term_getscrolled", 1, 1, f_term_getscrolled},
{"term_getsize", 1, 1, f_term_getsize},
{"term_getstatus", 1, 1, f_term_getstatus},
{"term_gettitle", 1, 1, f_term_gettitle},
*** ../vim-8.0.0892/runtime/doc/eval.txt 2017-08-06 19:06:59.583629245
+0200
--- runtime/doc/eval.txt 2017-08-08 22:56:04.594731269 +0200
***************
*** 2373,2378 ****
--- 2373,2379 ----
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_getscrolled({buf}) Number get the scroll count of a
terminal
term_getsize({buf}) List get the size of a terminal
term_getstatus({buf}) String get the status of a terminal
term_gettitle({buf}) String get the title of a terminal
***************
*** 2984,2989 ****
--- 2985,2995 ----
The file is flushed after every message, on Unix you can use
"tail -f" to see what is going on in real time.
+ This function is not available in the |sandbox|.
+ NOTE: the channel communication is stored in the file, be
+ aware that this may contain confidential and privacy sensitive
+ information, e.g. a password you type in a terminal window.
+
ch_open({address} [, {options}]) *ch_open()*
Open a channel to {address}. See |channel|.
***************
*** 7940,7945 ****
--- 7954,7971 ----
returned.
{only available when compiled with the |+terminal| feature}
+ term_getscrolled({buf})
*term_getscrolled()*
+ Return the number of lines that scrolled to above the top of
+ terminal {buf}. This is the offset between the row number
+ used for |term_getline()| and |getline()|, so that: >
+ term_getline(buf, N)
+ < is equal to: >
+ `getline(N + term_getscrolled(buf))
+ < (if that line exists).
+
+ {buf} is used as with |term_getsize()|.
+ {only available when compiled with the |+terminal| feature}
+
term_getsize({buf}) *term_getsize()*
Get the size of terminal {buf}. Returns a list with two
numbers: [rows, cols]. This is the size of the terminal, not
*** ../vim-8.0.0892/src/testdir/test_terminal.vim 2017-08-07
20:38:38.596341530 +0200
--- src/testdir/test_terminal.vim 2017-08-08 23:03:47.399311328 +0200
***************
*** 227,235 ****
--- 227,239 ----
sleep 100m
endif
+ let scrolled = term_getscrolled(buf)
call assert_equal('1', getline(1))
+ call assert_equal('1', term_getline(buf, 1 - scrolled))
call assert_equal('49', getline(49))
+ call assert_equal('49', term_getline(buf, 49 - scrolled))
call assert_equal('200', getline(200))
+ call assert_equal('200', term_getline(buf, 200 - scrolled))
exe buf . 'bwipe'
call delete('Xtext')
*** ../vim-8.0.0892/src/version.c 2017-08-08 21:52:18.314629597 +0200
--- src/version.c 2017-08-08 22:54:16.511531549 +0200
***************
*** 771,772 ****
--- 771,774 ----
{ /* Add new patch number below this line */
+ /**/
+ 893,
/**/
--
To the optimist, the glass is half full.
To the pessimist, the glass is half empty.
To the engineer, the glass is twice as big as it needs to be.
/// 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.