summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshane.xb.qian <shane.qian@foxmail.com>2023-11-08 21:59:15 +0100
committerChristian Brabandt <cb@256bit.org>2023-11-08 22:03:26 +0100
commitca48202b6f46cfb40a0d1d80033a2f3e8cb7b813 (patch)
tree76cb9b903bdf8901aa6e78ad0155580a4e72d117
parent7fbbd7fdc6df9dc198b3735cfbe8dbe8afd646f9 (diff)
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>
-rw-r--r--runtime/doc/terminal.txt8
-rw-r--r--runtime/pack/dist/opt/termdebug/plugin/termdebug.vim26
-rw-r--r--src/testdir/test_termdebug.vim28
3 files changed, 56 insertions, 6 deletions
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index f17221ed1f..d7cfb1b13a 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -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*
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
index 144d083fa8..6d8e483e2e 100644
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -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
diff --git a/src/testdir/test_termdebug.vim b/src/testdir/test_termdebug.vim
index 23ec0e828c..3b2b8c1afd 100644
--- a/src/testdir/test_termdebug.vim
+++ b/src/testdir/test_termdebug.vim
@@ -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!