diff options
Diffstat (limited to 'data/vim/patches/8.1.0032')
-rw-r--r-- | data/vim/patches/8.1.0032 | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0032 b/data/vim/patches/8.1.0032 new file mode 100644 index 000000000..f5ea02843 --- /dev/null +++ b/data/vim/patches/8.1.0032 @@ -0,0 +1,191 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0032 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0032 +Problem: BS in prompt buffer starts new line. +Solution: Do not allows BS over the prompt. Make term_sendkeys() handle + special keys. Add a test. +Files: src/option.c, src/terminal.c, src/testdir/test_prompt_buffer.vim + + +*** ../vim-8.1.0031/src/option.c 2018-06-03 14:42:17.848505102 +0200 +--- src/option.c 2018-06-04 16:51:10.811551036 +0200 +*************** +*** 12439,12444 **** +--- 12439,12448 ---- + can_bs( + int what) /* BS_INDENT, BS_EOL or BS_START */ + { ++ #ifdef FEAT_JOB_CHANNEL ++ if (what == BS_START && bt_prompt(curbuf)) ++ return FALSE; ++ #endif + switch (*p_bs) + { + case '2': return TRUE; +*** ../vim-8.1.0031/src/terminal.c 2018-05-21 22:50:22.514568516 +0200 +--- src/terminal.c 2018-06-04 16:51:10.815551032 +0200 +*************** +*** 5094,5101 **** + + while (*msg != NUL) + { +! send_keys_to_term(term, PTR2CHAR(msg), FALSE); +! msg += MB_CPTR2LEN(msg); + } + } + +--- 5094,5112 ---- + + while (*msg != NUL) + { +! int c; +! +! if (*msg == K_SPECIAL && msg[1] != NUL && msg[2] != NUL) +! { +! c = TO_SPECIAL(msg[1], msg[2]); +! msg += 3; +! } +! else +! { +! c = PTR2CHAR(msg); +! msg += MB_CPTR2LEN(msg); +! } +! send_keys_to_term(term, c, FALSE); + } + } + +*** ../vim-8.1.0031/src/testdir/test_prompt_buffer.vim 2018-06-03 17:10:36.274226639 +0200 +--- src/testdir/test_prompt_buffer.vim 2018-06-04 17:13:41.298470827 +0200 +*************** +*** 7,22 **** + source shared.vim + source screendump.vim + +! func Test_prompt_basic() + " We need to use a terminal window to be able to feed keys without leaving + " Insert mode. + if !has('terminal') +! return + endif + if has('win32') +! " TODO: make this work on MS-Windows +! return + endif + call writefile([ + \ 'func TextEntered(text)', + \ ' if a:text == "exit"', +--- 7,26 ---- + source shared.vim + source screendump.vim + +! func CanTestPromptBuffer() + " We need to use a terminal window to be able to feed keys without leaving + " Insert mode. + if !has('terminal') +! return 0 + endif + if has('win32') +! " TODO: make the tests work on MS-Windows +! return 0 + endif ++ return 1 ++ endfunc ++ ++ func WriteScript(name) + call writefile([ + \ 'func TextEntered(text)', + \ ' if a:text == "exit"', +*************** +*** 44,51 **** + \ 'set buftype=prompt', + \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))', + \ 'startinsert', +! \ ], 'Xpromptscript') +! let buf = RunVimInTerminal('-S Xpromptscript', {}) + call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))}) + + call term_sendkeys(buf, "hello\<CR>") +--- 48,64 ---- + \ 'set buftype=prompt', + \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))', + \ 'startinsert', +! \ ], a:name) +! endfunc +! +! func Test_prompt_basic() +! if !CanTestPromptBuffer() +! return +! endif +! let scriptName = 'XpromptscriptBasic' +! call WriteScript(scriptName) +! +! let buf = RunVimInTerminal('-S ' . scriptName, {}) + call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))}) + + call term_sendkeys(buf, "hello\<CR>") +*************** +*** 57,61 **** + call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) + + call StopVimInTerminal(buf) +! call delete('Xpromptscript') + endfunc +--- 70,103 ---- + call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) + + call StopVimInTerminal(buf) +! call delete(scriptName) +! endfunc +! +! func Test_prompt_editing() +! if !CanTestPromptBuffer() +! return +! endif +! let scriptName = 'XpromptscriptEditing' +! call WriteScript(scriptName) +! +! let buf = RunVimInTerminal('-S ' . scriptName, {}) +! call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))}) +! +! let bs = "\<BS>" +! call term_sendkeys(buf, "hello" . bs . bs) +! call WaitForAssert({-> assert_equal('% hel', term_getline(buf, 1))}) +! +! let left = "\<Left>" +! call term_sendkeys(buf, left . left . left . bs . '-') +! call WaitForAssert({-> assert_equal('% -hel', term_getline(buf, 1))}) +! +! let end = "\<End>" +! call term_sendkeys(buf, end . "x") +! call WaitForAssert({-> assert_equal('% -helx', term_getline(buf, 1))}) +! +! call term_sendkeys(buf, "\<C-U>exit\<CR>") +! call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) +! +! call StopVimInTerminal(buf) +! call delete(scriptName) + endfunc +*** ../vim-8.1.0031/src/version.c 2018-06-03 18:21:57.809890160 +0200 +--- src/version.c 2018-06-04 17:05:58.770829349 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 32, + /**/ + +-- +I have a drinking problem -- I can't afford it. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |