Bram Moolenaar | 544d3bc | 2017-02-05 21:14:50 +0100 | [diff] [blame] | 1 | " Functions about view shared by several tests |
| 2 | |
Bram Moolenaar | 0aa398f | 2017-09-30 21:23:55 +0200 | [diff] [blame] | 3 | " Only load this script once. |
Bram Moolenaar | 7a39dd7 | 2019-06-23 00:50:15 +0200 | [diff] [blame] | 4 | if exists('*Screenline') |
Bram Moolenaar | 0aa398f | 2017-09-30 21:23:55 +0200 | [diff] [blame] | 5 | finish |
| 6 | endif |
| 7 | |
Bram Moolenaar | 7a39dd7 | 2019-06-23 00:50:15 +0200 | [diff] [blame] | 8 | " Get line "lnum" as displayed on the screen. |
| 9 | " Trailing white space is trimmed. |
| 10 | func Screenline(lnum) |
| 11 | let chars = [] |
| 12 | for c in range(1, winwidth(0)) |
| 13 | call add(chars, nr2char(screenchar(a:lnum, c))) |
| 14 | endfor |
| 15 | let line = join(chars, '') |
| 16 | return matchstr(line, '^.\{-}\ze\s*$') |
| 17 | endfunc |
| 18 | |
Bram Moolenaar | 2912abb | 2019-03-29 14:16:42 +0100 | [diff] [blame] | 19 | " Get text on the screen, including composing characters. |
| 20 | " ScreenLines(lnum, width) or |
| 21 | " ScreenLines([start, end], width) |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 22 | func ScreenLines(lnum, width) abort |
Bram Moolenaar | 2912abb | 2019-03-29 14:16:42 +0100 | [diff] [blame] | 23 | redraw! |
| 24 | if type(a:lnum) == v:t_list |
| 25 | let start = a:lnum[0] |
| 26 | let end = a:lnum[1] |
| 27 | else |
| 28 | let start = a:lnum |
| 29 | let end = a:lnum |
| 30 | endif |
| 31 | let lines = [] |
| 32 | for l in range(start, end) |
| 33 | let lines += [join(map(range(1, a:width), 'screenstring(l, v:val)'), '')] |
| 34 | endfor |
| 35 | return lines |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 36 | endfunc |
Bram Moolenaar | 2912abb | 2019-03-29 14:16:42 +0100 | [diff] [blame] | 37 | |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 38 | func ScreenAttrs(lnum, width) abort |
Bram Moolenaar | 0aa398f | 2017-09-30 21:23:55 +0200 | [diff] [blame] | 39 | redraw! |
| 40 | if type(a:lnum) == v:t_list |
| 41 | let start = a:lnum[0] |
| 42 | let end = a:lnum[1] |
| 43 | else |
| 44 | let start = a:lnum |
| 45 | let end = a:lnum |
| 46 | endif |
| 47 | let attrs = [] |
| 48 | for l in range(start, end) |
| 49 | let attrs += [map(range(1, a:width), 'screenattr(l, v:val)')] |
| 50 | endfor |
| 51 | return attrs |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 52 | endfunc |
Bram Moolenaar | 0aa398f | 2017-09-30 21:23:55 +0200 | [diff] [blame] | 53 | |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 54 | func NewWindow(height, width) abort |
Bram Moolenaar | 544d3bc | 2017-02-05 21:14:50 +0100 | [diff] [blame] | 55 | exe a:height . 'new' |
| 56 | exe a:width . 'vsp' |
Bram Moolenaar | bffba7f | 2019-09-20 17:00:17 +0200 | [diff] [blame] | 57 | set winfixwidth winfixheight |
Bram Moolenaar | 544d3bc | 2017-02-05 21:14:50 +0100 | [diff] [blame] | 58 | redraw! |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 59 | endfunc |
Bram Moolenaar | 544d3bc | 2017-02-05 21:14:50 +0100 | [diff] [blame] | 60 | |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 61 | func CloseWindow() abort |
Bram Moolenaar | 544d3bc | 2017-02-05 21:14:50 +0100 | [diff] [blame] | 62 | bw! |
| 63 | redraw! |
Bram Moolenaar | 97f0eb1 | 2022-10-06 19:49:13 +0100 | [diff] [blame^] | 64 | endfunc |