0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

runtime(termdebug): improve window handling, shorten var types

closes #13474

Signed-off-by: shane.xb.qian <shane.qian@foxmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
shane.xb.qian
2023-11-08 21:59:15 +01:00
committed by Christian Brabandt
parent 7fbbd7fdc6
commit ca48202b6f
3 changed files with 56 additions and 6 deletions

View File

@@ -1487,7 +1487,10 @@ If you want the Asm window shown by default, set the "disasm_window" flag to
let g:termdebug_config['disasm_window_height'] = 15
If there is no g:termdebug_config you can use: >
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*
If you want the Var window shown by default, set the "variables_window" flag
@@ -1498,6 +1501,9 @@ height: >
If there is no g:termdebug_config you can use: >
let g:termdebug_variables_window = 15
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 ~
*termdebug-communication*

View File

@@ -859,7 +859,9 @@ func s:ParseVarinfo(varinfo)
let nameIdx = matchstrpos(a:varinfo, '{name="\([^"]*\)"')
let dict['name'] = a:varinfo[nameIdx[1] + 7 : nameIdx[2] - 2]
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="\(.*\)"}')
if valueIdx[1] == -1
let dict['value'] = 'Complex value'
@@ -1429,8 +1431,15 @@ endfunc
func s:GotoAsmwinOrCreateIt()
if !win_gotoid(s:asmwin)
let mdf = ''
if win_gotoid(s:sourcewin)
exe 'rightbelow new'
" 60 is approx spaceBuffer * 3
if winwidth(0) > (78 + 60)
let mdf = 'vert'
exe mdf .. ' ' .. 60 .. 'new'
else
exe 'rightbelow new'
endif
else
exe 'new'
endif
@@ -1452,7 +1461,7 @@ func s:GotoAsmwinOrCreateIt()
let s:asmbuf = bufnr('Termdebug-asm-listing')
endif
if s:GetDisasmWindowHeight() > 0
if mdf != 'vert' && s:GetDisasmWindowHeight() > 0
exe 'resize ' .. s:GetDisasmWindowHeight()
endif
endif
@@ -1492,8 +1501,15 @@ endfunc
func s:GotoVariableswinOrCreateIt()
if !win_gotoid(s:varwin)
let mdf = ''
if win_gotoid(s:sourcewin)
exe 'rightbelow new'
" 60 is approx spaceBuffer * 3
if winwidth(0) > (78 + 60)
let mdf = 'vert'
exe mdf .. ' ' .. 60 .. 'new'
else
exe 'rightbelow new'
endif
else
exe 'new'
endif
@@ -1514,7 +1530,7 @@ func s:GotoVariableswinOrCreateIt()
let s:varbuf = bufnr('Termdebug-variables-listing')
endif
if s:GetVariablesWindowHeight() > 0
if mdf != 'vert' && s:GetVariablesWindowHeight() > 0
exe 'resize ' .. s:GetVariablesWindowHeight()
endif
endif

View File

@@ -80,6 +80,34 @@ func Test_termdebug_basic()
\ '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!