Merge pull request #25942 from zeertzjq/vim-9.0.1791

vim-patch:9.0.{1791,1808,1809,1811},ca48202b6f46
This commit is contained in:
zeertzjq 2023-11-09 07:38:05 +08:00 committed by GitHub
commit 04187d1cb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 154 additions and 6 deletions

View File

@ -30,7 +30,7 @@ if [[ $os == Linux ]]; then
fi fi
if [[ -n $TEST ]]; then if [[ -n $TEST ]]; then
sudo apt-get install -y locales-all cpanminus attr libattr1-dev sudo apt-get install -y locales-all cpanminus attr libattr1-dev gdb
fi fi
elif [[ $os == Darwin ]]; then elif [[ $os == Darwin ]]; then
brew update --quiet brew update --quiet

View File

@ -421,6 +421,9 @@ If you want the Asm window shown by default, set the "disasm_window" flag to
If there is no g:termdebug_config you can use: >vim If there is no g:termdebug_config you can use: >vim
let g:termdebug_disasm_window = 15 let g:termdebug_disasm_window = 15
Any value greater than 1 will set the Asm window height to that value. Any value greater than 1 will set the Asm window height to that value.
If the current window has enough horizontal space, it will be vertically split
and the Asm window will be shown side by side with the source code window (and
the height option won't be used).
*termdebug_variables_window* *termdebug_variables_window*
If you want the Var window shown by default, set the "variables_window" flag If you want the Var window shown by default, set the "variables_window" flag
@ -431,6 +434,9 @@ height: >vim
If there is no g:termdebug_config you can use: >vim If there is no g:termdebug_config you can use: >vim
let g:termdebug_variables_window = 15 let g:termdebug_variables_window = 15
Any value greater than 1 will set the Var window height to that value. Any value greater than 1 will set the Var window height to that value.
If the current window has enough horizontal space, it will be vertically split
and the Var window will be shown side by side with the source code window (and
the height options won't be used).
Communication ~ Communication ~
*termdebug-communication* *termdebug-communication*

View File

@ -894,7 +894,9 @@ func s:ParseVarinfo(varinfo)
let nameIdx = matchstrpos(a:varinfo, '{name="\([^"]*\)"') let nameIdx = matchstrpos(a:varinfo, '{name="\([^"]*\)"')
let dict['name'] = a:varinfo[nameIdx[1] + 7 : nameIdx[2] - 2] let dict['name'] = a:varinfo[nameIdx[1] + 7 : nameIdx[2] - 2]
let typeIdx = matchstrpos(a:varinfo, ',type="\([^"]*\)"') let typeIdx = matchstrpos(a:varinfo, ',type="\([^"]*\)"')
let dict['type'] = a:varinfo[typeIdx[1] + 7 : typeIdx[2] - 2] " 'type' maybe is a url-like string,
" try to shorten it and show only the /tail
let dict['type'] = (a:varinfo[typeIdx[1] + 7 : typeIdx[2] - 2])->fnamemodify(':t')
let valueIdx = matchstrpos(a:varinfo, ',value="\(.*\)"}') let valueIdx = matchstrpos(a:varinfo, ',value="\(.*\)"}')
if valueIdx[1] == -1 if valueIdx[1] == -1
let dict['value'] = 'Complex value' let dict['value'] = 'Complex value'
@ -1556,8 +1558,15 @@ endfunc
func s:GotoAsmwinOrCreateIt() func s:GotoAsmwinOrCreateIt()
if !win_gotoid(s:asmwin) if !win_gotoid(s:asmwin)
let mdf = ''
if win_gotoid(s:sourcewin) if win_gotoid(s:sourcewin)
" 60 is approx spaceBuffer * 3
if winwidth(0) > (78 + 60)
let mdf = 'vert'
exe mdf .. ' ' .. 60 .. 'new'
else
exe 'rightbelow new' exe 'rightbelow new'
endif
else else
exe 'new' exe 'new'
endif endif
@ -1579,7 +1588,7 @@ func s:GotoAsmwinOrCreateIt()
let s:asmbuf = bufnr('Termdebug-asm-listing') let s:asmbuf = bufnr('Termdebug-asm-listing')
endif endif
if s:GetDisasmWindowHeight() > 0 if mdf != 'vert' && s:GetDisasmWindowHeight() > 0
exe 'resize ' .. s:GetDisasmWindowHeight() exe 'resize ' .. s:GetDisasmWindowHeight()
endif endif
endif endif
@ -1619,8 +1628,15 @@ endfunc
func s:GotoVariableswinOrCreateIt() func s:GotoVariableswinOrCreateIt()
if !win_gotoid(s:varwin) if !win_gotoid(s:varwin)
let mdf = ''
if win_gotoid(s:sourcewin) if win_gotoid(s:sourcewin)
" 60 is approx spaceBuffer * 3
if winwidth(0) > (78 + 60)
let mdf = 'vert'
exe mdf .. ' ' .. 60 .. 'new'
else
exe 'rightbelow new' exe 'rightbelow new'
endif
else else
exe 'new' exe 'new'
endif endif
@ -1641,7 +1657,7 @@ func s:GotoVariableswinOrCreateIt()
let s:varbuf = bufnr('Termdebug-variables-listing') let s:varbuf = bufnr('Termdebug-variables-listing')
endif endif
if s:GetVariablesWindowHeight() > 0 if mdf != 'vert' && s:GetVariablesWindowHeight() > 0
exe 'resize ' .. s:GetVariablesWindowHeight() exe 'resize ' .. s:GetVariablesWindowHeight()
endif endif
endif endif

View File

@ -58,6 +58,11 @@ func Ntest_setmouse(row, col)
endif endif
endfunc endfunc
" roughly equivalent to term_wait() in Vim
func Nterm_wait(buf, time = 10)
execute $'sleep {a:time}m'
endfunc
" Prevent Nvim log from writing to stderr. " Prevent Nvim log from writing to stderr.
let $NVIM_LOG_FILE = exists($NVIM_LOG_FILE) ? $NVIM_LOG_FILE : 'Xnvim.log' let $NVIM_LOG_FILE = exists($NVIM_LOG_FILE) ? $NVIM_LOG_FILE : 'Xnvim.log'

View File

@ -0,0 +1,121 @@
" Test for the termdebug plugin
source shared.vim
source check.vim
CheckUnix
" CheckFeature terminal
CheckExecutable gdb
CheckExecutable gcc
let g:GDB = exepath('gdb')
if g:GDB->empty()
throw 'Skipped: gdb is not found in $PATH'
endif
let g:GCC = exepath('gcc')
if g:GCC->empty()
throw 'Skipped: gcc is not found in $PATH'
endif
packadd termdebug
func Test_termdebug_basic()
let lines =<< trim END
#include <stdio.h>
#include <stdlib.h>
int isprime(int n)
{
if (n <= 1)
return 0;
for (int i = 2; i <= n / 2; i++)
if (n % i == 0)
return 0;
return 1;
}
int main(int argc, char *argv[])
{
int n = 7;
printf("%d is %s prime\n", n, isprime(n) ? "a" : "not a");
return 0;
}
END
call writefile(lines, 'XTD_basic.c', 'D')
call system($'{g:GCC} -g -o XTD_basic XTD_basic.c')
edit XTD_basic.c
Termdebug ./XTD_basic
call WaitForAssert({-> assert_equal(3, winnr('$'))})
let gdb_buf = winbufnr(1)
wincmd b
Break 9
call Nterm_wait(gdb_buf)
redraw!
call assert_equal([
\ {'lnum': 9, 'id': 1014, 'name': 'debugBreakpoint1.0',
\ 'priority': 110, 'group': 'TermDebug'}],
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)
Run
call Nterm_wait(gdb_buf, 400)
redraw!
call WaitForAssert({-> assert_equal([
\ {'lnum': 9, 'id': 12, 'name': 'debugPC', 'priority': 110,
\ 'group': 'TermDebug'},
\ {'lnum': 9, 'id': 1014, 'name': 'debugBreakpoint1.0',
\ 'priority': 110, 'group': 'TermDebug'}],
"\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs->reverse())})
Finish
call Nterm_wait(gdb_buf)
redraw!
call WaitForAssert({-> assert_equal([
\ {'lnum': 9, 'id': 1014, 'name': 'debugBreakpoint1.0',
\ 'priority': 110, 'group': 'TermDebug'},
\ {'lnum': 20, 'id': 12, 'name': 'debugPC',
\ 'priority': 110, 'group': 'TermDebug'}],
\ sign_getplaced('', #{group: 'TermDebug'})[0].signs)})
Continue
let cn = 0
" 60 is approx spaceBuffer * 3
if winwidth(0) <= 78 + 60
Var
call assert_equal(winnr(), winnr('$'))
call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]])
let cn += 1
bw!
Asm
call assert_equal(winnr(), winnr('$'))
call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['leaf', 1000], ['leaf', 1003 + cn]]])
let cn += 1
bw!
endif
set columns=160
Var
call assert_equal(winnr(), winnr('$') - 1)
call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]])
let cn += 1
bw!
Asm
call assert_equal(winnr(), winnr('$') - 1)
call assert_equal(winlayout(), ['col', [['leaf', 1002], ['leaf', 1001], ['row', [['leaf', 1003 + cn], ['leaf', 1000]]]]])
let cn += 1
bw!
set columns&
wincmd t
quit!
redraw!
call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs)
call delete('XTD_basic')
%bw!
endfunc
" vim: shiftwidth=2 sts=2 expandtab