Mercurial > vim
view runtime/indent/testdir/runtest.vim @ 17358:d1ea88736ebd v8.1.1678
patch 8.1.1678: using popup_menu() does not scroll to show the selected line
commit https://github.com/vim/vim/commit/a901a37bae9f4e2848d6d7ac7b0875d72f43e1eb
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jul 13 16:38:50 2019 +0200
patch 8.1.1678: using popup_menu() does not scroll to show the selected line
Problem: When using popup_menu() does not scroll to show the selected line.
Solution: Scroll the text. (Naruhiko Nishino, closes https://github.com/vim/vim/issues/4651)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 13 Jul 2019 16:45:04 +0200 |
parents | bd7461db24b3 |
children | 0cc306ebc8fe |
line wrap: on
line source
" Runs all the indent tests for which there is no .out file. " " Current directory must be runtime/indent. " Only do this with the +eval feature if 1 set nocp filetype indent on syn on set nowrapscan set report=9999 au! SwapExists * call HandleSwapExists() func HandleSwapExists() " Ignore finding a swap file for the test input and output, the user might be " editing them and that's OK. if expand('<afile>') =~ '.*\.\(in\|out\|fail\|ok\)' let v:swapchoice = 'e' endif endfunc for fname in glob('testdir/*.in', 1, 1) let root = substitute(fname, '\.in', '', '') " Execute the test if the .out file does not exist of when the .in file is " newer. let in_time = getftime(fname) let out_time = getftime(root . '.out') if out_time < 0 || in_time > out_time call delete(root . '.fail') call delete(root . '.out') set sw& ts& filetype= exe 'split ' . fname let did_some = 0 let failed = 0 let end = 1 while 1 " Indent all the lines between "START_INDENT" and "END_INDENT" exe end let start = search('\<START_INDENT\>') let end = search('\<END_INDENT\>') if start <= 0 || end <= 0 || end <= start if did_some == 0 call append(0, 'ERROR: START_INDENT and/or END_INDENT not found') let failed = 1 endif break else let did_some = 1 " Execute all commands marked with INDENT_EXE and find any pattern. let lnum = start let pattern = '' let at = '' while 1 exe lnum + 1 let lnum_exe = search('\<INDENT_EXE\>') exe lnum + 1 let indent_at = search('\<INDENT_\(AT\|NEXT\|PREV\)\>') if lnum_exe > 0 && lnum_exe < end && (indent_at <= 0 || lnum_exe < indent_at) exe substitute(getline(lnum_exe), '.*INDENT_EXE', '', '') let lnum = lnum_exe let start = lnum elseif indent_at > 0 && indent_at < end if pattern != '' call append(indent_at, 'ERROR: duplicate pattern') let failed = 1 break endif let text = getline(indent_at) let pattern = substitute(text, '.*INDENT_\S*\s*', '', '') let at = substitute(text, '.*INDENT_\(\S*\).*', '\1', '') let lnum = indent_at let start = lnum else break endif endwhile exe start + 1 if pattern == '' exe 'normal =' . (end - 1) . 'G' else let lnum = search(pattern) if lnum <= 0 call append(indent_at, 'ERROR: pattern not found: ' . pattern) let failed = 1 break endif if at == 'AT' exe lnum elseif at == 'NEXT' exe lnum + 1 else exe lnum - 1 endif normal == endif endif endwhile if !failed " Check the resulting text equals the .ok file. if getline(1, '$') != readfile(root . '.ok') let failed = 1 endif endif if failed exe 'write ' . root . '.fail' echoerr 'Test ' . fname . ' FAILED!' else exe 'write ' . root . '.out' endif quit! " close the indented file endif endfor " Matching "if 1" at the start. endif qall!