From be7b5774531364e6f1e2b2cec3c297a3bb84a60d Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 18 Jul 2024 13:26:16 +0800 Subject: [PATCH] vim-patch:27f5334: runtime(termdebug): quote filename arguments using double quotes closes: vim/vim#15270 https://github.com/vim/vim/commit/27f53346a303c5cf1bdfb8abca20e4fea8ec05e4 Co-authored-by: Ubaldo Tiberi --- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index cf14f66c4b..6227a20e3c 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -1181,6 +1181,12 @@ func s:DeleteCommands() let s:BreakpointSigns = [] endfunc +func s:QuoteArg(x) + " Find all the occurrences of " and \ and escape them and double quote + " the resulting string. + return printf('"%s"', a:x->substitute('[\\"]', '\\&', 'g')) +endfunc + " :Until - Execute until past a specified position or current line func s:Until(at) if s:stopped @@ -1188,7 +1194,7 @@ func s:Until(at) let s:stopped = v:false " call ch_log('assume that program is running after this command') " Use the fname:lnum format - let at = empty(a:at) ? $"\"{expand('%:p')}:{line('.')}\"" : a:at + let at = empty(a:at) ? s:QuoteArg($"{expand('%:p')}:{line('.')}") : a:at call s:SendCommand($'-exec-until {at}') " else " call ch_log('dropping command, program is running: exec-until') @@ -1207,7 +1213,7 @@ func s:SetBreakpoint(at, tbreak=v:false) endif " Use the fname:lnum format, older gdb can't handle --source. - let at = empty(a:at) ? $"\"{expand('%:p')}:{line('.')}\"" : a:at + let at = empty(a:at) ? s:QuoteArg($"{expand('%:p')}:{line('.')}") : a:at if a:tbreak let cmd = $'-break-insert -t {at}' else