summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0032
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0032')
-rw-r--r--data/vim/patches/8.1.0032191
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 ///