# HG changeset patch # User Christian Brabandt # Date 1699477203 -3600 # Node ID 55e587f6b02f37507d72b501b01085c244bff8d3 # Parent e28bb23574551fdfd414992df79c05718623cfa0 runtime(termdebug): handle buffer-local mappings properly Commit: https://github.com/vim/vim/commit/7fbbd7fdc6df9dc198b3735cfbe8dbe8afd646f9 Author: shane.xb.qian Date: Wed Nov 8 21:44:48 2023 +0100 runtime(termdebug): handle buffer-local mappings properly closes: https://github.com/vim/vim/issues/13475 Signed-off-by: shane.xb.qian Signed-off-by: Christian Brabandt diff --git a/runtime/doc/tags b/runtime/doc/tags --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -10434,6 +10434,7 @@ termdebug-customizing terminal.txt /*ter termdebug-events terminal.txt /*termdebug-events* termdebug-example terminal.txt /*termdebug-example* termdebug-frames terminal.txt /*termdebug-frames* +termdebug-mappings terminal.txt /*termdebug-mappings* termdebug-prompt terminal.txt /*termdebug-prompt* termdebug-starting terminal.txt /*termdebug-starting* termdebug-stepping terminal.txt /*termdebug-stepping* diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -1,4 +1,4 @@ -*terminal.txt* For Vim version 9.0. Last change: 2023 Aug 23 +*terminal.txt* For Vim version 9.0. Last change: 2023 Nov 08 VIM REFERENCE MANUAL by Bram Moolenaar @@ -42,6 +42,7 @@ 6. Debugging |terminal-debug| Other commands |termdebug-commands| Events |termdebug-events| Prompt mode |termdebug-prompt| + Mappings |termdebug-mappings| Communication |termdebug-communication| Customizing |termdebug-customizing| @@ -1461,18 +1462,22 @@ Prompt mode can be used even when the |+ If there is no g:termdebug_config you can use: > let g:termdebug_use_prompt = 1 < - *termdebug_map_K* -The K key is normally mapped to |:Evaluate|. If you do not want this use: > +Mappings ~ + *termdebug_map_K* *termdebug-mappings* +The K key is normally mapped to |:Evaluate| unless there already exists a +buffer local mapping to K |map-local|. If you do not want this use: > let g:termdebug_config['map_K'] = 0 If there is no g:termdebug_config you can use: > let g:termdebug_map_K = 0 < *termdebug_map_minus* -The - key is normally mapped to |:Down|. If you do not want this use: > +The - key is normally mapped to |:Down| unless there already exists a buffer +local mapping to the - key. If you do not want this use: > let g:termdebug_config['map_minus'] = 0 < *termdebug_map_plus* -The + key is normally mapped to |:Up|. If you do not want this use: > +The + key is normally mapped to |:Up| unless there already exists a buffer +local mapping to the + key. If you do not want this use: > let g:termdebug_config['map_plus'] = 0 < *termdebug_disasm_window* diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -2,7 +2,7 @@ " " Author: Bram Moolenaar " Copyright: Vim license applies, see ":help license" -" Last Change: 2023 Aug 23 +" Last Change: 2023 Nov 02 " " WORK IN PROGRESS - The basics works stable, more to come " Note: In general you need at least GDB 7.12 because this provides the @@ -990,7 +990,9 @@ func s:InstallCommands() endif if map let s:k_map_saved = maparg('K', 'n', 0, 1) - nnoremap K :Evaluate + if !empty(s:k_map_saved) && !s:k_map_saved.buffer || empty(s:k_map_saved) + nnoremap K :Evaluate + endif endif let map = 1 @@ -999,7 +1001,9 @@ func s:InstallCommands() endif if map let s:plus_map_saved = maparg('+', 'n', 0, 1) - nnoremap + $'{v:count1}Up' + if !empty(s:plus_map_saved) && !s:plus_map_saved.buffer || empty(s:plus_map_saved) + nnoremap + $'{v:count1}Up' + endif endif let map = 1 @@ -1008,7 +1012,9 @@ func s:InstallCommands() endif if map let s:minus_map_saved = maparg('-', 'n', 0, 1) - nnoremap - $'{v:count1}Down' + if !empty(s:minus_map_saved) && !s:minus_map_saved.buffer || empty(s:minus_map_saved) + nnoremap - $'{v:count1}Down' + endif endif @@ -1080,26 +1086,29 @@ func s:DeleteCommands() delcommand Winbar if exists('s:k_map_saved') - if empty(s:k_map_saved) + if !empty(s:k_map_saved) && !s:k_map_saved.buffer nunmap K - else call mapset(s:k_map_saved) + elseif empty(s:k_map_saved) + nunmap K endif unlet s:k_map_saved endif if exists('s:plus_map_saved') - if empty(s:plus_map_saved) + if !empty(s:plus_map_saved) && !s:plus_map_saved.buffer nunmap + - else call mapset(s:plus_map_saved) + elseif empty(s:plus_map_saved) + nunmap + endif unlet s:plus_map_saved endif if exists('s:minus_map_saved') - if empty(s:minus_map_saved) + if !empty(s:minus_map_saved) && !s:minus_map_saved.buffer nunmap - - else call mapset(s:minus_map_saved) + elseif empty(s:minus_map_saved) + nunmap - endif unlet s:minus_map_saved endif @@ -1774,3 +1783,5 @@ call s:InitAutocmd() let &cpo = s:keepcpo unlet s:keepcpo + +" vim: sw=2 sts=2 et diff --git a/src/testdir/test_termdebug.vim b/src/testdir/test_termdebug.vim --- a/src/testdir/test_termdebug.vim +++ b/src/testdir/test_termdebug.vim @@ -83,10 +83,83 @@ func Test_termdebug_basic() wincmd t quit! redraw! + call WaitForAssert({-> assert_equal(1, winnr('$'))}) call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs) call delete('XTD_basic') %bw! endfunc +func Test_termdebug_mapping() + %bw! + call assert_equal(maparg('K', 'n', 0, 1)->empty(), 1) + call assert_equal(maparg('-', 'n', 0, 1)->empty(), 1) + call assert_equal(maparg('+', 'n', 0, 1)->empty(), 1) + Termdebug + call WaitForAssert({-> assert_equal(3, winnr('$'))}) + wincmd b + call assert_equal(maparg('K', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('-', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('+', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('K', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('-', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('+', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('K', 'n', 0, 1).rhs, ':Evaluate') + wincmd t + quit! + redraw! + call WaitForAssert({-> assert_equal(1, winnr('$'))}) + call assert_equal(maparg('K', 'n', 0, 1)->empty(), 1) + call assert_equal(maparg('-', 'n', 0, 1)->empty(), 1) + call assert_equal(maparg('+', 'n', 0, 1)->empty(), 1) + + %bw! + nnoremap K :echom "K" + nnoremap - :echom "-" + nnoremap + :echom "+" + Termdebug + call WaitForAssert({-> assert_equal(3, winnr('$'))}) + wincmd b + call assert_equal(maparg('K', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('-', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('+', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('K', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('-', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('+', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('K', 'n', 0, 1).rhs, ':Evaluate') + wincmd t + quit! + redraw! + call WaitForAssert({-> assert_equal(1, winnr('$'))}) + call assert_equal(maparg('K', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('-', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('+', 'n', 0, 1)->empty(), 0) + call assert_equal(maparg('K', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('-', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('+', 'n', 0, 1).buffer, 0) + call assert_equal(maparg('K', 'n', 0, 1).rhs, ':echom "K"') + + %bw! + nnoremap K :echom "bK" + nnoremap - :echom "b-" + nnoremap + :echom "b+" + Termdebug + call WaitForAssert({-> assert_equal(3, winnr('$'))}) + wincmd b + call assert_equal(maparg('K', 'n', 0, 1).buffer, 1) + call assert_equal(maparg('-', 'n', 0, 1).buffer, 1) + call assert_equal(maparg('+', 'n', 0, 1).buffer, 1) + call assert_equal(maparg('K', 'n', 0, 1).rhs, ':echom "bK"') + wincmd t + quit! + redraw! + call WaitForAssert({-> assert_equal(1, winnr('$'))}) + call assert_equal(maparg('K', 'n', 0, 1).buffer, 1) + call assert_equal(maparg('-', 'n', 0, 1).buffer, 1) + call assert_equal(maparg('+', 'n', 0, 1).buffer, 1) + call assert_equal(maparg('K', 'n', 0, 1).rhs, ':echom "bK"') + + %bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab