diff options
Diffstat (limited to 'data/vim/patches')
234 files changed, 49005 insertions, 2552 deletions
diff --git a/data/vim/patches/7.2.001 b/data/vim/patches/7.2.001 deleted file mode 100644 index 3bcb7d090..000000000 --- a/data/vim/patches/7.2.001 +++ /dev/null @@ -1,61 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.001 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.001 -Problem: Mac: pseudo-ttys don't work properly on Leopard, resulting in the - shell not to have a prompt, CTRL-C not working, etc. -Solution: Don't use SVR4 compatible ptys, even though they are detected. - (Ben Schmidt) -Files: src/pty.c - - -*** ../vim-7.2.000/src/pty.c Wed Aug 6 19:04:29 2008 ---- src/pty.c Fri Aug 15 04:00:34 2008 -*************** -*** 270,278 **** - } - #endif - -! #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) - -! /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! */ - #define PTY_DONE - int - OpenPTY(ttyn) ---- 270,279 ---- - } - #endif - -! #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) && !defined(MACOS_X) - -! /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! -! * Same for Mac OS X Leopard. */ - #define PTY_DONE - int - OpenPTY(ttyn) -*** ../vim-7.2.000/src/version.c Sat Aug 9 19:37:37 2008 ---- src/version.c Sun Aug 17 22:56:25 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1, - /**/ - --- -ARTHUR: Now stand aside worthy adversary. -BLACK KNIGHT: (Glancing at his shoulder) 'Tis but a scratch. -ARTHUR: A scratch? Your arm's off. - "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.002 b/data/vim/patches/7.2.002 deleted file mode 100644 index e1ee32cd5..000000000 --- a/data/vim/patches/7.2.002 +++ /dev/null @@ -1,47 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.002 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.002 -Problem: Leaking memory when displaying menus. -Solution: Free allocated memory. (Dominique Pelle) -Files: src/menu.c - - -*** ../vim-7.2.001/src/menu.c Wed Jun 25 00:19:17 2008 ---- src/menu.c Sat Aug 16 05:38:45 2008 -*************** -*** 1120,1125 **** ---- 1120,1126 ---- - parent = menu; - menu = menu->children; - } -+ vim_free(path_name); - - /* Now we have found the matching menu, and we list the mappings */ - /* Highlight title */ -*** ../vim-7.2.001/src/version.c Sun Aug 17 23:01:21 2008 ---- src/version.c Sun Aug 17 23:42:53 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 2, - /**/ - --- -ARTHUR: You are indeed brave Sir knight, but the fight is mine. -BLACK KNIGHT: Had enough? -ARTHUR: You stupid bastard. You havn't got any arms left. - "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.003 b/data/vim/patches/7.2.003 deleted file mode 100644 index 626d81e5a..000000000 --- a/data/vim/patches/7.2.003 +++ /dev/null @@ -1,107 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.003 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.003 -Problem: Typo in translated message. Message not translated. -Solution: Correct spelling. Add _(). (Dominique Pelle) -Files: src/spell.c, src/version.c - - -*** ../vim-7.2.002/src/spell.c Tue Jun 24 22:21:31 2008 ---- src/spell.c Sun Aug 10 12:51:38 2008 -*************** -*** 77,83 **** - - /* - * Do the opposite: based on a maximum end score and a known sound score, -! * compute the the maximum word score that can be used. - */ - #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3) - ---- 77,83 ---- - - /* - * Do the opposite: based on a maximum end score and a known sound score, -! * compute the maximum word score that can be used. - */ - #define MAXSCORE(word_score, sound_score) ((4 * word_score - sound_score) / 3) - -*************** -*** 625,631 **** - /* TRUE if a word appears in the list of banned words. */ - #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word))) - -! /* Number of suggestions kept when cleaning up. we need to keep more than - * what is displayed, because when rescore_suggestions() is called the score - * may change and wrong suggestions may be removed later. */ - #define SUG_CLEAN_COUNT(su) ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20) ---- 625,631 ---- - /* TRUE if a word appears in the list of banned words. */ - #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word))) - -! /* Number of suggestions kept when cleaning up. We need to keep more than - * what is displayed, because when rescore_suggestions() is called the score - * may change and wrong suggestions may be removed later. */ - #define SUG_CLEAN_COUNT(su) ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20) -*************** -*** 5980,5986 **** - else if (spin->si_newprefID == 0 || spin->si_newprefID == 127) - MSG(_("Too many compound flags")); - else -! MSG(_("Too many posponed prefixes and/or compound flags")); - } - - if (syllable != NULL) ---- 5980,5986 ---- - else if (spin->si_newprefID == 0 || spin->si_newprefID == 127) - MSG(_("Too many compound flags")); - else -! MSG(_("Too many postponed prefixes and/or compound flags")); - } - - if (syllable != NULL) -*** ../vim-7.2.002/src/version.c Sun Aug 17 23:43:53 2008 ---- src/version.c Mon Aug 25 04:06:52 2008 -*************** -*** 790,796 **** - MSG_PUTS(_("\nRISC OS version")); - #endif - #ifdef VMS -! MSG_PUTS("\nOpenVMS version"); - # ifdef HAVE_PATHDEF - if (*compiled_arch != NUL) - { ---- 792,798 ---- - MSG_PUTS(_("\nRISC OS version")); - #endif - #ifdef VMS -! MSG_PUTS(_("\nOpenVMS version")); - # ifdef HAVE_PATHDEF - if (*compiled_arch != NUL) - { -*** ../vim-7.2.002/src/version.c Sun Aug 17 23:43:53 2008 ---- src/version.c Mon Aug 25 04:06:52 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 3, - /**/ - --- -I learned the customs and mannerisms of engineers by observing them, much the -way Jane Goodall learned about the great apes, but without the hassle of -grooming. - (Scott Adams - The Dilbert principle) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.004 b/data/vim/patches/7.2.004 deleted file mode 100644 index 8e7ed3e9d..000000000 --- a/data/vim/patches/7.2.004 +++ /dev/null @@ -1,103 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.004 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.004 -Problem: Cscope help message is not translated. -Solution: Put it in _(). (Dominique Pelle) -Files: src/if_cscope.c, src/if_cscope.h - - -*** ../vim-7.2.003/src/if_cscope.c Tue Jun 24 23:52:06 2008 ---- src/if_cscope.c Mon Aug 25 04:34:19 2008 -*************** -*** 74,80 **** - { "add", cs_add, - N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 }, - { "find", cs_find, -! N_("Query for a pattern"), FIND_USAGE, 1 }, - { "help", cs_help, - N_("Show this message"), "help", 0 }, - { "kill", cs_kill, ---- 74,80 ---- - { "add", cs_add, - N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 }, - { "find", cs_find, -! N_("Query for a pattern"), "find c|d|e|f|g|i|s|t name", 1 }, - { "help", cs_help, - N_("Show this message"), "help", 0 }, - { "kill", cs_kill, -*************** -*** 1180,1186 **** - (void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"), - cmdp->name, _(cmdp->help), cmdp->usage); - if (strcmp(cmdp->name, "find") == 0) -! MSG_PUTS(FIND_HELP); - cmdp++; - } - ---- 1180,1195 ---- - (void)smsg((char_u *)_("%-5s: %-30s (Usage: %s)"), - cmdp->name, _(cmdp->help), cmdp->usage); - if (strcmp(cmdp->name, "find") == 0) -! MSG_PUTS(_("\n" -! " c: Find functions calling this function\n" -! " d: Find functions called by this function\n" -! " e: Find this egrep pattern\n" -! " f: Find this file\n" -! " g: Find this definition\n" -! " i: Find files #including this file\n" -! " s: Find this C symbol\n" -! " t: Find assignments to\n")); -! - cmdp++; - } - -*** ../vim-7.2.003/src/if_cscope.h Thu Sep 6 17:38:58 2007 ---- src/if_cscope.h Mon Aug 25 04:34:17 2008 -*************** -*** 42,58 **** - * f 7name Find this file - * i 8name Find files #including this file - */ -- #define FIND_USAGE "find c|d|e|f|g|i|s|t name" -- #define FIND_HELP "\n\ -- c: Find functions calling this function\n\ -- d: Find functions called by this function\n\ -- e: Find this egrep pattern\n\ -- f: Find this file\n\ -- g: Find this definition\n\ -- i: Find files #including this file\n\ -- s: Find this C symbol\n\ -- t: Find assignments to\n" -- - - typedef struct { - char * name; ---- 42,47 ---- -*** ../vim-7.2.003/src/version.c Mon Aug 25 04:12:38 2008 ---- src/version.c Mon Aug 25 04:29:53 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 4, - /**/ - --- -If someone questions your market projections, simply point out that your -target market is "People who are nuts" and "People who will buy any damn -thing". Nobody is going to tell you there aren't enough of those people -to go around. - (Scott Adams - The Dilbert principle) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.005 b/data/vim/patches/7.2.005 deleted file mode 100644 index 20cce85b3..000000000 --- a/data/vim/patches/7.2.005 +++ /dev/null @@ -1,149 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.005 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.005 -Problem: A few problems when profiling. Using flag pointer instead of flag - value. Allocating zero bytes. Not freeing used memory. -Solution: Remove wrong '&' characters. Skip dumping when there is nothing - to dump. Free used memory. (Dominique Pelle) -Files: src/eval.c - - -*** ../vim-7.2.004/src/eval.c Fri Aug 8 12:36:31 2008 ---- src/eval.c Mon Aug 25 04:40:11 2008 -*************** -*** 3657,3664 **** - } - - /* -! * Return TRUE if typeval "tv" is locked: Either tha value is locked itself or -! * it refers to a List or Dictionary that is locked. - */ - static int - tv_islocked(tv) ---- 3657,3664 ---- - } - - /* -! * Return TRUE if typeval "tv" is locked: Either that value is locked itself -! * or it refers to a List or Dictionary that is locked. - */ - static int - tv_islocked(tv) -*************** -*** 15838,15847 **** - if (res == FAIL) - res = ITEM_COMPARE_FAIL; - else -- /* return value has wrong type */ - res = get_tv_number_chk(&rettv, &item_compare_func_err); - if (item_compare_func_err) -! res = ITEM_COMPARE_FAIL; - clear_tv(&rettv); - return res; - } ---- 15838,15846 ---- - if (res == FAIL) - res = ITEM_COMPARE_FAIL; - else - res = get_tv_number_chk(&rettv, &item_compare_func_err); - if (item_compare_func_err) -! res = ITEM_COMPARE_FAIL; /* return value has wrong type */ - clear_tv(&rettv); - return res; - } -*************** -*** 20590,20595 **** ---- 20589,20597 ---- - int st_len = 0; - - todo = (int)func_hashtab.ht_used; -+ if (todo == 0) -+ return; /* nothing to dump */ -+ - sorttab = (ufunc_T **)alloc((unsigned)(sizeof(ufunc_T) * todo)); - - for (hi = func_hashtab.ht_array; todo > 0; ++hi) -*************** -*** 20638,20643 **** ---- 20640,20647 ---- - prof_self_cmp); - prof_sort_list(fd, sorttab, st_len, "SELF", TRUE); - } -+ -+ vim_free(sorttab); - } - - static void -*************** -*** 21204,21210 **** - if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL)) - func_do_profile(fp); - if (fp->uf_profiling -! || (fc.caller != NULL && &fc.caller->func->uf_profiling)) - { - ++fp->uf_tm_count; - profile_start(&call_start); ---- 21208,21214 ---- - if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL)) - func_do_profile(fp); - if (fp->uf_profiling -! || (fc.caller != NULL && fc.caller->func->uf_profiling)) - { - ++fp->uf_tm_count; - profile_start(&call_start); -*************** -*** 21235,21247 **** - - #ifdef FEAT_PROFILE - if (do_profiling == PROF_YES && (fp->uf_profiling -! || (fc.caller != NULL && &fc.caller->func->uf_profiling))) - { - profile_end(&call_start); - profile_sub_wait(&wait_start, &call_start); - profile_add(&fp->uf_tm_total, &call_start); - profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children); -! if (fc.caller != NULL && &fc.caller->func->uf_profiling) - { - profile_add(&fc.caller->func->uf_tm_children, &call_start); - profile_add(&fc.caller->func->uf_tml_children, &call_start); ---- 21239,21251 ---- - - #ifdef FEAT_PROFILE - if (do_profiling == PROF_YES && (fp->uf_profiling -! || (fc.caller != NULL && fc.caller->func->uf_profiling))) - { - profile_end(&call_start); - profile_sub_wait(&wait_start, &call_start); - profile_add(&fp->uf_tm_total, &call_start); - profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children); -! if (fc.caller != NULL && fc.caller->func->uf_profiling) - { - profile_add(&fc.caller->func->uf_tm_children, &call_start); - profile_add(&fc.caller->func->uf_tml_children, &call_start); -*** ../vim-7.2.004/src/version.c Mon Aug 25 04:35:13 2008 ---- src/version.c Mon Aug 25 04:46:44 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 5, - /**/ - --- -The process for understanding customers primarily involves sitting around with -other marketing people and talking about what you would to if you were dumb -enough to be a customer. - (Scott Adams - The Dilbert principle) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.006 b/data/vim/patches/7.2.006 deleted file mode 100644 index f22eeae53..000000000 --- a/data/vim/patches/7.2.006 +++ /dev/null @@ -1,50 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.006 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.006 -Problem: HTML files are not recognized by contents. -Solution: Add a rule to the scripts file. (Nico Weber) -Files: runtime/scripts.vim - - -*** ../vim-7.2.005/runtime/scripts.vim Sat Aug 9 19:37:09 2008 ---- runtime/scripts.vim Sat Aug 16 04:05:34 2008 -*************** -*** 234,239 **** ---- 234,243 ---- - elseif s:line1 =~ '\<DTD\s\+XHTML\s' - set ft=xhtml - -+ " HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN") -+ elseif s:line1 =~? '\<DOCTYPE\s\+html\>' -+ set ft=html -+ - " PDF - elseif s:line1 =~ '^%PDF-' - set ft=pdf -*** ../vim-7.2.005/src/version.c Mon Aug 25 04:48:21 2008 ---- src/version.c Mon Aug 25 05:02:34 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 6, - /**/ - --- -Never enter the boss's office unless it's absolutely necessary. Every boss -saves one corner of the desk for useless assignments that are doled out like -Halloween candy to each visitor. - (Scott Adams - The Dilbert principle) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.007 b/data/vim/patches/7.2.007 deleted file mode 100644 index 104b26785..000000000 --- a/data/vim/patches/7.2.007 +++ /dev/null @@ -1,493 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.007 (extra) -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.007 (extra) -Problem: Minor issues for VMS. -Solution: Minor fixes for VMS. Add float support. (Zoltan Arpadffy) -Files: runtime/doc/os_vms.txt, src/os_vms_conf.h, src/Make_vms.mms, - src/testdir/Make_vms.mms, src/testdir/test30.in, - src/testdir/test54.in - - -*** ../vim-7.2.006/runtime/doc/os_vms.txt Sat Aug 9 19:36:50 2008 ---- runtime/doc/os_vms.txt Tue Aug 19 06:29:31 2008 -*************** -*** 1,4 **** -! *os_vms.txt* For Vim version 7.2. Last change: 2006 Nov 18 - - - VIM REFERENCE MANUAL ---- 1,4 ---- -! *os_vms.txt* For Vim version 7.2. Last change: 2008 Aug 19 - - - VIM REFERENCE MANUAL -*************** -*** 312,318 **** - - 8. Useful notes *vms-notes* - -! 8.1 backspace/delete - 8.2 Filters - 8.3 VMS file version numbers - 8.4 Directory conversion ---- 312,318 ---- - - 8. Useful notes *vms-notes* - -! 8.1 Backspace/delete - 8.2 Filters - 8.3 VMS file version numbers - 8.4 Directory conversion -*************** -*** 326,333 **** - 8.12 diff-mode - 8.13 Allow '$' in C keywords - 8.14 VIMTUTOR for beginners - -! 8.1 backspace/delete - - There are backspace/delete key inconsistencies with VMS. - :fixdel doesn't do the trick, but the solution is: > ---- 326,335 ---- - 8.12 diff-mode - 8.13 Allow '$' in C keywords - 8.14 VIMTUTOR for beginners -+ 8.15 Slow start in console mode issue -+ 8.16 Common VIM directory - different architectures - -! 8.1 Backspace/delete - - There are backspace/delete key inconsistencies with VMS. - :fixdel doesn't do the trick, but the solution is: > -*************** -*** 663,674 **** - - (Thomas.R.Wyant III, Vim 6.1) - - ============================================================================== - - 9. VMS related changes *vms-changes* - -! Version 7 - - Improved low level char input (affects just console mode) - - Version 6.4 (2005 Oct 15) - - GTKLIB and Vim build on IA64 ---- 665,794 ---- - - (Thomas.R.Wyant III, Vim 6.1) - -+ 8.14 Slow start in console mode issue -+ -+ As GUI/GTK Vim works equally well in console mode, many administartors -+ deploy those executables system wide. -+ Unfortunately, on a remote slow connections GUI/GTK executables behave rather -+ slow when user wants to run Vim just in the console mode - because of X environment detection timeout. -+ -+ Luckily, there is a simple solution for that. Administrators need to deploy -+ both GUI/GTK build and just console build executables, like below: > -+ -+ |- vim72 -+ |----- doc -+ |----- syntax -+ vimrc (system rc files) -+ gvimrc -+ gvim.exe (the remaned GUI or GTK built vim.exe) -+ vim.exe (the console only executable) -+ -+ Define system symbols like below in for ex in LOGIN.COM or SYLOGIN.COM: > -+ -+ $ define/nolog VIM RF10:[UTIL.VIM72] ! where you VIM directory is -+ $ vi*m :== mcr VIM:VIM.EXE -+ $ gvi*m :== mcr VIM:GVIM.EXE -+ $ ! or you can try to spawn with -+ $ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40 -+ -+ -+ Like this, users that do not have X environment and want to use Vim just in -+ console mode can avoid performance problems. -+ -+ (Zoltan Arpadffy, Vim 7.2) -+ -+ 8.15 Common VIM directory - different architectures -+ -+ In a cluster that contains nodes with different architectures like below: -+ -+ $show cluster -+ View of Cluster from system ID 11655 node: TOR 18-AUG-2008 11:58:31 -+ +---------------------------------+ -+ ¦ SYSTEMS ¦ MEMBERS ¦ -+ +-----------------------+---------¦ -+ ¦ NODE ¦ SOFTWARE ¦ STATUS ¦ -+ +--------+--------------+---------¦ -+ ¦ TOR ¦ VMS V7.3-2 ¦ MEMBER ¦ -+ ¦ TITAN2 ¦ VMS V8.3 ¦ MEMBER ¦ -+ ¦ ODIN ¦ VMS V7.3-2 ¦ MEMBER ¦ -+ +---------------------------------+ -+ -+ It is convinient to have a common VIM directory but execute different -+ executables. -+ There are more solutions for this problem: -+ -+ solution 1. all executables in the same directory with different names -+ This is easily done with the following script that can be added -+ to the login.com or sylogin.com: > -+ -+ $ if f$getsyi("NODE_HWTYPE") .eqs. "VAX" -+ $ then -+ $ say "VAX platform" -+ $ vi*m:== mcr vim:VIM.EXE_VAX -+ $ endif -+ $ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH" -+ $ then -+ $ say "ALPHA platform" -+ $ vi*m :== mcr vim:VIM.EXE_AXP -+ $ endif -+ $ if f$getsyi("ARCH_NAME") .eqs. "IA64" -+ $ then -+ $ say "IA64 platform" -+ $ vi*m :== mcr vim:VIM.EXE_IA64 -+ $ endif -+ -+ solution 2. different directories: > -+ -+ $ if f$getsyi("NODE_HWTYPE") .eqs. "VAX" -+ $ then -+ $ say "VAX platform" -+ $ define/nolog VIM RF10:[UTIL.VAX_EXE] ! VAX executables -+ $ endif -+ $ if f$getsyi("NODE_HWTYPE") .eqs. "ALPH" -+ $ then -+ $ say "ALPHA platform" -+ $ define/nolog VIM RF10:[UTIL.AXP_EXE] ! AXP executables -+ $ endif -+ $ if f$getsyi("ARCH_NAME") .eqs. "IA64" -+ $ then -+ $ say "IA64 platform" -+ $ define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables -+ $ endif -+ $! VIMRUNTIME must be defined in order to find runtime files -+ $ define/nolog VIMRUNTIME RF10:[UTIL.VIM72] -+ -+ A good examle for this approach is the [GNU]gnu_tools.com script from GNU_TOOLS.ZIP -+ package downloadable from http://www.polarhome.com/vim/ -+ -+ (Zoltan Arpadffy, Vim 7.2) -+ - ============================================================================== - - 9. VMS related changes *vms-changes* - -! Recent changes -! - The following plugins are included into VMS runtime: -! genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3, -! bufexplorer 7.1.7, taglist 4.5 -! - minor changes in vimrc (just in VMS runtime) -! - make_vms.mms - HUGE model is the default -! - [TESTDIR]make_vms.mms include as many tests possible -! - modify test30 and test54 for VMS -! - enable FLOAT feature in VMS port -! - os_vms.txt updated -! -! Version 7.2 (2008 Aug 9) -! - VCF files write corrected -! - CTAGS 5.7 included -! - corrected make_vms.mms (on VAX gave syntax error) -! -! Version 7.1 (2007 Jun 15) -! - create TAGS file from menu -! -! Version 7 (2006 May 8) - - Improved low level char input (affects just console mode) -+ - Fixed plugin bug -+ - CTAGS 5.6 included - - Version 6.4 (2005 Oct 15) - - GTKLIB and Vim build on IA64 -*************** -*** 806,811 **** ---- 926,932 ---- - - OpenVMS documentation and executables are maintained by: - Zoltan Arpadffy <arpadffy@polarhome.com> -+ OpenVMS Vim page: http://www.polarhome.com/vim/ - - This document uses parts and remarks from earlier authors and contributors - of OS_VMS.TXT: -*** ../vim-7.2.006/src/os_vms_conf.h Thu May 10 19:26:17 2007 ---- src/os_vms_conf.h Sat Aug 16 05:09:17 2008 -*************** -*** 114,119 **** ---- 114,121 ---- - #define HAVE_PUTENV - #define HAVE_SETENV - #define HAVE_SETJMP_H -+ #define HAVE_MATH_H -+ #define HAVE_FLOAT_FUNCS - - #undef HAVE_DIRENT_H - #undef HAVE_SYS_NDIR_H -*** ../vim-7.2.006/src/Make_vms.mms Mon Oct 29 22:38:54 2007 ---- src/Make_vms.mms Sat Aug 16 05:17:41 2008 -*************** -*** 2,8 **** - # Makefile for Vim on OpenVMS - # - # Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com> -! # Last change: 2007 Oct 22 - # - # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64 - # with MMS and MMK ---- 2,8 ---- - # Makefile for Vim on OpenVMS - # - # Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com> -! # Last change: 2008 Aug 16 - # - # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64 - # with MMS and MMK -*************** -*** 36,42 **** - # BIG - Many features enabled, as rich as possible. (default) - # HUGE - All possible featues enabled. - # Please select one of these alternatives above. -! MODEL = BIG - - # GUI or terminal mode executable. - # Comment out if you want just the character terminal mode only. ---- 36,42 ---- - # BIG - Many features enabled, as rich as possible. (default) - # HUGE - All possible featues enabled. - # Please select one of these alternatives above. -! MODEL = HUGE - - # GUI or terminal mode executable. - # Comment out if you want just the character terminal mode only. -*** ../vim-7.2.006/src/testdir/Make_vms.mms Wed Jun 25 00:34:23 2008 ---- src/testdir/Make_vms.mms Tue Aug 19 06:28:07 2008 -*************** -*** 4,12 **** - # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> - # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> - # -! # Last change: 2008 Jun 19 - # -! # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX. - # Edit the lines in the Configuration section below to select. - # - # Execute with: ---- 4,12 ---- - # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> - # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> - # -! # Last change: 2008 Aug 19 - # -! # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64. - # Edit the lines in the Configuration section below to select. - # - # Execute with: -*************** -*** 32,37 **** ---- 32,46 ---- - # and directory handling. - # WANT_UNIX = YES - -+ # Comment out if you want to run Win32 specific tests as well, but please -+ # be aware, that on OpenVMS will fail, because of cat, rm, etc commands -+ # and directory handling. -+ # WANT_WIN = YES -+ -+ # Comment out if you want to run spell checker tests. -+ # They fail because VMS does not support file names. -+ # WANT_SPELL = YES -+ - # Comment out if you have gzip on your system - # HAVE_GZIP = YES - -*************** -*** 53,64 **** - test13.out test14.out test15.out test17.out \ - test18.out test19.out test20.out test21.out test22.out \ - test23.out test24.out test26.out \ -! test28.out test29.out test31.out test32.out \ - test33.out test34.out test35.out test36.out test37.out \ - test38.out test39.out test40.out test41.out test42.out \ - test43.out test44.out test45.out test46.out \ - test48.out test51.out test53.out test54.out test55.out \ -! test56.out test57.out test58.out test59.out test60.out \ - test61.out test62.out test63.out test64.out test65.out - - .IFDEF WANT_GUI ---- 62,73 ---- - test13.out test14.out test15.out test17.out \ - test18.out test19.out test20.out test21.out test22.out \ - test23.out test24.out test26.out \ -! test28.out test29.out test30.out test31.out test32.out \ - test33.out test34.out test35.out test36.out test37.out \ - test38.out test39.out test40.out test41.out test42.out \ - test43.out test44.out test45.out test46.out \ - test48.out test51.out test53.out test54.out test55.out \ -! test56.out test57.out test60.out \ - test61.out test62.out test63.out test64.out test65.out - - .IFDEF WANT_GUI -*************** -*** 67,73 **** - .ENDIF - - .IFDEF WANT_UNIX -! SCRIPT_UNIX = test10.out test12.out test25.out test27.out test30.out test49.out - .ENDIF - - .IFDEF HAVE_GZIP ---- 76,90 ---- - .ENDIF - - .IFDEF WANT_UNIX -! SCRIPT_UNIX = test10.out test12.out test25.out test27.out test49.out -! .ENDIF -! -! .IFDEF WANT_WIN -! SCRIPT_WIN = test50.out test52.out -! .ENDIF -! -! .IFDEF WANT_SPELL -! SCRIPT_SPELL = test58.out test59.out - .ENDIF - - .IFDEF HAVE_GZIP -*************** -*** 84,94 **** - -@ write sys$output " "$*" " - -@ write sys$output "-----------------------------------------------" - -@ create/term/wait mcr $(VIMPROG) $(GUI_OPTION) -u vms.vim --noplugin -s dotest.in $*.in -! -@ if "''F$SEARCH("test.out.*")'" .NES. "" then differences test.out $*.ok; - -@ if "''F$SEARCH("test.out.*")'" .NES. "" then rename test.out $*.out - -@ if "''F$SEARCH("Xdotest.*")'" .NES. "" then delete/noconfirm/nolog Xdotest.*.* - -! all : clean nolog $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_GZIP) $(SCRIPT_GDIFF) - -@ write sys$output " " - -@ write sys$output "-----------------------------------------------" - -@ write sys$output " All done" ---- 101,111 ---- - -@ write sys$output " "$*" " - -@ write sys$output "-----------------------------------------------" - -@ create/term/wait mcr $(VIMPROG) $(GUI_OPTION) -u vms.vim --noplugin -s dotest.in $*.in -! -@ if "''F$SEARCH("test.out.*")'" .NES. "" then differences /par test.out $*.ok; - -@ if "''F$SEARCH("test.out.*")'" .NES. "" then rename test.out $*.out - -@ if "''F$SEARCH("Xdotest.*")'" .NES. "" then delete/noconfirm/nolog Xdotest.*.* - -! all : clean nolog $(SCRIPT) $(SCRIPT_GUI) $(SCRIPT_UNIX) $(SCRIPT_WIN) $(SCRIPT_SPELL) $(SCRIPT_GZIP) $(SCRIPT_GDIFF) - -@ write sys$output " " - -@ write sys$output "-----------------------------------------------" - -@ write sys$output " All done" -*************** -*** 113,118 **** ---- 130,137 ---- - -@ write sys$output "MAKE_VMS.MMS options:" - -@ write sys$output " WANT_GUI = ""$(WANT_GUI)"" " - -@ write sys$output " WANT_UNIX = ""$(WANT_UNIX)"" " -+ -@ write sys$output " WANT_WIN = ""$(WANT_WIN)"" " -+ -@ write sys$output " WANT_SPELL= ""$(WANT_SPELL)"" " - -@ write sys$output " HAVE_GZIP = ""$(HAVE_GZIP)"" " - -@ write sys$output " HAVE_GDIFF= ""$(HAVE_GDIFF)"" " - -@ write sys$output "Default vimrc file is VMS.VIM: -*************** -*** 122,126 **** ---- 141,153 ---- - clean : - -@ if "''F$SEARCH("*.out")'" .NES. "" then delete/noconfirm/nolog *.out.* - -@ if "''F$SEARCH("test.log")'" .NES. "" then delete/noconfirm/nolog test.log.* -+ -@ if "''F$SEARCH("test.ok")'" .NES. "" then delete/noconfirm/nolog test.ok.* - -@ if "''F$SEARCH("Xdotest.*")'" .NES. "" then delete/noconfirm/nolog Xdotest.*.* - -@ if "''F$SEARCH("*.*_sw*")'" .NES. "" then delete/noconfirm/nolog *.*_sw*.* -+ -@ if "''F$SEARCH("*.failed")'" .NES. "" then delete/noconfirm/nolog *.failed.* -+ -@ if "''F$SEARCH("*.rej")'" .NES. "" then delete/noconfirm/nolog *.rej.* -+ -@ if "''F$SEARCH("tiny.vim")'" .NES. "" then delete/noconfirm/nolog tiny.vim.* -+ -@ if "''F$SEARCH("small.vim")'" .NES. "" then delete/noconfirm/nolog small.vim.* -+ -@ if "''F$SEARCH("mbyte.vim")'" .NES. "" then delete/noconfirm/nolog mbyte.vim.* -+ -@ if "''F$SEARCH("viminfo.*")'" .NES. "" then delete/noconfirm/nolog viminfo.*.* -+ -*** ../vim-7.2.006/src/testdir/test30.in Sun Jul 13 19:17:14 2008 ---- src/testdir/test30.in Sat Aug 16 04:59:37 2008 -*************** -*** 24,33 **** - :set nobin eol - :bwipe XXUnix XXDos XXMac - :" create mixed format files -! :!cat XXUnix XXDos >XXUxDs -! :!cat XXUnix XXMac >XXUxMac -! :!cat XXDos XXMac >XXDosMac -! :!cat XXUnix XXDos XXMac >XXUxDsMc - :" - :" try reading and writing with 'fileformats' empty - :set fileformat=unix ---- 24,40 ---- - :set nobin eol - :bwipe XXUnix XXDos XXMac - :" create mixed format files -! :if has("vms") -! : !copy XXUnix,XXDos XXUxDs. -! : !copy XXUnix,XXMac XXUxMac. -! : !copy XXDos,XXMac XXDosMac. -! : !copy XXUnix,XXDos,XXMac XXUxDsMc. -! :else -! : !cat XXUnix XXDos >XXUxDs -! : !cat XXUnix XXMac >XXUxMac -! : !cat XXDos XXMac >XXDosMac -! : !cat XXUnix XXDos XXMac >XXUxDsMc -! :endif - :" - :" try reading and writing with 'fileformats' empty - :set fileformat=unix -*** ../vim-7.2.006/src/testdir/test54.in Sun Jan 2 12:43:19 2005 ---- src/testdir/test54.in Tue Aug 19 06:26:55 2008 -*************** -*** 3,10 **** - STARTTEST - :so small.vim - :e xx -! :!rm -f test.out -! :au BufLeave <buffer> :!echo buffer-local autommand in %>> test.out - :e somefile " here, autocommand for xx shall write test.out - : " but autocommand shall not apply to buffer named <buffer> - :bwipe xx " here, autocommand shall be auto-deleted ---- 3,15 ---- - STARTTEST - :so small.vim - :e xx -! :if has("vms") -! : !del test.out.* -! : au BufLeave <buffer> :!write sys$output "buffer-local autommand in %" > test.out -! :else -! : !rm -f test.out -! : au BufLeave <buffer> :!echo buffer-local autommand in %>> test.out -! :endif - :e somefile " here, autocommand for xx shall write test.out - : " but autocommand shall not apply to buffer named <buffer> - :bwipe xx " here, autocommand shall be auto-deleted -*** ../vim-7.2.006/src/version.c Mon Aug 25 05:03:29 2008 ---- src/version.c Mon Sep 1 16:46:50 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 7, - /**/ - --- -How To Keep A Healthy Level Of Insanity: -8. Don't use any punctuation marks. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.008 b/data/vim/patches/7.2.008 deleted file mode 100644 index d3fb58e5c..000000000 --- a/data/vim/patches/7.2.008 +++ /dev/null @@ -1,63 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.008 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.008 -Problem: With a BufHidden autocommand that invokes ":bunload" the window - count for a buffer can be wrong. (Bob Hiestand) -Solution: Don't call enter_buffer() when already in that buffer. -Files: src/buffer.c - - -*** ../vim-7.2.007/src/buffer.c Wed Aug 6 18:32:40 2008 ---- src/buffer.c Mon Sep 1 14:25:45 2008 -*************** -*** 1351,1361 **** - } - } - #ifdef FEAT_AUTOCMD - # ifdef FEAT_EVAL -! /* An autocommand may have deleted buf or aborted the script processing! */ -! if (buf_valid(buf) && !aborting()) - # else -! if (buf_valid(buf)) /* an autocommand may have deleted buf! */ - # endif - #endif - enter_buffer(buf); ---- 1351,1362 ---- - } - } - #ifdef FEAT_AUTOCMD -+ /* An autocommand may have deleted "buf", already entered it (e.g., when -+ * it did ":bunload") or aborted the script processing! */ - # ifdef FEAT_EVAL -! if (buf_valid(buf) && buf != curbuf && !aborting()) - # else -! if (buf_valid(buf) && buf != curbuf) - # endif - #endif - enter_buffer(buf); -*** ../vim-7.2.007/src/version.c Mon Sep 1 16:50:09 2008 ---- src/version.c Mon Sep 1 17:31:28 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 8, - /**/ - --- -If Pacman had affected us as kids we'd be running around in dark rooms, -munching pills and listening to repetitive music. - -- Marcus Brigstocke - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.009 b/data/vim/patches/7.2.009 deleted file mode 100644 index fa891dcfc..000000000 --- a/data/vim/patches/7.2.009 +++ /dev/null @@ -1,67 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.009 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.009 -Problem: Can't compile with Perl 5.10 on MS-Windows. (Cesar Romani) -Solution: Add the Perl_sv_free2 function for dynamic loading. (Dan Sharp) -Files: src/if_perl.xs - - -*** ../vim-7.2.008/src/if_perl.xs Thu Jul 24 16:24:15 2008 ---- src/if_perl.xs Mon Sep 1 14:58:37 2008 -*************** -*** 136,141 **** ---- 136,144 ---- - # define Perl_newXS_flags dll_Perl_newXS_flags - #endif - # define Perl_sv_free dll_Perl_sv_free -+ # if (PERL_REVISION == 5) && (PERL_VERSION >= 10) -+ # define Perl_sv_free2 dll_Perl_sv_free2 -+ # endif - # define Perl_sv_isa dll_Perl_sv_isa - # define Perl_sv_magic dll_Perl_sv_magic - # define Perl_sv_setiv dll_Perl_sv_setiv -*************** -*** 268,273 **** ---- 271,277 ---- - static void (*boot_DynaLoader)_((pTHX_ CV*)); - - #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) -+ static void (*Perl_sv_free2)(pTHX_ SV*); - static void (*Perl_sys_init3)(int* argc, char*** argv, char*** env); - static void (*Perl_sys_term)(void); - static SV** (*Perl_ISv_ptr)(register PerlInterpreter*); -*************** -*** 367,372 **** ---- 371,377 ---- - {"Perl_TXpv_ptr", (PERL_PROC*)&Perl_TXpv_ptr}, - {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr}, - #else -+ {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2}, - {"Perl_sys_init3", (PERL_PROC*)&Perl_sys_init3}, - {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term}, - {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr}, -*** ../vim-7.2.008/src/version.c Mon Sep 1 17:32:40 2008 ---- src/version.c Mon Sep 1 17:55:24 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 9, - /**/ - --- -How To Keep A Healthy Level Of Insanity: -11. Specify that your drive-through order is "to go". - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.010 b/data/vim/patches/7.2.010 deleted file mode 100644 index 47315881e..000000000 --- a/data/vim/patches/7.2.010 +++ /dev/null @@ -1,206 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.010 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.010 -Problem: When using "K" in Visual mode not all characters are properly - escaped. (Ben Schmidt) -Solution: Use a function with the functionality of shellescape(). (Jan - Minar) -Files: src/mbyte.c, src/misc2.c, src/normal.c - - -*** ../vim-7.2.009/src/mbyte.c Wed Aug 6 18:45:36 2008 ---- src/mbyte.c Wed Sep 3 22:34:48 2008 -*************** -*** 2540,2546 **** - return (int)(p - q); - } - -- #if defined(FEAT_EVAL) || defined(PROTO) - /* - * Copy a character from "*fp" to "*tp" and advance the pointers. - */ ---- 2540,2545 ---- -*************** -*** 2555,2561 **** - *tp += l; - *fp += l; - } -- #endif - - /* - * Return the offset from "p" to the first byte of a character. When "p" is ---- 2554,2559 ---- -*** ../vim-7.2.009/src/misc2.c Thu Jul 24 20:28:58 2008 ---- src/misc2.c Wed Sep 3 22:05:21 2008 -*************** -*** 1257,1263 **** - return escaped_string; - } - -- #if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO) - /* - * Return TRUE when 'shell' has "csh" in the tail. - */ ---- 1257,1262 ---- -*************** -*** 1266,1274 **** - { - return (strstr((char *)gettail(p_sh), "csh") != NULL); - } -- #endif - -- #if defined(FEAT_EVAL) || defined(PROTO) - /* - * Escape "string" for use as a shell argument with system(). - * This uses single quotes, except when we know we need to use double qoutes ---- 1265,1271 ---- -*************** -*** 1391,1397 **** - - return escaped_string; - } -- #endif - - /* - * Like vim_strsave(), but make all characters uppercase. ---- 1388,1393 ---- -*** ../vim-7.2.009/src/normal.c Thu Jul 31 22:03:54 2008 ---- src/normal.c Sat Sep 6 15:06:07 2008 -*************** -*** 5469,5474 **** ---- 5469,5479 ---- - STRCPY(buf, "he! "); - else - { -+ /* An external command will probably use an argument starting -+ * with "-" as an option. To avoid trouble we skip the "-". */ -+ while (*ptr == '-') -+ ++ptr; -+ - /* When a count is given, turn it into a range. Is this - * really what we want? */ - isman = (STRCMP(kp, "man") == 0); -*************** -*** 5511,5547 **** - /* - * Now grab the chars in the identifier - */ -! if (cmdchar == '*') -! aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); -! else if (cmdchar == '#') -! aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); -! else if (cmdchar == 'K' && !kp_help) -! aux_ptr = (char_u *)" \t\\\"|!"; -! else -! /* Don't escape spaces and Tabs in a tag with a backslash */ -! aux_ptr = (char_u *)"\\|\""; -! -! p = buf + STRLEN(buf); -! while (n-- > 0) -! { -! /* put a backslash before \ and some others */ -! if (vim_strchr(aux_ptr, *ptr) != NULL) -! *p++ = '\\'; -! #ifdef FEAT_MBYTE -! /* When current byte is a part of multibyte character, copy all bytes -! * of that character. */ -! if (has_mbyte) - { -! int i; -! int len = (*mb_ptr2len)(ptr) - 1; -! -! for (i = 0; i < len && n >= 1; ++i, --n) -! *p++ = *ptr++; - } - #endif -! *p++ = *ptr++; - } -- *p = NUL; - - /* - * Execute the command. ---- 5516,5572 ---- - /* - * Now grab the chars in the identifier - */ -! if (cmdchar == 'K' && !kp_help) -! { -! /* Escape the argument properly for a shell command */ -! p = vim_strsave_shellescape(ptr, TRUE); -! if (p == NULL) - { -! vim_free(buf); -! return; - } -+ buf = (char_u *)vim_realloc(buf, STRLEN(buf) + STRLEN(p) + 1); -+ if (buf == NULL) -+ { -+ vim_free(buf); -+ vim_free(p); -+ return; -+ } -+ STRCAT(buf, p); -+ vim_free(p); -+ } -+ else -+ { -+ if (cmdchar == '*') -+ aux_ptr = (char_u *)(p_magic ? "/.*~[^$\\" : "/^$\\"); -+ else if (cmdchar == '#') -+ aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\"); -+ else -+ /* Don't escape spaces and Tabs in a tag with a backslash */ -+ aux_ptr = (char_u *)"\\|\"\n*?["; -+ -+ p = buf + STRLEN(buf); -+ while (n-- > 0) -+ { -+ /* put a backslash before \ and some others */ -+ if (vim_strchr(aux_ptr, *ptr) != NULL) -+ *p++ = '\\'; -+ #ifdef FEAT_MBYTE -+ /* When current byte is a part of multibyte character, copy all -+ * bytes of that character. */ -+ if (has_mbyte) -+ { -+ int i; -+ int len = (*mb_ptr2len)(ptr) - 1; -+ -+ for (i = 0; i < len && n >= 1; ++i, --n) -+ *p++ = *ptr++; -+ } - #endif -! *p++ = *ptr++; -! } -! *p = NUL; - } - - /* - * Execute the command. -*** ../vim-7.2.009/src/version.c Mon Sep 1 17:56:05 2008 ---- src/version.c Sat Sep 6 16:26:42 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 10, - /**/ - --- -Q. What happens to programmers when they die? -A: MS-Windows programmers are reinstalled. C++ programmers become undefined, - anyone who refers to them will die as well. Java programmers reincarnate - after being garbage collected. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.011 b/data/vim/patches/7.2.011 deleted file mode 100644 index 928f8d638..000000000 --- a/data/vim/patches/7.2.011 +++ /dev/null @@ -1,105 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.011 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.011 -Problem: Get an error when inserting a float value from the expression - register. -Solution: Convert the Float to a String automatically in the same place - where a List would be converted to a String. -Files: src/eval.c - - -*** ../vim-7.2.010/src/eval.c Mon Aug 25 04:48:21 2008 ---- src/eval.c Sun Sep 7 13:50:38 2008 -*************** -*** 1256,1278 **** - - /* - * Top level evaluation function, returning a string. - * Return pointer to allocated memory, or NULL for failure. - */ - char_u * -! eval_to_string(arg, nextcmd, dolist) - char_u *arg; - char_u **nextcmd; -! int dolist; /* turn List into sequence of lines */ - { - typval_T tv; - char_u *retval; - garray_T ga; - - if (eval0(arg, &tv, nextcmd, TRUE) == FAIL) - retval = NULL; - else - { -! if (dolist && tv.v_type == VAR_LIST) - { - ga_init2(&ga, (int)sizeof(char), 80); - if (tv.vval.v_list != NULL) ---- 1256,1281 ---- - - /* - * Top level evaluation function, returning a string. -+ * When "convert" is TRUE convert a List into a sequence of lines and convert -+ * a Float to a String. - * Return pointer to allocated memory, or NULL for failure. - */ - char_u * -! eval_to_string(arg, nextcmd, convert) - char_u *arg; - char_u **nextcmd; -! int convert; - { - typval_T tv; - char_u *retval; - garray_T ga; -+ char_u numbuf[NUMBUFLEN]; - - if (eval0(arg, &tv, nextcmd, TRUE) == FAIL) - retval = NULL; - else - { -! if (convert && tv.v_type == VAR_LIST) - { - ga_init2(&ga, (int)sizeof(char), 80); - if (tv.vval.v_list != NULL) -*************** -*** 1280,1285 **** ---- 1283,1295 ---- - ga_append(&ga, NUL); - retval = (char_u *)ga.ga_data; - } -+ #ifdef FEAT_FLOAT -+ else if (convert && tv.v_type == VAR_FLOAT) -+ { -+ vim_snprintf((char *)numbuf, NUMBUFLEN, "%g", tv.vval.v_float); -+ retval = vim_strsave(numbuf); -+ } -+ #endif - else - retval = vim_strsave(get_tv_string(&tv)); - clear_tv(&tv); -*** ../vim-7.2.010/src/version.c Sat Sep 6 16:44:06 2008 ---- src/version.c Sun Sep 7 13:52:00 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 11, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -34. You laugh at people with 14400 baud modems. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.012 b/data/vim/patches/7.2.012 deleted file mode 100644 index fa3ed2473..000000000 --- a/data/vim/patches/7.2.012 +++ /dev/null @@ -1,53 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.012 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.012 -Problem: Compiler warnings when building with startup timing. -Solution: Add type casts. -Files: src/ex_cmds2.c - - -*** ../vim-7.2.011/src/ex_cmds2.c Sun Jul 13 19:36:09 2008 ---- src/ex_cmds2.c Tue Sep 2 11:14:41 2008 -*************** -*** 3145,3152 **** - verbose_leave(); - } - #ifdef STARTUPTIME -! vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname); -! time_msg(IObuff, &tv_start); - time_pop(&tv_rel); - #endif - ---- 3145,3152 ---- - verbose_leave(); - } - #ifdef STARTUPTIME -! vim_snprintf((char *)IObuff, IOSIZE, "sourcing %s", fname); -! time_msg((char *)IObuff, &tv_start); - time_pop(&tv_rel); - #endif - -*** ../vim-7.2.011/src/version.c Sun Sep 7 13:54:31 2008 ---- src/version.c Sun Sep 7 15:49:00 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 12, - /**/ - --- -He who laughs last, thinks slowest. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.013 b/data/vim/patches/7.2.013 deleted file mode 100644 index 2645f0a7d..000000000 --- a/data/vim/patches/7.2.013 +++ /dev/null @@ -1,135 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.013 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.013 -Problem: While waiting for the X selection Vim consumes a lot of CPU time - and hangs until a response is received. -Solution: Sleep a bit when the selection event hasn't been received yet. - Time out after a couple of seconds to avoid a hang when the - selection owner isn't responding. -Files: src/ui.c - - -*** ../vim-7.2.012/src/ui.c Mon Jul 14 21:47:49 2008 ---- src/ui.c Sun Sep 7 16:54:35 2008 -*************** -*** 2110,2115 **** ---- 2110,2117 ---- - int i; - int nbytes = 0; - char_u *buffer; -+ time_t start_time; -+ int timed_out = FALSE; - - for (i = - #ifdef FEAT_MBYTE -*************** -*** 2129,2134 **** ---- 2131,2137 ---- - case 3: type = text_atom; break; - default: type = XA_STRING; - } -+ success = FALSE; - XtGetSelectionValue(myShell, cbd->sel_atom, type, - clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime); - -*************** -*** 2141,2167 **** - * characters, then they will appear before the one that requested the - * paste! Don't worry, we will catch up with any other events later. - */ - for (;;) - { - if (XCheckTypedEvent(dpy, SelectionNotify, &event)) - break; - if (XCheckTypedEvent(dpy, SelectionRequest, &event)) - /* We may get a SelectionRequest here and if we don't handle - * it we hang. KDE klipper does this, for example. */ - XtDispatchEvent(&event); - - /* Do we need this? Probably not. */ - XSync(dpy, False); - -! /* Bernhard Walle solved a slow paste response in an X terminal by -! * adding: usleep(10000); here. */ - } - -- /* this is where clip_x11_request_selection_cb() is actually called */ -- XtDispatchEvent(&event); -- - if (success) - return; - } - - /* Final fallback position - use the X CUT_BUFFER0 store */ ---- 2144,2189 ---- - * characters, then they will appear before the one that requested the - * paste! Don't worry, we will catch up with any other events later. - */ -+ start_time = time(NULL); - for (;;) - { - if (XCheckTypedEvent(dpy, SelectionNotify, &event)) -+ { -+ /* this is where clip_x11_request_selection_cb() is actually -+ * called */ -+ XtDispatchEvent(&event); - break; -+ } - if (XCheckTypedEvent(dpy, SelectionRequest, &event)) - /* We may get a SelectionRequest here and if we don't handle - * it we hang. KDE klipper does this, for example. */ - XtDispatchEvent(&event); - -+ /* Time out after 2 to 3 seconds to avoid that we hang when the -+ * other process doesn't respond. Note that the SelectionNotify -+ * event may still come later when the selection owner comes back -+ * to life and the text gets inserted unexpectedly (by xterm). -+ * Don't know how to avoid that :-(. */ -+ if (time(NULL) > start_time + 2) -+ { -+ timed_out = TRUE; -+ break; -+ } -+ - /* Do we need this? Probably not. */ - XSync(dpy, False); - -! /* Wait for 1 msec to avoid that we eat up all CPU time. */ -! ui_delay(1L, TRUE); - } - - if (success) - return; -+ -+ /* don't do a retry with another type after timing out, otherwise we -+ * hang for 15 seconds. */ -+ if (timed_out) -+ break; - } - - /* Final fallback position - use the X CUT_BUFFER0 store */ -*** ../vim-7.2.012/src/version.c Sun Sep 7 15:49:45 2008 ---- src/version.c Sun Sep 7 21:45:55 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 13, - /**/ - --- -The users that I support would double-click on a landmine to find out -what happens. -- A system administrator - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.014 b/data/vim/patches/7.2.014 deleted file mode 100644 index a03794868..000000000 --- a/data/vim/patches/7.2.014 +++ /dev/null @@ -1,52 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.014 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.014 -Problem: synstack() doesn't work in an emptly line. -Solution: Accept column zero as a valid position. -Files: src/eval.c - - -*** ../vim-7.2.013/src/eval.c Sun Sep 7 13:54:31 2008 ---- src/eval.c Sun Sep 7 13:50:38 2008 -*************** -*** 16667,16673 **** - col = get_tv_number(&argvars[1]) - 1; /* -1 on type error */ - - if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count -! && col >= 0 && col < (long)STRLEN(ml_get(lnum)) - && rettv_list_alloc(rettv) != FAIL) - { - (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE); ---- 16667,16673 ---- - col = get_tv_number(&argvars[1]) - 1; /* -1 on type error */ - - if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count -! && col >= 0 && (col == 0 || col < (long)STRLEN(ml_get(lnum))) - && rettv_list_alloc(rettv) != FAIL) - { - (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE); -*** ../vim-7.2.013/src/version.c Sun Sep 7 21:47:51 2008 ---- src/version.c Wed Sep 10 15:36:52 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 14, - /**/ - --- -Everybody lies, but it doesn't matter since nobody listens. - -- Lieberman's Law - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.015 b/data/vim/patches/7.2.015 deleted file mode 100644 index e03ac1564..000000000 --- a/data/vim/patches/7.2.015 +++ /dev/null @@ -1,82 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.015 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.015 -Problem: "make all test install" doesn't stop when the test fails. (Daniel - Shahaf) -Solution: When test.log contains failures exit with non-zero status. -Files: src/testdir/Makefile - - -*** ../vim-7.2.014/src/testdir/Makefile Wed Jun 25 00:22:53 2008 ---- src/testdir/Makefile Sun Sep 7 21:31:49 2008 -*************** -*** 26,40 **** - - .SUFFIXES: .in .out - -! nongui: nolog $(SCRIPTS) -! @echo -! @cat test.log -! @echo ALL DONE - -! gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) - @echo -! @cat test.log -! @echo ALL DONE - - $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG) - ---- 26,42 ---- - - .SUFFIXES: .in .out - -! nongui: nolog $(SCRIPTS) report -! -! gui: nolog $(SCRIPTS) $(SCRIPTS_GUI) report - -! report: - @echo -! @echo 'Test results:' -! @/bin/sh -c "if test -f test.log; \ -! then cat test.log; echo TEST FAILURE; exit 1; \ -! else echo ALL DONE; \ -! fi" - - $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG) - -*************** -*** 71,74 **** - test60.out: test60.vim - - nolog: -! -echo Test results: >test.log ---- 73,76 ---- - test60.out: test60.vim - - nolog: -! -rm -f test.log -*** ../vim-7.2.014/src/version.c Wed Sep 10 15:38:13 2008 ---- src/version.c Wed Sep 10 18:23:38 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 15, - /**/ - --- -Light travels faster than sound. This is why some people -appear bright until you hear them speak - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.016 b/data/vim/patches/7.2.016 deleted file mode 100644 index 03d5207f2..000000000 --- a/data/vim/patches/7.2.016 +++ /dev/null @@ -1,166 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.016 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.016 -Problem: The pattern being completed may be in freed memory when the - command line is being reallocated. (Dominique Pelle) -Solution: Keep a pointer to the expand_T in the command line structure. - Don't use <S-Tab> as CTRL-P when there are no results. Clear the - completion when using a command line from the history. -Files: src/ex_getln.c - - -*** ../vim-7.2.015/src/ex_getln.c Fri Aug 8 12:58:59 2008 ---- src/ex_getln.c Wed Sep 10 22:43:41 2008 -*************** -*** 31,36 **** ---- 31,38 ---- - int cmdattr; /* attributes for prompt */ - int overstrike; /* Typing mode on the command line. Shared by - getcmdline() and put_on_cmdline(). */ -+ expand_T *xpc; /* struct being used for expansion, xp_pattern -+ may point into cmdbuff */ - int xp_context; /* type of expansion */ - # ifdef FEAT_EVAL - char_u *xp_arg; /* user-defined expansion arg */ -*************** -*** 38,44 **** - # endif - }; - -! static struct cmdline_info ccline; /* current cmdline_info */ - - static int cmd_showtail; /* Only show path tail in lists ? */ - ---- 40,50 ---- - # endif - }; - -! /* The current cmdline_info. It is initialized in getcmdline() and after that -! * used by other functions. When invoking getcmdline() recursively it needs -! * to be saved with save_cmdline() and restored with restore_cmdline(). -! * TODO: make it local to getcmdline() and pass it around. */ -! static struct cmdline_info ccline; - - static int cmd_showtail; /* Only show path tail in lists ? */ - -*************** -*** 238,243 **** ---- 244,250 ---- - } - - ExpandInit(&xpc); -+ ccline.xpc = &xpc; - - #ifdef FEAT_RIGHTLEFT - if (curwin->w_p_rl && *curwin->w_p_rlc == 's' -*************** -*** 408,416 **** - #endif - - /* -! * <S-Tab> works like CTRL-P (unless 'wc' is <S-Tab>). - */ -! if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles != -1) - c = Ctrl_P; - - #ifdef FEAT_WILDMENU ---- 415,424 ---- - #endif - - /* -! * When there are matching completions to select <S-Tab> works like -! * CTRL-P (unless 'wc' is <S-Tab>). - */ -! if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0) - c = Ctrl_P; - - #ifdef FEAT_WILDMENU -*************** -*** 1513,1518 **** ---- 1521,1527 ---- - int old_firstc; - - vim_free(ccline.cmdbuff); -+ xpc.xp_context = EXPAND_NOTHING; - if (hiscnt == hislen) - p = lookfor; /* back to the old one */ - else -*************** -*** 1839,1844 **** ---- 1848,1854 ---- - #endif - - ExpandCleanup(&xpc); -+ ccline.xpc = NULL; - - #ifdef FEAT_SEARCH_EXTRA - if (did_incsearch) -*************** -*** 2508,2513 **** ---- 2518,2537 ---- - } - mch_memmove(ccline.cmdbuff, p, (size_t)ccline.cmdlen + 1); - vim_free(p); -+ -+ if (ccline.xpc != NULL -+ && ccline.xpc->xp_pattern != NULL -+ && ccline.xpc->xp_context != EXPAND_NOTHING -+ && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL) -+ { -+ int i = ccline.xpc->xp_pattern - p; -+ -+ /* If xp_pattern points inside the old cmdbuff it needs to be adjusted -+ * to point into the newly allocated memory. */ -+ if (i >= 0 && i <= ccline.cmdlen) -+ ccline.xpc->xp_pattern = ccline.cmdbuff + i; -+ } -+ - return OK; - } - -*************** -*** 2875,2880 **** ---- 2899,2905 ---- - prev_ccline = ccline; - ccline.cmdbuff = NULL; - ccline.cmdprompt = NULL; -+ ccline.xpc = NULL; - } - - /* -*************** -*** 3582,3587 **** ---- 3607,3613 ---- - ExpandInit(xp) - expand_T *xp; - { -+ xp->xp_pattern = NULL; - xp->xp_backslash = XP_BS_NONE; - #ifndef BACKSLASH_IN_FILENAME - xp->xp_shell = FALSE; -*** ../vim-7.2.015/src/version.c Wed Sep 10 18:25:18 2008 ---- src/version.c Sun Sep 14 14:38:47 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 16, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -53. To find out what time it is, you send yourself an e-mail and check the - "Date:" field. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.017 b/data/vim/patches/7.2.017 deleted file mode 100644 index 99979a152..000000000 --- a/data/vim/patches/7.2.017 +++ /dev/null @@ -1,162 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.017 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.017 -Problem: strlen() used on text that may not end in a NUL. (Dominique Pelle) - Pasting a very big selection doesn't work. -Solution: Use the length passed to the XtSelectionCallbackProc() function. - After getting the SelectionNotify event continue dispatching - events until the callback is actually called. Also dispatch the - PropertyNotify event. -Files: src/ui.c - - -*** ../vim-7.2.016/src/ui.c Sun Sep 7 21:47:51 2008 ---- src/ui.c Sun Sep 14 15:52:19 2008 -*************** -*** 2020,2026 **** - - if (value == NULL || *length == 0) - { -! clip_free_selection(cbd); /* ??? [what's the query?] */ - *(int *)success = FALSE; - return; - } ---- 2020,2026 ---- - - if (value == NULL || *length == 0) - { -! clip_free_selection(cbd); /* nothing received, clear register */ - *(int *)success = FALSE; - return; - } -*************** -*** 2076,2082 **** - text_prop.value = (unsigned char *)value; - text_prop.encoding = *type; - text_prop.format = *format; -! text_prop.nitems = STRLEN(value); - status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop, - &text_list, &n_text); - if (status != Success || n_text < 1) ---- 2076,2082 ---- - text_prop.value = (unsigned char *)value; - text_prop.encoding = *type; - text_prop.format = *format; -! text_prop.nitems = len; - status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop, - &text_list, &n_text); - if (status != Success || n_text < 1) -*************** -*** 2131,2137 **** - case 3: type = text_atom; break; - default: type = XA_STRING; - } -! success = FALSE; - XtGetSelectionValue(myShell, cbd->sel_atom, type, - clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime); - ---- 2131,2137 ---- - case 3: type = text_atom; break; - default: type = XA_STRING; - } -! success = MAYBE; - XtGetSelectionValue(myShell, cbd->sel_atom, type, - clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime); - -*************** -*** 2145,2169 **** - * paste! Don't worry, we will catch up with any other events later. - */ - start_time = time(NULL); -! for (;;) - { -! if (XCheckTypedEvent(dpy, SelectionNotify, &event)) - { -! /* this is where clip_x11_request_selection_cb() is actually -! * called */ - XtDispatchEvent(&event); -! break; - } -- if (XCheckTypedEvent(dpy, SelectionRequest, &event)) -- /* We may get a SelectionRequest here and if we don't handle -- * it we hang. KDE klipper does this, for example. */ -- XtDispatchEvent(&event); - - /* Time out after 2 to 3 seconds to avoid that we hang when the - * other process doesn't respond. Note that the SelectionNotify - * event may still come later when the selection owner comes back -! * to life and the text gets inserted unexpectedly (by xterm). -! * Don't know how to avoid that :-(. */ - if (time(NULL) > start_time + 2) - { - timed_out = TRUE; ---- 2145,2171 ---- - * paste! Don't worry, we will catch up with any other events later. - */ - start_time = time(NULL); -! while (success == MAYBE) - { -! if (XCheckTypedEvent(dpy, SelectionNotify, &event) -! || XCheckTypedEvent(dpy, SelectionRequest, &event) -! || XCheckTypedEvent(dpy, PropertyNotify, &event)) - { -! /* This is where clip_x11_request_selection_cb() should be -! * called. It may actually happen a bit later, so we loop -! * until "success" changes. -! * We may get a SelectionRequest here and if we don't handle -! * it we hang. KDE klipper does this, for example. -! * We need to handle a PropertyNotify for large selections. */ - XtDispatchEvent(&event); -! continue; - } - - /* Time out after 2 to 3 seconds to avoid that we hang when the - * other process doesn't respond. Note that the SelectionNotify - * event may still come later when the selection owner comes back -! * to life and the text gets inserted unexpectedly. Don't know -! * why that happens or how to avoid that :-(. */ - if (time(NULL) > start_time + 2) - { - timed_out = TRUE; -*************** -*** 2177,2183 **** - ui_delay(1L, TRUE); - } - -! if (success) - return; - - /* don't do a retry with another type after timing out, otherwise we ---- 2179,2185 ---- - ui_delay(1L, TRUE); - } - -! if (success == TRUE) - return; - - /* don't do a retry with another type after timing out, otherwise we -*** ../vim-7.2.016/src/version.c Sun Sep 14 14:41:44 2008 ---- src/version.c Sun Sep 14 15:55:34 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 17, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -54. You start tilting your head sideways to smile. :-) - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.018 b/data/vim/patches/7.2.018 deleted file mode 100644 index b195f09dc..000000000 --- a/data/vim/patches/7.2.018 +++ /dev/null @@ -1,45 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.018 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.018 -Problem: Memory leak when substitute is aborted. -Solution: Free the buffer allocated for the new text. (Dominique Pelle) -Files: src/ex_cmds.c - - -*** ../vim-7.2.017/src/ex_cmds.c Wed Aug 6 15:03:07 2008 ---- src/ex_cmds.c Sun Sep 14 13:45:03 2008 -*************** -*** 5059,5064 **** ---- 5059,5065 ---- - - if (did_sub) - ++sub_nlines; -+ vim_free(new_start); /* for when substitute was cancelled */ - vim_free(sub_firstline); /* free the copy of the original line */ - sub_firstline = NULL; - } -*** ../vim-7.2.017/src/version.c Sun Sep 14 15:57:54 2008 ---- src/version.c Sun Sep 14 21:38:25 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 18, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -55. You ask your doctor to implant a gig in your brain. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.019 b/data/vim/patches/7.2.019 deleted file mode 100644 index 4404bca4f..000000000 --- a/data/vim/patches/7.2.019 +++ /dev/null @@ -1,65 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.019 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.019 -Problem: Completion of ":noautocmd" doesn't work and exists(":noautocmd") - returns zero. (Ben Fritz) -Solution: Add "noautocmd" to the list of modifiers and commands. -Files: src/ex_cmds.h, src/ex_docmd.c - - -*** ../vim-7.2.018/src/ex_cmds.h Wed Jun 25 00:44:40 2008 ---- src/ex_cmds.h Sat Sep 13 18:37:25 2008 -*************** -*** 635,640 **** ---- 635,642 ---- - RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), - EX(CMD_noremap, "noremap", ex_map, - BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), -+ EX(CMD_noautocmd, "noautocmd", ex_wrongmodifier, -+ NEEDARG|EXTRA|NOTRLCOM), - EX(CMD_nohlsearch, "nohlsearch", ex_nohlsearch, - TRLBAR|SBOXOK|CMDWIN), - EX(CMD_noreabbrev, "noreabbrev", ex_abbreviate, -*** ../vim-7.2.018/src/ex_docmd.c Sat Jul 26 16:04:39 2008 ---- src/ex_docmd.c Mon Sep 15 20:04:53 2008 -*************** -*** 2978,2983 **** ---- 2979,2985 ---- - {"keepmarks", 3, FALSE}, - {"leftabove", 5, FALSE}, - {"lockmarks", 3, FALSE}, -+ {"noautocmd", 3, FALSE}, - {"rightbelow", 6, FALSE}, - {"sandbox", 3, FALSE}, - {"silent", 3, FALSE}, -*** ../vim-7.2.018/src/version.c Sun Sep 14 21:40:26 2008 ---- src/version.c Thu Sep 18 12:39:56 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 19, - /**/ - --- -Proof techniques #2: Proof by Oddity. - SAMPLE: To prove that horses have an infinite number of legs. -(1) Horses have an even number of legs. -(2) They have two legs in back and fore legs in front. -(3) This makes a total of six legs, which certainly is an odd number of - legs for a horse. -(4) But the only number that is both odd and even is infinity. -(5) Therefore, horses must have an infinite number of legs. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.020 b/data/vim/patches/7.2.020 deleted file mode 100644 index fb290407f..000000000 --- a/data/vim/patches/7.2.020 +++ /dev/null @@ -1,54 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.020 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.020 -Problem: Starting the GUI when the executable starts with 'k', but the KDE - version no longer exists. -Solution: Don't have "kvim" start the GUI. -Files: src/main.c - - -*** ../vim-7.2.019/src/main.c Thu Jul 24 19:34:23 2008 ---- src/main.c Sun Sep 14 13:26:10 2008 -*************** -*** 1457,1463 **** - ++initstr; - } - -! if (TOLOWER_ASC(initstr[0]) == 'g' || initstr[0] == 'k') - { - main_start_gui(); - #ifdef FEAT_GUI ---- 1458,1465 ---- - ++initstr; - } - -! /* "gvim" starts the GUI. Also accept "Gvim" for MS-Windows. */ -! if (TOLOWER_ASC(initstr[0]) == 'g') - { - main_start_gui(); - #ifdef FEAT_GUI -*** ../vim-7.2.019/src/version.c Thu Sep 18 12:43:21 2008 ---- src/version.c Thu Sep 18 20:54:10 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 20, - /**/ - --- -hundred-and-one symptoms of being an internet addict: -90. Instead of calling you to dinner, your spouse sends e-mail. - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.021 b/data/vim/patches/7.2.021 deleted file mode 100644 index fee0bd85c..000000000 --- a/data/vim/patches/7.2.021 +++ /dev/null @@ -1,147 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.021 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.021 -Problem: When executing autocommands getting the full file name may be - slow. (David Kotchan) -Solution: Postpone calling FullName_save() until autocmd_fname is used. -Files: src/ex_docmd.c, src/fileio.c, src/globals.h - - -*** ../vim-7.2.020/src/ex_docmd.c Thu Sep 18 12:43:21 2008 ---- src/ex_docmd.c Mon Sep 15 20:04:53 2008 -*************** -*** 9542,9547 **** ---- 9569,9583 ---- - #ifdef FEAT_AUTOCMD - case SPEC_AFILE: /* file name for autocommand */ - result = autocmd_fname; -+ if (result != NULL && !autocmd_fname_full) -+ { -+ /* Still need to turn the fname into a full path. It is -+ * postponed to avoid a delay when <afile> is not used. */ -+ autocmd_fname_full = TRUE; -+ result = FullName_save(autocmd_fname, FALSE); -+ vim_free(autocmd_fname); -+ autocmd_fname = result; -+ } - if (result == NULL) - { - *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\""); -*** ../vim-7.2.020/src/fileio.c Wed Aug 6 18:43:07 2008 ---- src/fileio.c Tue Sep 16 21:24:26 2008 -*************** -*** 8523,8528 **** ---- 8523,8529 ---- - char_u *save_sourcing_name; - linenr_T save_sourcing_lnum; - char_u *save_autocmd_fname; -+ int save_autocmd_fname_full; - int save_autocmd_bufnr; - char_u *save_autocmd_match; - int save_autocmd_busy; -*************** -*** 8601,8606 **** ---- 8602,8608 ---- - * Save the autocmd_* variables and info about the current buffer. - */ - save_autocmd_fname = autocmd_fname; -+ save_autocmd_fname_full = autocmd_fname_full; - save_autocmd_bufnr = autocmd_bufnr; - save_autocmd_match = autocmd_match; - save_autocmd_busy = autocmd_busy; -*************** -*** 8618,8631 **** - if (fname != NULL && *fname != NUL) - autocmd_fname = fname; - else if (buf != NULL) -! autocmd_fname = buf->b_fname; - else - autocmd_fname = NULL; - } - else - autocmd_fname = fname_io; - if (autocmd_fname != NULL) -! autocmd_fname = FullName_save(autocmd_fname, FALSE); - - /* - * Set the buffer number to be used for <abuf>. ---- 8620,8634 ---- - if (fname != NULL && *fname != NUL) - autocmd_fname = fname; - else if (buf != NULL) -! autocmd_fname = buf->b_ffname; - else - autocmd_fname = NULL; - } - else - autocmd_fname = fname_io; - if (autocmd_fname != NULL) -! autocmd_fname = vim_strsave(autocmd_fname); -! autocmd_fname_full = FALSE; /* call FullName_save() later */ - - /* - * Set the buffer number to be used for <abuf>. -*************** -*** 8810,8815 **** ---- 8813,8819 ---- - sourcing_lnum = save_sourcing_lnum; - vim_free(autocmd_fname); - autocmd_fname = save_autocmd_fname; -+ autocmd_fname_full = save_autocmd_fname_full; - autocmd_bufnr = save_autocmd_bufnr; - autocmd_match = save_autocmd_match; - #ifdef FEAT_EVAL -*************** -*** 8918,8924 **** - { - apc->curpat = NULL; - -! /* only use a pattern when it has not been removed, has commands and - * the group matches. For buffer-local autocommands only check the - * buffer number. */ - if (ap->pat != NULL && ap->cmds != NULL ---- 8922,8928 ---- - { - apc->curpat = NULL; - -! /* Only use a pattern when it has not been removed, has commands and - * the group matches. For buffer-local autocommands only check the - * buffer number. */ - if (ap->pat != NULL && ap->cmds != NULL -*** ../vim-7.2.020/src/globals.h Sat Jul 26 16:04:49 2008 ---- src/globals.h Mon Sep 15 19:59:28 2008 -*************** -*** 1022,1027 **** ---- 1022,1028 ---- - #endif - #ifdef FEAT_AUTOCMD - EXTERN char_u *autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */ -+ EXTERN int autocmd_fname_full; /* autocmd_fname is full path */ - EXTERN int autocmd_bufnr INIT(= 0); /* fnum for <abuf> on cmdline */ - EXTERN char_u *autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */ - EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ -*** ../vim-7.2.020/src/version.c Thu Sep 18 20:55:19 2008 ---- src/version.c Thu Sep 18 21:24:30 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 21, - /**/ - --- -From "know your smileys": - :----} You lie like Pinocchio - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/7.2.022 b/data/vim/patches/7.2.022 deleted file mode 100644 index 392773523..000000000 --- a/data/vim/patches/7.2.022 +++ /dev/null @@ -1,140 +0,0 @@ -To: vim-dev@vim.org -Subject: Patch 7.2.022 (extra) -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=ISO-8859-1 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.2.022 (extra) -Problem: Testing is not possible when compiling with MingW. -Solution: Add a MingW specific test Makefile. (Bill McCarthy) -Files: Filelist, src/testdir/Make_ming.mak - - -*** ../vim-7.2.021/Filelist Sun Jul 13 19:33:31 2008 ---- Filelist Sun Sep 14 21:47:01 2008 -*************** -*** 285,290 **** ---- 285,291 ---- - src/proto/os_win32.pro \ - src/proto/os_mswin.pro \ - src/testdir/Make_dos.mak \ -+ src/testdir/Make_ming.mak \ - src/testdir/dos.vim \ - src/uninstal.c \ - src/vim.def \ -*** ../vim-7.2.021/src/testdir/Make_ming.mak Sat Sep 20 16:25:06 2008 ---- src/testdir/Make_ming.mak Sat Sep 20 16:25:58 2008 -*************** -*** 0 **** ---- 1,91 ---- -+ # Makefile to run tests for Vim, on Dos-like machines -+ # with sh.exe or zsh.exe in the path or not. -+ # -+ # Author: Bill McCarthy -+ # -+ # Note that test54 has been removed until it is fixed. -+ # -+ # Requires a set of Unix tools: echo, diff, etc. -+ -+ ifneq (sh.exe, $(SHELL)) -+ DEL = rm -f -+ MV = mv -+ CP = cp -+ DIRSLASH = / -+ else -+ DEL = del -+ MV = rename -+ CP = copy -+ DIRSLASH = \\ -+ endif -+ -+ VIMPROG = ..$(DIRSLASH)vim -+ -+ # Omitted: -+ # test2 "\\tmp" doesn't work. -+ # test10 'errorformat' is different -+ # test12 can't unlink a swap file -+ # test25 uses symbolic link -+ # test27 can't edit file with "*" in file name -+ # test31 16 bit version runs out of memory... -+ -+ SCRIPTS16 = test1.out test19.out test20.out test22.out \ -+ test23.out test24.out test28.out test29.out \ -+ test35.out test36.out test43.out \ -+ test44.out test45.out test46.out test47.out \ -+ test48.out test51.out test53.out \ -+ test55.out test56.out test57.out test58.out test59.out \ -+ test60.out test61.out test62.out test63.out test64.out -+ -+ # Had to remove test54 which doesn't work yet. -+ # test54.out -+ -+ SCRIPTS = test3.out test4.out test5.out test6.out test7.out \ -+ test8.out test9.out test11.out test13.out test14.out \ -+ test15.out test17.out test18.out test21.out test26.out \ -+ test30.out test31.out test32.out test33.out test34.out \ -+ test37.out test38.out test39.out test40.out test41.out \ -+ test42.out test52.out test65.out -+ -+ SCRIPTS32 = test50.out -+ -+ SCRIPTS_GUI = test16.out -+ -+ .SUFFIXES: .in .out -+ -+ vimall: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) $(SCRIPTS32) -+ echo ALL DONE -+ -+ nongui: fixff $(SCRIPTS16) $(SCRIPTS) -+ echo ALL DONE -+ -+ small: -+ echo ALL DONE -+ -+ gui: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) -+ echo ALL DONE -+ -+ win32: fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32) -+ echo ALL DONE -+ -+ fixff: -+ -$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok -+ -+ clean: -+ -$(DEL) *.out -+ -$(DEL) test.ok -+ -$(DEL) small.vim -+ -$(DEL) tiny.vim -+ -$(DEL) mbyte.vim -+ -$(DEL) X* -+ -$(DEL) viminfo -+ -+ .in.out: -+ $(CP) $*.ok test.ok -+ $(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in -+ diff test.out $*.ok -+ -$(DEL) $*.out -+ $(MV) test.out $*.out -+ -$(DEL) X* -+ -$(DEL) test.ok -+ -$(DEL) viminfo -*** ../vim-7.2.021/src/version.c Thu Sep 18 21:29:07 2008 ---- src/version.c Sat Sep 20 16:25:16 2008 -*************** -*** 678,679 **** ---- 678,681 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 22, - /**/ - --- -Where do you want to crash today? - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ download, build and distribute -- http://www.A-A-P.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/data/vim/patches/8.1.0002 b/data/vim/patches/8.1.0002 new file mode 100644 index 000000000..1584c3080 --- /dev/null +++ b/data/vim/patches/8.1.0002 @@ -0,0 +1,84 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0002 +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.0002 +Problem: :stopinsert changes the message position. +Solution: Save and restore msg_col and msg_row in clearmode(). (Jason + Franklin) +Files: src/screen.c, src/testdir/test_messages.vim + + +*** ../vim-8.1.0001/src/screen.c 2018-05-11 21:59:36.000000000 +0200 +--- src/screen.c 2018-05-19 14:33:04.359236642 +0200 +*************** +*** 10485,10494 **** +--- 10485,10500 ---- + void + clearmode(void) + { ++ int save_msg_row = msg_row; ++ int save_msg_col = msg_col; ++ + msg_pos_mode(); + if (Recording) + recording_mode(HL_ATTR(HLF_CM)); + msg_clr_eos(); ++ ++ msg_col = save_msg_col; ++ msg_row = save_msg_row; + } + + static void +*** ../vim-8.1.0001/src/testdir/test_messages.vim 2017-03-16 18:28:30.000000000 +0100 +--- src/testdir/test_messages.vim 2018-05-19 14:23:02.298669402 +0200 +*************** +*** 38,40 **** +--- 38,61 ---- + let &more = oldmore + endtry + endfunction ++ ++ " Patch 7.4.1696 defined the "clearmode()" command for clearing the mode ++ " indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked. Message ++ " output could then be disturbed when 'cmdheight' was greater than one. ++ " This test ensures that the bugfix for this issue remains in place. ++ function! Test_stopinsert_does_not_break_message_output() ++ set cmdheight=2 ++ redraw! ++ ++ stopinsert | echo 'test echo' ++ call assert_equal(116, screenchar(&lines - 1, 1)) ++ call assert_equal(32, screenchar(&lines, 1)) ++ redraw! ++ ++ stopinsert | echomsg 'test echomsg' ++ call assert_equal(116, screenchar(&lines - 1, 1)) ++ call assert_equal(32, screenchar(&lines, 1)) ++ redraw! ++ ++ set cmdheight& ++ endfunction +*** ../vim-8.1.0001/src/version.c 2018-05-17 23:34:37.427631392 +0200 +--- src/version.c 2018-05-19 14:24:40.646043654 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 2, + /**/ + +-- +Wi n0t trei a h0liday in Sweden thi yer? + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0003 b/data/vim/patches/8.1.0003 new file mode 100644 index 000000000..e8dd64546 --- /dev/null +++ b/data/vim/patches/8.1.0003 @@ -0,0 +1,116 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0003 +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.0003 +Problem: The :compiler command is not tested. +Solution: Add a test. (Dominique Pelle, closes #2930) +Files: src/Makefile, src/testdir/test_alot.vim, + src/testdir/test_compiler.vim + + +*** ../vim-8.1.0002/src/Makefile 2018-05-17 15:34:28.000000000 +0200 +--- src/Makefile 2018-05-19 14:57:04.670463659 +0200 +*************** +*** 2150,2155 **** +--- 2150,2156 ---- + test_cmdline \ + test_command_count \ + test_comparators \ ++ test_compiler \ + test_crypt \ + test_cscope \ + test_cursor_func \ +*** ../vim-8.1.0002/src/testdir/test_alot.vim 2017-10-29 15:08:48.000000000 +0100 +--- src/testdir/test_alot.vim 2018-05-19 14:57:04.670463659 +0200 +*************** +*** 5,10 **** +--- 5,11 ---- + source test_bufline.vim + source test_cd.vim + source test_changedtick.vim ++ source test_compiler.vim + source test_cursor_func.vim + source test_delete.vim + source test_ex_undo.vim +*** ../vim-8.1.0002/src/testdir/test_compiler.vim 2018-05-19 15:00:23.281190298 +0200 +--- src/testdir/test_compiler.vim 2018-05-19 14:57:04.670463659 +0200 +*************** +*** 0 **** +--- 1,50 ---- ++ " Test the :compiler command ++ ++ func Test_compiler() ++ if !executable('perl') ++ return ++ endif ++ ++ e Xfoo.pl ++ compiler perl ++ call assert_equal('perl', b:current_compiler) ++ call assert_fails('let g:current_compiler', 'E121:') ++ ++ call setline(1, ['#!/usr/bin/perl -w', 'use strict;', 'my $foo=1']) ++ w! ++ call feedkeys(":make\<CR>\<CR>", 'tx') ++ call assert_fails('clist', 'E42:') ++ ++ call setline(1, ['#!/usr/bin/perl -w', 'use strict;', '$foo=1']) ++ w! ++ call feedkeys(":make\<CR>\<CR>", 'tx') ++ let a=execute('clist') ++ call assert_equal("\n 1 Xfoo.pl:3: Global symbol \"\$foo\" " ++ \ . "requires explicit package name " ++ \ . "(did you forget to declare \"my $foo\"?)", a) ++ ++ call delete('Xfoo.pl') ++ bw! ++ endfunc ++ ++ func Test_compiler_without_arg() ++ let a=split(execute('compiler')) ++ call assert_equal($VIMRUNTIME . '/compiler/ant.vim', a[0]) ++ call assert_equal($VIMRUNTIME . '/compiler/bcc.vim', a[1]) ++ call assert_equal($VIMRUNTIME . '/compiler/xmlwf.vim', a[-1]) ++ endfunc ++ ++ func Test_compiler_completion() ++ call feedkeys(":compiler \<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_match('^"compiler ant bcc .* xmlwf$', @:) ++ ++ call feedkeys(":compiler p\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"compiler pbx perl php pylint pyunit', @:) ++ ++ call feedkeys(":compiler! p\<C-A>\<C-B>\"\<CR>", 'tx') ++ call assert_equal('"compiler! pbx perl php pylint pyunit', @:) ++ endfunc ++ ++ func Test_compiler_error() ++ call assert_fails('compiler doesnotexist', 'E666:') ++ endfunc +*** ../vim-8.1.0002/src/version.c 2018-05-19 14:43:26.779509715 +0200 +--- src/version.c 2018-05-19 14:58:56.017772272 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 3, + /**/ + +-- +The Characters and incidents portrayed and the names used are fictitious and +any similarity to the names, characters, or history of any person is entirely +accidental and unintentional. + Signed RICHARD M. NIXON + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0004 b/data/vim/patches/8.1.0004 new file mode 100644 index 000000000..7d970899c --- /dev/null +++ b/data/vim/patches/8.1.0004 @@ -0,0 +1,54 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0004 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0004 +Problem: Test for :compiler command sometimes fails. +Solution: Be less strict about the error message. (Dominique Pelle) +Files: src/testdir/test_compiler.vim + + +*** ../vim-8.1.0003/src/testdir/test_compiler.vim 2018-05-19 15:00:48.841017887 +0200 +--- src/testdir/test_compiler.vim 2018-05-19 15:47:59.785667252 +0200 +*************** +*** 19,27 **** + w! + call feedkeys(":make\<CR>\<CR>", 'tx') + let a=execute('clist') +! call assert_equal("\n 1 Xfoo.pl:3: Global symbol \"\$foo\" " +! \ . "requires explicit package name " +! \ . "(did you forget to declare \"my $foo\"?)", a) + + call delete('Xfoo.pl') + bw! +--- 19,26 ---- + w! + call feedkeys(":make\<CR>\<CR>", 'tx') + let a=execute('clist') +! call assert_match("\n 1 Xfoo.pl:3: Global symbol \"\$foo\" " +! \ . "requires explicit package name", a) + + call delete('Xfoo.pl') + bw! +*** ../vim-8.1.0003/src/version.c 2018-05-19 15:00:48.841017887 +0200 +--- src/version.c 2018-05-19 15:51:02.132530786 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 4, + /**/ + +-- +This message contains 78% recycled characters. + + /// 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 /// diff --git a/data/vim/patches/8.1.0005 b/data/vim/patches/8.1.0005 new file mode 100644 index 000000000..54e05f1b8 --- /dev/null +++ b/data/vim/patches/8.1.0005 @@ -0,0 +1,55 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0005 +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.0005 +Problem: Test for :compiler command fails on MS-Windows. +Solution: Ignore difference in path. +Files: src/testdir/test_compiler.vim + + +*** ../vim-8.1.0004/src/testdir/test_compiler.vim 2018-05-19 15:52:08.080147738 +0200 +--- src/testdir/test_compiler.vim 2018-05-19 16:43:40.978098419 +0200 +*************** +*** 28,36 **** + + func Test_compiler_without_arg() + let a=split(execute('compiler')) +! call assert_equal($VIMRUNTIME . '/compiler/ant.vim', a[0]) +! call assert_equal($VIMRUNTIME . '/compiler/bcc.vim', a[1]) +! call assert_equal($VIMRUNTIME . '/compiler/xmlwf.vim', a[-1]) + endfunc + + func Test_compiler_completion() +--- 28,36 ---- + + func Test_compiler_without_arg() + let a=split(execute('compiler')) +! call assert_match('^.*runtime/compiler/ant.vim$', a[0]) +! call assert_match('^.*runtime/compiler/bcc.vim$', a[1]) +! call assert_match('^.*runtime/compiler/xmlwf.vim$', a[-1]) + endfunc + + func Test_compiler_completion() +*** ../vim-8.1.0004/src/version.c 2018-05-19 15:52:08.084147716 +0200 +--- src/version.c 2018-05-19 16:44:18.851652336 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 5, + /**/ + +-- +To keep milk from turning sour: Keep it in the cow. + + /// 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 /// diff --git a/data/vim/patches/8.1.0006 b/data/vim/patches/8.1.0006 new file mode 100644 index 000000000..4e22ca8f4 --- /dev/null +++ b/data/vim/patches/8.1.0006 @@ -0,0 +1,56 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0006 +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.0006 +Problem: syn_id2cterm_bg() may be undefined. (Axel Bender) +Solution: Adjust #ifdef. +Files: src/syntax.c + + +*** ../vim-8.1.0005/src/syntax.c 2018-04-30 15:12:37.000000000 +0200 +--- src/syntax.c 2018-05-20 13:33:20.830017598 +0200 +*************** +*** 9854,9860 **** + } + #endif + +! #if defined(FEAT_TERMINAL) || defined(PROTO) + void + syn_id2cterm_bg(int hl_id, int *fgp, int *bgp) + { +--- 9854,9862 ---- + } + #endif + +! #if (defined(WIN3264) \ +! && !defined(FEAT_GUI_W32) \ +! && defined(FEAT_TERMGUICOLORS)) || defined(PROTO) + void + syn_id2cterm_bg(int hl_id, int *fgp, int *bgp) + { +*** ../vim-8.1.0005/src/version.c 2018-05-19 16:45:12.346716042 +0200 +--- src/version.c 2018-05-20 13:33:40.345133373 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 6, + /**/ + +-- +SUPERIMPOSE "England AD 787". After a few more seconds we hear hoofbeats in +the distance. They come slowly closer. Then out of the mist comes KING +ARTHUR followed by a SERVANT who is banging two half coconuts together. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0007 b/data/vim/patches/8.1.0007 new file mode 100644 index 000000000..aaff80b09 --- /dev/null +++ b/data/vim/patches/8.1.0007 @@ -0,0 +1,65 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0007 +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.0007 +Problem: No test for "o" and "O" in Visual block mode. +Solution: Add a test. (Dominique Pelle, closes #2932) +Files: src/testdir/test_visual.vim + + +*** ../vim-8.1.0006/src/testdir/test_visual.vim 2018-03-06 14:18:55.000000000 +0100 +--- src/testdir/test_visual.vim 2018-05-20 14:05:02.489093403 +0200 +*************** +*** 155,160 **** +--- 155,179 ---- + enew! + endfunc + ++ " Test swapping corners in blockwise visual mode with o and O ++ func Test_blockwise_visual_o_O() ++ enew! ++ ++ exe "norm! 10i.\<Esc>Y4P3lj\<C-V>4l2jr " ++ exe "norm! gvO\<Esc>ra" ++ exe "norm! gvO\<Esc>rb" ++ exe "norm! gvo\<C-c>rc" ++ exe "norm! gvO\<C-c>rd" ++ ++ call assert_equal(['..........', ++ \ '...c d..', ++ \ '... ..', ++ \ '...a b..', ++ \ '..........'], getline(1, '$')) ++ ++ enew! ++ endfun ++ + " Test Virtual replace mode. + func Test_virtual_replace() + if exists('&t_kD') +*** ../vim-8.1.0006/src/version.c 2018-05-20 13:35:40.193163458 +0200 +--- src/version.c 2018-05-20 14:05:52.113562894 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 7, + /**/ + +-- +SOLDIER: Where did you get the coconuts? +ARTHUR: Through ... We found them. +SOLDIER: Found them? In Mercea. The coconut's tropical! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0008 b/data/vim/patches/8.1.0008 new file mode 100644 index 000000000..98c193276 --- /dev/null +++ b/data/vim/patches/8.1.0008 @@ -0,0 +1,71 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0008 +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.0008 +Problem: No test for strwidth(). +Solution: Add a test. (Dominique Pelle, closes #2931) +Files: src/testdir/test_functions.vim + + +*** ../vim-8.1.0007/src/testdir/test_functions.vim 2018-03-22 22:48:20.000000000 +0100 +--- src/testdir/test_functions.vim 2018-05-20 14:09:31.346367348 +0200 +*************** +*** 96,101 **** +--- 96,125 ---- + call assert_fails('call min(v:none)', 'E712:') + endfunc + ++ func Test_strwidth() ++ for aw in ['single', 'double'] ++ exe 'set ambiwidth=' . aw ++ call assert_equal(0, strwidth('')) ++ call assert_equal(1, strwidth("\t")) ++ call assert_equal(3, strwidth('Vim')) ++ call assert_equal(4, strwidth(1234)) ++ call assert_equal(5, strwidth(-1234)) ++ ++ if has('multi_byte') ++ call assert_equal(2, strwidth('😉')) ++ call assert_equal(17, strwidth('EÄ¥oÅanÄo ĉiuĵaÅde')) ++ call assert_equal((aw == 'single') ? 6 : 7, strwidth('Straße')) ++ endif ++ ++ call assert_fails('call strwidth({->0})', 'E729:') ++ call assert_fails('call strwidth([])', 'E730:') ++ call assert_fails('call strwidth({})', 'E731:') ++ call assert_fails('call strwidth(1.2)', 'E806:') ++ endfor ++ ++ set ambiwidth& ++ endfunc ++ + func Test_str2nr() + call assert_equal(0, str2nr('')) + call assert_equal(1, str2nr('1')) +*** ../vim-8.1.0007/src/version.c 2018-05-20 14:06:34.506186527 +0200 +--- src/version.c 2018-05-20 14:10:31.208184912 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 8, + /**/ + +-- +ARTHUR: The swallow may fly south with the sun, or the house martin or the + plover seek warmer hot lands in winter, yet these are not strangers to + our land. +SOLDIER: Are you suggesting coconuts migrate? + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0009 b/data/vim/patches/8.1.0009 new file mode 100644 index 000000000..aef38ee84 --- /dev/null +++ b/data/vim/patches/8.1.0009 @@ -0,0 +1,102 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0009 +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.0009 +Problem: Tabpages insufficiently tested. +Solution: Add more test coverage. (Dominique Pelle, closes #2934) +Files: src/testdir/test_tabpage.vim + + +*** ../vim-8.1.0008/src/testdir/test_tabpage.vim 2018-02-12 21:49:22.000000000 +0100 +--- src/testdir/test_tabpage.vim 2018-05-20 14:55:02.425998478 +0200 +*************** +*** 1,5 **** +--- 1,6 ---- + " Tests for tabpage + ++ + function Test_tabpage() + bw! + " Simple test for opening and closing a tab page +*************** +*** 317,322 **** +--- 318,351 ---- + endfor + endfunc + ++ func Test_tabpage_ctrl_pgup_pgdown() ++ enew! ++ tabnew tab1 ++ tabnew tab2 ++ ++ call assert_equal(3, tabpagenr()) ++ exe "norm! \<C-PageUp>" ++ call assert_equal(2, tabpagenr()) ++ exe "norm! \<C-PageDown>" ++ call assert_equal(3, tabpagenr()) ++ ++ " Check wrapping at last or first page. ++ exe "norm! \<C-PageDown>" ++ call assert_equal(1, tabpagenr()) ++ exe "norm! \<C-PageUp>" ++ call assert_equal(3, tabpagenr()) ++ ++ " With a count, <C-PageUp> and <C-PageDown> are not symmetrical somehow: ++ " - {count}<C-PageUp> goes {count} pages downward (relative count) ++ " - {count}<C-PageDown> goes to page number {count} (absolute count) ++ exe "norm! 2\<C-PageUp>" ++ call assert_equal(1, tabpagenr()) ++ exe "norm! 2\<C-PageDown>" ++ call assert_equal(2, tabpagenr()) ++ ++ 1tabonly! ++ endfunc ++ + " Test for [count] of tabclose + function Test_tabpage_with_tabclose() + +*************** +*** 491,494 **** +--- 520,537 ---- + buf Xtest + endfunc + ++ func Test_tabs() ++ enew! ++ tabnew tab1 ++ norm ixxx ++ let a=split(execute(':tabs'), "\n") ++ call assert_equal(['Tab page 1', ++ \ ' [No Name]', ++ \ 'Tab page 2', ++ \ '> + tab1'], a) ++ ++ 1tabonly! ++ bw! ++ endfunc ++ + " vim: shiftwidth=2 sts=2 expandtab +*** ../vim-8.1.0008/src/version.c 2018-05-20 14:11:07.125342749 +0200 +--- src/version.c 2018-05-20 14:56:27.560347600 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 9, + /**/ + +-- +Clothes make the man. Naked people have little or no influence on society. + -- Mark Twain (Samuel Clemens) (1835-1910) + + /// 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 /// diff --git a/data/vim/patches/8.1.0010 b/data/vim/patches/8.1.0010 new file mode 100644 index 000000000..9df182cc9 --- /dev/null +++ b/data/vim/patches/8.1.0010 @@ -0,0 +1,381 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0010 +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.0010 +Problem: efm_to_regpat() is too long. +Solution: Split off three functions. (Yegappan Lakshmanan, closes #2924) +Files: src/quickfix.c + + +*** ../vim-8.1.0009/src/quickfix.c 2018-05-15 21:53:11.000000000 +0200 +--- src/quickfix.c 2018-05-20 15:40:22.857179812 +0200 +*************** +*** 228,246 **** + }; + + /* + * Converts a 'errorformat' string to regular expression pattern + */ + static int + efm_to_regpat( + char_u *efm, +! int len, + efm_T *fmt_ptr, + char_u *regpat, + char_u *errmsg) + { + char_u *ptr; + char_u *efmp; +- char_u *srcptr; + int round; + int idx = 0; + +--- 228,399 ---- + }; + + /* ++ * Convert an errorformat pattern to a regular expression pattern. ++ * See fmt_pat definition above for the list of supported patterns. ++ */ ++ static char_u * ++ fmtpat_to_regpat( ++ char_u *efmp, ++ efm_T *fmt_ptr, ++ int idx, ++ int round, ++ char_u *ptr, ++ char_u *errmsg) ++ { ++ char_u *srcptr; ++ ++ if (fmt_ptr->addr[idx]) ++ { ++ /* Each errorformat pattern can occur only once */ ++ sprintf((char *)errmsg, ++ _("E372: Too many %%%c in format string"), *efmp); ++ EMSG(errmsg); ++ return NULL; ++ } ++ if ((idx && idx < 6 ++ && vim_strchr((char_u *)"DXOPQ", fmt_ptr->prefix) != NULL) ++ || (idx == 6 ++ && vim_strchr((char_u *)"OPQ", fmt_ptr->prefix) == NULL)) ++ { ++ sprintf((char *)errmsg, ++ _("E373: Unexpected %%%c in format string"), *efmp); ++ EMSG(errmsg); ++ return NULL; ++ } ++ fmt_ptr->addr[idx] = (char_u)++round; ++ *ptr++ = '\\'; ++ *ptr++ = '('; ++ #ifdef BACKSLASH_IN_FILENAME ++ if (*efmp == 'f') ++ { ++ /* Also match "c:" in the file name, even when ++ * checking for a colon next: "%f:". ++ * "\%(\a:\)\=" */ ++ STRCPY(ptr, "\\%(\\a:\\)\\="); ++ ptr += 10; ++ } ++ #endif ++ if (*efmp == 'f' && efmp[1] != NUL) ++ { ++ if (efmp[1] != '\\' && efmp[1] != '%') ++ { ++ /* A file name may contain spaces, but this isn't ++ * in "\f". For "%f:%l:%m" there may be a ":" in ++ * the file name. Use ".\{-1,}x" instead (x is ++ * the next character), the requirement that :999: ++ * follows should work. */ ++ STRCPY(ptr, ".\\{-1,}"); ++ ptr += 7; ++ } ++ else ++ { ++ /* File name followed by '\\' or '%': include as ++ * many file name chars as possible. */ ++ STRCPY(ptr, "\\f\\+"); ++ ptr += 4; ++ } ++ } ++ else ++ { ++ srcptr = (char_u *)fmt_pat[idx].pattern; ++ while ((*ptr = *srcptr++) != NUL) ++ ++ptr; ++ } ++ *ptr++ = '\\'; ++ *ptr++ = ')'; ++ ++ return ptr; ++ } ++ ++ /* ++ * Convert a scanf like format in 'errorformat' to a regular expression. ++ */ ++ static char_u * ++ scanf_fmt_to_regpat( ++ char_u *efm, ++ int len, ++ char_u **pefmp, ++ char_u *ptr, ++ char_u *errmsg) ++ { ++ char_u *efmp = *pefmp; ++ ++ if (*++efmp == '[' || *efmp == '\\') ++ { ++ if ((*ptr++ = *efmp) == '[') /* %*[^a-z0-9] etc. */ ++ { ++ if (efmp[1] == '^') ++ *ptr++ = *++efmp; ++ if (efmp < efm + len) ++ { ++ *ptr++ = *++efmp; /* could be ']' */ ++ while (efmp < efm + len ++ && (*ptr++ = *++efmp) != ']') ++ /* skip */; ++ if (efmp == efm + len) ++ { ++ EMSG(_("E374: Missing ] in format string")); ++ return NULL; ++ } ++ } ++ } ++ else if (efmp < efm + len) /* %*\D, %*\s etc. */ ++ *ptr++ = *++efmp; ++ *ptr++ = '\\'; ++ *ptr++ = '+'; ++ } ++ else ++ { ++ /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */ ++ sprintf((char *)errmsg, ++ _("E375: Unsupported %%%c in format string"), *efmp); ++ EMSG(errmsg); ++ return NULL; ++ } ++ ++ *pefmp = efmp; ++ ++ return ptr; ++ } ++ ++ /* ++ * Analyze/parse an errorformat prefix. ++ */ ++ static int ++ efm_analyze_prefix(char_u **pefmp, efm_T *fmt_ptr, char_u *errmsg) ++ { ++ char_u *efmp = *pefmp; ++ ++ if (vim_strchr((char_u *)"+-", *efmp) != NULL) ++ fmt_ptr->flags = *efmp++; ++ if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL) ++ fmt_ptr->prefix = *efmp; ++ else ++ { ++ sprintf((char *)errmsg, ++ _("E376: Invalid %%%c in format string prefix"), *efmp); ++ EMSG(errmsg); ++ return FAIL; ++ } ++ ++ *pefmp = efmp; ++ ++ return OK; ++ } ++ ++ /* + * Converts a 'errorformat' string to regular expression pattern + */ + static int + efm_to_regpat( + char_u *efm, +! int len, + efm_T *fmt_ptr, + char_u *regpat, + char_u *errmsg) + { + char_u *ptr; + char_u *efmp; + int round; + int idx = 0; + +*************** +*** 260,361 **** + break; + if (idx < FMT_PATTERNS) + { +! if (fmt_ptr->addr[idx]) +! { +! sprintf((char *)errmsg, +! _("E372: Too many %%%c in format string"), *efmp); +! EMSG(errmsg); +! return -1; +! } +! if ((idx +! && idx < 6 +! && vim_strchr((char_u *)"DXOPQ", +! fmt_ptr->prefix) != NULL) +! || (idx == 6 +! && vim_strchr((char_u *)"OPQ", +! fmt_ptr->prefix) == NULL)) +! { +! sprintf((char *)errmsg, +! _("E373: Unexpected %%%c in format string"), *efmp); +! EMSG(errmsg); + return -1; +! } +! fmt_ptr->addr[idx] = (char_u)++round; +! *ptr++ = '\\'; +! *ptr++ = '('; +! #ifdef BACKSLASH_IN_FILENAME +! if (*efmp == 'f') +! { +! /* Also match "c:" in the file name, even when +! * checking for a colon next: "%f:". +! * "\%(\a:\)\=" */ +! STRCPY(ptr, "\\%(\\a:\\)\\="); +! ptr += 10; +! } +! #endif +! if (*efmp == 'f' && efmp[1] != NUL) +! { +! if (efmp[1] != '\\' && efmp[1] != '%') +! { +! /* A file name may contain spaces, but this isn't +! * in "\f". For "%f:%l:%m" there may be a ":" in +! * the file name. Use ".\{-1,}x" instead (x is +! * the next character), the requirement that :999: +! * follows should work. */ +! STRCPY(ptr, ".\\{-1,}"); +! ptr += 7; +! } +! else +! { +! /* File name followed by '\\' or '%': include as +! * many file name chars as possible. */ +! STRCPY(ptr, "\\f\\+"); +! ptr += 4; +! } +! } +! else +! { +! srcptr = (char_u *)fmt_pat[idx].pattern; +! while ((*ptr = *srcptr++) != NUL) +! ++ptr; +! } +! *ptr++ = '\\'; +! *ptr++ = ')'; + } + else if (*efmp == '*') + { +! if (*++efmp == '[' || *efmp == '\\') +! { +! if ((*ptr++ = *efmp) == '[') /* %*[^a-z0-9] etc. */ +! { +! if (efmp[1] == '^') +! *ptr++ = *++efmp; +! if (efmp < efm + len) +! { +! *ptr++ = *++efmp; /* could be ']' */ +! while (efmp < efm + len +! && (*ptr++ = *++efmp) != ']') +! /* skip */; +! if (efmp == efm + len) +! { +! EMSG(_("E374: Missing ] in format string")); +! return -1; +! } +! } +! } +! else if (efmp < efm + len) /* %*\D, %*\s etc. */ +! *ptr++ = *++efmp; +! *ptr++ = '\\'; +! *ptr++ = '+'; +! } +! else +! { +! /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */ +! sprintf((char *)errmsg, +! _("E375: Unsupported %%%c in format string"), *efmp); +! EMSG(errmsg); + return -1; +- } + } + else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL) + *ptr++ = *efmp; /* regexp magic characters */ +--- 413,429 ---- + break; + if (idx < FMT_PATTERNS) + { +! ptr = fmtpat_to_regpat(efmp, fmt_ptr, idx, round, ptr, +! errmsg); +! if (ptr == NULL) + return -1; +! round++; + } + else if (*efmp == '*') + { +! ptr = scanf_fmt_to_regpat(efm, len, &efmp, ptr, errmsg); +! if (ptr == NULL) + return -1; + } + else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL) + *ptr++ = *efmp; /* regexp magic characters */ +*************** +*** 365,381 **** + fmt_ptr->conthere = TRUE; + else if (efmp == efm + 1) /* analyse prefix */ + { +! if (vim_strchr((char_u *)"+-", *efmp) != NULL) +! fmt_ptr->flags = *efmp++; +! if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL) +! fmt_ptr->prefix = *efmp; +! else +! { +! sprintf((char *)errmsg, +! _("E376: Invalid %%%c in format string prefix"), *efmp); +! EMSG(errmsg); + return -1; +- } + } + else + { +--- 433,440 ---- + fmt_ptr->conthere = TRUE; + else if (efmp == efm + 1) /* analyse prefix */ + { +! if (efm_analyze_prefix(&efmp, fmt_ptr, errmsg) == FAIL) + return -1; + } + else + { +*** ../vim-8.1.0009/src/version.c 2018-05-20 14:57:19.121429579 +0200 +--- src/version.c 2018-05-20 15:37:57.138956740 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 10, + /**/ + +-- +SECOND SOLDIER: It could be carried by an African swallow! +FIRST SOLDIER: Oh yes! An African swallow maybe ... but not a European + swallow. that's my point. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0011 b/data/vim/patches/8.1.0011 new file mode 100644 index 000000000..e767ad96d --- /dev/null +++ b/data/vim/patches/8.1.0011 @@ -0,0 +1,85 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0011 +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.0011 +Problem: maparg() and mapcheck() confuse empty and non-existing. +Solution: Return <Nop> for an existing non-empty mapping. (closes #2940) +Files: src/evalfunc.c, src/testdir/test_maparg.vim + + +*** ../vim-8.1.0010/src/evalfunc.c 2018-05-13 15:23:25.000000000 +0200 +--- src/evalfunc.c 2018-05-21 13:16:25.980369218 +0200 +*************** +*** 7383,7389 **** + { + /* Return a string. */ + if (rhs != NULL) +! rettv->vval.v_string = str2special_save(rhs, FALSE); + + } + else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL) +--- 7383,7394 ---- + { + /* Return a string. */ + if (rhs != NULL) +! { +! if (*rhs == NUL) +! rettv->vval.v_string = vim_strsave((char_u *)"<Nop>"); +! else +! rettv->vval.v_string = str2special_save(rhs, FALSE); +! } + + } + else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL) +*** ../vim-8.1.0010/src/testdir/test_maparg.vim 2017-07-11 21:35:19.000000000 +0200 +--- src/testdir/test_maparg.vim 2018-05-21 13:23:58.341721377 +0200 +*************** +*** 29,37 **** + \ maparg('foo', '', 0, 1)) + + map abc x<char-114>x +! call assert_equal(maparg('abc'), "xrx") + map abc y<S-char-114>y +! call assert_equal(maparg('abc'), "yRy") + endfunction + + function Test_range_map() +--- 29,41 ---- + \ maparg('foo', '', 0, 1)) + + map abc x<char-114>x +! call assert_equal("xrx", maparg('abc')) + map abc y<S-char-114>y +! call assert_equal("yRy", maparg('abc')) +! +! map abc <Nop> +! call assert_equal("<Nop>", maparg('abc')) +! unmap abc + endfunction + + function Test_range_map() +*** ../vim-8.1.0010/src/version.c 2018-05-20 15:41:12.884693893 +0200 +--- src/version.c 2018-05-21 13:22:09.938362521 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 11, + /**/ + +-- +Why I like vim: +> I like VIM because, when I ask a question in this newsgroup, I get a +> one-line answer. With xemacs, I get a 1Kb lisp script with bugs in 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 /// diff --git a/data/vim/patches/8.1.0012 b/data/vim/patches/8.1.0012 new file mode 100644 index 000000000..a7f9d8d5b --- /dev/null +++ b/data/vim/patches/8.1.0012 @@ -0,0 +1,54 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0012 +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.0012 +Problem: Misplaced #endif. +Solution: Move the #endif to after the expression. (David Binderman) +Files: src/fileio.c + + +*** ../vim-8.1.0011/src/fileio.c 2018-05-01 14:13:53.000000000 +0200 +--- src/fileio.c 2018-05-21 13:35:31.805571321 +0200 +*************** +*** 714,721 **** + && st.st_gid != swap_st.st_gid + # ifdef HAVE_FCHOWN + && fchown(curbuf->b_ml.ml_mfp->mf_fd, -1, st.st_gid) +- # endif + == -1 + ) + swap_mode &= 0600; + } +--- 714,721 ---- + && st.st_gid != swap_st.st_gid + # ifdef HAVE_FCHOWN + && fchown(curbuf->b_ml.ml_mfp->mf_fd, -1, st.st_gid) + == -1 ++ # endif + ) + swap_mode &= 0600; + } +*** ../vim-8.1.0011/src/version.c 2018-05-21 13:28:40.324041565 +0200 +--- src/version.c 2018-05-21 13:36:39.065166257 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 12, + /**/ + +-- +"Lisp has all the visual appeal of oatmeal with nail clippings thrown in." + -- Larry Wall + + /// 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 /// diff --git a/data/vim/patches/8.1.0013 b/data/vim/patches/8.1.0013 new file mode 100644 index 000000000..fedac815d --- /dev/null +++ b/data/vim/patches/8.1.0013 @@ -0,0 +1,205 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0013 +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.0013 +Problem: Using freed memory when changing terminal cursor color. +Solution: Make a copy of the color. (Dominique Pelle, closes #2938, + closes #2941) +Files: src/terminal.c + + +*** ../vim-8.1.0012/src/terminal.c 2018-05-17 13:17:10.000000000 +0200 +--- src/terminal.c 2018-05-21 14:46:25.723564355 +0200 +*************** +*** 171,178 **** + + /* Store the last set and the desired cursor properties, so that we only update + * them when needed. Doing it unnecessary may result in flicker. */ +! static char_u *last_set_cursor_color = (char_u *)""; +! static char_u *desired_cursor_color = (char_u *)""; + static int last_set_cursor_shape = -1; + static int desired_cursor_shape = -1; + static int last_set_cursor_blink = -1; +--- 171,178 ---- + + /* Store the last set and the desired cursor properties, so that we only update + * them when needed. Doing it unnecessary may result in flicker. */ +! static char_u *last_set_cursor_color = NULL; +! static char_u *desired_cursor_color = NULL; + static int last_set_cursor_shape = -1; + static int desired_cursor_shape = -1; + static int last_set_cursor_blink = -1; +*************** +*** 183,188 **** +--- 183,210 ---- + * 1. Generic code for all systems. + */ + ++ static void ++ cursor_color_copy(char_u** to_color, char_u* from_color) ++ { ++ vim_free(*to_color); ++ *to_color = (from_color == NULL) ? NULL : vim_strsave(from_color); ++ } ++ ++ static int ++ cursor_color_equal(char_u *lhs_color, char_u *rhs_color) ++ { ++ if (lhs_color != NULL && rhs_color != NULL) ++ return STRCMP(lhs_color, rhs_color) == 0; ++ return lhs_color == NULL && rhs_color == NULL; ++ } ++ ++ static char_u * ++ cursor_color_get(char_u *color) ++ { ++ return (color == NULL) ? (char_u *)"" : color; ++ } ++ ++ + /* + * Parse 'termwinsize' and set "rows" and "cols" for the terminal size in the + * current window. +*************** +*** 823,830 **** + if (term->tl_out_fd != NULL) + fclose(term->tl_out_fd); + #endif +- if (desired_cursor_color == term->tl_cursor_color) +- desired_cursor_color = (char_u *)""; + vim_free(term->tl_cursor_color); + vim_free(term); + buf->b_term = NULL; +--- 845,850 ---- +*************** +*** 1954,1967 **** + static void + may_output_cursor_props(void) + { +! if (STRCMP(last_set_cursor_color, desired_cursor_color) != 0 + || last_set_cursor_shape != desired_cursor_shape + || last_set_cursor_blink != desired_cursor_blink) + { +! last_set_cursor_color = desired_cursor_color; + last_set_cursor_shape = desired_cursor_shape; + last_set_cursor_blink = desired_cursor_blink; +! term_cursor_color(desired_cursor_color); + if (desired_cursor_shape == -1 || desired_cursor_blink == -1) + /* this will restore the initial cursor style, if possible */ + ui_cursor_shape_forced(TRUE); +--- 1974,1987 ---- + static void + may_output_cursor_props(void) + { +! if (!cursor_color_equal(last_set_cursor_color, desired_cursor_color) + || last_set_cursor_shape != desired_cursor_shape + || last_set_cursor_blink != desired_cursor_blink) + { +! cursor_color_copy(&last_set_cursor_color, desired_cursor_color); + last_set_cursor_shape = desired_cursor_shape; + last_set_cursor_blink = desired_cursor_blink; +! term_cursor_color(cursor_color_get(desired_cursor_color)); + if (desired_cursor_shape == -1 || desired_cursor_blink == -1) + /* this will restore the initial cursor style, if possible */ + ui_cursor_shape_forced(TRUE); +*************** +*** 1984,1993 **** + #endif + if (in_terminal_loop == term) + { +! if (term->tl_cursor_color != NULL) +! desired_cursor_color = term->tl_cursor_color; +! else +! desired_cursor_color = (char_u *)""; + desired_cursor_shape = term->tl_cursor_shape; + desired_cursor_blink = term->tl_cursor_blink; + may_output_cursor_props(); +--- 2004,2010 ---- + #endif + if (in_terminal_loop == term) + { +! cursor_color_copy(&desired_cursor_color, term->tl_cursor_color); + desired_cursor_shape = term->tl_cursor_shape; + desired_cursor_blink = term->tl_cursor_blink; + may_output_cursor_props(); +*************** +*** 2004,2010 **** + if (gui.in_use) + return; + #endif +! desired_cursor_color = (char_u *)""; + desired_cursor_shape = -1; + desired_cursor_blink = -1; + may_output_cursor_props(); +--- 2021,2027 ---- + if (gui.in_use) + return; + #endif +! cursor_color_copy(&desired_cursor_color, NULL); + desired_cursor_shape = -1; + desired_cursor_blink = -1; + may_output_cursor_props(); +*************** +*** 2624,2636 **** + break; + + case VTERM_PROP_CURSORCOLOR: +! if (desired_cursor_color == term->tl_cursor_color) +! desired_cursor_color = (char_u *)""; +! vim_free(term->tl_cursor_color); +! if (*value->string == NUL) +! term->tl_cursor_color = NULL; +! else +! term->tl_cursor_color = vim_strsave((char_u *)value->string); + may_set_cursor_props(term); + break; + +--- 2641,2647 ---- + break; + + case VTERM_PROP_CURSORCOLOR: +! cursor_color_copy(&term->tl_cursor_color, (char_u*)value->string); + may_set_cursor_props(term); + break; + +*************** +*** 4711,4718 **** + dict_add_nr_str(d, "blink", blink_state_is_inverted() + ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL); + dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL); +! dict_add_nr_str(d, "color", 0L, term->tl_cursor_color == NULL +! ? (char_u *)"" : term->tl_cursor_color); + list_append_dict(l, d); + } + } +--- 4722,4728 ---- + dict_add_nr_str(d, "blink", blink_state_is_inverted() + ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL); + dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL); +! dict_add_nr_str(d, "color", 0L, cursor_color_get(term->tl_cursor_color)); + list_append_dict(l, d); + } + } +*** ../vim-8.1.0012/src/version.c 2018-05-21 13:39:36.051906757 +0200 +--- src/version.c 2018-05-21 14:47:20.927181563 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 13, + /**/ + +-- +Friends? I have lots of friends! In fact, I have all episodes ever made. + + /// 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 /// diff --git a/data/vim/patches/8.1.0014 b/data/vim/patches/8.1.0014 new file mode 100644 index 000000000..3fd601475 --- /dev/null +++ b/data/vim/patches/8.1.0014 @@ -0,0 +1,486 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0014 +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.0014 +Problem: qf_init_ext() is too long. +Solution: Split it into multiple functions. (Yegappan Lakshmanan, + closes #2939) +Files: src/quickfix.c + + +*** ../vim-8.1.0013/src/quickfix.c 2018-05-20 15:41:12.884693893 +0200 +--- src/quickfix.c 2018-05-21 16:53:13.288566927 +0200 +*************** +*** 134,143 **** + + static efm_T *fmt_start = NULL; /* cached across qf_parse_line() calls */ + +- static int qf_init_ext(qf_info_T *qi, int qf_idx, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title, char_u *enc); + static void qf_new_list(qf_info_T *qi, char_u *qf_title); + static int qf_add_entry(qf_info_T *qi, int qf_idx, char_u *dir, char_u *fname, char_u *module, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid); +- static qf_info_T *ll_new_list(void); + static void qf_free(qf_info_T *qi, int idx); + static char_u *qf_types(int, int); + static int qf_get_fnum(qf_info_T *qi, int qf_idx, char_u *, char_u *); +--- 134,141 ---- +*************** +*** 178,209 **** + N_("E926: Current location list was changed"); + + /* +- * Read the errorfile "efile" into memory, line by line, building the error +- * list. Set the error list's title to qf_title. +- * Return -1 for error, number of errors for success. +- */ +- int +- qf_init(win_T *wp, +- char_u *efile, +- char_u *errorformat, +- int newlist, /* TRUE: start a new error list */ +- char_u *qf_title, +- char_u *enc) +- { +- qf_info_T *qi = &ql_info; +- +- if (wp != NULL) +- { +- qi = ll_get_or_alloc_list(wp); +- if (qi == NULL) +- return FAIL; +- } +- +- return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat, +- newlist, (linenr_T)0, (linenr_T)0, qf_title, enc); +- } +- +- /* + * Maximum number of bytes allowed per line while reading a errorfile. + */ + #define LINE_MAXLEN 4096 +--- 176,181 ---- +*************** +*** 1336,1341 **** +--- 1308,1401 ---- + } + + /* ++ * Allocate the fields used for parsing lines and populating a quickfix list. ++ */ ++ static int ++ qf_alloc_fields(qffields_T *pfields) ++ { ++ pfields->namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf); ++ pfields->module = alloc_id(CMDBUFFSIZE + 1, aid_qf_module); ++ pfields->errmsglen = CMDBUFFSIZE + 1; ++ pfields->errmsg = alloc_id(pfields->errmsglen, aid_qf_errmsg); ++ pfields->pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern); ++ if (pfields->namebuf == NULL || pfields->errmsg == NULL ++ || pfields->pattern == NULL || pfields->module == NULL) ++ return FAIL; ++ ++ return OK; ++ } ++ ++ /* ++ * Free the fields used for parsing lines and populating a quickfix list. ++ */ ++ static void ++ qf_free_fields(qffields_T *pfields) ++ { ++ vim_free(pfields->namebuf); ++ vim_free(pfields->module); ++ vim_free(pfields->errmsg); ++ vim_free(pfields->pattern); ++ } ++ ++ /* ++ * Setup the state information used for parsing lines and populating a ++ * quickfix list. ++ */ ++ static int ++ qf_setup_state( ++ qfstate_T *pstate, ++ char_u *enc, ++ char_u *efile, ++ typval_T *tv, ++ buf_T *buf, ++ linenr_T lnumfirst, ++ linenr_T lnumlast) ++ { ++ #ifdef FEAT_MBYTE ++ pstate->vc.vc_type = CONV_NONE; ++ if (enc != NULL && *enc != NUL) ++ convert_setup(&pstate->vc, enc, p_enc); ++ #endif ++ ++ if (efile != NULL && (pstate->fd = mch_fopen((char *)efile, "r")) == NULL) ++ { ++ EMSG2(_(e_openerrf), efile); ++ return FAIL; ++ } ++ ++ if (tv != NULL) ++ { ++ if (tv->v_type == VAR_STRING) ++ pstate->p_str = tv->vval.v_string; ++ else if (tv->v_type == VAR_LIST) ++ pstate->p_li = tv->vval.v_list->lv_first; ++ pstate->tv = tv; ++ } ++ pstate->buf = buf; ++ pstate->buflnum = lnumfirst; ++ pstate->lnumlast = lnumlast; ++ ++ return OK; ++ } ++ ++ /* ++ * Cleanup the state information used for parsing lines and populating a ++ * quickfix list. ++ */ ++ static void ++ qf_cleanup_state(qfstate_T *pstate) ++ { ++ if (pstate->fd != NULL) ++ fclose(pstate->fd); ++ ++ vim_free(pstate->growbuf); ++ #ifdef FEAT_MBYTE ++ if (pstate->vc.vc_type != CONV_NONE) ++ convert_setup(&pstate->vc, NULL, NULL); ++ #endif ++ } ++ ++ /* + * Read the errorfile "efile" into memory, line by line, building the error + * list. + * Alternative: when "efile" is NULL read errors from buffer "buf". +*************** +*** 1375,1400 **** + + vim_memset(&state, 0, sizeof(state)); + vim_memset(&fields, 0, sizeof(fields)); +! #ifdef FEAT_MBYTE +! state.vc.vc_type = CONV_NONE; +! if (enc != NULL && *enc != NUL) +! convert_setup(&state.vc, enc, p_enc); +! #endif +! fields.namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf); +! fields.module = alloc_id(CMDBUFFSIZE + 1, aid_qf_module); +! fields.errmsglen = CMDBUFFSIZE + 1; +! fields.errmsg = alloc_id(fields.errmsglen, aid_qf_errmsg); +! fields.pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern); +! if (fields.namebuf == NULL || fields.errmsg == NULL +! || fields.pattern == NULL || fields.module == NULL) + goto qf_init_end; + +- if (efile != NULL && (state.fd = mch_fopen((char *)efile, "r")) == NULL) +- { +- EMSG2(_(e_openerrf), efile); +- goto qf_init_end; +- } +- + if (newlist || qf_idx == qi->qf_listcount) + { + /* make place for a new list */ +--- 1435,1445 ---- + + vim_memset(&state, 0, sizeof(state)); + vim_memset(&fields, 0, sizeof(fields)); +! if ((qf_alloc_fields(&fields) == FAIL) || +! (qf_setup_state(&state, enc, efile, tv, buf, +! lnumfirst, lnumlast) == FAIL)) + goto qf_init_end; + + if (newlist || qf_idx == qi->qf_listcount) + { + /* make place for a new list */ +*************** +*** 1442,1459 **** + */ + got_int = FALSE; + +- if (tv != NULL) +- { +- if (tv->v_type == VAR_STRING) +- state.p_str = tv->vval.v_string; +- else if (tv->v_type == VAR_LIST) +- state.p_li = tv->vval.v_list->lv_first; +- state.tv = tv; +- } +- state.buf = buf; +- state.buflnum = lnumfirst; +- state.lnumlast = lnumlast; +- + /* + * Read the lines in the error file one by one. + * Try to recognize one of the error formats in each line. +--- 1487,1492 ---- +*************** +*** 1526,1550 **** + --qi->qf_curlist; + } + qf_init_end: +- if (state.fd != NULL) +- fclose(state.fd); +- vim_free(fields.namebuf); +- vim_free(fields.module); +- vim_free(fields.errmsg); +- vim_free(fields.pattern); +- vim_free(state.growbuf); +- + if (qf_idx == qi->qf_curlist) + qf_update_buffer(qi, old_last); +! #ifdef FEAT_MBYTE +! if (state.vc.vc_type != CONV_NONE) +! convert_setup(&state.vc, NULL, NULL); +! #endif + + return retval; + } + + /* + * Set the title of the specified quickfix list. Frees the previous title. + * Prepends ':' to the title. + */ +--- 1559,1599 ---- + --qi->qf_curlist; + } + qf_init_end: + if (qf_idx == qi->qf_curlist) + qf_update_buffer(qi, old_last); +! qf_cleanup_state(&state); +! qf_free_fields(&fields); + + return retval; + } + + /* ++ * Read the errorfile "efile" into memory, line by line, building the error ++ * list. Set the error list's title to qf_title. ++ * Return -1 for error, number of errors for success. ++ */ ++ int ++ qf_init(win_T *wp, ++ char_u *efile, ++ char_u *errorformat, ++ int newlist, /* TRUE: start a new error list */ ++ char_u *qf_title, ++ char_u *enc) ++ { ++ qf_info_T *qi = &ql_info; ++ ++ if (wp != NULL) ++ { ++ qi = ll_get_or_alloc_list(wp); ++ if (qi == NULL) ++ return FAIL; ++ } ++ ++ return qf_init_ext(qi, qi->qf_curlist, efile, curbuf, NULL, errorformat, ++ newlist, (linenr_T)0, (linenr_T)0, qf_title, enc); ++ } ++ ++ /* + * Set the title of the specified quickfix list. Frees the previous title. + * Prepends ':' to the title. + */ +*************** +*** 3835,3840 **** +--- 3884,3963 ---- + } + + /* ++ * Add an error line to the quickfix buffer. ++ */ ++ static int ++ qf_buf_add_line(buf_T *buf, linenr_T lnum, qfline_T *qfp, char_u *dirname) ++ { ++ int len; ++ buf_T *errbuf; ++ ++ if (qfp->qf_module != NULL) ++ { ++ STRCPY(IObuff, qfp->qf_module); ++ len = (int)STRLEN(IObuff); ++ } ++ else if (qfp->qf_fnum != 0 ++ && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL ++ && errbuf->b_fname != NULL) ++ { ++ if (qfp->qf_type == 1) /* :helpgrep */ ++ STRCPY(IObuff, gettail(errbuf->b_fname)); ++ else ++ { ++ /* shorten the file name if not done already */ ++ if (errbuf->b_sfname == NULL ++ || mch_isFullName(errbuf->b_sfname)) ++ { ++ if (*dirname == NUL) ++ mch_dirname(dirname, MAXPATHL); ++ shorten_buf_fname(errbuf, dirname, FALSE); ++ } ++ STRCPY(IObuff, errbuf->b_fname); ++ } ++ len = (int)STRLEN(IObuff); ++ } ++ else ++ len = 0; ++ IObuff[len++] = '|'; ++ ++ if (qfp->qf_lnum > 0) ++ { ++ sprintf((char *)IObuff + len, "%ld", qfp->qf_lnum); ++ len += (int)STRLEN(IObuff + len); ++ ++ if (qfp->qf_col > 0) ++ { ++ sprintf((char *)IObuff + len, " col %d", qfp->qf_col); ++ len += (int)STRLEN(IObuff + len); ++ } ++ ++ sprintf((char *)IObuff + len, "%s", ++ (char *)qf_types(qfp->qf_type, qfp->qf_nr)); ++ len += (int)STRLEN(IObuff + len); ++ } ++ else if (qfp->qf_pattern != NULL) ++ { ++ qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len); ++ len += (int)STRLEN(IObuff + len); ++ } ++ IObuff[len++] = '|'; ++ IObuff[len++] = ' '; ++ ++ /* Remove newlines and leading whitespace from the text. ++ * For an unrecognized line keep the indent, the compiler may ++ * mark a word with ^^^^. */ ++ qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, ++ IObuff + len, IOSIZE - len); ++ ++ if (ml_append_buf(buf, lnum, IObuff, ++ (colnr_T)STRLEN(IObuff) + 1, FALSE) == FAIL) ++ return FAIL; ++ ++ return OK; ++ } ++ ++ /* + * Fill current buffer with quickfix errors, replacing any previous contents. + * curbuf must be the quickfix buffer! + * If "old_last" is not NULL append the items after this one. +*************** +*** 3846,3853 **** + { + linenr_T lnum; + qfline_T *qfp; +- buf_T *errbuf; +- int len; + int old_KeyTyped = KeyTyped; + + if (old_last == NULL) +--- 3969,3974 ---- +*************** +*** 3883,3949 **** + } + while (lnum < qi->qf_lists[qi->qf_curlist].qf_count) + { +! if (qfp->qf_module != NULL) +! { +! STRCPY(IObuff, qfp->qf_module); +! len = (int)STRLEN(IObuff); +! } +! else if (qfp->qf_fnum != 0 +! && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL +! && errbuf->b_fname != NULL) +! { +! if (qfp->qf_type == 1) /* :helpgrep */ +! STRCPY(IObuff, gettail(errbuf->b_fname)); +! else +! { +! /* shorten the file name if not done already */ +! if (errbuf->b_sfname == NULL +! || mch_isFullName(errbuf->b_sfname)) +! { +! if (*dirname == NUL) +! mch_dirname(dirname, MAXPATHL); +! shorten_buf_fname(errbuf, dirname, FALSE); +! } +! STRCPY(IObuff, errbuf->b_fname); +! } +! len = (int)STRLEN(IObuff); +! } +! else +! len = 0; +! IObuff[len++] = '|'; +! +! if (qfp->qf_lnum > 0) +! { +! sprintf((char *)IObuff + len, "%ld", qfp->qf_lnum); +! len += (int)STRLEN(IObuff + len); +! +! if (qfp->qf_col > 0) +! { +! sprintf((char *)IObuff + len, " col %d", qfp->qf_col); +! len += (int)STRLEN(IObuff + len); +! } +! +! sprintf((char *)IObuff + len, "%s", +! (char *)qf_types(qfp->qf_type, qfp->qf_nr)); +! len += (int)STRLEN(IObuff + len); +! } +! else if (qfp->qf_pattern != NULL) +! { +! qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len); +! len += (int)STRLEN(IObuff + len); +! } +! IObuff[len++] = '|'; +! IObuff[len++] = ' '; +! +! /* Remove newlines and leading whitespace from the text. +! * For an unrecognized line keep the indent, the compiler may +! * mark a word with ^^^^. */ +! qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, +! IObuff + len, IOSIZE - len); +! +! if (ml_append_buf(buf, lnum, IObuff, +! (colnr_T)STRLEN(IObuff) + 1, FALSE) == FAIL) + break; + ++lnum; + qfp = qfp->qf_next; + if (qfp == NULL) +--- 4004,4012 ---- + } + while (lnum < qi->qf_lists[qi->qf_curlist].qf_count) + { +! if (qf_buf_add_line(buf, lnum, qfp, dirname) == FAIL) + break; ++ + ++lnum; + qfp = qfp->qf_next; + if (qfp == NULL) +*** ../vim-8.1.0013/src/version.c 2018-05-21 14:55:22.555983588 +0200 +--- src/version.c 2018-05-21 16:55:00.327845962 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 14, + /**/ + +-- +ARTHUR: ... and I am your king .... +OLD WOMAN: Ooooh! I didn't know we had a king. I thought we were an + autonomous collective ... + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0015 b/data/vim/patches/8.1.0015 new file mode 100644 index 000000000..648710228 --- /dev/null +++ b/data/vim/patches/8.1.0015 @@ -0,0 +1,144 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0015 +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.0015 +Problem: Cursor color wrong when closing a terminal window, ending up in + another terminal window. (Dominique Pelle) +Solution: Bail out of terminal_loop() when the buffer changes. + (closes #2942) +Files: src/terminal.c + + +*** ../vim-8.1.0014/src/terminal.c 2018-05-21 14:55:22.555983588 +0200 +--- src/terminal.c 2018-05-21 18:37:16.628386002 +0200 +*************** +*** 183,196 **** + * 1. Generic code for all systems. + */ + +! static void +! cursor_color_copy(char_u** to_color, char_u* from_color) +! { +! vim_free(*to_color); +! *to_color = (from_color == NULL) ? NULL : vim_strsave(from_color); +! } +! +! static int + cursor_color_equal(char_u *lhs_color, char_u *rhs_color) + { + if (lhs_color != NULL && rhs_color != NULL) +--- 183,189 ---- + * 1. Generic code for all systems. + */ + +! static int + cursor_color_equal(char_u *lhs_color, char_u *rhs_color) + { + if (lhs_color != NULL && rhs_color != NULL) +*************** +*** 198,204 **** + return lhs_color == NULL && rhs_color == NULL; + } + +! static char_u * + cursor_color_get(char_u *color) + { + return (color == NULL) ? (char_u *)"" : color; +--- 191,207 ---- + return lhs_color == NULL && rhs_color == NULL; + } + +! static void +! cursor_color_copy(char_u **to_color, char_u *from_color) +! { +! // Avoid a free & alloc if the value is already right. +! if (cursor_color_equal(*to_color, from_color)) +! return; +! vim_free(*to_color); +! *to_color = (from_color == NULL) ? NULL : vim_strsave(from_color); +! } +! +! static char_u * + cursor_color_get(char_u *color) + { + return (color == NULL) ? (char_u *)"" : color; +*************** +*** 2119,2125 **** + while (must_redraw != 0) + if (update_screen(0) == FAIL) + break; +! if (!term_use_loop_check(TRUE)) + /* job finished while redrawing */ + break; + +--- 2122,2128 ---- + while (must_redraw != 0) + if (update_screen(0) == FAIL) + break; +! if (!term_use_loop_check(TRUE) || in_terminal_loop != curbuf->b_term) + /* job finished while redrawing */ + break; + +*************** +*** 2127,2133 **** + restore_cursor = TRUE; + + c = term_vgetc(); +! if (!term_use_loop_check(TRUE)) + { + /* Job finished while waiting for a character. Push back the + * received character. */ +--- 2130,2136 ---- + restore_cursor = TRUE; + + c = term_vgetc(); +! if (!term_use_loop_check(TRUE) || in_terminal_loop != curbuf->b_term) + { + /* Job finished while waiting for a character. Push back the + * received character. */ +*************** +*** 2178,2184 **** + #ifdef FEAT_CMDL_INFO + clear_showcmd(); + #endif +! if (!term_use_loop_check(TRUE)) + /* job finished while waiting for a character */ + break; + +--- 2181,2188 ---- + #ifdef FEAT_CMDL_INFO + clear_showcmd(); + #endif +! if (!term_use_loop_check(TRUE) +! || in_terminal_loop != curbuf->b_term) + /* job finished while waiting for a character */ + break; + +*** ../vim-8.1.0014/src/version.c 2018-05-21 16:56:33.687217173 +0200 +--- src/version.c 2018-05-21 17:16:16.343071822 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 15, + /**/ + +-- +OLD WOMAN: Well, how did you become king, then? +ARTHUR: The Lady of the Lake, her arm clad in the purest shimmering samite, + held Excalibur aloft from the bosom of the water to signify by Divine + Providence ... that I, Arthur, was to carry Excalibur ... That is + why I am your king! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0016 b/data/vim/patches/8.1.0016 new file mode 100644 index 000000000..0ecad20a9 --- /dev/null +++ b/data/vim/patches/8.1.0016 @@ -0,0 +1,61 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0016 +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.0016 +Problem: Possible crash in term_wait(). (Dominique Pelle) +Solution: Check for a valid buffer after ui_delay(). (closes #2944) +Files: src/terminal.c + + +*** ../vim-8.1.0015/src/terminal.c 2018-05-21 18:47:47.496590765 +0200 +--- src/terminal.c 2018-05-21 22:47:11.788087575 +0200 +*************** +*** 5264,5274 **** + { + mch_check_messages(); + parse_queued_messages(); + if (!buf_valid(buf)) + /* If the terminal is closed when the channel is closed the + * buffer disappears. */ + break; +- ui_delay(10L, FALSE); + } + mch_check_messages(); + parse_queued_messages(); +--- 5264,5274 ---- + { + mch_check_messages(); + parse_queued_messages(); ++ ui_delay(10L, FALSE); + if (!buf_valid(buf)) + /* If the terminal is closed when the channel is closed the + * buffer disappears. */ + break; + } + mch_check_messages(); + parse_queued_messages(); +*** ../vim-8.1.0015/src/version.c 2018-05-21 18:47:47.500590743 +0200 +--- src/version.c 2018-05-21 22:49:40.782890938 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 16, + /**/ + +-- +DENNIS: You can't expect to wield supreme executive power just 'cause some + watery tart threw a sword at you! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0017 b/data/vim/patches/8.1.0017 new file mode 100644 index 000000000..7eb2704a6 --- /dev/null +++ b/data/vim/patches/8.1.0017 @@ -0,0 +1,210 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0017 +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.0017 +Problem: Shell command completion has duplicates. (Yegappan Lakshmanan) +Solution: Use a hash table to avoid duplicates. (Ozaki Kiichi, closes #539, + closes #2733) +Files: src/ex_getln.c, src/testdir/test_cmdline.vim + + +*** ../vim-8.1.0016/src/ex_getln.c 2018-05-13 18:28:45.000000000 +0200 +--- src/ex_getln.c 2018-05-22 16:50:19.196716156 +0200 +*************** +*** 5147,5153 **** + { + char_u *pat; + int i; +! char_u *path; + int mustfree = FALSE; + garray_T ga; + char_u *buf = alloc(MAXPATHL); +--- 5147,5153 ---- + { + char_u *pat; + int i; +! char_u *path = NULL; + int mustfree = FALSE; + garray_T ga; + char_u *buf = alloc(MAXPATHL); +*************** +*** 5156,5161 **** +--- 5156,5164 ---- + int flags = flagsarg; + int ret; + int did_curdir = FALSE; ++ hashtab_T found_ht; ++ hashitem_T *hi; ++ hash_T hash; + + if (buf == NULL) + return FAIL; +*************** +*** 5169,5183 **** + + flags |= EW_FILE | EW_EXEC | EW_SHELLCMD; + +! /* For an absolute name we don't use $PATH. */ +! if (mch_isFullName(pat)) +! path = (char_u *)" "; +! else if ((pat[0] == '.' && (vim_ispathsep(pat[1]) +! || (pat[1] == '.' && vim_ispathsep(pat[2]))))) + path = (char_u *)"."; + else + { +! path = vim_getenv((char_u *)"PATH", &mustfree); + if (path == NULL) + path = (char_u *)""; + } +--- 5172,5185 ---- + + flags |= EW_FILE | EW_EXEC | EW_SHELLCMD; + +! if (pat[0] == '.' && (vim_ispathsep(pat[1]) +! || (pat[1] == '.' && vim_ispathsep(pat[2])))) + path = (char_u *)"."; + else + { +! /* For an absolute name we don't use $PATH. */ +! if (!mch_isFullName(pat)) +! path = vim_getenv((char_u *)"PATH", &mustfree); + if (path == NULL) + path = (char_u *)""; + } +*************** +*** 5188,5193 **** +--- 5190,5196 ---- + * current directory, to find "subdir/cmd". + */ + ga_init2(&ga, (int)sizeof(char *), 10); ++ hash_init(&found_ht); + for (s = path; ; s = e) + { + if (*s == NUL) +*************** +*** 5200,5208 **** + else if (*s == '.') + did_curdir = TRUE; + +- if (*s == ' ') +- ++s; /* Skip space used for absolute path name. */ +- + #if defined(MSWIN) + e = vim_strchr(s, ';'); + #else +--- 5203,5208 ---- +*************** +*** 5229,5243 **** + { + for (i = 0; i < *num_file; ++i) + { +! s = (*file)[i]; +! if (STRLEN(s) > l) + { +! /* Remove the path again. */ +! STRMOVE(s, s + l); +! ((char_u **)ga.ga_data)[ga.ga_len++] = s; + } +! else +! vim_free(s); + } + vim_free(*file); + } +--- 5229,5251 ---- + { + for (i = 0; i < *num_file; ++i) + { +! char_u *name = (*file)[i]; +! +! if (STRLEN(name) > l) + { +! // Check if this name was already found. +! hash = hash_hash(name + l); +! hi = hash_lookup(&found_ht, name + l, hash); +! if (HASHITEM_EMPTY(hi)) +! { +! // Remove the path that was prepended. +! STRMOVE(name, name + l); +! ((char_u **)ga.ga_data)[ga.ga_len++] = name; +! hash_add_item(&found_ht, hi, name, hash); +! name = NULL; +! } + } +! vim_free(name); + } + vim_free(*file); + } +*************** +*** 5252,5257 **** +--- 5260,5266 ---- + vim_free(pat); + if (mustfree) + vim_free(path); ++ hash_clear(&found_ht); + return OK; + } + +*** ../vim-8.1.0016/src/testdir/test_cmdline.vim 2018-05-12 13:15:47.000000000 +0200 +--- src/testdir/test_cmdline.vim 2018-05-22 16:46:15.281766628 +0200 +*************** +*** 231,236 **** +--- 231,245 ---- + let l = getcompletion('not', 'mapclear') + call assert_equal([], l) + ++ let l = getcompletion('.', 'shellcmd') ++ call assert_equal(['./', '../'], l[0:1]) ++ call assert_equal(-1, match(l[2:], '^\.\.\?/$')) ++ let root = has('win32') ? 'C:\\' : '/' ++ let l = getcompletion(root, 'shellcmd') ++ let expected = map(filter(glob(root . '*', 0, 1), ++ \ 'isdirectory(v:val) || executable(v:val)'), 'isdirectory(v:val) ? v:val . ''/'' : v:val') ++ call assert_equal(expected, l) ++ + if has('cscope') + let l = getcompletion('', 'cscope') + let cmds = ['add', 'find', 'help', 'kill', 'reset', 'show'] +*************** +*** 258,265 **** + endif + + " For others test if the name is recognized. +! let names = ['buffer', 'environment', 'file_in_path', +! \ 'mapping', 'shellcmd', 'tag', 'tag_listfiles', 'user'] + if has('cmdline_hist') + call add(names, 'history') + endif +--- 267,273 ---- + endif + + " For others test if the name is recognized. +! let names = ['buffer', 'environment', 'file_in_path', 'mapping', 'tag', 'tag_listfiles', 'user'] + if has('cmdline_hist') + call add(names, 'history') + endif +*** ../vim-8.1.0016/src/version.c 2018-05-21 22:50:22.514568516 +0200 +--- src/version.c 2018-05-22 16:48:23.473237408 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 17, + /**/ + +-- +ARTHUR: You are indeed brave Sir knight, but the fight is mine. +BLACK KNIGHT: Had enough? +ARTHUR: You stupid bastard. You havn't got any arms left. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0018 b/data/vim/patches/8.1.0018 new file mode 100644 index 000000000..998587b8c --- /dev/null +++ b/data/vim/patches/8.1.0018 @@ -0,0 +1,328 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0018 +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.0018 +Problem: Using "gn" may select wrong text when wrapping. +Solution: Avoid wrapping when searching forward. (Christian Brabandt) +Files: src/search.c, src/testdir/test_gn.vim + + +*** ../vim-8.1.0017/src/search.c 2018-04-27 22:44:25.000000000 +0200 +--- src/search.c 2018-05-22 17:45:10.884137772 +0200 +*************** +*** 4665,4670 **** +--- 4665,4671 ---- + { + pos_T start_pos; /* position before the pattern */ + pos_T orig_pos; /* position of the cursor at beginning */ ++ pos_T first_match; /* position of first match */ + pos_T pos; /* position after the pattern */ + int i; + int dir; +*************** +*** 4758,4763 **** +--- 4759,4766 ---- + ml_get(curwin->w_buffer->b_ml.ml_line_count)); + } + } ++ if (i == 0) ++ first_match = pos; + p_ws = old_p_ws; + } + +*************** +*** 4774,4782 **** + /* move to match, except for zero-width matches, in which case, we are + * already on the next match */ + if (!one_char) +! result = searchit(curwin, curbuf, &pos, direction, + spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, + NULL, NULL); + + if (!VIsual_active) + VIsual = start_pos; +--- 4777,4801 ---- + /* move to match, except for zero-width matches, in which case, we are + * already on the next match */ + if (!one_char) +! { +! p_ws = FALSE; +! for (i = 0; i < 2; i++) +! { +! result = searchit(curwin, curbuf, &pos, direction, + spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, + NULL, NULL); ++ /* Search successfull, break out from the loop */ ++ if (result) ++ break; ++ /* search failed, try again from the last search position match */ ++ pos = first_match; ++ } ++ } ++ ++ p_ws = old_p_ws; ++ /* not found */ ++ if (!result) ++ return FAIL; + + if (!VIsual_active) + VIsual = start_pos; +*** ../vim-8.1.0017/src/testdir/test_gn.vim 2017-10-15 22:02:53.000000000 +0200 +--- src/testdir/test_gn.vim 2018-05-22 17:48:47.536062374 +0200 +*************** +*** 4,54 **** + noautocmd new + " replace a single char by itsself quoted: + call setline('.', 'abc x def x ghi x jkl') +! let @/='x' + exe "norm! cgn'x'\<esc>.." + call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.')) + sil! %d_ + + " simple search match + call setline('.', 'foobar') +! let @/='foobar' + exe "norm! gncsearchmatch" + call assert_equal('searchmatch', getline('.')) + sil! %d _ + + " replace a multi-line match + call setline('.', ['', 'one', 'two']) +! let @/='one\_s*two\_s' + exe "norm! gnceins\<CR>zwei" + call assert_equal(['','eins','zwei'], getline(1,'$')) + sil! %d _ + + " test count argument + call setline('.', ['', 'abcdx | abcdx | abcdx']) +! let @/='[a]bcdx' + exe "norm! 2gnd" + call assert_equal(['','abcdx | | abcdx'], getline(1,'$')) + sil! %d _ + + " join lines + call setline('.', ['join ', 'lines']) +! let @/='$' + exe "norm! 0gnd" + call assert_equal(['join lines'], getline(1,'$')) + sil! %d _ + + " zero-width match + call setline('.', ['', 'zero width pattern']) +! let @/='\>\zs' + exe "norm! 0gnd" + call assert_equal(['', 'zerowidth pattern'], getline(1,'$')) + sil! %d _ + + " delete first and last chars + call setline('.', ['delete first and last chars']) +! let @/='^' + exe "norm! 0gnd$" +! let @/='\zs' + exe "norm! gnd" + call assert_equal(['elete first and last char'], getline(1,'$')) + sil! %d _ +--- 4,54 ---- + noautocmd new + " replace a single char by itsself quoted: + call setline('.', 'abc x def x ghi x jkl') +! let @/ = 'x' + exe "norm! cgn'x'\<esc>.." + call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.')) + sil! %d_ + + " simple search match + call setline('.', 'foobar') +! let @/ = 'foobar' + exe "norm! gncsearchmatch" + call assert_equal('searchmatch', getline('.')) + sil! %d _ + + " replace a multi-line match + call setline('.', ['', 'one', 'two']) +! let @/ = 'one\_s*two\_s' + exe "norm! gnceins\<CR>zwei" + call assert_equal(['','eins','zwei'], getline(1,'$')) + sil! %d _ + + " test count argument + call setline('.', ['', 'abcdx | abcdx | abcdx']) +! let @/ = '[a]bcdx' + exe "norm! 2gnd" + call assert_equal(['','abcdx | | abcdx'], getline(1,'$')) + sil! %d _ + + " join lines + call setline('.', ['join ', 'lines']) +! let @/ = '$' + exe "norm! 0gnd" + call assert_equal(['join lines'], getline(1,'$')) + sil! %d _ + + " zero-width match + call setline('.', ['', 'zero width pattern']) +! let @/ = '\>\zs' + exe "norm! 0gnd" + call assert_equal(['', 'zerowidth pattern'], getline(1,'$')) + sil! %d _ + + " delete first and last chars + call setline('.', ['delete first and last chars']) +! let @/ = '^' + exe "norm! 0gnd$" +! let @/ = '\zs' + exe "norm! gnd" + call assert_equal(['elete first and last char'], getline(1,'$')) + sil! %d _ +*************** +*** 61,74 **** + + " backwards search + call setline('.', ['my very excellent mother just served us nachos']) +! let @/='mother' + exe "norm! $cgNmongoose" + call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$')) + sil! %d _ + + " search for single char + call setline('.', ['','for (i=0; i<=10; i++)']) +! let @/='i' + exe "norm! cgnj" + call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$')) + sil! %d _ +--- 61,74 ---- + + " backwards search + call setline('.', ['my very excellent mother just served us nachos']) +! let @/ = 'mother' + exe "norm! $cgNmongoose" + call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$')) + sil! %d _ + + " search for single char + call setline('.', ['','for (i=0; i<=10; i++)']) +! let @/ = 'i' + exe "norm! cgnj" + call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$')) + sil! %d _ +*************** +*** 76,103 **** + " search hex char + call setline('.', ['','Y']) + set noignorecase +! let @/='\%x59' + exe "norm! gnd" + call assert_equal(['',''], getline(1,'$')) + sil! %d _ + + " test repeating gdn + call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3']) +! let @/='Johnny' + exe "norm! dgn." + call assert_equal(['','1', '', '2', '', '3'], getline(1,'$')) + sil! %d _ + + " test repeating gUgn + call setline('.', ['', '1', 'Depp', '2', 'Depp', '3']) +! let @/='Depp' + exe "norm! gUgn." + call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$')) + sil! %d _ + + " test using look-ahead assertions + call setline('.', ['a:10', '', 'a:1', '', 'a:20']) +! let @/='a:0\@!\zs\d\+' + exe "norm! 2nygno\<esc>p" + call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$')) + sil! %d _ +--- 76,103 ---- + " search hex char + call setline('.', ['','Y']) + set noignorecase +! let @/ = '\%x59' + exe "norm! gnd" + call assert_equal(['',''], getline(1,'$')) + sil! %d _ + + " test repeating gdn + call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3']) +! let @/ = 'Johnny' + exe "norm! dgn." + call assert_equal(['','1', '', '2', '', '3'], getline(1,'$')) + sil! %d _ + + " test repeating gUgn + call setline('.', ['', '1', 'Depp', '2', 'Depp', '3']) +! let @/ = 'Depp' + exe "norm! gUgn." + call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$')) + sil! %d _ + + " test using look-ahead assertions + call setline('.', ['a:10', '', 'a:1', '', 'a:20']) +! let @/ = 'a:0\@!\zs\d\+' + exe "norm! 2nygno\<esc>p" + call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$')) + sil! %d _ +*************** +*** 113,124 **** + " search upwards with nowrapscan set + call setline('.', ['foo', 'bar', 'foo', 'baz']) + set nowrapscan +! let @/='foo' + $ + norm! dgN + call assert_equal(['foo', 'bar', '', 'baz'], getline(1,'$')) + sil! %d_ + + set wrapscan&vim + endfu + +--- 113,133 ---- + " search upwards with nowrapscan set + call setline('.', ['foo', 'bar', 'foo', 'baz']) + set nowrapscan +! let @/ = 'foo' + $ + norm! dgN + call assert_equal(['foo', 'bar', '', 'baz'], getline(1,'$')) + sil! %d_ + ++ " search using the \zs atom ++ call setline(1, [' nnoremap', '' , 'nnoremap']) ++ set wrapscan&vim ++ let @/ = '\_s\zsnnoremap' ++ $ ++ norm! cgnmatch ++ call assert_equal([' nnoremap', '', 'match'], getline(1,'$')) ++ sil! %d_ ++ + set wrapscan&vim + endfu + +*** ../vim-8.1.0017/src/version.c 2018-05-22 16:58:43.979903077 +0200 +--- src/version.c 2018-05-22 17:49:43.960023944 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 18, + /**/ + +-- +Eye have a spelling checker, it came with my PC; +It plainly marks four my revue mistakes I cannot sea. +I've run this poem threw it, I'm sure your please to no, +It's letter perfect in it's weigh, my checker tolled me sew! + + /// 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 /// diff --git a/data/vim/patches/8.1.0019 b/data/vim/patches/8.1.0019 new file mode 100644 index 000000000..2c23681b7 --- /dev/null +++ b/data/vim/patches/8.1.0019 @@ -0,0 +1,78 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0019 +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.0019 +Problem: Error when defining a Lambda with index of a function result. +Solution: When not evaluating an expression and skipping a function call, + set the return value to VAR_UNKNOWN. +Files: src/userfunc.c, src/testdir/test_lambda.vim + + +*** ../vim-8.1.0018/src/userfunc.c 2018-03-04 16:24:26.000000000 +0100 +--- src/userfunc.c 2018-05-22 18:28:12.801624574 +0200 +*************** +*** 1349,1356 **** + } + + +! /* execute the function if no errors detected and executing */ +! if (evaluate && error == ERROR_NONE) + { + char_u *rfname = fname; + +--- 1349,1364 ---- + } + + +! /* +! * Execute the function if executing and no errors were detected. +! */ +! if (!evaluate) +! { +! // Not evaluating, which means the return value is unknown. This +! // matters for giving error messages. +! rettv->v_type = VAR_UNKNOWN; +! } +! else if (error == ERROR_NONE) + { + char_u *rfname = fname; + +*** ../vim-8.1.0018/src/testdir/test_lambda.vim 2017-02-02 22:52:07.000000000 +0100 +--- src/testdir/test_lambda.vim 2018-05-22 18:27:22.697688766 +0200 +*************** +*** 284,286 **** +--- 284,292 ---- + call test_garbagecollect_now() + call assert_equal(14, s:Abar()) + endfunc ++ ++ func Test_lambda_with_index() ++ let List = {x -> [x]} ++ let Extract = {-> function(List, ['foobar'])()[0]} ++ call assert_equal('foobar', Extract()) ++ endfunc +*** ../vim-8.1.0018/src/version.c 2018-05-22 17:50:38.683980716 +0200 +--- src/version.c 2018-05-22 18:27:48.673655578 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 19, + /**/ + +-- +Westheimer's Discovery: + A couple of months in the laboratory can + frequently save a couple of hours in the library. + + /// 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 /// diff --git a/data/vim/patches/8.1.0020 b/data/vim/patches/8.1.0020 new file mode 100644 index 000000000..3685bee38 --- /dev/null +++ b/data/vim/patches/8.1.0020 @@ -0,0 +1,519 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0020 +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.0020 +Problem: Cannot tell whether a register is being used for executing or + recording. +Solution: Add reg_executing() and reg_recording(). (Hirohito Higashi, + closes #2745) Rename the global variables for consistency. Store + the register name in reg_executing. +Files: runtime/doc/eval.txt, runtime/doc/usr_41.txt, src/evalfunc.c, + src/testdir/test_functions.vim, src/getchar.c, src/normal.c, + src/ops.c, src/globals.h, src/edit.c, src/fileio.c, src/message.c, + src/screen.c + + +*** ../vim-8.1.0019/runtime/doc/eval.txt 2018-05-17 15:06:48.000000000 +0200 +--- runtime/doc/eval.txt 2018-05-22 20:25:41.869831935 +0200 +*************** +*** 2302,2307 **** +--- 2302,2309 ---- + List items from {expr} to {max} + readfile({fname} [, {binary} [, {max}]]) + List get list of lines from file {fname} ++ reg_executing() Number get the executing register name ++ reg_recording() String get the recording register name + reltime([{start} [, {end}]]) List get time value + reltimefloat({time}) Float turn the time value into a Float + reltimestr({time}) String turn time value into a String +*************** +*** 6558,6563 **** +--- 6562,6576 ---- + the result is an empty list. + Also see |writefile()|. + ++ reg_executing() *reg_executing()* ++ Returns the single letter name of the register being executed. ++ Returns an empty string when no register is being executed. ++ See |@|. ++ ++ reg_recording() *reg_recording()* ++ Returns the single letter name of the register being recorded. ++ Returns an empty string string when not recording. See |q|. ++ + reltime([{start} [, {end}]]) *reltime()* + Return an item that represents a time value. The format of + the item depends on the system. It can be passed to +*** ../vim-8.1.0019/runtime/doc/usr_41.txt 2018-05-17 13:42:03.000000000 +0200 +--- runtime/doc/usr_41.txt 2018-05-22 20:26:30.025880034 +0200 +*************** +*** 1018,1023 **** +--- 1018,1025 ---- + getreg() get contents of a register + getregtype() get type of a register + setreg() set contents and type of a register ++ reg_executing() return the name of the register being executed ++ reg_recording() return the name of the register being recorded + + shiftwidth() effective value of 'shiftwidth' + +*** ../vim-8.1.0019/src/evalfunc.c 2018-05-21 13:28:40.320041589 +0200 +--- src/evalfunc.c 2018-05-22 20:32:33.566027870 +0200 +*************** +*** 306,311 **** +--- 306,313 ---- + #endif + static void f_range(typval_T *argvars, typval_T *rettv); + static void f_readfile(typval_T *argvars, typval_T *rettv); ++ static void f_reg_executing(typval_T *argvars, typval_T *rettv); ++ static void f_reg_recording(typval_T *argvars, typval_T *rettv); + static void f_reltime(typval_T *argvars, typval_T *rettv); + #ifdef FEAT_FLOAT + static void f_reltimefloat(typval_T *argvars, typval_T *rettv); +*************** +*** 754,759 **** +--- 756,763 ---- + #endif + {"range", 1, 3, f_range}, + {"readfile", 1, 3, f_readfile}, ++ {"reg_executing", 0, 0, f_reg_executing}, ++ {"reg_recording", 0, 0, f_reg_recording}, + {"reltime", 0, 2, f_reltime}, + #ifdef FEAT_FLOAT + {"reltimefloat", 1, 1, f_reltimefloat}, +*************** +*** 8697,8702 **** +--- 8701,8734 ---- + fclose(fd); + } + ++ static void ++ return_register(int regname, typval_T *rettv) ++ { ++ char_u buf[2] = {0, 0}; ++ ++ buf[0] = (char_u)regname; ++ rettv->v_type = VAR_STRING; ++ rettv->vval.v_string = vim_strsave(buf); ++ } ++ ++ /* ++ * "reg_executing()" function ++ */ ++ static void ++ f_reg_executing(typval_T *argvars UNUSED, typval_T *rettv) ++ { ++ return_register(reg_executing, rettv); ++ } ++ ++ /* ++ * "reg_recording()" function ++ */ ++ static void ++ f_reg_recording(typval_T *argvars UNUSED, typval_T *rettv) ++ { ++ return_register(reg_recording, rettv); ++ } ++ + #if defined(FEAT_RELTIME) + static int list2proftime(typval_T *arg, proftime_T *tm); + +*** ../vim-8.1.0019/src/testdir/test_functions.vim 2018-05-20 14:11:07.125342749 +0200 +--- src/testdir/test_functions.vim 2018-05-22 20:27:42.625937524 +0200 +*************** +*** 923,925 **** +--- 923,950 ---- + let chars = join(map(range(1, 0x20) + [0xa0], {n -> nr2char(n)}), '') + call assert_equal("x", trim(chars . "x" . chars)) + endfunc ++ ++ " Test for reg_recording() and reg_executing() ++ func Test_reg_executing_and_recording() ++ let s:reg_stat = '' ++ func s:save_reg_stat() ++ let s:reg_stat = reg_recording() . ':' . reg_executing() ++ return '' ++ endfunc ++ ++ new ++ call s:save_reg_stat() ++ call assert_equal(':', s:reg_stat) ++ call feedkeys("qa\"=s:save_reg_stat()\<CR>pq", 'xt') ++ call assert_equal('a:', s:reg_stat) ++ call feedkeys("@a", 'xt') ++ call assert_equal(':a', s:reg_stat) ++ call feedkeys("qb@aq", 'xt') ++ call assert_equal('b:a', s:reg_stat) ++ call feedkeys("q\"\"=s:save_reg_stat()\<CR>pq", 'xt') ++ call assert_equal('":', s:reg_stat) ++ ++ bwipe! ++ delfunc s:save_reg_stat ++ unlet s:reg_stat ++ endfunc +*** ../vim-8.1.0019/src/getchar.c 2018-05-13 18:25:53.000000000 +0200 +--- src/getchar.c 2018-05-22 20:21:55.241805765 +0200 +*************** +*** 1244,1250 **** + int todo = len; + + /* remember how many chars were last recorded */ +! if (Recording) + last_recorded_len += len; + + buf[1] = NUL; +--- 1244,1250 ---- + int todo = len; + + /* remember how many chars were last recorded */ +! if (reg_recording != 0) + last_recorded_len += len; + + buf[1] = NUL; +*************** +*** 1254,1260 **** + c = *s++; + updatescript(c); + +! if (Recording) + { + buf[0] = c; + add_buff(&recordbuff, buf, 1L); +--- 1254,1260 ---- + c = *s++; + updatescript(c); + +! if (reg_recording != 0) + { + buf[0] = c; + add_buff(&recordbuff, buf, 1L); +*************** +*** 2007,2013 **** + init_typebuf(); + start_stuff(); + if (advance && typebuf.tb_maplen == 0) +! Exec_reg = FALSE; + do + { + /* +--- 2007,2013 ---- + init_typebuf(); + start_stuff(); + if (advance && typebuf.tb_maplen == 0) +! reg_executing = 0; + do + { + /* +*** ../vim-8.1.0019/src/normal.c 2018-05-10 15:04:13.000000000 +0200 +--- src/normal.c 2018-05-22 20:22:01.537798525 +0200 +*************** +*** 871,878 **** + || (nv_cmds[idx].cmd_flags & NV_NCH_ALW) == NV_NCH_ALW + || (ca.cmdchar == 'q' + && oap->op_type == OP_NOP +! && !Recording +! && !Exec_reg) + || ((ca.cmdchar == 'a' || ca.cmdchar == 'i') + && (oap->op_type != OP_NOP || VIsual_active)))) + { +--- 871,878 ---- + || (nv_cmds[idx].cmd_flags & NV_NCH_ALW) == NV_NCH_ALW + || (ca.cmdchar == 'q' + && oap->op_type == OP_NOP +! && reg_recording == 0 +! && reg_executing == 0) + || ((ca.cmdchar == 'a' || ca.cmdchar == 'i') + && (oap->op_type != OP_NOP || VIsual_active)))) + { +*************** +*** 9324,9330 **** + #endif + /* (stop) recording into a named register, unless executing a + * register */ +! if (!Exec_reg && do_record(cap->nchar) == FAIL) + clearopbeep(cap->oap); + } + } +--- 9324,9330 ---- + #endif + /* (stop) recording into a named register, unless executing a + * register */ +! if (reg_executing == 0 && do_record(cap->nchar) == FAIL) + clearopbeep(cap->oap); + } + } +*** ../vim-8.1.0019/src/ops.c 2018-05-01 19:10:26.000000000 +0200 +--- src/ops.c 2018-05-22 20:22:13.973784219 +0200 +*************** +*** 1091,1104 **** + yankreg_T *old_y_previous, *old_y_current; + int retval; + +! if (Recording == FALSE) /* start recording */ + { + /* registers 0-9, a-z and " are allowed */ + if (c < 0 || (!ASCII_ISALNUM(c) && c != '"')) + retval = FAIL; + else + { +! Recording = c; + showmode(); + regname = c; + retval = OK; +--- 1091,1104 ---- + yankreg_T *old_y_previous, *old_y_current; + int retval; + +! if (reg_recording == 0) /* start recording */ + { + /* registers 0-9, a-z and " are allowed */ + if (c < 0 || (!ASCII_ISALNUM(c) && c != '"')) + retval = FAIL; + else + { +! reg_recording = c; + showmode(); + regname = c; + retval = OK; +*************** +*** 1111,1117 **** + * needs to be removed again to put it in a register. exec_reg then + * adds the escaping back later. + */ +! Recording = FALSE; + MSG(""); + p = get_recorded(); + if (p == NULL) +--- 1111,1117 ---- + * needs to be removed again to put it in a register. exec_reg then + * adds the escaping back later. + */ +! reg_recording = 0; + MSG(""); + p = get_recorded(); + if (p == NULL) +*************** +*** 1318,1324 **** + == FAIL) + return FAIL; + } +! Exec_reg = TRUE; /* disable the 'q' command */ + } + return retval; + } +--- 1318,1324 ---- + == FAIL) + return FAIL; + } +! reg_executing = regname == 0 ? '"' : regname; // disable "q" command + } + return retval; + } +*** ../vim-8.1.0019/src/globals.h 2018-05-01 15:29:24.000000000 +0200 +--- src/globals.h 2018-05-22 20:22:30.453765251 +0200 +*************** +*** 933,940 **** + EXTERN int exmode_active INIT(= 0); /* zero, EXMODE_NORMAL or EXMODE_VIM */ + EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */ + +! EXTERN int Recording INIT(= FALSE); /* TRUE when recording into a reg. */ +! EXTERN int Exec_reg INIT(= FALSE); /* TRUE when executing a register */ + + EXTERN int no_mapping INIT(= FALSE); /* currently no mapping allowed */ + EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */ +--- 933,940 ---- + EXTERN int exmode_active INIT(= 0); /* zero, EXMODE_NORMAL or EXMODE_VIM */ + EXTERN int ex_no_reprint INIT(= FALSE); /* no need to print after z or p */ + +! EXTERN int reg_recording INIT(= 0); /* register for recording or zero */ +! EXTERN int reg_executing INIT(= 0); /* register being executed or zero */ + + EXTERN int no_mapping INIT(= FALSE); /* currently no mapping allowed */ + EXTERN int no_zero_mapping INIT(= 0); /* mapping zero not allowed */ +*** ../vim-8.1.0019/src/edit.c 2018-05-10 15:03:58.000000000 +0200 +--- src/edit.c 2018-05-22 20:19:41.393959222 +0200 +*************** +*** 8698,8704 **** + * When recording or for CTRL-O, need to display the new mode. + * Otherwise remove the mode message. + */ +! if (Recording || restart_edit != NUL) + showmode(); + else if (p_smd) + MSG(""); +--- 8698,8704 ---- + * When recording or for CTRL-O, need to display the new mode. + * Otherwise remove the mode message. + */ +! if (reg_recording != 0 || restart_edit != NUL) + showmode(); + else if (p_smd) + MSG(""); +*** ../vim-8.1.0019/src/fileio.c 2018-05-21 13:39:36.047906786 +0200 +--- src/fileio.c 2018-05-22 20:19:50.201949153 +0200 +*************** +*** 9274,9280 **** + + if (!did_cursorhold + && has_cursorhold() +! && !Recording + && typebuf.tb_len == 0 + #ifdef FEAT_INS_EXPAND + && !ins_compl_active() +--- 9274,9280 ---- + + if (!did_cursorhold + && has_cursorhold() +! && reg_recording == 0 + && typebuf.tb_len == 0 + #ifdef FEAT_INS_EXPAND + && !ins_compl_active() +*** ../vim-8.1.0019/src/message.c 2018-04-29 12:18:04.000000000 +0200 +--- src/message.c 2018-05-22 20:20:24.417909998 +0200 +*************** +*** 1025,1031 **** + int oldState; + int tmpState; + int had_got_int; +! int save_Recording; + FILE *save_scriptout; + + if (redraw == TRUE) +--- 1025,1031 ---- + int oldState; + int tmpState; + int had_got_int; +! int save_reg_recording; + FILE *save_scriptout; + + if (redraw == TRUE) +*************** +*** 1103,1118 **** + /* Temporarily disable Recording. If Recording is active, the + * character will be recorded later, since it will be added to the + * typebuf after the loop */ +! save_Recording = Recording; + save_scriptout = scriptout; +! Recording = FALSE; + scriptout = NULL; + c = safe_vgetc(); + if (had_got_int && !global_busy) + got_int = FALSE; + --no_mapping; + --allow_keys; +! Recording = save_Recording; + scriptout = save_scriptout; + + #ifdef FEAT_CLIPBOARD +--- 1103,1118 ---- + /* Temporarily disable Recording. If Recording is active, the + * character will be recorded later, since it will be added to the + * typebuf after the loop */ +! save_reg_recording = reg_recording; + save_scriptout = scriptout; +! reg_recording = 0; + scriptout = NULL; + c = safe_vgetc(); + if (had_got_int && !global_busy) + got_int = FALSE; + --no_mapping; + --allow_keys; +! reg_recording = save_reg_recording; + scriptout = save_scriptout; + + #ifdef FEAT_CLIPBOARD +*** ../vim-8.1.0019/src/screen.c 2018-05-19 14:43:26.775509740 +0200 +--- src/screen.c 2018-05-22 20:20:50.233880413 +0200 +*************** +*** 10255,10261 **** + && ((State & INSERT) + || restart_edit + || VIsual_active)); +! if (do_mode || Recording) + { + /* + * Don't show mode right now, when not redrawing or inside a mapping. +--- 10255,10261 ---- + && ((State & INSERT) + || restart_edit + || VIsual_active)); +! if (do_mode || reg_recording != 0) + { + /* + * Don't show mode right now, when not redrawing or inside a mapping. +*************** +*** 10414,10420 **** + + need_clear = TRUE; + } +! if (Recording + #ifdef FEAT_INS_EXPAND + && edit_submode == NULL /* otherwise it gets too long */ + #endif +--- 10414,10420 ---- + + need_clear = TRUE; + } +! if (reg_recording != 0 + #ifdef FEAT_INS_EXPAND + && edit_submode == NULL /* otherwise it gets too long */ + #endif +*************** +*** 10489,10495 **** + int save_msg_col = msg_col; + + msg_pos_mode(); +! if (Recording) + recording_mode(HL_ATTR(HLF_CM)); + msg_clr_eos(); + +--- 10489,10495 ---- + int save_msg_col = msg_col; + + msg_pos_mode(); +! if (reg_recording != 0) + recording_mode(HL_ATTR(HLF_CM)); + msg_clr_eos(); + +*************** +*** 10504,10510 **** + if (!shortmess(SHM_RECORDING)) + { + char_u s[4]; +! sprintf((char *)s, " @%c", Recording); + MSG_PUTS_ATTR(s, attr); + } + } +--- 10504,10510 ---- + if (!shortmess(SHM_RECORDING)) + { + char_u s[4]; +! sprintf((char *)s, " @%c", reg_recording); + MSG_PUTS_ATTR(s, attr); + } + } +*** ../vim-8.1.0019/src/version.c 2018-05-22 18:31:30.001365739 +0200 +--- src/version.c 2018-05-22 20:33:34.882025227 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 20, + /**/ + +-- + | + +Ceci n'est pas une pipe. + + /// 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 /// diff --git a/data/vim/patches/8.1.0021 b/data/vim/patches/8.1.0021 new file mode 100644 index 000000000..3106e3ea5 --- /dev/null +++ b/data/vim/patches/8.1.0021 @@ -0,0 +1,71 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0021 +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.0021 +Problem: Clang warns for undefined behavior. +Solution: Move #ifdef outside of sprintf() call.(suggestion by Michael + Jarvis, closes #2956) +Files: src/term.c + + +*** ../vim-8.1.0020/src/term.c 2018-05-10 14:39:42.000000000 +0200 +--- src/term.c 2018-05-23 20:26:41.770633594 +0200 +*************** +*** 2872,2885 **** + #else + char *format = "%s%s%%dm"; + #endif +! sprintf(buf, format, +! i == 2 ? + #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) +! s[1] == '|' ? IF_EB("\033|", ESC_STR "|") : + #endif +! IF_EB("\033[", ESC_STR "[") : "\233", +! s[i] == '3' ? (n >= 16 ? "38;5;" : "9") +! : (n >= 16 ? "48;5;" : "10")); + OUT_STR(tgoto(buf, 0, n >= 16 ? n : n - 8)); + } + else +--- 2872,2886 ---- + #else + char *format = "%s%s%%dm"; + #endif +! char *lead = i == 2 ? ( + #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) +! s[1] == '|' ? IF_EB("\033|", ESC_STR "|") : + #endif +! IF_EB("\033[", ESC_STR "[")) : "\233"; +! char *tail = s[i] == '3' ? (n >= 16 ? "38;5;" : "9") +! : (n >= 16 ? "48;5;" : "10"); +! +! sprintf(buf, format, lead, tail); + OUT_STR(tgoto(buf, 0, n >= 16 ? n : n - 8)); + } + else +*** ../vim-8.1.0020/src/version.c 2018-05-22 20:35:13.566009271 +0200 +--- src/version.c 2018-05-23 20:30:12.982576453 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 21, + /**/ + +-- +BEDEVERE: And what do you burn, apart from witches? +FOURTH VILLAGER: ... Wood? +BEDEVERE: So why do witches burn? +SECOND VILLAGER: (pianissimo) ... Because they're made of wood...? + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0022 b/data/vim/patches/8.1.0022 new file mode 100644 index 000000000..ce8aff837 --- /dev/null +++ b/data/vim/patches/8.1.0022 @@ -0,0 +1,79 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0022 +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.0022 +Problem: Repeating put from expression register fails. +Solution: Re-evaluate the expression register. (Andy Massimino, + closes #2945) +Files: src/getchar.c, src/testdir/test_put.vim + + +*** ../vim-8.1.0021/src/getchar.c 2018-05-22 20:35:13.554009274 +0200 +--- src/getchar.c 2018-05-23 21:46:55.680567676 +0200 +*************** +*** 844,849 **** +--- 844,857 ---- + if (c >= '1' && c < '9') + ++c; + add_char_buff(&readbuf2, c); ++ ++ /* the expression register should be re-evaluated */ ++ if (c == '=') ++ { ++ add_char_buff(&readbuf2, CAR); ++ cmd_silent = TRUE; ++ } ++ + c = read_redo(FALSE, old_redo); + } + +*** ../vim-8.1.0021/src/testdir/test_put.vim 2017-06-27 15:22:24.000000000 +0200 +--- src/testdir/test_put.vim 2018-05-23 21:44:03.492595109 +0200 +*************** +*** 45,47 **** +--- 45,60 ---- + bw! + call setreg('a', a[0], a[1]) + endfunc ++ ++ func Test_put_expr() ++ new ++ call setline(1, repeat(['A'], 6)) ++ exec "1norm! \"=line('.')\<cr>p" ++ norm! j0. ++ norm! j0. ++ exec "4norm! \"=\<cr>P" ++ norm! j0. ++ norm! j0. ++ call assert_equal(['A1','A2','A3','4A','5A','6A'], getline(1,'$')) ++ bw! ++ endfunc +*** ../vim-8.1.0021/src/version.c 2018-05-23 20:30:52.738566360 +0200 +--- src/version.c 2018-05-23 21:45:38.776580863 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 22, + /**/ + +-- +The word "leader" is derived from the word "lead", as in the material that +bullets are made out of. The term "leader" was popularized at about the same +time as the invention of firearms. It grew out of the observation that the +person in charge of every organization was the person whom everyone wanted to +fill with hot lead. + I don't recomment this; it's just a point of historical interest. + (Scott Adams - The Dilbert principle) + + /// 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 /// diff --git a/data/vim/patches/8.1.0023 b/data/vim/patches/8.1.0023 new file mode 100644 index 000000000..49fb6543d --- /dev/null +++ b/data/vim/patches/8.1.0023 @@ -0,0 +1,57 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0023 +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.0023 +Problem: gcc 8.1 warns for use of strncpy(). (John Marriott) +Solution: Use mch_memmove() instead of STRNCPY(). +Files: src/memline.c + + +*** ../vim-8.1.0022/src/memline.c 2018-05-12 16:51:22.000000000 +0200 +--- src/memline.c 2018-05-26 17:30:46.805941698 +0200 +*************** +*** 344,350 **** + b0p->b0_magic_int = (int)B0_MAGIC_INT; + b0p->b0_magic_short = (short)B0_MAGIC_SHORT; + b0p->b0_magic_char = B0_MAGIC_CHAR; +! STRNCPY(b0p->b0_version, "VIM ", 4); + STRNCPY(b0p->b0_version + 4, Version, 6); + long_to_char((long)mfp->mf_page_size, b0p->b0_page_size); + +--- 344,350 ---- + b0p->b0_magic_int = (int)B0_MAGIC_INT; + b0p->b0_magic_short = (short)B0_MAGIC_SHORT; + b0p->b0_magic_char = B0_MAGIC_CHAR; +! mch_memmove(b0p->b0_version, "VIM ", 4); + STRNCPY(b0p->b0_version + 4, Version, 6); + long_to_char((long)mfp->mf_page_size, b0p->b0_page_size); + +*** ../vim-8.1.0022/src/version.c 2018-05-23 21:53:48.356478969 +0200 +--- src/version.c 2018-05-26 17:32:05.633850332 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 23, + /**/ + +-- +A salesperson says: Translation: +"backward compatible" Old technology +"Premium" Overpriced +"Can't keep it on the shelf" Unavailable +"Stands alone" Piece of shit +"Proprietary" Incompatible + (Scott Adams - The Dilbert principle) + + /// 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 /// diff --git a/data/vim/patches/8.1.0024 b/data/vim/patches/8.1.0024 new file mode 100644 index 000000000..eb0deec55 --- /dev/null +++ b/data/vim/patches/8.1.0024 @@ -0,0 +1,105 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0024 +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.0024 +Problem: % command not testded on #ifdef and comment. +Solution: Add tests. (Dominique Pelle, closes #2956) +Files: src/testdir/test_goto.vim + + +*** ../vim-8.1.0023/src/testdir/test_goto.vim 2017-04-20 18:35:04.000000000 +0200 +--- src/testdir/test_goto.vim 2018-05-26 18:36:54.076751185 +0200 +*************** +*** 309,311 **** +--- 309,373 ---- + \ ] + call XTest_goto_decl('1gd', lines, 11, 11) + endfunc ++ ++ func Test_motion_if_elif_else_endif() ++ new ++ a ++ /* Test pressing % on #if, #else #elsif and #endif, ++ * with nested #if ++ */ ++ #if FOO ++ /* ... */ ++ # if BAR ++ /* ... */ ++ # endif ++ #elif BAR ++ /* ... */ ++ #else ++ /* ... */ ++ #endif ++ . ++ /#if FOO ++ norm % ++ call assert_equal([9, 1], getpos('.')[1:2]) ++ norm % ++ call assert_equal([11, 1], getpos('.')[1:2]) ++ norm % ++ call assert_equal([13, 1], getpos('.')[1:2]) ++ norm % ++ call assert_equal([4, 1], getpos('.')[1:2]) ++ /# if BAR ++ norm $% ++ call assert_equal([8, 1], getpos('.')[1:2]) ++ norm $% ++ call assert_equal([6, 1], getpos('.')[1:2]) ++ ++ bw! ++ endfunc ++ ++ func Test_motion_c_comment() ++ new ++ a ++ /* ++ * Test pressing % on beginning/end ++ * of C comments. ++ */ ++ /* Another comment */ ++ . ++ norm gg0% ++ call assert_equal([4, 3], getpos('.')[1:2]) ++ norm % ++ call assert_equal([1, 1], getpos('.')[1:2]) ++ norm gg0l% ++ call assert_equal([4, 3], getpos('.')[1:2]) ++ norm h% ++ call assert_equal([1, 1], getpos('.')[1:2]) ++ ++ norm G^ ++ norm % ++ call assert_equal([5, 21], getpos('.')[1:2]) ++ norm % ++ call assert_equal([5, 1], getpos('.')[1:2]) ++ ++ bw! ++ endfunc +*** ../vim-8.1.0023/src/version.c 2018-05-26 17:35:19.717625256 +0200 +--- src/version.c 2018-05-26 18:37:48.024690943 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 24, + /**/ + +-- +The fastest way to get an engineer to solve a problem is to declare that the +problem is unsolvable. No engineer can walk away from an unsolvable problem +until it's solved. + (Scott Adams - The Dilbert principle) + + /// 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 /// diff --git a/data/vim/patches/8.1.0025 b/data/vim/patches/8.1.0025 new file mode 100644 index 000000000..90c8657c1 --- /dev/null +++ b/data/vim/patches/8.1.0025 @@ -0,0 +1,169 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0025 +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.0025 +Problem: No test for the undofile() function. +Solution: Add test. (Dominique Pelle, closes #2958) +Files: src/testdir/test_undo.vim + + +*** ../vim-8.1.0024/src/testdir/test_undo.vim 2018-02-06 22:06:44.000000000 +0100 +--- src/testdir/test_undo.vim 2018-05-26 18:45:22.924163341 +0200 +*************** +*** 85,91 **** + func FillBuffer() + for i in range(1,13) + put=i +! " Set 'undolevels' to split undo. + exe "setg ul=" . &g:ul + endfor + endfunc +--- 85,91 ---- + func FillBuffer() + for i in range(1,13) + put=i +! " Set 'undolevels' to split undo. + exe "setg ul=" . &g:ul + endfor + endfunc +*************** +*** 193,211 **** + new + set ul=100 + +! let a=execute('undolist') + call assert_equal("\nNothing to undo", a) + + " 1 leaf (2 changes). + call feedkeys('achange1', 'xt') + call feedkeys('achange2', 'xt') +! let a=execute('undolist') + call assert_match("^\nnumber changes when *saved\n *2 *2 .*$", a) + + " 2 leaves. + call feedkeys('u', 'xt') + call feedkeys('achange3\<Esc>', 'xt') +! let a=execute('undolist') + call assert_match("^\nnumber changes when *saved\n *2 *2 *.*\n *3 *2 .*$", a) + close! + endfunc +--- 193,211 ---- + new + set ul=100 + +! let a = execute('undolist') + call assert_equal("\nNothing to undo", a) + + " 1 leaf (2 changes). + call feedkeys('achange1', 'xt') + call feedkeys('achange2', 'xt') +! let a = execute('undolist') + call assert_match("^\nnumber changes when *saved\n *2 *2 .*$", a) + + " 2 leaves. + call feedkeys('u', 'xt') + call feedkeys('achange3\<Esc>', 'xt') +! let a = execute('undolist') + call assert_match("^\nnumber changes when *saved\n *2 *2 *.*\n *3 *2 .*$", a) + close! + endfunc +*************** +*** 339,345 **** + " Also test this in an empty buffer. + func Test_cmd_in_reg_undo() + enew! +! let @a="Ox\<Esc>jAy\<Esc>kdd" + edit +/^$ test_undo.vim + normal @au + call assert_equal(0, &modified) +--- 339,345 ---- + " Also test this in an empty buffer. + func Test_cmd_in_reg_undo() + enew! +! let @a = "Ox\<Esc>jAy\<Esc>kdd" + edit +/^$ test_undo.vim + normal @au + call assert_equal(0, &modified) +*************** +*** 348,354 **** + normal @au + call assert_equal(0, &modified) + only! +! let @a='' + endfunc + + " This used to cause an illegal memory access +--- 348,354 ---- + normal @au + call assert_equal(0, &modified) + only! +! let @a = '' + endfunc + + " This used to cause an illegal memory access +*************** +*** 410,412 **** +--- 410,444 ---- + exe "norm." + bwipe! + endfunc ++ ++ funct Test_undofile() ++ " Test undofile() without setting 'undodir'. ++ if has('persistent_undo') ++ call assert_equal(fnamemodify('.Xundofoo.un~', ':p'), undofile('Xundofoo')) ++ else ++ call assert_equal('', undofile('Xundofoo')) ++ endif ++ call assert_equal('', undofile('')) ++ ++ " Test undofile() with 'undodir' set to to an existing directory. ++ call mkdir('Xundodir') ++ set undodir=Xundodir ++ let cwd = getcwd() ++ if has('win32') ++ " Replace windows drive such as C:... into C%... ++ let cwd = substitute(cwd, '^\([A-Z]\):', '\1%', 'g') ++ endif ++ let cwd = substitute(cwd . '/Xundofoo', '/', '%', 'g') ++ if has('persistent_undo') ++ call assert_equal('Xundodir/' . cwd, undofile('Xundofoo')) ++ else ++ call assert_equal('', undofile('Xundofoo')) ++ endif ++ call assert_equal('', undofile('')) ++ call delete('Xundodir', 'd') ++ ++ " Test undofile() with 'undodir' set to a non-existing directory. ++ call assert_equal('', undofile('Xundofoo')) ++ ++ set undodir& ++ endfunc +*** ../vim-8.1.0024/src/version.c 2018-05-26 18:39:29.608575858 +0200 +--- src/version.c 2018-05-26 18:43:40.832284081 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 25, + /**/ + +-- +Engineers are always delighted to share wisdom, even in areas in which they +have no experience whatsoever. Their logic provides them with inherent +insight into any field of expertise. This can be a problem when dealing with +the illogical people who believe that knowledge can only be derived through +experience. + (Scott Adams - The Dilbert principle) + + /// 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 /// diff --git a/data/vim/patches/8.1.0026 b/data/vim/patches/8.1.0026 new file mode 100644 index 000000000..c60ab888e --- /dev/null +++ b/data/vim/patches/8.1.0026 @@ -0,0 +1,55 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0026 +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.0026 +Problem: Terminal test fails with very tall terminal. (Tom) +Solution: Fix the terminal window size in the test. +Files: src/testdir/test_terminal.vim + + +*** ../vim-8.1.0025/src/testdir/test_terminal.vim 2018-05-15 23:48:29.000000000 +0200 +--- src/testdir/test_terminal.vim 2018-05-25 21:32:34.698182317 +0200 +*************** +*** 270,276 **** + endfunc + + func Test_terminal_scrollback() +! let buf = Run_shell_in_terminal({}) + set termwinscroll=100 + call writefile(range(150), 'Xtext') + if has('win32') +--- 270,276 ---- + endfunc + + func Test_terminal_scrollback() +! let buf = Run_shell_in_terminal({'term_rows': 15}) + set termwinscroll=100 + call writefile(range(150), 'Xtext') + if has('win32') +*** ../vim-8.1.0025/src/version.c 2018-05-26 18:46:26.276087941 +0200 +--- src/version.c 2018-05-26 18:57:54.230499767 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 26, + /**/ + +-- +For humans, honesty is a matter of degree. Engineers are always honest in +matters of technology and human relationships. That's why it's a good idea +to keep engineers away from customers, romantic interests, and other people +who can't handle the truth. + (Scott Adams - The Dilbert principle) + + /// 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 /// diff --git a/data/vim/patches/8.1.0027 b/data/vim/patches/8.1.0027 new file mode 100644 index 000000000..46f5fd11c --- /dev/null +++ b/data/vim/patches/8.1.0027 @@ -0,0 +1,1480 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0027 +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.0027 +Problem: Difficult to make a plugin that feeds a line to a job. +Solution: Add the nitial code for the "prompt" buftype. +Files: runtime/doc/channel.txt, runtime/doc/eval.txt, + runtime/doc/options.txt, runtime/doc/tags, runtime/doc/todo.txt, + src/Makefile, src/buffer.c, src/channel.c, src/diff.c, src/edit.c, + src/evalfunc.c, src/normal.c, src/ops.c, src/option.c, + src/proto/buffer.pro, src/proto/channel.pro, src/proto/edit.pro, + src/proto/ops.pro, src/structs.h, src/testdir/Make_all.mak, + src/testdir/screendump.vim, src/testdir/test_prompt_buffer.vim + + +*** ../vim-8.1.0026/runtime/doc/channel.txt 2018-05-17 13:40:51.000000000 +0200 +--- runtime/doc/channel.txt 2018-06-03 14:00:04.714957909 +0200 +*************** +*** 22,27 **** +--- 22,28 ---- + 9. Starting a job without a channel |job-start-nochannel| + 10. Job options |job-options| + 11. Controlling a job |job-control| ++ 12. Using a prompt buffer |prompt-buffer| + + {Vi does not have any of these features} + {only when compiled with the |+channel| feature for channel stuff} +*************** +*** 770,774 **** +--- 771,813 ---- + + For more options see |job_stop()|. + ++ ============================================================================== ++ 12. Using a prompt buffer *prompt-buffer* ++ ++ If you want to type input for the job in a Vim window you have a few options: ++ - Use a normal buffer and handle all possible commands yourself. ++ This will be complicated, since there are so many possible commands. ++ - Use a terminal window. This works well if what you type goes directly to ++ the job and the job output is directly displayed in the window. ++ See |terminal-window|. ++ - Use a prompt window. This works well when entering a line for the job in Vim ++ while displaying (possibly filtered) output from the job. ++ ++ A prompt buffer is created by setting 'buftype' to "prompt". You would ++ normally only do that in a newly created buffer. ++ ++ The user can edit and enter one line of text at the very last line of the ++ buffer. When pressing Enter in the prompt line the callback set with ++ |prompt_setcallback()| is invoked. It would normally send the line to a job. ++ Another callback would receive the output from the job and display it in the ++ buffer, below the prompt (and above the next prompt). ++ ++ Only the text in the last line, after the prompt, is editable. The rest of the ++ buffer is not modifiable with Normal mode commands. It can be modified by ++ calling functions, such as |append()|. Using other commands may mess up the ++ buffer. ++ ++ After setting 'buftype' to "prompt" Vim does not automatically start Insert ++ mode, use `:startinsert` if you want to enter Insert mode, so that the user ++ can start typing a line. ++ ++ The text of the prompt can be set with the |prompt_setprompt()| function. ++ ++ The user can go to Normal mode and navigate through the buffer. This can be ++ useful see older output or copy text. ++ ++ Any command that starts Insert mode, such as "a", "i", "A" and "I", will move ++ the cursor to the last line, after the prompt. ++ + + vim:tw=78:ts=8:ft=help:norl: +*** ../vim-8.1.0026/runtime/doc/eval.txt 2018-05-22 20:35:13.550009275 +0200 +--- runtime/doc/eval.txt 2018-06-03 14:00:04.722957906 +0200 +*************** +*** 2294,2299 **** +--- 2294,2302 ---- + pow({x}, {y}) Float {x} to the power of {y} + prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} + printf({fmt}, {expr1}...) String format text ++ prompt_addtext({buf}, {expr}) none add text to a prompt buffer ++ prompt_setprompt({buf}, {text}) none set prompt text ++ prompt_setcallback({buf}, {expr}) none set prompt callback function + pumvisible() Number whether popup menu is visible + pyeval({expr}) any evaluate |Python| expression + py3eval({expr}) any evaluate |python3| expression +*************** +*** 2302,2308 **** + List items from {expr} to {max} + readfile({fname} [, {binary} [, {max}]]) + List get list of lines from file {fname} +! reg_executing() Number get the executing register name + reg_recording() String get the recording register name + reltime([{start} [, {end}]]) List get time value + reltimefloat({time}) Float turn the time value into a Float +--- 2305,2311 ---- + List items from {expr} to {max} + readfile({fname} [, {binary} [, {max}]]) + List get list of lines from file {fname} +! reg_executing() String get the executing register name + reg_recording() String get the recording register name + reltime([{start} [, {end}]]) List get time value + reltimefloat({time}) Float turn the time value into a Float +*************** +*** 4650,4656 **** + from the current buffer. Example: > + getline(1) + < When {lnum} is a String that doesn't start with a +! digit, line() is called to translate the String into a Number. + To get the line under the cursor: > + getline(".") + < When {lnum} is smaller than 1 or bigger than the number of +--- 4653,4659 ---- + from the current buffer. Example: > + getline(1) + < When {lnum} is a String that doesn't start with a +! digit, |line()| is called to translate the String into a Number. + To get the line under the cursor: > + getline(".") + < When {lnum} is smaller than 1 or bigger than the number of +*************** +*** 5822,5828 **** + listing. + + When there is no mapping for {name}, an empty String is +! returned. + + The {name} can have special key names, like in the ":map" + command. +--- 5825,5832 ---- + listing. + + When there is no mapping for {name}, an empty String is +! returned. When the mapping for {name} is empty, then "<Nop>" +! is returned. + + The {name} can have special key names, like in the ":map" + command. +*************** +*** 5889,5897 **** + mapping that matches with {name}, while maparg() only finds a + mapping for {name} exactly. + When there is no mapping that starts with {name}, an empty +! String is returned. If there is one, the rhs of that mapping + is returned. If there are several mappings that start with +! {name}, the rhs of one of them is returned. + The mappings local to the current buffer are checked first, + then the global mappings. + This function can be used to check if a mapping can be added +--- 5893,5902 ---- + mapping that matches with {name}, while maparg() only finds a + mapping for {name} exactly. + When there is no mapping that starts with {name}, an empty +! String is returned. If there is one, the RHS of that mapping + is returned. If there are several mappings that start with +! {name}, the RHS of one of them is returned. This will be +! "<Nop>" if the RHS is empty. + The mappings local to the current buffer are checked first, + then the global mappings. + This function can be used to check if a mapping can be added +*************** +*** 6473,6478 **** +--- 6478,6519 ---- + arguments an error is given. Up to 18 arguments can be used. + + ++ prompt_setprompt({buf}, {text}) *prompt_setprompt()* ++ Set prompt for buffer {buf} to {text}. You most likely want ++ {text} to end in a space. ++ The result is only visible if {buf} has 'buftype' set to ++ "prompt". Example: > ++ call prompt_setprompt(bufnr(''), 'command: ') ++ ++ ++ prompt_setcallback({buf}, {expr}) *prompt_setcallback()* ++ Set prompt callback for buffer {buf} to {expr}. This has only ++ effect if {buf} has 'buftype' set to "prompt". ++ The callback is invoked when pressing Enter. The current ++ buffer will always be the prompt buffer. A new line for a ++ prompt is added before invoking the callback, thus the prompt ++ for which the callback was invoked will be in the last but one ++ line. ++ If the callback wants to add text to the buffer, it must ++ insert it above the last line, since that is where the current ++ prompt is. This can also be done asynchronously. ++ The callback is invoked with one argument, which is the text ++ that was entered at the prompt. This can be an empty string ++ if the user only typed Enter. ++ Example: > ++ call prompt_setcallback(bufnr(''), function('s:TextEntered')) ++ func s:TextEntered(text) ++ if a:text == 'exit' || a:text == 'quit' ++ stopinsert ++ close ++ else ++ call append(line('$') - 1, 'Entered: "' . a:text . '"') ++ " Reset 'modified' to allow the buffer to be closed. ++ set nomodified ++ endif ++ endfunc ++ ++ + pumvisible() *pumvisible()* + Returns non-zero when the popup menu is visible, zero + otherwise. See |ins-completion-menu|. +*** ../vim-8.1.0026/runtime/doc/options.txt 2018-05-17 13:41:41.000000000 +0200 +--- runtime/doc/options.txt 2018-06-03 14:00:04.726957904 +0200 +*************** +*** 1394,1399 **** +--- 1394,1402 ---- + manually) + terminal buffer for a |terminal| (you are not supposed to set + this manually) ++ prompt buffer where only the last line can be edited, meant ++ to be used by a plugin, see |prompt-buffer| ++ {only when compiled with the |+channel| feature} + + This option is used together with 'bufhidden' and 'swapfile' to + specify special kinds of buffers. See |special-buffers|. +*************** +*** 4264,4270 **** + 'imactivatefunc' 'imaf' string (default "") + global + {not in Vi} +! {only available when compiled with |+mbyte|} + This option specifies a function that will be called to + activate or deactivate the Input Method. + It is not used in the GUI. +--- 4267,4274 ---- + 'imactivatefunc' 'imaf' string (default "") + global + {not in Vi} +! {only available when compiled with the |+multi_byte| +! feature} + This option specifies a function that will be called to + activate or deactivate the Input Method. + It is not used in the GUI. +*************** +*** 4316,4322 **** + 'imcmdline' 'imc' boolean (default off) + global + {not in Vi} +! {only available when compiled with |+mbyte|} + When set the Input Method is always on when starting to edit a command + line, unless entering a search pattern (see 'imsearch' for that). + Setting this option is useful when your input method allows entering +--- 4320,4327 ---- + 'imcmdline' 'imc' boolean (default off) + global + {not in Vi} +! {only available when compiled with the |+multi_byte| +! feature} + When set the Input Method is always on when starting to edit a command + line, unless entering a search pattern (see 'imsearch' for that). + Setting this option is useful when your input method allows entering +*************** +*** 4327,4333 **** + 'imdisable' 'imd' boolean (default off, on for some systems (SGI)) + global + {not in Vi} +! {only available when compiled with |+mbyte|} + When set the Input Method is never used. This is useful to disable + the IM when it doesn't work properly. + Currently this option is on by default for SGI/IRIX machines. This +--- 4332,4339 ---- + 'imdisable' 'imd' boolean (default off, on for some systems (SGI)) + global + {not in Vi} +! {only available when compiled with the |+multi_byte| +! feature} + When set the Input Method is never used. This is useful to disable + the IM when it doesn't work properly. + Currently this option is on by default for SGI/IRIX machines. This +*************** +*** 4380,4386 **** + 'imstatusfunc' 'imsf' string (default "") + global + {not in Vi} +! {only available when compiled with |+mbyte|} + This option specifies a function that is called to obtain the status + of Input Method. It must return a positive number when IME is active. + It is not used in the GUI. +--- 4386,4393 ---- + 'imstatusfunc' 'imsf' string (default "") + global + {not in Vi} +! {only available when compiled with the |+multi_byte| +! feature} + This option specifies a function that is called to obtain the status + of Input Method. It must return a positive number when IME is active. + It is not used in the GUI. +*************** +*** 5187,5193 **** + more depth, set 'maxfuncdepth' to a bigger number. But this will use + more memory, there is the danger of failing when memory is exhausted. + Increasing this limit above 200 also changes the maximum for Ex +! command resursion, see |E169|. + See also |:function|. + + *'maxmapdepth'* *'mmd'* *E223* +--- 5194,5200 ---- + more depth, set 'maxfuncdepth' to a bigger number. But this will use + more memory, there is the danger of failing when memory is exhausted. + Increasing this limit above 200 also changes the maximum for Ex +! command recursion, see |E169|. + See also |:function|. + + *'maxmapdepth'* *'mmd'* *E223* +*** ../vim-8.1.0026/runtime/doc/tags 2018-05-17 16:27:20.000000000 +0200 +--- runtime/doc/tags 2018-06-03 14:00:04.730957903 +0200 +*************** +*** 4749,4754 **** +--- 4749,4755 ---- + PHP_BracesAtCodeLevel indent.txt /*PHP_BracesAtCodeLevel* + PHP_autoformatcomment indent.txt /*PHP_autoformatcomment* + PHP_default_indenting indent.txt /*PHP_default_indenting* ++ PHP_noArrowMatching indent.txt /*PHP_noArrowMatching* + PHP_outdentSLComments indent.txt /*PHP_outdentSLComments* + PHP_outdentphpescape indent.txt /*PHP_outdentphpescape* + PHP_removeCRwhenUnix indent.txt /*PHP_removeCRwhenUnix* +*************** +*** 8058,8063 **** +--- 8059,8067 ---- + progname-variable eval.txt /*progname-variable* + progpath-variable eval.txt /*progpath-variable* + progress.vim syntax.txt /*progress.vim* ++ prompt-buffer channel.txt /*prompt-buffer* ++ prompt_setcallback() eval.txt /*prompt_setcallback()* ++ prompt_setprompt() eval.txt /*prompt_setprompt()* + pronounce intro.txt /*pronounce* + psql ft_sql.txt /*psql* + ptcap.vim syntax.txt /*ptcap.vim* +*************** +*** 8198,8203 **** +--- 8202,8209 ---- + ref intro.txt /*ref* + reference intro.txt /*reference* + reference_toc help.txt /*reference_toc* ++ reg_executing() eval.txt /*reg_executing()* ++ reg_recording() eval.txt /*reg_recording()* + regexp pattern.txt /*regexp* + regexp-changes-5.4 version5.txt /*regexp-changes-5.4* + register sponsor.txt /*register* +*** ../vim-8.1.0026/runtime/doc/todo.txt 2018-05-17 13:42:03.000000000 +0200 +--- runtime/doc/todo.txt 2018-06-03 14:00:04.730957903 +0200 +*************** +*** 38,48 **** + *known-bugs* + -------------------- Known bugs and current work ----------------------- + + Terminal emulator window: +! - Win32: Termdebug doesn't work, because gdb does not support mi2. +! This plugin: https://github.com/cpiger/NeoDebug runs gdb as a job, +! redirecting input and output. +! Open new console for for program with: "set new-console on" + - Win32: Redirecting input does not work, half of Test_terminal_redir_file() + is disabled. + - Win32: Redirecting output works but includes escape sequences. +--- 38,60 ---- + *known-bugs* + -------------------- Known bugs and current work ----------------------- + ++ Prompt buffer: ++ - Add a command line history. ++ - delay next prompt until plugin gives OK? ++ end? ++ + Terminal emulator window: +! - With a vertical split only one window is updated. (Linwei, 2018 Jun 2, +! #2977) +! - When typing : at the more prompt, instead of entering a new Vim command, the +! : is inserted in the terminal window. Should skip terminal_loop here. +! () +! - How to access selection in Terminal running a shell? (damnskippy, 2018 May +! 27, #29620 When terminal doesn't use the mouse, use modeless selection. +! - Win32: Termdebug doesn't work, because gdb does not support mi2 on a tty. +! This plugin: https://github.com/cpiger/NeoDebug runs gdb as a job, +! redirecting input and output. +! Open new console for for program with: "set new-console on" + - Win32: Redirecting input does not work, half of Test_terminal_redir_file() + is disabled. + - Win32: Redirecting output works but includes escape sequences. +*************** +*** 60,66 **** + after "run". Everything else works, including communication channel. Not + initializing mzscheme avoid the problem, thus it's not some #ifdef. + +! Patch to refactor efm_to_regpat(). (Yegappan Lakshmanan, 2018 May 16, #2924) + + Crash when mixing matchadd and substitute()? (Max Christian Pohle, 2018 May + 13, #2910) Can't reproduce? +--- 73,83 ---- + after "run". Everything else works, including communication channel. Not + initializing mzscheme avoid the problem, thus it's not some #ifdef. + +! Patch to fix that ++bad no longer works. (Christian Brabandt, on #2947) +! +! Does not build with MinGW out of the box: +! - _stat64 is not defined, need to use "struct stat" in vim.h +! - WINVER conflict, should use 0x0600 by default? + + Crash when mixing matchadd and substitute()? (Max Christian Pohle, 2018 May + 13, #2910) Can't reproduce? +*************** +*** 68,76 **** + On Win32 when not in the console and t_Co >= 256, allow using 'tgc'. + (Nobuhiro Takasaki, #2833) Also check t_Co. + +! balloon_show() does not work properly in the terminal. (Ben Jackson, 2017 Dec +! 20, #2481) +! Also see #2352, want better control over balloon, perhaps set the position. + + Errors found with random data: + heap-buffer-overflow in alist_add (#2472) +--- 85,99 ---- + On Win32 when not in the console and t_Co >= 256, allow using 'tgc'. + (Nobuhiro Takasaki, #2833) Also check t_Co. + +! Patch to fix arguments of :edit. (Dominique Pelle, 2018 May 28 #2966) +! +! Ptch to update html syntax. (Jorge Maldonado Ventura, #2974) +! +! Patch to fix that restoring window doesn't work when 'winheight' is large. +! (Darrell Nash, 2018 May 30, #2971) Doesn't work? Issue #2970 +! +! Patch to add completion to :unlet for environment vars. (Jason Franklin, 2018 +! May 30) Last update. + + Errors found with random data: + heap-buffer-overflow in alist_add (#2472) +*************** +*** 78,83 **** +--- 101,122 ---- + More warnings from static analysis: + https://lgtm.com/projects/g/vim/vim/alerts/?mode=list + ++ Patch to make "is" and "as" work bettter. (Jason Franklin, 2018 May 19) ++ ++ Patch to add tests for user and language completion. (Dominique Pelle, 2018 ++ Jun 2, #2978) ++ ++ Using ":file" in quickfix window during an autocommand doesn't work. ++ (Jason Franklin, 2018 May 23) Allow for using it when there is no argument. ++ ++ Pull request #2967: Allow white space in sign text. (Ben Jackson) ++ ++ Patch for xterm and vt320 builtin termcap. (Kouichi Iwamoto, 2018 May 31, ++ #2973) ++ ++ Patch to add more testing for :cd command. (Dominique Pelle, 2018 May 30, ++ #2972) ++ + Script generated by :mksession does not work well if there are windows with + modified buffers + change "silent only" into "silent only!" +*************** +*** 85,100 **** +--- 124,150 ---- + skip "badd fname" if "fname" is already in the buffer list + remove remark about unloading buffers from documentation + ++ Patch to make :help work for tags with a ?. (Hirohito Higashi, 2018 May 28) ++ + Compiler warnings (geeknik, 2017 Oct 26): + - signed integer overflow in do_sub() (#2249) + - signed integer overflow in get_address() (#2248) + - signed integer overflow in getdecchrs() (#2254) + - undefined left shift in get_string_tv() (#2250) + ++ Patch for more quickfix refactoring. (Yegappan Lakshmanan, #2950) ++ + Tests failing for "make testgui" with GTK: + - Test_setbufvar_options() + - Test_exit_callback_interval() + ++ Make balloon_show() work outside of 'balloonexpr'? Users expect it to work: ++ #2948. (related to #1512?) ++ On Win32 it stops showing, because showState is already ShS_SHOWING. ++ balloon_show() does not work properly in the terminal. (Ben Jackson, 2017 Dec ++ 20, #2481) ++ Also see #2352, want better control over balloon, perhaps set the position. ++ + Try out background make plugin: + https://github.com/AndrewVos/vim-make-background + or asyncmake: +*************** +*** 109,114 **** +--- 159,166 ---- + + Cursor in wrong position when line wraps. (#2540) + ++ Patch for Lua support. (Kazunobu Kuriyama, 2018 May 26) ++ + Add an option similar to 'lazyredraw' to skip redrawing while executing a + script or function. + +*************** +*** 120,130 **** + Should add a test for every command line argument. Check coverage for what is + missing: --nofork, -A , -b, -h, etc. + +! Completing a command sometimes results in duplicates, since 7.4.672. +! (Yegappan Lakshmanan, 2018 May 16) +! Duplication of completion suggestions for ":!hom". Issue #539. +! Patch by Christian, 2016 Jan 29 +! Another patch in #2733. + + Improve the installer for MS-Windows. There are a few alternatives: + - Add silent install option. (Shane Lee, #751) +--- 172,179 ---- + Should add a test for every command line argument. Check coverage for what is + missing: --nofork, -A , -b, -h, etc. + +! Patch for variable tabstops. On github (Christian Brabandt, 2014 May 15) +! Update 2018 March 12, #2711 + + Improve the installer for MS-Windows. There are a few alternatives: + - Add silent install option. (Shane Lee, #751) +*************** +*** 141,146 **** +--- 190,198 ---- + + Alternative manpager.vim. (Enno, 2018 Jan 5, #2529) + ++ Patch to use NGETTEXT() in many more places. (Sergey Alyoshin, 2018 May 25) ++ Updated ptach May 27. ++ + Does setting 'cursorline' cause syntax highlighting to slow down? Perhaps is + mess up the cache? (Mike Lee Williams, 2018 Jan 27, #2539) + Also: 'foldtext' is evaluated too often. (Daniel Hahler, #2773) +*************** +*** 149,154 **** +--- 201,207 ---- + with packages under "start". (xtal8, #1994) + + Patch to support "xxd -ps". (Erik Auerswald, 2018 May 1) ++ Lacks a test. + + Column number is wrong when using 'linebreak' and 'wrap'. (Keith Smiley, 2018 + Jan 15, #2555) +*************** +*** 157,164 **** + + Check argument of systemlist(). (Pavlov) + +- Patch to add reg_executing() and reg_recording(). (Hirohito Higashi, #2745) +- + No maintainer for Vietnamese translations. + No maintainer for Simplified Chinese translations. + +--- 210,215 ---- +*************** +*** 1181,1189 **** + Patch: On MS-Windows shellescape() may have to triple double quotes. + (Ingo Karkat, 2015 Jan 16) + +- Patch for variable tabstops. On github (Christian Brabandt, 2014 May 15) +- Update 2018 March 12, #2711 +- + Redo only remembers the last change. Could use "{count}g." to redo an older + change. How does the user know which change? At least have a way to list + them: ":repeats". +--- 1232,1237 ---- +*** ../vim-8.1.0026/src/Makefile 2018-05-19 15:00:48.841017887 +0200 +--- src/Makefile 2018-06-03 14:10:39.298297816 +0200 +*************** +*** 2252,2257 **** +--- 2252,2258 ---- + test_popup \ + test_preview \ + test_profile \ ++ test_prompt_buffer \ + test_put \ + test_python2 \ + test_python3 \ +*** ../vim-8.1.0026/src/buffer.c 2018-05-13 18:00:51.000000000 +0200 +--- src/buffer.c 2018-06-03 14:00:04.730957903 +0200 +*************** +*** 851,856 **** +--- 851,860 ---- + #ifdef FEAT_TERMINAL + free_terminal(buf); + #endif ++ #ifdef FEAT_JOB_CHANNEL ++ vim_free(buf->b_prompt_text); ++ free_callback(buf->b_prompt_callback, buf->b_prompt_partial); ++ #endif + + buf_hashtab_remove(buf); + +*************** +*** 5634,5639 **** +--- 5638,5652 ---- + } + + /* ++ * Return TRUE if "buf" is a prompt buffer. ++ */ ++ int ++ bt_prompt(buf_T *buf) ++ { ++ return buf != NULL && buf->b_p_bt[0] == 'p'; ++ } ++ ++ /* + * Return TRUE if "buf" is a "nofile", "acwrite" or "terminal" buffer. + * This means the buffer name is not a file name. + */ +*************** +*** 5642,5648 **** + { + return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f') + || buf->b_p_bt[0] == 'a' +! || buf->b_p_bt[0] == 't'); + } + + /* +--- 5655,5662 ---- + { + return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f') + || buf->b_p_bt[0] == 'a' +! || buf->b_p_bt[0] == 't' +! || buf->b_p_bt[0] == 'p'); + } + + /* +*************** +*** 5651,5657 **** + int + bt_dontwrite(buf_T *buf) + { +! return buf != NULL && (buf->b_p_bt[0] == 'n' || buf->b_p_bt[0] == 't'); + } + + int +--- 5665,5673 ---- + int + bt_dontwrite(buf_T *buf) + { +! return buf != NULL && (buf->b_p_bt[0] == 'n' +! || buf->b_p_bt[0] == 't' +! || buf->b_p_bt[0] == 'p'); + } + + int +*** ../vim-8.1.0026/src/channel.c 2018-05-13 14:00:48.000000000 +0200 +--- src/channel.c 2018-06-03 14:21:30.877730377 +0200 +*************** +*** 5836,5839 **** +--- 5836,5873 ---- + return 1; + } + ++ void ++ invoke_prompt_callback(void) ++ { ++ typval_T rettv; ++ int dummy; ++ typval_T argv[2]; ++ char_u *text; ++ char_u *prompt; ++ linenr_T lnum = curbuf->b_ml.ml_line_count; ++ ++ // Add a new line for the prompt before invoking the callback, so that ++ // text can always be inserted above the last line. ++ ml_append(lnum, (char_u *)"", 0, FALSE); ++ curwin->w_cursor.lnum = lnum + 1; ++ curwin->w_cursor.col = 0; ++ ++ if (curbuf->b_prompt_callback == NULL) ++ return; ++ text = ml_get(lnum); ++ prompt = prompt_text(); ++ if (STRLEN(text) >= STRLEN(prompt)) ++ text += STRLEN(prompt); ++ argv[0].v_type = VAR_STRING; ++ argv[0].vval.v_string = vim_strsave(text); ++ argv[1].v_type = VAR_UNKNOWN; ++ ++ call_func(curbuf->b_prompt_callback, ++ (int)STRLEN(curbuf->b_prompt_callback), ++ &rettv, 1, argv, NULL, 0L, 0L, &dummy, TRUE, ++ curbuf->b_prompt_partial, NULL); ++ clear_tv(&argv[0]); ++ clear_tv(&rettv); ++ } ++ + #endif /* FEAT_JOB_CHANNEL */ +*** ../vim-8.1.0026/src/diff.c 2018-04-29 12:16:29.000000000 +0200 +--- src/diff.c 2018-06-03 14:00:04.730957903 +0200 +*************** +*** 2141,2146 **** +--- 2141,2153 ---- + exarg_T ea; + char_u buf[30]; + ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf)) ++ { ++ vim_beep(BO_OPER); ++ return; ++ } ++ #endif + if (count == 0) + ea.arg = (char_u *)""; + else +*** ../vim-8.1.0026/src/edit.c 2018-05-22 20:35:13.562009272 +0200 +--- src/edit.c 2018-06-03 14:25:28.549560429 +0200 +*************** +*** 203,208 **** +--- 203,211 ---- + + static void ins_redraw(int ready); + static void ins_ctrl_v(void); ++ #ifdef FEAT_JOB_CHANNEL ++ static void init_prompt(int cmdchar_todo); ++ #endif + static void undisplay_dollar(void); + static void insert_special(int, int, int); + static void internal_format(int textwidth, int second_indent, int flags, int format_only, int c); +*************** +*** 351,356 **** +--- 354,362 ---- + int inserted_space = FALSE; /* just inserted a space */ + int replaceState = REPLACE; + int nomove = FALSE; /* don't move cursor on return */ ++ #ifdef FEAT_JOB_CHANNEL ++ int cmdchar_todo = cmdchar; ++ #endif + + /* Remember whether editing was restarted after CTRL-O. */ + did_restart_edit = restart_edit; +*************** +*** 707,712 **** +--- 713,726 ---- + foldCheckClose(); + #endif + ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf)) ++ { ++ init_prompt(cmdchar_todo); ++ cmdchar_todo = NUL; ++ } ++ #endif ++ + /* + * If we inserted a character at the last position of the last line in + * the window, scroll the window one line up. This avoids an extra +*************** +*** 1374,1379 **** +--- 1388,1405 ---- + goto doESCkey; + } + #endif ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf)) ++ { ++ buf_T *buf = curbuf; ++ ++ invoke_prompt_callback(); ++ if (curbuf != buf) ++ // buffer changed, get out of Insert mode ++ goto doESCkey; ++ break; ++ } ++ #endif + if (ins_eol(c) == FAIL && !p_im) + goto doESCkey; /* out of memory */ + auto_format(FALSE, FALSE); +*************** +*** 1808,1813 **** +--- 1834,1891 ---- + } + } + ++ #if defined(FEAT_JOB_CHANNEL) || defined(PROTO) ++ /* ++ * Return the effective prompt for the current buffer. ++ */ ++ char_u * ++ prompt_text(void) ++ { ++ if (curbuf->b_prompt_text == NULL) ++ return (char_u *)"% "; ++ return curbuf->b_prompt_text; ++ } ++ ++ /* ++ * Prepare for prompt mode: Make sure the last line has the prompt text. ++ * Move the cursor to this line. ++ */ ++ static void ++ init_prompt(int cmdchar_todo) ++ { ++ char_u *prompt = prompt_text(); ++ char_u *text; ++ ++ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count; ++ text = ml_get_curline(); ++ if (STRNCMP(text, prompt, STRLEN(prompt)) != 0) ++ { ++ // prompt is missing, insert it or append a line with it ++ if (*text == NUL) ++ ml_replace(curbuf->b_ml.ml_line_count, prompt, TRUE); ++ else ++ ml_append(curbuf->b_ml.ml_line_count, prompt, 0, FALSE); ++ curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count; ++ coladvance((colnr_T)MAXCOL); ++ changed_bytes(curbuf->b_ml.ml_line_count, 0); ++ } ++ if (cmdchar_todo == 'A') ++ coladvance((colnr_T)MAXCOL); ++ if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt)) ++ curwin->w_cursor.col = STRLEN(prompt); ++ } ++ ++ /* ++ * Return TRUE if the cursor is in the editable position of the prompt line. ++ */ ++ int ++ prompt_curpos_editable() ++ { ++ return curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count ++ && curwin->w_cursor.col >= (int)STRLEN(prompt_text()); ++ } ++ #endif ++ + /* + * Undo the previous edit_putchar(). + */ +*** ../vim-8.1.0026/src/evalfunc.c 2018-05-22 20:35:13.554009274 +0200 +--- src/evalfunc.c 2018-06-03 14:06:18.146613314 +0200 +*************** +*** 294,299 **** +--- 294,303 ---- + #endif + static void f_prevnonblank(typval_T *argvars, typval_T *rettv); + static void f_printf(typval_T *argvars, typval_T *rettv); ++ #ifdef FEAT_JOB_CHANNEL ++ static void f_prompt_setcallback(typval_T *argvars, typval_T *rettv); ++ static void f_prompt_setprompt(typval_T *argvars, typval_T *rettv); ++ #endif + static void f_pumvisible(typval_T *argvars, typval_T *rettv); + #ifdef FEAT_PYTHON3 + static void f_py3eval(typval_T *argvars, typval_T *rettv); +*************** +*** 744,749 **** +--- 748,757 ---- + #endif + {"prevnonblank", 1, 1, f_prevnonblank}, + {"printf", 1, 19, f_printf}, ++ #ifdef FEAT_JOB_CHANNEL ++ {"prompt_setcallback", 2, 2, f_prompt_setcallback}, ++ {"prompt_setprompt", 2, 2, f_prompt_setprompt}, ++ #endif + {"pumvisible", 0, 0, f_pumvisible}, + #ifdef FEAT_PYTHON3 + {"py3eval", 1, 1, f_py3eval}, +*************** +*** 1240,1245 **** +--- 1248,1258 ---- + appended_lines_mark(lnum, added); + if (curwin->w_cursor.lnum > lnum) + curwin->w_cursor.lnum += added; ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && (State & INSERT)) ++ // show the line with the prompt ++ update_topline(); ++ #endif + } + else + rettv->vval.v_number = 1; /* Failed */ +*************** +*** 8379,8384 **** +--- 8392,8448 ---- + did_emsg |= saved_did_emsg; + } + ++ #ifdef FEAT_JOB_CHANNEL ++ /* ++ * "prompt_setcallback({buffer}, {callback})" function ++ */ ++ static void ++ f_prompt_setcallback(typval_T *argvars, typval_T *rettv UNUSED) ++ { ++ buf_T *buf; ++ char_u *callback; ++ partial_T *partial; ++ ++ if (check_secure()) ++ return; ++ buf = get_buf_tv(&argvars[0], FALSE); ++ if (buf == NULL) ++ return; ++ ++ callback = get_callback(&argvars[1], &partial); ++ if (callback == NULL) ++ return; ++ ++ free_callback(buf->b_prompt_callback, buf->b_prompt_partial); ++ if (partial == NULL) ++ buf->b_prompt_callback = vim_strsave(callback); ++ else ++ /* pointer into the partial */ ++ buf->b_prompt_callback = callback; ++ buf->b_prompt_partial = partial; ++ } ++ ++ /* ++ * "prompt_setprompt({buffer}, {text})" function ++ */ ++ static void ++ f_prompt_setprompt(typval_T *argvars, typval_T *rettv UNUSED) ++ { ++ buf_T *buf; ++ char_u *text; ++ ++ if (check_secure()) ++ return; ++ buf = get_buf_tv(&argvars[0], FALSE); ++ if (buf == NULL) ++ return; ++ ++ text = get_tv_string(&argvars[1]); ++ vim_free(buf->b_prompt_text); ++ buf->b_prompt_text = vim_strsave(text); ++ } ++ #endif ++ + /* + * "pumvisible()" function + */ +*** ../vim-8.1.0026/src/normal.c 2018-05-22 20:35:13.558009273 +0200 +--- src/normal.c 2018-06-03 14:00:04.734957901 +0200 +*************** +*** 4180,4185 **** +--- 4180,4190 ---- + static void + nv_addsub(cmdarg_T *cap) + { ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && !prompt_curpos_editable()) ++ clearopbeep(cap->oap); ++ else ++ #endif + if (!VIsual_active && cap->oap->op_type == OP_NOP) + { + prep_redo_cmd(cap); +*************** +*** 6214,6219 **** +--- 6219,6235 ---- + cmdwin_result = CAR; + else + #endif ++ #ifdef FEAT_JOB_CHANNEL ++ /* In a prompt buffer a <CR> in the last line invokes the callback. */ ++ if (bt_prompt(curbuf) && cap->cmdchar == CAR ++ && curwin->w_cursor.lnum == curbuf->b_ml.ml_line_count) ++ { ++ invoke_prompt_callback(); ++ if (restart_edit == 0) ++ restart_edit = 'a'; ++ } ++ else ++ #endif + { + cap->oap->motion_type = MLINE; + if (cursor_down(cap->count1, cap->oap->op_type == OP_NOP) == FAIL) +*************** +*** 6972,6977 **** +--- 6988,7000 ---- + { + if (!checkclearopq(cap->oap)) + { ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf)) ++ { ++ clearopbeep(cap->oap); ++ return; ++ } ++ #endif + u_undo((int)cap->count1); + curwin->w_set_curswant = TRUE; + } +*************** +*** 6989,6994 **** +--- 7012,7024 ---- + + if (checkclearop(cap->oap)) + return; ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && !prompt_curpos_editable()) ++ { ++ clearopbeep(cap->oap); ++ return; ++ } ++ #endif + + /* get another character */ + if (cap->nchar == Ctrl_V) +*************** +*** 7465,7470 **** +--- 7495,7507 ---- + if (term_swap_diff() == OK) + return; + #endif ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && !prompt_curpos_editable()) ++ { ++ clearopbeep(cap->oap); ++ return; ++ } ++ #endif + if (VIsual_active) /* "vs" and "vS" are the same as "vc" */ + { + if (cap->cmdchar == 'S') +*************** +*** 8570,8576 **** +--- 8607,8622 ---- + nv_tilde(cmdarg_T *cap) + { + if (!p_to && !VIsual_active && cap->oap->op_type != OP_TILDE) ++ { ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && !prompt_curpos_editable()) ++ { ++ clearopbeep(cap->oap); ++ return; ++ } ++ #endif + n_swapchar(cap); ++ } + else + nv_operator(cap); + } +*************** +*** 8585,8590 **** +--- 8631,8643 ---- + int op_type; + + op_type = get_op_type(cap->cmdchar, cap->nchar); ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && op_is_change(op_type) && !prompt_curpos_editable()) ++ { ++ clearopbeep(cap->oap); ++ return; ++ } ++ #endif + + if (op_type == cap->oap->op_type) /* double operator works on lines */ + nv_lineop(cap); +*************** +*** 9426,9431 **** +--- 9479,9490 ---- + #endif + clearopbeep(cap->oap); + } ++ #ifdef FEAT_JOB_CHANNEL ++ else if (bt_prompt(curbuf) && !prompt_curpos_editable()) ++ { ++ clearopbeep(cap->oap); ++ } ++ #endif + else + { + dir = (cap->cmdchar == 'P' +*************** +*** 9551,9556 **** +--- 9610,9621 ---- + #endif + if (VIsual_active) /* switch start and end of visual */ + v_swap_corners(cap->cmdchar); ++ #ifdef FEAT_JOB_CHANNEL ++ else if (bt_prompt(curbuf)) ++ { ++ clearopbeep(cap->oap); ++ } ++ #endif + else + n_opencmd(cap); + } +*** ../vim-8.1.0026/src/ops.c 2018-05-22 20:35:13.558009273 +0200 +--- src/ops.c 2018-06-03 14:00:04.734957901 +0200 +*************** +*** 126,168 **** + static int fmt_check_par(linenr_T); + #endif + + /* + * The names of operators. + * IMPORTANT: Index must correspond with defines in vim.h!!! +! * The third field indicates whether the operator always works on lines. + */ + static char opchars[][3] = + { +! {NUL, NUL, FALSE}, /* OP_NOP */ +! {'d', NUL, FALSE}, /* OP_DELETE */ +! {'y', NUL, FALSE}, /* OP_YANK */ +! {'c', NUL, FALSE}, /* OP_CHANGE */ +! {'<', NUL, TRUE}, /* OP_LSHIFT */ +! {'>', NUL, TRUE}, /* OP_RSHIFT */ +! {'!', NUL, TRUE}, /* OP_FILTER */ +! {'g', '~', FALSE}, /* OP_TILDE */ +! {'=', NUL, TRUE}, /* OP_INDENT */ +! {'g', 'q', TRUE}, /* OP_FORMAT */ +! {':', NUL, TRUE}, /* OP_COLON */ +! {'g', 'U', FALSE}, /* OP_UPPER */ +! {'g', 'u', FALSE}, /* OP_LOWER */ +! {'J', NUL, TRUE}, /* DO_JOIN */ +! {'g', 'J', TRUE}, /* DO_JOIN_NS */ +! {'g', '?', FALSE}, /* OP_ROT13 */ +! {'r', NUL, FALSE}, /* OP_REPLACE */ +! {'I', NUL, FALSE}, /* OP_INSERT */ +! {'A', NUL, FALSE}, /* OP_APPEND */ +! {'z', 'f', TRUE}, /* OP_FOLD */ +! {'z', 'o', TRUE}, /* OP_FOLDOPEN */ +! {'z', 'O', TRUE}, /* OP_FOLDOPENREC */ +! {'z', 'c', TRUE}, /* OP_FOLDCLOSE */ +! {'z', 'C', TRUE}, /* OP_FOLDCLOSEREC */ +! {'z', 'd', TRUE}, /* OP_FOLDDEL */ +! {'z', 'D', TRUE}, /* OP_FOLDDELREC */ +! {'g', 'w', TRUE}, /* OP_FORMAT2 */ +! {'g', '@', FALSE}, /* OP_FUNCTION */ +! {Ctrl_A, NUL, FALSE}, /* OP_NR_ADD */ +! {Ctrl_X, NUL, FALSE}, /* OP_NR_SUB */ + }; + + /* +--- 126,172 ---- + static int fmt_check_par(linenr_T); + #endif + ++ // Flags for third item in "opchars". ++ #define OPF_LINES 1 // operator always works on lines ++ #define OPF_CHANGE 2 // operator changes text ++ + /* + * The names of operators. + * IMPORTANT: Index must correspond with defines in vim.h!!! +! * The third field holds OPF_ flags. + */ + static char opchars[][3] = + { +! {NUL, NUL, 0}, // OP_NOP +! {'d', NUL, OPF_CHANGE}, // OP_DELETE +! {'y', NUL, 0}, // OP_YANK +! {'c', NUL, OPF_CHANGE}, // OP_CHANGE +! {'<', NUL, OPF_LINES | OPF_CHANGE}, // OP_LSHIFT +! {'>', NUL, OPF_LINES | OPF_CHANGE}, // OP_RSHIFT +! {'!', NUL, OPF_LINES | OPF_CHANGE}, // OP_FILTER +! {'g', '~', OPF_CHANGE}, // OP_TILDE +! {'=', NUL, OPF_LINES | OPF_CHANGE}, // OP_INDENT +! {'g', 'q', OPF_LINES | OPF_CHANGE}, // OP_FORMAT +! {':', NUL, OPF_LINES}, // OP_COLON +! {'g', 'U', OPF_CHANGE}, // OP_UPPER +! {'g', 'u', OPF_CHANGE}, // OP_LOWER +! {'J', NUL, OPF_LINES | OPF_CHANGE}, // DO_JOIN +! {'g', 'J', OPF_LINES | OPF_CHANGE}, // DO_JOIN_NS +! {'g', '?', OPF_CHANGE}, // OP_ROT13 +! {'r', NUL, OPF_CHANGE}, // OP_REPLACE +! {'I', NUL, OPF_CHANGE}, // OP_INSERT +! {'A', NUL, OPF_CHANGE}, // OP_APPEND +! {'z', 'f', OPF_LINES}, // OP_FOLD +! {'z', 'o', OPF_LINES}, // OP_FOLDOPEN +! {'z', 'O', OPF_LINES}, // OP_FOLDOPENREC +! {'z', 'c', OPF_LINES}, // OP_FOLDCLOSE +! {'z', 'C', OPF_LINES}, // OP_FOLDCLOSEREC +! {'z', 'd', OPF_LINES}, // OP_FOLDDEL +! {'z', 'D', OPF_LINES}, // OP_FOLDDELREC +! {'g', 'w', OPF_LINES | OPF_CHANGE}, // OP_FORMAT2 +! {'g', '@', OPF_CHANGE}, // OP_FUNCTION +! {Ctrl_A, NUL, OPF_CHANGE}, // OP_NR_ADD +! {Ctrl_X, NUL, OPF_CHANGE}, // OP_NR_SUB + }; + + /* +*************** +*** 201,207 **** + int + op_on_lines(int op) + { +! return opchars[op][2]; + } + + /* +--- 205,220 ---- + int + op_on_lines(int op) + { +! return opchars[op][2] & OPF_LINES; +! } +! +! /* +! * Return TRUE if operator "op" changes text. +! */ +! int +! op_is_change(int op) +! { +! return opchars[op][2] & OPF_CHANGE; + } + + /* +*** ../vim-8.1.0026/src/option.c 2018-05-05 16:27:58.000000000 +0200 +--- src/option.c 2018-06-03 14:00:04.738957899 +0200 +*************** +*** 3229,3235 **** + static char *(p_scbopt_values[]) = {"ver", "hor", "jump", NULL}; + static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL}; + static char *(p_ead_values[]) = {"both", "ver", "hor", NULL}; +! static char *(p_buftype_values[]) = {"nofile", "nowrite", "quickfix", "help", "terminal", "acwrite", NULL}; + static char *(p_bufhidden_values[]) = {"hide", "unload", "delete", "wipe", NULL}; + static char *(p_bs_values[]) = {"indent", "eol", "start", NULL}; + #ifdef FEAT_FOLDING +--- 3229,3235 ---- + static char *(p_scbopt_values[]) = {"ver", "hor", "jump", NULL}; + static char *(p_debug_values[]) = {"msg", "throw", "beep", NULL}; + static char *(p_ead_values[]) = {"both", "ver", "hor", NULL}; +! static char *(p_buftype_values[]) = {"nofile", "nowrite", "quickfix", "help", "terminal", "acwrite", "prompt", NULL}; + static char *(p_bufhidden_values[]) = {"hide", "unload", "delete", "wipe", NULL}; + static char *(p_bs_values[]) = {"indent", "eol", "start", NULL}; + #ifdef FEAT_FOLDING +*** ../vim-8.1.0026/src/proto/buffer.pro 2018-05-17 13:52:29.000000000 +0200 +--- src/proto/buffer.pro 2018-06-03 14:00:04.738957899 +0200 +*************** +*** 59,64 **** +--- 59,65 ---- + int bt_quickfix(buf_T *buf); + int bt_terminal(buf_T *buf); + int bt_help(buf_T *buf); ++ int bt_prompt(buf_T *buf); + int bt_nofile(buf_T *buf); + int bt_dontwrite(buf_T *buf); + int bt_dontwrite_msg(buf_T *buf); +*** ../vim-8.1.0026/src/proto/channel.pro 2018-05-17 13:52:58.000000000 +0200 +--- src/proto/channel.pro 2018-06-03 14:00:04.738957899 +0200 +*************** +*** 71,74 **** +--- 71,75 ---- + void job_info(job_T *job, dict_T *dict); + void job_info_all(list_T *l); + int job_stop(job_T *job, typval_T *argvars, char *type); ++ void invoke_prompt_callback(void); + /* vim: set ft=c : */ +*** ../vim-8.1.0026/src/proto/edit.pro 2018-05-17 13:52:32.000000000 +0200 +--- src/proto/edit.pro 2018-06-03 14:22:02.357707185 +0200 +*************** +*** 1,6 **** +--- 1,8 ---- + /* edit.c */ + int edit(int cmdchar, int startln, long count); + void edit_putchar(int c, int highlight); ++ char_u *prompt_text(void); ++ int prompt_curpos_editable(void); + void edit_unputchar(void); + void display_dollar(colnr_T col); + void change_indent(int type, int amount, int round, int replaced, int call_changed_bytes); +*** ../vim-8.1.0026/src/proto/ops.pro 2018-05-17 13:52:47.000000000 +0200 +--- src/proto/ops.pro 2018-06-03 14:00:04.742957898 +0200 +*************** +*** 1,6 **** +--- 1,7 ---- + /* ops.c */ + int get_op_type(int char1, int char2); + int op_on_lines(int op); ++ int op_is_change(int op); + int get_op_char(int optype); + int get_extra_op_char(int optype); + void op_shift(oparg_T *oap, int curs_top, int amount); +*** ../vim-8.1.0026/src/structs.h 2018-05-13 14:01:15.000000000 +0200 +--- src/structs.h 2018-06-03 14:00:04.742957898 +0200 +*************** +*** 2356,2361 **** +--- 2356,2366 ---- + + int b_shortname; /* this file has an 8.3 file name */ + ++ #ifdef FEAT_JOB_CHANNEL ++ char_u *b_prompt_text; // set by prompt_setprompt() ++ char_u *b_prompt_callback; // set by prompt_setcallback() ++ partial_T *b_prompt_partial; // set by prompt_setcallback() ++ #endif + #ifdef FEAT_MZSCHEME + void *b_mzscheme_ref; /* The MzScheme reference to this buffer */ + #endif +*** ../vim-8.1.0026/src/testdir/Make_all.mak 2018-04-10 18:52:08.000000000 +0200 +--- src/testdir/Make_all.mak 2018-06-03 14:00:04.742957898 +0200 +*************** +*** 147,152 **** +--- 147,153 ---- + test_perl.res \ + test_plus_arg_edit.res \ + test_preview.res \ ++ test_prompt_buffer.res \ + test_profile.res \ + test_python2.res \ + test_python3.res \ +*** ../vim-8.1.0026/src/testdir/screendump.vim 2018-05-05 16:33:08.000000000 +0200 +--- src/testdir/screendump.vim 2018-06-03 14:17:25.161921247 +0200 +*************** +*** 5,23 **** + finish + endif + +! " Need to be able to run terminal Vim with 256 colors. On MS-Windows the +! " console only has 16 colors and the GUI can't run in a terminal. +! if !has('terminal') || has('win32') +! func CanRunVimInTerminal() +! return 0 +! endfunc +! finish +! endif +! + func CanRunVimInTerminal() +! return 1 + endfunc + + source shared.vim + + " Run Vim with "arguments" in a new terminal window. +--- 5,22 ---- + finish + endif + +! " For most tests we need to be able to run terminal Vim with 256 colors. On +! " MS-Windows the console only has 16 colors and the GUI can't run in a +! " terminal. + func CanRunVimInTerminal() +! return has('terminal') && !has('win32') + endfunc + ++ " Skip the rest if there is no terminal feature at all. ++ if !has('terminal') ++ finish ++ endif ++ + source shared.vim + + " Run Vim with "arguments" in a new terminal window. +*************** +*** 54,59 **** +--- 53,59 ---- + let cols = get(a:options, 'cols', 75) + + let cmd = GetVimCommandClean() ++ + " Add -v to have gvim run in the terminal (if possible) + let cmd .= ' -v ' . a:arguments + let buf = term_start(cmd, {'curwin': 1, 'term_rows': rows, 'term_cols': cols}) +*************** +*** 64,74 **** + let cols = term_getsize(buf)[1] + endif + +! " Wait for "All" or "Top" of the ruler in the status line to be shown. This +! " can be quite slow (e.g. when using valgrind). + " If it fails then show the terminal contents for debugging. + try +! call WaitFor({-> len(term_getline(buf, rows)) >= cols - 1}) + catch /timed out after/ + let lines = map(range(1, rows), {key, val -> term_getline(buf, val)}) + call assert_report('RunVimInTerminal() failed, screen contents: ' . join(lines, "<NL>")) +--- 64,75 ---- + let cols = term_getsize(buf)[1] + endif + +! " Wait for "All" or "Top" of the ruler to be shown in the last line or in +! " the status line of the last window. This can be quite slow (e.g. when +! " using valgrind). + " If it fails then show the terminal contents for debugging. + try +! call WaitFor({-> len(term_getline(buf, rows)) >= cols - 1 || len(term_getline(buf, rows - 1)) >= cols - 1}) + catch /timed out after/ + let lines = map(range(1, rows), {key, val -> term_getline(buf, val)}) + call assert_report('RunVimInTerminal() failed, screen contents: ' . join(lines, "<NL>")) +*************** +*** 80,86 **** + " Stop a Vim running in terminal buffer "buf". + func StopVimInTerminal(buf) + call assert_equal("running", term_getstatus(a:buf)) +! call term_sendkeys(a:buf, "\<Esc>\<Esc>:qa!\<cr>") + call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))}) + only! + endfunc +--- 81,87 ---- + " Stop a Vim running in terminal buffer "buf". + func StopVimInTerminal(buf) + call assert_equal("running", term_getstatus(a:buf)) +! call term_sendkeys(a:buf, "\<Esc>:qa!\<cr>") + call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))}) + only! + endfunc +*** ../vim-8.1.0026/src/testdir/test_prompt_buffer.vim 2018-06-03 14:39:38.860806632 +0200 +--- src/testdir/test_prompt_buffer.vim 2018-06-03 14:32:25.681281861 +0200 +*************** +*** 0 **** +--- 1,55 ---- ++ " Tests for setting 'buftype' to "prompt" ++ ++ if !has('channel') ++ finish ++ endif ++ ++ 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') ++ call assert_report('no terminal') ++ return ++ endif ++ call writefile([ ++ \ 'func TextEntered(text)', ++ \ ' if a:text == "exit"', ++ \ ' stopinsert', ++ \ ' close', ++ \ ' else', ++ \ ' " Add the output above the current prompt.', ++ \ ' call append(line("$") - 1, "Command: \"" . a:text . "\"")', ++ \ ' " Reset &modified to allow the buffer to be closed.', ++ \ ' set nomodified', ++ \ ' call timer_start(20, {id -> TimerFunc(a:text)})', ++ \ ' endif', ++ \ 'endfunc', ++ \ '', ++ \ 'func TimerFunc(text)', ++ \ ' " Add the output above the current prompt.', ++ \ ' call append(line("$") - 1, "Result: \"" . a:text . "\"")', ++ \ 'endfunc', ++ \ '', ++ \ 'call setline(1, "other buffer")', ++ \ 'new', ++ \ '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>") ++ call WaitForAssert({-> assert_equal('% hello', term_getline(buf, 1))}) ++ call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf, 2))}) ++ call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf, 3))}) ++ ++ call term_sendkeys(buf, "exit\<CR>") ++ call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))}) ++ ++ call StopVimInTerminal(buf) ++ call delete('Xpromptscript') ++ endfunc +*** ../vim-8.1.0026/src/version.c 2018-05-26 18:58:47.306367819 +0200 +--- src/version.c 2018-06-03 14:04:04.270811668 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 27, + /**/ + +-- +Q: What is the difference between open-source and commercial software? +A: If you have a problem with commercial software you can call a phone + number and they will tell you it might be solved in a future version. + For open-source software there isn't a phone number to call, but you + get the solution within a day. + + /// 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 /// diff --git a/data/vim/patches/8.1.0028 b/data/vim/patches/8.1.0028 new file mode 100644 index 000000000..ea9a03657 --- /dev/null +++ b/data/vim/patches/8.1.0028 @@ -0,0 +1,55 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0028 +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.0028 (after 8.1.0027) +Problem: Prompt buffer test fails on MS-Windows. +Solution: Disable the test for now. Remove stray assert. +Files: src/testdir/test_prompt_buffer.vim + + +*** ../vim-8.1.0027/src/testdir/test_prompt_buffer.vim 2018-06-03 14:42:17.848505102 +0200 +--- src/testdir/test_prompt_buffer.vim 2018-06-03 15:07:17.978837576 +0200 +*************** +*** 11,17 **** + " We need to use a terminal window to be able to feed keys without leaving + " Insert mode. + if !has('terminal') +! call assert_report('no terminal') + return + endif + call writefile([ +--- 11,20 ---- + " 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([ +*** ../vim-8.1.0027/src/version.c 2018-06-03 14:42:17.848505102 +0200 +--- src/version.c 2018-06-03 15:02:58.663065129 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 28, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +26. You check your mail. It says "no new messages." So you check it again. + + /// 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 /// diff --git a/data/vim/patches/8.1.0029 b/data/vim/patches/8.1.0029 new file mode 100644 index 000000000..67db4902b --- /dev/null +++ b/data/vim/patches/8.1.0029 @@ -0,0 +1,48 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0029 +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.0029 +Problem: Terminal test fails on MS-Windows when "wc" exists. +Solution: Skip test with redirection on MS-Windows. +Files: src/testdir/test_terminal.vim + + +*** ../vim-8.1.0028/src/testdir/test_terminal.vim 2018-05-26 18:58:47.306367819 +0200 +--- src/testdir/test_terminal.vim 2018-06-03 15:24:23.018768459 +0200 +*************** +*** 580,585 **** +--- 580,589 ---- + if !executable('wc') + throw 'skipped: wc command not available' + endif ++ if has('win32') ++ " TODO: enable once writing to stdin works on MS-Windows ++ return ++ endif + new + call setline(1, ['one', 'two', 'three']) + %term wc +*** ../vim-8.1.0028/src/version.c 2018-06-03 15:07:59.090802190 +0200 +--- src/version.c 2018-06-03 15:25:29.414749796 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 29, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +27. You refer to your age as 3.x. + + /// 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 /// diff --git a/data/vim/patches/8.1.0030 b/data/vim/patches/8.1.0030 new file mode 100644 index 000000000..808f50736 --- /dev/null +++ b/data/vim/patches/8.1.0030 @@ -0,0 +1,80 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0030 +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.0030 +Problem: Stoping Vim running in a terminal may not work. +Solution: Instead of sending <Esc> send CTRL-O. +Files: src/testdir/screendump.vim, src/testdir/test_prompt_buffer.vim + + +*** ../vim-8.1.0029/src/testdir/screendump.vim 2018-06-03 14:42:17.848505102 +0200 +--- src/testdir/screendump.vim 2018-06-03 17:05:18.094429502 +0200 +*************** +*** 81,87 **** + " Stop a Vim running in terminal buffer "buf". + func StopVimInTerminal(buf) + call assert_equal("running", term_getstatus(a:buf)) +! call term_sendkeys(a:buf, "\<Esc>:qa!\<cr>") + call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))}) + only! + endfunc +--- 81,91 ---- + " Stop a Vim running in terminal buffer "buf". + func StopVimInTerminal(buf) + call assert_equal("running", term_getstatus(a:buf)) +! +! " CTRL-O : works both in Normal mode and Insert mode to start a command line. +! " In Command-line it's inserted, the CTRL-U removes it again. +! call term_sendkeys(a:buf, "\<C-O>\<C-U>:qa!\<cr>") +! + call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))}) + only! + endfunc +*** ../vim-8.1.0029/src/testdir/test_prompt_buffer.vim 2018-06-03 15:07:59.090802190 +0200 +--- src/testdir/test_prompt_buffer.vim 2018-06-03 17:05:18.094429502 +0200 +*************** +*** 34,42 **** +--- 34,45 ---- + \ 'func TimerFunc(text)', + \ ' " Add the output above the current prompt.', + \ ' call append(line("$") - 1, "Result: \"" . a:text . "\"")', ++ \ ' " Reset &modified to allow the buffer to be closed.', ++ \ ' set nomodified', + \ 'endfunc', + \ '', + \ 'call setline(1, "other buffer")', ++ \ 'set nomodified', + \ 'new', + \ 'set buftype=prompt', + \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))', +*** ../vim-8.1.0029/src/version.c 2018-06-03 15:26:31.866729762 +0200 +--- src/version.c 2018-06-03 17:07:05.586362470 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 30, + /**/ + +-- +Bypasses are devices that allow some people to dash from point A to +point B very fast while other people dash from point B to point A very +fast. People living at point C, being a point directly in between, are +often given to wonder what's so great about point A that so many people +from point B are so keen to get there and what's so great about point B +that so many people from point A are so keen to get there. They often +wish that people would just once and for all work out where the hell +they wanted to be. + -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" + + /// 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 /// diff --git a/data/vim/patches/8.1.0031 b/data/vim/patches/8.1.0031 new file mode 100644 index 000000000..0cfae419b --- /dev/null +++ b/data/vim/patches/8.1.0031 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0031 +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.0031 +Problem: Terminal test aucmd_on_close is flaky. +Solution: Wait a bit longer. +Files: src/testdir/test_terminal.vim + + +*** ../vim-8.1.0030/src/testdir/test_terminal.vim 2018-06-03 15:26:31.866729762 +0200 +--- src/testdir/test_terminal.vim 2018-06-03 18:20:32.978001827 +0200 +*************** +*** 384,390 **** + func s:get_sleep_cmd() + if s:python != '' + let cmd = s:python . " test_short_sleep.py" +! let waittime = 500 + else + echo 'This will take five seconds...' + let waittime = 2000 +--- 384,391 ---- + func s:get_sleep_cmd() + if s:python != '' + let cmd = s:python . " test_short_sleep.py" +! " 500 was not enough for Travis +! let waittime = 900 + else + echo 'This will take five seconds...' + let waittime = 2000 +*** ../vim-8.1.0030/src/version.c 2018-06-03 17:10:36.274226639 +0200 +--- src/version.c 2018-06-03 18:21:37.361916784 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 31, + /**/ + +-- +Don't Panic! + -- The Hitchhiker's Guide to the Galaxy + + /// 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 /// 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 /// diff --git a/data/vim/patches/8.1.0033 b/data/vim/patches/8.1.0033 new file mode 100644 index 000000000..a16e8bd36 --- /dev/null +++ b/data/vim/patches/8.1.0033 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0033 +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.0033 +Problem: Keys to stop Vim in terminal are wrong. (Marius Gedminas) +Solution: Move ":" to before CTRL-U. +Files: src/testdir/screendump.vim + + +*** ../vim-8.1.0032/src/testdir/screendump.vim 2018-06-03 17:10:36.270226642 +0200 +--- src/testdir/screendump.vim 2018-06-04 19:01:48.274497229 +0200 +*************** +*** 84,90 **** + + " CTRL-O : works both in Normal mode and Insert mode to start a command line. + " In Command-line it's inserted, the CTRL-U removes it again. +! call term_sendkeys(a:buf, "\<C-O>\<C-U>:qa!\<cr>") + + call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))}) + only! +--- 84,90 ---- + + " CTRL-O : works both in Normal mode and Insert mode to start a command line. + " In Command-line it's inserted, the CTRL-U removes it again. +! call term_sendkeys(a:buf, "\<C-O>:\<C-U>qa!\<cr>") + + call WaitForAssert({-> assert_equal("finished", term_getstatus(a:buf))}) + only! +*** ../vim-8.1.0032/src/version.c 2018-06-04 17:28:04.729961269 +0200 +--- src/version.c 2018-06-04 19:04:28.410393592 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 33, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +3. Every time someone asks you to do something, ask if they want fries + with that. + + /// 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 /// diff --git a/data/vim/patches/8.1.0034 b/data/vim/patches/8.1.0034 new file mode 100644 index 000000000..c1fb32dc1 --- /dev/null +++ b/data/vim/patches/8.1.0034 @@ -0,0 +1,90 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0034 +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.0034 +Problem: Cursor not restored with ":edit #". +Solution: Don't assume autocommands moved the cursor when it was moved to + the first non-blank. +Files: src/ex_cmds.c, src/testdir/test_edit.vim + + +*** ../vim-8.1.0033/src/ex_cmds.c 2018-04-10 18:37:19.000000000 +0200 +--- src/ex_cmds.c 2018-06-04 20:28:56.647447774 +0200 +*************** +*** 4193,4203 **** + check_arg_idx(curwin); + + /* If autocommands change the cursor position or topline, we should +! * keep it. Also when it moves within a line. */ + if (!EQUAL_POS(curwin->w_cursor, orig_pos)) + { +! newlnum = curwin->w_cursor.lnum; +! newcol = curwin->w_cursor.col; + } + if (curwin->w_topline == topline) + topline = 0; +--- 4193,4210 ---- + check_arg_idx(curwin); + + /* If autocommands change the cursor position or topline, we should +! * keep it. Also when it moves within a line. But not when it moves +! * to the first non-blank. */ + if (!EQUAL_POS(curwin->w_cursor, orig_pos)) + { +! char_u *text = ml_get_curline(); +! +! if (curwin->w_cursor.lnum != orig_pos.lnum +! || curwin->w_cursor.col != (int)(skipwhite(text) - text)) +! { +! newlnum = curwin->w_cursor.lnum; +! newcol = curwin->w_cursor.col; +! } + } + if (curwin->w_topline == topline) + topline = 0; +*** ../vim-8.1.0033/src/testdir/test_edit.vim 2018-02-09 14:37:30.000000000 +0100 +--- src/testdir/test_edit.vim 2018-06-04 20:28:56.647447774 +0200 +*************** +*** 1387,1389 **** +--- 1387,1403 ---- + only + endfunc + ++ func Test_edit_alt() ++ " Keeping the cursor line didn't happen when the first line has indent. ++ new ++ call setline(1, [' one', 'two', 'three']) ++ w XAltFile ++ $ ++ call assert_equal(3, line('.')) ++ e Xother ++ e # ++ call assert_equal(3, line('.')) ++ ++ bwipe XAltFile ++ call delete('XAltFile') ++ endfunc +*** ../vim-8.1.0033/src/version.c 2018-06-04 19:11:06.604648995 +0200 +--- src/version.c 2018-06-04 20:31:05.227428478 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 34, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +8. Don't use any punctuation marks. + + /// 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 /// diff --git a/data/vim/patches/8.1.0035 b/data/vim/patches/8.1.0035 new file mode 100644 index 000000000..329d2c528 --- /dev/null +++ b/data/vim/patches/8.1.0035 @@ -0,0 +1,237 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0035 +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.0035 +Problem: Not easy to switch between prompt buffer and other windows. +Solution: Accept CTRL-W commands in Insert mode. Start and stop Insert mode + as one would expect. +Files: src/edit.c, src/ex_docmd.c, src/structs.h, src/window.c + + +*** ../vim-8.1.0034/src/edit.c 2018-06-03 14:42:17.840505115 +0200 +--- src/edit.c 2018-06-06 09:06:43.329569894 +0200 +*************** +*** 811,816 **** +--- 811,824 ---- + do + { + c = safe_vgetc(); ++ ++ if (stop_insert_mode) ++ { ++ // Insert mode ended, possibly from a callback. ++ count = 0; ++ nomove = TRUE; ++ goto doESCkey; ++ } + } while (c == K_IGNORE || c == K_NOP); + + /* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */ +*************** +*** 1165,1170 **** +--- 1173,1190 ---- + break; + + case Ctrl_W: /* delete word before the cursor */ ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf) && (mod_mask & MOD_MASK_SHIFT) == 0) ++ { ++ // In a prompt window CTRL-W is used for window commands. ++ // Use Shift-CTRL-W to delete a word. ++ stuffcharReadbuff(Ctrl_W); ++ restart_edit = 'i'; ++ nomove = TRUE; ++ count = 0; ++ goto doESCkey; ++ } ++ #endif + did_backspace = ins_bs(c, BACKSPACE_WORD, &inserted_space); + auto_format(FALSE, TRUE); + break; +*************** +*** 1869,1874 **** +--- 1889,1907 ---- + coladvance((colnr_T)MAXCOL); + changed_bytes(curbuf->b_ml.ml_line_count, 0); + } ++ ++ // Insert always starts after the prompt, allow editing text after it. ++ if (Insstart_orig.lnum != curwin->w_cursor.lnum ++ || Insstart_orig.col != (int)STRLEN(prompt)) ++ { ++ Insstart.lnum = curwin->w_cursor.lnum; ++ Insstart.col = STRLEN(prompt); ++ Insstart_orig = Insstart; ++ Insstart_textlen = Insstart.col; ++ Insstart_blank_vcol = MAXCOL; ++ arrow_used = FALSE; ++ } ++ + if (cmdchar_todo == 'A') + coladvance((colnr_T)MAXCOL); + if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt)) +*** ../vim-8.1.0034/src/ex_docmd.c 2018-05-08 21:57:39.000000000 +0200 +--- src/ex_docmd.c 2018-06-06 08:58:58.317930716 +0200 +*************** +*** 7341,7347 **** + { + if (eap->addr_count == 0) + ex_win_close(eap->forceit, curwin, NULL); +! else { + FOR_ALL_WINDOWS(win) + { + winnr++; +--- 7341,7348 ---- + { + if (eap->addr_count == 0) + ex_win_close(eap->forceit, curwin, NULL); +! else +! { + FOR_ALL_WINDOWS(win) + { + winnr++; +*** ../vim-8.1.0034/src/structs.h 2018-06-03 14:42:17.848505102 +0200 +--- src/structs.h 2018-06-06 08:58:58.317930716 +0200 +*************** +*** 2360,2365 **** +--- 2360,2367 ---- + char_u *b_prompt_text; // set by prompt_setprompt() + char_u *b_prompt_callback; // set by prompt_setcallback() + partial_T *b_prompt_partial; // set by prompt_setcallback() ++ int b_prompt_insert; // value for restart_edit when entering ++ // a prompt buffer window. + #endif + #ifdef FEAT_MZSCHEME + void *b_mzscheme_ref; /* The MzScheme reference to this buffer */ +*** ../vim-8.1.0034/src/window.c 2018-05-04 20:09:46.000000000 +0200 +--- src/window.c 2018-06-06 08:58:58.321930713 +0200 +*************** +*** 2103,2108 **** +--- 2103,2131 ---- + } + } + ++ #ifdef FEAT_JOB_CHANNEL ++ static void ++ leaving_window(win_T *win) ++ { ++ // When leaving a prompt window stop Insert mode and perhaps restart ++ // it when entering that window again. ++ win->w_buffer->b_prompt_insert = restart_edit; ++ restart_edit = NUL; ++ ++ // When leaving the window (or closing the window) was done from a ++ // callback we need to break out of the Insert mode loop. ++ if (State & INSERT) ++ stop_insert_mode = TRUE; ++ } ++ ++ static void ++ entering_window(win_T *win) ++ { ++ // When entering the prompt window may restart Insert mode. ++ restart_edit = win->w_buffer->b_prompt_insert; ++ } ++ #endif ++ + /* + * Close all windows for buffer "buf". + */ +*************** +*** 2231,2236 **** +--- 2254,2262 ---- + if (h != tabline_height()) + shell_new_rows(); + } ++ #ifdef FEAT_JOB_CHANNEL ++ entering_window(curwin); ++ #endif + /* Since goto_tabpage_tp above did not trigger *Enter autocommands, do + * that now. */ + apply_autocmds(EVENT_TABCLOSED, NULL, NULL, FALSE, curbuf); +*************** +*** 2296,2301 **** +--- 2322,2330 ---- + + if (win == curwin) + { ++ #ifdef FEAT_JOB_CHANNEL ++ leaving_window(curwin); ++ #endif + /* + * Guess which window is going to be the new current window. + * This may change because of the autocommands (sigh). +*************** +*** 3649,3654 **** +--- 3678,3686 ---- + * scrollbars. Have to update them anyway. */ + gui_may_update_scrollbars(); + #endif ++ #ifdef FEAT_JOB_CHANNEL ++ entering_window(curwin); ++ #endif + + redraw_all_later(CLEAR); + apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf); +*************** +*** 3822,3827 **** +--- 3854,3862 ---- + { + tabpage_T *tp = curtab; + ++ #ifdef FEAT_JOB_CHANNEL ++ leaving_window(curwin); ++ #endif + reset_VIsual_and_resel(); /* stop Visual mode */ + if (trigger_leave_autocmds) + { +*************** +*** 4318,4323 **** +--- 4353,4363 ---- + if (wp == curwin && !curwin_invalid) /* nothing to do */ + return; + ++ #ifdef FEAT_JOB_CHANNEL ++ if (!curwin_invalid) ++ leaving_window(curwin); ++ #endif ++ + if (!curwin_invalid && trigger_leave_autocmds) + { + /* +*************** +*** 4389,4394 **** +--- 4429,4437 ---- + shorten_fnames(TRUE); + } + ++ #ifdef FEAT_JOB_CHANNEL ++ entering_window(curwin); ++ #endif + if (trigger_new_autocmds) + apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf); + if (trigger_enter_autocmds) +*** ../vim-8.1.0034/src/version.c 2018-06-04 20:34:07.607373577 +0200 +--- src/version.c 2018-06-06 09:01:35.521811501 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 35, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +12. Sing along at the opera. + + /// 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 /// diff --git a/data/vim/patches/8.1.0036 b/data/vim/patches/8.1.0036 new file mode 100644 index 000000000..4162ef227 --- /dev/null +++ b/data/vim/patches/8.1.0036 @@ -0,0 +1,145 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0036 +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.0036 +Problem: Not restoring Insert mode if leaving a prompt buffer by using a + mouse click. +Solution: Set b_prompt_insert appropriately. Also correct cursor position + when moving cursor to last line. +Files: src/buffer.c, src/edit.c, src/window.c + + +*** ../vim-8.1.0035/src/buffer.c 2018-06-03 14:42:17.840505115 +0200 +--- src/buffer.c 2018-06-06 17:51:25.004337836 +0200 +*************** +*** 5733,5738 **** +--- 5733,5742 ---- + #endif + if (buf->b_fname != NULL) + return buf->b_fname; ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(buf)) ++ return (char_u *)_("[Prompt]"); ++ #endif + return (char_u *)_("[Scratch]"); + } + +*** ../vim-8.1.0035/src/edit.c 2018-06-06 09:11:07.253357321 +0200 +--- src/edit.c 2018-06-06 17:51:25.004337836 +0200 +*************** +*** 1411,1421 **** + #ifdef FEAT_JOB_CHANNEL + if (bt_prompt(curbuf)) + { +- buf_T *buf = curbuf; +- + invoke_prompt_callback(); +! if (curbuf != buf) +! // buffer changed, get out of Insert mode + goto doESCkey; + break; + } +--- 1411,1420 ---- + #ifdef FEAT_JOB_CHANNEL + if (bt_prompt(curbuf)) + { + invoke_prompt_callback(); +! if (!bt_prompt(curbuf)) +! // buffer changed to a non-prompt buffer, get out of +! // Insert mode + goto doESCkey; + break; + } +*************** +*** 1906,1911 **** +--- 1905,1912 ---- + coladvance((colnr_T)MAXCOL); + if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt)) + curwin->w_cursor.col = STRLEN(prompt); ++ /* Make sure the cursor is in a valid position. */ ++ check_cursor(); + } + + /* +*************** +*** 9467,9473 **** + + /* If deleted before the insertion point, adjust it */ + if (curwin->w_cursor.lnum == Insstart_orig.lnum +! && curwin->w_cursor.col < Insstart_orig.col) + Insstart_orig.col = curwin->w_cursor.col; + + /* vi behaviour: the cursor moves backward but the character that +--- 9468,9474 ---- + + /* If deleted before the insertion point, adjust it */ + if (curwin->w_cursor.lnum == Insstart_orig.lnum +! && curwin->w_cursor.col < Insstart_orig.col) + Insstart_orig.col = curwin->w_cursor.col; + + /* vi behaviour: the cursor moves backward but the character that +*************** +*** 9517,9522 **** +--- 9518,9528 ---- + * previous one to stop insert there properly. */ + curwin = old_curwin; + curbuf = curwin->w_buffer; ++ #ifdef FEAT_JOB_CHANNEL ++ if (bt_prompt(curbuf)) ++ // Restart Insert mode when re-entering the prompt buffer. ++ curbuf->b_prompt_insert = 'A'; ++ #endif + } + start_arrow(curwin == old_curwin ? &tpos : NULL); + if (curwin != new_curwin && win_valid(new_curwin)) +*** ../vim-8.1.0035/src/window.c 2018-06-06 09:11:07.257357317 +0200 +--- src/window.c 2018-06-06 17:51:25.012337813 +0200 +*************** +*** 2115,2126 **** +--- 2115,2135 ---- + // When leaving the window (or closing the window) was done from a + // callback we need to break out of the Insert mode loop. + if (State & INSERT) ++ { + stop_insert_mode = TRUE; ++ if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert == NUL) ++ win->w_buffer->b_prompt_insert = 'A'; ++ } + } + + static void + entering_window(win_T *win) + { ++ // When switching to a prompt buffer that was in Insert mode, don't stop ++ // Insert mode, it may have been set in leaving_window(). ++ if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert != NUL) ++ stop_insert_mode = FALSE; ++ + // When entering the prompt window may restart Insert mode. + restart_edit = win->w_buffer->b_prompt_insert; + } +*** ../vim-8.1.0035/src/version.c 2018-06-06 09:11:07.261357314 +0200 +--- src/version.c 2018-06-06 17:55:55.983628274 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 36, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +15. Five days in advance, tell your friends you can't attend their + party because you're not in the mood. + + /// 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 /// diff --git a/data/vim/patches/8.1.0037 b/data/vim/patches/8.1.0037 new file mode 100644 index 000000000..d6b823354 --- /dev/null +++ b/data/vim/patches/8.1.0037 @@ -0,0 +1,581 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0037 +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.0037 +Problem: Cannot easily append lines to another buffer. +Solution: Add appendbufline(). +Files: runtime/doc/eval.txt, src/evalfunc.c, + src/testdir/test_bufline.vim, src/testdir/test_edit.vim + + +*** ../vim-8.1.0036/runtime/doc/eval.txt 2018-06-03 14:42:17.824505143 +0200 +--- runtime/doc/eval.txt 2018-06-06 20:58:47.732807369 +0200 +*************** +*** 2560,2565 **** +--- 2560,2580 ---- + 0 for success. Example: > + :let failed = append(line('$'), "# THE END") + :let failed = append(0, ["Chapter 1", "the beginning"]) ++ ++ appendbufline({expr}, {lnum}, {text}) *appendbufline()* ++ Like |append()| but append the text in buffer {expr}. ++ ++ For the use of {expr}, see |bufname()|. ++ ++ {lnum} is used like with |append()|. Note that using |line()| ++ would use the current buffer, not the one appending to. ++ Use "$" to append at the end of the buffer. ++ ++ On success 0 is returned, on failure 1 is returned. ++ ++ If {expr} is not a valid buffer or {lnum} is not valid, an ++ error message is given. Example: > ++ :let failed = appendbufline(13, 0, "# THE START") + < + *argc()* + argc() The result is the number of files in the argument list of the +*** ../vim-8.1.0036/src/evalfunc.c 2018-06-03 14:42:17.844505109 +0200 +--- src/evalfunc.c 2018-06-06 20:58:47.740807362 +0200 +*************** +*** 40,45 **** +--- 40,46 ---- + static void f_add(typval_T *argvars, typval_T *rettv); + static void f_and(typval_T *argvars, typval_T *rettv); + static void f_append(typval_T *argvars, typval_T *rettv); ++ static void f_appendbufline(typval_T *argvars, typval_T *rettv); + static void f_argc(typval_T *argvars, typval_T *rettv); + static void f_argidx(typval_T *argvars, typval_T *rettv); + static void f_arglistid(typval_T *argvars, typval_T *rettv); +*************** +*** 487,492 **** +--- 488,494 ---- + {"add", 2, 2, f_add}, + {"and", 2, 2, f_and}, + {"append", 2, 2, f_append}, ++ {"appendbufline", 3, 3, f_appendbufline}, + {"argc", 0, 0, f_argc}, + {"argidx", 0, 0, f_argidx}, + {"arglistid", 0, 2, f_arglistid}, +*************** +*** 1192,1261 **** + } + + /* +! * "append(lnum, string/list)" function + */ + static void +! f_append(typval_T *argvars, typval_T *rettv) + { +! long lnum; +! char_u *line; + list_T *l = NULL; + listitem_T *li = NULL; +- typval_T *tv; + long added = 0; + +! /* When coming here from Insert mode, sync undo, so that this can be +! * undone separately from what was previously inserted. */ +! if (u_sync_once == 2) + { +! u_sync_once = 1; /* notify that u_sync() was called */ +! u_sync(TRUE); + } + +! lnum = get_tv_lnum(argvars); +! if (lnum >= 0 +! && lnum <= curbuf->b_ml.ml_line_count +! && u_save(lnum, lnum + 1) == OK) + { +! if (argvars[1].v_type == VAR_LIST) +! { +! l = argvars[1].vval.v_list; +! if (l == NULL) +! return; +! li = l->lv_first; +! } +! for (;;) + { +! if (l == NULL) +! tv = &argvars[1]; /* append a string */ +! else if (li == NULL) +! break; /* end of list */ +! else +! tv = &li->li_tv; /* append item from list */ +! line = get_tv_string_chk(tv); +! if (line == NULL) /* type error */ + { +! rettv->vval.v_number = 1; /* Failed */ + break; + } +! ml_append(lnum + added, line, (colnr_T)0, FALSE); +! ++added; +! if (l == NULL) + break; + li = li->li_next; + } + +! appended_lines_mark(lnum, added); +! if (curwin->w_cursor.lnum > lnum) +! curwin->w_cursor.lnum += added; + #ifdef FEAT_JOB_CHANNEL + if (bt_prompt(curbuf) && (State & INSERT)) + // show the line with the prompt + update_topline(); + #endif + } + else +! rettv->vval.v_number = 1; /* Failed */ + } + + /* +--- 1194,1378 ---- + } + + /* +! * Get the lnum from the first argument. +! * Also accepts "$", then "buf" is used. +! * Returns 0 on error. +! */ +! static linenr_T +! get_tv_lnum_buf(typval_T *argvars, buf_T *buf) +! { +! if (argvars[0].v_type == VAR_STRING +! && argvars[0].vval.v_string != NULL +! && argvars[0].vval.v_string[0] == '$' +! && buf != NULL) +! return buf->b_ml.ml_line_count; +! return (linenr_T)get_tv_number_chk(&argvars[0], NULL); +! } +! +! /* +! * Set line or list of lines in buffer "buf". + */ + static void +! set_buffer_lines( +! buf_T *buf, +! linenr_T lnum_arg, +! int append, +! typval_T *lines, +! typval_T *rettv) + { +! linenr_T lnum = lnum_arg + (append ? 1 : 0); +! char_u *line = NULL; + list_T *l = NULL; + listitem_T *li = NULL; + long added = 0; ++ linenr_T append_lnum; ++ buf_T *curbuf_save = NULL; ++ win_T *curwin_save = NULL; ++ int is_curbuf = buf == curbuf; + +! /* When using the current buffer ml_mfp will be set if needed. Useful when +! * setline() is used on startup. For other buffers the buffer must be +! * loaded. */ +! if (buf == NULL || (!is_curbuf && buf->b_ml.ml_mfp == NULL) || lnum < 1) + { +! rettv->vval.v_number = 1; /* FAIL */ +! return; + } + +! if (!is_curbuf) + { +! wininfo_T *wip; +! +! curbuf_save = curbuf; +! curwin_save = curwin; +! curbuf = buf; +! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) + { +! if (wip->wi_win != NULL) + { +! curwin = wip->wi_win; + break; + } +! } +! } +! +! if (append) +! // appendbufline() uses the line number below which we insert +! append_lnum = lnum - 1; +! else +! // setbufline() uses the line number above which we insert, we only +! // append if it's below the last line +! append_lnum = curbuf->b_ml.ml_line_count; +! +! if (lines->v_type == VAR_LIST) +! { +! l = lines->vval.v_list; +! li = l->lv_first; +! } +! else +! line = get_tv_string_chk(lines); +! +! /* default result is zero == OK */ +! for (;;) +! { +! if (l != NULL) +! { +! /* list argument, get next string */ +! if (li == NULL) + break; ++ line = get_tv_string_chk(&li->li_tv); + li = li->li_next; + } + +! rettv->vval.v_number = 1; /* FAIL */ +! if (line == NULL || lnum > curbuf->b_ml.ml_line_count + 1) +! break; +! +! /* When coming here from Insert mode, sync undo, so that this can be +! * undone separately from what was previously inserted. */ +! if (u_sync_once == 2) +! { +! u_sync_once = 1; /* notify that u_sync() was called */ +! u_sync(TRUE); +! } +! +! if (!append && lnum <= curbuf->b_ml.ml_line_count) +! { +! /* existing line, replace it */ +! if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK) +! { +! changed_bytes(lnum, 0); +! if (is_curbuf && lnum == curwin->w_cursor.lnum) +! check_cursor_col(); +! rettv->vval.v_number = 0; /* OK */ +! } +! } +! else if (added > 0 || u_save(lnum - 1, lnum) == OK) +! { +! /* append the line */ +! ++added; +! if (ml_append(lnum - 1, line, (colnr_T)0, FALSE) == OK) +! rettv->vval.v_number = 0; /* OK */ +! } +! +! if (l == NULL) /* only one string argument */ +! break; +! ++lnum; +! } +! +! if (added > 0) +! { +! win_T *wp; +! tabpage_T *tp; +! +! appended_lines_mark(append_lnum, added); +! FOR_ALL_TAB_WINDOWS(tp, wp) +! if (wp->w_buffer == buf && wp->w_cursor.lnum > append_lnum) +! wp->w_cursor.lnum += added; +! check_cursor_col(); +! + #ifdef FEAT_JOB_CHANNEL + if (bt_prompt(curbuf) && (State & INSERT)) + // show the line with the prompt + update_topline(); + #endif + } ++ ++ if (!is_curbuf) ++ { ++ curbuf = curbuf_save; ++ curwin = curwin_save; ++ } ++ } ++ ++ /* ++ * "append(lnum, string/list)" function ++ */ ++ static void ++ f_append(typval_T *argvars, typval_T *rettv) ++ { ++ linenr_T lnum = get_tv_lnum(&argvars[0]); ++ ++ set_buffer_lines(curbuf, lnum, TRUE, &argvars[1], rettv); ++ } ++ ++ /* ++ * "appendbufline(buf, lnum, string/list)" function ++ */ ++ static void ++ f_appendbufline(typval_T *argvars, typval_T *rettv) ++ { ++ linenr_T lnum; ++ buf_T *buf; ++ ++ buf = get_buf_tv(&argvars[0], FALSE); ++ if (buf == NULL) ++ rettv->vval.v_number = 1; /* FAIL */ + else +! { +! lnum = get_tv_lnum_buf(&argvars[1], buf); +! set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv); +! } + } + + /* +*************** +*** 4276,4297 **** + } + + /* +- * Get the lnum from the first argument. +- * Also accepts "$", then "buf" is used. +- * Returns 0 on error. +- */ +- static linenr_T +- get_tv_lnum_buf(typval_T *argvars, buf_T *buf) +- { +- if (argvars[0].v_type == VAR_STRING +- && argvars[0].vval.v_string != NULL +- && argvars[0].vval.v_string[0] == '$' +- && buf != NULL) +- return buf->b_ml.ml_line_count; +- return (linenr_T)get_tv_number_chk(&argvars[0], NULL); +- } +- +- /* + * "getbufline()" function + */ + static void +--- 4393,4398 ---- +*************** +*** 10226,10340 **** + } + + /* +- * Set line or list of lines in buffer "buf". +- */ +- static void +- set_buffer_lines(buf_T *buf, linenr_T lnum, typval_T *lines, typval_T *rettv) +- { +- char_u *line = NULL; +- list_T *l = NULL; +- listitem_T *li = NULL; +- long added = 0; +- linenr_T lcount; +- buf_T *curbuf_save = NULL; +- win_T *curwin_save = NULL; +- int is_curbuf = buf == curbuf; +- +- /* When using the current buffer ml_mfp will be set if needed. Useful when +- * setline() is used on startup. For other buffers the buffer must be +- * loaded. */ +- if (buf == NULL || (!is_curbuf && buf->b_ml.ml_mfp == NULL) || lnum < 1) +- { +- rettv->vval.v_number = 1; /* FAIL */ +- return; +- } +- +- if (!is_curbuf) +- { +- wininfo_T *wip; +- +- curbuf_save = curbuf; +- curwin_save = curwin; +- curbuf = buf; +- for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) +- { +- if (wip->wi_win != NULL) +- { +- curwin = wip->wi_win; +- break; +- } +- } +- } +- +- lcount = curbuf->b_ml.ml_line_count; +- +- if (lines->v_type == VAR_LIST) +- { +- l = lines->vval.v_list; +- li = l->lv_first; +- } +- else +- line = get_tv_string_chk(lines); +- +- /* default result is zero == OK */ +- for (;;) +- { +- if (l != NULL) +- { +- /* list argument, get next string */ +- if (li == NULL) +- break; +- line = get_tv_string_chk(&li->li_tv); +- li = li->li_next; +- } +- +- rettv->vval.v_number = 1; /* FAIL */ +- if (line == NULL || lnum > curbuf->b_ml.ml_line_count + 1) +- break; +- +- /* When coming here from Insert mode, sync undo, so that this can be +- * undone separately from what was previously inserted. */ +- if (u_sync_once == 2) +- { +- u_sync_once = 1; /* notify that u_sync() was called */ +- u_sync(TRUE); +- } +- +- if (lnum <= curbuf->b_ml.ml_line_count) +- { +- /* existing line, replace it */ +- if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK) +- { +- changed_bytes(lnum, 0); +- if (is_curbuf && lnum == curwin->w_cursor.lnum) +- check_cursor_col(); +- rettv->vval.v_number = 0; /* OK */ +- } +- } +- else if (added > 0 || u_save(lnum - 1, lnum) == OK) +- { +- /* lnum is one past the last line, append the line */ +- ++added; +- if (ml_append(lnum - 1, line, (colnr_T)0, FALSE) == OK) +- rettv->vval.v_number = 0; /* OK */ +- } +- +- if (l == NULL) /* only one string argument */ +- break; +- ++lnum; +- } +- +- if (added > 0) +- appended_lines_mark(lcount, added); +- +- if (!is_curbuf) +- { +- curbuf = curbuf_save; +- curwin = curwin_save; +- } +- } +- +- /* + * "setbufline()" function + */ + static void +--- 10327,10332 ---- +*************** +*** 10351,10358 **** + else + { + lnum = get_tv_lnum_buf(&argvars[1], buf); +! +! set_buffer_lines(buf, lnum, &argvars[2], rettv); + } + } + +--- 10343,10349 ---- + else + { + lnum = get_tv_lnum_buf(&argvars[1], buf); +! set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv); + } + } + +*************** +*** 10512,10518 **** + { + linenr_T lnum = get_tv_lnum(&argvars[0]); + +! set_buffer_lines(curbuf, lnum, &argvars[1], rettv); + } + + static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv); +--- 10503,10509 ---- + { + linenr_T lnum = get_tv_lnum(&argvars[0]); + +! set_buffer_lines(curbuf, lnum, FALSE, &argvars[1], rettv); + } + + static void set_qf_ll_list(win_T *wp, typval_T *list_arg, typval_T *action_arg, typval_T *what_arg, typval_T *rettv); +*** ../vim-8.1.0036/src/testdir/test_bufline.vim 2017-11-06 21:26:52.000000000 +0100 +--- src/testdir/test_bufline.vim 2018-06-06 20:58:47.740807362 +0200 +*************** +*** 1,4 **** +! " Tests for setbufline() and getbufline() + + source shared.vim + +--- 1,4 ---- +! " Tests for setbufline(), getbufline(), appendbufline() + + source shared.vim + +*************** +*** 65,67 **** +--- 65,92 ---- + call delete('Xscript') + call delete('Xtest') + endfunc ++ ++ func Test_appendbufline() ++ new ++ let b = bufnr('%') ++ hide ++ call assert_equal(0, appendbufline(b, 0, ['foo', 'bar'])) ++ call assert_equal(['foo'], getbufline(b, 1)) ++ call assert_equal(['bar'], getbufline(b, 2)) ++ call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) ++ exe "bd!" b ++ call assert_equal([], getbufline(b, 1, 2)) ++ ++ split Xtest ++ call setline(1, ['a', 'b', 'c']) ++ let b = bufnr('%') ++ wincmd w ++ call assert_equal(1, appendbufline(b, 4, ['x'])) ++ call assert_equal(1, appendbufline(1234, 1, ['x'])) ++ call assert_equal(0, appendbufline(b, 3, ['d', 'e'])) ++ call assert_equal(['c'], getbufline(b, 3)) ++ call assert_equal(['d'], getbufline(b, 4)) ++ call assert_equal(['e'], getbufline(b, 5)) ++ call assert_equal([], getbufline(b, 6)) ++ exe "bwipe! " . b ++ endfunc +*** ../vim-8.1.0036/src/testdir/test_edit.vim 2018-06-04 20:34:07.607373577 +0200 +--- src/testdir/test_edit.vim 2018-06-06 20:58:47.740807362 +0200 +*************** +*** 527,533 **** + " Tab in completion mode + let path=expand("%:p:h") + new +! call setline(1, [path."/", '']) + call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix') + call assert_match('runtest\.vim', getline(1)) + %d +--- 527,533 ---- + " Tab in completion mode + let path=expand("%:p:h") + new +! call setline(1, [path. "/", '']) + call feedkeys("Arunt\<c-x>\<c-f>\<tab>\<cr>\<esc>", 'tnix') + call assert_match('runtest\.vim', getline(1)) + %d +*** ../vim-8.1.0036/src/version.c 2018-06-06 18:02:31.402773772 +0200 +--- src/version.c 2018-06-06 21:00:46.040701324 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 37, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +16. Have your coworkers address you by your wrestling name, Rock Hard Kim. + + /// 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 /// diff --git a/data/vim/patches/8.1.0038 b/data/vim/patches/8.1.0038 new file mode 100644 index 000000000..323476c14 --- /dev/null +++ b/data/vim/patches/8.1.0038 @@ -0,0 +1,55 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0038 +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.0038 +Problem: Popup test causes Vim to exit. +Solution: Disable the broken part of the test for now. +Files: src/testdir/test_popup.vim + + +*** ../vim-8.1.0037/src/testdir/test_popup.vim 2018-05-08 22:37:19.000000000 +0200 +--- src/testdir/test_popup.vim 2018-06-07 15:17:15.202630184 +0200 +*************** +*** 247,252 **** +--- 247,256 ---- + iunmap <F5> + endfunc + ++ " TODO: Fix what breaks after this line. ++ " - Do not use "q!", it may exit Vim if there is an error ++ finish ++ + func Test_noinsert_complete() + function! s:complTest1() abort + call complete(1, ['source', 'soundfold']) +*** ../vim-8.1.0037/src/version.c 2018-06-06 21:03:57.780523901 +0200 +--- src/version.c 2018-06-07 15:18:16.722616394 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 38, + /**/ + +-- +In many of the more relaxed civilizations on the Outer Eastern Rim of the +Galaxy, "The Hitchhiker's Guide to the Galaxy" has already supplanted the +great "Encyclopedia Galactica" as the standard repository of all knowledge +and wisdom, for though it has many omissions and contains much that is +apocryphal, or at least wildly inaccurate, it scores over the older, more +pedestrian work in two important respects. +First, it is slightly cheaper; and second, it has the words "DON'T PANIC" +inscribed in large friendly letters on its cover. + -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" + + /// 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 /// diff --git a/data/vim/patches/8.1.0039 b/data/vim/patches/8.1.0039 new file mode 100644 index 000000000..29988ae68 --- /dev/null +++ b/data/vim/patches/8.1.0039 @@ -0,0 +1,306 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0039 +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.0039 +Problem: Cannot easily delete lines in another buffer. +Solution: Add deletebufline(). +Files: runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test_bufline.vim + + +*** ../vim-8.1.0038/runtime/doc/eval.txt 2018-06-06 21:03:57.776523905 +0200 +--- runtime/doc/eval.txt 2018-06-07 18:13:41.137548220 +0200 +*************** +*** 2110,2115 **** +--- 2110,2117 ---- + cursor({list}) Number move cursor to position in {list} + deepcopy({expr} [, {noref}]) any make a full copy of {expr} + delete({fname} [, {flags}]) Number delete the file or directory {fname} ++ deletebufline({expr}, {first}[, {last}]) ++ Number delete lines from buffer {expr} + did_filetype() Number |TRUE| if FileType autocmd event used + diff_filler({lnum}) Number diff filler lines about {lnum} + diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col} +*************** +*** 3517,3524 **** + successful and -1 when the deletion failed or partly failed. + + Use |remove()| to delete an item from a |List|. +! To delete a line from the buffer use |:delete|. Use |:exe| +! when the line number is in a variable. + + *did_filetype()* + did_filetype() Returns |TRUE| when autocommands are being executed and the +--- 3519,3537 ---- + successful and -1 when the deletion failed or partly failed. + + Use |remove()| to delete an item from a |List|. +! To delete a line from the buffer use |:delete| or +! |deletebufline()|. +! +! deletebufline({expr}, {first}[, {last}]) *deletebufline()* +! Delete lines {first} to {last} (inclusive) from buffer {expr}. +! If {last} is omitted then delete line {first} only. +! On success 0 is returned, on failure 1 is returned. +! +! For the use of {expr}, see |bufname()| above. +! +! {first} and {last} are used like with |setline()|. Note that +! when using |line()| this refers to the current buffer. Use "$" +! to refer to the last line in buffer {expr}. + + *did_filetype()* + did_filetype() Returns |TRUE| when autocommands are being executed and the +*** ../vim-8.1.0038/src/evalfunc.c 2018-06-06 21:03:57.780523901 +0200 +--- src/evalfunc.c 2018-06-07 18:06:46.657672665 +0200 +*************** +*** 125,130 **** +--- 125,131 ---- + static void f_cursor(typval_T *argsvars, typval_T *rettv); + static void f_deepcopy(typval_T *argvars, typval_T *rettv); + static void f_delete(typval_T *argvars, typval_T *rettv); ++ static void f_deletebufline(typval_T *argvars, typval_T *rettv); + static void f_did_filetype(typval_T *argvars, typval_T *rettv); + static void f_diff_filler(typval_T *argvars, typval_T *rettv); + static void f_diff_hlID(typval_T *argvars, typval_T *rettv); +*************** +*** 577,582 **** +--- 578,584 ---- + {"cursor", 1, 3, f_cursor}, + {"deepcopy", 1, 2, f_deepcopy}, + {"delete", 1, 2, f_delete}, ++ {"deletebufline", 2, 3, f_deletebufline}, + {"did_filetype", 0, 0, f_did_filetype}, + {"diff_filler", 1, 1, f_diff_filler}, + {"diff_hlID", 2, 2, f_diff_hlID}, +*************** +*** 1210,1215 **** +--- 1212,1235 ---- + } + + /* ++ * If there is a window for "curbuf", make it the current window. ++ */ ++ static void ++ find_win_for_curbuf(void) ++ { ++ wininfo_T *wip; ++ ++ for (wip = curbuf->b_wininfo; wip != NULL; wip = wip->wi_next) ++ { ++ if (wip->wi_win != NULL) ++ { ++ curwin = wip->wi_win; ++ break; ++ } ++ } ++ } ++ ++ /* + * Set line or list of lines in buffer "buf". + */ + static void +*************** +*** 1241,1259 **** + + if (!is_curbuf) + { +- wininfo_T *wip; +- + curbuf_save = curbuf; + curwin_save = curwin; + curbuf = buf; +! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) +! { +! if (wip->wi_win != NULL) +! { +! curwin = wip->wi_win; +! break; +! } +! } + } + + if (append) +--- 1261,1270 ---- + + if (!is_curbuf) + { + curbuf_save = curbuf; + curwin_save = curwin; + curbuf = buf; +! find_win_for_curbuf(); + } + + if (append) +*************** +*** 2808,2813 **** +--- 2819,2911 ---- + } + + /* ++ * "deletebufline()" function ++ */ ++ static void ++ f_deletebufline(argvars, rettv) ++ typval_T *argvars; ++ typval_T *rettv; ++ { ++ buf_T *buf; ++ linenr_T first, last; ++ linenr_T lnum; ++ long count; ++ int is_curbuf; ++ buf_T *curbuf_save = NULL; ++ win_T *curwin_save = NULL; ++ tabpage_T *tp; ++ win_T *wp; ++ ++ buf = get_buf_tv(&argvars[0], FALSE); ++ if (buf == NULL) ++ { ++ rettv->vval.v_number = 1; /* FAIL */ ++ return; ++ } ++ is_curbuf = buf == curbuf; ++ ++ first = get_tv_lnum_buf(&argvars[1], buf); ++ if (argvars[2].v_type != VAR_UNKNOWN) ++ last = get_tv_lnum_buf(&argvars[2], buf); ++ else ++ last = first; ++ ++ if (buf->b_ml.ml_mfp == NULL || first < 1 ++ || first > buf->b_ml.ml_line_count || last < first) ++ { ++ rettv->vval.v_number = 1; /* FAIL */ ++ return; ++ } ++ ++ if (!is_curbuf) ++ { ++ curbuf_save = curbuf; ++ curwin_save = curwin; ++ curbuf = buf; ++ find_win_for_curbuf(); ++ } ++ if (last > curbuf->b_ml.ml_line_count) ++ last = curbuf->b_ml.ml_line_count; ++ count = last - first + 1; ++ ++ // When coming here from Insert mode, sync undo, so that this can be ++ // undone separately from what was previously inserted. ++ if (u_sync_once == 2) ++ { ++ u_sync_once = 1; // notify that u_sync() was called ++ u_sync(TRUE); ++ } ++ ++ if (u_save(first - 1, last + 1) == FAIL) ++ { ++ rettv->vval.v_number = 1; /* FAIL */ ++ return; ++ } ++ ++ for (lnum = first; lnum <= last; ++lnum) ++ ml_delete(first, TRUE); ++ ++ FOR_ALL_TAB_WINDOWS(tp, wp) ++ if (wp->w_buffer == buf) ++ { ++ if (wp->w_cursor.lnum > last) ++ wp->w_cursor.lnum -= count; ++ else if (wp->w_cursor.lnum> first) ++ wp->w_cursor.lnum = first; ++ if (wp->w_cursor.lnum > wp->w_buffer->b_ml.ml_line_count) ++ wp->w_cursor.lnum = wp->w_buffer->b_ml.ml_line_count; ++ } ++ check_cursor_col(); ++ deleted_lines_mark(first, count); ++ ++ if (!is_curbuf) ++ { ++ curbuf = curbuf_save; ++ curwin = curwin_save; ++ } ++ } ++ ++ /* + * "did_filetype()" function + */ + static void +*** ../vim-8.1.0038/src/testdir/test_bufline.vim 2018-06-06 21:03:57.780523901 +0200 +--- src/testdir/test_bufline.vim 2018-06-07 18:06:46.657672665 +0200 +*************** +*** 1,4 **** +! " Tests for setbufline(), getbufline(), appendbufline() + + source shared.vim + +--- 1,4 ---- +! " Tests for setbufline(), getbufline(), appendbufline(), deletebufline() + + source shared.vim + +*************** +*** 90,92 **** +--- 90,114 ---- + call assert_equal([], getbufline(b, 6)) + exe "bwipe! " . b + endfunc ++ ++ func Test_deletebufline() ++ new ++ let b = bufnr('%') ++ call setline(1, ['aaa', 'bbb', 'ccc']) ++ hide ++ call assert_equal(0, deletebufline(b, 2)) ++ call assert_equal(['aaa', 'ccc'], getbufline(b, 1, 2)) ++ call assert_equal(0, deletebufline(b, 2, 8)) ++ call assert_equal(['aaa'], getbufline(b, 1, 2)) ++ exe "bd!" b ++ call assert_equal(1, deletebufline(b, 1)) ++ ++ split Xtest ++ call setline(1, ['a', 'b', 'c']) ++ let b = bufnr('%') ++ wincmd w ++ call assert_equal(1, deletebufline(b, 4)) ++ call assert_equal(0, deletebufline(b, 1)) ++ call assert_equal(['b', 'c'], getbufline(b, 1, 2)) ++ exe "bwipe! " . b ++ endfunc +*** ../vim-8.1.0038/src/version.c 2018-06-07 15:18:36.826611722 +0200 +--- src/version.c 2018-06-07 18:07:51.517608846 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 39, + /**/ + +-- +Now it is such a bizarrely improbable coincidence that anything as +mind-bogglingly useful as the Babel fish could have evolved purely by chance +that some thinkers have chosen to see it as a final and clinching proof of the +NON-existence of God. +The argument goes something like this: 'I refuse to prove that I exist,' says +God, 'for proof denies faith, and without faith I am nothing.' +'But,' says Man, 'the Babel fish is a dead giveaway, isn't it? It could not +have evolved by chance. It proves you exist, and so therefore, by your own +arguments, you don't. QED.' +'Oh dear,' says God, 'I hadn't thought of that,' and promptly vanishes in a +puff of logic. +'Oh, that was easy,' says Man, and for an encore goes on to prove that black +is white and gets himself killed on the next pedestrian crossing. + -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" + + /// 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 /// diff --git a/data/vim/patches/8.1.0040 b/data/vim/patches/8.1.0040 new file mode 100644 index 000000000..aa6d44f8a --- /dev/null +++ b/data/vim/patches/8.1.0040 @@ -0,0 +1,73 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0040 +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.0040 +Problem: Warnings from 64-bit compiler. +Solution: Add type casts. (Mike Williams) +Files: src/edit.c + + +*** ../vim-8.1.0039/src/edit.c 2018-06-06 18:02:31.402773772 +0200 +--- src/edit.c 2018-06-10 13:11:02.468619199 +0200 +*************** +*** 1894,1900 **** + || Insstart_orig.col != (int)STRLEN(prompt)) + { + Insstart.lnum = curwin->w_cursor.lnum; +! Insstart.col = STRLEN(prompt); + Insstart_orig = Insstart; + Insstart_textlen = Insstart.col; + Insstart_blank_vcol = MAXCOL; +--- 1894,1900 ---- + || Insstart_orig.col != (int)STRLEN(prompt)) + { + Insstart.lnum = curwin->w_cursor.lnum; +! Insstart.col = (int)STRLEN(prompt); + Insstart_orig = Insstart; + Insstart_textlen = Insstart.col; + Insstart_blank_vcol = MAXCOL; +*************** +*** 1904,1910 **** + if (cmdchar_todo == 'A') + coladvance((colnr_T)MAXCOL); + if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt)) +! curwin->w_cursor.col = STRLEN(prompt); + /* Make sure the cursor is in a valid position. */ + check_cursor(); + } +--- 1904,1910 ---- + if (cmdchar_todo == 'A') + coladvance((colnr_T)MAXCOL); + if (cmdchar_todo == 'I' || curwin->w_cursor.col <= (int)STRLEN(prompt)) +! curwin->w_cursor.col = (int)STRLEN(prompt); + /* Make sure the cursor is in a valid position. */ + check_cursor(); + } +*** ../vim-8.1.0039/src/version.c 2018-06-07 18:17:42.278227523 +0200 +--- src/version.c 2018-06-10 13:12:46.188502730 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 40, + /**/ + +-- +The technology involved in making anything invisible is so infinitely +complex that nine hundred and ninety-nine billion, nine hundred and +ninety-nine million, nine hundred and ninety-nine thousand, nine hundred +and ninety-nine times out of a trillion it is much simpler and more +effective just to take the thing away and do without it. + -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" + + /// 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 /// diff --git a/data/vim/patches/8.1.0041 b/data/vim/patches/8.1.0041 new file mode 100644 index 000000000..a244d05d1 --- /dev/null +++ b/data/vim/patches/8.1.0041 @@ -0,0 +1,107 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0041 +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.0041 +Problem: Attribute "width" missing from python window attribute list. +Solution: Add the item. (Ken Takata) Order the list like the items are used + in the WindowAttr() function. +Files: src/if_py_both.h, src/testdir/test86.ok, src/testdir/test87.ok + + +*** ../vim-8.1.0040/src/if_py_both.h 2018-05-15 22:30:34.000000000 +0200 +--- src/if_py_both.h 2018-06-10 13:46:57.656741596 +0200 +*************** +*** 3836,3844 **** + else + return firstwin; + } + static char *WindowAttrs[] = { +! "buffer", "cursor", "height", "vars", "options", "number", "row", "col", +! "tabpage", "valid", + NULL + }; + +--- 3836,3855 ---- + else + return firstwin; + } ++ ++ // Use the same order as in the WindowAttr() function. + static char *WindowAttrs[] = { +! "buffer", +! "cursor", +! "height", +! "row", +! "width", +! "col", +! "vars", +! "options", +! "number", +! "tabpage", +! "valid", + NULL + }; + +*** ../vim-8.1.0040/src/testdir/test86.ok 2017-11-09 19:53:22.000000000 +0100 +--- src/testdir/test86.ok 2018-06-10 13:54:16.580100057 +0200 +*************** +*** 443,449 **** + vim.current.tabpage:TabPage:True + current:__dir__,__members__,buffer,line,range,tabpage,window + buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars +! window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars + tabpage:__dir__,__members__,number,valid,vars,window,windows + range:__dir__,__members__,append,end,start + dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values +--- 443,449 ---- + vim.current.tabpage:TabPage:True + current:__dir__,__members__,buffer,line,range,tabpage,window + buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars +! window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width + tabpage:__dir__,__members__,number,valid,vars,window,windows + range:__dir__,__members__,append,end,start + dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values +*** ../vim-8.1.0040/src/testdir/test87.ok 2017-11-09 19:53:46.000000000 +0100 +--- src/testdir/test87.ok 2018-06-10 13:55:00.692036859 +0200 +*************** +*** 443,449 **** + vim.current.tabpage:TabPage:True + current:__dir__,buffer,line,range,tabpage,window + buffer:__dir__,append,mark,name,number,options,range,valid,vars +! window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars + tabpage:__dir__,number,valid,vars,window,windows + range:__dir__,append,end,start + dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values +--- 443,449 ---- + vim.current.tabpage:TabPage:True + current:__dir__,buffer,line,range,tabpage,window + buffer:__dir__,append,mark,name,number,options,range,valid,vars +! window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width + tabpage:__dir__,number,valid,vars,window,windows + range:__dir__,append,end,start + dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values +*** ../vim-8.1.0040/src/version.c 2018-06-10 13:12:52.176496009 +0200 +--- src/version.c 2018-06-10 13:51:40.632325004 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 41, + /**/ + +-- +'Well, here's something to occupy you and keep your mind off things.' +'It won't work, I have an exceptionally large mind.' + -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" + + /// 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 /// diff --git a/data/vim/patches/8.1.0042 b/data/vim/patches/8.1.0042 new file mode 100644 index 000000000..ad8f947cf --- /dev/null +++ b/data/vim/patches/8.1.0042 @@ -0,0 +1,110 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0042 +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.0042 +Problem: If omni completion opens a window Insert mode is stopped. + (Hirohito Higashi) +Solution: Only set stop_insert_mode in a prompt buffer window. +Files: src/window.c + + +*** ../vim-8.1.0041/src/window.c 2018-06-06 18:02:31.402773772 +0200 +--- src/window.c 2018-06-10 14:33:03.071395777 +0200 +*************** +*** 2107,2123 **** + static void + leaving_window(win_T *win) + { + // When leaving a prompt window stop Insert mode and perhaps restart + // it when entering that window again. + win->w_buffer->b_prompt_insert = restart_edit; + restart_edit = NUL; + + // When leaving the window (or closing the window) was done from a +! // callback we need to break out of the Insert mode loop. + if (State & INSERT) + { + stop_insert_mode = TRUE; +! if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert == NUL) + win->w_buffer->b_prompt_insert = 'A'; + } + } +--- 2107,2128 ---- + static void + leaving_window(win_T *win) + { ++ // Only matters for a prompt window. ++ if (!bt_prompt(win->w_buffer)) ++ return; ++ + // When leaving a prompt window stop Insert mode and perhaps restart + // it when entering that window again. + win->w_buffer->b_prompt_insert = restart_edit; + restart_edit = NUL; + + // When leaving the window (or closing the window) was done from a +! // callback we need to break out of the Insert mode loop and restart Insert +! // mode when entering the window again. + if (State & INSERT) + { + stop_insert_mode = TRUE; +! if (win->w_buffer->b_prompt_insert == NUL) + win->w_buffer->b_prompt_insert = 'A'; + } + } +*************** +*** 2125,2136 **** + static void + entering_window(win_T *win) + { + // When switching to a prompt buffer that was in Insert mode, don't stop + // Insert mode, it may have been set in leaving_window(). +! if (bt_prompt(win->w_buffer) && win->w_buffer->b_prompt_insert != NUL) + stop_insert_mode = FALSE; + +! // When entering the prompt window may restart Insert mode. + restart_edit = win->w_buffer->b_prompt_insert; + } + #endif +--- 2130,2146 ---- + static void + entering_window(win_T *win) + { ++ // Only matters for a prompt window. ++ if (!bt_prompt(win->w_buffer)) ++ return; ++ + // When switching to a prompt buffer that was in Insert mode, don't stop + // Insert mode, it may have been set in leaving_window(). +! if (win->w_buffer->b_prompt_insert != NUL) + stop_insert_mode = FALSE; + +! // When entering the prompt window restart Insert mode if we were in Insert +! // mode when we left it. + restart_edit = win->w_buffer->b_prompt_insert; + } + #endif +*** ../vim-8.1.0041/src/version.c 2018-06-10 13:55:48.527949068 +0200 +--- src/version.c 2018-06-10 14:38:47.846545314 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 42, + /**/ + +-- +The only backup you need is the one that you didn't have time for. +(Murphy) + + /// 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 /// diff --git a/data/vim/patches/8.1.0043 b/data/vim/patches/8.1.0043 new file mode 100644 index 000000000..3a03439a6 --- /dev/null +++ b/data/vim/patches/8.1.0043 @@ -0,0 +1,109 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0043 +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.0043 +Problem: ++bad argument of :edit does not work properly. +Solution: Return FAIL from get_bad_opt() only when there is no valid + argument. (Dominique Pelle, Christian Brabandt, closes #2966, + closes #2947) +Files: src/ex_docmd.c, src/testdir/test_plus_arg_edit.vim + + +*** ../vim-8.1.0042/src/ex_docmd.c 2018-06-06 09:11:07.257357317 +0200 +--- src/ex_docmd.c 2018-06-12 12:34:07.224425589 +0200 +*************** +*** 5318,5324 **** + eap->bad_char = BAD_DROP; + else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL) + eap->bad_char = *p; +! return FAIL; + } + #endif + +--- 5318,5326 ---- + eap->bad_char = BAD_DROP; + else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL) + eap->bad_char = *p; +! else +! return FAIL; +! return OK; + } + #endif + +*** ../vim-8.1.0042/src/testdir/test_plus_arg_edit.vim 2017-11-21 11:34:15.000000000 +0100 +--- src/testdir/test_plus_arg_edit.vim 2018-06-12 12:34:07.228425586 +0200 +*************** +*** 1,10 **** + " Tests for complicated + argument to :edit command + function Test_edit() +! call writefile(["foo|bar"], "Xfile1") +! call writefile(["foo/bar"], "Xfile2") + edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w + call assert_equal(["fooPIPEbar"], readfile("Xfile1")) + call assert_equal(["fooSLASHbar"], readfile("Xfile2")) + call delete('Xfile1') + call delete('Xfile2') + endfunction +--- 1,38 ---- + " Tests for complicated + argument to :edit command + function Test_edit() +! call writefile(["foo|bar"], "Xfile1") +! call writefile(["foo/bar"], "Xfile2") + edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w + call assert_equal(["fooPIPEbar"], readfile("Xfile1")) + call assert_equal(["fooSLASHbar"], readfile("Xfile2")) + call delete('Xfile1') + call delete('Xfile2') + endfunction ++ ++ func Test_edit_bad() ++ if !has('multi_byte') ++ finish ++ endif ++ ++ " Test loading a utf8 file with bad utf8 sequences. ++ call writefile(["[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]"], "Xfile") ++ new ++ ++ " Without ++bad=..., the default behavior is like ++bad=? ++ e! ++enc=utf8 Xfile ++ call assert_equal('[?][?][???][??]', getline(1)) ++ ++ e! ++enc=utf8 ++bad=_ Xfile ++ call assert_equal('[_][_][___][__]', getline(1)) ++ ++ e! ++enc=utf8 ++bad=drop Xfile ++ call assert_equal('[][][][]', getline(1)) ++ ++ e! ++enc=utf8 ++bad=keep Xfile ++ call assert_equal("[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]", getline(1)) ++ ++ call assert_fails('e! ++enc=utf8 ++bad=foo Xfile', 'E474:') ++ ++ bw! ++ call delete('Xfile') ++ endfunc +*** ../vim-8.1.0042/src/version.c 2018-06-10 14:39:47.022412206 +0200 +--- src/version.c 2018-06-12 12:37:19.442760084 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 43, + /**/ + +-- +Have you heard about the new Beowulf cluster? It's so fast, it executes +an infinite loop in 6 seconds. + + /// 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 /// diff --git a/data/vim/patches/8.1.0044 b/data/vim/patches/8.1.0044 new file mode 100644 index 000000000..94cc14c3d --- /dev/null +++ b/data/vim/patches/8.1.0044 @@ -0,0 +1,82 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0044 +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.0044 +Problem: If a test function exists Vim this may go unnoticed. +Solution: Check for a test funtion quitting Vim. Fix tests that did exit + Vim. +Files: src/testdir/runtest.vim, src/testdir/test_assert.vim + + +*** ../vim-8.1.0043/src/testdir/runtest.vim 2018-04-10 18:56:35.000000000 +0200 +--- src/testdir/runtest.vim 2018-06-12 14:57:06.691409091 +0200 +*************** +*** 124,130 **** +--- 124,133 ---- + exe 'call ' . a:test + else + try ++ let s:test = a:test ++ au VimLeavePre * call EarlyExit(s:test) + exe 'call ' . a:test ++ au! VimLeavePre + catch /^\cskipped/ + call add(s:messages, ' Skipped') + call add(s:skipped, 'SKIPPED ' . a:test . ': ' . substitute(v:exception, '^\S*\s\+', '', '')) +*************** +*** 174,179 **** +--- 177,191 ---- + endif + endfunc + ++ func EarlyExit(test) ++ " It's OK for the test we use to test the quit detection. ++ if a:test != 'Test_zz_quit_detected()' ++ call add(v:errors, 'Test caused Vim to exit: ' . a:test) ++ endif ++ ++ call FinishTesting() ++ endfunc ++ + " This function can be called by a test if it wants to abort testing. + func FinishTesting() + call AfterTheTest() +*** ../vim-8.1.0043/src/testdir/test_assert.vim 2018-04-28 16:44:49.000000000 +0200 +--- src/testdir/test_assert.vim 2018-06-12 13:26:02.775142877 +0200 +*************** +*** 198,200 **** +--- 198,206 ---- + smile + sleep 300m + endfunc ++ ++ " Must be last. ++ func Test_zz_quit_detected() ++ " Verify that if a test function ends Vim the test script detects this. ++ quit ++ endfunc +*** ../vim-8.1.0043/src/version.c 2018-06-12 12:39:37.593152427 +0200 +--- src/version.c 2018-06-12 13:45:44.070675020 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 44, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +36. You miss more than five meals a week downloading the latest games from + Apogee. + + /// 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 /// diff --git a/data/vim/patches/8.1.0045 b/data/vim/patches/8.1.0045 new file mode 100644 index 000000000..b889adae6 --- /dev/null +++ b/data/vim/patches/8.1.0045 @@ -0,0 +1,357 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0045 +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.0045 (after 8.1.0038) +Problem: Popup test isn't run completely. +Solution: Remove "finish". Clean up function definitions. +Files: src/testdir/test_popup.vim + + +*** ../vim-8.1.0044/src/testdir/test_popup.vim 2018-06-07 15:18:36.826611722 +0200 +--- src/testdir/test_popup.vim 2018-06-12 15:14:43.418467569 +0200 +*************** +*** 6,12 **** + let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] + let g:setting = '' + +! func! ListMonths() + if g:setting != '' + exe ":set" g:setting + endif +--- 6,12 ---- + let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] + let g:setting = '' + +! func ListMonths() + if g:setting != '' + exe ":set" g:setting + endif +*************** +*** 19,25 **** + return '' + endfunc + +! func! Test_popup_complete2() + " Although the popupmenu is not visible, this does not mean completion mode + " has ended. After pressing <f5> to complete the currently typed char, Vim + " still stays in the first state of the completion (:h ins-completion-menu), +--- 19,25 ---- + return '' + endfunc + +! func Test_popup_complete2() + " Although the popupmenu is not visible, this does not mean completion mode + " has ended. After pressing <f5> to complete the currently typed char, Vim + " still stays in the first state of the completion (:h ins-completion-menu), +*************** +*** 34,42 **** + call assert_equal(["Dece", "", "December2015"], getline(1,3)) + %d + bw! +! endfu + +! func! Test_popup_complete() + new + inoremap <f5> <c-r>=ListMonths()<cr> + +--- 34,42 ---- + call assert_equal(["Dece", "", "December2015"], getline(1,3)) + %d + bw! +! endfunc + +! func Test_popup_complete() + new + inoremap <f5> <c-r>=ListMonths()<cr> + +*************** +*** 215,224 **** + call feedkeys("aM\<f5>\<enter>\<esc>", 'tx') + call assert_equal(["March", "M", "March"], getline(1,4)) + %d +! endfu + + +! func! Test_popup_completion_insertmode() + new + inoremap <F5> <C-R>=ListMonths()<CR> + +--- 215,224 ---- + call feedkeys("aM\<f5>\<enter>\<esc>", 'tx') + call assert_equal(["March", "M", "March"], getline(1,4)) + %d +! endfunc + + +! func Test_popup_completion_insertmode() + new + inoremap <F5> <C-R>=ListMonths()<CR> + +*************** +*** 247,266 **** + iunmap <F5> + endfunc + +- " TODO: Fix what breaks after this line. +- " - Do not use "q!", it may exit Vim if there is an error +- finish +- + func Test_noinsert_complete() +! function! s:complTest1() abort + call complete(1, ['source', 'soundfold']) + return '' +! endfunction + +! function! s:complTest2() abort + call complete(1, ['source', 'soundfold']) + return '' +! endfunction + + new + set completeopt+=noinsert +--- 247,262 ---- + iunmap <F5> + endfunc + + func Test_noinsert_complete() +! func! s:complTest1() abort + call complete(1, ['source', 'soundfold']) + return '' +! endfunc + +! func! s:complTest2() abort + call complete(1, ['source', 'soundfold']) + return '' +! endfunc + + new + set completeopt+=noinsert +*************** +*** 281,289 **** + endfunc + + func Test_compl_vim_cmds_after_register_expr() +! function! s:test_func() + return 'autocmd ' +! endfunction + augroup AAAAA_Group + au! + augroup END +--- 277,285 ---- + endfunc + + func Test_compl_vim_cmds_after_register_expr() +! func! s:test_func() + return 'autocmd ' +! endfunc + augroup AAAAA_Group + au! + augroup END +*************** +*** 330,336 **** + else + return ['twodef', 'twoDEF'] + endif +! endfunction + + " Test that nothing happens if the 'completefunc' opens + " a new window (no completion, no crash) +--- 326,332 ---- + else + return ['twodef', 'twoDEF'] + endif +! endfunc + + " Test that nothing happens if the 'completefunc' opens + " a new window (no completion, no crash) +*************** +*** 407,413 **** + q! + endfunc + +! function UndoComplete() + call complete(1, ['January', 'February', 'March', + \ 'April', 'May', 'June', 'July', 'August', 'September', + \ 'October', 'November', 'December']) +--- 403,409 ---- + q! + endfunc + +! func UndoComplete() + call complete(1, ['January', 'February', 'March', + \ 'April', 'May', 'June', 'July', 'August', 'September', + \ 'October', 'November', 'December']) +*************** +*** 444,450 **** + q! + endfunc + +! function! DummyCompleteFive(findstart, base) + if a:findstart + return 0 + else +--- 440,446 ---- + q! + endfunc + +! func DummyCompleteFive(findstart, base) + if a:findstart + return 0 + else +*************** +*** 489,495 **** + q! + endfunc + +! function! DummyCompleteSix() + call complete(1, ['Hello', 'World']) + return '' + endfunction +--- 485,491 ---- + q! + endfunc + +! func DummyCompleteSix() + call complete(1, ['Hello', 'World']) + return '' + endfunction +*************** +*** 577,583 **** + bwipe! + endfunc + +! fun MessCompleteMonths() + for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep") + call complete_add(m) + if complete_check() +--- 573,579 ---- + bwipe! + endfunc + +! func MessCompleteMonths() + for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep") + call complete_add(m) + if complete_check() +*************** +*** 585,598 **** + endif + endfor + return [] +! endfun + +! fun MessCompleteMore() + call complete(1, split("Oct Nov Dec")) + return [] +! endfun + +! fun MessComplete(findstart, base) + if a:findstart + let line = getline('.') + let start = col('.') - 1 +--- 581,594 ---- + endif + endfor + return [] +! endfunc + +! func MessCompleteMore() + call complete(1, split("Oct Nov Dec")) + return [] +! endfunc + +! func MessComplete(findstart, base) + if a:findstart + let line = getline('.') + let start = col('.') - 1 +*************** +*** 605,611 **** + call MessCompleteMore() + return [] + endif +! endf + + func Test_complete_func_mess() + " Calling complete() after complete_add() in 'completefunc' is wrong, but it +--- 601,607 ---- + call MessCompleteMore() + return [] + endif +! endfunc + + func Test_complete_func_mess() + " Calling complete() after complete_add() in 'completefunc' is wrong, but it +*************** +*** 835,841 **** + bwipe! + endfunc + +! fun! Test_complete_o_tab() + let s:o_char_pressed = 0 + + fun! s:act_on_text_changed() +--- 831,837 ---- + bwipe! + endfunc + +! func Test_complete_o_tab() + let s:o_char_pressed = 0 + + fun! s:act_on_text_changed() +*************** +*** 843,849 **** + let s:o_char_pressed = 0 + call feedkeys("\<c-x>\<c-n>", 'i') + endif +! endf + + set completeopt=menu,noselect + new +--- 839,845 ---- + let s:o_char_pressed = 0 + call feedkeys("\<c-x>\<c-n>", 'i') + endif +! endfunc + + set completeopt=menu,noselect + new +*************** +*** 862,868 **** + bwipe! + set completeopt& + delfunc s:act_on_text_changed +! endf + + + " vim: shiftwidth=2 sts=2 expandtab +--- 858,864 ---- + bwipe! + set completeopt& + delfunc s:act_on_text_changed +! endfunc + + + " vim: shiftwidth=2 sts=2 expandtab +*** ../vim-8.1.0044/src/version.c 2018-06-12 14:58:35.566840630 +0200 +--- src/version.c 2018-06-12 15:21:43.280832536 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 45, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +37. You start looking for hot HTML addresses in public restrooms. + + /// 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 /// diff --git a/data/vim/patches/8.1.0046 b/data/vim/patches/8.1.0046 new file mode 100644 index 000000000..2b9682b93 --- /dev/null +++ b/data/vim/patches/8.1.0046 @@ -0,0 +1,256 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0046 +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.0046 +Problem: Loading a session file fails if 'winheight' is a big number. +Solution: Set 'minwinheight' to zero at first. Don't give an error when + setting 'minwinheight' while 'winheight' is a big number. + Fix using vertical splits. Fix setting 'minwinwidth'. + (closes #2970) +Files: src/testdir/test_mksession.vim, src/option.c, src/window.c, + src/proto/window.pro + + +*** ../vim-8.1.0045/src/testdir/test_mksession.vim 2018-03-09 21:25:55.000000000 +0100 +--- src/testdir/test_mksession.vim 2018-06-12 16:38:40.344105918 +0200 +*************** +*** 106,118 **** + + func Test_mksession_winheight() + new +! set winheight=10 winminheight=2 + mksession! Xtest_mks.out + source Xtest_mks.out + + call delete('Xtest_mks.out') + endfunc + + func Test_mksession_arglist() + argdel * + next file1 file2 file3 file4 +--- 106,127 ---- + + func Test_mksession_winheight() + new +! set winheight=10 +! set winminheight=2 + mksession! Xtest_mks.out + source Xtest_mks.out + + call delete('Xtest_mks.out') + endfunc + ++ func Test_mksession_large_winheight() ++ set winheight=999 ++ mksession! Xtest_mks_winheight.out ++ set winheight& ++ source Xtest_mks_winheight.out ++ call delete('Xtest_mks_winheight.out') ++ endfunc ++ + func Test_mksession_arglist() + argdel * + next file1 file2 file3 file4 +*** ../vim-8.1.0045/src/option.c 2018-06-04 17:28:04.729961269 +0200 +--- src/option.c 2018-06-12 16:34:27.832376913 +0200 +*************** +*** 8796,8801 **** +--- 8796,8802 ---- + */ + if (pp == &p_wh || pp == &p_hh) + { ++ // 'winheight' and 'helpheight' + if (p_wh < 1) + { + errmsg = e_positive; +*************** +*** 8821,8830 **** + win_setheight((int)p_hh); + } + } +- +- /* 'winminheight' */ + else if (pp == &p_wmh) + { + if (p_wmh < 0) + { + errmsg = e_positive; +--- 8822,8830 ---- + win_setheight((int)p_hh); + } + } + else if (pp == &p_wmh) + { ++ // 'winminheight' + if (p_wmh < 0) + { + errmsg = e_positive; +*************** +*** 8839,8844 **** +--- 8839,8845 ---- + } + else if (pp == &p_wiw) + { ++ // 'winwidth' + if (p_wiw < 1) + { + errmsg = e_positive; +*************** +*** 8854,8863 **** + if (!ONE_WINDOW && curwin->w_width < p_wiw) + win_setwidth((int)p_wiw); + } +- +- /* 'winminwidth' */ + else if (pp == &p_wmw) + { + if (p_wmw < 0) + { + errmsg = e_positive; +--- 8855,8863 ---- + if (!ONE_WINDOW && curwin->w_width < p_wiw) + win_setwidth((int)p_wiw); + } + else if (pp == &p_wmw) + { ++ // 'winminwidth' + if (p_wmw < 0) + { + errmsg = e_positive; +*************** +*** 8868,8874 **** + errmsg = e_winwidth; + p_wmw = p_wiw; + } +! win_setminheight(); + } + + /* (re)set last window status line */ +--- 8868,8874 ---- + errmsg = e_winwidth; + p_wmw = p_wiw; + } +! win_setminwidth(); + } + + /* (re)set last window status line */ +*** ../vim-8.1.0045/src/window.c 2018-06-10 14:39:47.022412206 +0200 +--- src/window.c 2018-06-12 16:41:04.447771813 +0200 +*************** +*** 5430,5457 **** + } + + /* +! * Check 'winminheight' for a valid value. + */ + void + win_setminheight(void) + { + int room; + int first = TRUE; +- win_T *wp; + +! /* loop until there is a 'winminheight' that is possible */ + while (p_wmh > 0) + { +! /* TODO: handle vertical splits */ +! room = -p_wh; +! FOR_ALL_WINDOWS(wp) +! room += VISIBLE_HEIGHT(wp) - p_wmh; +! if (room >= 0) + break; + --p_wmh; + if (first) + { + EMSG(_(e_noroom)); + first = FALSE; + } + } +--- 5430,5481 ---- + } + + /* +! * Check 'winminheight' for a valid value and reduce it if needed. + */ + void + win_setminheight(void) + { + int room; ++ int needed; + int first = TRUE; + +! // loop until there is a 'winminheight' that is possible + while (p_wmh > 0) + { +! room = Rows - p_ch; +! needed = frame_minheight(topframe, NULL); +! if (room >= needed) + break; + --p_wmh; + if (first) + { + EMSG(_(e_noroom)); ++ first = FALSE; ++ } ++ } ++ } ++ ++ /* ++ * Check 'winminwidth' for a valid value and reduce it if needed. ++ */ ++ void ++ win_setminwidth(void) ++ { ++ int room; ++ int needed; ++ int first = TRUE; ++ ++ // loop until there is a 'winminheight' that is possible ++ while (p_wmw > 0) ++ { ++ room = Columns; ++ needed = frame_minwidth(topframe, NULL); ++ if (room >= needed) ++ break; ++ --p_wmw; ++ if (first) ++ { ++ EMSG(_(e_noroom)); + first = FALSE; + } + } +*** ../vim-8.1.0045/src/proto/window.pro 2018-05-17 13:52:56.000000000 +0200 +--- src/proto/window.pro 2018-06-12 16:34:10.876376437 +0200 +*************** +*** 54,59 **** +--- 54,60 ---- + void win_setwidth(int width); + void win_setwidth_win(int width, win_T *wp); + void win_setminheight(void); ++ void win_setminwidth(void); + void win_drag_status_line(win_T *dragwin, int offset); + void win_drag_vsep_line(win_T *dragwin, int offset); + void set_fraction(win_T *wp); +*** ../vim-8.1.0045/src/version.c 2018-06-12 15:22:39.640579965 +0200 +--- src/version.c 2018-06-12 16:01:12.917283351 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 46, + /**/ + +-- +He who laughs last, thinks slowest. + + /// 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 /// diff --git a/data/vim/patches/8.1.0047 b/data/vim/patches/8.1.0047 new file mode 100644 index 000000000..da8bf42f0 --- /dev/null +++ b/data/vim/patches/8.1.0047 @@ -0,0 +1,93 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0047 +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.0047 +Problem: No completion for :unlet $VAR. +Solution: Add completion. (Jason Franklin) +Files: src/ex_docmd.c, src/testdir/test_unlet.vim + + +*** ../vim-8.1.0046/src/ex_docmd.c 2018-06-12 12:39:37.585152510 +0200 +--- src/ex_docmd.c 2018-06-12 16:59:13.387246272 +0200 +*************** +*** 4056,4063 **** +--- 4056,4071 ---- + case CMD_unlet: + while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL) + arg = xp->xp_pattern + 1; ++ + xp->xp_context = EXPAND_USER_VARS; + xp->xp_pattern = arg; ++ ++ if (*xp->xp_pattern == '$') ++ { ++ xp->xp_context = EXPAND_ENV_VARS; ++ ++xp->xp_pattern; ++ } ++ + break; + + case CMD_function: +*************** +*** 11277,11283 **** + * winminheight and winminwidth need to be set to avoid an error if the + * user has set winheight or winwidth. + */ +! if (put_line(fd, "set winminheight=1 winheight=1 winminwidth=1 winwidth=1") == FAIL) + return FAIL; + if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL) + return FAIL; +--- 11285,11294 ---- + * winminheight and winminwidth need to be set to avoid an error if the + * user has set winheight or winwidth. + */ +! if (put_line(fd, "set winminheight=0") == FAIL +! || put_line(fd, "set winheight=1") == FAIL +! || put_line(fd, "set winminwidth=0") == FAIL +! || put_line(fd, "set winwidth=1") == FAIL) + return FAIL; + if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL) + return FAIL; +*** ../vim-8.1.0046/src/testdir/test_unlet.vim 2018-05-13 15:58:22.000000000 +0200 +--- src/testdir/test_unlet.vim 2018-06-12 16:59:13.391246246 +0200 +*************** +*** 45,47 **** +--- 45,57 ---- + + unlet $MUST_NOT_BE_AN_ERROR + endfunc ++ ++ func Test_unlet_complete() ++ let g:FOOBAR = 1 ++ call feedkeys(":unlet g:FOO\t\n", 'tx') ++ call assert_true(!exists('g:FOOBAR')) ++ ++ let $FOOBAR = 1 ++ call feedkeys(":unlet $FOO\t\n", 'tx') ++ call assert_true(!exists('$FOOBAR') || empty($FOOBAR)) ++ endfunc +*** ../vim-8.1.0046/src/version.c 2018-06-12 16:49:26.366028607 +0200 +--- src/version.c 2018-06-12 17:00:05.590909690 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 47, + /**/ + +-- +Micro$oft: where do you want to go today? + Linux: where do you want to go tomorrow? + FreeBSD: are you guys coming, or what? + + /// 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 /// diff --git a/data/vim/patches/8.1.0048 b/data/vim/patches/8.1.0048 new file mode 100644 index 000000000..c8da45f80 --- /dev/null +++ b/data/vim/patches/8.1.0048 @@ -0,0 +1,111 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0048 +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.0048 +Problem: vim_str2nr() does not handle numbers close to the maximum. +Solution: Check for overflow more precisely. (Ken Takata, closes #2746) +Files: src/charset.c + + +*** ../vim-8.1.0047/src/charset.c 2018-04-25 21:59:10.000000000 +0200 +--- src/charset.c 2018-06-12 17:20:17.692062915 +0200 +*************** +*** 1928,1935 **** + while ('0' <= *ptr && *ptr <= '1') + { + /* avoid ubsan error for overflow */ +! if (un < UVARNUM_MAX / 2) +! un = 2 * un + (unsigned long)(*ptr - '0'); + else + un = UVARNUM_MAX; + ++ptr; +--- 1928,1935 ---- + while ('0' <= *ptr && *ptr <= '1') + { + /* avoid ubsan error for overflow */ +! if (un <= UVARNUM_MAX / 2) +! un = 2 * un + (uvarnumber_T)(*ptr - '0'); + else + un = UVARNUM_MAX; + ++ptr; +*************** +*** 1943,1949 **** + while ('0' <= *ptr && *ptr <= '7') + { + /* avoid ubsan error for overflow */ +! if (un < UVARNUM_MAX / 8) + un = 8 * un + (uvarnumber_T)(*ptr - '0'); + else + un = UVARNUM_MAX; +--- 1943,1949 ---- + while ('0' <= *ptr && *ptr <= '7') + { + /* avoid ubsan error for overflow */ +! if (un <= UVARNUM_MAX / 8) + un = 8 * un + (uvarnumber_T)(*ptr - '0'); + else + un = UVARNUM_MAX; +*************** +*** 1960,1966 **** + while (vim_isxdigit(*ptr)) + { + /* avoid ubsan error for overflow */ +! if (un < UVARNUM_MAX / 16) + un = 16 * un + (uvarnumber_T)hex2nr(*ptr); + else + un = UVARNUM_MAX; +--- 1960,1966 ---- + while (vim_isxdigit(*ptr)) + { + /* avoid ubsan error for overflow */ +! if (un <= UVARNUM_MAX / 16) + un = 16 * un + (uvarnumber_T)hex2nr(*ptr); + else + un = UVARNUM_MAX; +*************** +*** 1974,1982 **** + /* decimal */ + while (VIM_ISDIGIT(*ptr)) + { + /* avoid ubsan error for overflow */ +! if (un < UVARNUM_MAX / 10) +! un = 10 * un + (uvarnumber_T)(*ptr - '0'); + else + un = UVARNUM_MAX; + ++ptr; +--- 1974,1985 ---- + /* decimal */ + while (VIM_ISDIGIT(*ptr)) + { ++ uvarnumber_T digit = (uvarnumber_T)(*ptr - '0'); ++ + /* avoid ubsan error for overflow */ +! if (un < UVARNUM_MAX / 10 +! || (un == UVARNUM_MAX / 10 && digit <= UVARNUM_MAX % 10)) +! un = 10 * un + digit; + else + un = UVARNUM_MAX; + ++ptr; +*** ../vim-8.1.0047/src/version.c 2018-06-12 17:03:35.949611796 +0200 +--- src/version.c 2018-06-12 17:24:32.210718899 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 48, + /**/ + +-- +Everyone has a photographic memory. Some don't have film. + + /// 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 /// diff --git a/data/vim/patches/8.1.0049 b/data/vim/patches/8.1.0049 new file mode 100644 index 000000000..79dfbe23a --- /dev/null +++ b/data/vim/patches/8.1.0049 @@ -0,0 +1,236 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0049 +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.0049 +Problem: Shell cannot tell running in a terminal window. +Solution: Add the VIM_TERMINAL environment variable. (Christian Brabandt) +Files: runtime/doc/terminal.txt, src/os_unix.c, src/os_win32.c, + src/testdir/test_terminal.vim + + +*** ../vim-8.1.0048/runtime/doc/terminal.txt 2018-05-17 14:49:10.000000000 +0200 +--- runtime/doc/terminal.txt 2018-06-12 17:43:50.152692460 +0200 +*************** +*** 204,210 **** + ++rows={height} Use {height} for the terminal window + height. If the terminal uses the full + Vim height (no window above or below +! th terminal window) the command line + height will be reduced as needed. + ++cols={width} Use {width} for the terminal window + width. If the terminal uses the full +--- 204,210 ---- + ++rows={height} Use {height} for the terminal window + height. If the terminal uses the full + Vim height (no window above or below +! the terminal window) the command line + height will be reduced as needed. + ++cols={width} Use {width} for the terminal window + width. If the terminal uses the full +*************** +*** 243,249 **** + You can use `CTRL-W :hide` to close the terminal window and make the buffer + hidden, the job keeps running. The `:buffer` command can be used to turn the + current window into a terminal window. If there are unsaved changes this +! fails, use ! to force, as usual. + + To have a background job run without a window, and open the window when it's + done, use options like this: > +--- 243,249 ---- + You can use `CTRL-W :hide` to close the terminal window and make the buffer + hidden, the job keeps running. The `:buffer` command can be used to turn the + current window into a terminal window. If there are unsaved changes this +! fails, use ! to force, as usual. + + To have a background job run without a window, and open the window when it's + done, use options like this: > +*************** +*** 376,381 **** +--- 376,382 ---- + COLUMNS number of columns in the terminal initially + COLORS number of colors, 't_Co' (256*256*256 in the GUI) + VIM_SERVERNAME v:servername ++ VIM_TERMINAL v:version + + + MS-Windows ~ +*** ../vim-8.1.0048/src/os_unix.c 2018-05-12 17:42:33.000000000 +0200 +--- src/os_unix.c 2018-06-12 17:58:42.928059243 +0200 +*************** +*** 4169,4174 **** +--- 4169,4175 ---- + static char envbuf_Lines[20]; + static char envbuf_Columns[20]; + static char envbuf_Colors[20]; ++ static char envbuf_Version[20]; + # ifdef FEAT_CLIENTSERVER + static char envbuf_Servername[60]; + # endif +*************** +*** 4189,4194 **** +--- 4190,4197 ---- + setenv("COLUMNS", (char *)envbuf, 1); + sprintf((char *)envbuf, "%ld", colors); + setenv("COLORS", (char *)envbuf, 1); ++ sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION)); ++ setenv("VIM_TERMINAL", (char *)envbuf, 1); + # ifdef FEAT_CLIENTSERVER + setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1); + # endif +*************** +*** 4209,4214 **** +--- 4212,4220 ---- + putenv(envbuf_Columns); + vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors); + putenv(envbuf_Colors); ++ vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld", ++ get_vim_var_nr(VV_VERSION)); ++ putenv(envbuf_Version); + # ifdef FEAT_CLIENTSERVER + vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername), + "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName); +*** ../vim-8.1.0048/src/os_win32.c 2018-05-06 17:05:39.000000000 +0200 +--- src/os_win32.c 2018-06-12 18:00:28.031513685 +0200 +*************** +*** 5275,5299 **** + } + } + +- # ifdef FEAT_CLIENTSERVER + if (is_terminal) + { + char_u *servername = get_vim_var_str(VV_SEND_SERVER); +! size_t lval = STRLEN(servername); +! size_t n; + +! if (ga_grow(gap, (int)(14 + lval + 2)) == OK) + { + for (n = 0; n < 15; n++) + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)"VIM_SERVERNAME="[n]; +! for (n = 0; n < lval; n++) + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)servername[n]; + *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; + } + } +- # endif + } + + void +--- 5275,5317 ---- + } + } + + if (is_terminal) + { ++ # ifdef FEAT_CLIENTSERVER + char_u *servername = get_vim_var_str(VV_SEND_SERVER); +! size_t servername_len = STRLEN(servername); +! # endif +! char_u *version = get_vim_var_str(VV_VERSION); +! size_t version_len = STRLEN(version); +! // size of "VIM_SERVERNAME=" and value, +! // plus "VIM_TERMINAL=" and value, +! // plus two terminating NULs +! size_t n = 0 +! # ifdef FEAT_CLIENTSERVER +! + 15 + servername_len +! # endif +! + 13 + version_len + 2; + +! if (ga_grow(gap, (int)n) == OK) + { ++ # ifdef FEAT_CLIENTSERVER + for (n = 0; n < 15; n++) + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)"VIM_SERVERNAME="[n]; +! for (n = 0; n < servername_len; n++) + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)servername[n]; + *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; ++ # endif ++ for (n = 0; n < 13; n++) ++ *((WCHAR*)gap->ga_data + gap->ga_len++) = ++ (WCHAR)"VIM_TERMINAL="[n]; ++ for (n = 0; n < version_len; n++) ++ *((WCHAR*)gap->ga_data + gap->ga_len++) = ++ (WCHAR)version[n]; ++ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; + } + } + } + + void +*** ../vim-8.1.0048/src/testdir/test_terminal.vim 2018-06-03 18:21:57.809890160 +0200 +--- src/testdir/test_terminal.vim 2018-06-12 18:01:49.195092385 +0200 +*************** +*** 482,499 **** + if !has('clientserver') + return + endif + let buf = Run_shell_in_terminal({}) + " Wait for the shell to display a prompt + call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))}) + if has('win32') +! call term_sendkeys(buf, "echo %VIM_SERVERNAME%\r") + else +! call term_sendkeys(buf, "echo $VIM_SERVERNAME\r") + endif + call term_wait(buf) + call Stop_shell_in_terminal(buf) +! call WaitFor('getline(2) == v:servername') +! call assert_equal(v:servername, getline(2)) + + exe buf . 'bwipe' + unlet buf +--- 482,506 ---- + if !has('clientserver') + return + endif ++ call s:test_environment("VIM_SERVERNAME", v:servername) ++ endfunc ++ ++ func Test_terminal_version() ++ call s:test_environment("VIM_TERMINAL", string(v:version)) ++ endfunc ++ ++ func s:test_environment(name, value) + let buf = Run_shell_in_terminal({}) + " Wait for the shell to display a prompt + call WaitForAssert({-> assert_notequal('', term_getline(buf, 1))}) + if has('win32') +! call term_sendkeys(buf, "echo %" . a:name . "%\r") + else +! call term_sendkeys(buf, "echo $" . a:name . "\r") + endif + call term_wait(buf) + call Stop_shell_in_terminal(buf) +! call WaitForAssert({-> assert_equal(a:value, getline(2))}) + + exe buf . 'bwipe' + unlet buf +*** ../vim-8.1.0048/src/version.c 2018-06-12 17:25:32.054404315 +0200 +--- src/version.c 2018-06-12 18:03:17.778632563 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 49, + /**/ + +-- +On the other hand, you have different fingers. + -- Steven Wright + + /// 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 /// diff --git a/data/vim/patches/8.1.0050 b/data/vim/patches/8.1.0050 new file mode 100644 index 000000000..914d8c818 --- /dev/null +++ b/data/vim/patches/8.1.0050 @@ -0,0 +1,414 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0050 +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.0050 (after 8.1.0049) +Problem: $VIM_TERMINAL is also set when not in a terminal window. +Solution: Pass a flag to indicate whether the job runs in a terminal. +Files: src/channel.c, src/proto/channel.pro, src/evalfunc.c, + src/terminal.c, src/os_unix.c, src/proto/os_unix.pro, + src/os_win32.c + + +*** ../vim-8.1.0049/src/channel.c 2018-06-03 14:42:17.840505115 +0200 +--- src/channel.c 2018-06-12 20:13:06.460135822 +0200 +*************** +*** 5525,5531 **** + * Returns NULL when out of memory. + */ + job_T * +! job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg) + { + job_T *job; + char_u *cmd = NULL; +--- 5525,5535 ---- + * Returns NULL when out of memory. + */ + job_T * +! job_start( +! typval_T *argvars, +! char **argv_arg, +! jobopt_T *opt_arg, +! int is_terminal UNUSED) + { + job_T *job; + char_u *cmd = NULL; +*************** +*** 5679,5685 **** + ch_log(NULL, "Starting job: %s", (char *)ga.ga_data); + ga_clear(&ga); + } +! mch_job_start(argv, job, &opt); + #else + ch_log(NULL, "Starting job: %s", (char *)cmd); + mch_job_start((char *)cmd, job, &opt); +--- 5683,5689 ---- + ch_log(NULL, "Starting job: %s", (char *)ga.ga_data); + ga_clear(&ga); + } +! mch_job_start(argv, job, &opt, is_terminal); + #else + ch_log(NULL, "Starting job: %s", (char *)cmd); + mch_job_start((char *)cmd, job, &opt); +*** ../vim-8.1.0049/src/proto/channel.pro 2018-06-03 14:42:17.848505102 +0200 +--- src/proto/channel.pro 2018-06-12 20:08:25.045683595 +0200 +*************** +*** 66,72 **** + void job_stop_on_exit(void); + int has_pending_job(void); + void job_check_ended(void); +! job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg); + char *job_status(job_T *job); + void job_info(job_T *job, dict_T *dict); + void job_info_all(list_T *l); +--- 66,72 ---- + void job_stop_on_exit(void); + int has_pending_job(void); + void job_check_ended(void); +! job_T *job_start(typval_T *argvars, char **argv_arg, jobopt_T *opt_arg, int is_terminal); + char *job_status(job_T *job); + void job_info(job_T *job, dict_T *dict); + void job_info_all(list_T *l); +*** ../vim-8.1.0049/src/evalfunc.c 2018-06-07 18:17:42.278227523 +0200 +--- src/evalfunc.c 2018-06-12 20:05:33.630628161 +0200 +*************** +*** 7254,7260 **** + rettv->v_type = VAR_JOB; + if (check_restricted() || check_secure()) + return; +! rettv->vval.v_job = job_start(argvars, NULL, NULL); + } + + /* +--- 7254,7260 ---- + rettv->v_type = VAR_JOB; + if (check_restricted() || check_secure()) + return; +! rettv->vval.v_job = job_start(argvars, NULL, NULL, FALSE); + } + + /* +*** ../vim-8.1.0049/src/terminal.c 2018-06-04 17:28:04.729961269 +0200 +--- src/terminal.c 2018-06-12 20:06:16.926389419 +0200 +*************** +*** 5769,5775 **** + #endif + + /* This may change a string in "argvar". */ +! term->tl_job = job_start(argvar, argv, opt); + if (term->tl_job != NULL) + ++term->tl_job->jv_refcount; + +--- 5769,5775 ---- + #endif + + /* This may change a string in "argvar". */ +! term->tl_job = job_start(argvar, argv, opt, TRUE); + if (term->tl_job != NULL) + ++term->tl_job->jv_refcount; + +*** ../vim-8.1.0049/src/os_unix.c 2018-06-12 18:04:28.038267855 +0200 +--- src/os_unix.c 2018-06-12 20:11:20.272719511 +0200 +*************** +*** 4159,4165 **** + * Set the environment for a child process. + */ + static void +! set_child_environment(long rows, long columns, char *term) + { + # ifdef HAVE_SETENV + char envbuf[50]; +--- 4159,4169 ---- + * Set the environment for a child process. + */ + static void +! set_child_environment( +! long rows, +! long columns, +! char *term, +! int is_terminal UNUSED) + { + # ifdef HAVE_SETENV + char envbuf[50]; +*************** +*** 4169,4175 **** +--- 4173,4181 ---- + static char envbuf_Lines[20]; + static char envbuf_Columns[20]; + static char envbuf_Colors[20]; ++ # ifdef FEAT_TERMINAL + static char envbuf_Version[20]; ++ # endif + # ifdef FEAT_CLIENTSERVER + static char envbuf_Servername[60]; + # endif +*************** +*** 4190,4197 **** + setenv("COLUMNS", (char *)envbuf, 1); + sprintf((char *)envbuf, "%ld", colors); + setenv("COLORS", (char *)envbuf, 1); +! sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION)); +! setenv("VIM_TERMINAL", (char *)envbuf, 1); + # ifdef FEAT_CLIENTSERVER + setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1); + # endif +--- 4196,4208 ---- + setenv("COLUMNS", (char *)envbuf, 1); + sprintf((char *)envbuf, "%ld", colors); + setenv("COLORS", (char *)envbuf, 1); +! # ifdef FEAT_TERMINAL +! if (is_terminal) +! { +! sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION)); +! setenv("VIM_TERMINAL", (char *)envbuf, 1); +! } +! # endif + # ifdef FEAT_CLIENTSERVER + setenv("VIM_SERVERNAME", serverName == NULL ? "" : (char *)serverName, 1); + # endif +*************** +*** 4212,4220 **** + putenv(envbuf_Columns); + vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors); + putenv(envbuf_Colors); +! vim_snprintf(envbuf_Version, sizeof(envbuf_Version), "VIM_TERMINAL=%ld", +! get_vim_var_nr(VV_VERSION)); +! putenv(envbuf_Version); + # ifdef FEAT_CLIENTSERVER + vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername), + "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName); +--- 4223,4236 ---- + putenv(envbuf_Columns); + vim_snprintf(envbuf_Colors, sizeof(envbuf_Colors), "COLORS=%ld", colors); + putenv(envbuf_Colors); +! # ifdef FEAT_TERMINAL +! if (is_terminal) +! { +! vim_snprintf(envbuf_Version, sizeof(envbuf_Version), +! "VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION)); +! putenv(envbuf_Version); +! } +! # endif + # ifdef FEAT_CLIENTSERVER + vim_snprintf(envbuf_Servername, sizeof(envbuf_Servername), + "VIM_SERVERNAME=%s", serverName == NULL ? "" : (char *)serverName); +*************** +*** 4224,4232 **** + } + + static void +! set_default_child_environment(void) + { +! set_child_environment(Rows, Columns, "dumb"); + } + #endif + +--- 4240,4248 ---- + } + + static void +! set_default_child_environment(int is_terminal) + { +! set_child_environment(Rows, Columns, "dumb", is_terminal); + } + #endif + +*************** +*** 4689,4695 **** + # endif + } + # endif +! set_default_child_environment(); + + /* + * stderr is only redirected when using the GUI, so that a +--- 4705,4711 ---- + # endif + } + # endif +! set_default_child_environment(FALSE); + + /* + * stderr is only redirected when using the GUI, so that a +*************** +*** 5367,5373 **** + + #if defined(FEAT_JOB_CHANNEL) || defined(PROTO) + void +! mch_job_start(char **argv, job_T *job, jobopt_T *options) + { + pid_t pid; + int fd_in[2] = {-1, -1}; /* for stdin */ +--- 5383,5389 ---- + + #if defined(FEAT_JOB_CHANNEL) || defined(PROTO) + void +! mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal) + { + pid_t pid; + int fd_in[2] = {-1, -1}; /* for stdin */ +*************** +*** 5515,5525 **** + set_child_environment( + (long)options->jo_term_rows, + (long)options->jo_term_cols, +! term); + } + else + # endif +! set_default_child_environment(); + + if (options->jo_env != NULL) + { +--- 5531,5542 ---- + set_child_environment( + (long)options->jo_term_rows, + (long)options->jo_term_cols, +! term, +! is_terminal); + } + else + # endif +! set_default_child_environment(is_terminal); + + if (options->jo_env != NULL) + { +*** ../vim-8.1.0049/src/proto/os_unix.pro 2018-05-17 13:52:48.000000000 +0200 +--- src/proto/os_unix.pro 2018-06-12 20:08:29.497659084 +0200 +*************** +*** 62,68 **** + void mch_new_shellsize(void); + void may_send_sigint(int c, pid_t pid, pid_t wpid); + int mch_call_shell(char_u *cmd, int options); +! void mch_job_start(char **argv, job_T *job, jobopt_T *options); + char *mch_job_status(job_T *job); + job_T *mch_detect_ended_job(job_T *job_list); + int mch_signal_job(job_T *job, char_u *how); +--- 62,68 ---- + void mch_new_shellsize(void); + void may_send_sigint(int c, pid_t pid, pid_t wpid); + int mch_call_shell(char_u *cmd, int options); +! void mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal); + char *mch_job_status(job_T *job); + job_T *mch_detect_ended_job(job_T *job_list); + int mch_signal_job(job_T *job, char_u *how); +*** ../vim-8.1.0049/src/os_win32.c 2018-06-12 18:04:28.038267855 +0200 +--- src/os_win32.c 2018-06-12 20:18:53.770228655 +0200 +*************** +*** 5275,5300 **** + } + } + +! if (is_terminal) + { +! # ifdef FEAT_CLIENTSERVER + char_u *servername = get_vim_var_str(VV_SEND_SERVER); + size_t servername_len = STRLEN(servername); +! # endif + char_u *version = get_vim_var_str(VV_VERSION); + size_t version_len = STRLEN(version); + // size of "VIM_SERVERNAME=" and value, + // plus "VIM_TERMINAL=" and value, + // plus two terminating NULs + size_t n = 0 +! # ifdef FEAT_CLIENTSERVER + + 15 + servername_len +! # endif +! + 13 + version_len + 2; + + if (ga_grow(gap, (int)n) == OK) + { +! # ifdef FEAT_CLIENTSERVER + for (n = 0; n < 15; n++) + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)"VIM_SERVERNAME="[n]; +--- 5275,5305 ---- + } + } + +! # if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL) + { +! # ifdef FEAT_CLIENTSERVER + char_u *servername = get_vim_var_str(VV_SEND_SERVER); + size_t servername_len = STRLEN(servername); +! # endif +! # ifdef FEAT_TERMINAL + char_u *version = get_vim_var_str(VV_VERSION); + size_t version_len = STRLEN(version); ++ # endif + // size of "VIM_SERVERNAME=" and value, + // plus "VIM_TERMINAL=" and value, + // plus two terminating NULs + size_t n = 0 +! # ifdef FEAT_CLIENTSERVER + + 15 + servername_len +! # endif +! # ifdef FEAT_TERMINAL +! + 13 + version_len + 2 +! # endif +! ; + + if (ga_grow(gap, (int)n) == OK) + { +! # ifdef FEAT_CLIENTSERVER + for (n = 0; n < 15; n++) + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)"VIM_SERVERNAME="[n]; +*************** +*** 5302,5315 **** + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)servername[n]; + *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; +! # endif +! for (n = 0; n < 13; n++) +! *((WCHAR*)gap->ga_data + gap->ga_len++) = +! (WCHAR)"VIM_TERMINAL="[n]; +! for (n = 0; n < version_len; n++) +! *((WCHAR*)gap->ga_data + gap->ga_len++) = +! (WCHAR)version[n]; +! *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; + } + } + } +--- 5307,5325 ---- + *((WCHAR*)gap->ga_data + gap->ga_len++) = + (WCHAR)servername[n]; + *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; +! # endif +! # ifdef FEAT_TERMINAL +! if (is_terminal) +! { +! for (n = 0; n < 13; n++) +! *((WCHAR*)gap->ga_data + gap->ga_len++) = +! (WCHAR)"VIM_TERMINAL="[n]; +! for (n = 0; n < version_len; n++) +! *((WCHAR*)gap->ga_data + gap->ga_len++) = +! (WCHAR)version[n]; +! *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0'; +! } +! # endif + } + } + } +*** ../vim-8.1.0049/src/version.c 2018-06-12 18:04:28.042267834 +0200 +--- src/version.c 2018-06-12 20:21:54.749235631 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 50, + /**/ + +-- +Change is inevitable, except from a vending machine. + + /// 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 /// diff --git a/data/vim/patches/8.1.0051 b/data/vim/patches/8.1.0051 new file mode 100644 index 000000000..2d07138b3 --- /dev/null +++ b/data/vim/patches/8.1.0051 @@ -0,0 +1,44 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0051 +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.0051 (after 8.1.0050) +Problem: MS-Windows: missing #endif. +Solution: Add the #endif. +Files: src/os_win32.c + + +*** ../vim-8.1.0050/src/os_win32.c 2018-06-12 20:25:47.891923371 +0200 +--- src/os_win32.c 2018-06-12 21:10:04.466837989 +0200 +*************** +*** 5322,5327 **** +--- 5322,5328 ---- + # endif + } + } ++ # endif + } + + void +*** ../vim-8.1.0050/src/version.c 2018-06-12 20:25:47.891923371 +0200 +--- src/version.c 2018-06-12 21:10:42.242668187 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 51, + /**/ + +-- +Those who live by the sword get shot by those who don't. + + /// 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 /// diff --git a/data/vim/patches/8.1.0052 b/data/vim/patches/8.1.0052 new file mode 100644 index 000000000..2293e705c --- /dev/null +++ b/data/vim/patches/8.1.0052 @@ -0,0 +1,50 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0052 +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.0052 +Problem: When a mapping to <Nop> times out the next mapping is skipped. +Solution: Reset "timedout" when waiting for a character. (Christian + Brabandt, closes #2921) +Files: src/getchar.c + + +*** ../vim-8.1.0051/src/getchar.c 2018-05-23 21:53:48.352478970 +0200 +--- src/getchar.c 2018-06-12 21:22:30.771274224 +0200 +*************** +*** 2856,2861 **** +--- 2856,2866 ---- + /* + * get a character: 3. from the user - get it + */ ++ if (typebuf.tb_len == 0) ++ // timedout may have been set while waiting for a mapping ++ // that has a <Nop> RHS. ++ timedout = FALSE; ++ + wait_tb_len = typebuf.tb_len; + c = inchar(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len, + typebuf.tb_buflen - typebuf.tb_off - typebuf.tb_len - 1, +*** ../vim-8.1.0051/src/version.c 2018-06-12 21:11:08.626548598 +0200 +--- src/version.c 2018-06-12 21:28:00.797623373 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 52, + /**/ + +-- +Portable Computer: A device invented to force businessmen +to work at home, on vacation, and on business trips. + + /// 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 /// diff --git a/data/vim/patches/8.1.0053 b/data/vim/patches/8.1.0053 new file mode 100644 index 000000000..aa3ff44b1 --- /dev/null +++ b/data/vim/patches/8.1.0053 @@ -0,0 +1,609 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0053 +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.0053 +Problem: The first argument given to 'completefunc' can be Number or + String, depending on the value. +Solution: Avoid guessing the type of an argument, use typval_T in the + callers of call_vim_function(). (Ozaki Kiichi, closes #2993) +Files: src/edit.c, src/eval.c, src/ex_getln.c, src/mbyte.c, src/normal.c, + src/proto/eval.pro, src/testdir/test_ins_complete.vim + + +*** ../vim-8.1.0052/src/edit.c 2018-06-10 13:12:52.176496009 +0200 +--- src/edit.c 2018-06-12 21:49:32.781522896 +0200 +*************** +*** 4201,4207 **** + { + list_T *matchlist = NULL; + dict_T *matchdict = NULL; +! char_u *args[2]; + char_u *funcname; + pos_T pos; + win_T *curwin_save; +--- 4201,4207 ---- + { + list_T *matchlist = NULL; + dict_T *matchdict = NULL; +! typval_T args[3]; + char_u *funcname; + pos_T pos; + win_T *curwin_save; +*************** +*** 4213,4227 **** + return; + + /* Call 'completefunc' to obtain the list of matches. */ +! args[0] = (char_u *)"0"; +! args[1] = base; + + pos = curwin->w_cursor; + curwin_save = curwin; + curbuf_save = curbuf; + + /* Call a function, which returns a list or dict. */ +! if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK) + { + switch (rettv.v_type) + { +--- 4213,4230 ---- + return; + + /* Call 'completefunc' to obtain the list of matches. */ +! args[0].v_type = VAR_NUMBER; +! args[0].vval.v_number = 0; +! args[1].v_type = VAR_STRING; +! args[1].vval.v_string = base != NULL ? base : (char_u *)""; +! args[2].v_type = VAR_UNKNOWN; + + pos = curwin->w_cursor; + curwin_save = curwin; + curbuf_save = curbuf; + + /* Call a function, which returns a list or dict. */ +! if (call_vim_function(funcname, 2, args, &rettv, FALSE) == OK) + { + switch (rettv.v_type) + { +*************** +*** 5528,5534 **** + * Call user defined function 'completefunc' with "a:findstart" + * set to 1 to obtain the length of text to use for completion. + */ +! char_u *args[2]; + int col; + char_u *funcname; + pos_T pos; +--- 5531,5537 ---- + * Call user defined function 'completefunc' with "a:findstart" + * set to 1 to obtain the length of text to use for completion. + */ +! typval_T args[3]; + int col; + char_u *funcname; + pos_T pos; +*************** +*** 5548,5555 **** + return FAIL; + } + +! args[0] = (char_u *)"1"; +! args[1] = NULL; + pos = curwin->w_cursor; + curwin_save = curwin; + curbuf_save = curbuf; +--- 5551,5561 ---- + return FAIL; + } + +! args[0].v_type = VAR_NUMBER; +! args[0].vval.v_number = 1; +! args[1].v_type = VAR_STRING; +! args[1].vval.v_string = (char_u *)""; +! args[2].v_type = VAR_UNKNOWN; + pos = curwin->w_cursor; + curwin_save = curwin; + curbuf_save = curbuf; +*** ../vim-8.1.0052/src/eval.c 2018-05-13 15:42:40.000000000 +0200 +--- src/eval.c 2018-06-12 21:53:10.468274335 +0200 +*************** +*** 1011,1073 **** + + /* + * Call some Vim script function and return the result in "*rettv". +! * Uses argv[argc] for the function arguments. Only Number and String +! * arguments are currently supported. + * Returns OK or FAIL. + */ + int + call_vim_function( + char_u *func, + int argc, +! char_u **argv, +! int safe, /* use the sandbox */ +! int str_arg_only, /* all arguments are strings */ +! typval_T *rettv) + { +- typval_T *argvars; +- varnumber_T n; +- int len; +- int i; + int doesrange; + void *save_funccalp = NULL; + int ret; + +- argvars = (typval_T *)alloc((unsigned)((argc + 1) * sizeof(typval_T))); +- if (argvars == NULL) +- return FAIL; +- +- for (i = 0; i < argc; i++) +- { +- /* Pass a NULL or empty argument as an empty string */ +- if (argv[i] == NULL || *argv[i] == NUL) +- { +- argvars[i].v_type = VAR_STRING; +- argvars[i].vval.v_string = (char_u *)""; +- continue; +- } +- +- if (str_arg_only) +- len = 0; +- else +- { +- /* Recognize a number argument, the others must be strings. A dash +- * is a string too. */ +- vim_str2nr(argv[i], NULL, &len, STR2NR_ALL, &n, NULL, 0); +- if (len == 1 && *argv[i] == '-') +- len = 0; +- } +- if (len != 0 && len == (int)STRLEN(argv[i])) +- { +- argvars[i].v_type = VAR_NUMBER; +- argvars[i].vval.v_number = n; +- } +- else +- { +- argvars[i].v_type = VAR_STRING; +- argvars[i].vval.v_string = argv[i]; +- } +- } +- + if (safe) + { + save_funccalp = save_funccal(); +--- 1011,1032 ---- + + /* + * Call some Vim script function and return the result in "*rettv". +! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] +! * should have type VAR_UNKNOWN. + * Returns OK or FAIL. + */ + int + call_vim_function( + char_u *func, + int argc, +! typval_T *argv, +! typval_T *rettv, +! int safe) /* use the sandbox */ + { + int doesrange; + void *save_funccalp = NULL; + int ret; + + if (safe) + { + save_funccalp = save_funccal(); +*************** +*** 1075,1081 **** + } + + rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */ +! ret = call_func(func, (int)STRLEN(func), rettv, argc, argvars, NULL, + curwin->w_cursor.lnum, curwin->w_cursor.lnum, + &doesrange, TRUE, NULL, NULL); + if (safe) +--- 1034,1040 ---- + } + + rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */ +! ret = call_func(func, (int)STRLEN(func), rettv, argc, argv, NULL, + curwin->w_cursor.lnum, curwin->w_cursor.lnum, + &doesrange, TRUE, NULL, NULL); + if (safe) +*************** +*** 1083,1089 **** + --sandbox; + restore_funccal(save_funccalp); + } +- vim_free(argvars); + + if (ret == FAIL) + clear_tv(rettv); +--- 1042,1047 ---- +*************** +*** 1094,1113 **** + /* + * Call Vim script function "func" and return the result as a number. + * Returns -1 when calling the function fails. +! * Uses argv[argc] for the function arguments. + */ + varnumber_T + call_func_retnr( + char_u *func, + int argc, +! char_u **argv, + int safe) /* use the sandbox */ + { + typval_T rettv; + varnumber_T retval; + +! /* All arguments are passed as strings, no conversion to number. */ +! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL) + return -1; + + retval = get_tv_number_chk(&rettv, NULL); +--- 1052,1071 ---- + /* + * Call Vim script function "func" and return the result as a number. + * Returns -1 when calling the function fails. +! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should +! * have type VAR_UNKNOWN. + */ + varnumber_T + call_func_retnr( + char_u *func, + int argc, +! typval_T *argv, + int safe) /* use the sandbox */ + { + typval_T rettv; + varnumber_T retval; + +! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL) + return -1; + + retval = get_tv_number_chk(&rettv, NULL); +*************** +*** 1122,1141 **** + /* + * Call Vim script function "func" and return the result as a string. + * Returns NULL when calling the function fails. +! * Uses argv[argc] for the function arguments. + */ + void * + call_func_retstr( + char_u *func, + int argc, +! char_u **argv, + int safe) /* use the sandbox */ + { + typval_T rettv; + char_u *retval; + +! /* All arguments are passed as strings, no conversion to number. */ +! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL) + return NULL; + + retval = vim_strsave(get_tv_string(&rettv)); +--- 1080,1099 ---- + /* + * Call Vim script function "func" and return the result as a string. + * Returns NULL when calling the function fails. +! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should +! * have type VAR_UNKNOWN. + */ + void * + call_func_retstr( + char_u *func, + int argc, +! typval_T *argv, + int safe) /* use the sandbox */ + { + typval_T rettv; + char_u *retval; + +! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL) + return NULL; + + retval = vim_strsave(get_tv_string(&rettv)); +*************** +*** 1146,1165 **** + + /* + * Call Vim script function "func" and return the result as a List. +! * Uses argv[argc] for the function arguments. + * Returns NULL when there is something wrong. + */ + void * + call_func_retlist( + char_u *func, + int argc, +! char_u **argv, + int safe) /* use the sandbox */ + { + typval_T rettv; + +! /* All arguments are passed as strings, no conversion to number. */ +! if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL) + return NULL; + + if (rettv.v_type != VAR_LIST) +--- 1104,1123 ---- + + /* + * Call Vim script function "func" and return the result as a List. +! * Uses argv[0] to argv[argc - 1] for the function arguments. argv[argc] should +! * have type VAR_UNKNOWN. + * Returns NULL when there is something wrong. + */ + void * + call_func_retlist( + char_u *func, + int argc, +! typval_T *argv, + int safe) /* use the sandbox */ + { + typval_T rettv; + +! if (call_vim_function(func, argc, argv, &rettv, safe) == FAIL) + return NULL; + + if (rettv.v_type != VAR_LIST) +*** ../vim-8.1.0052/src/ex_getln.c 2018-05-22 16:58:43.979903077 +0200 +--- src/ex_getln.c 2018-06-12 21:56:34.139120017 +0200 +*************** +*** 5266,5272 **** + + + # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) +! static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, char_u **, int), expand_T *xp, int *num_file, char_u ***file); + + /* + * Call "user_expand_func()" to invoke a user defined Vim script function and +--- 5266,5272 ---- + + + # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) +! static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, typval_T *, int), expand_T *xp, int *num_file, char_u ***file); + + /* + * Call "user_expand_func()" to invoke a user defined Vim script function and +*************** +*** 5274,5288 **** + */ + static void * + call_user_expand_func( +! void *(*user_expand_func)(char_u *, int, char_u **, int), + expand_T *xp, + int *num_file, + char_u ***file) + { + int keep = 0; +! char_u num[50]; +! char_u *args[3]; + int save_current_SID = current_SID; + void *ret; + struct cmdline_info save_ccline; + +--- 5274,5288 ---- + */ + static void * + call_user_expand_func( +! void *(*user_expand_func)(char_u *, int, typval_T *, int), + expand_T *xp, + int *num_file, + char_u ***file) + { + int keep = 0; +! typval_T args[4]; + int save_current_SID = current_SID; ++ char_u *pat = NULL; + void *ret; + struct cmdline_info save_ccline; + +*************** +*** 5297,5306 **** + ccline.cmdbuff[ccline.cmdlen] = 0; + } + +! args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); +! args[1] = xp->xp_line; +! sprintf((char *)num, "%d", xp->xp_col); +! args[2] = num; + + /* Save the cmdline, we don't know what the function may do. */ + save_ccline = ccline; +--- 5297,5311 ---- + ccline.cmdbuff[ccline.cmdlen] = 0; + } + +! pat = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); +! +! args[0].v_type = VAR_STRING; +! args[0].vval.v_string = pat; +! args[1].v_type = VAR_STRING; +! args[1].vval.v_string = xp->xp_line; +! args[2].v_type = VAR_NUMBER; +! args[2].vval.v_number = xp->xp_col; +! args[3].v_type = VAR_UNKNOWN; + + /* Save the cmdline, we don't know what the function may do. */ + save_ccline = ccline; +*************** +*** 5315,5321 **** + if (ccline.cmdbuff != NULL) + ccline.cmdbuff[ccline.cmdlen] = keep; + +! vim_free(args[0]); + return ret; + } + +--- 5320,5326 ---- + if (ccline.cmdbuff != NULL) + ccline.cmdbuff[ccline.cmdlen] = keep; + +! vim_free(pat); + return ret; + } + +*** ../vim-8.1.0052/src/mbyte.c 2018-05-17 13:06:28.000000000 +0200 +--- src/mbyte.c 2018-06-12 21:57:43.682728083 +0200 +*************** +*** 4795,4806 **** + static void + call_imactivatefunc(int active) + { +! char_u *argv[1]; + +! if (active) +! argv[0] = (char_u *)"1"; +! else +! argv[0] = (char_u *)"0"; + (void)call_func_retnr(p_imaf, 1, argv, FALSE); + } + +--- 4795,4805 ---- + static void + call_imactivatefunc(int active) + { +! typval_T argv[2]; + +! argv[0].v_type = VAR_NUMBER; +! argv[0].vval.v_number = active ? 1 : 0; +! argv[1].v_type = VAR_NUMBER; + (void)call_func_retnr(p_imaf, 1, argv, FALSE); + } + +*** ../vim-8.1.0052/src/normal.c 2018-06-03 14:42:17.844505109 +0200 +--- src/normal.c 2018-06-12 21:57:56.386656587 +0200 +*************** +*** 2219,2225 **** + op_function(oparg_T *oap UNUSED) + { + #ifdef FEAT_EVAL +! char_u *(argv[1]); + # ifdef FEAT_VIRTUALEDIT + int save_virtual_op = virtual_op; + # endif +--- 2219,2225 ---- + op_function(oparg_T *oap UNUSED) + { + #ifdef FEAT_EVAL +! typval_T argv[2]; + # ifdef FEAT_VIRTUALEDIT + int save_virtual_op = virtual_op; + # endif +*************** +*** 2235,2246 **** + /* Exclude the end position. */ + decl(&curbuf->b_op_end); + + if (oap->block_mode) +! argv[0] = (char_u *)"block"; + else if (oap->motion_type == MLINE) +! argv[0] = (char_u *)"line"; + else +! argv[0] = (char_u *)"char"; + + # ifdef FEAT_VIRTUALEDIT + /* Reset virtual_op so that 'virtualedit' can be changed in the +--- 2235,2248 ---- + /* Exclude the end position. */ + decl(&curbuf->b_op_end); + ++ argv[0].v_type = VAR_STRING; + if (oap->block_mode) +! argv[0].vval.v_string = (char_u *)"block"; + else if (oap->motion_type == MLINE) +! argv[0].vval.v_string = (char_u *)"line"; + else +! argv[0].vval.v_string = (char_u *)"char"; +! argv[1].v_type = VAR_UNKNOWN; + + # ifdef FEAT_VIRTUALEDIT + /* Reset virtual_op so that 'virtualedit' can be changed in the +*** ../vim-8.1.0052/src/proto/eval.pro 2018-05-17 13:52:32.000000000 +0200 +--- src/proto/eval.pro 2018-06-12 21:45:51.398816540 +0200 +*************** +*** 19,28 **** + list_T *eval_spell_expr(char_u *badword, char_u *expr); + int get_spellword(list_T *list, char_u **pp); + typval_T *eval_expr(char_u *arg, char_u **nextcmd); +! int call_vim_function(char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv); +! varnumber_T call_func_retnr(char_u *func, int argc, char_u **argv, int safe); +! void *call_func_retstr(char_u *func, int argc, char_u **argv, int safe); +! void *call_func_retlist(char_u *func, int argc, char_u **argv, int safe); + int eval_foldexpr(char_u *arg, int *cp); + void ex_let(exarg_T *eap); + void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first); +--- 19,28 ---- + list_T *eval_spell_expr(char_u *badword, char_u *expr); + int get_spellword(list_T *list, char_u **pp); + typval_T *eval_expr(char_u *arg, char_u **nextcmd); +! int call_vim_function(char_u *func, int argc, typval_T *argv, typval_T *rettv, int safe); +! varnumber_T call_func_retnr(char_u *func, int argc, typval_T *argv, int safe); +! void *call_func_retstr(char_u *func, int argc, typval_T *argv, int safe); +! void *call_func_retlist(char_u *func, int argc, typval_T *argv, int safe); + int eval_foldexpr(char_u *arg, int *cp); + void ex_let(exarg_T *eap); + void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first); +*** ../vim-8.1.0052/src/testdir/test_ins_complete.vim 2018-02-10 16:12:08.000000000 +0100 +--- src/testdir/test_ins_complete.vim 2018-06-12 21:45:51.398816540 +0200 +*************** +*** 117,122 **** +--- 117,147 ---- + set omnifunc= + endfunc + ++ func Test_completefunc_args() ++ let s:args = [] ++ func! CompleteFunc(findstart, base) ++ let s:args += [[a:findstart, empty(a:base)]] ++ endfunc ++ new ++ ++ set completefunc=CompleteFunc ++ call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x') ++ call assert_equal(s:args[0], [1, 1]) ++ call assert_equal(s:args[1][0], 0) ++ set completefunc= ++ ++ let s:args = [] ++ set omnifunc=CompleteFunc ++ call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x') ++ call assert_equal(s:args[0], [1, 1]) ++ call assert_equal(s:args[1][0], 0) ++ set omnifunc= ++ ++ bwipe! ++ unlet s:args ++ delfunc CompleteFunc ++ endfunc ++ + function! s:CompleteDone_CompleteFuncDict( findstart, base ) + if a:findstart + return 0 +*** ../vim-8.1.0052/src/version.c 2018-06-12 21:35:37.518665900 +0200 +--- src/version.c 2018-06-12 21:46:24.302622304 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 53, + /**/ + +-- +Bumper sticker: Honk if you love peace and quiet. + + /// 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 /// diff --git a/data/vim/patches/8.1.0054 b/data/vim/patches/8.1.0054 new file mode 100644 index 000000000..6f6327fd4 --- /dev/null +++ b/data/vim/patches/8.1.0054 @@ -0,0 +1,68 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0054 +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.0054 +Problem: Compiler warning for using %ld for "long long". +Solution: Add a type cast. (closes #3002) +Files: src/os_unix.c + + +*** ../vim-8.1.0053/src/os_unix.c 2018-06-12 20:25:47.887923393 +0200 +--- src/os_unix.c 2018-06-13 20:49:32.360424689 +0200 +*************** +*** 4199,4205 **** + # ifdef FEAT_TERMINAL + if (is_terminal) + { +! sprintf((char *)envbuf, "%ld", get_vim_var_nr(VV_VERSION)); + setenv("VIM_TERMINAL", (char *)envbuf, 1); + } + # endif +--- 4199,4205 ---- + # ifdef FEAT_TERMINAL + if (is_terminal) + { +! sprintf((char *)envbuf, "%ld", (long)get_vim_var_nr(VV_VERSION)); + setenv("VIM_TERMINAL", (char *)envbuf, 1); + } + # endif +*************** +*** 4227,4233 **** + if (is_terminal) + { + vim_snprintf(envbuf_Version, sizeof(envbuf_Version), +! "VIM_TERMINAL=%ld", get_vim_var_nr(VV_VERSION)); + putenv(envbuf_Version); + } + # endif +--- 4227,4233 ---- + if (is_terminal) + { + vim_snprintf(envbuf_Version, sizeof(envbuf_Version), +! "VIM_TERMINAL=%ld", (long)get_vim_var_nr(VV_VERSION)); + putenv(envbuf_Version); + } + # endif +*** ../vim-8.1.0053/src/version.c 2018-06-12 22:05:10.656251565 +0200 +--- src/version.c 2018-06-13 20:48:19.840840420 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 54, + /**/ + +-- +A fine is a tax for doing wrong. A tax is a fine for doing well. + + /// 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 /// diff --git a/data/vim/patches/8.1.0055 b/data/vim/patches/8.1.0055 new file mode 100644 index 000000000..4350a1275 --- /dev/null +++ b/data/vim/patches/8.1.0055 @@ -0,0 +1,88 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0055 +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.0055 (after 8.1.0053) +Problem: Complete test has wrong order of arguments. Wrong type for + sentinel variable. +Solution: Swap arguments, use VAR_UNKNOWN. (Ozaki Kiichi) +Files: src/mbyte.c, src/testdir/test_ins_complete.vim + + +*** ../vim-8.1.0054/src/mbyte.c 2018-06-12 22:05:10.656251565 +0200 +--- src/mbyte.c 2018-06-13 21:22:38.711055156 +0200 +*************** +*** 4799,4805 **** + + argv[0].v_type = VAR_NUMBER; + argv[0].vval.v_number = active ? 1 : 0; +! argv[1].v_type = VAR_NUMBER; + (void)call_func_retnr(p_imaf, 1, argv, FALSE); + } + +--- 4799,4805 ---- + + argv[0].v_type = VAR_NUMBER; + argv[0].vval.v_number = active ? 1 : 0; +! argv[1].v_type = VAR_UNKNOWN; + (void)call_func_retnr(p_imaf, 1, argv, FALSE); + } + +*** ../vim-8.1.0054/src/testdir/test_ins_complete.vim 2018-06-12 22:05:10.656251565 +0200 +--- src/testdir/test_ins_complete.vim 2018-06-13 21:22:38.711055156 +0200 +*************** +*** 126,140 **** + + set completefunc=CompleteFunc + call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x') +! call assert_equal(s:args[0], [1, 1]) +! call assert_equal(s:args[1][0], 0) + set completefunc= + + let s:args = [] + set omnifunc=CompleteFunc + call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x') +! call assert_equal(s:args[0], [1, 1]) +! call assert_equal(s:args[1][0], 0) + set omnifunc= + + bwipe! +--- 126,140 ---- + + set completefunc=CompleteFunc + call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x') +! call assert_equal([1, 1], s:args[0]) +! call assert_equal(0, s:args[1][0]) + set completefunc= + + let s:args = [] + set omnifunc=CompleteFunc + call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x') +! call assert_equal([1, 1], s:args[0]) +! call assert_equal(0, s:args[1][0]) + set omnifunc= + + bwipe! +*** ../vim-8.1.0054/src/version.c 2018-06-13 20:49:47.444338292 +0200 +--- src/version.c 2018-06-13 21:25:28.718171776 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 55, + /**/ + +-- +Everybody lies, but it doesn't matter since nobody listens. + -- Lieberman's Law + + /// 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 /// diff --git a/data/vim/patches/8.1.0056 b/data/vim/patches/8.1.0056 new file mode 100644 index 000000000..0dcd34411 --- /dev/null +++ b/data/vim/patches/8.1.0056 @@ -0,0 +1,130 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0056 +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.0056 +Problem: Crash when using :hardcopy with illegal byte. +Solution: Check for string_convert() returning NULL. (Dominique Pelle) +Files: src/hardcopy.c, src/testdir/test_hardcopy.vim + + +*** ../vim-8.1.0055/src/hardcopy.c 2018-02-11 15:38:21.000000000 +0100 +--- src/hardcopy.c 2018-06-16 14:43:41.918213746 +0200 +*************** +*** 3372,3379 **** + } + + int +! mch_print_text_out(char_u *p, int len UNUSED) + { + int need_break; + char_u ch; + char_u ch_buff[8]; +--- 3372,3380 ---- + } + + int +! mch_print_text_out(char_u *textp, int len UNUSED) + { ++ char_u *p = textp; + int need_break; + char_u ch; + char_u ch_buff[8]; +*************** +*** 3508,3515 **** +--- 3509,3523 ---- + + #ifdef FEAT_MBYTE + if (prt_do_conv) ++ { + /* Convert from multi-byte to 8-bit encoding */ + tofree = p = string_convert(&prt_conv, p, &len); ++ if (p == NULL) ++ { ++ p = (char_u *)""; ++ len = 0; ++ } ++ } + + if (prt_out_mbyte) + { +*** ../vim-8.1.0055/src/testdir/test_hardcopy.vim 2017-10-26 23:41:07.000000000 +0200 +--- src/testdir/test_hardcopy.vim 2018-06-16 14:39:00.343781251 +0200 +*************** +*** 63,74 **** + endfunc + + func Test_fname_with_spaces() +! if has('postscript') +! split t\ e\ s\ t.txt +! call setline(1, ['just', 'some', 'text']) +! hardcopy > %.ps +! call assert_true(filereadable('t e s t.txt.ps')) +! call delete('t e s t.txt.ps') +! bwipe! + endif + endfunc +--- 63,89 ---- + endfunc + + func Test_fname_with_spaces() +! if !has('postscript') +! return + endif ++ split t\ e\ s\ t.txt ++ call setline(1, ['just', 'some', 'text']) ++ hardcopy > %.ps ++ call assert_true(filereadable('t e s t.txt.ps')) ++ call delete('t e s t.txt.ps') ++ bwipe! + endfunc ++ ++ func Test_illegal_byte() ++ if !has('postscript') || &enc != 'utf-8' ++ return ++ endif ++ new ++ " conversion of 0xff will fail, this used to cause a crash ++ call setline(1, "\xff") ++ hardcopy >Xpstest ++ ++ bwipe! ++ call delete('Xpstest') ++ endfunc ++ +*** ../vim-8.1.0055/src/version.c 2018-06-13 21:27:20.213366293 +0200 +--- src/version.c 2018-06-16 14:39:45.695527854 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 56, + /**/ + +-- +The real +trick is +this: to +keep the +lines as +short as +possible +and keep +the size +the same +yet free +from the +need for +hyphena- +Dammit!! (Matthew Winn) + + /// 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 /// diff --git a/data/vim/patches/8.1.0057 b/data/vim/patches/8.1.0057 new file mode 100644 index 000000000..9cf86c5c9 --- /dev/null +++ b/data/vim/patches/8.1.0057 @@ -0,0 +1,203 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0057 +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.0057 +Problem: Popup menu displayed wrong when using autocmd. +Solution: Use aucmd_prepbuf(). Force updating status line if the popup menu + is going to be redrawn anyway. (Christian Brabandt, closes #3009) +Files: src/edit.c, src/screen.c, src/proto/screen.pro + + +*** ../vim-8.1.0056/src/edit.c 2018-06-12 22:05:10.652251583 +0200 +--- src/edit.c 2018-06-16 15:25:18.046301708 +0200 +*************** +*** 1704,1710 **** +--- 1704,1715 ---- + #endif + ) + { ++ aco_save_T aco; ++ ++ // save and restore curwin and curbuf, in case the autocmd changes them ++ aucmd_prepbuf(&aco, curbuf); + apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf); ++ aucmd_restbuf(&aco); + curbuf->b_last_changedtick = CHANGEDTICK(curbuf); + } + +*************** +*** 1716,1722 **** +--- 1721,1732 ---- + && curbuf->b_last_changedtick_pum != CHANGEDTICK(curbuf) + && pum_visible()) + { ++ aco_save_T aco; ++ ++ // save and restore curwin and curbuf, in case the autocmd changes them ++ aucmd_prepbuf(&aco, curbuf); + apply_autocmds(EVENT_TEXTCHANGEDP, NULL, NULL, FALSE, curbuf); ++ aucmd_restbuf(&aco); + curbuf->b_last_changedtick_pum = CHANGEDTICK(curbuf); + } + #endif +*** ../vim-8.1.0056/src/screen.c 2018-05-22 20:35:13.566009271 +0200 +--- src/screen.c 2018-06-16 15:32:15.224125456 +0200 +*************** +*** 125,130 **** +--- 125,131 ---- + static schar_T *current_ScreenLine; + + static void win_update(win_T *wp); ++ static void win_redr_status(win_T *wp, int ignore_pum); + static void win_draw_end(win_T *wp, int c1, int c2, int row, int endrow, hlf_T hl); + #ifdef FEAT_FOLDING + static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T lnum, int row); +*************** +*** 774,780 **** + if (wp->w_redr_status) + { + cursor_off(); +! win_redr_status(wp); + } + } + #if defined(FEAT_SEARCH_EXTRA) +--- 775,781 ---- + if (wp->w_redr_status) + { + cursor_off(); +! win_redr_status(wp, TRUE); // any popup menu will be redrawn below + } + } + #if defined(FEAT_SEARCH_EXTRA) +*************** +*** 1030,1036 **** + if (wp->w_redr_type != 0) + win_update(wp); + if (wp->w_redr_status) +! win_redr_status(wp); + } + + update_finish(); +--- 1031,1037 ---- + if (wp->w_redr_type != 0) + win_update(wp); + if (wp->w_redr_status) +! win_redr_status(wp, FALSE); + } + + update_finish(); +*************** +*** 1074,1080 **** + || *p_stl != NUL || *wp->w_p_stl != NUL + # endif + ) +! win_redr_status(wp); + + update_finish(); + } +--- 1075,1081 ---- + || *p_stl != NUL || *wp->w_p_stl != NUL + # endif + ) +! win_redr_status(wp, FALSE); + + update_finish(); + } +*************** +*** 6535,6541 **** + + FOR_ALL_WINDOWS(wp) + if (wp->w_redr_status) +! win_redr_status(wp); + if (redraw_tabline) + draw_tabline(); + } +--- 6536,6542 ---- + + FOR_ALL_WINDOWS(wp) + if (wp->w_redr_status) +! win_redr_status(wp, FALSE); + if (redraw_tabline) + draw_tabline(); + } +*************** +*** 6864,6872 **** + * Redraw the status line of window wp. + * + * If inversion is possible we use it. Else '=' characters are used. + */ +! void +! win_redr_status(win_T *wp) + { + int row; + char_u *p; +--- 6865,6875 ---- + * Redraw the status line of window wp. + * + * If inversion is possible we use it. Else '=' characters are used. ++ * If "ignore_pum" is TRUE, also redraw statusline when the popup menu is ++ * displayed. + */ +! static void +! win_redr_status(win_T *wp, int ignore_pum) + { + int row; + char_u *p; +*************** +*** 6890,6898 **** + } + else if (!redrawing() + #ifdef FEAT_INS_EXPAND +! /* don't update status line when popup menu is visible and may be +! * drawn over it */ +! || pum_visible() + #endif + ) + { +--- 6893,6901 ---- + } + else if (!redrawing() + #ifdef FEAT_INS_EXPAND +! // don't update status line when popup menu is visible and may be +! // drawn over it, unless it will be redrawn later +! || (!ignore_pum && pum_visible()) + #endif + ) + { +*** ../vim-8.1.0056/src/proto/screen.pro 2018-05-17 13:52:50.000000000 +0200 +--- src/proto/screen.pro 2018-06-16 15:23:36.274904477 +0200 +*************** +*** 25,31 **** + void redraw_statuslines(void); + void win_redraw_last_status(frame_T *frp); + void win_redr_status_matches(expand_T *xp, int num_matches, char_u **matches, int match, int showtail); +- void win_redr_status(win_T *wp); + int stl_connected(win_T *wp); + int get_keymap_str(win_T *wp, char_u *fmt, char_u *buf, int len); + void screen_putchar(int c, int row, int col, int attr); +--- 25,30 ---- +*** ../vim-8.1.0056/src/version.c 2018-06-16 14:44:05.754081590 +0200 +--- src/version.c 2018-06-16 15:23:26.526962287 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 57, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +49. You never have to deal with busy signals when calling your ISP...because + you never log off. + + /// 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 /// diff --git a/data/vim/patches/8.1.0058 b/data/vim/patches/8.1.0058 new file mode 100644 index 000000000..bad287b86 --- /dev/null +++ b/data/vim/patches/8.1.0058 @@ -0,0 +1,220 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0058 +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.0058 +Problem: Display problem with margins and scrolling. +Solution: Place the cursor in the right column. (Kouichi Iwamoto, + closes #3016) +Files: src/screen.c + + +*** ../vim-8.1.0057/src/screen.c 2018-06-16 15:32:34.460024472 +0200 +--- src/screen.c 2018-06-16 16:14:27.022630636 +0200 +*************** +*** 9797,9802 **** +--- 9797,9803 ---- + int j; + unsigned temp; + int cursor_row; ++ int cursor_col = 0; + int type; + int result_empty; + int can_ce = can_clear(T_CE); +*************** +*** 9893,9898 **** +--- 9894,9902 ---- + gui_dont_update_cursor(row + off <= gui.cursor_row); + #endif + ++ if (wp != NULL && wp->w_wincol != 0 && *T_CSV != NUL && *T_CCS == NUL) ++ cursor_col = wp->w_wincol; ++ + if (*T_CCS != NUL) /* cursor relative to region */ + cursor_row = row; + else +*************** +*** 9939,9945 **** + } + + screen_stop_highlight(); +! windgoto(cursor_row, 0); + if (clear_attr != 0) + screen_start_highlight(clear_attr); + +--- 9943,9949 ---- + } + + screen_stop_highlight(); +! windgoto(cursor_row, cursor_col); + if (clear_attr != 0) + screen_start_highlight(clear_attr); + +*************** +*** 9958,9964 **** + if (type == USE_T_AL) + { + if (i && cursor_row != 0) +! windgoto(cursor_row, 0); + out_str(T_AL); + } + else /* type == USE_T_SR */ +--- 9962,9968 ---- + if (type == USE_T_AL) + { + if (i && cursor_row != 0) +! windgoto(cursor_row, cursor_col); + out_str(T_AL); + } + else /* type == USE_T_SR */ +*************** +*** 9975,9981 **** + { + for (i = 0; i < line_count; ++i) + { +! windgoto(off + i, 0); + out_str(T_CE); + screen_start(); /* don't know where cursor is now */ + } +--- 9979,9985 ---- + { + for (i = 0; i < line_count; ++i) + { +! windgoto(off + i, cursor_col); + out_str(T_CE); + screen_start(); /* don't know where cursor is now */ + } +*************** +*** 10011,10016 **** +--- 10015,10021 ---- + int i; + unsigned temp; + int cursor_row; ++ int cursor_col = 0; + int cursor_end; + int result_empty; /* result is empty until end of region */ + int can_delete; /* deleting line codes can be used */ +*************** +*** 10110,10115 **** +--- 10115,10123 ---- + && gui.cursor_row < end + off); + #endif + ++ if (wp != NULL && wp->w_wincol != 0 && *T_CSV != NUL && *T_CCS == NUL) ++ cursor_col = wp->w_wincol; ++ + if (*T_CCS != NUL) /* cursor relative to region */ + { + cursor_row = row; +*************** +*** 10172,10184 **** + redraw_block(row, end, wp); + else if (type == USE_T_CD) /* delete the lines */ + { +! windgoto(cursor_row, 0); + out_str(T_CD); + screen_start(); /* don't know where cursor is now */ + } + else if (type == USE_T_CDL) + { +! windgoto(cursor_row, 0); + term_delete_lines(line_count); + screen_start(); /* don't know where cursor is now */ + } +--- 10180,10192 ---- + redraw_block(row, end, wp); + else if (type == USE_T_CD) /* delete the lines */ + { +! windgoto(cursor_row, cursor_col); + out_str(T_CD); + screen_start(); /* don't know where cursor is now */ + } + else if (type == USE_T_CDL) + { +! windgoto(cursor_row, cursor_col); + term_delete_lines(line_count); + screen_start(); /* don't know where cursor is now */ + } +*************** +*** 10189,10195 **** + */ + else if (type == USE_NL) + { +! windgoto(cursor_end - 1, 0); + for (i = line_count; --i >= 0; ) + out_char('\n'); /* cursor will remain on same line */ + } +--- 10197,10203 ---- + */ + else if (type == USE_NL) + { +! windgoto(cursor_end - 1, cursor_col); + for (i = line_count; --i >= 0; ) + out_char('\n'); /* cursor will remain on same line */ + } +*************** +*** 10199,10210 **** + { + if (type == USE_T_DL) + { +! windgoto(cursor_row, 0); + out_str(T_DL); /* delete a line */ + } + else /* type == USE_T_CE */ + { +! windgoto(cursor_row + i, 0); + out_str(T_CE); /* erase a line */ + } + screen_start(); /* don't know where cursor is now */ +--- 10207,10218 ---- + { + if (type == USE_T_DL) + { +! windgoto(cursor_row, cursor_col); + out_str(T_DL); /* delete a line */ + } + else /* type == USE_T_CE */ + { +! windgoto(cursor_row + i, cursor_col); + out_str(T_CE); /* erase a line */ + } + screen_start(); /* don't know where cursor is now */ +*************** +*** 10219,10225 **** + { + for (i = line_count; i > 0; --i) + { +! windgoto(cursor_end - i, 0); + out_str(T_CE); /* erase a line */ + screen_start(); /* don't know where cursor is now */ + } +--- 10227,10233 ---- + { + for (i = line_count; i > 0; --i) + { +! windgoto(cursor_end - i, cursor_col); + out_str(T_CE); /* erase a line */ + screen_start(); /* don't know where cursor is now */ + } +*** ../vim-8.1.0057/src/version.c 2018-06-16 15:32:34.460024472 +0200 +--- src/version.c 2018-06-16 16:13:43.890855764 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 58, + /**/ + +-- +Never go to the toilet in a paperless office. + + /// 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 /// diff --git a/data/vim/patches/8.1.0059 b/data/vim/patches/8.1.0059 new file mode 100644 index 000000000..a029733c5 --- /dev/null +++ b/data/vim/patches/8.1.0059 @@ -0,0 +1,111 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0059 +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.0059 +Problem: Displayed digraph for "ga" wrong with 'encoding' "cp1251". +Solution: Convert from 'encoding' to "utf-8" if needed. (closes #3015) +Files: src/digraph.c, src/testdir/test_digraph.vim + + +*** ../vim-8.1.0058/src/digraph.c 2018-02-27 20:01:13.000000000 +0100 +--- src/digraph.c 2018-06-16 17:06:04.657272887 +0200 +*************** +*** 1979,1992 **** + * If not found return NULL. + */ + char_u * +! get_digraph_for_char(val) +! int val; + { + int i; + int use_defaults; + digr_T *dp; + static char_u r[3]; + + for (use_defaults = 0; use_defaults <= 1; use_defaults++) + { + if (use_defaults == 0) +--- 1979,2015 ---- + * If not found return NULL. + */ + char_u * +! get_digraph_for_char(int val_arg) + { ++ int val = val_arg; + int i; + int use_defaults; + digr_T *dp; + static char_u r[3]; + ++ #if defined(FEAT_MBYTE) && defined(USE_UNICODE_DIGRAPHS) ++ if (!enc_utf8) ++ { ++ char_u buf[6], *to; ++ vimconv_T vc; ++ ++ // convert the character from 'encoding' to Unicode ++ i = mb_char2bytes(val, buf); ++ vc.vc_type = CONV_NONE; ++ if (convert_setup(&vc, p_enc, (char_u *)"utf-8") == OK) ++ { ++ vc.vc_fail = TRUE; ++ to = string_convert(&vc, buf, &i); ++ if (to != NULL) ++ { ++ val = utf_ptr2char(to); ++ vim_free(to); ++ } ++ (void)convert_setup(&vc, NULL, NULL); ++ } ++ } ++ #endif ++ + for (use_defaults = 0; use_defaults <= 1; use_defaults++) + { + if (use_defaults == 0) +*** ../vim-8.1.0058/src/testdir/test_digraph.vim 2018-02-27 21:08:09.000000000 +0100 +--- src/testdir/test_digraph.vim 2018-06-16 17:15:21.629331405 +0200 +*************** +*** 465,468 **** +--- 465,480 ---- + bwipe! + endfunc + ++ func Test_show_digraph_cp1251() ++ if !has('multi_byte') ++ return ++ endif ++ new ++ set encoding=cp1251 ++ call Put_Dig("='") ++ call assert_equal("\n<\xfa> <|z> <M-z> 250, Hex fa, Oct 372, Digr ='", execute('ascii')) ++ set encoding=utf-8 ++ bwipe! ++ endfunc ++ + " vim: shiftwidth=2 sts=2 expandtab +*** ../vim-8.1.0058/src/version.c 2018-06-16 16:20:48.772597946 +0200 +--- src/version.c 2018-06-16 17:07:11.244898262 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 59, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +53. To find out what time it is, you send yourself an e-mail and check the + "Date:" field. + + /// 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 /// diff --git a/data/vim/patches/8.1.0060 b/data/vim/patches/8.1.0060 new file mode 100644 index 000000000..b1af72ef4 --- /dev/null +++ b/data/vim/patches/8.1.0060 @@ -0,0 +1,74 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0060 +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.0060 +Problem: Crash when autocommands delete the current buffer. (Dominique + Pelle) +Solution: Check that autocommands don't change the buffer. +Files: src/quickfix.c, src/testdir/test_quickfix.vim + + +*** ../vim-8.1.0059/src/quickfix.c 2018-05-21 16:56:33.683217200 +0200 +--- src/quickfix.c 2018-06-16 21:57:15.946537874 +0200 +*************** +*** 6272,6279 **** +--- 6272,6287 ---- + if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); + if (au_name != NULL) ++ { ++ buf_T *curbuf_old = curbuf; ++ + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); ++ if (curbuf != curbuf_old) ++ // Autocommands changed buffer, don't jump now, "qi" may ++ // be invalid. ++ res = 0; ++ } + if (res > 0 && (eap->cmdidx == CMD_cbuffer || + eap->cmdidx == CMD_lbuffer)) + qf_jump(qi, 0, 0, eap->forceit); /* display first error */ +*** ../vim-8.1.0059/src/testdir/test_quickfix.vim 2018-05-15 21:53:11.000000000 +0200 +--- src/testdir/test_quickfix.vim 2018-06-16 21:49:48.980572266 +0200 +*************** +*** 3350,3352 **** +--- 3350,3364 ---- + call assert_equal('Errors', w:quickfix_title) + cclose + endfunc ++ ++ func Test_lbuffer_with_bwipe() ++ new ++ new ++ augroup nasty ++ au * * bwipe ++ augroup END ++ lbuffer ++ augroup nasty ++ au! ++ augroup END ++ endfunc +*** ../vim-8.1.0059/src/version.c 2018-06-16 17:25:17.997346631 +0200 +--- src/version.c 2018-06-16 21:58:12.078265886 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 60, + /**/ + +-- +Keyboard not found. Think ENTER to continue. + + /// 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 /// diff --git a/data/vim/patches/8.1.0061 b/data/vim/patches/8.1.0061 new file mode 100644 index 000000000..e9c537e67 --- /dev/null +++ b/data/vim/patches/8.1.0061 @@ -0,0 +1,420 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0061 +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.0061 +Problem: Window title is wrong after resetting and setting 'title'. +Solution: Move resetting the title into maketitle(). (Jason Franklin) +Files: src/option.c, src/buffer.c + + +*** ../vim-8.1.0060/src/option.c 2018-06-12 16:49:26.366028607 +0200 +--- src/option.c 2018-06-16 22:36:07.814142229 +0200 +*************** +*** 3256,3264 **** + #ifdef FEAT_CMDWIN + static char_u *check_cedit(void); + #endif +- #ifdef FEAT_TITLE +- static void did_set_title(int icon); +- #endif + static char_u *option_expand(int opt_idx, char_u *val); + static void didset_options(void); + static void didset_options2(void); +--- 3256,3261 ---- +*************** +*** 5374,5400 **** + * the old value back. + */ + static void +! did_set_title( +! int icon) /* Did set icon instead of title */ + { + if (starting != NO_SCREEN + #ifdef FEAT_GUI + && !gui.starting + #endif + ) +- { + maketitle(); +- if (icon) +- { +- if (!p_icon) +- mch_restore_title(2); +- } +- else +- { +- if (!p_title) +- mch_restore_title(1); +- } +- } + } + #endif + +--- 5371,5384 ---- + * the old value back. + */ + static void +! did_set_title(void) + { + if (starting != NO_SCREEN + #ifdef FEAT_GUI + && !gui.starting + #endif + ) + maketitle(); + } + #endif + +*************** +*** 6949,6956 **** + else + stl_syntax &= ~flagval; + # endif +! did_set_title(varp == &p_iconstring); +! + } + #endif + +--- 6933,6939 ---- + else + stl_syntax &= ~flagval; + # endif +! did_set_title(); + } + #endif + +*************** +*** 8401,8414 **** + + #ifdef FEAT_TITLE + /* when 'title' changed, may need to change the title; same for 'icon' */ +! else if ((int *)varp == &p_title) +! { +! did_set_title(FALSE); +! } +! +! else if ((int *)varp == &p_icon) + { +! did_set_title(TRUE); + } + #endif + +--- 8384,8392 ---- + + #ifdef FEAT_TITLE + /* when 'title' changed, may need to change the title; same for 'icon' */ +! else if ((int *)varp == &p_title || (int *)varp == &p_icon) + { +! did_set_title(); + } + #endif + +*** ../vim-8.1.0060/src/buffer.c 2018-06-06 18:02:31.402773772 +0200 +--- src/buffer.c 2018-06-16 22:57:08.067368623 +0200 +*************** +*** 38,44 **** + static int otherfile_buf(buf_T *buf, char_u *ffname); + #endif + #ifdef FEAT_TITLE +! static int ti_change(char_u *str, char_u **last); + #endif + static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file); + static void free_buffer(buf_T *); +--- 38,44 ---- + static int otherfile_buf(buf_T *buf, char_u *ffname); + #endif + #ifdef FEAT_TITLE +! static int value_changed(char_u *str, char_u **last); + #endif + static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file); + static void free_buffer(buf_T *); +*************** +*** 3545,3564 **** + } + + #if defined(FEAT_TITLE) || defined(PROTO) +- /* +- * put file name in title bar of window and in icon title +- */ +- + static char_u *lasttitle = NULL; + static char_u *lasticon = NULL; + + void + maketitle(void) + { + char_u *p; +! char_u *t_str = NULL; +! char_u *i_name; +! char_u *i_str = NULL; + int maxlen = 0; + int len; + int mustset; +--- 3545,3562 ---- + } + + #if defined(FEAT_TITLE) || defined(PROTO) + static char_u *lasttitle = NULL; + static char_u *lasticon = NULL; + ++ /* ++ * Put the file name in the title bar and icon of the window. ++ */ + void + maketitle(void) + { + char_u *p; +! char_u *title_str = NULL; +! char_u *icon_str = NULL; + int maxlen = 0; + int len; + int mustset; +*************** +*** 3574,3580 **** + + need_maketitle = FALSE; + if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL) +! return; + + if (p_title) + { +--- 3572,3578 ---- + + need_maketitle = FALSE; + if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL) +! return; // nothing to do + + if (p_title) + { +*************** +*** 3585,3591 **** + maxlen = 10; + } + +! t_str = buf; + if (*p_titlestring != NUL) + { + #ifdef FEAT_STL_OPT +--- 3583,3589 ---- + maxlen = 10; + } + +! title_str = buf; + if (*p_titlestring != NUL) + { + #ifdef FEAT_STL_OPT +*************** +*** 3598,3604 **** + use_sandbox = was_set_insecurely((char_u *)"titlestring", 0); + # endif + called_emsg = FALSE; +! build_stl_str_hl(curwin, t_str, sizeof(buf), + p_titlestring, use_sandbox, + 0, maxlen, NULL, NULL); + if (called_emsg) +--- 3596,3602 ---- + use_sandbox = was_set_insecurely((char_u *)"titlestring", 0); + # endif + called_emsg = FALSE; +! build_stl_str_hl(curwin, title_str, sizeof(buf), + p_titlestring, use_sandbox, + 0, maxlen, NULL, NULL); + if (called_emsg) +*************** +*** 3608,3614 **** + } + else + #endif +! t_str = p_titlestring; + } + else + { +--- 3606,3612 ---- + } + else + #endif +! title_str = p_titlestring; + } + else + { +*************** +*** 3714,3724 **** + } + } + } +! mustset = ti_change(t_str, &lasttitle); + + if (p_icon) + { +! i_str = buf; + if (*p_iconstring != NUL) + { + #ifdef FEAT_STL_OPT +--- 3712,3722 ---- + } + } + } +! mustset = value_changed(title_str, &lasttitle); + + if (p_icon) + { +! icon_str = buf; + if (*p_iconstring != NUL) + { + #ifdef FEAT_STL_OPT +*************** +*** 3731,3737 **** + use_sandbox = was_set_insecurely((char_u *)"iconstring", 0); + # endif + called_emsg = FALSE; +! build_stl_str_hl(curwin, i_str, sizeof(buf), + p_iconstring, use_sandbox, + 0, 0, NULL, NULL); + if (called_emsg) +--- 3729,3735 ---- + use_sandbox = was_set_insecurely((char_u *)"iconstring", 0); + # endif + called_emsg = FALSE; +! build_stl_str_hl(curwin, icon_str, sizeof(buf), + p_iconstring, use_sandbox, + 0, 0, NULL, NULL); + if (called_emsg) +*************** +*** 3741,3772 **** + } + else + #endif +! i_str = p_iconstring; + } + else + { + if (buf_spname(curbuf) != NULL) +! i_name = buf_spname(curbuf); + else /* use file name only in icon */ +! i_name = gettail(curbuf->b_ffname); +! *i_str = NUL; + /* Truncate name at 100 bytes. */ +! len = (int)STRLEN(i_name); + if (len > 100) + { + len -= 100; + #ifdef FEAT_MBYTE + if (has_mbyte) +! len += (*mb_tail_off)(i_name, i_name + len) + 1; + #endif +! i_name += len; + } +! STRCPY(i_str, i_name); +! trans_characters(i_str, IOSIZE); + } + } + +! mustset |= ti_change(i_str, &lasticon); + + if (mustset) + resettitle(); +--- 3739,3770 ---- + } + else + #endif +! icon_str = p_iconstring; + } + else + { + if (buf_spname(curbuf) != NULL) +! p = buf_spname(curbuf); + else /* use file name only in icon */ +! p = gettail(curbuf->b_ffname); +! *icon_str = NUL; + /* Truncate name at 100 bytes. */ +! len = (int)STRLEN(p); + if (len > 100) + { + len -= 100; + #ifdef FEAT_MBYTE + if (has_mbyte) +! len += (*mb_tail_off)(p, p + len) + 1; + #endif +! p += len; + } +! STRCPY(icon_str, p); +! trans_characters(icon_str, IOSIZE); + } + } + +! mustset |= value_changed(icon_str, &lasticon); + + if (mustset) + resettitle(); +*************** +*** 3775,3794 **** + /* + * Used for title and icon: Check if "str" differs from "*last". Set "*last" + * from "str" if it does. +! * Return TRUE when "*last" changed. + */ + static int +! ti_change(char_u *str, char_u **last) + { + if ((str == NULL) != (*last == NULL) + || (str != NULL && *last != NULL && STRCMP(str, *last) != 0)) + { + vim_free(*last); + if (str == NULL) + *last = NULL; + else + *last = vim_strsave(str); +! return TRUE; + } + return FALSE; + } +--- 3773,3797 ---- + /* + * Used for title and icon: Check if "str" differs from "*last". Set "*last" + * from "str" if it does. +! * Return TRUE if resettitle() is to be called. + */ + static int +! value_changed(char_u *str, char_u **last) + { + if ((str == NULL) != (*last == NULL) + || (str != NULL && *last != NULL && STRCMP(str, *last) != 0)) + { + vim_free(*last); + if (str == NULL) ++ { + *last = NULL; ++ mch_restore_title(last == &lasttitle ? 1 : 2); ++ } + else ++ { + *last = vim_strsave(str); +! return TRUE; +! } + } + return FALSE; + } +*** ../vim-8.1.0060/src/version.c 2018-06-16 22:16:43.232576946 +0200 +--- src/version.c 2018-06-16 22:48:20.082215622 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 61, + /**/ + +-- +"I don’t know how to make a screenshot" - Richard Stallman, July 2002 +(when asked to send a screenshot of his desktop for unix.se) + + /// 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 /// diff --git a/data/vim/patches/8.1.0062 b/data/vim/patches/8.1.0062 new file mode 100644 index 000000000..7161478ca --- /dev/null +++ b/data/vim/patches/8.1.0062 @@ -0,0 +1,371 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0062 +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.0062 +Problem: Popup menu broken if a callback changes the window layout. (Qiming + Zhao) +Solution: Recompute the popup menu position if needed. Redraw the ruler + even when the popup menu is displayed. +Files: src/popupmnu.c, src/proto/popupmnu.pro, src/screen.c + + +*** ../vim-8.1.0061/src/popupmnu.c 2018-05-14 23:05:31.000000000 +0200 +--- src/popupmnu.c 2018-06-17 14:41:52.487403691 +0200 +*************** +*** 29,34 **** +--- 29,40 ---- + static int pum_row; /* top row of pum */ + static int pum_col; /* left column of pum */ + ++ static int pum_win_row; ++ static int pum_win_height; ++ static int pum_win_col; ++ static int pum_win_wcol; ++ static int pum_win_width; ++ + static int pum_do_redraw = FALSE; /* do redraw anyway */ + + static int pum_set_selected(int n, int repeat); +*************** +*** 81,87 **** + { + int def_width; + int max_width; +- int row; + int context_lines; + int cursor_col; + int above_row; +--- 87,92 ---- +*************** +*** 103,109 **** + validate_cursor_col(); + pum_array = NULL; + +! row = curwin->w_wrow + W_WINROW(curwin); + + #if defined(FEAT_QUICKFIX) + FOR_ALL_WINDOWS(pvwin) +--- 108,120 ---- + validate_cursor_col(); + pum_array = NULL; + +! // Remember the essential parts of the window position and size, so we +! // can decide when to reposition the popup menu. +! pum_win_row = curwin->w_wrow + W_WINROW(curwin); +! pum_win_height = curwin->w_height; +! pum_win_col = curwin->w_wincol; +! pum_win_wcol = curwin->w_wcol; +! pum_win_width = curwin->w_width; + + #if defined(FEAT_QUICKFIX) + FOR_ALL_WINDOWS(pvwin) +*************** +*** 128,139 **** + if (p_ph > 0 && pum_height > p_ph) + pum_height = p_ph; + +! /* Put the pum below "row" if possible. If there are few lines decide + * on where there is more room. */ +! if (row + 2 >= below_row - pum_height +! && row - above_row > (below_row - above_row) / 2) + { +! /* pum above "row" */ + + /* Leave two lines of context if possible */ + if (curwin->w_wrow - curwin->w_cline_row >= 2) +--- 139,150 ---- + if (p_ph > 0 && pum_height > p_ph) + pum_height = p_ph; + +! /* Put the pum below "pum_win_row" if possible. If there are few lines decide + * on where there is more room. */ +! if (pum_win_row + 2 >= below_row - pum_height +! && pum_win_row - above_row > (below_row - above_row) / 2) + { +! /* pum above "pum_win_row" */ + + /* Leave two lines of context if possible */ + if (curwin->w_wrow - curwin->w_cline_row >= 2) +*************** +*** 141,155 **** + else + context_lines = curwin->w_wrow - curwin->w_cline_row; + +! if (row >= size + context_lines) + { +! pum_row = row - size - context_lines; + pum_height = size; + } + else + { + pum_row = 0; +! pum_height = row - context_lines; + } + if (p_ph > 0 && pum_height > p_ph) + { +--- 152,166 ---- + else + context_lines = curwin->w_wrow - curwin->w_cline_row; + +! if (pum_win_row >= size + context_lines) + { +! pum_row = pum_win_row - size - context_lines; + pum_height = size; + } + else + { + pum_row = 0; +! pum_height = pum_win_row - context_lines; + } + if (p_ph > 0 && pum_height > p_ph) + { +*************** +*** 159,165 **** + } + else + { +! /* pum below "row" */ + + /* Leave two lines of context if possible */ + if (curwin->w_cline_row +--- 170,176 ---- + } + else + { +! /* pum below "pum_win_row" */ + + /* Leave two lines of context if possible */ + if (curwin->w_cline_row +*************** +*** 169,175 **** + context_lines = curwin->w_cline_row + + curwin->w_cline_height - curwin->w_wrow; + +! pum_row = row + context_lines; + if (size > below_row - pum_row) + pum_height = below_row - pum_row; + else +--- 180,186 ---- + context_lines = curwin->w_cline_row + + curwin->w_cline_height - curwin->w_wrow; + +! pum_row = pum_win_row + context_lines; + if (size > below_row - pum_row) + pum_height = below_row - pum_row; + else +*************** +*** 823,828 **** +--- 834,875 ---- + } + + /* ++ * Reposition the popup menu to adjust for window layout changes. ++ */ ++ void ++ pum_may_redraw(void) ++ { ++ pumitem_T *array = pum_array; ++ int len = pum_size; ++ int selected = pum_selected; ++ ++ if (!pum_visible()) ++ return; // nothing to do ++ ++ if (pum_win_row == curwin->w_wrow + W_WINROW(curwin) ++ && pum_win_height == curwin->w_height ++ && pum_win_col == curwin->w_wincol ++ && pum_win_width == curwin->w_width) ++ { ++ // window position didn't change, redraw in the same position ++ pum_redraw(); ++ } ++ else ++ { ++ int wcol = curwin->w_wcol; ++ ++ // Window layout changed, recompute the position. ++ // Use the remembered w_wcol value, the cursor may have moved when a ++ // completion was inserted, but we want the menu in the same position. ++ pum_undisplay(); ++ curwin->w_wcol = pum_win_wcol; ++ curwin->w_valid |= VALID_WCOL; ++ pum_display(array, len, selected); ++ curwin->w_wcol = wcol; ++ } ++ } ++ ++ /* + * Return the height of the popup menu, the number of entries visible. + * Only valid when pum_visible() returns TRUE! + */ +*** ../vim-8.1.0061/src/proto/popupmnu.pro 2018-05-17 13:52:48.000000000 +0200 +--- src/proto/popupmnu.pro 2018-06-17 14:12:56.177812770 +0200 +*************** +*** 4,9 **** +--- 4,10 ---- + void pum_undisplay(void); + void pum_clear(void); + int pum_visible(void); ++ void pum_may_redraw(void); + int pum_get_height(void); + int split_message(char_u *mesg, pumitem_T **array); + void ui_remove_balloon(void); +*** ../vim-8.1.0061/src/screen.c 2018-06-16 16:20:48.768597967 +0200 +--- src/screen.c 2018-06-17 14:37:49.760753642 +0200 +*************** +*** 171,177 **** + static void win_redr_custom(win_T *wp, int draw_ruler); + #endif + #ifdef FEAT_CMDL_INFO +! static void win_redr_ruler(win_T *wp, int always); + #endif + + /* Ugly global: overrule attribute used by screen_char() */ +--- 171,177 ---- + static void win_redr_custom(win_T *wp, int draw_ruler); + #endif + #ifdef FEAT_CMDL_INFO +! static void win_redr_ruler(win_T *wp, int always, int ignore_pum); + #endif + + /* Ugly global: overrule attribute used by screen_char() */ +*************** +*** 783,790 **** + #endif + #ifdef FEAT_INS_EXPAND + /* May need to redraw the popup menu. */ +! if (pum_visible()) +! pum_redraw(); + #endif + + /* Reset b_mod_set flags. Going through all windows is probably faster +--- 783,789 ---- + #endif + #ifdef FEAT_INS_EXPAND + /* May need to redraw the popup menu. */ +! pum_may_redraw(); + #endif + + /* Reset b_mod_set flags. Going through all windows is probably faster +*************** +*** 7002,7008 **** + - 1 + wp->w_wincol), attr); + + #ifdef FEAT_CMDL_INFO +! win_redr_ruler(wp, TRUE); + #endif + } + +--- 7001,7007 ---- + - 1 + wp->w_wincol), attr); + + #ifdef FEAT_CMDL_INFO +! win_redr_ruler(wp, TRUE, ignore_pum); + #endif + } + +*************** +*** 10455,10461 **** + /* If the last window has no status line, the ruler is after the mode + * message and must be redrawn */ + if (redrawing() && lastwin->w_status_height == 0) +! win_redr_ruler(lastwin, TRUE); + #endif + redraw_cmdline = FALSE; + clear_cmdline = FALSE; +--- 10454,10460 ---- + /* If the last window has no status line, the ruler is after the mode + * message and must be redrawn */ + if (redrawing() && lastwin->w_status_height == 0) +! win_redr_ruler(lastwin, TRUE, FALSE); + #endif + redraw_cmdline = FALSE; + clear_cmdline = FALSE; +*************** +*** 10874,10879 **** +--- 10873,10879 ---- + (int)wp->w_width, FALSE); + } + #endif ++ + /* + * Show current status info in ruler and various other places + * If always is FALSE, only show ruler if position has changed. +*************** +*** 10899,10905 **** + else + #endif + #ifdef FEAT_CMDL_INFO +! win_redr_ruler(curwin, always); + #endif + + #ifdef FEAT_TITLE +--- 10899,10905 ---- + else + #endif + #ifdef FEAT_CMDL_INFO +! win_redr_ruler(curwin, always, FALSE); + #endif + + #ifdef FEAT_TITLE +*************** +*** 10918,10924 **** + + #ifdef FEAT_CMDL_INFO + static void +! win_redr_ruler(win_T *wp, int always) + { + #define RULER_BUF_LEN 70 + char_u buffer[RULER_BUF_LEN]; +--- 10918,10924 ---- + + #ifdef FEAT_CMDL_INFO + static void +! win_redr_ruler(win_T *wp, int always, int ignore_pum) + { + #define RULER_BUF_LEN 70 + char_u buffer[RULER_BUF_LEN]; +*************** +*** 10951,10958 **** + if (wp == lastwin && lastwin->w_status_height == 0) + if (edit_submode != NULL) + return; +! /* Don't draw the ruler when the popup menu is visible, it may overlap. */ +! if (pum_visible()) + return; + #endif + +--- 10951,10959 ---- + if (wp == lastwin && lastwin->w_status_height == 0) + if (edit_submode != NULL) + return; +! // Don't draw the ruler when the popup menu is visible, it may overlap. +! // Except when the popup menu will be redrawn anyway. +! if (!ignore_pum && pum_visible()) + return; + #endif + +*** ../vim-8.1.0061/src/version.c 2018-06-16 22:58:11.791025515 +0200 +--- src/version.c 2018-06-17 14:39:53.964061772 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 62, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +58. You turn on your computer and turn off your wife. + + /// 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 /// diff --git a/data/vim/patches/8.1.0063 b/data/vim/patches/8.1.0063 new file mode 100644 index 000000000..b1018460a --- /dev/null +++ b/data/vim/patches/8.1.0063 @@ -0,0 +1,123 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0063 +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.0063 +Problem: Mac: NSStringPboardType is deprecated. +Solution: Use NSPasteboardTypeString. (Akshay Hegde, closes #3022) +Files: src/os_macosx.m + + +*** ../vim-8.1.0062/src/os_macosx.m 2018-03-06 17:53:40.000000000 +0100 +--- src/os_macosx.m 2018-06-17 15:00:15.344692977 +0200 +*************** +*** 63,70 **** +--- 63,75 ---- + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSPasteboard *pb = [NSPasteboard generalPasteboard]; ++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER ++ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType, ++ NSPasteboardTypeString, nil]; ++ #else + NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType, + NSStringPboardType, nil]; ++ #endif + NSString *bestType = [pb availableTypeFromArray:supportedTypes]; + if (!bestType) goto releasepool; + +*************** +*** 76,82 **** + /* This type should consist of an array with two objects: + * 1. motion type (NSNumber) + * 2. text (NSString) +! * If this is not the case we fall back on using NSStringPboardType. + */ + id plist = [pb propertyListForType:VimPboardType]; + if ([plist isKindOfClass:[NSArray class]] && [plist count] == 2) +--- 81,87 ---- + /* This type should consist of an array with two objects: + * 1. motion type (NSNumber) + * 2. text (NSString) +! * If this is not the case we fall back on using NSPasteboardTypeString. + */ + id plist = [pb propertyListForType:VimPboardType]; + if ([plist isKindOfClass:[NSArray class]] && [plist count] == 2) +*************** +*** 92,101 **** + + if (!string) + { +! /* Use NSStringPboardType. The motion type is detected automatically. + */ + NSMutableString *mstring = + [[pb stringForType:NSStringPboardType] mutableCopy]; + if (!mstring) goto releasepool; + + /* Replace unrecognized end-of-line sequences with \x0a (line feed). */ +--- 97,111 ---- + + if (!string) + { +! /* Use NSPasteboardTypeString. The motion type is detected automatically. + */ ++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER ++ NSMutableString *mstring = ++ [[pb stringForType:NSPasteboardTypeString] mutableCopy]; ++ #else + NSMutableString *mstring = + [[pb stringForType:NSStringPboardType] mutableCopy]; ++ #endif + if (!mstring) goto releasepool; + + /* Replace unrecognized end-of-line sequences with \x0a (line feed). */ +*************** +*** 178,192 **** +--- 188,211 ---- + + /* See clip_mch_request_selection() for info on pasteboard types. */ + NSPasteboard *pb = [NSPasteboard generalPasteboard]; ++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER ++ NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType, ++ NSPasteboardTypeString, nil]; ++ #else + NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType, + NSStringPboardType, nil]; ++ #endif + [pb declareTypes:supportedTypes owner:nil]; + + NSNumber *motion = [NSNumber numberWithInt:motion_type]; + NSArray *plist = [NSArray arrayWithObjects:motion, string, nil]; + [pb setPropertyList:plist forType:VimPboardType]; + ++ #ifdef AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER ++ [pb setString:string forType:NSPasteboardTypeString]; ++ #else + [pb setString:string forType:NSStringPboardType]; ++ #endif + + [string release]; + } +*** ../vim-8.1.0062/src/version.c 2018-06-17 14:47:50.657309005 +0200 +--- src/version.c 2018-06-17 15:00:06.472745233 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 63, + /**/ + +-- +Q: Should I clean my house or work on Vim? +A: Whatever contains more bugs. + + /// 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 /// diff --git a/data/vim/patches/8.1.0064 b/data/vim/patches/8.1.0064 new file mode 100644 index 000000000..66395247a --- /dev/null +++ b/data/vim/patches/8.1.0064 @@ -0,0 +1,100 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0064 +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.0064 +Problem: Typing CTRL-W in a prompt buffer shows mode "-- --". +Solution: Set restart_edit to 'A' and check for it. +Files: src/edit.c, src/window.c, src/screen.c + + +*** ../vim-8.1.0063/src/edit.c 2018-06-16 15:32:34.460024472 +0200 +--- src/edit.c 2018-06-17 16:11:15.377294192 +0200 +*************** +*** 1179,1185 **** + // In a prompt window CTRL-W is used for window commands. + // Use Shift-CTRL-W to delete a word. + stuffcharReadbuff(Ctrl_W); +! restart_edit = 'i'; + nomove = TRUE; + count = 0; + goto doESCkey; +--- 1179,1185 ---- + // In a prompt window CTRL-W is used for window commands. + // Use Shift-CTRL-W to delete a word. + stuffcharReadbuff(Ctrl_W); +! restart_edit = 'A'; + nomove = TRUE; + count = 0; + goto doESCkey; +*** ../vim-8.1.0063/src/window.c 2018-06-12 16:49:26.366028607 +0200 +--- src/window.c 2018-06-17 16:18:31.098815622 +0200 +*************** +*** 2114,2119 **** +--- 2114,2121 ---- + // When leaving a prompt window stop Insert mode and perhaps restart + // it when entering that window again. + win->w_buffer->b_prompt_insert = restart_edit; ++ if (restart_edit != 0 && mode_displayed) ++ clear_cmdline = TRUE; /* unshow mode later */ + restart_edit = NUL; + + // When leaving the window (or closing the window) was done from a +*** ../vim-8.1.0063/src/screen.c 2018-06-17 14:47:50.657309005 +0200 +--- src/screen.c 2018-06-17 16:12:28.936871827 +0200 +*************** +*** 10263,10269 **** + + do_mode = ((p_smd && msg_silent == 0) + && ((State & INSERT) +! || restart_edit + || VIsual_active)); + if (do_mode || reg_recording != 0) + { +--- 10263,10269 ---- + + do_mode = ((p_smd && msg_silent == 0) + && ((State & INSERT) +! || restart_edit != NUL + || VIsual_active)); + if (do_mode || reg_recording != 0) + { +*************** +*** 10370,10376 **** + #endif + MSG_PUTS_ATTR(_(" INSERT"), attr); + } +! else if (restart_edit == 'I') + MSG_PUTS_ATTR(_(" (insert)"), attr); + else if (restart_edit == 'R') + MSG_PUTS_ATTR(_(" (replace)"), attr); +--- 10370,10376 ---- + #endif + MSG_PUTS_ATTR(_(" INSERT"), attr); + } +! else if (restart_edit == 'I' || restart_edit == 'A') + MSG_PUTS_ATTR(_(" (insert)"), attr); + else if (restart_edit == 'R') + MSG_PUTS_ATTR(_(" (replace)"), attr); +*** ../vim-8.1.0063/src/version.c 2018-06-17 15:01:00.580427088 +0200 +--- src/version.c 2018-06-17 16:23:00.305303242 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 64, + /**/ + +-- +I'm trying to be an optimist, but I don't think it'll work. + + /// 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 /// diff --git a/data/vim/patches/8.1.0065 b/data/vim/patches/8.1.0065 new file mode 100644 index 000000000..042a3c4ec --- /dev/null +++ b/data/vim/patches/8.1.0065 @@ -0,0 +1,90 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0065 +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.0065 (after 8.1.0062) +Problem: Balloon displayed at the wrong position. +Solution: Do not reposition the popup menu at the cursor position. +Files: src/popupmnu.c + + +*** ../vim-8.1.0064/src/popupmnu.c 2018-06-17 14:47:50.649309059 +0200 +--- src/popupmnu.c 2018-06-17 17:06:35.634554918 +0200 +*************** +*** 29,34 **** +--- 29,35 ---- + static int pum_row; /* top row of pum */ + static int pum_col; /* left column of pum */ + ++ static win_T *pum_window = NULL; + static int pum_win_row; + static int pum_win_height; + static int pum_win_col; +*************** +*** 110,115 **** +--- 111,117 ---- + + // Remember the essential parts of the window position and size, so we + // can decide when to reposition the popup menu. ++ pum_window = curwin; + pum_win_row = curwin->w_wrow + W_WINROW(curwin); + pum_win_height = curwin->w_height; + pum_win_col = curwin->w_wincol; +*************** +*** 846,855 **** + if (!pum_visible()) + return; // nothing to do + +! if (pum_win_row == curwin->w_wrow + W_WINROW(curwin) +! && pum_win_height == curwin->w_height +! && pum_win_col == curwin->w_wincol +! && pum_win_width == curwin->w_width) + { + // window position didn't change, redraw in the same position + pum_redraw(); +--- 848,858 ---- + if (!pum_visible()) + return; // nothing to do + +! if (pum_window != curwin +! || (pum_win_row == curwin->w_wrow + W_WINROW(curwin) +! && pum_win_height == curwin->w_height +! && pum_win_col == curwin->w_wincol +! && pum_win_width == curwin->w_width)) + { + // window position didn't change, redraw in the same position + pum_redraw(); +*************** +*** 912,917 **** +--- 915,923 ---- + pum_width = Columns - pum_col; + if (pum_width > pum_base_width + 1) + pum_width = pum_base_width + 1; ++ ++ // Do not redraw at cursor position. ++ pum_window = NULL; + } + + # endif +*** ../vim-8.1.0064/src/version.c 2018-06-17 16:23:29.341140642 +0200 +--- src/version.c 2018-06-17 17:09:52.429048636 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 65, + /**/ + +-- +Time is money. Especially if you make clocks. + + /// 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 /// diff --git a/data/vim/patches/8.1.0066 b/data/vim/patches/8.1.0066 new file mode 100644 index 000000000..7b1a2dff1 --- /dev/null +++ b/data/vim/patches/8.1.0066 @@ -0,0 +1,129 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0066 +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.0066 +Problem: Nasty autocommand causes using freed memory. (Dominique Pelle) +Solution: Do not force executing autocommands if the value of 'syntax' or + 'filetype' did not change. +Files: src/option.c + + +*** ../vim-8.1.0065/src/option.c 2018-06-16 22:58:11.791025515 +0200 +--- src/option.c 2018-06-17 17:30:01.421260379 +0200 +*************** +*** 6029,6035 **** + /* set when changing an option that only requires a redraw in the GUI */ + int redraw_gui_only = FALSE; + #endif +! int ft_changed = FALSE; + #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) + int did_swaptcap = FALSE; + #endif +--- 6029,6035 ---- + /* set when changing an option that only requires a redraw in the GUI */ + int redraw_gui_only = FALSE; + #endif +! int value_changed = FALSE; + #if defined(FEAT_VTP) && defined(FEAT_TERMGUICOLORS) + int did_swaptcap = FALSE; + #endif +*************** +*** 7437,7443 **** + if (!valid_filetype(*varp)) + errmsg = e_invarg; + else +! ft_changed = STRCMP(oldval, *varp) != 0; + } + + #ifdef FEAT_SYN_HL +--- 7437,7443 ---- + if (!valid_filetype(*varp)) + errmsg = e_invarg; + else +! value_changed = STRCMP(oldval, *varp) != 0; + } + + #ifdef FEAT_SYN_HL +*************** +*** 7445,7450 **** +--- 7445,7452 ---- + { + if (!valid_filetype(*varp)) + errmsg = e_invarg; ++ else ++ value_changed = STRCMP(oldval, *varp) != 0; + } + #endif + +*************** +*** 7565,7584 **** + /* When 'syntax' is set, load the syntax of that name */ + if (varp == &(curbuf->b_p_syn)) + { + apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, +! curbuf->b_fname, TRUE, curbuf); + } + #endif + else if (varp == &(curbuf->b_p_ft)) + { + /* 'filetype' is set, trigger the FileType autocommand. + * Skip this when called from a modeline and the filetype was +! * already set to this value. */ +! if (!(opt_flags & OPT_MODELINE) || ft_changed) + { + did_filetype = TRUE; + apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, +! curbuf->b_fname, TRUE, curbuf); + /* Just in case the old "curbuf" is now invalid. */ + if (varp != &(curbuf->b_p_ft)) + varp = NULL; +--- 7567,7590 ---- + /* When 'syntax' is set, load the syntax of that name */ + if (varp == &(curbuf->b_p_syn)) + { ++ // Only pass TRUE for "force" when the value changed, to avoid ++ // endless recurrence. */ + apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, +! curbuf->b_fname, value_changed, curbuf); + } + #endif + else if (varp == &(curbuf->b_p_ft)) + { + /* 'filetype' is set, trigger the FileType autocommand. + * Skip this when called from a modeline and the filetype was +! * already set to this value. +! * Only pass TRUE for "force" when the value changed, to avoid +! * endless recurrence. */ +! if (!(opt_flags & OPT_MODELINE) || value_changed) + { + did_filetype = TRUE; + apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, +! curbuf->b_fname, value_changed, curbuf); + /* Just in case the old "curbuf" is now invalid. */ + if (varp != &(curbuf->b_p_ft)) + varp = NULL; +*** ../vim-8.1.0065/src/version.c 2018-06-17 17:10:55.636590392 +0200 +--- src/version.c 2018-06-17 17:32:02.240534510 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 66, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +61. Your best friends know your e-mail address, but neither your phone number + nor the address where you live. + + /// 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 /// diff --git a/data/vim/patches/8.1.0067 b/data/vim/patches/8.1.0067 new file mode 100644 index 000000000..3a183214a --- /dev/null +++ b/data/vim/patches/8.1.0067 @@ -0,0 +1,95 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0067 +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.0067 +Problem: Syntax highlighting not working when re-entering a buffer. +Solution: Do force executing autocommands when not called recursively. +Files: src/option.c + + +*** ../vim-8.1.0066/src/option.c 2018-06-17 17:32:55.088218019 +0200 +--- src/option.c 2018-06-17 19:01:55.382567829 +0200 +*************** +*** 7567,7590 **** + /* When 'syntax' is set, load the syntax of that name */ + if (varp == &(curbuf->b_p_syn)) + { +! // Only pass TRUE for "force" when the value changed, to avoid +! // endless recurrence. */ +! apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, +! curbuf->b_fname, value_changed, curbuf); + } + #endif + else if (varp == &(curbuf->b_p_ft)) + { + /* 'filetype' is set, trigger the FileType autocommand. + * Skip this when called from a modeline and the filetype was +! * already set to this value. +! * Only pass TRUE for "force" when the value changed, to avoid +! * endless recurrence. */ + if (!(opt_flags & OPT_MODELINE) || value_changed) + { + did_filetype = TRUE; +! apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, +! curbuf->b_fname, value_changed, curbuf); + /* Just in case the old "curbuf" is now invalid. */ + if (varp != &(curbuf->b_p_ft)) + varp = NULL; +--- 7567,7598 ---- + /* When 'syntax' is set, load the syntax of that name */ + if (varp == &(curbuf->b_p_syn)) + { +! static int syn_recursive = 0; +! +! ++syn_recursive; +! // Only pass TRUE for "force" when the value changed or not used +! // recursively, to avoid endless recurrence. +! apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn, curbuf->b_fname, +! value_changed || syn_recursive == 1, curbuf); +! --syn_recursive; + } + #endif + else if (varp == &(curbuf->b_p_ft)) + { + /* 'filetype' is set, trigger the FileType autocommand. + * Skip this when called from a modeline and the filetype was +! * already set to this value. */ + if (!(opt_flags & OPT_MODELINE) || value_changed) + { ++ static int ft_recursive = 0; ++ ++ ++ft_recursive; + did_filetype = TRUE; +! // Only pass TRUE for "force" when the value changed or not +! // used recursively, to avoid endless recurrence. +! apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, curbuf->b_fname, +! value_changed || ft_recursive == 1, curbuf); +! --ft_recursive; + /* Just in case the old "curbuf" is now invalid. */ + if (varp != &(curbuf->b_p_ft)) + varp = NULL; +*** ../vim-8.1.0066/src/version.c 2018-06-17 17:32:55.088218019 +0200 +--- src/version.c 2018-06-17 19:07:00.000819142 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 67, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +62. If your doorbell rings, you think that new mail has arrived. And then + you're disappointed that it's only someone at the door. + + /// 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 /// diff --git a/data/vim/patches/8.1.0068 b/data/vim/patches/8.1.0068 new file mode 100644 index 000000000..21c51359d --- /dev/null +++ b/data/vim/patches/8.1.0068 @@ -0,0 +1,80 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0068 +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.0068 +Problem: Nasty autocommands can still cause using freed memory. +Solution: Disallow using setloclist() and setqflist() recursively. +Files: src/evalfunc.c + + +*** ../vim-8.1.0067/src/evalfunc.c 2018-06-12 20:25:47.887923393 +0200 +--- src/evalfunc.c 2018-06-17 19:16:21.949606435 +0200 +*************** +*** 10621,10626 **** +--- 10652,10658 ---- + static char *e_invact = N_("E927: Invalid action: '%s'"); + char_u *act; + int action = 0; ++ static int recursive = 0; + #endif + + rettv->vval.v_number = -1; +*************** +*** 10628,10633 **** +--- 10660,10667 ---- + #ifdef FEAT_QUICKFIX + if (list_arg->v_type != VAR_LIST) + EMSG(_(e_listreq)); ++ else if (recursive != 0) ++ EMSG(_(e_au_recursive)); + else + { + list_T *l = list_arg->vval.v_list; +*************** +*** 10662,10670 **** + } + } + + if (l != NULL && action && valid_dict && set_errorlist(wp, l, action, +! (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"), d) == OK) + rettv->vval.v_number = 0; + } + #endif + } +--- 10696,10707 ---- + } + } + ++ ++recursive; + if (l != NULL && action && valid_dict && set_errorlist(wp, l, action, +! (char_u *)(wp == NULL ? ":setqflist()" : ":setloclist()"), +! d) == OK) + rettv->vval.v_number = 0; ++ --recursive; + } + #endif + } +*** ../vim-8.1.0067/src/version.c 2018-06-17 19:08:26.476323920 +0200 +--- src/version.c 2018-06-17 19:17:27.305233384 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 68, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +63. You start using smileys in your snail mail. + + /// 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 /// diff --git a/data/vim/patches/8.1.0069 b/data/vim/patches/8.1.0069 new file mode 100644 index 000000000..f3f67bdc7 --- /dev/null +++ b/data/vim/patches/8.1.0069 @@ -0,0 +1,301 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0069 +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.0069 +Problem: Cannot handle pressing CTRL-C in a prompt buffer. +Solution: Add prompt_setinterrupt(). +Files: runtime/doc/eval.txt, src/edit.c, src/evalfunc.c, src/channel.c, + src/proto/channel.pro + + +*** ../vim-8.1.0068/runtime/doc/eval.txt 2018-06-07 18:17:42.274227515 +0200 +--- runtime/doc/eval.txt 2018-06-17 18:12:12.760548966 +0200 +*************** +*** 2297,2304 **** + prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} + printf({fmt}, {expr1}...) String format text + prompt_addtext({buf}, {expr}) none add text to a prompt buffer +- prompt_setprompt({buf}, {text}) none set prompt text + prompt_setcallback({buf}, {expr}) none set prompt callback function + pumvisible() Number whether popup menu is visible + pyeval({expr}) any evaluate |Python| expression + py3eval({expr}) any evaluate |python3| expression +--- 2297,2305 ---- + prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} + printf({fmt}, {expr1}...) String format text + prompt_addtext({buf}, {expr}) none add text to a prompt buffer + prompt_setcallback({buf}, {expr}) none set prompt callback function ++ prompt_setinterrupt({buf}, {text}) none set prompt interrupt function ++ prompt_setprompt({buf}, {text}) none set prompt text + pumvisible() Number whether popup menu is visible + pyeval({expr}) any evaluate |Python| expression + py3eval({expr}) any evaluate |python3| expression +*************** +*** 6506,6522 **** + arguments an error is given. Up to 18 arguments can be used. + + +- prompt_setprompt({buf}, {text}) *prompt_setprompt()* +- Set prompt for buffer {buf} to {text}. You most likely want +- {text} to end in a space. +- The result is only visible if {buf} has 'buftype' set to +- "prompt". Example: > +- call prompt_setprompt(bufnr(''), 'command: ') +- +- + prompt_setcallback({buf}, {expr}) *prompt_setcallback()* +! Set prompt callback for buffer {buf} to {expr}. This has only + effect if {buf} has 'buftype' set to "prompt". + The callback is invoked when pressing Enter. The current + buffer will always be the prompt buffer. A new line for a + prompt is added before invoking the callback, thus the prompt +--- 6507,6517 ---- + arguments an error is given. Up to 18 arguments can be used. + + + prompt_setcallback({buf}, {expr}) *prompt_setcallback()* +! Set prompt callback for buffer {buf} to {expr}. When {expr} +! is an empty string the callback is removed. This has only + effect if {buf} has 'buftype' set to "prompt". ++ + The callback is invoked when pressing Enter. The current + buffer will always be the prompt buffer. A new line for a + prompt is added before invoking the callback, thus the prompt +*************** +*** 6541,6546 **** +--- 6536,6557 ---- + endif + endfunc + ++ prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()* ++ Set a callback for buffer {buf} to {expr}. When {expr} is an ++ empty string the callback is removed. This has only effect if ++ {buf} has 'buftype' set to "prompt". ++ ++ This callback will be invoked when pressing CTRL-C in Insert ++ mode. Without setting a callback Vim will exit Insert mode, ++ as in any buffer. ++ ++ prompt_setprompt({buf}, {text}) *prompt_setprompt()* ++ Set prompt for buffer {buf} to {text}. You most likely want ++ {text} to end in a space. ++ The result is only visible if {buf} has 'buftype' set to ++ "prompt". Example: > ++ call prompt_setprompt(bufnr(''), 'command: ') ++ + + pumvisible() *pumvisible()* + Returns non-zero when the popup menu is visible, zero +*************** +*** 8563,8569 **** + instead of using 'termwinsize' + "term_cols" horizontal size to use for the terminal, + instead of using 'termwinsize' +! "vertical" split the window vertically + "curwin" use the current window, do not split the + window; fails if the current buffer + cannot be |abandon|ed +--- 8574,8582 ---- + instead of using 'termwinsize' + "term_cols" horizontal size to use for the terminal, + instead of using 'termwinsize' +! "vertical" split the window vertically; note that +! other window position can be defined with +! command modifiers, such as |:belowright|. + "curwin" use the current window, do not split the + window; fails if the current buffer + cannot be |abandon|ed +*************** +*** 9392,9402 **** + out if it works in the current console). + wildignore Compiled with 'wildignore' option. + wildmenu Compiled with 'wildmenu' option. + win32 Win32 version of Vim (MS-Windows 95 and later, 32 or + 64 bits) + win32unix Win32 version of Vim, using Unix files (Cygwin) + win64 Win64 version of Vim (MS-Windows 64 bit). +! win95 Win32 version for MS-Windows 95/98/ME. + winaltkeys Compiled with 'winaltkeys' option. + windows Compiled with support for more than one window. + writebackup Compiled with 'writebackup' default on. +--- 9405,9416 ---- + out if it works in the current console). + wildignore Compiled with 'wildignore' option. + wildmenu Compiled with 'wildmenu' option. ++ win16 old version for MS-Windows 3.1 (always False) + win32 Win32 version of Vim (MS-Windows 95 and later, 32 or + 64 bits) + win32unix Win32 version of Vim, using Unix files (Cygwin) + win64 Win64 version of Vim (MS-Windows 64 bit). +! win95 Win32 version for MS-Windows 95/98/ME (always False) + winaltkeys Compiled with 'winaltkeys' option. + windows Compiled with support for more than one window. + writebackup Compiled with 'writebackup' default on. +*** ../vim-8.1.0068/src/edit.c 2018-06-17 16:23:29.337140663 +0200 +--- src/edit.c 2018-06-17 19:32:54.656479224 +0200 +*************** +*** 1016,1021 **** +--- 1016,1034 ---- + goto doESCkey; + } + #endif ++ #ifdef FEAT_JOB_CHANNEL ++ if (c == Ctrl_C && bt_prompt(curbuf)) ++ { ++ if (invoke_prompt_interrupt()) ++ { ++ if (!bt_prompt(curbuf)) ++ // buffer changed to a non-prompt buffer, get out of ++ // Insert mode ++ goto doESCkey; ++ break; ++ } ++ } ++ #endif + + #ifdef UNIX + do_intr: +*** ../vim-8.1.0068/src/evalfunc.c 2018-06-17 19:22:48.343603795 +0200 +--- src/evalfunc.c 2018-06-17 19:16:21.949606435 +0200 +*************** +*** 298,303 **** +--- 298,304 ---- + static void f_printf(typval_T *argvars, typval_T *rettv); + #ifdef FEAT_JOB_CHANNEL + static void f_prompt_setcallback(typval_T *argvars, typval_T *rettv); ++ static void f_prompt_setinterrupt(typval_T *argvars, typval_T *rettv); + static void f_prompt_setprompt(typval_T *argvars, typval_T *rettv); + #endif + static void f_pumvisible(typval_T *argvars, typval_T *rettv); +*************** +*** 754,759 **** +--- 755,761 ---- + {"printf", 1, 19, f_printf}, + #ifdef FEAT_JOB_CHANNEL + {"prompt_setcallback", 2, 2, f_prompt_setcallback}, ++ {"prompt_setinterrupt", 2, 2, f_prompt_setinterrupt}, + {"prompt_setprompt", 2, 2, f_prompt_setprompt}, + #endif + {"pumvisible", 0, 0, f_pumvisible}, +*************** +*** 8622,8627 **** +--- 8624,8658 ---- + } + + /* ++ * "prompt_setinterrupt({buffer}, {callback})" function ++ */ ++ static void ++ f_prompt_setinterrupt(typval_T *argvars, typval_T *rettv UNUSED) ++ { ++ buf_T *buf; ++ char_u *callback; ++ partial_T *partial; ++ ++ if (check_secure()) ++ return; ++ buf = get_buf_tv(&argvars[0], FALSE); ++ if (buf == NULL) ++ return; ++ ++ callback = get_callback(&argvars[1], &partial); ++ if (callback == NULL) ++ return; ++ ++ free_callback(buf->b_prompt_interrupt, buf->b_prompt_int_partial); ++ if (partial == NULL) ++ buf->b_prompt_interrupt = vim_strsave(callback); ++ else ++ /* pointer into the partial */ ++ buf->b_prompt_interrupt = callback; ++ buf->b_prompt_int_partial = partial; ++ } ++ ++ /* + * "prompt_setprompt({buffer}, {text})" function + */ + static void +*** ../vim-8.1.0068/src/channel.c 2018-06-12 20:25:47.883923416 +0200 +--- src/channel.c 2018-06-17 19:33:49.264186387 +0200 +*************** +*** 5856,5862 **** + curwin->w_cursor.lnum = lnum + 1; + curwin->w_cursor.col = 0; + +! if (curbuf->b_prompt_callback == NULL) + return; + text = ml_get(lnum); + prompt = prompt_text(); +--- 5856,5862 ---- + curwin->w_cursor.lnum = lnum + 1; + curwin->w_cursor.col = 0; + +! if (curbuf->b_prompt_callback == NULL || *curbuf->b_prompt_callback == NUL) + return; + text = ml_get(lnum); + prompt = prompt_text(); +*************** +*** 5874,5877 **** +--- 5874,5901 ---- + clear_tv(&rettv); + } + ++ /* ++ * Return TRUE when the interrupt callback was invoked. ++ */ ++ int ++ invoke_prompt_interrupt(void) ++ { ++ typval_T rettv; ++ int dummy; ++ typval_T argv[1]; ++ ++ if (curbuf->b_prompt_interrupt == NULL ++ || *curbuf->b_prompt_interrupt == NUL) ++ return FALSE; ++ argv[0].v_type = VAR_UNKNOWN; ++ ++ got_int = FALSE; // don't skip executing commands ++ call_func(curbuf->b_prompt_interrupt, ++ (int)STRLEN(curbuf->b_prompt_interrupt), ++ &rettv, 0, argv, NULL, 0L, 0L, &dummy, TRUE, ++ curbuf->b_prompt_int_partial, NULL); ++ clear_tv(&rettv); ++ return TRUE; ++ } ++ + #endif /* FEAT_JOB_CHANNEL */ +*** ../vim-8.1.0068/src/proto/channel.pro 2018-06-12 20:25:47.883923416 +0200 +--- src/proto/channel.pro 2018-06-17 19:34:32.267954974 +0200 +*************** +*** 72,75 **** +--- 72,76 ---- + void job_info_all(list_T *l); + int job_stop(job_T *job, typval_T *argvars, char *type); + void invoke_prompt_callback(void); ++ int invoke_prompt_interrupt(void); + /* vim: set ft=c : */ +*** ../vim-8.1.0068/src/version.c 2018-06-17 19:22:48.343603795 +0200 +--- src/version.c 2018-06-17 19:34:40.111912692 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 69, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +64. The remote to the T.V. is missing...and you don't even care. + + /// 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 /// diff --git a/data/vim/patches/8.1.0070 b/data/vim/patches/8.1.0070 new file mode 100644 index 000000000..25766d0ec --- /dev/null +++ b/data/vim/patches/8.1.0070 @@ -0,0 +1,48 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0070 +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.0070 +Problem: Missing part of the changes for prompt_setinterrupt(). +Solution: Add the missing changes. +Files: src/structs.h + + +*** ../vim-8.1.0069/src/structs.h 2018-06-06 09:11:07.257357317 +0200 +--- src/structs.h 2018-06-17 18:27:08.038723480 +0200 +*************** +*** 2360,2365 **** +--- 2360,2367 ---- + char_u *b_prompt_text; // set by prompt_setprompt() + char_u *b_prompt_callback; // set by prompt_setcallback() + partial_T *b_prompt_partial; // set by prompt_setcallback() ++ char_u *b_prompt_interrupt; // set by prompt_setinterrupt() ++ partial_T *b_prompt_int_partial; // set by prompt_setinterrupt() + int b_prompt_insert; // value for restart_edit when entering + // a prompt buffer window. + #endif +*** ../vim-8.1.0069/src/version.c 2018-06-17 19:36:30.215317108 +0200 +--- src/version.c 2018-06-17 20:10:13.756190264 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 70, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +65. The last time you looked at the clock it was 11:30pm, and in what + seems like only a few seconds later, your sister runs past you to + catch her 7am school bus. + + /// 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 /// diff --git a/data/vim/patches/8.1.0071 b/data/vim/patches/8.1.0071 new file mode 100644 index 000000000..e3a8640fb --- /dev/null +++ b/data/vim/patches/8.1.0071 @@ -0,0 +1,792 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0071 +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.0071 +Problem: Terminal debugger only works with the terminal feature. +Solution: Make it also work with a prompt buffer. Makes it possible to use + on MS-Windows. Various other improvements. (closes #3012) +Files: runtime/doc/terminal.txt, + runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0070/runtime/doc/terminal.txt 2018-06-12 18:04:28.034267877 +0200 +--- runtime/doc/terminal.txt 2018-06-17 21:33:43.206011529 +0200 +*************** +*** 38,43 **** +--- 38,44 ---- + Stepping through code |termdebug-stepping| + Inspecting variables |termdebug-variables| + Other commands |termdebug-commands| ++ Prompt mode |termdebug-prompt| + Communication |termdebug-communication| + Customizing |termdebug-customizing| + +*************** +*** 620,625 **** +--- 621,630 ---- + the source code in a Vim window. Since this is completely contained inside + Vim this also works remotely over an ssh connection. + ++ When the |+terminal| feature is missing, the plugin will use the "prompt" ++ buffer type, if possible. The running program will then use a newly opened ++ terminal window. See |termdebug-prompt| below for details. ++ + + Starting ~ + *termdebug-starting* +*************** +*** 799,804 **** +--- 804,826 ---- + isn't one + + ++ Prompt mode ~ ++ *termdebug-prompt* ++ When the |+terminal| feature is not supported and on MS-Windows, gdb will run ++ in a buffer with 'buftype' set to "prompt". This works slightly differently: ++ - The gdb window will be in Insert mode while typing commands. Go to Normal ++ mode with <Esc>, then you can move around in the buffer, copy/paste, etc. ++ Go back to editing the gdb command with any command that starts Insert mode, ++ such as `a` or `i`. ++ - The program being debugged will run in a separate window. On MS-Windows ++ this is a new console window. On Unix, if the |+terminal| feature is ++ available a Terminal window will be opened to run the debugged program in. ++ ++ *termdebug_use_prompt* ++ Prompt mode can be used even when the |+terminal| feature is present with: > ++ let g:termdebug_use_prompt = 1 ++ ++ + Communication ~ + *termdebug-communication* + There is another, hidden, buffer, which is used for Vim to communicate with +*************** +*** 836,841 **** +--- 858,871 ---- + hi debugBreakpoint term=reverse ctermbg=red guibg=red + + ++ Shorcuts *termdebug_shortcuts* ++ ++ You can define your own shortcuts (mappings) to control gdb, that can work in ++ any window, using the TermDebugSendCommand() function. Example: > ++ map ,w :call TermDebugSendCommand('where')<CR> ++ The argument is the gdb command. ++ ++ + Popup menu *termdebug_popup* + + By default the Termdebug plugin sets 'mousemodel' to "popup_setpos" and adds +*** ../vim-8.1.0070/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-04-16 16:16:51.000000000 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-17 21:27:00.040243063 +0200 +*************** +*** 1,27 **** + " Debugger plugin using gdb. + " +! " WORK IN PROGRESS - much doesn't work yet + " +! " Open two visible terminal windows: +! " 1. run a pty, as with ":term NONE" +! " 2. run gdb, passing the pty +! " The current window is used to view source code and follows gdb. + " + " A third terminal window is hidden, it is used for communication with gdb. + " + " The communication with gdb uses GDB/MI. See: + " https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html +- " +- " Author: Bram Moolenaar +- " Copyright: Vim license applies, see ":help license" + +! " In case this gets loaded twice. + if exists(':Termdebug') + finish + endif + +! " Uncomment this line to write logging in "debuglog". +! " call ch_logfile('debuglog', 'w') + + " The command that starts debugging, e.g. ":Termdebug vim". + " To end type "quit" in the gdb window. +--- 1,60 ---- + " Debugger plugin using gdb. + " +! " Author: Bram Moolenaar +! " Copyright: Vim license applies, see ":help license" +! " Last Update: 2018 Jun 3 +! " +! " WORK IN PROGRESS - Only the basics work +! " Note: On MS-Windows you need a recent version of gdb. The one included with +! " MingW is too old (7.6.1). +! " I used version 7.12 from http://www.equation.com/servlet/equation.cmd?fa=gdb +! " +! " There are two ways to run gdb: +! " - In a terminal window; used if possible, does not work on MS-Windows +! " Not used when g:termdebug_use_prompt is set to 1. +! " - Using a "prompt" buffer; may use a terminal window for the program + " +! " For both the current window is used to view source code and shows the +! " current statement from gdb. + " ++ " USING A TERMINAL WINDOW ++ " ++ " Opens two visible terminal windows: ++ " 1. runs a pty for the debugged program, as with ":term NONE" ++ " 2. runs gdb, passing the pty of the debugged program + " A third terminal window is hidden, it is used for communication with gdb. + " ++ " USING A PROMPT BUFFER ++ " ++ " Opens a window with a prompt buffer to communicate with gdb. ++ " Gdb is run as a job with callbacks for I/O. ++ " On Unix another terminal window is opened to run the debugged program ++ " On MS-Windows a separate console is opened to run the debugged program ++ " + " The communication with gdb uses GDB/MI. See: + " https://sourceware.org/gdb/current/onlinedocs/gdb/GDB_002fMI.html + +! " In case this gets sourced twice. + if exists(':Termdebug') + finish + endif + +! " Need either the +terminal feature or +channel and the prompt buffer. +! " The terminal feature does not work with gdb on win32. +! if has('terminal') && !has('win32') +! let s:way = 'terminal' +! elseif has('channel') && exists('*prompt_setprompt') +! let s:way = 'prompt' +! else +! if has('terminal') +! let s:err = 'Cannot debug, missing prompt buffer support' +! else +! let s:err = 'Cannot debug, +channel feature is not supported' +! endif +! command -nargs=* -complete=file -bang Termdebug echoerr s:err +! command -nargs=+ -complete=file -bang TermdebugCommand echoerr s:err +! finish +! endif + + " The command that starts debugging, e.g. ":Termdebug vim". + " To end type "quit" in the gdb window. +*************** +*** 59,66 **** + echoerr 'Terminal debugger already running' + return + endif + +! let s:startwin = win_getid(winnr()) + let s:startsigncolumn = &signcolumn + + let s:save_columns = 0 +--- 92,103 ---- + echoerr 'Terminal debugger already running' + return + endif ++ let s:ptywin = 0 + +! " Uncomment this line to write logging in "debuglog". +! " call ch_logfile('debuglog', 'w') +! +! let s:sourcewin = win_getid(winnr()) + let s:startsigncolumn = &signcolumn + + let s:save_columns = 0 +*************** +*** 69,83 **** + let s:save_columns = &columns + let &columns = g:termdebug_wide + endif +! let vertical = 1 + else +! let vertical = 0 + endif + +! " Open a terminal window without a job, to run the debugged program + let s:ptybuf = term_start('NONE', { +! \ 'term_name': 'gdb program', +! \ 'vertical': vertical, + \ }) + if s:ptybuf == 0 + echoerr 'Failed to open the program terminal window' +--- 106,136 ---- + let s:save_columns = &columns + let &columns = g:termdebug_wide + endif +! let s:vertical = 1 +! else +! let s:vertical = 0 +! endif +! +! " Override using a terminal window by setting g:termdebug_use_prompt to 1. +! let use_prompt = exists('g:termdebug_use_prompt') && g:termdebug_use_prompt +! if has('terminal') && !has('win32') && !use_prompt +! let s:way = 'terminal' + else +! let s:way = 'prompt' + endif + +! if s:way == 'prompt' +! call s:StartDebug_prompt(a:dict) +! else +! call s:StartDebug_term(a:dict) +! endif +! endfunc +! +! func s:StartDebug_term(dict) +! " Open a terminal window without a job, to run the debugged program in. + let s:ptybuf = term_start('NONE', { +! \ 'term_name': 'debugged program', +! \ 'vertical': s:vertical, + \ }) + if s:ptybuf == 0 + echoerr 'Failed to open the program terminal window' +*************** +*** 85,91 **** + endif + let pty = job_info(term_getjob(s:ptybuf))['tty_out'] + let s:ptywin = win_getid(winnr()) +! if vertical + " Assuming the source code window will get a signcolumn, use two more + " columns for that, thus one less for the terminal window. + exe (&columns / 2 - 1) . "wincmd |" +--- 138,144 ---- + endif + let pty = job_info(term_getjob(s:ptybuf))['tty_out'] + let s:ptywin = win_getid(winnr()) +! if s:vertical + " Assuming the source code window will get a signcolumn, use two more + " columns for that, thus one less for the terminal window. + exe (&columns / 2 - 1) . "wincmd |" +*************** +*** 110,118 **** + let proc_args = get(a:dict, 'proc_args', []) + + let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args +! echomsg 'executing "' . join(cmd) . '"' + let s:gdbbuf = term_start(cmd, { +! \ 'exit_cb': function('s:EndDebug'), + \ 'term_finish': 'close', + \ }) + if s:gdbbuf == 0 +--- 163,171 ---- + let proc_args = get(a:dict, 'proc_args', []) + + let cmd = [g:termdebugger, '-quiet', '-tty', pty] + gdb_args +! call ch_log('executing "' . join(cmd) . '"') + let s:gdbbuf = term_start(cmd, { +! \ 'exit_cb': function('s:EndTermDebug'), + \ 'term_finish': 'close', + \ }) + if s:gdbbuf == 0 +*************** +*** 166,176 **** + " exec-interrupt, since many commands don't work properly while the target is + " running. + call s:SendCommand('-gdb-set mi-async on') + + " Disable pagination, it causes everything to stop at the gdb + " "Type <return> to continue" prompt. +! call s:SendCommand('-gdb-set pagination off') + + " Sign used to highlight the line where the program has stopped. + " There can be only one. + sign define debugPC linehl=debugPC +--- 219,326 ---- + " exec-interrupt, since many commands don't work properly while the target is + " running. + call s:SendCommand('-gdb-set mi-async on') ++ " Older gdb uses a different command. ++ call s:SendCommand('-gdb-set target-async on') + + " Disable pagination, it causes everything to stop at the gdb + " "Type <return> to continue" prompt. +! call s:SendCommand('set pagination off') +! +! call s:StartDebugCommon(a:dict) +! endfunc +! +! func s:StartDebug_prompt(dict) +! " Open a window with a prompt buffer to run gdb in. +! if s:vertical +! vertical new +! else +! new +! endif +! let s:gdbwin = win_getid(winnr()) +! let s:promptbuf = bufnr('') +! call prompt_setprompt(s:promptbuf, 'gdb> ') +! set buftype=prompt +! file gdb +! call prompt_setcallback(s:promptbuf, function('s:PromptCallback')) +! call prompt_setinterrupt(s:promptbuf, function('s:PromptInterrupt')) + ++ if s:vertical ++ " Assuming the source code window will get a signcolumn, use two more ++ " columns for that, thus one less for the terminal window. ++ exe (&columns / 2 - 1) . "wincmd |" ++ endif ++ ++ " Add -quiet to avoid the intro message causing a hit-enter prompt. ++ let gdb_args = get(a:dict, 'gdb_args', []) ++ let proc_args = get(a:dict, 'proc_args', []) ++ ++ let cmd = [g:termdebugger, '-quiet', '--interpreter=mi2'] + gdb_args ++ call ch_log('executing "' . join(cmd) . '"') ++ ++ let s:gdbjob = job_start(cmd, { ++ \ 'exit_cb': function('s:EndPromptDebug'), ++ \ 'out_cb': function('s:GdbOutCallback'), ++ \ }) ++ if job_status(s:gdbjob) != "run" ++ echoerr 'Failed to start gdb' ++ exe 'bwipe! ' . s:promptbuf ++ return ++ endif ++ let s:gdb_channel = job_getchannel(s:gdbjob) ++ ++ " Interpret commands while the target is running. This should usualy only ++ " be exec-interrupt, since many commands don't work properly while the ++ " target is running. ++ call s:SendCommand('-gdb-set mi-async on') ++ " Older gdb uses a different command. ++ call s:SendCommand('-gdb-set target-async on') ++ ++ let s:ptybuf = 0 ++ if has('win32') ++ " MS-Windows: run in a new console window for maximum compatibility ++ call s:SendCommand('set new-console on') ++ elseif has('terminal') ++ " Unix: Run the debugged program in a terminal window. Open it below the ++ " gdb window. ++ belowright let s:ptybuf = term_start('NONE', { ++ \ 'term_name': 'debugged program', ++ \ }) ++ if s:ptybuf == 0 ++ echoerr 'Failed to open the program terminal window' ++ call job_stop(s:gdbjob) ++ return ++ endif ++ let s:ptywin = win_getid(winnr()) ++ let pty = job_info(term_getjob(s:ptybuf))['tty_out'] ++ call s:SendCommand('tty ' . pty) ++ ++ " Since GDB runs in a prompt window, the environment has not been set to ++ " match a terminal window, need to do that now. ++ call s:SendCommand('set env TERM = xterm-color') ++ call s:SendCommand('set env ROWS = ' . winheight(s:ptywin)) ++ call s:SendCommand('set env LINES = ' . winheight(s:ptywin)) ++ call s:SendCommand('set env COLUMNS = ' . winwidth(s:ptywin)) ++ call s:SendCommand('set env COLORS = ' . &t_Co) ++ call s:SendCommand('set env VIM_TERMINAL = ' . v:version) ++ else ++ " TODO: open a new terminal get get the tty name, pass on to gdb ++ call s:SendCommand('show inferior-tty') ++ endif ++ call s:SendCommand('set print pretty on') ++ call s:SendCommand('set breakpoint pending on') ++ " Disable pagination, it causes everything to stop at the gdb ++ call s:SendCommand('set pagination off') ++ ++ " Set arguments to be run ++ if len(proc_args) ++ call s:SendCommand('set args ' . join(proc_args)) ++ endif ++ ++ call s:StartDebugCommon(a:dict) ++ startinsert ++ endfunc ++ ++ func s:StartDebugCommon(dict) + " Sign used to highlight the line where the program has stopped. + " There can be only one. + sign define debugPC linehl=debugPC +*************** +*** 180,186 **** + sign define debugBreakpoint text=>> texthl=debugBreakpoint + + " Install debugger commands in the text window. +! call win_gotoid(s:startwin) + call s:InstallCommands() + call win_gotoid(s:gdbwin) + +--- 330,336 ---- + sign define debugBreakpoint text=>> texthl=debugBreakpoint + + " Install debugger commands in the text window. +! call win_gotoid(s:sourcewin) + call s:InstallCommands() + call win_gotoid(s:gdbwin) + +*************** +*** 202,228 **** + au BufUnload * call s:BufUnloaded() + augroup END + +! " Run the command if the bang attribute was given +! " and got to the window + if get(a:dict, 'bang', 0) + call s:SendCommand('-exec-run') + call win_gotoid(s:ptywin) + endif + + endfunc + +! func s:EndDebug(job, status) +! exe 'bwipe! ' . s:ptybuf + exe 'bwipe! ' . s:commbuf + unlet s:gdbwin + + let curwinid = win_getid(winnr()) + +! call win_gotoid(s:startwin) + let &signcolumn = s:startsigncolumn + call s:DeleteCommands() + + call win_gotoid(curwinid) + if s:save_columns > 0 + let &columns = s:save_columns + endif +--- 352,481 ---- + au BufUnload * call s:BufUnloaded() + augroup END + +! " Run the command if the bang attribute was given and got to the debug +! " window. + if get(a:dict, 'bang', 0) + call s:SendCommand('-exec-run') + call win_gotoid(s:ptywin) + endif ++ endfunc ++ ++ " Send a command to gdb. "cmd" is the string without line terminator. ++ func s:SendCommand(cmd) ++ call ch_log('sending to gdb: ' . a:cmd) ++ if s:way == 'prompt' ++ call ch_sendraw(s:gdb_channel, a:cmd . "\n") ++ else ++ call term_sendkeys(s:commbuf, a:cmd . "\r") ++ endif ++ endfunc ++ ++ " This is global so that a user can create their mappings with this. ++ func TermDebugSendCommand(cmd) ++ if s:way == 'prompt' ++ call ch_sendraw(s:gdb_channel, a:cmd . "\n") ++ else ++ let do_continue = 0 ++ if !s:stopped ++ let do_continue = 1 ++ call s:SendCommand('-exec-interrupt') ++ sleep 10m ++ endif ++ call term_sendkeys(s:gdbbuf, a:cmd . "\r") ++ if do_continue ++ Continue ++ endif ++ endif ++ endfunc ++ ++ " Function called when entering a line in the prompt buffer. ++ func s:PromptCallback(text) ++ call s:SendCommand(a:text) ++ endfunc ++ ++ " Function called when pressing CTRL-C in the prompt buffer. ++ func s:PromptInterrupt() ++ call ch_log('Interrupting gdb') ++ call job_stop(s:gdbjob, 'int') ++ endfunc ++ ++ " Function called when gdb outputs text. ++ func s:GdbOutCallback(channel, text) ++ call ch_log('received from gdb: ' . a:text) ++ ++ " Drop the gdb prompt, we have our own. ++ " Drop status and echo'd commands. ++ if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&' || a:text[0] == '=' ++ return ++ endif ++ if a:text =~ '^^error,msg=' ++ let text = s:DecodeMessage(a:text[11:]) ++ if exists('s:evalexpr') && text =~ 'A syntax error in expression, near\|No symbol .* in current context' ++ " Silently drop evaluation errors. ++ unlet s:evalexpr ++ return ++ endif ++ elseif a:text[0] == '~' ++ let text = s:DecodeMessage(a:text[1:]) ++ else ++ call s:CommOutput(a:channel, a:text) ++ return ++ endif + ++ let curwinid = win_getid(winnr()) ++ call win_gotoid(s:gdbwin) ++ ++ " Add the output above the current prompt. ++ call append(line('$') - 1, text) ++ set nomodified ++ ++ call win_gotoid(curwinid) + endfunc + +! " Decode a message from gdb. quotedText starts with a ", return the text up +! " to the next ", unescaping characters. +! func s:DecodeMessage(quotedText) +! if a:quotedText[0] != '"' +! echoerr 'DecodeMessage(): missing quote' +! return +! endif +! let result = '' +! let i = 1 +! while a:quotedText[i] != '"' && i < len(a:quotedText) +! if a:quotedText[i] == '\' +! let i += 1 +! if a:quotedText[i] == 'n' +! " drop \n +! let i += 1 +! continue +! endif +! endif +! let result .= a:quotedText[i] +! let i += 1 +! endwhile +! return result +! endfunc +! +! func s:EndTermDebug(job, status) + exe 'bwipe! ' . s:commbuf + unlet s:gdbwin + ++ call s:EndDebugCommon() ++ endfunc ++ ++ func s:EndDebugCommon() + let curwinid = win_getid(winnr()) + +! if exists('s:ptybuf') && s:ptybuf +! exe 'bwipe! ' . s:ptybuf +! endif +! +! call win_gotoid(s:sourcewin) + let &signcolumn = s:startsigncolumn + call s:DeleteCommands() + + call win_gotoid(curwinid) ++ + if s:save_columns > 0 + let &columns = s:save_columns + endif +*************** +*** 240,245 **** +--- 493,511 ---- + au! TermDebug + endfunc + ++ func s:EndPromptDebug(job, status) ++ let curwinid = win_getid(winnr()) ++ call win_gotoid(s:gdbwin) ++ close ++ if curwinid != s:gdbwin ++ call win_gotoid(curwinid) ++ endif ++ ++ call s:EndDebugCommon() ++ unlet s:gdbwin ++ call ch_log("Returning from EndPromptDebug()") ++ endfunc ++ + " Handle a message received from gdb on the GDB/MI interface. + func s:CommOutput(chan, msg) + let msgs = split(a:msg, "\r") +*************** +*** 275,285 **** + command -nargs=* Run call s:Run(<q-args>) + command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>) + command Stop call s:SendCommand('-exec-interrupt') +! command Continue call s:SendCommand('-exec-continue') + command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>) + command Gdb call win_gotoid(s:gdbwin) + command Program call win_gotoid(s:ptywin) +! command Source call s:GotoStartwinOrCreateIt() + command Winbar call s:InstallWinbar() + + " TODO: can the K mapping be restored? +--- 541,558 ---- + command -nargs=* Run call s:Run(<q-args>) + command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>) + command Stop call s:SendCommand('-exec-interrupt') +! +! " using -exec-continue results in CTRL-C in gdb window not working +! if s:way == 'prompt' +! command Continue call s:SendCommand('continue') +! else +! command Continue call term_sendkeys(s:gdbbuf, "continue\r") +! endif +! + command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>) + command Gdb call win_gotoid(s:gdbwin) + command Program call win_gotoid(s:ptywin) +! command Source call s:GotoSourcewinOrCreateIt() + command Winbar call s:InstallWinbar() + + " TODO: can the K mapping be restored? +*************** +*** 375,381 **** + let do_continue = 0 + if !s:stopped + let do_continue = 1 +! call s:SendCommand('-exec-interrupt') + sleep 10m + endif + call s:SendCommand('-break-insert --source ' +--- 648,660 ---- + let do_continue = 0 + if !s:stopped + let do_continue = 1 +! if s:way == 'prompt' +! " Need to send a signal to get the UI to listen. Strangely this is only +! " needed once. +! call job_stop(s:gdbjob, 'int') +! else +! call s:SendCommand('-exec-interrupt') +! endif + sleep 10m + endif + call s:SendCommand('-break-insert --source ' +*************** +*** 391,397 **** + let lnum = line('.') + for [key, val] in items(s:breakpoints) + if val['fname'] == fname && val['lnum'] == lnum +! call term_sendkeys(s:commbuf, '-break-delete ' . key . "\r") + " Assume this always wors, the reply is simply "^done". + exe 'sign unplace ' . (s:break_id + key) + unlet s:breakpoints[key] +--- 670,676 ---- + let lnum = line('.') + for [key, val] in items(s:breakpoints) + if val['fname'] == fname && val['lnum'] == lnum +! call s:SendCommand('-break-delete ' . key) + " Assume this always wors, the reply is simply "^done". + exe 'sign unplace ' . (s:break_id + key) + unlet s:breakpoints[key] +*************** +*** 400,410 **** + endfor + endfunc + +- " :Next, :Continue, etc - send a command to gdb +- func s:SendCommand(cmd) +- call term_sendkeys(s:commbuf, a:cmd . "\r") +- endfunc +- + func s:Run(args) + if a:args != '' + call s:SendCommand('-exec-arguments ' . a:args) +--- 679,684 ---- +*************** +*** 466,472 **** + " Show a balloon with information of the variable under the mouse pointer, + " if there is any. + func TermDebugBalloonExpr() +! if v:beval_winid != s:startwin + return + endif + let s:evalFromBalloonExpr = 1 +--- 740,751 ---- + " Show a balloon with information of the variable under the mouse pointer, + " if there is any. + func TermDebugBalloonExpr() +! if v:beval_winid != s:sourcewin +! return +! endif +! if !s:stopped +! " Only evaluate when stopped, otherwise setting a breakpoint using the +! " mouse triggers a balloon. + return + endif + let s:evalFromBalloonExpr = 1 +*************** +*** 487,496 **** + echoerr substitute(a:msg, '.*msg="\(.*\)"', '\1', '') + endfunc + +! func s:GotoStartwinOrCreateIt() +! if !win_gotoid(s:startwin) + new +! let s:startwin = win_getid(winnr()) + call s:InstallWinbar() + endif + endfunc +--- 766,775 ---- + echoerr substitute(a:msg, '.*msg="\(.*\)"', '\1', '') + endfunc + +! func s:GotoSourcewinOrCreateIt() +! if !win_gotoid(s:sourcewin) + new +! let s:sourcewin = win_getid(winnr()) + call s:InstallWinbar() + endif + endfunc +*************** +*** 506,512 **** + let s:stopped = 0 + endif + +! call s:GotoStartwinOrCreateIt() + + let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') + if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) +--- 785,791 ---- + let s:stopped = 0 + endif + +! call s:GotoSourcewinOrCreateIt() + + let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') + if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) +*************** +*** 516,522 **** + if &modified + " TODO: find existing window + exe 'split ' . fnameescape(fname) +! let s:startwin = win_getid(winnr()) + call s:InstallWinbar() + else + exe 'edit ' . fnameescape(fname) +--- 795,801 ---- + if &modified + " TODO: find existing window + exe 'split ' . fnameescape(fname) +! let s:sourcewin = win_getid(winnr()) + call s:InstallWinbar() + else + exe 'edit ' . fnameescape(fname) +*** ../vim-8.1.0070/src/version.c 2018-06-17 20:10:36.208066158 +0200 +--- src/version.c 2018-06-17 21:30:33.843055781 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 71, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +66. You create a homepage with the impression to cure the afflicted...but + your hidden agenda is to receive more e-mail. + + /// 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 /// diff --git a/data/vim/patches/8.1.0072 b/data/vim/patches/8.1.0072 new file mode 100644 index 000000000..e08a5d9b4 --- /dev/null +++ b/data/vim/patches/8.1.0072 @@ -0,0 +1,97 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0072 +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.0072 +Problem: Use of 'termwinkey' is inconsistent. +Solution: Change the documentation and the behavior. (Ken Takata) +Files: src/terminal.c, runtime/doc/terminal.txt + + +*** ../vim-8.1.0071/src/terminal.c 2018-06-12 20:25:47.887923393 +0200 +--- src/terminal.c 2018-06-17 22:02:22.045425925 +0200 +*************** +*** 2107,2113 **** +--- 2107,2117 ---- + in_terminal_loop = curbuf->b_term; + + if (*curwin->w_p_twk != NUL) ++ { + termwinkey = string_to_key(curwin->w_p_twk, TRUE); ++ if (termwinkey == Ctrl_W) ++ termwinkey = 0; ++ } + position_cursor(curwin, &curbuf->b_term->tl_cursor_pos); + may_set_cursor_props(curbuf->b_term); + +*************** +*** 2203,2214 **** + /* "CTRL-W CTRL-C" or 'termwinkey' CTRL-C: end the job */ + mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill"); + } +! else if (termwinkey == 0 && c == '.') + { + /* "CTRL-W .": send CTRL-W to the job */ +! c = Ctrl_W; + } +! else if (termwinkey == 0 && c == Ctrl_BSL) + { + /* "CTRL-W CTRL-\": send CTRL-\ to the job */ + c = Ctrl_BSL; +--- 2207,2219 ---- + /* "CTRL-W CTRL-C" or 'termwinkey' CTRL-C: end the job */ + mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill"); + } +! else if (c == '.') + { + /* "CTRL-W .": send CTRL-W to the job */ +! /* "'termwinkey' .": send 'termwinkey' to the job */ +! c = termwinkey == 0 ? Ctrl_W : termwinkey; + } +! else if (c == Ctrl_BSL) + { + /* "CTRL-W CTRL-\": send CTRL-\ to the job */ + c = Ctrl_BSL; +*** ../vim-8.1.0071/runtime/doc/terminal.txt 2018-06-17 21:34:08.277873656 +0200 +--- runtime/doc/terminal.txt 2018-06-17 22:03:58.916917371 +0200 +*************** +*** 87,93 **** + 'termwinkey' CTRL-W move focus to the next window + 'termwinkey' : enter an Ex command + 'termwinkey' 'termwinkey' send 'termwinkey' to the job in the terminal +! 'termwinkey' . send a CTRL-W to the job in the terminal + 'termwinkey' N go to terminal Normal mode, see below + 'termwinkey' CTRL-N same as CTRL-W N + 'termwinkey' CTRL-C same as |t_CTRL-W_CTRL-C| +--- 87,94 ---- + 'termwinkey' CTRL-W move focus to the next window + 'termwinkey' : enter an Ex command + 'termwinkey' 'termwinkey' send 'termwinkey' to the job in the terminal +! 'termwinkey' . send 'termwinkey' to the job in the terminal +! 'termwinkey' CTRL-\ send a CTRL-\ to the job in the terminal + 'termwinkey' N go to terminal Normal mode, see below + 'termwinkey' CTRL-N same as CTRL-W N + 'termwinkey' CTRL-C same as |t_CTRL-W_CTRL-C| +*** ../vim-8.1.0071/src/version.c 2018-06-17 21:34:08.277873656 +0200 +--- src/version.c 2018-06-17 22:18:19.319512827 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 72, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +68. Your cat always puts viruses on your dogs homepage + + /// 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 /// diff --git a/data/vim/patches/8.1.0073 b/data/vim/patches/8.1.0073 new file mode 100644 index 000000000..7d012ab4e --- /dev/null +++ b/data/vim/patches/8.1.0073 @@ -0,0 +1,78 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0073 +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.0073 +Problem: Crash when autocommands call setloclist(). (Dominique Pelle) +Solution: If the quickfix list changes then don't jump to the error. +Files: src/quickfix.c, src/testdir/test_quickfix.vim + + + +*** ../vim-8.1.0072/src/quickfix.c 2018-06-16 22:16:43.232576946 +0200 +--- src/quickfix.c 2018-06-18 20:46:57.982804364 +0200 +*************** +*** 6348,6356 **** + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); +! if (res > 0 && (eap->cmdidx == CMD_cexpr || +! eap->cmdidx == CMD_lexpr)) +! qf_jump(qi, 0, 0, eap->forceit); /* display first error */ + } + else + EMSG(_("E777: String or List expected")); +--- 6348,6358 ---- + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); +! if (res > 0 && (eap->cmdidx == CMD_cexpr +! || eap->cmdidx == CMD_lexpr) +! && qi == ll_get_or_alloc_list(curwin)) +! // Jump to the first error if autocmds didn't free the list. +! qf_jump(qi, 0, 0, eap->forceit); + } + else + EMSG(_("E777: String or List expected")); +*** ../vim-8.1.0072/src/testdir/test_quickfix.vim 2018-06-16 22:16:43.232576946 +0200 +--- src/testdir/test_quickfix.vim 2018-06-18 20:48:23.134324971 +0200 +*************** +*** 3362,3364 **** +--- 3362,3375 ---- + au! + augroup END + endfunc ++ ++ func Test_setloclist_in_aucmd() ++ " This was using freed memory. ++ augroup nasty ++ au * * call setloclist(0, [], 'f') ++ augroup END ++ lexpr "x" ++ augroup nasty ++ au! ++ augroup END ++ endfunc +*** ../vim-8.1.0072/src/version.c 2018-06-17 22:19:07.267202961 +0200 +--- src/version.c 2018-06-18 20:51:25.897295981 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 73, + /**/ + +-- +Q: How many legs does a giraffe have? +A: Eight: two in front, two behind, two on the left and two on the right + + /// 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 /// diff --git a/data/vim/patches/8.1.0074 b/data/vim/patches/8.1.0074 new file mode 100644 index 000000000..c2d37d77d --- /dev/null +++ b/data/vim/patches/8.1.0074 @@ -0,0 +1,54 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0074 +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.0074 (after 8.1.0073) +Problem: Crash when running quickfix tests. +Solution: Do not alloc a new location list when checking for the reference + to be still valid. +Files: src/quickfix.c + + +*** ../vim-8.1.0073/src/quickfix.c 2018-06-18 20:52:09.553050181 +0200 +--- src/quickfix.c 2018-06-18 21:48:30.652450833 +0200 +*************** +*** 6350,6356 **** + curbuf->b_fname, TRUE, curbuf); + if (res > 0 && (eap->cmdidx == CMD_cexpr + || eap->cmdidx == CMD_lexpr) +! && qi == ll_get_or_alloc_list(curwin)) + // Jump to the first error if autocmds didn't free the list. + qf_jump(qi, 0, 0, eap->forceit); + } +--- 6350,6356 ---- + curbuf->b_fname, TRUE, curbuf); + if (res > 0 && (eap->cmdidx == CMD_cexpr + || eap->cmdidx == CMD_lexpr) +! && qi == GET_LOC_LIST(curwin)) + // Jump to the first error if autocmds didn't free the list. + qf_jump(qi, 0, 0, eap->forceit); + } +*** ../vim-8.1.0073/src/version.c 2018-06-18 20:52:09.553050181 +0200 +--- src/version.c 2018-06-18 21:53:12.362887962 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 74, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +75. You start wondering whether you could actually upgrade your brain + with a Pentium Pro microprocessor 80. The upgrade works just fine. + + /// 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 /// diff --git a/data/vim/patches/8.1.0075 b/data/vim/patches/8.1.0075 new file mode 100644 index 000000000..55f541a82 --- /dev/null +++ b/data/vim/patches/8.1.0075 @@ -0,0 +1,45 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0075 +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.0075 +Problem: No Vim logo in README file. +Solution: Add one. (Ãrni Dagur, closes #3024) +Files: README.md + + +*** ../vim-8.1.0074/README.md 2018-05-17 13:35:11.000000000 +0200 +--- README.md 2018-06-18 21:58:04.861300010 +0200 +*************** +*** 1,5 **** +--- 1,7 ---- + `README.md` for version 8.1 of Vim: Vi IMproved. + ++ ![Vim Logo](https://github.com/vim/vim/blob/master/runtime/vimlogo.gif) ++ + [![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim) + [![Coverage Status](https://codecov.io/gh/vim/vim/coverage.svg?branch=master)](https://codecov.io/gh/vim/vim?branch=master) + [![Coverage Status](https://coveralls.io/repos/vim/vim/badge.svg?branch=master&service=github)](https://coveralls.io/github/vim/vim?branch=master) +*** ../vim-8.1.0074/src/version.c 2018-06-18 21:53:23.514826893 +0200 +--- src/version.c 2018-06-18 21:59:37.524801670 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 75, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +76. Your ISP regards you as a business partner rather than as a customer. + + /// 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 /// diff --git a/data/vim/patches/8.1.0076 b/data/vim/patches/8.1.0076 new file mode 100644 index 000000000..a7bcdade0 --- /dev/null +++ b/data/vim/patches/8.1.0076 @@ -0,0 +1,63 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0076 +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.0076 +Problem: Command getting cleared with CTRL-W : in a terminal window. (Jason + Franklin) +Solution: Call redraw_after_callback() when editing the command line. +Files: src/terminal.c + + +*** ../vim-8.1.0075/src/terminal.c 2018-06-17 22:19:07.263202987 +0200 +--- src/terminal.c 2018-06-18 22:11:07.069048292 +0200 +*************** +*** 973,983 **** + * contents, thus no screen update is needed. */ + if (!term->tl_normal_mode) + { +! /* TODO: only update once in a while. */ + ch_log(term->tl_job->jv_channel, "updating screen"); +! if (buffer == curbuf) + { +! update_screen(0); + /* update_screen() can be slow, check the terminal wasn't closed + * already */ + if (buffer == curbuf && curbuf->b_term != NULL) +--- 973,985 ---- + * contents, thus no screen update is needed. */ + if (!term->tl_normal_mode) + { +! // Don't use update_screen() when editing the command line, it gets +! // cleared. +! // TODO: only update once in a while. + ch_log(term->tl_job->jv_channel, "updating screen"); +! if (buffer == curbuf && (State & CMDLINE) == 0) + { +! update_screen(VALID_NO_UPDATE); + /* update_screen() can be slow, check the terminal wasn't closed + * already */ + if (buffer == curbuf && curbuf->b_term != NULL) +*** ../vim-8.1.0075/src/version.c 2018-06-18 22:00:18.844580003 +0200 +--- src/version.c 2018-06-18 22:15:09.191722898 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 76, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +78. You find yourself dialing IP numbers on the phone. + + /// 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 /// diff --git a/data/vim/patches/8.1.0077 b/data/vim/patches/8.1.0077 new file mode 100644 index 000000000..cbf51e709 --- /dev/null +++ b/data/vim/patches/8.1.0077 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0077 +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.0077 +Problem: Header of README file is not nice. +Solution: Move text to the bottom. +Files: README.md + + +*** ../vim-8.1.0076/README.md 2018-06-18 22:00:18.844580003 +0200 +--- README.md 2018-06-18 22:29:22.055138356 +0200 +*************** +*** 1,5 **** +- `README.md` for version 8.1 of Vim: Vi IMproved. +- + ![Vim Logo](https://github.com/vim/vim/blob/master/runtime/vimlogo.gif) + + [![Build Status](https://travis-ci.org/vim/vim.svg?branch=master)](https://travis-ci.org/vim/vim) +--- 1,3 ---- +*************** +*** 139,141 **** +--- 137,142 ---- + + Send any other comments, patches, flowers and suggestions to: + Bram Moolenaar <Bram@vim.org> ++ ++ ++ This is `README.md` for version 8.1 of Vim: Vi IMproved. +*** ../vim-8.1.0076/src/version.c 2018-06-18 22:15:46.255521457 +0200 +--- src/version.c 2018-06-18 22:30:38.882728350 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 77, + /**/ + +-- +If bankers can count, how come they have eight windows and +only four tellers? + + /// 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 /// diff --git a/data/vim/patches/8.1.0078 b/data/vim/patches/8.1.0078 new file mode 100644 index 000000000..a191dd0d4 --- /dev/null +++ b/data/vim/patches/8.1.0078 @@ -0,0 +1,140 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0078 +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.0078 +Problem: "..." used inconsistently in messages. +Solution: Drop the space before " ...". +Files: src/spellfile.c, src/regexp_nfa.c + + +*** ../vim-8.1.0077/src/spellfile.c 2018-04-08 12:52:47.000000000 +0200 +--- src/spellfile.c 2018-06-19 14:17:05.329080012 +0200 +*************** +*** 2241,2247 **** + return NULL; + } + +! vim_snprintf((char *)IObuff, IOSIZE, _("Reading affix file %s ..."), fname); + spell_message(spin, IObuff); + + /* Only do REP lines when not done in another .aff file already. */ +--- 2241,2247 ---- + return NULL; + } + +! vim_snprintf((char *)IObuff, IOSIZE, _("Reading affix file %s..."), fname); + spell_message(spin, IObuff); + + /* Only do REP lines when not done in another .aff file already. */ +*************** +*** 3569,3575 **** + hash_init(&ht); + + vim_snprintf((char *)IObuff, IOSIZE, +! _("Reading dictionary file %s ..."), fname); + spell_message(spin, IObuff); + + /* start with a message for the first line */ +--- 3569,3575 ---- + hash_init(&ht); + + vim_snprintf((char *)IObuff, IOSIZE, +! _("Reading dictionary file %s..."), fname); + spell_message(spin, IObuff); + + /* start with a message for the first line */ +*************** +*** 4149,4155 **** + return FAIL; + } + +! vim_snprintf((char *)IObuff, IOSIZE, _("Reading word file %s ..."), fname); + spell_message(spin, IObuff); + + /* +--- 4149,4155 ---- + return FAIL; + } + +! vim_snprintf((char *)IObuff, IOSIZE, _("Reading word file %s..."), fname); + spell_message(spin, IObuff); + + /* +*************** +*** 5865,5871 **** + } + + vim_snprintf((char *)IObuff, IOSIZE, +! _("Writing suggestion file %s ..."), fname); + spell_message(spin, IObuff); + + /* +--- 5865,5871 ---- + } + + vim_snprintf((char *)IObuff, IOSIZE, +! _("Writing suggestion file %s..."), fname); + spell_message(spin, IObuff); + + /* +*************** +*** 6150,6156 **** + * Write the info in the spell file. + */ + vim_snprintf((char *)IObuff, IOSIZE, +! _("Writing spell file %s ..."), wfname); + spell_message(&spin, IObuff); + + error = write_vim_spell(&spin, wfname) == FAIL; +--- 6150,6156 ---- + * Write the info in the spell file. + */ + vim_snprintf((char *)IObuff, IOSIZE, +! _("Writing spell file %s..."), wfname); + spell_message(&spin, IObuff); + + error = write_vim_spell(&spin, wfname) == FAIL; +*** ../vim-8.1.0077/src/regexp_nfa.c 2018-02-10 18:34:41.000000000 +0100 +--- src/regexp_nfa.c 2018-06-19 14:20:14.816048075 +0200 +*************** +*** 5270,5276 **** + } + else + { +! EMSG(_("Could not open temporary log file for writing, displaying on stderr ... ")); + log_fd = stderr; + } + #endif +--- 5270,5276 ---- + } + else + { +! EMSG(_("Could not open temporary log file for writing, displaying on stderr... ")); + log_fd = stderr; + } + #endif +*** ../vim-8.1.0077/src/version.c 2018-06-18 22:31:07.858573774 +0200 +--- src/version.c 2018-06-19 14:09:26.899529941 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 78, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +85. Choice between paying Compuserve bill and paying for kids education + is a no brainer -- although a bit painful for your kids. + + /// 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 /// diff --git a/data/vim/patches/8.1.0079 b/data/vim/patches/8.1.0079 new file mode 100644 index 000000000..6d3691524 --- /dev/null +++ b/data/vim/patches/8.1.0079 @@ -0,0 +1,69 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0079 +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.0079 +Problem: Superfluous space in messages. +Solution: Remove the spaces. (closes #3030) +Files: src/gui_w32.c + + +*** ../vim-8.1.0078/src/gui_w32.c 2018-05-17 13:57:00.000000000 +0200 +--- src/gui_w32.c 2018-06-19 14:38:12.006094737 +0200 +*************** +*** 2821,2827 **** + } + + set_window_title(s_findrep_hwnd, +! _("Find string (use '\\\\' to find a '\\')")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = TRUE; +--- 2821,2827 ---- + } + + set_window_title(s_findrep_hwnd, +! _("Find string (use '\\\\' to find a '\\')")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = TRUE; +*************** +*** 2856,2862 **** + } + + set_window_title(s_findrep_hwnd, +! _("Find & Replace (use '\\\\' to find a '\\')")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = FALSE; +--- 2856,2862 ---- + } + + set_window_title(s_findrep_hwnd, +! _("Find & Replace (use '\\\\' to find a '\\')")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = FALSE; +*** ../vim-8.1.0078/src/version.c 2018-06-19 14:23:50.302866911 +0200 +--- src/version.c 2018-06-19 14:38:54.921853595 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 79, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +86. E-mail Deficiency Depression (EDD) forces you to e-mail yourself. + + /// 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 /// diff --git a/data/vim/patches/8.1.0080 b/data/vim/patches/8.1.0080 new file mode 100644 index 000000000..03dba7e9f --- /dev/null +++ b/data/vim/patches/8.1.0080 @@ -0,0 +1,258 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0080 +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.0080 +Problem: Can't see the breakpoint number in the terminal debugger. +Solution: Use the breakpoint number for the sign. (Christian Brabandt) +Files: runtime/doc/terminal.txt, + runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0079/runtime/doc/terminal.txt 2018-06-17 22:19:07.267202961 +0200 +--- runtime/doc/terminal.txt 2018-06-19 16:55:43.126412132 +0200 +*************** +*** 19,26 **** + Resizing |terminal-resizing| + Terminal Modes |Terminal-mode| + Cursor style |terminal-cursor-style| +- Special keys |terminal-special-keys| + Session |terminal-session| + Unix |terminal-unix| + MS-Windows |terminal-ms-windows| + 2. Terminal communication |terminal-communication| +--- 19,26 ---- + Resizing |terminal-resizing| + Terminal Modes |Terminal-mode| + Cursor style |terminal-cursor-style| + Session |terminal-session| ++ Special keys |terminal-special-keys| + Unix |terminal-unix| + MS-Windows |terminal-ms-windows| + 2. Terminal communication |terminal-communication| +*************** +*** 116,124 **** + + < *options-in-terminal* + After opening the terminal window and setting 'buftype' to "terminal" the +! BufWinEnter autocommand event is triggered. This makes it possible to set + options specifically for the window and buffer. Example: > +! au BufWinEnter * if &buftype == 'terminal' | setlocal bufhidden=hide | endif + + Mouse events (click and drag) are passed to the terminal. Mouse move events + are only passed when Vim itself is receiving them. For a terminal that is +--- 116,127 ---- + + < *options-in-terminal* + After opening the terminal window and setting 'buftype' to "terminal" the +! TerminalOpen autocommand event is triggered. This makes it possible to set + options specifically for the window and buffer. Example: > +! au TerminalOpen * if &buftype == 'terminal' | setlocal bufhidden=hide | endif +! The <abuf> is set to the terminal buffer, but if there is no window (hidden +! terminal) then setting options will happen in the wrong buffer, therefore the +! check for &buftype in the example. + + Mouse events (click and drag) are passed to the terminal. Mouse move events + are only passed when Vim itself is receiving them. For a terminal that is +*************** +*** 449,455 **** + of the terminal and {argument}, the decoded JSON argument. + The function name must start with "Tapi_" to avoid + accidentally calling a function not meant to be used for the +! terminal API + The user function should sanity check the argument. + The function can use |term_sendkeys()| to send back a reply. + Example in JSON: > +--- 452,458 ---- + of the terminal and {argument}, the decoded JSON argument. + The function name must start with "Tapi_" to avoid + accidentally calling a function not meant to be used for the +! terminal API. + The user function should sanity check the argument. + The function can use |term_sendkeys()| to send back a reply. + Example in JSON: > +*************** +*** 702,712 **** + Vim will start running in the program window. Put focus there and type: > + :help gui + Gdb will run into the ex_help breakpoint. The source window now shows the +! ex_cmds.c file. A ">>" marker will appear where the breakpoint was set. The +! line where the debugger stopped is highlighted. You can now step through the +! program. Let's use the mouse: click on the "Next" button in the window +! toolbar. You will see the highlighting move as the debugger executes a line +! of source code. + + Click "Next" a few times until the for loop is highlighted. Put the cursor on + the end of "eap->arg", then click "Eval" in the toolbar. You will see this +--- 705,715 ---- + Vim will start running in the program window. Put focus there and type: > + :help gui + Gdb will run into the ex_help breakpoint. The source window now shows the +! ex_cmds.c file. A red "1 " marker will appear in the signcolumn where the +! breakpoint was set. The line where the debugger stopped is highlighted. You +! can now step through the program. Let's use the mouse: click on the "Next" +! button in the window toolbar. You will see the highlighting move as the +! debugger executes a line of source code. + + Click "Next" a few times until the for loop is highlighted. Put the cursor on + the end of "eap->arg", then click "Eval" in the toolbar. You will see this +*************** +*** 785,790 **** +--- 788,800 ---- + happens if the buffer in the source code window has been modified and can't be + abandoned. + ++ Gdb gives each breakpoint a number. In Vim the number shows up in the sign ++ column, with a red background. You can use these gdb commands: ++ - info break list breakpoints ++ - delete N delete breakpoint N ++ You can also use the `:Clear` command if the cursor is in the line with the ++ breakpoint, or use the "Clear breakpoint" right-click menu entry. ++ + + Inspecting variables ~ + *termdebug-variables* *:Evaluate* +*************** +*** 828,833 **** +--- 838,850 ---- + gdb. The buffer name is "gdb communication". Do not delete this buffer, it + will break the debugger. + ++ Gdb has some weird behavior, the plugin does its best to work around that. ++ For example, after typing "continue" in the gdb window a CTRL-C can be used to ++ interrupt the running program. But after using the MI command ++ "-exec-continue" pressing CTRL-C does not interrupt. Therefore you will see ++ "continue" being used for the `:Continue` command, instead of using the ++ communication channel. ++ + + Customizing ~ + +*************** +*** 885,891 **** + let g:termdebug_wide = 163 + This will set &columns to 163 when :Termdebug is used. The value is restored + when quitting the debugger. +! If g:termdebug_wide is set and &Columns is already larger than + g:termdebug_wide then a vertical split will be used without changing &columns. + Set it to 1 to get a vertical split without every changing &columns (useful + for when the terminal can't be resized by Vim). +--- 902,908 ---- + let g:termdebug_wide = 163 + This will set &columns to 163 when :Termdebug is used. The value is restored + when quitting the debugger. +! If g:termdebug_wide is set and &columns is already larger than + g:termdebug_wide then a vertical split will be used without changing &columns. + Set it to 1 to get a vertical split without every changing &columns (useful + for when the terminal can't be resized by Vim). +*** ../vim-8.1.0079/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-17 21:34:08.277873656 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 16:59:18.185759005 +0200 +*************** +*** 67,73 **** + endif + + let s:pc_id = 12 +! let s:break_id = 13 + let s:stopped = 1 + + if &background == 'light' +--- 67,73 ---- + endif + + let s:pc_id = 12 +! let s:break_id = 13 " breakpoint number is added to this + let s:stopped = 1 + + if &background == 'light' +*************** +*** 325,334 **** + " There can be only one. + sign define debugPC linehl=debugPC + +- " Sign used to indicate a breakpoint. +- " Can be used multiple times. +- sign define debugBreakpoint text=>> texthl=debugBreakpoint +- + " Install debugger commands in the text window. + call win_gotoid(s:sourcewin) + call s:InstallCommands() +--- 325,330 ---- +*************** +*** 345,350 **** +--- 341,347 ---- + endif + endif + ++ " Contains breakpoints that have been placed, key is the number. + let s:breakpoints = {} + + augroup TermDebug +*************** +*** 813,818 **** +--- 810,825 ---- + call win_gotoid(wid) + endfunc + ++ func s:CreateBreakpoint(nr) ++ if !exists("s:BreakpointSigns") ++ let s:BreakpointSigns = [] ++ endif ++ if index(s:BreakpointSigns, a:nr) == -1 ++ call add(s:BreakpointSigns, a:nr) ++ exe "sign define debugBreakpoint". a:nr . " text=" . a:nr . " texthl=debugBreakpoint" ++ endif ++ endfunc ++ + " Handle setting a breakpoint + " Will update the sign that shows the breakpoint + func s:HandleNewBreakpoint(msg) +*************** +*** 820,825 **** +--- 827,833 ---- + if nr == 0 + return + endif ++ call s:CreateBreakpoint(nr) + + if has_key(s:breakpoints, nr) + let entry = s:breakpoints[nr] +*************** +*** 839,845 **** + endfunc + + func s:PlaceSign(nr, entry) +! exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint file=' . a:entry['fname'] + let a:entry['placed'] = 1 + endfunc + +--- 847,853 ---- + endfunc + + func s:PlaceSign(nr, entry) +! exe 'sign place ' . (s:break_id + a:nr) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . a:nr . ' file=' . a:entry['fname'] + let a:entry['placed'] = 1 + endfunc + +*** ../vim-8.1.0079/src/version.c 2018-06-19 14:45:33.583620880 +0200 +--- src/version.c 2018-06-19 16:57:00.654200256 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 80, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +90. Instead of calling you to dinner, your spouse sends e-mail. + + /// 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 /// diff --git a/data/vim/patches/8.1.0081 b/data/vim/patches/8.1.0081 new file mode 100644 index 000000000..f943be461 --- /dev/null +++ b/data/vim/patches/8.1.0081 @@ -0,0 +1,83 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0081 +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.0081 +Problem: The terminal debugger doesn't adjust to changed 'background'. +Solution: Add an OptionSet autocommand. (Christian Brabandt) +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0080/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 16:59:31.333713053 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 17:24:00.106825205 +0200 +*************** +*** 70,80 **** + let s:break_id = 13 " breakpoint number is added to this + let s:stopped = 1 + +! if &background == 'light' +! hi default debugPC term=reverse ctermbg=lightblue guibg=lightblue +! else +! hi default debugPC term=reverse ctermbg=darkblue guibg=darkblue +! endif + hi default debugBreakpoint term=reverse ctermbg=red guibg=red + + func s:StartDebug(bang, ...) +--- 70,85 ---- + let s:break_id = 13 " breakpoint number is added to this + let s:stopped = 1 + +! func s:Highlight(init, old, new) +! let default = a:init ? 'default ' : '' +! if a:new ==# 'light' && a:old !=# 'light' +! exe "hi " . default . "debugPC term=reverse ctermbg=lightblue guibg=lightblue" +! elseif a:new ==# 'dark' && a:old !=# 'dark' +! exe "hi " . default . "debugPC term=reverse ctermbg=darkblue guibg=darkblue" +! endif +! endfunc +! +! call s:Highlight(1, '', &background) + hi default debugBreakpoint term=reverse ctermbg=red guibg=red + + func s:StartDebug(bang, ...) +*************** +*** 347,352 **** +--- 352,358 ---- + augroup TermDebug + au BufRead * call s:BufRead() + au BufUnload * call s:BufUnloaded() ++ au OptionSet background call s:Highlight(0, v:option_old, v:option_new) + augroup END + + " Run the command if the bang attribute was given and got to the debug +*************** +*** 887,890 **** + endif + endfor + endfunc +- +--- 893,895 ---- +*** ../vim-8.1.0080/src/version.c 2018-06-19 16:59:31.333713053 +0200 +--- src/version.c 2018-06-19 17:27:18.613687664 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 81, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +91. It's Saturday afternoon in the middle of May and you + are on computer. + + /// 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 /// diff --git a/data/vim/patches/8.1.0082 b/data/vim/patches/8.1.0082 new file mode 100644 index 000000000..57ff29d5c --- /dev/null +++ b/data/vim/patches/8.1.0082 @@ -0,0 +1,129 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0082 +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.0082 +Problem: In terminal window, typing : at more prompt, inserts ':' instead + of starting another Ex command. +Solution: Add skip_term_loop and set it when putting ':' in the typeahead + buffer. +Files: src/globals.h, src/main.c, src/message.c + + +*** ../vim-8.1.0081/src/globals.h 2018-05-22 20:35:13.558009273 +0200 +--- src/globals.h 2018-06-19 17:38:48.904146780 +0200 +*************** +*** 371,376 **** +--- 371,381 ---- + # endif + # endif + #endif ++ #ifdef FEAT_TERMINAL ++ // When TRUE skip calling terminal_loop() once. Used when ++ // typing ':' at the more prompt. ++ EXTERN int skip_term_loop INIT(= FALSE); ++ #endif + #ifdef FEAT_GUI + EXTERN char_u *use_gvimrc INIT(= NULL); /* "-U" cmdline argument */ + #endif +*** ../vim-8.1.0081/src/main.c 2018-05-05 15:04:42.000000000 +0200 +--- src/main.c 2018-06-19 17:34:55.649828513 +0200 +*************** +*** 1339,1345 **** + #ifdef FEAT_TERMINAL + if (term_use_loop() + && oa.op_type == OP_NOP && oa.regname == NUL +! && !VIsual_active) + { + /* If terminal_loop() returns OK we got a key that is handled + * in Normal model. With FAIL we first need to position the +--- 1339,1346 ---- + #ifdef FEAT_TERMINAL + if (term_use_loop() + && oa.op_type == OP_NOP && oa.regname == NUL +! && !VIsual_active +! && !skip_term_loop) + { + /* If terminal_loop() returns OK we got a key that is handled + * in Normal model. With FAIL we first need to position the +*************** +*** 1349,1355 **** +--- 1350,1361 ---- + } + else + #endif ++ { ++ #ifdef FEAT_TERMINAL ++ skip_term_loop = FALSE; ++ #endif + normal_cmd(&oa, TRUE); ++ } + } + } + } +*************** +*** 3320,3326 **** + main_msg(_("-dev <device>\t\tUse <device> for I/O")); + #endif + #ifdef FEAT_ARABIC +! main_msg(_("-A\t\t\tstart in Arabic mode")); + #endif + #ifdef FEAT_RIGHTLEFT + main_msg(_("-H\t\t\tStart in Hebrew mode")); +--- 3326,3332 ---- + main_msg(_("-dev <device>\t\tUse <device> for I/O")); + #endif + #ifdef FEAT_ARABIC +! main_msg(_("-A\t\t\tStart in Arabic mode")); + #endif + #ifdef FEAT_RIGHTLEFT + main_msg(_("-H\t\t\tStart in Hebrew mode")); +*** ../vim-8.1.0081/src/message.c 2018-05-22 20:35:13.562009272 +0200 +--- src/message.c 2018-06-19 17:39:40.111793123 +0200 +*************** +*** 1219,1224 **** +--- 1219,1227 ---- + cmdline_row = msg_row; + skip_redraw = TRUE; /* skip redraw once */ + do_redraw = FALSE; ++ #ifdef FEAT_TERMINAL ++ skip_term_loop = TRUE; ++ #endif + } + + /* +*************** +*** 2827,2832 **** +--- 2830,2838 ---- + /* Since got_int is set all typeahead will be flushed, but we + * want to keep this ':', remember that in a special way. */ + typeahead_noflush(':'); ++ #ifdef FEAT_TERMINAL ++ skip_term_loop = TRUE; ++ #endif + cmdline_row = Rows - 1; /* put ':' on this line */ + skip_redraw = TRUE; /* skip redraw once */ + need_wait_return = FALSE; /* don't wait in main() */ +*** ../vim-8.1.0081/src/version.c 2018-06-19 17:27:50.085385875 +0200 +--- src/version.c 2018-06-19 17:47:54.412556057 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 82, + /**/ + +-- +From "know your smileys": + :^[/ mean-smiley-with-cigarette + + /// 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 /// diff --git a/data/vim/patches/8.1.0083 b/data/vim/patches/8.1.0083 new file mode 100644 index 000000000..ec805d366 --- /dev/null +++ b/data/vim/patches/8.1.0083 @@ -0,0 +1,196 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0083 +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.0083 +Problem: "is" and "as" have trouble with quoted punctuation. +Solution: Check for punctuation before a quote. (Jason Franklin) +Files: src/search.c, src/testdir/test_textobjects.vim + + +*** ../vim-8.1.0082/src/search.c 2018-05-22 17:50:38.679980719 +0200 +--- src/search.c 2018-06-19 18:19:14.194486159 +0200 +*************** +*** 2707,2716 **** + } + + /* +! * findsent(dir, count) - Find the start of the next sentence in direction +! * "dir" Sentences are supposed to end in ".", "!" or "?" followed by white +! * space or a line break. Also stop at an empty line. +! * Return OK if the next sentence was found. + */ + int + findsent(int dir, long count) +--- 2707,2717 ---- + } + + /* +! * Find the start of the next sentence, searching in the direction specified +! * by the "dir" argument. The cursor is positioned on the start of the next +! * sentence when found. If the next sentence is found, return OK. Return FAIL +! * otherwise. See ":h sentence" for the precise definition of a "sentence" +! * text object. + */ + int + findsent(int dir, long count) +*************** +*** 2758,2783 **** + else if (dir == BACKWARD) + decl(&pos); + +! /* go back to the previous non-blank char */ + found_dot = FALSE; +! while ((c = gchar_pos(&pos)) == ' ' || c == '\t' || +! (dir == BACKWARD && vim_strchr((char_u *)".!?)]\"'", c) != NULL)) + { +! if (vim_strchr((char_u *)".!?", c) != NULL) +! { +! /* Only skip over a '.', '!' and '?' once. */ +! if (found_dot) +! break; + found_dot = TRUE; +! } +! if (decl(&pos) == -1) + break; +! /* when going forward: Stop in front of empty line */ +! if (LINEEMPTY(pos.lnum) && dir == FORWARD) +! { +! incl(&pos); +! goto found; +! } + } + + /* remember the line where the search started */ +--- 2759,2783 ---- + else if (dir == BACKWARD) + decl(&pos); + +! // go back to the previous non-white non-punctuation character + found_dot = FALSE; +! while (c = gchar_pos(&pos), VIM_ISWHITE(c) +! || vim_strchr((char_u *)".!?)]\"'", c) != NULL) + { +! tpos = pos; +! if (decl(&tpos) == -1 || (LINEEMPTY(tpos.lnum) && dir == FORWARD)) +! break; +! +! if (found_dot) +! break; +! if (vim_strchr((char_u *) ".!?", c) != NULL) + found_dot = TRUE; +! +! if (vim_strchr((char_u *) ")]\"'", c) != NULL +! && vim_strchr((char_u *) ".!?)]\"'", gchar_pos(&tpos)) == NULL) + break; +! +! decl(&pos); + } + + /* remember the line where the search started */ +*** ../vim-8.1.0082/src/testdir/test_textobjects.vim 2018-02-09 18:06:35.000000000 +0100 +--- src/testdir/test_textobjects.vim 2018-06-19 18:16:20.911420342 +0200 +*************** +*** 165,167 **** +--- 165,242 ---- + norm it + q! + endfunc ++ ++ func Test_sentence() ++ enew! ++ call setline(1, 'A sentence. A sentence? A sentence!') ++ ++ normal yis ++ call assert_equal('A sentence.', @") ++ normal yas ++ call assert_equal('A sentence. ', @") ++ ++ normal ) ++ ++ normal yis ++ call assert_equal('A sentence?', @") ++ normal yas ++ call assert_equal('A sentence? ', @") ++ ++ normal ) ++ ++ normal yis ++ call assert_equal('A sentence!', @") ++ normal yas ++ call assert_equal(' A sentence!', @") ++ ++ normal 0 ++ normal 2yis ++ call assert_equal('A sentence. ', @") ++ normal 3yis ++ call assert_equal('A sentence. A sentence?', @") ++ normal 2yas ++ call assert_equal('A sentence. A sentence? ', @") ++ ++ %delete _ ++ endfunc ++ ++ func Test_sentence_with_quotes() ++ enew! ++ call setline(1, 'A "sentence." A sentence.') ++ ++ normal yis ++ call assert_equal('A "sentence."', @") ++ normal yas ++ call assert_equal('A "sentence." ', @") ++ ++ normal ) ++ ++ normal yis ++ call assert_equal('A sentence.', @") ++ normal yas ++ call assert_equal(' A sentence.', @") ++ ++ %delete _ ++ endfunc ++ ++ func! Test_sentence_with_cursor_on_delimiter() ++ enew! ++ call setline(1, "A '([sentence.])' A sentence.") ++ ++ normal! 15|yis ++ call assert_equal("A '([sentence.])'", @") ++ normal! 15|yas ++ call assert_equal("A '([sentence.])' ", @") ++ ++ normal! 16|yis ++ call assert_equal("A '([sentence.])'", @") ++ normal! 16|yas ++ call assert_equal("A '([sentence.])' ", @") ++ ++ normal! 17|yis ++ call assert_equal("A '([sentence.])'", @") ++ normal! 17|yas ++ call assert_equal("A '([sentence.])' ", @") ++ ++ %delete _ ++ endfunc +*** ../vim-8.1.0082/src/version.c 2018-06-19 17:49:20.300015350 +0200 +--- src/version.c 2018-06-19 18:27:12.611837877 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 83, + /**/ + +-- +From "know your smileys": + y:-) Bad toupee + + /// 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 /// diff --git a/data/vim/patches/8.1.0084 b/data/vim/patches/8.1.0084 new file mode 100644 index 000000000..9623dff2d --- /dev/null +++ b/data/vim/patches/8.1.0084 @@ -0,0 +1,161 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0084 +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.0084 +Problem: User name completion does not work on MS-Windows. +Solution: Use NetUserEnum() to get user names. (Yasuhiro Matsumoto) +Files: src/Make_ivc.mak, src/Make_cyg_ming.mak, src/Make_mvc.mak, + src/misc1.c + + +*** ../vim-8.1.0083/src/Make_ivc.mak 2016-07-19 13:51:41.000000000 +0200 +--- src/Make_ivc.mak 2018-06-19 18:37:43.572545354 +0200 +*************** +*** 88,94 **** + CPP_PROJ= /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c + # ADD CPP /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c + +! LINK32_FLAGS= oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib + # ADD LINK32 oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib + # SUBTRACT LINK32 /incremental:yes + +--- 88,94 ---- + CPP_PROJ= /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c + # ADD CPP /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c + +! LINK32_FLAGS= oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib netapi32.lib uuid.lib /nologo /machine:I386 /nodefaultlib + # ADD LINK32 oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib + # SUBTRACT LINK32 /incremental:yes + +*** ../vim-8.1.0083/src/Make_cyg_ming.mak 2018-04-21 19:06:58.000000000 +0200 +--- src/Make_cyg_ming.mak 2018-06-19 18:38:21.464387436 +0200 +*************** +*** 662,668 **** + CFLAGS += -s + endif + +! LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion + GUIOBJ = $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o + CUIOBJ = $(OUTDIR)/iscygpty.o + OBJ = \ +--- 662,668 ---- + CFLAGS += -s + endif + +! LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion + GUIOBJ = $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o + CUIOBJ = $(OUTDIR)/iscygpty.o + OBJ = \ +*** ../vim-8.1.0083/src/Make_mvc.mak 2018-03-26 20:41:04.000000000 +0200 +--- src/Make_mvc.mak 2018-06-19 18:40:11.891907875 +0200 +*************** +*** 489,498 **** + + # need advapi32.lib for GetUserName() + # need shell32.lib for ExtractIcon() + # gdi32.lib and comdlg32.lib for printing support + # ole32.lib and uuid.lib are needed for FEAT_SHORTCUT + CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \ +! comdlg32.lib ole32.lib uuid.lib /machine:$(CPU) + !if "$(DELAYLOAD)" == "yes" + CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib + !endif +--- 489,499 ---- + + # need advapi32.lib for GetUserName() + # need shell32.lib for ExtractIcon() ++ # need netapi32.lib for NetUserEnum() + # gdi32.lib and comdlg32.lib for printing support + # ole32.lib and uuid.lib are needed for FEAT_SHORTCUT + CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \ +! comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:$(CPU) + !if "$(DELAYLOAD)" == "yes" + CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib + !endif +*************** +*** 801,807 **** + $(OUTDIR)\os_w32exe.obj + GUI_LIB = \ + gdi32.lib version.lib $(IME_LIB) \ +! winspool.lib comctl32.lib advapi32.lib shell32.lib \ + /machine:$(CPU) + !else + SUBSYSTEM = console +--- 802,808 ---- + $(OUTDIR)\os_w32exe.obj + GUI_LIB = \ + gdi32.lib version.lib $(IME_LIB) \ +! winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \ + /machine:$(CPU) + !else + SUBSYSTEM = console +*** ../vim-8.1.0083/src/misc1.c 2018-05-14 22:56:16.000000000 +0200 +--- src/misc1.c 2018-06-19 18:41:51.783452927 +0200 +*************** +*** 14,19 **** +--- 14,23 ---- + #include "vim.h" + #include "version.h" + ++ #if defined(FEAT_CMDL_COMPL) && defined(WIN3264) ++ # include <lm.h> ++ #endif ++ + static char_u *vim_version_dir(char_u *vimdir); + static char_u *remove_tail(char_u *p, char_u *pend, char_u *name); + #if defined(FEAT_CMDL_COMPL) +*************** +*** 4603,4608 **** +--- 4607,4634 ---- + } + endpwent(); + } ++ # elif defined(WIN3264) ++ { ++ char_u* user; ++ DWORD nusers = 0, ntotal = 0, i; ++ PUSER_INFO_0 uinfo; ++ ++ if (NetUserEnum(NULL, 0, 0, (LPBYTE *) &uinfo, MAX_PREFERRED_LENGTH, ++ &nusers, &ntotal, NULL) == NERR_Success) ++ { ++ for (i = 0; i < nusers; i++) ++ { ++ if (ga_grow(&ga_users, 1) == FAIL) ++ break; ++ user = utf16_to_enc(uinfo[i].usri0_name, NULL); ++ if (user == NULL) ++ break; ++ ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user; ++ } ++ ++ NetApiBufferFree(uinfo); ++ } ++ } + # endif + } + +*** ../vim-8.1.0083/src/version.c 2018-06-19 18:27:38.271694008 +0200 +--- src/version.c 2018-06-19 18:56:50.358883504 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 84, + /**/ + +-- +From "know your smileys": + :----} You lie like Pinocchio + + /// 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 /// diff --git a/data/vim/patches/8.1.0085 b/data/vim/patches/8.1.0085 new file mode 100644 index 000000000..44d289928 --- /dev/null +++ b/data/vim/patches/8.1.0085 @@ -0,0 +1,97 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0085 +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.0085 +Problem: No test for completing user name and language. +Solution: Add tests. (Dominique Pelle, closes #2978) +Files: src/testdir/test_cmdline.vim + + +*** ../vim-8.1.0084/src/testdir/test_cmdline.vim 2018-05-22 16:58:43.979903077 +0200 +--- src/testdir/test_cmdline.vim 2018-06-19 19:07:14.403515948 +0200 +*************** +*** 1,6 **** + " Tests for editing the command line. + +- + func Test_complete_tab() + call writefile(['testfile'], 'Xtestfile') + call feedkeys(":e Xtest\t\r", "tx") +--- 1,5 ---- +*************** +*** 392,397 **** +--- 391,440 ---- + delcommand Foo + endfunc + ++ func Test_cmdline_complete_user_names() ++ if has('unix') && executable('whoami') ++ let whoami = systemlist('whoami')[0] ++ let first_letter = whoami[0] ++ if len(first_letter) > 0 ++ " Trying completion of :e ~x where x is the first letter of ++ " the user name should complete to at least the user name. ++ call feedkeys(':e ~' . first_letter . "\<c-a>\<c-B>\"\<cr>", 'tx') ++ call assert_match('^"e \~.*\<' . whoami . '\>', @:) ++ endif ++ endif ++ if has('win32') ++ " Just in case: check that the system has an Administrator account. ++ let names = system('net user') ++ if names =~ 'Administrator' ++ " Trying completion of :e ~A should complete to Administrator. ++ call feedkeys(':e ~A' . "\<c-a>\<c-B>\"\<cr>", 'tx') ++ call assert_match('^"e \~Administrator', @:) ++ endif ++ endif ++ endfunc ++ ++ funct Test_cmdline_complete_languages() ++ let lang = substitute(execute('language messages'), '.*"\(.*\)"$', '\1', '') ++ ++ call feedkeys(":language \<c-a>\<c-b>\"\<cr>", 'tx') ++ call assert_match('^"language .*\<ctype\>.*\<messages\>.*\<time\>', @:) ++ ++ if has('unix') ++ " TODO: these tests don't work on Windows. lang appears to be 'C' ++ " but C does not appear in the completion. Why? ++ call assert_match('^"language .*\<' . lang . '\>', @:) ++ ++ call feedkeys(":language messages \<c-a>\<c-b>\"\<cr>", 'tx') ++ call assert_match('^"language .*\<' . lang . '\>', @:) ++ ++ call feedkeys(":language ctype \<c-a>\<c-b>\"\<cr>", 'tx') ++ call assert_match('^"language .*\<' . lang . '\>', @:) ++ ++ call feedkeys(":language time \<c-a>\<c-b>\"\<cr>", 'tx') ++ call assert_match('^"language .*\<' . lang . '\>', @:) ++ endif ++ endfunc ++ + func Test_cmdline_write_alternatefile() + new + call setline('.', ['one', 'two']) +*** ../vim-8.1.0084/src/version.c 2018-06-19 18:58:04.010489820 +0200 +--- src/version.c 2018-06-19 19:07:41.203370203 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 85, + /**/ + +-- +From "know your smileys": +¯\_(ツ)_/¯ Shrug + + /// 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 /// diff --git a/data/vim/patches/8.1.0086 b/data/vim/patches/8.1.0086 new file mode 100644 index 000000000..2186846f6 --- /dev/null +++ b/data/vim/patches/8.1.0086 @@ -0,0 +1,78 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0086 +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.0086 +Problem: No tests for libcall() and libcallnr(). +Solution: Add tests. (Dominique Pelle, closes #2982) +Files: src/testdir/test_functions.vim + + +*** ../vim-8.1.0085/src/testdir/test_functions.vim 2018-05-22 20:35:13.554009274 +0200 +--- src/testdir/test_functions.vim 2018-06-19 19:44:16.868201472 +0200 +*************** +*** 948,950 **** +--- 948,986 ---- + delfunc s:save_reg_stat + unlet s:reg_stat + endfunc ++ ++ func Test_libcall_libcallnr() ++ if !has('libcall') ++ return ++ endif ++ ++ if has('win32') ++ let libc = 'msvcrt.dll' ++ elseif has('mac') ++ let libc = 'libSystem.B.dylib' ++ else ++ " On Unix, libc.so can be in various places. ++ " Interestingly, using an empty string for the 1st argument of libcall ++ " allows to call functions from libc which is not documented. ++ let libc = '' ++ endif ++ ++ if has('win32') ++ call assert_equal($USERPROFILE, libcall(libc, 'getenv', 'USERPROFILE')) ++ else ++ call assert_equal($HOME, libcall(libc, 'getenv', 'HOME')) ++ endif ++ ++ " If function returns NULL, libcall() should return an empty string. ++ call assert_equal('', libcall(libc, 'getenv', 'X_ENV_DOES_NOT_EXIT')) ++ ++ " Test libcallnr() with string and integer argument. ++ call assert_equal(4, libcallnr(libc, 'strlen', 'abcd')) ++ call assert_equal(char2nr('A'), libcallnr(libc, 'toupper', char2nr('a'))) ++ ++ call assert_fails("call libcall(libc, 'Xdoesnotexist_', '')", 'E364:') ++ call assert_fails("call libcallnr(libc, 'Xdoesnotexist_', '')", 'E364:') ++ ++ call assert_fails("call libcall('Xdoesnotexist_', 'getenv', 'HOME')", 'E364:') ++ call assert_fails("call libcallnr('Xdoesnotexist_', 'strlen', 'abcd')", 'E364:') ++ endfunc +*** ../vim-8.1.0085/src/version.c 2018-06-19 19:09:04.870914841 +0200 +--- src/version.c 2018-06-19 19:44:39.776148855 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 86, + /**/ + +-- +From "know your smileys": + ;-0 Can't find shift key + ,-9 Kann Umschalttaste nicht finden + + /// 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 /// diff --git a/data/vim/patches/8.1.0087 b/data/vim/patches/8.1.0087 new file mode 100644 index 000000000..8f6a9c65d --- /dev/null +++ b/data/vim/patches/8.1.0087 @@ -0,0 +1,255 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0087 +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.0087 +Problem: v:shell_error is always zero when using terminal for "!cmd". +Solution: Use "exitval" of terminal-job. (Ozaki Kiichi, closes #2994) +Files: src/os_unix.c, src/os_win32.c, src/proto/terminal.pro, + src/terminal.c, src/testdir/test_terminal.vim + + +*** ../vim-8.1.0086/src/os_unix.c 2018-06-13 20:49:47.444338292 +0200 +--- src/os_unix.c 2018-06-19 19:53:43.794232600 +0200 +*************** +*** 4365,4370 **** +--- 4365,4371 ---- + char_u *tofree2 = NULL; + int retval = -1; + buf_T *buf; ++ job_T *job; + aco_save_T aco; + oparg_T oa; /* operator arguments */ + +*************** +*** 4374,4379 **** +--- 4375,4385 ---- + init_job_options(&opt); + ch_log(NULL, "starting terminal for system command '%s'", cmd); + buf = term_start(NULL, argv, &opt, TERM_START_SYSTEM); ++ if (buf == NULL) ++ goto theend; ++ ++ job = term_getjob(buf->b_term); ++ ++job->jv_refcount; + + /* Find a window to make "buf" curbuf. */ + aucmd_prepbuf(&aco, buf); +*************** +*** 4391,4399 **** + else + normal_cmd(&oa, TRUE); + } +! retval = 0; + ch_log(NULL, "system command finished"); + + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +--- 4397,4407 ---- + else + normal_cmd(&oa, TRUE); + } +! retval = job->jv_exitval; + ch_log(NULL, "system command finished"); + ++ job_unref(job); ++ + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +*** ../vim-8.1.0086/src/os_win32.c 2018-06-12 21:11:08.626548598 +0200 +--- src/os_win32.c 2018-06-19 19:53:43.798232583 +0200 +*************** +*** 4796,4801 **** +--- 4796,4802 ---- + long_u cmdlen; + int retval = -1; + buf_T *buf; ++ job_T *job; + aco_save_T aco; + oparg_T oa; /* operator arguments */ + +*************** +*** 4826,4831 **** +--- 4827,4835 ---- + if (buf == NULL) + return 255; + ++ job = term_getjob(buf->b_term); ++ ++job->jv_refcount; ++ + /* Find a window to make "buf" curbuf. */ + aucmd_prepbuf(&aco, buf); + +*************** +*** 4842,4850 **** + else + normal_cmd(&oa, TRUE); + } +! retval = 0; + ch_log(NULL, "system command finished"); + + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +--- 4846,4856 ---- + else + normal_cmd(&oa, TRUE); + } +! retval = job->jv_exitval; + ch_log(NULL, "system command finished"); + ++ job_unref(job); ++ + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + +*** ../vim-8.1.0086/src/proto/terminal.pro 2018-05-17 13:52:53.000000000 +0200 +--- src/proto/terminal.pro 2018-06-19 19:53:43.798232583 +0200 +*************** +*** 55,59 **** +--- 55,60 ---- + void f_term_start(typval_T *argvars, typval_T *rettv); + void f_term_wait(typval_T *argvars, typval_T *rettv); + void term_send_eof(channel_T *ch); ++ job_T *term_getjob(term_T *term); + int terminal_enabled(void); + /* vim: set ft=c : */ +*** ../vim-8.1.0086/src/terminal.c 2018-06-18 22:15:46.255521457 +0200 +--- src/terminal.c 2018-06-19 19:53:43.798232583 +0200 +*************** +*** 5336,5341 **** +--- 5336,5347 ---- + } + } + ++ job_T * ++ term_getjob(term_T *term) ++ { ++ return term != NULL ? term->tl_job : NULL; ++ } ++ + # if defined(WIN3264) || defined(PROTO) + + /************************************** +*** ../vim-8.1.0086/src/testdir/test_terminal.vim 2018-06-12 18:04:28.038267855 +0200 +--- src/testdir/test_terminal.vim 2018-06-19 19:55:56.917638761 +0200 +*************** +*** 522,550 **** + exe buf . 'bwipe' + endfunc + +- " must be last, we can't go back from GUI to terminal +- func Test_zz_terminal_in_gui() +- if !CanRunGui() +- return +- endif +- +- " Ignore the "failed to create input context" error. +- call test_ignore_error('E285:') +- +- gui -f +- +- call assert_equal(1, winnr('$')) +- let buf = Run_shell_in_terminal({'term_finish': 'close'}) +- call Stop_shell_in_terminal(buf) +- call term_wait(buf) +- +- " closing window wipes out the terminal buffer a with finished job +- call WaitForAssert({-> assert_equal(1, winnr('$'))}) +- call assert_equal("", bufname(buf)) +- +- unlet g:job +- endfunc +- + func Test_terminal_list_args() + let buf = term_start([&shell, &shellcmdflag, 'echo "123"']) + call assert_fails(buf . 'bwipe', 'E517') +--- 522,527 ---- +*************** +*** 1546,1548 **** +--- 1523,1580 ---- + + exe buf . 'bwipe!' + endfunc ++ ++ " must be nearly the last, we can't go back from GUI to terminal ++ func Test_zz1_terminal_in_gui() ++ if !CanRunGui() ++ return ++ endif ++ ++ " Ignore the "failed to create input context" error. ++ call test_ignore_error('E285:') ++ ++ gui -f ++ ++ call assert_equal(1, winnr('$')) ++ let buf = Run_shell_in_terminal({'term_finish': 'close'}) ++ call Stop_shell_in_terminal(buf) ++ call term_wait(buf) ++ ++ " closing window wipes out the terminal buffer a with finished job ++ call WaitForAssert({-> assert_equal(1, winnr('$'))}) ++ call assert_equal("", bufname(buf)) ++ ++ unlet g:job ++ endfunc ++ ++ func Test_zz2_terminal_guioptions_bang() ++ if !has('gui_running') ++ return ++ endif ++ set guioptions+=! ++ ++ let filename = 'Xtestscript' ++ if has('win32') ++ let filename .= '.bat' ++ let prefix = '' ++ let contents = ['@echo off', 'exit %1'] ++ else ++ let filename .= '.sh' ++ let prefix = './' ++ let contents = ['#!/bin/sh', 'exit $1'] ++ endif ++ call writefile(contents, filename) ++ call setfperm(filename, 'rwxrwx---') ++ ++ " Check if v:shell_error is equal to the exit status. ++ let exitval = 0 ++ execute printf(':!%s%s %d', prefix, filename, exitval) ++ call assert_equal(exitval, v:shell_error) ++ ++ let exitval = 9 ++ execute printf(':!%s%s %d', prefix, filename, exitval) ++ call assert_equal(exitval, v:shell_error) ++ ++ set guioptions& ++ call delete(filename) ++ endfunc +*** ../vim-8.1.0086/src/version.c 2018-06-19 19:46:01.703936337 +0200 +--- src/version.c 2018-06-19 19:50:34.551011945 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 87, + /**/ + +-- +From "know your smileys": + :-) Funny + |-) Funny Oriental + (-: Funny Australian + + /// 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 /// diff --git a/data/vim/patches/8.1.0088 b/data/vim/patches/8.1.0088 new file mode 100644 index 000000000..458bfa9fa --- /dev/null +++ b/data/vim/patches/8.1.0088 @@ -0,0 +1,56 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0088 +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.0088 +Problem: Terminal test for stdout and stderr is a bit flaky. +Solution: Wait for both stdout and stderr to have been processed. (Ozaki + Kiichi, closes #2991) +Files: src/testdir/test_terminal.vim + + +*** ../vim-8.1.0087/src/testdir/test_terminal.vim 2018-06-19 19:59:15.248704265 +0200 +--- src/testdir/test_terminal.vim 2018-06-19 20:04:17.711202392 +0200 +*************** +*** 1487,1494 **** + + let outfile = 'Xtermstdout' + let buf = term_start(['./Xechoerrout.sh'], {'out_io': 'file', 'out_name': outfile}) +! call WaitForAssert({-> assert_inrange(1, 2, len(readfile(outfile)))}) +! call assert_equal("this is standard out", readfile(outfile)[0]) + call assert_equal('this is standard error', term_getline(buf, 1)) + + call WaitForAssert({-> assert_equal('dead', job_status(term_getjob(buf)))}) +--- 1487,1495 ---- + + let outfile = 'Xtermstdout' + let buf = term_start(['./Xechoerrout.sh'], {'out_io': 'file', 'out_name': outfile}) +! +! call WaitFor({-> !empty(readfile(outfile)) && !empty(term_getline(buf, 1))}) +! call assert_equal(['this is standard out'], readfile(outfile)) + call assert_equal('this is standard error', term_getline(buf, 1)) + + call WaitForAssert({-> assert_equal('dead', job_status(term_getjob(buf)))}) +*** ../vim-8.1.0087/src/version.c 2018-06-19 19:59:15.248704265 +0200 +--- src/version.c 2018-06-19 20:05:36.722799665 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 88, + /**/ + +-- +From "know your smileys": + :~) A man with a tape recorder up his nose + + /// 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 /// diff --git a/data/vim/patches/8.1.0089 b/data/vim/patches/8.1.0089 new file mode 100644 index 000000000..c993c6945 --- /dev/null +++ b/data/vim/patches/8.1.0089 @@ -0,0 +1,199 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0089 +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.0089 +Problem: error when ending the terminal debugger +Solution: Fix deleting defined signs for breakpoints. Make the debugger + work better on MS-Windows. +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0088/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 17:27:50.085385875 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 22:33:23.557472678 +0200 +*************** +*** 408,414 **** + + " Drop the gdb prompt, we have our own. + " Drop status and echo'd commands. +! if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&' || a:text[0] == '=' + return + endif + if a:text =~ '^^error,msg=' +--- 408,414 ---- + + " Drop the gdb prompt, we have our own. + " Drop status and echo'd commands. +! if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&' + return + endif + if a:text =~ '^^error,msg=' +*************** +*** 439,445 **** + " to the next ", unescaping characters. + func s:DecodeMessage(quotedText) + if a:quotedText[0] != '"' +! echoerr 'DecodeMessage(): missing quote' + return + endif + let result = '' +--- 439,445 ---- + " to the next ", unescaping characters. + func s:DecodeMessage(quotedText) + if a:quotedText[0] != '"' +! echoerr 'DecodeMessage(): missing quote in ' . a:quotedText + return + endif + let result = '' +*************** +*** 459,464 **** +--- 459,474 ---- + return result + endfunc + ++ " Extract the "name" value from a gdb message with fullname="name". ++ func s:GetFullname(msg) ++ let name = s:DecodeMessage(substitute(a:msg, '.*fullname=', '', '')) ++ if has('win32') && name =~ ':\\\\' ++ " sometimes the name arrives double-escaped ++ let name = substitute(name, '\\\\', '\\', 'g') ++ endif ++ return name ++ endfunc ++ + func s:EndTermDebug(job, status) + exe 'bwipe! ' . s:commbuf + unlet s:gdbwin +*************** +*** 639,647 **** + for key in keys(s:breakpoints) + exe 'sign unplace ' . (s:break_id + key) + endfor +- sign undefine debugPC +- sign undefine debugBreakpoint + unlet s:breakpoints + endfunc + + " :Break - Set a breakpoint at the cursor position. +--- 649,661 ---- + for key in keys(s:breakpoints) + exe 'sign unplace ' . (s:break_id + key) + endfor + unlet s:breakpoints ++ ++ sign undefine debugPC ++ for val in s:BreakpointSigns ++ exe "sign undefine debugBreakpoint" . val ++ endfor ++ unlet s:BreakpointSigns + endfunc + + " :Break - Set a breakpoint at the cursor position. +*************** +*** 660,667 **** + endif + sleep 10m + endif +! call s:SendCommand('-break-insert --source ' +! \ . fnameescape(expand('%:p')) . ' --line ' . line('.')) + if do_continue + call s:SendCommand('-exec-continue') + endif +--- 674,682 ---- + endif + sleep 10m + endif +! " Use the fname:lnum format, older gdb can't handle --source. +! call s:SendCommand('-break-insert ' +! \ . fnameescape(expand('%:p')) . ':' . line('.')) + if do_continue + call s:SendCommand('-exec-continue') + endif +*************** +*** 790,796 **** + + call s:GotoSourcewinOrCreateIt() + +! let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') + if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) + let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') + if lnum =~ '^[0-9]*$' +--- 805,815 ---- + + call s:GotoSourcewinOrCreateIt() + +! if a:msg =~ 'fullname=' +! let fname = s:GetFullname(a:msg) +! else +! let fname = '' +! endif + if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) + let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') + if lnum =~ '^[0-9]*$' +*************** +*** 816,828 **** + call win_gotoid(wid) + endfunc + + func s:CreateBreakpoint(nr) +- if !exists("s:BreakpointSigns") +- let s:BreakpointSigns = [] +- endif + if index(s:BreakpointSigns, a:nr) == -1 + call add(s:BreakpointSigns, a:nr) +! exe "sign define debugBreakpoint". a:nr . " text=" . a:nr . " texthl=debugBreakpoint" + endif + endfunc + +--- 835,846 ---- + call win_gotoid(wid) + endfunc + ++ let s:BreakpointSigns = [] ++ + func s:CreateBreakpoint(nr) + if index(s:BreakpointSigns, a:nr) == -1 + call add(s:BreakpointSigns, a:nr) +! exe "sign define debugBreakpoint" . a:nr . " text=" . a:nr . " texthl=debugBreakpoint" + endif + endfunc + +*************** +*** 842,848 **** + let s:breakpoints[nr] = entry + endif + +! let fname = substitute(a:msg, '.*fullname="\([^"]*\)".*', '\1', '') + let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') + let entry['fname'] = fname + let entry['lnum'] = lnum +--- 860,866 ---- + let s:breakpoints[nr] = entry + endif + +! let fname = s:GetFullname(a:msg) + let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') + let entry['fname'] = fname + let entry['lnum'] = lnum +*** ../vim-8.1.0088/src/version.c 2018-06-19 20:08:10.382007834 +0200 +--- src/version.c 2018-06-19 22:31:10.318179415 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 89, + /**/ + +-- +How many light bulbs does it take to change a person? + + /// 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 /// diff --git a/data/vim/patches/8.1.0090 b/data/vim/patches/8.1.0090 new file mode 100644 index 000000000..8ca0b8cbe --- /dev/null +++ b/data/vim/patches/8.1.0090 @@ -0,0 +1,146 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0090 +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.0090 +Problem: "..." used inconsistently in a message. +Solution: Define the message with " ..." once. (hint by Ken Takata) +Files: src/regexp_nfa.c + + +*** ../vim-8.1.0089/src/regexp_nfa.c 2018-06-19 14:23:50.302866911 +0200 +--- src/regexp_nfa.c 2018-06-20 20:34:22.266469423 +0200 +*************** +*** 2672,2677 **** +--- 2672,2678 ---- + + #ifdef ENABLE_LOG + static FILE *log_fd; ++ static char_u e_log_open_failed[] = N_("Could not open temporary log file for writing, displaying on stderr... "); + + /* + * Print the postfix notation of the current regexp. +*************** +*** 2687,2693 **** + { + fprintf(f, "\n-------------------------\n"); + if (retval == FAIL) +! fprintf(f, ">>> NFA engine failed ... \n"); + else if (retval == OK) + fprintf(f, ">>> NFA engine succeeded !\n"); + fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr); +--- 2688,2694 ---- + { + fprintf(f, "\n-------------------------\n"); + if (retval == FAIL) +! fprintf(f, ">>> NFA engine failed... \n"); + else if (retval == OK) + fprintf(f, ">>> NFA engine succeeded !\n"); + fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr); +*************** +*** 5270,5276 **** + } + else + { +! EMSG(_("Could not open temporary log file for writing, displaying on stderr... ")); + log_fd = stderr; + } + #endif +--- 5271,5277 ---- + } + else + { +! EMSG(_(e_log_open_failed)); + log_fd = stderr; + } + #endif +*************** +*** 5620,5626 **** + } + else + { +! EMSG(_("Could not open temporary log file for writing, displaying on stderr ... ")); + log_fd = stderr; + } + #endif +--- 5621,5627 ---- + } + else + { +! EMSG(_(e_log_open_failed)); + log_fd = stderr; + } + #endif +*************** +*** 5704,5710 **** + #ifdef ENABLE_LOG + fprintf(log_fd, "------------------------------------------\n"); + fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput); +! fprintf(log_fd, ">>> Advanced one character ... Current char is %c (code %d) \n", curc, (int)curc); + fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n); + { + int i; +--- 5705,5711 ---- + #ifdef ENABLE_LOG + fprintf(log_fd, "------------------------------------------\n"); + fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput); +! fprintf(log_fd, ">>> Advanced one character... Current char is %c (code %d) \n", curc, (int)curc); + fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n); + { + int i; +*************** +*** 5757,5763 **** + else + col = (int)(t->subs.norm.list.line[0].start - regline); + nfa_set_code(t->state->c); +! fprintf(log_fd, "(%d) char %d %s (start col %d)%s ... \n", + abs(t->state->id), (int)t->state->c, code, col, + pim_info(&t->pim)); + } +--- 5758,5764 ---- + else + col = (int)(t->subs.norm.list.line[0].start - regline); + nfa_set_code(t->state->c); +! fprintf(log_fd, "(%d) char %d %s (start col %d)%s... \n", + abs(t->state->id), (int)t->state->c, code, col, + pim_info(&t->pim)); + } +*************** +*** 7282,7288 **** + + if (f != NULL) + { +! fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\" ... hold on !\n", expr); + fclose(f); + } + } +--- 7283,7289 ---- + + if (f != NULL) + { +! fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\"... hold on !\n", expr); + fclose(f); + } + } +*** ../vim-8.1.0089/src/version.c 2018-06-19 22:34:39.608993263 +0200 +--- src/version.c 2018-06-20 20:29:03.511932732 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 90, + /**/ + +-- +Where do you want to crash today? + + /// 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 /// diff --git a/data/vim/patches/8.1.0091 b/data/vim/patches/8.1.0091 new file mode 100644 index 000000000..2888abf73 --- /dev/null +++ b/data/vim/patches/8.1.0091 @@ -0,0 +1,369 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0091 +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.0091 +Problem: MS-Windows: Cannot interrupt gdb when program is running. +Solution: Add debugbreak() and use it in the terminal debugger. + Respect 'modified' in a prompt buffer. +Files: src/evalfunc.c, runtime/doc/eval.txt, src/undo.c, + runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0090/src/evalfunc.c 2018-06-17 19:36:30.215317108 +0200 +--- src/evalfunc.c 2018-06-20 21:37:04.384279452 +0200 +*************** +*** 123,128 **** +--- 123,131 ---- + static void f_count(typval_T *argvars, typval_T *rettv); + static void f_cscope_connection(typval_T *argvars, typval_T *rettv); + static void f_cursor(typval_T *argsvars, typval_T *rettv); ++ #ifdef WIN3264 ++ static void f_debugbreak(typval_T *argvars, typval_T *rettv); ++ #endif + static void f_deepcopy(typval_T *argvars, typval_T *rettv); + static void f_delete(typval_T *argvars, typval_T *rettv); + static void f_deletebufline(typval_T *argvars, typval_T *rettv); +*************** +*** 577,582 **** +--- 580,588 ---- + {"count", 2, 4, f_count}, + {"cscope_connection",0,3, f_cscope_connection}, + {"cursor", 1, 3, f_cursor}, ++ #ifdef WIN3264 ++ {"debugbreak", 1, 1, f_debugbreak}, ++ #endif + {"deepcopy", 1, 2, f_deepcopy}, + {"delete", 1, 2, f_delete}, + {"deletebufline", 2, 3, f_deletebufline}, +*************** +*** 2761,2766 **** +--- 2767,2799 ---- + rettv->vval.v_number = 0; + } + ++ #ifdef WIN3264 ++ /* ++ * "debugbreak()" function ++ */ ++ static void ++ f_debugbreak(typval_T *argvars, typval_T *rettv) ++ { ++ int pid; ++ ++ rettv->vval.v_number = FAIL; ++ pid = (int)get_tv_number(&argvars[0]); ++ if (pid == 0) ++ EMSG(_(e_invarg)); ++ else ++ { ++ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); ++ ++ if (hProcess != NULL) ++ { ++ DebugBreakProcess(hProcess); ++ CloseHandle(hProcess); ++ rettv->vval.v_number = OK; ++ } ++ } ++ } ++ #endif ++ + /* + * "deepcopy()" function + */ +*** ../vim-8.1.0090/runtime/doc/eval.txt 2018-06-17 19:36:30.211317130 +0200 +--- runtime/doc/eval.txt 2018-06-20 20:49:26.069391126 +0200 +*************** +*** 2108,2113 **** +--- 2108,2114 ---- + cursor({lnum}, {col} [, {off}]) + Number move cursor to {lnum}, {col}, {off} + cursor({list}) Number move cursor to position in {list} ++ debugbreak({pid}) Number interrupt process being debugged + deepcopy({expr} [, {noref}]) any make a full copy of {expr} + delete({fname} [, {flags}]) Number delete the file or directory {fname} + deletebufline({expr}, {first}[, {last}]) +*************** +*** 3480,3485 **** +--- 3481,3491 ---- + position within a <Tab> or after the last character. + Returns 0 when the position could be set, -1 otherwise. + ++ debugbreak({pid}) *debugbreak()* ++ Specifically used to interrupt a program being debugged. It ++ will cause process {pid} to get a SIGTRAP. Behavior for other ++ processes is undefined. See |terminal-debugger|. ++ {only available on MS-Windows} + + deepcopy({expr} [, {noref}]) *deepcopy()* *E698* + Make a copy of {expr}. For Numbers and Strings this isn't +*************** +*** 5488,5493 **** +--- 5494,5513 ---- + The returned Job object can be used to get the status with + |job_status()| and stop the job with |job_stop()|. + ++ Note that the job object will be deleted if there are no ++ references to it. This closes the stdin and stderr, which may ++ cause the job to fail with an error. To avoid this keep a ++ reference to the job. Thus instead of: > ++ call job_start('my-command') ++ < use: > ++ let myjob = job_start('my-command') ++ < and unlet "myjob" once the job is not needed or is past the ++ point where it would fail (e.g. when it prints a message on ++ startup). Keep in mind that variables local to a function ++ will cease to exist if the function returns. Use a ++ script-local variable if needed: > ++ let s:myjob = job_start('my-command') ++ < + {options} must be a Dictionary. It can contain many optional + items, see |job-options|. + +*** ../vim-8.1.0090/src/undo.c 2018-04-08 12:53:24.000000000 +0200 +--- src/undo.c 2018-06-20 22:01:18.595276435 +0200 +*************** +*** 3539,3545 **** + int + bufIsChangedNotTerm(buf_T *buf) + { +! return !bt_dontwrite(buf) + && (buf->b_changed || file_ff_differs(buf, TRUE)); + } + +--- 3539,3547 ---- + int + bufIsChangedNotTerm(buf_T *buf) + { +! // In a "prompt" buffer we do respect 'modified', so that we can control +! // closing the window by setting or resetting that option. +! return (!bt_dontwrite(buf) || bt_prompt(buf)) + && (buf->b_changed || file_ff_differs(buf, TRUE)); + } + +*** ../vim-8.1.0090/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-19 22:34:39.608993263 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-20 22:35:22.126433823 +0200 +*************** +*** 98,103 **** +--- 98,104 ---- + return + endif + let s:ptywin = 0 ++ let s:pid = 0 + + " Uncomment this line to write logging in "debuglog". + " call ch_logfile('debuglog', 'w') +*************** +*** 271,276 **** +--- 272,279 ---- + exe 'bwipe! ' . s:promptbuf + return + endif ++ " Mark the buffer modified so that it's not easy to close. ++ set modified + let s:gdb_channel = job_getchannel(s:gdbjob) + + " Interpret commands while the target is running. This should usualy only +*************** +*** 396,405 **** + call s:SendCommand(a:text) + endfunc + +! " Function called when pressing CTRL-C in the prompt buffer. + func s:PromptInterrupt() +! call ch_log('Interrupting gdb') +! call job_stop(s:gdbjob, 'int') + endfunc + + " Function called when gdb outputs text. +--- 399,414 ---- + call s:SendCommand(a:text) + endfunc + +! " Function called when pressing CTRL-C in the prompt buffer and when placing a +! " breakpoint. + func s:PromptInterrupt() +! if s:pid == 0 +! echoerr 'Cannot interrupt gdb, did not find a process ID' +! else +! call ch_log('Interrupting gdb') +! " Using job_stop(s:gdbjob, 'int') does not work. +! call debugbreak(s:pid) +! endif + endfunc + + " Function called when gdb outputs text. +*************** +*** 430,436 **** + + " Add the output above the current prompt. + call append(line('$') - 1, text) +! set nomodified + + call win_gotoid(curwinid) + endfunc +--- 439,445 ---- + + " Add the output above the current prompt. + call append(line('$') - 1, text) +! set modified + + call win_gotoid(curwinid) + endfunc +*************** +*** 509,514 **** +--- 518,524 ---- + func s:EndPromptDebug(job, status) + let curwinid = win_getid(winnr()) + call win_gotoid(s:gdbwin) ++ set nomodified + close + if curwinid != s:gdbwin + call win_gotoid(curwinid) +*************** +*** 535,540 **** +--- 545,552 ---- + call s:HandleNewBreakpoint(msg) + elseif msg =~ '^=breakpoint-deleted,' + call s:HandleBreakpointDelete(msg) ++ elseif msg =~ '^=thread-group-started' ++ call s:HandleProgramRun(msg) + elseif msg =~ '^\^done,value=' + call s:HandleEvaluate(msg) + elseif msg =~ '^\^error,msg=' +*************** +*** 655,661 **** + for val in s:BreakpointSigns + exe "sign undefine debugBreakpoint" . val + endfor +! unlet s:BreakpointSigns + endfunc + + " :Break - Set a breakpoint at the cursor position. +--- 667,673 ---- + for val in s:BreakpointSigns + exe "sign undefine debugBreakpoint" . val + endfor +! let s:BreakpointSigns = [] + endfunc + + " :Break - Set a breakpoint at the cursor position. +*************** +*** 666,674 **** + if !s:stopped + let do_continue = 1 + if s:way == 'prompt' +! " Need to send a signal to get the UI to listen. Strangely this is only +! " needed once. +! call job_stop(s:gdbjob, 'int') + else + call s:SendCommand('-exec-interrupt') + endif +--- 678,684 ---- + if !s:stopped + let do_continue = 1 + if s:way == 'prompt' +! call s:PromptInterrupt() + else + call s:SendCommand('-exec-interrupt') + endif +*************** +*** 798,810 **** + let wid = win_getid(winnr()) + + if a:msg =~ '^\*stopped' + let s:stopped = 1 + elseif a:msg =~ '^\*running' + let s:stopped = 0 + endif + +- call s:GotoSourcewinOrCreateIt() +- + if a:msg =~ 'fullname=' + let fname = s:GetFullname(a:msg) + else +--- 808,820 ---- + let wid = win_getid(winnr()) + + if a:msg =~ '^\*stopped' ++ call ch_log('program stopped') + let s:stopped = 1 + elseif a:msg =~ '^\*running' ++ call ch_log('program running') + let s:stopped = 0 + endif + + if a:msg =~ 'fullname=' + let fname = s:GetFullname(a:msg) + else +*************** +*** 813,818 **** +--- 823,829 ---- + if a:msg =~ '^\(\*stopped\|=thread-selected\)' && filereadable(fname) + let lnum = substitute(a:msg, '.*line="\([^"]*\)".*', '\1', '') + if lnum =~ '^[0-9]*$' ++ call s:GotoSourcewinOrCreateIt() + if expand('%:p') != fnamemodify(fname, ':p') + if &modified + " TODO: find existing window +*************** +*** 828,834 **** + exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname + setlocal signcolumn=yes + endif +! else + exe 'sign unplace ' . s:pc_id + endif + +--- 839,845 ---- + exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname + setlocal signcolumn=yes + endif +! elseif !s:stopped || fname != '' + exe 'sign unplace ' . s:pc_id + endif + +*************** +*** 892,897 **** +--- 903,919 ---- + endif + endfunc + ++ " Handle the debugged program starting to run. ++ " Will store the process ID in s:pid ++ func s:HandleProgramRun(msg) ++ let nr = substitute(a:msg, '.*pid="\([0-9]*\)\".*', '\1', '') + 0 ++ if nr == 0 ++ return ++ endif ++ let s:pid = nr ++ call ch_log('Detected process ID: ' . s:pid) ++ endfunc ++ + " Handle a BufRead autocommand event: place any signs. + func s:BufRead() + let fname = expand('<afile>:p') +*** ../vim-8.1.0090/src/version.c 2018-06-20 20:37:32.469561678 +0200 +--- src/version.c 2018-06-20 20:50:45.560821218 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 91, + /**/ + +-- +From "know your smileys": + :q vi user saying, "How do I get out of this damn emacs editor?" + + /// 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 /// diff --git a/data/vim/patches/8.1.0092 b/data/vim/patches/8.1.0092 new file mode 100644 index 000000000..1f0c1816b --- /dev/null +++ b/data/vim/patches/8.1.0092 @@ -0,0 +1,47 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0072 +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.0092 (after 8.1.0091) +Problem: Prompt buffer test fails. +Solution: Set 'nomodified' before closing the window. (Ozaki Kiichi, + closes #3051 +Files: src/testdir/test_prompt_buffer.vim + + +*** ../vim-8.1.0091/src/testdir/test_prompt_buffer.vim 2018-06-04 17:28:04.729961269 +0200 +--- src/testdir/test_prompt_buffer.vim 2018-06-21 11:27:42.514152796 +0200 +*************** +*** 24,29 **** +--- 24,31 ---- + call writefile([ + \ 'func TextEntered(text)', + \ ' if a:text == "exit"', ++ \ ' " Reset &modified to allow the buffer to be closed.', ++ \ ' set nomodified', + \ ' stopinsert', + \ ' close', + \ ' else', +*** ../vim-8.1.0091/src/version.c 2018-06-20 22:37:52.658911284 +0200 +--- src/version.c 2018-06-21 12:06:40.685403486 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 92, + /**/ + +-- +From "know your smileys": + <<<:-{ Worf (Never smiles anyways, so he's a bad smiley) + + /// 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 /// diff --git a/data/vim/patches/8.1.0093 b/data/vim/patches/8.1.0093 new file mode 100644 index 000000000..95fd0ca14 --- /dev/null +++ b/data/vim/patches/8.1.0093 @@ -0,0 +1,67 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0093 +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.0093 +Problem: non-MS-Windows: Cannot interrupt gdb when program is running. +Solution: Only use debugbreak() on MS-Windows. +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0092/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-20 22:37:52.658911284 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-21 20:29:09.404402756 +0200 +*************** +*** 402,413 **** + " Function called when pressing CTRL-C in the prompt buffer and when placing a + " breakpoint. + func s:PromptInterrupt() +! if s:pid == 0 +! echoerr 'Cannot interrupt gdb, did not find a process ID' + else +! call ch_log('Interrupting gdb') +! " Using job_stop(s:gdbjob, 'int') does not work. +! call debugbreak(s:pid) + endif + endfunc + +--- 402,418 ---- + " Function called when pressing CTRL-C in the prompt buffer and when placing a + " breakpoint. + func s:PromptInterrupt() +! call ch_log('Interrupting gdb') +! if has('win32') +! " Using job_stop() does not work on MS-Windows, need to send SIGTRAP to +! " the debugger program so that gdb responds again. +! if s:pid == 0 +! echoerr 'Cannot interrupt gdb, did not find a process ID' +! else +! call debugbreak(s:pid) +! endif + else +! call job_stop(s:gdbjob, 'int') + endif + endfunc + +*** ../vim-8.1.0092/src/version.c 2018-06-21 12:07:00.065296930 +0200 +--- src/version.c 2018-06-21 20:30:01.052124494 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 93, + /**/ + +-- +From "know your smileys": + (X0||) Double hamburger with lettuce and tomato + + /// 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 /// diff --git a/data/vim/patches/8.1.0094 b/data/vim/patches/8.1.0094 new file mode 100644 index 000000000..10f92d15b --- /dev/null +++ b/data/vim/patches/8.1.0094 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0094 +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.0094 +Problem: Help text "usage:" is not capatalized. +Solution: Make it "Usage:". (closes #3044) +Files: src/main.c + + +*** ../vim-8.1.0093/src/main.c 2018-06-19 17:49:20.300015350 +0200 +--- src/main.c 2018-06-21 21:35:43.324553857 +0200 +*************** +*** 3269,3275 **** + #endif + + mch_msg(longVersion); +! mch_msg(_("\n\nusage:")); + for (i = 0; ; ++i) + { + mch_msg(_(" vim [arguments] ")); +--- 3269,3275 ---- + #endif + + mch_msg(longVersion); +! mch_msg(_("\n\nUsage:")); + for (i = 0; ; ++i) + { + mch_msg(_(" vim [arguments] ")); +*** ../vim-8.1.0093/src/version.c 2018-06-21 20:31:10.627749367 +0200 +--- src/version.c 2018-06-21 21:37:57.955727830 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 94, + /**/ + +-- +From "know your smileys": + <>:-) Bishop + + /// 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 /// diff --git a/data/vim/patches/8.1.0095 b/data/vim/patches/8.1.0095 new file mode 100644 index 000000000..acb4407f1 --- /dev/null +++ b/data/vim/patches/8.1.0095 @@ -0,0 +1,85 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0095 +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.0095 +Problem: Dialog for ":browse tabnew" says "new window". +Solution: Use "new tab page". (closes #3053) +Files: src/ex_docmd.c + + +*** ../vim-8.1.0094/src/ex_docmd.c 2018-06-12 17:03:35.945611819 +0200 +--- src/ex_docmd.c 2018-06-21 22:07:23.933769249 +0200 +*************** +*** 8200,8205 **** +--- 8200,8208 ---- + #ifdef FEAT_BROWSE + int browse_flag = cmdmod.browse; + #endif ++ int use_tab = eap->cmdidx == CMD_tabedit ++ || eap->cmdidx == CMD_tabfind ++ || eap->cmdidx == CMD_tabnew; + + #ifdef FEAT_GUI + need_mouse_correct = TRUE; +*************** +*** 8248,8254 **** + } + else + { +! fname = do_browse(0, (char_u *)_("Edit File in new window"), + eap->arg, NULL, NULL, NULL, curbuf); + if (fname == NULL) + goto theend; +--- 8251,8259 ---- + } + else + { +! fname = do_browse(0, (char_u *)(use_tab +! ? _("Edit File in new tab page") +! : _("Edit File in new window")), + eap->arg, NULL, NULL, NULL, curbuf); + if (fname == NULL) + goto theend; +*************** +*** 8261,8269 **** + /* + * Either open new tab page or split the window. + */ +! if (eap->cmdidx == CMD_tabedit +! || eap->cmdidx == CMD_tabfind +! || eap->cmdidx == CMD_tabnew) + { + if (win_new_tabpage(cmdmod.tab != 0 ? cmdmod.tab + : eap->addr_count == 0 ? 0 +--- 8266,8272 ---- + /* + * Either open new tab page or split the window. + */ +! if (use_tab) + { + if (win_new_tabpage(cmdmod.tab != 0 ? cmdmod.tab + : eap->addr_count == 0 ? 0 +*** ../vim-8.1.0094/src/version.c 2018-06-21 21:38:29.599534681 +0200 +--- src/version.c 2018-06-21 22:08:45.513304600 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 95, + /**/ + +-- +From "know your smileys": + +<(:-) The Pope + + /// 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 /// diff --git a/data/vim/patches/8.1.0096 b/data/vim/patches/8.1.0096 new file mode 100644 index 000000000..a9658784e --- /dev/null +++ b/data/vim/patches/8.1.0096 @@ -0,0 +1,126 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0096 +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.0096 +Problem: Inconsistent use of the word autocommands. +Solution: Don't use auto-commands or "auto commands". +Files: src/fileio.c + + +*** ../vim-8.1.0095/src/fileio.c 2018-05-22 20:35:13.562009272 +0200 +--- src/fileio.c 2018-06-22 21:26:06.200765470 +0200 +*************** +*** 8412,8430 **** + * will be automatically executed for <event> + * when editing a file matching <pat>, in + * the current group. +! * :autocmd <event> <pat> Show the auto-commands associated with + * <event> and <pat>. +! * :autocmd <event> Show the auto-commands associated with + * <event>. +! * :autocmd Show all auto-commands. +! * :autocmd! <event> <pat> <cmd> Remove all auto-commands associated with + * <event> and <pat>, and add the command + * <cmd>, for the current group. +! * :autocmd! <event> <pat> Remove all auto-commands associated with + * <event> and <pat> for the current group. +! * :autocmd! <event> Remove all auto-commands associated with + * <event> for the current group. +! * :autocmd! Remove ALL auto-commands for the current + * group. + * + * Multiple events and patterns may be given separated by commas. Here are +--- 8412,8430 ---- + * will be automatically executed for <event> + * when editing a file matching <pat>, in + * the current group. +! * :autocmd <event> <pat> Show the autocommands associated with + * <event> and <pat>. +! * :autocmd <event> Show the autocommands associated with + * <event>. +! * :autocmd Show all autocommands. +! * :autocmd! <event> <pat> <cmd> Remove all autocommands associated with + * <event> and <pat>, and add the command + * <cmd>, for the current group. +! * :autocmd! <event> <pat> Remove all autocommands associated with + * <event> and <pat> for the current group. +! * :autocmd! <event> Remove all autocommands associated with + * <event> for the current group. +! * :autocmd! Remove ALL autocommands for the current + * group. + * + * Multiple events and patterns may be given separated by commas. Here are +*************** +*** 8534,8540 **** + if (!forceit && *cmd == NUL) + { + /* Highlight title */ +! MSG_PUTS_TITLE(_("\n--- Auto-Commands ---")); + } + + /* +--- 8534,8540 ---- + if (!forceit && *cmd == NUL) + { + /* Highlight title */ +! MSG_PUTS_TITLE(_("\n--- Autocommands ---")); + } + + /* +*************** +*** 9602,9608 **** + autocmd_match = fname; + + +! /* Don't redraw while doing auto commands. */ + ++RedrawingDisabled; + save_sourcing_name = sourcing_name; + sourcing_name = NULL; /* don't free this one */ +--- 9602,9608 ---- + autocmd_match = fname; + + +! /* Don't redraw while doing autocommands. */ + ++RedrawingDisabled; + save_sourcing_name = sourcing_name; + sourcing_name = NULL; /* don't free this one */ +*************** +*** 9855,9861 **** + : ap->buflocal_nr == apc->arg_bufnr) + { + name = event_nr2name(apc->event); +! s = _("%s Auto commands for \"%s\""); + sourcing_name = alloc((unsigned)(STRLEN(s) + + STRLEN(name) + ap->patlen + 1)); + if (sourcing_name != NULL) +--- 9855,9861 ---- + : ap->buflocal_nr == apc->arg_bufnr) + { + name = event_nr2name(apc->event); +! s = _("%s Autocommands for \"%s\""); + sourcing_name = alloc((unsigned)(STRLEN(s) + + STRLEN(name) + ap->patlen + 1)); + if (sourcing_name != NULL) +*** ../vim-8.1.0095/src/version.c 2018-06-21 22:10:04.404854396 +0200 +--- src/version.c 2018-06-22 21:30:10.251289904 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 96, + /**/ + +-- +Momento mori, ergo carpe diem + + /// 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 /// diff --git a/data/vim/patches/8.1.0097 b/data/vim/patches/8.1.0097 new file mode 100644 index 000000000..f84af3bb3 --- /dev/null +++ b/data/vim/patches/8.1.0097 @@ -0,0 +1,69 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0097 +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.0097 +Problem: Superfluous space before exclamation mark. +Solution: Remove the space. Don't translate debug message. +Files: src/regexp_nfa.c + + +*** ../vim-8.1.0096/src/regexp_nfa.c 2018-06-20 20:37:32.469561678 +0200 +--- src/regexp_nfa.c 2018-06-22 21:38:58.460097521 +0200 +*************** +*** 2989,2995 **** + fclose(df); + } + #endif +! EMSG(_("E874: (NFA) Could not pop the stack !")); + } + + /* +--- 2989,2995 ---- + fclose(df); + } + #endif +! EMSG(_("E874: (NFA) Could not pop the stack!")); + } + + /* +*************** +*** 5593,5599 **** + debug = fopen(NFA_REGEXP_DEBUG_LOG, "a"); + if (debug == NULL) + { +! EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG); + return FALSE; + } + #endif +--- 5593,5599 ---- + debug = fopen(NFA_REGEXP_DEBUG_LOG, "a"); + if (debug == NULL) + { +! EMSG2("(NFA) COULD NOT OPEN %s!", NFA_REGEXP_DEBUG_LOG); + return FALSE; + } + #endif +*** ../vim-8.1.0096/src/version.c 2018-06-22 21:30:27.355186506 +0200 +--- src/version.c 2018-06-22 21:39:55.343753790 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 97, + /**/ + +-- +I AM THANKFUL... +...for the taxes that I pay because it means that I am employed. + + /// 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 /// diff --git a/data/vim/patches/8.1.0098 b/data/vim/patches/8.1.0098 new file mode 100644 index 000000000..f05b16452 --- /dev/null +++ b/data/vim/patches/8.1.0098 @@ -0,0 +1,294 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0098 +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.0098 +Problem: Segfault when pattern with \z() is very slow. +Solution: Check for NULL regprog. Add "nfa_fail" to test_override() to be + able to test this. Fix that 'searchhl' resets called_emsg. +Files: src/syntax.c, runtime/doc/eval.txt, src/evalfunc.c, src/vim.h, + src/testdir/test_syntax.vim, src/globals.h, src/screen.c, + src/regexp.c, src/regexp_nfa.c + + +*** ../vim-8.1.0097/src/syntax.c 2018-05-20 13:35:40.193163458 +0200 +--- src/syntax.c 2018-06-23 13:47:27.294238648 +0200 +*************** +*** 3327,3332 **** +--- 3327,3338 ---- + profile_start(&pt); + #endif + ++ if (rmp->regprog == NULL) ++ // This can happen if a previous call to vim_regexec_multi() tried to ++ // use the NFA engine, which resulted in NFA_TOO_EXPENSIVE, and ++ // compiling the pattern with the other engine fails. ++ return FALSE; ++ + rmp->rmm_maxcol = syn_buf->b_p_smc; + r = vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, + #ifdef FEAT_RELTIME +*** ../vim-8.1.0097/runtime/doc/eval.txt 2018-06-20 22:37:52.658911284 +0200 +--- runtime/doc/eval.txt 2018-06-23 13:27:43.863676347 +0200 +*************** +*** 8694,8699 **** +--- 8694,8701 ---- + redraw disable the redrawing() function + char_avail disable the char_avail() function + starting reset the "starting" variable, see below ++ nfa_fail makes the NFA regexp engine fail to force a ++ fallback to the old engine + ALL clear all overrides ({val} is not used) + + "starting" is to be used when a test should behave like +*** ../vim-8.1.0097/src/evalfunc.c 2018-06-20 22:37:52.654911306 +0200 +--- src/evalfunc.c 2018-06-23 13:29:32.603042364 +0200 +*************** +*** 13090,13099 **** +--- 13090,13102 ---- + save_starting = -1; + } + } ++ else if (STRCMP(name, (char_u *)"nfa_fail") == 0) ++ nfa_fail_for_testing = val; + else if (STRCMP(name, (char_u *)"ALL") == 0) + { + disable_char_avail_for_testing = FALSE; + disable_redraw_for_testing = FALSE; ++ nfa_fail_for_testing = FALSE; + if (save_starting >= 0) + { + starting = save_starting; +*** ../vim-8.1.0097/src/vim.h 2018-04-30 15:12:48.000000000 +0200 +--- src/vim.h 2018-06-23 14:06:57.244449803 +0200 +*************** +*** 1013,1018 **** +--- 1013,1019 ---- + /* values for reg_do_extmatch */ + # define REX_SET 1 /* to allow \z\(...\), */ + # define REX_USE 2 /* to allow \z\1 et al. */ ++ # define REX_ALL (REX_SET | REX_USE) + #endif + + /* Return values for fullpathcmp() */ +*** ../vim-8.1.0097/src/testdir/test_syntax.vim 2018-02-24 19:33:19.000000000 +0100 +--- src/testdir/test_syntax.vim 2018-06-23 14:11:40.474945470 +0200 +*************** +*** 562,564 **** +--- 562,576 ---- + let $COLORFGBG = '' + call delete('Xtest.c') + endfun ++ ++ " Using \z() in a region with NFA failing should not crash. ++ func Test_syn_wrong_z_one() ++ new ++ call setline(1, ['just some text', 'with foo and bar to match with']) ++ syn region FooBar start="foo\z(.*\)bar" end="\z1" ++ call test_override("nfa_fail", 1) ++ redraw! ++ redraw! ++ call test_override("ALL", 0) ++ bwipe! ++ endfunc +*** ../vim-8.1.0097/src/globals.h 2018-06-19 17:49:20.296015375 +0200 +--- src/globals.h 2018-06-23 13:30:00.290880945 +0200 +*************** +*** 1634,1639 **** +--- 1634,1640 ---- + /* flags set by test_override() */ + EXTERN int disable_char_avail_for_testing INIT(= 0); + EXTERN int disable_redraw_for_testing INIT(= 0); ++ EXTERN int nfa_fail_for_testing INIT(= 0); + + EXTERN int in_free_unref_items INIT(= FALSE); + #endif +*** ../vim-8.1.0097/src/screen.c 2018-06-17 16:23:29.341140642 +0200 +--- src/screen.c 2018-06-23 14:02:46.329754550 +0200 +*************** +*** 7868,7873 **** +--- 7868,7874 ---- + linenr_T l; + colnr_T matchcol; + long nmatched; ++ int save_called_emsg = called_emsg; + + if (shl->lnum != 0) + { +*************** +*** 7986,7991 **** +--- 7987,7995 ---- + break; /* useful match found */ + } + } ++ ++ // Restore called_emsg for assert_fails(). ++ called_emsg = save_called_emsg; + } + + /* +*** ../vim-8.1.0097/src/regexp.c 2018-02-13 16:28:11.000000000 +0100 +--- src/regexp.c 2018-06-23 14:09:21.727692568 +0200 +*************** +*** 367,373 **** + static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)"); + #ifdef FEAT_SYN_HL + static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here"); +! static char_u e_z1_not_allowed[] = N_("E67: \\z1 et al. not allowed here"); + #endif + static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%["); + static char_u e_empty_sb[] = N_("E70: Empty %s%%[]"); +--- 367,373 ---- + static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)"); + #ifdef FEAT_SYN_HL + static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here"); +! static char_u e_z1_not_allowed[] = N_("E67: \\z1 - \\z9 not allowed here"); + #endif + static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%["); + static char_u e_empty_sb[] = N_("E70: Empty %s%%[]"); +*************** +*** 2139,2145 **** + switch (c) + { + #ifdef FEAT_SYN_HL +! case '(': if (reg_do_extmatch != REX_SET) + EMSG_RET_NULL(_(e_z_not_allowed)); + if (one_exactly) + EMSG_ONE_RET_NULL; +--- 2139,2145 ---- + switch (c) + { + #ifdef FEAT_SYN_HL +! case '(': if ((reg_do_extmatch & REX_SET) == 0) + EMSG_RET_NULL(_(e_z_not_allowed)); + if (one_exactly) + EMSG_ONE_RET_NULL; +*************** +*** 2158,2164 **** + case '6': + case '7': + case '8': +! case '9': if (reg_do_extmatch != REX_USE) + EMSG_RET_NULL(_(e_z1_not_allowed)); + ret = regnode(ZREF + c - '0'); + re_has_z = REX_USE; +--- 2158,2164 ---- + case '6': + case '7': + case '8': +! case '9': if ((reg_do_extmatch & REX_USE) == 0) + EMSG_RET_NULL(_(e_z1_not_allowed)); + ret = regnode(ZREF + c - '0'); + re_has_z = REX_USE; +*************** +*** 8332,8339 **** + + /* + * Match a regexp against multiple lines. +! * "rmp->regprog" is a compiled regexp as returned by vim_regcomp(). +! * Note: "rmp->regprog" may be freed and changed. + * Uses curbuf for line count and 'iskeyword'. + * + * Return zero if there is no match. Return number of lines contained in the +--- 8332,8339 ---- + + /* + * Match a regexp against multiple lines. +! * "rmp->regprog" must be a compiled regexp as returned by vim_regcomp(). +! * Note: "rmp->regprog" may be freed and changed, even set to NULL. + * Uses curbuf for line count and 'iskeyword'. + * + * Return zero if there is no match. Return number of lines contained in the +*************** +*** 8376,8382 **** +--- 8376,8387 ---- + #ifdef FEAT_EVAL + report_re_switch(pat); + #endif ++ // checking for \z misuse was already done when compiling for NFA, ++ // allow all here ++ reg_do_extmatch = REX_ALL; + rmp->regprog = vim_regcomp(pat, re_flags); ++ reg_do_extmatch = 0; ++ + if (rmp->regprog != NULL) + result = rmp->regprog->engine->regexec_multi( + rmp, win, buf, lnum, col, tm, timed_out); +*** ../vim-8.1.0097/src/regexp_nfa.c 2018-06-22 21:42:26.743455036 +0200 +--- src/regexp_nfa.c 2018-06-23 14:08:50.071858765 +0200 +*************** +*** 1482,1488 **** + case '8': + case '9': + /* \z1...\z9 */ +! if (reg_do_extmatch != REX_USE) + EMSG_RET_FAIL(_(e_z1_not_allowed)); + EMIT(NFA_ZREF1 + (no_Magic(c) - '1')); + /* No need to set nfa_has_backref, the sub-matches don't +--- 1482,1488 ---- + case '8': + case '9': + /* \z1...\z9 */ +! if ((reg_do_extmatch & REX_USE) == 0) + EMSG_RET_FAIL(_(e_z1_not_allowed)); + EMIT(NFA_ZREF1 + (no_Magic(c) - '1')); + /* No need to set nfa_has_backref, the sub-matches don't +*************** +*** 1491,1497 **** + break; + case '(': + /* \z( */ +! if (reg_do_extmatch != REX_SET) + EMSG_RET_FAIL(_(e_z_not_allowed)); + if (nfa_reg(REG_ZPAREN) == FAIL) + return FAIL; /* cascaded error */ +--- 1491,1497 ---- + break; + case '(': + /* \z( */ +! if ((reg_do_extmatch & REX_SET) == 0) + EMSG_RET_FAIL(_(e_z_not_allowed)); + if (nfa_reg(REG_ZPAREN) == FAIL) + return FAIL; /* cascaded error */ +*************** +*** 5692,5698 **** + nextlist->n = 0; /* clear nextlist */ + nextlist->has_pim = FALSE; + ++nfa_listid; +! if (prog->re_engine == AUTOMATIC_ENGINE && nfa_listid >= NFA_MAX_STATES) + { + /* too many states, retry with old engine */ + nfa_match = NFA_TOO_EXPENSIVE; +--- 5692,5699 ---- + nextlist->n = 0; /* clear nextlist */ + nextlist->has_pim = FALSE; + ++nfa_listid; +! if (prog->re_engine == AUTOMATIC_ENGINE +! && (nfa_listid >= NFA_MAX_STATES || nfa_fail_for_testing)) + { + /* too many states, retry with old engine */ + nfa_match = NFA_TOO_EXPENSIVE; +*** ../vim-8.1.0097/src/version.c 2018-06-22 21:42:26.747455046 +0200 +--- src/version.c 2018-06-23 13:28:43.939326081 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 98, + /**/ + +-- +I AM THANKFUL... +...for all the complaining I hear about the government +because it means we have freedom of speech. + + /// 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 /// diff --git a/data/vim/patches/8.1.0099 b/data/vim/patches/8.1.0099 new file mode 100644 index 000000000..581defc93 --- /dev/null +++ b/data/vim/patches/8.1.0099 @@ -0,0 +1,70 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0099 +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.0099 +Problem: Exclamation mark in error message not needed. +Solution: Remove the exclamation mark. +Files: src/regexp_nfa.c + + +*** ../vim-8.1.0098/src/regexp_nfa.c 2018-06-23 14:21:38.471484909 +0200 +--- src/regexp_nfa.c 2018-06-23 14:30:17.432612749 +0200 +*************** +*** 2232,2238 **** + + if (re_multi_type(peekchr()) != NOT_MULTI) + /* Can't have a multi follow a multi. */ +! EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi !")); + + return OK; + } +--- 2232,2238 ---- + + if (re_multi_type(peekchr()) != NOT_MULTI) + /* Can't have a multi follow a multi. */ +! EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi")); + + return OK; + } +*************** +*** 7029,7035 **** + fclose(f); + } + else +! EMSG(_("Could not open temporary log file for writing ")); + #endif + + clear_sub(&subs.norm); +--- 7029,7035 ---- + fclose(f); + } + else +! EMSG("Could not open temporary log file for writing"); + #endif + + clear_sub(&subs.norm); +*** ../vim-8.1.0098/src/version.c 2018-06-23 14:21:38.471484909 +0200 +--- src/version.c 2018-06-23 14:34:08.591348883 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 99, + /**/ + +-- +I AM THANKFUL... +...for the piles of laundry and ironing because it means I +have plenty of clothes to wear. + + /// 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 /// diff --git a/data/vim/patches/8.1.0100 b/data/vim/patches/8.1.0100 new file mode 100644 index 000000000..004052329 --- /dev/null +++ b/data/vim/patches/8.1.0100 @@ -0,0 +1,49 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0100 +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.0100 +Problem: Terminal debugger: error when setting a watch point. +Solution: Don't try defining a sign for a watch point. +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0099/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-21 20:31:10.627749367 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-23 13:56:49.559572378 +0200 +*************** +*** 863,868 **** +--- 863,873 ---- + " Handle setting a breakpoint + " Will update the sign that shows the breakpoint + func s:HandleNewBreakpoint(msg) ++ if a:msg !~ 'fullname=' ++ " a watch does not have a file name ++ return ++ endif ++ + let nr = substitute(a:msg, '.*number="\([0-9]\)*\".*', '\1', '') + 0 + if nr == 0 + return +*** ../vim-8.1.0099/src/version.c 2018-06-23 14:34:24.551261826 +0200 +--- src/version.c 2018-06-23 14:35:29.442908084 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 100, + /**/ + +-- +From "know your smileys": + [:-) Frankenstein's monster + + /// 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 /// diff --git a/data/vim/patches/8.1.0101 b/data/vim/patches/8.1.0101 new file mode 100644 index 000000000..046cb6f09 --- /dev/null +++ b/data/vim/patches/8.1.0101 @@ -0,0 +1,60 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0101 +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.0101 +Problem: No test for getcmdwintype(). +Solution: Add a test. (Dominique Pelle, closes #3068) +Files: src/testdir/test_cmdline.vim + + +*** ../vim-8.1.0100/src/testdir/test_cmdline.vim 2018-06-19 19:09:04.870914841 +0200 +--- src/testdir/test_cmdline.vim 2018-06-23 14:53:32.194885652 +0200 +*************** +*** 511,516 **** +--- 511,532 ---- + cunmap <F6> + endfunc + ++ func Test_getcmdwintype() ++ call feedkeys("q/:let a = getcmdwintype()\<CR>:q\<CR>", 'x!') ++ call assert_equal('/', a) ++ ++ call feedkeys("q?:let a = getcmdwintype()\<CR>:q\<CR>", 'x!') ++ call assert_equal('?', a) ++ ++ call feedkeys("q::let a = getcmdwintype()\<CR>:q\<CR>", 'x!') ++ call assert_equal(':', a) ++ ++ call feedkeys(":\<C-F>:let a = getcmdwintype()\<CR>:q\<CR>", 'x!') ++ call assert_equal(':', a) ++ ++ call assert_equal('', getcmdwintype()) ++ endfunc ++ + func Test_verbosefile() + set verbosefile=Xlog + echomsg 'foo' +*** ../vim-8.1.0100/src/version.c 2018-06-23 14:36:13.778666585 +0200 +--- src/version.c 2018-06-23 14:54:30.426718329 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 101, + /**/ + +-- +From "know your smileys": + :-E Has major dental problems + + /// 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 /// diff --git a/data/vim/patches/8.1.0102 b/data/vim/patches/8.1.0102 new file mode 100644 index 000000000..c924c1a58 --- /dev/null +++ b/data/vim/patches/8.1.0102 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0102 +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.0102 +Problem: Cannot build without syntax highlighting. +Solution: Add #ifdef around using reg_do_extmatch. +Files: src/regexp.c + + +*** ../vim-8.1.0101/src/regexp.c 2018-06-23 14:21:38.471484909 +0200 +--- src/regexp.c 2018-06-23 15:07:31.635796811 +0200 +*************** +*** 8376,8386 **** +--- 8376,8390 ---- + #ifdef FEAT_EVAL + report_re_switch(pat); + #endif ++ #ifdef FEAT_SYN_HL + // checking for \z misuse was already done when compiling for NFA, + // allow all here + reg_do_extmatch = REX_ALL; ++ #endif + rmp->regprog = vim_regcomp(pat, re_flags); ++ #ifdef FEAT_SYN_HL + reg_do_extmatch = 0; ++ #endif + + if (rmp->regprog != NULL) + result = rmp->regprog->engine->regexec_multi( +*** ../vim-8.1.0101/src/version.c 2018-06-23 14:55:00.146628803 +0200 +--- src/version.c 2018-06-23 15:08:14.019617869 +0200 +*************** +*** 763,764 **** +--- 763,766 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 102, + /**/ + +-- +From "know your smileys": + :-| :-| Deja' vu! + + /// 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 /// diff --git a/data/vim/patches/8.1.0103 b/data/vim/patches/8.1.0103 new file mode 100644 index 000000000..502f643d9 --- /dev/null +++ b/data/vim/patches/8.1.0103 @@ -0,0 +1,195 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0103 +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.0103 +Problem: Long version string cannot be translated. +Solution: Build the string in init_longVersion(). +Files: src/globals.h, src/version.h, src/version.c, + src/proto/version.pro, src/main.c + + +*** ../vim-8.1.0102/src/globals.h 2018-06-23 14:21:38.467484932 +0200 +--- src/globals.h 2018-06-23 15:43:26.522795007 +0200 +*************** +*** 1131,1142 **** + EXTERN char breakat_flags[256]; /* which characters are in 'breakat' */ + #endif + +! /* these are in version.c */ + extern char *Version; + #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC) + extern char longVersion[]; + #else +! extern char *longVersion; + #endif + + /* +--- 1131,1142 ---- + EXTERN char breakat_flags[256]; /* which characters are in 'breakat' */ + #endif + +! /* These are in version.c, call init_longVersion() before use. */ + extern char *Version; + #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC) + extern char longVersion[]; + #else +! EXTERN char *longVersion; + #endif + + /* +*** ../vim-8.1.0102/src/version.h 2018-05-17 13:33:02.000000000 +0200 +--- src/version.h 2018-06-23 15:35:20.481563682 +0200 +*************** +*** 36,40 **** + #define VIM_VERSION_NODOT "vim81" + #define VIM_VERSION_SHORT "8.1" + #define VIM_VERSION_MEDIUM "8.1" +! #define VIM_VERSION_LONG "VIM - Vi IMproved 8.1 (2018 May 18)" +! #define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 8.1 (2018 May 18, compiled " +--- 36,42 ---- + #define VIM_VERSION_NODOT "vim81" + #define VIM_VERSION_SHORT "8.1" + #define VIM_VERSION_MEDIUM "8.1" +! #define VIM_VERSION_LONG "VIM - Vi IMproved 8.1 (2018 May 18)" +! #define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 8.1 (2018 May 18, compiled " +! #define VIM_VERSION_LONG_ONLY "VIM - Vi IMproved 8.1" +! #define VIM_VERSION_DATE_ONLY "2018 May 18" +*** ../vim-8.1.0102/src/version.c 2018-06-23 15:09:02.351412460 +0200 +--- src/version.c 2018-06-23 16:11:00.128696631 +0200 +*************** +*** 37,43 **** + + sizeof(__TIME__) + 3]; + + void +! make_version(void) + { + /* + * Construct the long version string. Necessary because +--- 37,43 ---- + + sizeof(__TIME__) + 3]; + + void +! init_longVersion(void) + { + /* + * Construct the long version string. Necessary because +*************** +*** 49,56 **** + strcat(longVersion, __TIME__); + strcat(longVersion, ")"); + } + # else +! char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")"; + # endif + #else + char *longVersion = VIM_VERSION_LONG; +--- 49,73 ---- + strcat(longVersion, __TIME__); + strcat(longVersion, ")"); + } ++ + # else +! void +! init_longVersion(void) +! { +! char *date_time = __DATE__ " " __TIME__; +! char *msg = _("%s (%s, compiled %s)"); +! size_t len = strlen(msg) +! + strlen(VIM_VERSION_LONG_ONLY) +! + strlen(VIM_VERSION_DATE_ONLY) +! + strlen(date_time); +! +! longVersion = (char *)alloc(len); +! if (longVersion == NULL) +! longVersion = VIM_VERSION_LONG; +! else +! vim_snprintf(longVersion, len, msg, +! VIM_VERSION_LONG_ONLY, VIM_VERSION_DATE_ONLY, date_time); +! } + # endif + #else + char *longVersion = VIM_VERSION_LONG; +*************** +*** 1148,1153 **** +--- 1167,1173 ---- + * When adding features here, don't forget to update the list of + * internal variables in eval.c! + */ ++ init_longVersion(); + MSG(longVersion); + #ifdef WIN3264 + # ifdef FEAT_GUI_W32 +*** ../vim-8.1.0102/src/proto/version.pro 2018-05-17 13:52:55.000000000 +0200 +--- src/proto/version.pro 2018-06-23 15:40:19.395834338 +0200 +*************** +*** 1,5 **** + /* version.c */ +! void make_version(void); + int highest_patch(void); + int has_patch(int n); + void ex_version(exarg_T *eap); +--- 1,5 ---- + /* version.c */ +! void init_longVersion(void); + int highest_patch(void); + int has_patch(int n); + void ex_version(exarg_T *eap); +*** ../vim-8.1.0102/src/main.c 2018-06-21 21:38:29.599534681 +0200 +--- src/main.c 2018-06-23 15:31:50.962855677 +0200 +*************** +*** 940,949 **** + /* Init the table of Normal mode commands. */ + init_normal_cmds(); + +- #if defined(HAVE_DATE_TIME) && defined(VMS) && defined(VAXC) +- make_version(); /* Construct the long version string. */ +- #endif +- + /* + * Allocate space for the generic buffers (needed for set_init_1() and + * EMSG2()). +--- 940,945 ---- +*************** +*** 3215,3220 **** +--- 3211,3217 ---- + reset_signals(); /* kill us with CTRL-C here, if you like */ + #endif + ++ init_longVersion(); + mch_errmsg(longVersion); + mch_errmsg("\n"); + mch_errmsg(_(main_errors[n])); +*************** +*** 3268,3273 **** +--- 3265,3271 ---- + reset_signals(); /* kill us with CTRL-C here, if you like */ + #endif + ++ init_longVersion(); + mch_msg(longVersion); + mch_msg(_("\n\nUsage:")); + for (i = 0; ; ++i) +*** ../vim-8.1.0102/src/version.c 2018-06-23 15:09:02.351412460 +0200 +--- src/version.c 2018-06-23 16:11:00.128696631 +0200 +*************** +*** 763,764 **** +--- 780,783 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 103, + /**/ + +-- +From "know your smileys": + |-( Contact lenses, but has lost them + + /// 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 /// diff --git a/data/vim/patches/8.1.0104 b/data/vim/patches/8.1.0104 new file mode 100644 index 000000000..ae5ab594b --- /dev/null +++ b/data/vim/patches/8.1.0104 @@ -0,0 +1,57 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0104 +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.0104 +Problem: Can't build without the +eval feature. +Solution: Add #ifdef. +Files: src/regexp_nfa.c + + +*** ../vim-8.1.0103/src/regexp_nfa.c 2018-06-23 14:34:24.551261826 +0200 +--- src/regexp_nfa.c 2018-06-23 17:13:47.102214648 +0200 +*************** +*** 5693,5699 **** + nextlist->has_pim = FALSE; + ++nfa_listid; + if (prog->re_engine == AUTOMATIC_ENGINE +! && (nfa_listid >= NFA_MAX_STATES || nfa_fail_for_testing)) + { + /* too many states, retry with old engine */ + nfa_match = NFA_TOO_EXPENSIVE; +--- 5693,5703 ---- + nextlist->has_pim = FALSE; + ++nfa_listid; + if (prog->re_engine == AUTOMATIC_ENGINE +! && (nfa_listid >= NFA_MAX_STATES +! # ifdef FEAT_EVAL +! || nfa_fail_for_testing +! # endif +! )) + { + /* too many states, retry with old engine */ + nfa_match = NFA_TOO_EXPENSIVE; +*** ../vim-8.1.0103/src/version.c 2018-06-23 16:12:15.784258242 +0200 +--- src/version.c 2018-06-23 17:14:18.414022555 +0200 +*************** +*** 780,781 **** +--- 780,783 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 104, + /**/ + +-- +From "know your smileys": + <|-) Chinese + <|-( Chinese and doesn't like these kind of jokes + + /// 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 /// diff --git a/data/vim/patches/8.1.0105 b/data/vim/patches/8.1.0105 new file mode 100644 index 000000000..fe689753b --- /dev/null +++ b/data/vim/patches/8.1.0105 @@ -0,0 +1,3397 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0105 +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.0105 +Problem: All tab stops are the same. +Solution: Add the variable tabstop feature. (Christian Brabandt, + closes #2711) +Files: runtime/doc/change.txt, runtime/doc/options.txt, + runtime/doc/various.txt, runtime/optwin.vim, src/beval.c, + src/beval.h, src/buffer.c, src/charset.c, src/edit.c, + src/evalfunc.c, src/ex_cmds.c, src/feature.h, src/gui_beval.c, + src/gui_w32.c, src/hardcopy.c, src/message.c, src/misc1.c, + src/ops.c, src/option.c, src/option.h, src/proto/misc1.pro, + src/proto/option.pro, src/screen.c, src/structs.h, + src/testdir/Make_all.mak, src/testdir/gen_opt_test.vim, + src/testdir/test_breakindent.vim, src/testdir/test_vartabs.vim, + src/version.c, src/workshop.c, src/Makefile + + +*** ../vim-8.1.0104/runtime/doc/change.txt 2018-05-17 13:40:51.000000000 +0200 +--- runtime/doc/change.txt 2018-06-23 17:41:10.096366118 +0200 +*************** +*** 987,992 **** +--- 987,997 ---- + this (that's a good habit anyway). + `:retab!` may also change a sequence of spaces by + <Tab> characters, which can mess up a printf(). ++ If the |+vartabs| feature is enabled then a list of ++ tab widths separated by commas may be used in place of ++ a single tabstop. Each value in the list represents ++ the width of one tabstop, except the final value which ++ applies to all following tabstops. + {not in Vi} + + *retab-example* +*** ../vim-8.1.0104/runtime/doc/options.txt 2018-06-03 14:42:17.832505129 +0200 +--- runtime/doc/options.txt 2018-06-23 17:41:10.100366093 +0200 +*************** +*** 7172,7177 **** +--- 7172,7181 ---- + set. + NOTE: This option is set to 0 when 'compatible' is set. + ++ If Vim is compiled with the |+vartabs| feature then the value of ++ 'softtabstop' will be ignored if |'varsofttabstop'| is set to ++ anything other than an empty string. ++ + *'spell'* *'nospell'* + 'spell' boolean (default off) + local to window +*************** +*** 7723,7728 **** +--- 7727,7736 ---- + though. Otherwise aligned comments will be wrong when 'tabstop' is + changed. + ++ If Vim is compiled with the |+vartabs| feature then the value of ++ 'tabstop' will be ignored if |'vartabstop'| is set to anything other ++ than an empty string. ++ + *'tagbsearch'* *'tbs'* *'notagbsearch'* *'notbs'* + 'tagbsearch' 'tbs' boolean (default on) + global +*************** +*** 8468,8473 **** +--- 8476,8519 ---- + written to disk (see |crash-recovery|). Also used for the + |CursorHold| autocommand event. + ++ *'varsofttabstop'* *'vsts'* ++ 'varsofttabstop' 'vsts' string (default "") ++ local to buffer ++ {only available when compiled with the |+vartabs| ++ feature} ++ {not in Vi} ++ A list of the number of spaces that a <Tab> counts for while editing, ++ such as inserting a <Tab> or using <BS>. It "feels" like variable- ++ width <Tab>s are being inserted, while in fact a mixture of spaces ++ and <Tab>s is used. Tab widths are separated with commas, with the ++ final value applying to all subsequent tabs. ++ ++ For example, when editing assembly language files where statements ++ start in the 8th column and comments in the 40th, it may be useful ++ to use the following: > ++ :set varsofttabstop=8,32,8 ++ < This will set soft tabstops at the 8th and 40th columns, and at every ++ 8th column thereafter. ++ ++ Note that the value of |'softtabstop'| will be ignored while ++ 'varsofttabstop' is set. ++ ++ *'vartabstop'* *'vts'* ++ 'vartabstop' 'vts' string (default "") ++ local to buffer ++ {only available when compiled with the |+vartabs| ++ feature} ++ {not in Vi} ++ A list of the number of spaces that a <Tab> in the file counts for, ++ separated by commas. Each value corresponds to one tab, with the ++ final value applying to all subsequent tabs. For example: > ++ :set vartabstop=4,20,10,8 ++ < This will make the first tab 4 spaces wide, the second 20 spaces, ++ the third 10 spaces, and all following tabs 8 spaces. ++ ++ Note that the value of |'tabstop'| will be ignored while 'vartabstop' ++ is set. ++ + *'verbose'* *'vbs'* + 'verbose' 'vbs' number (default 0) + global +*** ../vim-8.1.0104/runtime/doc/various.txt 2018-05-17 13:42:04.000000000 +0200 +--- runtime/doc/various.txt 2018-06-23 17:41:10.100366093 +0200 +*************** +*** 453,458 **** +--- 453,459 ---- + N *+title* Setting the window 'title' and 'icon' + N *+toolbar* |gui-toolbar| + N *+user_commands* User-defined commands. |user-commands| ++ B *+vartabs* Variable-width tabstops. |'vartabstop'| + N *+viminfo* |'viminfo'| + *+vertsplit* Vertically split windows |:vsplit|; Always enabled + since 8.0.1118. +*** ../vim-8.1.0104/runtime/optwin.vim 2018-05-15 21:39:18.000000000 +0200 +--- runtime/optwin.vim 2018-06-23 17:41:10.100366093 +0200 +*************** +*** 856,861 **** +--- 856,869 ---- + call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent") + call append("$", "\t(local to buffer)") + call <SID>OptionL("sw") ++ if has("vartabs") ++ call append("$", "vartabstop\tlist of number of spaces a tab counts for") ++ call append("$", "\t(local to buffer)") ++ call <SID>OptionL("vts") ++ call append("$", "varsofttabstop\tlist of number of spaces a soft tabsstop counts for") ++ call append("$", "\t(local to buffer)") ++ call <SID>OptionL("vsts") ++ endif + call append("$", "smarttab\ta <Tab> in an indent inserts 'shiftwidth' spaces") + call <SID>BinOptionG("sta", &sta) + call append("$", "softtabstop\tif non-zero, number of spaces to insert for a <Tab>") +*** ../vim-8.1.0104/src/beval.c 2018-02-06 22:46:29.000000000 +0100 +--- src/beval.c 2018-06-23 18:34:30.918950814 +0200 +*************** +*** 124,129 **** +--- 124,134 ---- + *lnump = lnum; + *textp = lbuf; + *colp = col; ++ #ifdef FEAT_VARTABS ++ if (beval->vts) ++ vim_free(beval->vts); ++ beval->vts = tabstop_copy(wp->w_buffer->b_p_vts_array); ++ #endif + beval->ts = wp->w_buffer->b_p_ts; + return OK; + } +*** ../vim-8.1.0104/src/beval.h 2017-11-19 20:22:17.000000000 +0100 +--- src/beval.h 2018-06-23 18:42:21.444354814 +0200 +*************** +*** 71,77 **** + void *clientData; /* For callback */ + #endif + +! int ts; /* tabstop setting for this buffer */ + char_u *msg; + } BalloonEval; + +--- 71,80 ---- + void *clientData; /* For callback */ + #endif + +! int ts; // tabstop setting for this buffer +! #ifdef FEAT_VARTABS +! int *vts; // vartabstop setting for this buffer +! #endif + char_u *msg; + } BalloonEval; + +*** ../vim-8.1.0104/src/buffer.c 2018-06-16 22:58:11.791025515 +0200 +--- src/buffer.c 2018-06-23 18:34:40.502898381 +0200 +*************** +*** 271,277 **** + /* + * Set/reset the Changed flag first, autocmds may change the buffer. + * Apply the automatic commands, before processing the modelines. +! * So the modelines have priority over auto commands. + */ + /* When reading stdin, the buffer contents always needs writing, so set + * the changed flag. Unless in readonly mode: "ls | gview -". +--- 271,277 ---- + /* + * Set/reset the Changed flag first, autocmds may change the buffer. + * Apply the automatic commands, before processing the modelines. +! * So the modelines have priority over autocommands. + */ + /* When reading stdin, the buffer contents always needs writing, so set + * the changed flag. Unless in readonly mode: "ls | gview -". +*************** +*** 2159,2164 **** +--- 2159,2177 ---- + clear_string_option(&buf->b_p_fo); + clear_string_option(&buf->b_p_flp); + clear_string_option(&buf->b_p_isk); ++ #ifdef FEAT_VARTABS ++ clear_string_option(&buf->b_p_vsts); ++ if (buf->b_p_vsts_nopaste) ++ vim_free(buf->b_p_vsts_nopaste); ++ buf->b_p_vsts_nopaste = NULL; ++ if (buf->b_p_vsts_array) ++ vim_free(buf->b_p_vsts_array); ++ buf->b_p_vsts_array = NULL; ++ clear_string_option(&buf->b_p_vts); ++ if (buf->b_p_vts_array) ++ vim_free(buf->b_p_vts_array); ++ buf->b_p_vts_array = NULL; ++ #endif + #ifdef FEAT_KEYMAP + clear_string_option(&buf->b_p_keymap); + keymap_clear(&buf->b_kmap_ga); +*************** +*** 5190,5196 **** + win_close(wp, FALSE); + wpnext = firstwin; /* just in case an autocommand does + something strange with windows */ +! tpnext = first_tabpage; /* start all over...*/ + open_wins = 0; + } + else +--- 5203,5209 ---- + win_close(wp, FALSE); + wpnext = firstwin; /* just in case an autocommand does + something strange with windows */ +! tpnext = first_tabpage; /* start all over... */ + open_wins = 0; + } + else +*************** +*** 5650,5657 **** + } + + /* +! * Return TRUE if "buf" is a "nofile", "acwrite" or "terminal" buffer. +! * This means the buffer name is not a file name. + */ + int + bt_nofile(buf_T *buf) +--- 5663,5670 ---- + } + + /* +! * Return TRUE if "buf" is a "nofile", "acwrite", "terminal" or "prompt" +! * buffer. This means the buffer name is not a file name. + */ + int + bt_nofile(buf_T *buf) +*************** +*** 5663,5669 **** + } + + /* +! * Return TRUE if "buf" is a "nowrite", "nofile" or "terminal" buffer. + */ + int + bt_dontwrite(buf_T *buf) +--- 5676,5683 ---- + } + + /* +! * Return TRUE if "buf" is a "nowrite", "nofile", "terminal" or "prompt" +! * buffer. + */ + int + bt_dontwrite(buf_T *buf) +*** ../vim-8.1.0104/src/charset.c 2018-06-12 17:25:32.054404315 +0200 +--- src/charset.c 2018-06-23 18:42:59.804141756 +0200 +*************** +*** 812,818 **** + * Also see getvcol() below. + */ + +! #define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \ + if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \ + { \ + int ts; \ +--- 812,827 ---- + * Also see getvcol() below. + */ + +! #ifdef FEAT_VARTABS +! # define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \ +! if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \ +! { \ +! return tabstop_padding(col, (buf)->b_p_ts, (buf)->b_p_vts_array); \ +! } \ +! else \ +! return ptr2cells(p); +! #else +! # define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \ + if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \ + { \ + int ts; \ +*************** +*** 821,826 **** +--- 830,836 ---- + } \ + else \ + return ptr2cells(p); ++ #endif + + int + chartabsize(char_u *p, colnr_T col) +*************** +*** 1221,1228 **** +--- 1231,1243 ---- + + if (*s == TAB && (!wp->w_p_list || lcs_tab1)) + { ++ # ifdef FEAT_VARTABS ++ return tabstop_padding(col, wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_array); ++ # else + n = wp->w_buffer->b_p_ts; + return (int)(n - (col % n)); ++ # endif + } + n = ptr2cells(s); + /* Add one cell for a double-width character in the last column of the +*************** +*** 1282,1287 **** +--- 1297,1305 ---- + char_u *line; /* start of the line */ + int incr; + int head; ++ #ifdef FEAT_VARTABS ++ int *vts = wp->w_buffer->b_p_vts_array; ++ #endif + int ts = wp->w_buffer->b_p_ts; + int c; + +*************** +*** 1332,1338 **** +--- 1350,1360 ---- + } + /* A tab gets expanded, depending on the current column */ + if (c == TAB) ++ #ifdef FEAT_VARTABS ++ incr = tabstop_padding(vcol, ts, vts); ++ #else + incr = ts - (vcol % ts); ++ #endif + else + { + #ifdef FEAT_MBYTE +*** ../vim-8.1.0104/src/edit.c 2018-06-17 19:36:30.215317108 +0200 +--- src/edit.c 2018-06-23 18:56:42.835538285 +0200 +*************** +*** 742,748 **** + mincol = curwin->w_wcol; + validate_cursor_col(); + +! if ((int)curwin->w_wcol < mincol - curbuf->b_p_ts + && curwin->w_wrow == W_WINROW(curwin) + + curwin->w_height - 1 - p_so + && (curwin->w_cursor.lnum != curwin->w_topline +--- 742,755 ---- + mincol = curwin->w_wcol; + validate_cursor_col(); + +! if ( +! #ifdef FEAT_VARTABS +! (int)curwin->w_wcol < mincol - tabstop_at( +! get_nolist_virtcol(), curbuf->b_p_ts, +! curbuf->b_p_vts_array) +! #else +! (int)curwin->w_wcol < mincol - curbuf->b_p_ts +! #endif + && curwin->w_wrow == W_WINROW(curwin) + + curwin->w_height - 1 - p_so + && (curwin->w_cursor.lnum != curwin->w_topline +*************** +*** 9329,9351 **** + */ + if ( mode == BACKSPACE_CHAR + && ((p_sta && in_indent) +! || (get_sts_value() != 0 + && curwin->w_cursor.col > 0 + && (*(ml_get_cursor() - 1) == TAB + || (*(ml_get_cursor() - 1) == ' ' + && (!*inserted_space_p + || arrow_used)))))) + { + int ts; + colnr_T vcol; + colnr_T want_vcol; + colnr_T start_vcol; + + *inserted_space_p = FALSE; + if (p_sta && in_indent) + ts = (int)get_sw_value(curbuf); + else + ts = (int)get_sts_value(); + /* Compute the virtual column where we want to be. Since + * 'showbreak' may get in the way, need to get the last column of + * the previous character. */ +--- 9336,9366 ---- + */ + if ( mode == BACKSPACE_CHAR + && ((p_sta && in_indent) +! || ((get_sts_value() != 0 +! #ifdef FEAT_VARTABS +! || tabstop_count(curbuf->b_p_vsts_array) +! #endif +! ) + && curwin->w_cursor.col > 0 + && (*(ml_get_cursor() - 1) == TAB + || (*(ml_get_cursor() - 1) == ' ' + && (!*inserted_space_p + || arrow_used)))))) + { ++ #ifndef FEAT_VARTABS + int ts; ++ #endif + colnr_T vcol; + colnr_T want_vcol; + colnr_T start_vcol; + + *inserted_space_p = FALSE; ++ #ifndef FEAT_VARTABS + if (p_sta && in_indent) + ts = (int)get_sw_value(curbuf); + else + ts = (int)get_sts_value(); ++ #endif + /* Compute the virtual column where we want to be. Since + * 'showbreak' may get in the way, need to get the last column of + * the previous character. */ +*************** +*** 9354,9360 **** +--- 9369,9383 ---- + dec_cursor(); + getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol); + inc_cursor(); ++ #ifdef FEAT_VARTABS ++ if (p_sta && in_indent) ++ want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw; ++ else ++ want_vcol = tabstop_start(want_vcol, curbuf->b_p_sts, ++ curbuf->b_p_vsts_array); ++ #else + want_vcol = (want_vcol / ts) * ts; ++ #endif + + /* delete characters until we are at or before want_vcol */ + while (vcol > want_vcol +*************** +*** 10144,10153 **** + #endif + + /* +! * When nothing special, insert TAB like a normal character + */ + if (!curbuf->b_p_et + && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf)) + && get_sts_value() == 0) + return TRUE; + +--- 10167,10188 ---- + #endif + + /* +! * When nothing special, insert TAB like a normal character. + */ + if (!curbuf->b_p_et ++ #ifdef FEAT_VARTABS ++ && !(p_sta && ind ++ /* These five lines mean 'tabstop' != 'shiftwidth' */ ++ && ((tabstop_count(curbuf->b_p_vts_array) > 1) ++ || (tabstop_count(curbuf->b_p_vts_array) == 1 ++ && tabstop_first(curbuf->b_p_vts_array) ++ != get_sw_value(curbuf)) ++ || (tabstop_count(curbuf->b_p_vts_array) == 0 ++ && curbuf->b_p_ts != get_sw_value(curbuf)))) ++ && tabstop_count(curbuf->b_p_vsts_array) == 0 ++ #else + && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf)) ++ #endif + && get_sts_value() == 0) + return TRUE; + +*************** +*** 10162,10167 **** +--- 10197,10216 ---- + #endif + AppendToRedobuff((char_u *)"\t"); + ++ #ifdef FEAT_VARTABS ++ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ ++ { ++ temp = (int)curbuf->b_p_sw; ++ temp -= get_nolist_virtcol() % temp; ++ } ++ else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts > 0) ++ /* use 'softtabstop' when set */ ++ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_sts, ++ curbuf->b_p_vsts_array); ++ else /* otherwise use 'tabstop' */ ++ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ + temp = (int)get_sw_value(curbuf); + else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */ +*************** +*** 10169,10174 **** +--- 10218,10224 ---- + else /* otherwise use 'tabstop' */ + temp = (int)curbuf->b_p_ts; + temp -= get_nolist_virtcol() % temp; ++ #endif + + /* + * Insert the first space with ins_char(). It will delete one char in +*************** +*** 10193,10199 **** +--- 10243,10255 ---- + /* + * When 'expandtab' not set: Replace spaces by TABs where possible. + */ ++ #ifdef FEAT_VARTABS ++ if (!curbuf->b_p_et && (tabstop_count(curbuf->b_p_vsts_array) > 0 ++ || get_sts_value() > 0 ++ || (p_sta && ind))) ++ #else + if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind))) ++ #endif + { + char_u *ptr; + #ifdef FEAT_VREPLACE +*** ../vim-8.1.0104/src/evalfunc.c 2018-06-23 14:21:38.467484932 +0200 +--- src/evalfunc.c 2018-06-23 17:41:10.108366044 +0200 +*************** +*** 6436,6441 **** +--- 6436,6444 ---- + "user-commands", /* was accidentally included in 5.4 */ + "user_commands", + #endif ++ #ifdef FEAT_VARTABS ++ "vartabs", ++ #endif + #ifdef FEAT_VIMINFO + "viminfo", + #endif +*** ../vim-8.1.0104/src/ex_cmds.c 2018-06-04 20:34:07.607373577 +0200 +--- src/ex_cmds.c 2018-06-23 18:49:09.570076283 +0200 +*************** +*** 673,684 **** + long vcol; + long start_col = 0; /* For start of white-space string */ + long start_vcol = 0; /* For start of white-space string */ +- int temp; + long old_len; + char_u *ptr; + char_u *new_line = (char_u *)1; /* init to non-NULL */ + int did_undo; /* called u_save for current line */ + int new_ts; + int save_list; + linenr_T first_line = 0; /* first changed line */ + linenr_T last_line = 0; /* last changed line */ +--- 673,689 ---- + long vcol; + long start_col = 0; /* For start of white-space string */ + long start_vcol = 0; /* For start of white-space string */ + long old_len; + char_u *ptr; + char_u *new_line = (char_u *)1; /* init to non-NULL */ + int did_undo; /* called u_save for current line */ ++ #ifdef FEAT_VARTABS ++ int *new_ts = 0; ++ char_u *new_ts_str; /* string value of tab argument */ ++ #else ++ int temp; + int new_ts; ++ #endif + int save_list; + linenr_T first_line = 0; /* first changed line */ + linenr_T last_line = 0; /* last changed line */ +*************** +*** 686,691 **** +--- 691,713 ---- + save_list = curwin->w_p_list; + curwin->w_p_list = 0; /* don't want list mode here */ + ++ #ifdef FEAT_VARTABS ++ new_ts_str = eap->arg; ++ if (!tabstop_set(eap->arg, &new_ts)) ++ return; ++ while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',') ++ ++(eap->arg); ++ ++ // This ensures that either new_ts and new_ts_str are freshly allocated, ++ // or new_ts points to an existing array and new_ts_str is null. ++ if (new_ts == 0) ++ { ++ new_ts = curbuf->b_p_vts_array; ++ new_ts_str = NULL; ++ } ++ else ++ new_ts_str = vim_strnsave(new_ts_str, eap->arg - new_ts_str); ++ #else + new_ts = getdigits(&(eap->arg)); + if (new_ts < 0) + { +*************** +*** 694,699 **** +--- 716,722 ---- + } + if (new_ts == 0) + new_ts = curbuf->b_p_ts; ++ #endif + for (lnum = eap->line1; !got_int && lnum <= eap->line2; ++lnum) + { + ptr = ml_get(lnum); +*************** +*** 726,731 **** +--- 749,764 ---- + num_tabs = 0; + if (!curbuf->b_p_et) + { ++ #ifdef FEAT_VARTABS ++ int t, s; ++ ++ tabstop_fromto(start_vcol, vcol, ++ tabstop_count(new_ts)? 0: curbuf->b_p_ts, ++ new_ts, ++ &t, &s); ++ num_tabs = t; ++ num_spaces = s; ++ #else + temp = new_ts - (start_vcol % new_ts); + if (num_spaces >= temp) + { +*************** +*** 734,739 **** +--- 767,773 ---- + } + num_tabs += num_spaces / new_ts; + num_spaces -= (num_spaces / new_ts) * new_ts; ++ #endif + } + if (curbuf->b_p_et || got_tab || + (num_spaces + num_tabs < len)) +*************** +*** 791,804 **** +--- 825,877 ---- + if (got_int) + EMSG(_(e_interr)); + ++ #ifdef FEAT_VARTABS ++ // If a single value was given then it can be considered equal to ++ // either the value of 'tabstop' or the value of 'vartabstop'. ++ if (tabstop_count(curbuf->b_p_vts_array) == 0 ++ && tabstop_count(new_ts) == 1 ++ && curbuf->b_p_ts == tabstop_first(new_ts)) ++ ; /* not changed */ ++ else if (tabstop_count(curbuf->b_p_vts_array) > 0 ++ && tabstop_eq(curbuf->b_p_vts_array, new_ts)) ++ ; /* not changed */ ++ else ++ redraw_curbuf_later(NOT_VALID); ++ #else + if (curbuf->b_p_ts != new_ts) + redraw_curbuf_later(NOT_VALID); ++ #endif + if (first_line != 0) + changed_lines(first_line, 0, last_line + 1, 0L); + + curwin->w_p_list = save_list; /* restore 'list' */ + ++ #ifdef FEAT_VARTABS ++ if (new_ts_str != NULL) /* set the new tabstop */ ++ { ++ // If 'vartabstop' is in use or if the value given to retab has more ++ // than one tabstop then update 'vartabstop'. ++ int *old_vts_ary = curbuf->b_p_vts_array; ++ ++ if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_ts) > 1) ++ { ++ set_string_option_direct((char_u *)"vts", -1, new_ts_str, ++ OPT_FREE|OPT_LOCAL, 0); ++ vim_free(new_ts_str); ++ curbuf->b_p_vts_array = new_ts; ++ vim_free(old_vts_ary); ++ } ++ else ++ { ++ // 'vartabstop' wasn't in use and a single value was given to ++ // retab then update 'tabstop'. ++ curbuf->b_p_ts = tabstop_first(new_ts); ++ vim_free(new_ts); ++ } ++ } ++ #else + curbuf->b_p_ts = new_ts; ++ #endif + coladvance(curwin->w_curswant); + + u_clearline(); +*** ../vim-8.1.0104/src/feature.h 2018-03-29 15:32:30.000000000 +0200 +--- src/feature.h 2018-06-23 17:41:10.108366044 +0200 +*************** +*** 806,811 **** +--- 806,818 ---- + #endif + + /* ++ * +vartabs 'vartabstop' and 'varsofttabstop' options. ++ */ ++ #ifdef FEAT_BIG ++ # define FEAT_VARTABS ++ #endif ++ ++ /* + * Preferences: + * ============ + */ +*** ../vim-8.1.0104/src/gui_beval.c 2017-11-18 21:20:07.000000000 +0100 +--- src/gui_beval.c 2018-06-23 18:50:11.437730010 +0200 +*************** +*** 130,135 **** +--- 130,138 ---- + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; ++ #ifdef FEAT_VARTABS ++ beval->vts = NULL; ++ #endif + + /* + * Set up event handler which will keep its eyes on the pointer, +*************** +*** 172,177 **** +--- 175,184 ---- + # else + XtDestroyWidget(beval->balloonShell); + # endif ++ # ifdef FEAT_VARTABS ++ if (beval->vts) ++ vim_free(beval->vts); ++ # endif + vim_free(beval); + } + #endif +*** ../vim-8.1.0104/src/gui_w32.c 2018-06-19 14:45:33.583620880 +0200 +--- src/gui_w32.c 2018-06-23 18:50:14.853710890 +0200 +*************** +*** 8934,8939 **** +--- 8934,8942 ---- + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; ++ #ifdef FEAT_VARTABS ++ beval->vts = NULL; ++ #endif + + InitCommonControls(); + cur_beval = beval; +*************** +*** 8990,8995 **** +--- 8993,9002 ---- + void + gui_mch_destroy_beval_area(BalloonEval *beval) + { ++ #ifdef FEAT_VARTABS ++ if (beval->vts) ++ vim_free(beval->vts); ++ #endif + vim_free(beval); + } + #endif /* FEAT_BEVAL_GUI */ +*** ../vim-8.1.0104/src/hardcopy.c 2018-06-16 14:44:05.750081612 +0200 +--- src/hardcopy.c 2018-06-23 18:35:24.530657199 +0200 +*************** +*** 915,921 **** +--- 915,926 ---- + if (line[col] == TAB || tab_spaces != 0) + { + if (tab_spaces == 0) ++ #ifdef FEAT_VARTABS ++ tab_spaces = tabstop_padding(print_pos, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_spaces = (int)(curbuf->b_p_ts - (print_pos % curbuf->b_p_ts)); ++ #endif + + while (tab_spaces > 0) + { +*** ../vim-8.1.0104/src/message.c 2018-06-19 17:49:20.300015350 +0200 +--- src/message.c 2018-06-23 18:35:29.794628331 +0200 +*************** +*** 1831,1837 **** +--- 1831,1842 ---- + if (c == TAB && (!list || lcs_tab1)) + { + /* tab amount depends on current column */ ++ #ifdef FEAT_VARTABS ++ n_extra = tabstop_padding(col, curbuf->b_p_ts, ++ curbuf->b_p_vts_array) - 1; ++ #else + n_extra = curbuf->b_p_ts - col % curbuf->b_p_ts - 1; ++ #endif + if (!list) + { + c = ' '; +*** ../vim-8.1.0104/src/misc1.c 2018-06-19 18:58:04.010489820 +0200 +--- src/misc1.c 2018-06-23 18:50:28.649633665 +0200 +*************** +*** 36,42 **** +--- 36,47 ---- + int + get_indent(void) + { ++ #ifdef FEAT_VARTABS ++ return get_indent_str_vtab(ml_get_curline(), (int)curbuf->b_p_ts, ++ curbuf->b_p_vts_array, FALSE); ++ #else + return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts, FALSE); ++ #endif + } + + /* +*************** +*** 45,51 **** +--- 50,61 ---- + int + get_indent_lnum(linenr_T lnum) + { ++ #ifdef FEAT_VARTABS ++ return get_indent_str_vtab(ml_get(lnum), (int)curbuf->b_p_ts, ++ curbuf->b_p_vts_array, FALSE); ++ #else + return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts, FALSE); ++ #endif + } + + #if defined(FEAT_FOLDING) || defined(PROTO) +*************** +*** 56,62 **** +--- 66,77 ---- + int + get_indent_buf(buf_T *buf, linenr_T lnum) + { ++ #ifdef FEAT_VARTABS ++ return get_indent_str_vtab(ml_get_buf(buf, lnum, FALSE), ++ (int)curbuf->b_p_ts, buf->b_p_vts_array, FALSE); ++ #else + return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts, FALSE); ++ #endif + } + #endif + +*************** +*** 91,96 **** +--- 106,142 ---- + return count; + } + ++ #ifdef FEAT_VARTABS ++ /* ++ * Count the size (in window cells) of the indent in line "ptr", using ++ * variable tabstops. ++ * if "list" is TRUE, count only screen size for tabs. ++ */ ++ int ++ get_indent_str_vtab(char_u *ptr, int ts, int *vts, int list) ++ { ++ int count = 0; ++ ++ for ( ; *ptr; ++ptr) ++ { ++ if (*ptr == TAB) /* count a tab for what it is worth */ ++ { ++ if (!list || lcs_tab1) ++ count += tabstop_padding(count, ts, vts); ++ else ++ /* In list mode, when tab is not set, count screen char width ++ * for Tab, displays: ^I */ ++ count += ptr2cells(ptr); ++ } ++ else if (*ptr == ' ') ++ ++count; /* count a space for one */ ++ else ++ break; ++ } ++ return count; ++ } ++ #endif ++ + /* + * Set the indent of the current line. + * Leaves the cursor on the first non-blank in the line. +*************** +*** 115,120 **** +--- 161,169 ---- + int line_len; + int doit = FALSE; + int ind_done = 0; /* measured in spaces */ ++ #ifdef FEAT_VARTABS ++ int ind_col = 0; ++ #endif + int tab_pad; + int retval = FALSE; + int orig_char_len = -1; /* number of initial whitespace chars when +*************** +*** 147,154 **** +--- 196,208 ---- + { + if (*p == TAB) + { ++ #ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_pad = (int)curbuf->b_p_ts + - (ind_done % (int)curbuf->b_p_ts); ++ #endif + /* stop if this tab will overshoot the target */ + if (todo < tab_pad) + break; +*************** +*** 165,187 **** +--- 219,269 ---- + ++p; + } + ++ #ifdef FEAT_VARTABS ++ /* These diverge from this point. */ ++ ind_col = ind_done; ++ #endif + /* Set initial number of whitespace chars to copy if we are + * preserving indent but expandtab is set */ + if (curbuf->b_p_et) + orig_char_len = ind_len; + + /* Fill to next tabstop with a tab, if possible */ ++ #ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); ++ #endif + if (todo >= tab_pad && orig_char_len == -1) + { + doit = TRUE; + todo -= tab_pad; + ++ind_len; + /* ind_done += tab_pad; */ ++ #ifdef FEAT_VARTABS ++ ind_col += tab_pad; ++ #endif + } + } + + /* count tabs required for indent */ ++ #ifdef FEAT_VARTABS ++ for (;;) ++ { ++ tab_pad = tabstop_padding(ind_col, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ if (todo < tab_pad) ++ break; ++ if (*p != TAB) ++ doit = TRUE; ++ else ++ ++p; ++ todo -= tab_pad; ++ ++ind_len; ++ ind_col += tab_pad; ++ } ++ #else + while (todo >= (int)curbuf->b_p_ts) + { + if (*p != TAB) +*************** +*** 192,197 **** +--- 274,280 ---- + ++ind_len; + /* ind_done += (int)curbuf->b_p_ts; */ + } ++ #endif + } + /* count spaces required for indent */ + while (todo > 0) +*************** +*** 266,273 **** +--- 349,361 ---- + { + if (*p == TAB) + { ++ #ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_pad = (int)curbuf->b_p_ts + - (ind_done % (int)curbuf->b_p_ts); ++ #endif + /* stop if this tab will overshoot the target */ + if (todo < tab_pad) + break; +*************** +*** 283,303 **** +--- 371,412 ---- + } + + /* Fill to next tabstop with a tab, if possible */ ++ #ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); ++ #endif + if (todo >= tab_pad) + { + *s++ = TAB; + todo -= tab_pad; ++ #ifdef FEAT_VARTABS ++ ind_done += tab_pad; ++ #endif + } + + p = skipwhite(p); + } + ++ #ifdef FEAT_VARTABS ++ for (;;) ++ { ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ if (todo < tab_pad) ++ break; ++ *s++ = TAB; ++ todo -= tab_pad; ++ ind_done += tab_pad; ++ } ++ #else + while (todo >= (int)curbuf->b_p_ts) + { + *s++ = TAB; + todo -= (int)curbuf->b_p_ts; + } ++ #endif + } + while (todo > 0) + { +*************** +*** 350,355 **** +--- 459,467 ---- + int tab_pad; + int ind_done; + int round; ++ #ifdef FEAT_VARTABS ++ int ind_col; ++ #endif + + /* Round 1: compute the number of characters needed for the indent + * Round 2: copy the characters. */ +*************** +*** 358,363 **** +--- 470,478 ---- + todo = size; + ind_len = 0; + ind_done = 0; ++ #ifdef FEAT_VARTABS ++ ind_col = 0; ++ #endif + s = src; + + /* Count/copy the usable portion of the source line */ +*************** +*** 365,382 **** +--- 480,508 ---- + { + if (*s == TAB) + { ++ #ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_pad = (int)curbuf->b_p_ts + - (ind_done % (int)curbuf->b_p_ts); ++ #endif + /* Stop if this tab will overshoot the target */ + if (todo < tab_pad) + break; + todo -= tab_pad; + ind_done += tab_pad; ++ #ifdef FEAT_VARTABS ++ ind_col += tab_pad; ++ #endif + } + else + { + --todo; + ++ind_done; ++ #ifdef FEAT_VARTABS ++ ++ind_col; ++ #endif + } + ++ind_len; + if (p != NULL) +*************** +*** 385,406 **** + } + + /* Fill to next tabstop with a tab, if possible */ + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); + if (todo >= tab_pad && !curbuf->b_p_et) + { + todo -= tab_pad; + ++ind_len; + if (p != NULL) + *p++ = TAB; + } + + /* Add tabs required for indent */ +! while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et) + { +! todo -= (int)curbuf->b_p_ts; +! ++ind_len; +! if (p != NULL) +! *p++ = TAB; + } + + /* Count/add spaces required for indent */ +--- 511,558 ---- + } + + /* Fill to next tabstop with a tab, if possible */ ++ #ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_array); ++ #else + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); ++ #endif + if (todo >= tab_pad && !curbuf->b_p_et) + { + todo -= tab_pad; + ++ind_len; ++ #ifdef FEAT_VARTABS ++ ind_col += tab_pad; ++ #endif + if (p != NULL) + *p++ = TAB; + } + + /* Add tabs required for indent */ +! if (!curbuf->b_p_et) + { +! #ifdef FEAT_VARTABS +! for (;;) +! { +! tab_pad = tabstop_padding(ind_col, curbuf->b_p_ts, +! curbuf->b_p_vts_array); +! if (todo < tab_pad) +! break; +! todo -= tab_pad; +! ++ind_len; +! ind_col += tab_pad; +! if (p != NULL) +! *p++ = TAB; +! } +! #else +! while (todo >= (int)curbuf->b_p_ts) +! { +! todo -= (int)curbuf->b_p_ts; +! ++ind_len; +! if (p != NULL) +! *p++ = TAB; +! } +! #endif + } + + /* Count/add spaces required for indent */ +*************** +*** 497,502 **** +--- 649,657 ---- + static long prev_ts = 0L; /* cached tabstop value */ + static char_u *prev_line = NULL; /* cached pointer to line */ + static varnumber_T prev_tick = 0; /* changedtick of cached value */ ++ #ifdef FEAT_VARTABS ++ static int *prev_vts = NULL; /* cached vartabs values */ ++ #endif + int bri = 0; + /* window width minus window margin space, i.e. what rests for text */ + const int eff_wwidth = wp->w_width +*************** +*** 506,518 **** + + /* used cached indent, unless pointer or 'tabstop' changed */ + if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts +! || prev_tick != CHANGEDTICK(wp->w_buffer)) + { + prev_line = line; + prev_ts = wp->w_buffer->b_p_ts; + prev_tick = CHANGEDTICK(wp->w_buffer); + prev_indent = get_indent_str(line, + (int)wp->w_buffer->b_p_ts, wp->w_p_list); + } + bri = prev_indent + wp->w_p_brishift; + +--- 661,684 ---- + + /* used cached indent, unless pointer or 'tabstop' changed */ + if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts +! || prev_tick != CHANGEDTICK(wp->w_buffer) +! #ifdef FEAT_VARTABS +! || prev_vts != wp->w_buffer->b_p_vts_array +! #endif +! ) + { + prev_line = line; + prev_ts = wp->w_buffer->b_p_ts; + prev_tick = CHANGEDTICK(wp->w_buffer); ++ #ifdef FEAT_VARTABS ++ prev_vts = wp->w_buffer->b_p_vts_array; ++ prev_indent = get_indent_str_vtab(line, ++ (int)wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_array, wp->w_p_list); ++ #else + prev_indent = get_indent_str(line, + (int)wp->w_buffer->b_p_ts, wp->w_p_list); ++ #endif + } + bri = prev_indent + wp->w_p_brishift; + +*************** +*** 741,747 **** +--- 907,918 ---- + /* + * count white space on current line + */ ++ #ifdef FEAT_VARTABS ++ newindent = get_indent_str_vtab(saved_line, curbuf->b_p_ts, ++ curbuf->b_p_vts_array, FALSE); ++ #else + newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE); ++ #endif + if (newindent == 0 && !(flags & OPENLINE_COM_LIST)) + newindent = second_line_indent; /* for ^^D command in insert mode */ + +*************** +*** 1264,1270 **** + || do_si + #endif + ) +! newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE); + + /* Add the indent offset */ + if (newindent + off < 0) +--- 1435,1447 ---- + || do_si + #endif + ) +! #ifdef FEAT_VARTABS +! newindent = get_indent_str_vtab(leader, curbuf->b_p_ts, +! curbuf->b_p_vts_array, FALSE); +! #else +! newindent = get_indent_str(leader, +! (int)curbuf->b_p_ts, FALSE); +! #endif + + /* Add the indent offset */ + if (newindent + off < 0) +*** ../vim-8.1.0104/src/ops.c 2018-06-03 14:42:17.844505109 +0200 +--- src/ops.c 2018-06-23 18:36:27.566311089 +0200 +*************** +*** 398,403 **** +--- 398,406 ---- + char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; + int p_sw = (int)get_sw_value(curbuf); ++ #ifdef FEAT_VARTABS ++ int *p_vts = curbuf->b_p_vts_array; ++ #endif + int p_ts = (int)curbuf->b_p_ts; + struct block_def bd; + int incr; +*************** +*** 459,470 **** +--- 462,480 ---- + } + /* OK, now total=all the VWS reqd, and textstart points at the 1st + * non-ws char in the block. */ ++ #ifdef FEAT_VARTABS ++ if (!curbuf->b_p_et) ++ tabstop_fromto(ws_vcol, ws_vcol + total, p_ts, p_vts, &i, &j); ++ else ++ j = total; ++ #else + if (!curbuf->b_p_et) + i = ((ws_vcol % p_ts) + total) / p_ts; /* number of tabs */ + if (i) + j = ((ws_vcol % p_ts) + total) % p_ts; /* number of spp */ + else + j = total; ++ #endif + /* if we're splitting a TAB, allow for it */ + bd.textcol -= bd.pre_whitesp_c - (bd.startspaces != 0); + len = (int)STRLEN(bd.textstart) + 1; +*************** +*** 3697,3706 **** +--- 3707,3725 ---- + { + /* Don't need to insert spaces when "p" on the last position of a + * tab or "P" on the first position. */ ++ #ifdef FEAT_VARTABS ++ int viscol = getviscol(); ++ if (dir == FORWARD ++ ? tabstop_padding(viscol, curbuf->b_p_ts, ++ curbuf->b_p_vts_array) != 1 ++ : curwin->w_cursor.coladd > 0) ++ coladvance_force(viscol); ++ #else + if (dir == FORWARD + ? (int)curwin->w_cursor.coladd < curbuf->b_p_ts - 1 + : curwin->w_cursor.coladd > 0) + coladvance_force(getviscol()); ++ #endif + else + curwin->w_cursor.coladd = 0; + } +*** ../vim-8.1.0104/src/option.c 2018-06-17 19:08:26.472323943 +0200 +--- src/option.c 2018-06-23 18:53:46.500525908 +0200 +*************** +*** 182,187 **** +--- 182,191 ---- + # define PV_UDF OPT_BUF(BV_UDF) + #endif + #define PV_WM OPT_BUF(BV_WM) ++ #ifdef FEAT_VARTABS ++ # define PV_VSTS OPT_BUF(BV_VSTS) ++ # define PV_VTS OPT_BUF(BV_VTS) ++ #endif + + /* + * Definition of the PV_ values for window-local options. +*************** +*** 371,376 **** +--- 375,384 ---- + static int p_udf; + #endif + static long p_wm; ++ #ifdef FEAT_VARTABS ++ static char_u *p_vsts; ++ static char_u *p_vts; ++ #endif + #ifdef FEAT_KEYMAP + static char_u *p_keymap; + #endif +*************** +*** 390,395 **** +--- 398,406 ---- + static long p_sts_nopaste; + static long p_tw_nopaste; + static long p_wm_nopaste; ++ #ifdef FEAT_VARTABS ++ static char_u *p_vsts_nopaste; ++ #endif + + struct vimoption + { +*************** +*** 2925,2930 **** +--- 2936,2959 ---- + {"updatetime", "ut", P_NUM|P_VI_DEF, + (char_u *)&p_ut, PV_NONE, + {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT}, ++ {"varsofttabstop", "vsts", P_STRING|P_VI_DEF|P_VIM|P_COMMA, ++ #ifdef FEAT_VARTABS ++ (char_u *)&p_vsts, PV_VSTS, ++ {(char_u *)"", (char_u *)0L} ++ #else ++ (char_u *)NULL, PV_NONE, ++ {(char_u *)"", (char_u *)NULL} ++ #endif ++ SCRIPTID_INIT}, ++ {"vartabstop", "vts", P_STRING|P_VI_DEF|P_VIM|P_RBUF|P_COMMA, ++ #ifdef FEAT_VARTABS ++ (char_u *)&p_vts, PV_VTS, ++ {(char_u *)"", (char_u *)0L} ++ #else ++ (char_u *)NULL, PV_NONE, ++ {(char_u *)"", (char_u *)NULL} ++ #endif ++ SCRIPTID_INIT}, + {"verbose", "vbs", P_NUM|P_VI_DEF, + (char_u *)&p_verbose, PV_NONE, + {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, +*************** +*** 5608,5613 **** +--- 5637,5646 ---- + /* Parse default for 'clipboard' */ + (void)check_clipboard_option(); + #endif ++ #ifdef FEAT_VARTABS ++ tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_array); ++ tabstop_set(curbuf->b_p_vts, &curbuf->b_p_vts_array); ++ #endif + } + + /* +*************** +*** 5725,5730 **** +--- 5758,5767 ---- + #ifdef FEAT_MBYTE + check_string_option(&buf->b_p_menc); + #endif ++ #ifdef FEAT_VARTABS ++ check_string_option(&buf->b_p_vsts); ++ check_string_option(&buf->b_p_vts); ++ #endif + } + + /* +*************** +*** 7472,7477 **** +--- 7509,7596 ---- + } + #endif + ++ #ifdef FEAT_VARTABS ++ /* 'varsofttabstop' */ ++ else if (varp == &(curbuf->b_p_vsts)) ++ { ++ char_u *cp; ++ ++ if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) ++ { ++ if (curbuf->b_p_vsts_array) ++ { ++ vim_free(curbuf->b_p_vsts_array); ++ curbuf->b_p_vsts_array = 0; ++ } ++ } ++ else ++ { ++ for (cp = *varp; *cp; ++cp) ++ { ++ if (vim_isdigit(*cp)) ++ continue; ++ if (*cp == ',' && cp > *varp && *(cp-1) != ',') ++ continue; ++ errmsg = e_invarg; ++ break; ++ } ++ if (errmsg == NULL) ++ { ++ int *oldarray = curbuf->b_p_vsts_array; ++ if (tabstop_set(*varp, &(curbuf->b_p_vsts_array))) ++ { ++ if (oldarray) ++ vim_free(oldarray); ++ } ++ else ++ errmsg = e_invarg; ++ } ++ } ++ } ++ ++ /* 'vartabstop' */ ++ else if (varp == &(curbuf->b_p_vts)) ++ { ++ char_u *cp; ++ ++ if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) ++ { ++ if (curbuf->b_p_vts_array) ++ { ++ vim_free(curbuf->b_p_vts_array); ++ curbuf->b_p_vts_array = NULL; ++ } ++ } ++ else ++ { ++ for (cp = *varp; *cp; ++cp) ++ { ++ if (vim_isdigit(*cp)) ++ continue; ++ if (*cp == ',' && cp > *varp && *(cp-1) != ',') ++ continue; ++ errmsg = e_invarg; ++ break; ++ } ++ if (errmsg == NULL) ++ { ++ int *oldarray = curbuf->b_p_vts_array; ++ if (tabstop_set(*varp, &(curbuf->b_p_vts_array))) ++ { ++ if (oldarray) ++ vim_free(oldarray); ++ #ifdef FEAT_FOLDING ++ if (foldmethodIsIndent(curwin)) ++ foldUpdateAll(curwin); ++ #endif /* FEAT_FOLDING */ ++ } ++ else ++ errmsg = e_invarg; ++ } ++ } ++ } ++ #endif ++ + /* Options that are a list of flags. */ + else + { +*************** +*** 8780,8786 **** +--- 8899,8912 ---- + if (curbuf->b_p_sw < 0) + { + errmsg = e_positive; ++ #ifdef FEAT_VARTABS ++ // Use the first 'vartabstop' value, or 'tabstop' if vts isn't in use. ++ curbuf->b_p_sw = tabstop_count(curbuf->b_p_vts_array) > 0 ++ ? tabstop_first(curbuf->b_p_vts_array) ++ : curbuf->b_p_ts; ++ #else + curbuf->b_p_sw = curbuf->b_p_ts; ++ #endif + } + + /* +*************** +*** 10814,10819 **** +--- 10940,10949 ---- + #ifdef FEAT_SIGNS + case PV_SCL: return (char_u *)&(curwin->w_p_scl); + #endif ++ #ifdef FEAT_VARTABS ++ case PV_VSTS: return (char_u *)&(curbuf->b_p_vsts); ++ case PV_VTS: return (char_u *)&(curbuf->b_p_vts); ++ #endif + default: IEMSG(_("E356: get_varp ERROR")); + } + /* always return a valid pointer to avoid a crash! */ +*************** +*** 11138,11143 **** +--- 11268,11282 ---- + #endif + buf->b_p_sts = p_sts; + buf->b_p_sts_nopaste = p_sts_nopaste; ++ #ifdef FEAT_VARTABS ++ buf->b_p_vsts = vim_strsave(p_vsts); ++ if (p_vsts && p_vsts != empty_option) ++ tabstop_set(p_vsts, &buf->b_p_vsts_array); ++ else ++ buf->b_p_vsts_array = 0; ++ buf->b_p_vsts_nopaste = p_vsts_nopaste ++ ? vim_strsave(p_vsts_nopaste) : NULL; ++ #endif + buf->b_p_sn = p_sn; + #ifdef FEAT_COMMENTS + buf->b_p_com = vim_strsave(p_com); +*************** +*** 11259,11270 **** +--- 11398,11424 ---- + * or to a help buffer. + */ + if (dont_do_help) ++ { + buf->b_p_isk = save_p_isk; ++ #ifdef FEAT_VARTABS ++ if (p_vts && p_vts != empty_option && !buf->b_p_vts_array) ++ tabstop_set(p_vts, &buf->b_p_vts_array); ++ else ++ buf->b_p_vts_array = NULL; ++ #endif ++ } + else + { + buf->b_p_isk = vim_strsave(p_isk); + did_isk = TRUE; + buf->b_p_ts = p_ts; ++ #ifdef FEAT_VARTABS ++ buf->b_p_vts = vim_strsave(p_vts); ++ if (p_vts && p_vts != empty_option && !buf->b_p_vts_array) ++ tabstop_set(p_vts, &buf->b_p_vts_array); ++ else ++ buf->b_p_vts_array = NULL; ++ #endif + buf->b_help = FALSE; + if (buf->b_p_bt[0] == 'h') + clear_string_option(&buf->b_p_bt); +*************** +*** 12084,12089 **** +--- 12238,12249 ---- + buf->b_p_sts_nopaste = buf->b_p_sts; + buf->b_p_ai_nopaste = buf->b_p_ai; + buf->b_p_et_nopaste = buf->b_p_et; ++ #ifdef FEAT_VARTABS ++ if (buf->b_p_vsts_nopaste) ++ vim_free(buf->b_p_vsts_nopaste); ++ buf->b_p_vsts_nopaste = buf->b_p_vsts && buf->b_p_vsts != empty_option ++ ? vim_strsave(buf->b_p_vsts) : NULL; ++ #endif + } + + /* save global options */ +*************** +*** 12102,12107 **** +--- 12262,12272 ---- + p_sts_nopaste = p_sts; + p_tw_nopaste = p_tw; + p_wm_nopaste = p_wm; ++ #ifdef FEAT_VARTABS ++ if (p_vsts_nopaste) ++ vim_free(p_vsts_nopaste); ++ p_vsts_nopaste = p_vsts && p_vsts != empty_option ? vim_strsave(p_vsts) : NULL; ++ #endif + } + + /* +*************** +*** 12116,12121 **** +--- 12281,12294 ---- + buf->b_p_sts = 0; /* softtabstop is 0 */ + buf->b_p_ai = 0; /* no auto-indent */ + buf->b_p_et = 0; /* no expandtab */ ++ #ifdef FEAT_VARTABS ++ if (buf->b_p_vsts) ++ free_string_option(buf->b_p_vsts); ++ buf->b_p_vsts = empty_option; ++ if (buf->b_p_vsts_array) ++ vim_free(buf->b_p_vsts_array); ++ buf->b_p_vsts_array = 0; ++ #endif + } + + /* set global options */ +*************** +*** 12135,12140 **** +--- 12308,12318 ---- + p_wm = 0; + p_sts = 0; + p_ai = 0; ++ #ifdef FEAT_VARTABS ++ if (p_vsts) ++ free_string_option(p_vsts); ++ p_vsts = empty_option; ++ #endif + } + + /* +*************** +*** 12150,12155 **** +--- 12328,12345 ---- + buf->b_p_sts = buf->b_p_sts_nopaste; + buf->b_p_ai = buf->b_p_ai_nopaste; + buf->b_p_et = buf->b_p_et_nopaste; ++ #ifdef FEAT_VARTABS ++ if (buf->b_p_vsts) ++ free_string_option(buf->b_p_vsts); ++ buf->b_p_vsts = buf->b_p_vsts_nopaste ++ ? vim_strsave(buf->b_p_vsts_nopaste) : empty_option; ++ if (buf->b_p_vsts_array) ++ vim_free(buf->b_p_vsts_array); ++ if (buf->b_p_vsts && buf->b_p_vsts != empty_option) ++ tabstop_set(buf->b_p_vsts, &buf->b_p_vsts_array); ++ else ++ buf->b_p_vsts_array = 0; ++ #endif + } + + /* restore global options */ +*************** +*** 12170,12175 **** +--- 12360,12370 ---- + p_sts = p_sts_nopaste; + p_tw = p_tw_nopaste; + p_wm = p_wm_nopaste; ++ #ifdef FEAT_VARTABS ++ if (p_vsts) ++ free_string_option(p_vsts); ++ p_vsts = p_vsts_nopaste ? vim_strsave(p_vsts_nopaste) : empty_option; ++ #endif + } + + old_p_paste = p_paste; +*************** +*** 12510,12515 **** +--- 12705,12999 ---- + return check_opt_strings(p, p_ff_values, FALSE); + } + ++ #ifdef FEAT_VARTABS ++ ++ /* ++ * Set the integer values corresponding to the string setting of 'vartabstop'. ++ */ ++ int ++ tabstop_set(char_u *var, int **array) ++ { ++ int valcount = 1; ++ int t; ++ char_u *cp; ++ ++ if ((!var[0] || (var[0] == '0' && !var[1]))) ++ { ++ *array = NULL; ++ return TRUE; ++ } ++ ++ for (cp = var; *cp; ++cp) ++ { ++ if (cp == var || *(cp - 1) == ',') ++ { ++ char_u *end; ++ if (strtol((char *)cp, (char **)&end, 10) <= 0) ++ { ++ if (cp != end) ++ EMSG(_(e_positive)); ++ else ++ EMSG(_(e_invarg)); ++ return FALSE; ++ } ++ } ++ ++ if (VIM_ISDIGIT(*cp)) ++ continue; ++ if (*cp == ',' && cp > var && *(cp - 1) != ',') ++ { ++ ++valcount; ++ continue; ++ } ++ EMSG(_(e_invarg)); ++ return FALSE; ++ } ++ ++ *array = (int *) alloc((unsigned) ((valcount + 1) * sizeof(int))); ++ (*array)[0] = valcount; ++ ++ t = 1; ++ for (cp = var; *cp;) ++ { ++ (*array)[t++] = atoi((char *)cp); ++ while (*cp && *cp != ',') ++ ++cp; ++ if (*cp) ++ ++cp; ++ } ++ ++ return TRUE; ++ } ++ ++ /* ++ * Calculate the number of screen spaces a tab will occupy. ++ * If "vts" is set then the tab widths are taken from that array, ++ * otherwise the value of ts is used. ++ */ ++ int ++ tabstop_padding(colnr_T col, int ts_arg, int *vts) ++ { ++ int ts = ts_arg == 0 ? 8 : ts_arg; ++ int tabcount; ++ colnr_T tabcol = 0; ++ int t; ++ int padding = 0; ++ ++ if (vts == NULL || vts[0] == 0) ++ return ts - (col % ts); ++ ++ tabcount = vts[0]; ++ ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > col) ++ { ++ padding = (int)(tabcol - col); ++ break; ++ } ++ } ++ if (t > tabcount) ++ padding = vts[tabcount] - (int)((col - tabcol) % vts[tabcount]); ++ ++ return padding; ++ } ++ ++ /* ++ * Find the size of the tab that covers a particular column. ++ */ ++ int ++ tabstop_at(colnr_T col, int ts, int *vts) ++ { ++ int tabcount; ++ colnr_T tabcol = 0; ++ int t; ++ int tab_size = 0; ++ ++ if (vts == 0 || vts[0] == 0) ++ return ts; ++ ++ tabcount = vts[0]; ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > col) ++ { ++ tab_size = vts[t]; ++ break; ++ } ++ } ++ if (t > tabcount) ++ tab_size = vts[tabcount]; ++ ++ return tab_size; ++ } ++ ++ /* ++ * Find the column on which a tab starts. ++ */ ++ colnr_T ++ tabstop_start(colnr_T col, int ts, int *vts) ++ { ++ int tabcount; ++ colnr_T tabcol = 0; ++ int t; ++ int excess; ++ ++ if (vts == 0 || vts[0] == 0) ++ return (col / ts) * ts; ++ ++ tabcount = vts[0]; ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > col) ++ return tabcol - vts[t]; ++ } ++ ++ excess = tabcol % vts[tabcount]; ++ return excess + ((col - excess) / vts[tabcount]) * vts[tabcount]; ++ } ++ ++ /* ++ * Find the number of tabs and spaces necessary to get from one column ++ * to another. ++ */ ++ void ++ tabstop_fromto( ++ colnr_T start_col, ++ colnr_T end_col, ++ int ts, ++ int *vts, ++ int *ntabs, ++ int *nspcs) ++ { ++ int spaces = end_col - start_col; ++ colnr_T tabcol = 0; ++ int padding = 0; ++ int tabcount; ++ int t; ++ ++ if (vts == 0 || vts[0] == 0) ++ { ++ int tabs = 0; ++ int initspc = ts - (start_col % ts); ++ if (spaces >= initspc) ++ { ++ spaces -= initspc; ++ tabs++; ++ } ++ tabs += spaces / ts; ++ spaces -= (spaces / ts) * ts; ++ ++ *ntabs = tabs; ++ *nspcs = spaces; ++ return; ++ } ++ ++ /* Find the padding needed to reach the next tabstop. */ ++ tabcount = vts[0]; ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > start_col) ++ { ++ padding = (int)(tabcol - start_col); ++ break; ++ } ++ } ++ if (t > tabcount) ++ padding = vts[tabcount] - (int)((start_col - tabcol) % vts[tabcount]); ++ ++ /* If the space needed is less than the padding no tabs can be used. */ ++ if (spaces < padding) ++ { ++ *ntabs = 0; ++ *nspcs = spaces; ++ return; ++ } ++ ++ *ntabs = 1; ++ spaces -= padding; ++ ++ /* At least one tab has been used. See if any more will fit. */ ++ while (spaces != 0 && ++t <= tabcount) ++ { ++ padding = vts[t]; ++ if (spaces < padding) ++ { ++ *nspcs = spaces; ++ return; ++ } ++ ++*ntabs; ++ spaces -= padding; ++ } ++ ++ *ntabs += spaces / vts[tabcount]; ++ *nspcs = spaces % vts[tabcount]; ++ } ++ ++ /* ++ * See if two tabstop arrays contain the same values. ++ */ ++ int ++ tabstop_eq(int *ts1, int *ts2) ++ { ++ int t; ++ ++ if ((ts1 == 0 && ts2) || (ts1 && ts2 == 0)) ++ return FALSE; ++ if (ts1 == ts2) ++ return TRUE; ++ if (ts1[0] != ts2[0]) ++ return FALSE; ++ ++ for (t = 1; t <= ts1[0]; ++t) ++ if (ts1[t] != ts2[t]) ++ return FALSE; ++ ++ return TRUE; ++ } ++ ++ /* ++ * Copy a tabstop array, allocating space for the new array. ++ */ ++ int * ++ tabstop_copy(int *oldts) ++ { ++ int *newts; ++ int t; ++ ++ if (oldts == 0) ++ return 0; ++ ++ newts = (int *) alloc((unsigned) ((oldts[0] + 1) * sizeof(int))); ++ for (t = 0; t <= oldts[0]; ++t) ++ newts[t] = oldts[t]; ++ ++ return newts; ++ } ++ ++ /* ++ * Return a count of the number of tabstops. ++ */ ++ int ++ tabstop_count(int *ts) ++ { ++ return ts != NULL ? ts[0] : 0; ++ } ++ ++ /* ++ * Return the first tabstop, or 8 if there are no tabstops defined. ++ */ ++ int ++ tabstop_first(int *ts) ++ { ++ return ts != NULL ? ts[1] : 8; ++ } ++ ++ #endif ++ + /* + * Return the effective shiftwidth value for current buffer, using the + * 'tabstop' value when 'shiftwidth' is zero. +*** ../vim-8.1.0104/src/option.h 2018-05-05 16:28:11.000000000 +0200 +--- src/option.h 2018-06-23 17:41:10.116365995 +0200 +*************** +*** 1114,1119 **** +--- 1114,1123 ---- + #ifdef FEAT_TERMINAL + , BV_TWSL + #endif ++ #ifdef FEAT_VARTABS ++ , BV_VSTS ++ , BV_VTS ++ #endif + , BV_COUNT /* must be the last one */ + }; + +*** ../vim-8.1.0104/src/proto/misc1.pro 2018-05-17 13:52:45.000000000 +0200 +--- src/proto/misc1.pro 2018-06-23 18:20:45.471296904 +0200 +*************** +*** 3,8 **** +--- 3,9 ---- + int get_indent_lnum(linenr_T lnum); + int get_indent_buf(buf_T *buf, linenr_T lnum); + int get_indent_str(char_u *ptr, int ts, int list); ++ int get_indent_str_vtab(char_u *ptr, int ts, int *vts, int list); + int set_indent(int size, int flags); + int get_number_indent(linenr_T lnum); + int get_breakindent_win(win_T *wp, char_u *line); +*** ../vim-8.1.0104/src/proto/option.pro 2018-05-17 13:52:47.000000000 +0200 +--- src/proto/option.pro 2018-06-23 18:38:40.189580238 +0200 +*************** +*** 60,65 **** +--- 60,74 ---- + void save_file_ff(buf_T *buf); + int file_ff_differs(buf_T *buf, int ignore_empty); + int check_ff_value(char_u *p); ++ int tabstop_set(char_u *var, int **array); ++ int tabstop_padding(colnr_T col, int ts_arg, int *vts); ++ int tabstop_at(colnr_T col, int ts, int *vts); ++ colnr_T tabstop_start(colnr_T col, int ts, int *vts); ++ void tabstop_fromto(colnr_T start_col, colnr_T end_col, int ts, int *vts, int *ntabs, int *nspcs); ++ int tabstop_eq(int *ts1, int *ts2); ++ int *tabstop_copy(int *oldts); ++ int tabstop_count(int *ts); ++ int tabstop_first(int *ts); + long get_sw_value(buf_T *buf); + long get_sts_value(void); + void find_mps_values(int *initc, int *findc, int *backwards, int switchit); +*** ../vim-8.1.0104/src/screen.c 2018-06-23 14:21:38.467484932 +0200 +--- src/screen.c 2018-06-23 18:36:56.702150819 +0200 +*************** +*** 4848,4855 **** + vcol_adjusted = vcol - MB_CHARLEN(p_sbr); + #endif + /* tab amount depends on current column */ + tab_len = (int)wp->w_buffer->b_p_ts +! - vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1; + + #ifdef FEAT_LINEBREAK + if (!wp->w_p_lbr || !wp->w_p_list) +--- 4848,4861 ---- + vcol_adjusted = vcol - MB_CHARLEN(p_sbr); + #endif + /* tab amount depends on current column */ ++ #ifdef FEAT_VARTABS ++ tab_len = tabstop_padding(vcol_adjusted, ++ wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_array) - 1; ++ #else + tab_len = (int)wp->w_buffer->b_p_ts +! - vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1; +! #endif + + #ifdef FEAT_LINEBREAK + if (!wp->w_p_lbr || !wp->w_p_list) +*** ../vim-8.1.0104/src/structs.h 2018-06-17 20:10:36.208066158 +0200 +--- src/structs.h 2018-06-23 18:39:12.357402504 +0200 +*************** +*** 2236,2241 **** +--- 2236,2248 ---- + long b_p_wm; /* 'wrapmargin' */ + long b_p_wm_nobin; /* b_p_wm saved for binary mode */ + long b_p_wm_nopaste; /* b_p_wm saved for paste mode */ ++ #ifdef FEAT_VARTABS ++ char_u *b_p_vsts; /* 'varsofttabstop' */ ++ int *b_p_vsts_array; /* 'varsofttabstop' in internal format */ ++ char_u *b_p_vsts_nopaste; /* b_p_vsts saved for paste mode */ ++ char_u *b_p_vts; /* 'vartabstop' */ ++ int *b_p_vts_array; /* 'vartabstop' in internal format */ ++ #endif + #ifdef FEAT_KEYMAP + char_u *b_p_keymap; /* 'keymap' */ + #endif +*** ../vim-8.1.0104/src/testdir/Make_all.mak 2018-06-03 14:42:17.848505102 +0200 +--- src/testdir/Make_all.mak 2018-06-23 17:41:10.116365995 +0200 +*************** +*** 147,154 **** + test_perl.res \ + test_plus_arg_edit.res \ + test_preview.res \ +- test_prompt_buffer.res \ + test_profile.res \ + test_python2.res \ + test_python3.res \ + test_pyx2.res \ +--- 147,154 ---- + test_perl.res \ + test_plus_arg_edit.res \ + test_preview.res \ + test_profile.res \ ++ test_prompt_buffer.res \ + test_python2.res \ + test_python3.res \ + test_pyx2.res \ +*************** +*** 180,185 **** +--- 180,186 ---- + test_undo.res \ + test_user_func.res \ + test_usercommands.res \ ++ test_vartabs.res \ + test_viminfo.res \ + test_vimscript.res \ + test_visual.res \ +*** ../vim-8.1.0104/src/testdir/gen_opt_test.vim 2018-05-05 16:32:49.000000000 +0200 +--- src/testdir/gen_opt_test.vim 2018-06-23 17:41:10.116365995 +0200 +*************** +*** 136,141 **** +--- 136,143 ---- + \ 'toolbariconsize': [['', 'tiny', 'huge'], ['xxx']], + \ 'ttymouse': [['', 'xterm'], ['xxx']], + \ 'ttytype': [[], []], ++ \ 'varsofttabstop': [['8', '4,8,16,32'], ['xxx', '-1', '4,-1,20']], ++ \ 'vartabstop': [['8', '4,8,16,32'], ['xxx', '-1', '4,-1,20']], + \ 'viewoptions': [['', 'cursor', 'unix,slash'], ['xxx']], + \ 'viminfo': [['', '''50', '"30'], ['xxx']], + \ 'virtualedit': [['', 'all', 'all,block'], ['xxx']], +*** ../vim-8.1.0104/src/testdir/test_breakindent.vim 2017-03-01 17:42:25.000000000 +0100 +--- src/testdir/test_breakindent.vim 2018-06-23 19:21:36.118945791 +0200 +*************** +*** 12,146 **** + + let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP" + +! function s:screen_lines(lnum, width) abort + return ScreenLines([a:lnum, a:lnum + 2], a:width) +! endfunction + +! function! s:compare_lines(expect, actual) + call assert_equal(join(a:expect, "\n"), join(a:actual, "\n")) +! endfunction + +! function s:test_windows(...) + call NewWindow(10, 20) + setl ts=4 sw=4 sts=4 breakindent + put =s:input + exe get(a:000, 0, '') +! endfunction + +! function s:close_windows(...) + call CloseWindow() + exe get(a:000, 0, '') +! endfunction + +! function Test_breakindent01() + " simple breakindent test + call s:test_windows('setl briopt=min:0') +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ " abcd", +! \ " qrst", +! \ " GHIJ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunction + +! function Test_breakindent02() + " simple breakindent test with showbreak set + call s:test_windows('setl briopt=min:0 sbr=>>') +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ " abcd", +! \ " >>qr", +! \ " >>EF", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent03() + " simple breakindent test with showbreak set and briopt including sbr + call s:test_windows('setl briopt=sbr,min:0 sbr=++') +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ " abcd", +! \ "++ qrst", +! \ "++ GHIJ", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent04() + " breakindent set with min width 18 + call s:test_windows('setl sbr= briopt=min:18') +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ " abcd", +! \ " qrstuv", +! \ " IJKLMN", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent05() + " breakindent set and shift by 2 + call s:test_windows('setl briopt=shift:2,min:0') +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ " abcd", +! \ " qr", +! \ " EF", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunction + +! function Test_breakindent06() + " breakindent set and shift by -1 + call s:test_windows('setl briopt=shift:-1,min:0') +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ " abcd", +! \ " qrstu", +! \ " HIJKL", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunction + +! function Test_breakindent07() + " breakindent set and shift by 1, Number set sbr=? and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n') +! let lines=s:screen_lines(line('.'),10) +! let expect=[ +! \ " 2 ab", +! \ "? m", +! \ "? x", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr= cpo-=n') +! endfunction + +! function Test_breakindent07a() + " breakindent set and shift by 1, Number set sbr=? and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4') +! let lines=s:screen_lines(line('.'),10) +! let expect=[ +! \ " 2 ab", +! \ " ? m", +! \ " ? x", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent08() + " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4') + " make sure, cache is invalidated! +--- 12,278 ---- + + let s:input ="\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP" + +! func s:screen_lines(lnum, width) abort + return ScreenLines([a:lnum, a:lnum + 2], a:width) +! endfunc + +! func s:compare_lines(expect, actual) + call assert_equal(join(a:expect, "\n"), join(a:actual, "\n")) +! endfunc + +! func s:test_windows(...) + call NewWindow(10, 20) + setl ts=4 sw=4 sts=4 breakindent + put =s:input + exe get(a:000, 0, '') +! endfunc + +! func s:close_windows(...) + call CloseWindow() + exe get(a:000, 0, '') +! endfunc + +! func Test_breakindent01() + " simple breakindent test + call s:test_windows('setl briopt=min:0') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qrst", +! \ " GHIJ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunc + +! func Test_breakindent01_vartabs() +! " like 01 but with vartabs feature +! if !has("vartabs") +! return +! endif +! call s:test_windows('setl briopt=min:0 vts=4') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qrst", +! \ " GHIJ", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set vts&') +! endfunc +! +! func Test_breakindent02() + " simple breakindent test with showbreak set + call s:test_windows('setl briopt=min:0 sbr=>>') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " >>qr", +! \ " >>EF", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr=') +! endfunc +! +! func Test_breakindent02_vartabs() +! if !has("vartabs") +! return +! endif +! " simple breakindent test with showbreak set +! call s:test_windows('setl briopt=min:0 sbr=>> vts=4') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " >>qr", +! \ " >>EF", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set sbr= vts&') +! endfunc + +! func Test_breakindent03() + " simple breakindent test with showbreak set and briopt including sbr + call s:test_windows('setl briopt=sbr,min:0 sbr=++') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ "++ qrst", +! \ "++ GHIJ", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr=') +! endfunc + +! func Test_breakindent03_vartabs() +! " simple breakindent test with showbreak set and briopt including sbr +! if !has("vartabs") +! return +! endif +! call s:test_windows('setl briopt=sbr,min:0 sbr=++ vts=4') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ "++ qrst", +! \ "++ GHIJ", +! \ ] +! call s:compare_lines(expect, lines) +! " clean up +! call s:close_windows('set sbr= vts&') +! endfunc +! +! func Test_breakindent04() + " breakindent set with min width 18 + call s:test_windows('setl sbr= briopt=min:18') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qrstuv", +! \ " IJKLMN", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr=') +! endfunc + +! func Test_breakindent04_vartabs() +! " breakindent set with min width 18 +! if !has("vartabs") +! return +! endif +! call s:test_windows('setl sbr= briopt=min:18 vts=4') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qrstuv", +! \ " IJKLMN", +! \ ] +! call s:compare_lines(expect, lines) +! " clean up +! call s:close_windows('set sbr= vts&') +! endfunc +! +! func Test_breakindent05() + " breakindent set and shift by 2 + call s:test_windows('setl briopt=shift:2,min:0') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qr", +! \ " EF", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunc +! +! func Test_breakindent05_vartabs() +! " breakindent set and shift by 2 +! if !has("vartabs") +! return +! endif +! call s:test_windows('setl briopt=shift:2,min:0 vts=4') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qr", +! \ " EF", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set vts&') +! endfunc + +! func Test_breakindent06() + " breakindent set and shift by -1 + call s:test_windows('setl briopt=shift:-1,min:0') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qrstu", +! \ " HIJKL", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunc + +! func Test_breakindent06_vartabs() +! " breakindent set and shift by -1 +! if !has("vartabs") +! return +! endif +! call s:test_windows('setl briopt=shift:-1,min:0 vts=4') +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ " abcd", +! \ " qrstu", +! \ " HIJKL", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set vts&') +! endfunc +! +! func Test_breakindent07() + " breakindent set and shift by 1, Number set sbr=? and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ab", +! \ "? m", +! \ "? x", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr= cpo-=n') +! endfunc +! +! func Test_breakindent07_vartabs() +! if !has("vartabs") +! return +! endif +! " breakindent set and shift by 1, Number set sbr=? and briopt:sbr +! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 cpo+=n vts=4') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ab", +! \ "? m", +! \ "? x", +! \ ] +! call s:compare_lines(expect, lines) +! " clean up +! call s:close_windows('set sbr= cpo-=n vts&') +! endfunc + +! func Test_breakindent07a() + " breakindent set and shift by 1, Number set sbr=? and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ab", +! \ " ? m", +! \ " ? x", +! \ ] + call s:compare_lines(expect, lines) + " clean up + call s:close_windows('set sbr=') +! endfunc +! +! func Test_breakindent07a_vartabs() +! if !has("vartabs") +! return +! endif +! " breakindent set and shift by 1, Number set sbr=? and briopt:sbr +! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu sbr=? nuw=4 vts=4') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ab", +! \ " ? m", +! \ " ? x", +! \ ] +! call s:compare_lines(expect, lines) +! " clean up +! call s:close_windows('set sbr= vts&') +! endfunc + +! func Test_breakindent08() + " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4') + " make sure, cache is invalidated! +*************** +*** 148,190 **** + redraw! + set ts=4 + redraw! +! let lines=s:screen_lines(line('.'),10) +! let expect=[ +! \ " 2 ^Iabcd", +! \ "# opq", +! \ "# BCD", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr= cpo-=n') +! endfunction + +! function Test_breakindent08a() + " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list') +! let lines=s:screen_lines(line('.'),10) +! let expect=[ +! \ " 2 ^Iabcd", +! \ " # opq", +! \ " # BCD", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent09() + " breakindent set and shift by 1, Number and list set sbr=# + call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list') +! let lines=s:screen_lines(line('.'),10) +! let expect=[ +! \ " 2 ^Iabcd", +! \ " #op", +! \ " #AB", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent10() + " breakindent set, Number set sbr=~ + call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0') + " make sure, cache is invalidated! +--- 280,375 ---- + redraw! + set ts=4 + redraw! +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ^Iabcd", +! \ "# opq", +! \ "# BCD", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr= cpo-=n') +! endfunc + +! func Test_breakindent08_vartabs() +! if !has("vartabs") +! return +! endif +! " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr +! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list cpo+=n ts=4 vts=4') +! " make sure, cache is invalidated! +! set ts=8 +! redraw! +! set ts=4 +! redraw! +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ^Iabcd", +! \ "# opq", +! \ "# BCD", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set sbr= cpo-=n vts&') +! endfunc +! +! func Test_breakindent08a() + " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr + call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ^Iabcd", +! \ " # opq", +! \ " # BCD", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr=') +! endfunc +! +! func Test_breakindent08a_vartabs() +! if !has("vartabs") +! return +! endif +! " breakindent set and shift by 1, Number and list set sbr=# and briopt:sbr +! call s:test_windows('setl briopt=shift:1,sbr,min:0 nu nuw=4 sbr=# list vts=4') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ^Iabcd", +! \ " # opq", +! \ " # BCD", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set sbr= vts&') +! endfunc + +! func Test_breakindent09() + " breakindent set and shift by 1, Number and list set sbr=# + call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ^Iabcd", +! \ " #op", +! \ " #AB", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr=') +! endfunc + +! func Test_breakindent09_vartabs() +! if !has("vartabs") +! return +! endif +! " breakindent set and shift by 1, Number and list set sbr=# +! call s:test_windows('setl briopt=shift:1,min:0 nu nuw=4 sbr=# list vts=4') +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ^Iabcd", +! \ " #op", +! \ " #AB", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set sbr= vts&') +! endfunc +! +! func Test_breakindent10() + " breakindent set, Number set sbr=~ + call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0') + " make sure, cache is invalidated! +*************** +*** 192,232 **** + redraw! + set ts=4 + redraw! +! let lines=s:screen_lines(line('.'),10) +! let expect=[ +! \ " 2 ab", +! \ "~ mn", +! \ "~ yz", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr= cpo-=n') +! endfunction + +! function Test_breakindent11() + " test strdisplaywidth() + call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4') +! let text=getline(2) + let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times + call assert_equal(width, strdisplaywidth(text)) + call s:close_windows('set sbr=') +! endfunction + +! function Test_breakindent12() + " test breakindent with long indent +! let s:input="\t\t\t\t\t{" + call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-') +! let lines=s:screen_lines(2,16) +! let expect=[ +! \ " 2 >--->--->--->", +! \ " ---{ ", +! \ "~ ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set nuw=4 listchars=') +! endfunction + +! function Test_breakindent13() +! let s:input="" + call s:test_windows('setl breakindent briopt=min:10 ts=8') + vert resize 20 + call setline(1, [" a\tb\tc\td\te", " z y x w v"]) +--- 377,467 ---- + redraw! + set ts=4 + redraw! +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ab", +! \ "~ mn", +! \ "~ yz", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set sbr= cpo-=n') +! endfunc + +! func Test_breakindent10_vartabs() +! if !has("vartabs") +! return +! endif +! " breakindent set, Number set sbr=~ +! call s:test_windows('setl cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0 vts=4') +! " make sure, cache is invalidated! +! set ts=8 +! redraw! +! set ts=4 +! redraw! +! let lines = s:screen_lines(line('.'),10) +! let expect = [ +! \ " 2 ab", +! \ "~ mn", +! \ "~ yz", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set sbr= cpo-=n vts&') +! endfunc +! +! func Test_breakindent11() + " test strdisplaywidth() + call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4') +! let text = getline(2) + let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times + call assert_equal(width, strdisplaywidth(text)) + call s:close_windows('set sbr=') +! endfunc +! +! func Test_breakindent11_vartabs() +! if !has("vartabs") +! return +! endif +! " test strdisplaywidth() +! call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4') +! let text = getline(2) +! let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times +! call assert_equal(width, strdisplaywidth(text)) +! call s:close_windows('set sbr= vts&') +! endfunc + +! func Test_breakindent12() + " test breakindent with long indent +! let s:input = "\t\t\t\t\t{" + call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>-') +! let lines = s:screen_lines(2,16) +! let expect = [ +! \ " 2 >--->--->--->", +! \ " ---{ ", +! \ "~ ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows('set nuw=4 listchars=') +! endfunc + +! func Test_breakindent12_vartabs() +! if !has("vartabs") +! return +! endif +! " test breakindent with long indent +! let s:input = "\t\t\t\t\t{" +! call s:test_windows('setl breakindent linebreak briopt=min:10 nu numberwidth=3 ts=4 list listchars=tab:>- vts=4') +! let lines = s:screen_lines(2,16) +! let expect = [ +! \ " 2 >--->--->--->", +! \ " ---{ ", +! \ "~ ", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set nuw=4 listchars= vts&') +! endfunc +! +! func Test_breakindent13() +! let s:input = "" + call s:test_windows('setl breakindent briopt=min:10 ts=8') + vert resize 20 + call setline(1, [" a\tb\tc\td\te", " z y x w v"]) +*************** +*** 237,298 **** + call assert_equal('d', @a) + call assert_equal('w', @b) + call s:close_windows() +! endfunction + +! function Test_breakindent14() +! let s:input="" + call s:test_windows('setl breakindent briopt= ts=8') + vert resize 30 + norm! 3a1234567890 + norm! a abcde + exec "norm! 0\<C-V>tex" +! let lines=s:screen_lines(line('.'),8) +! let expect=[ +! \ "e ", +! \ "~ ", +! \ "~ ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunction + +! function Test_breakindent15() +! let s:input="" + call s:test_windows('setl breakindent briopt= ts=8 sw=8') + vert resize 30 + norm! 4a1234567890 + exe "normal! >>\<C-V>3f0x" +! let lines=s:screen_lines(line('.'),20) +! let expect=[ +! \ " 1234567890 ", +! \ "~ ", +! \ "~ ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunction + +! function Test_breakindent16() + " Check that overlong lines are indented correctly. +! let s:input="" + call s:test_windows('setl breakindent briopt=min:0 ts=4') + call setline(1, "\t".repeat("1234567890", 10)) + resize 6 + norm! 1gg$ + redraw! +! let lines=s:screen_lines(1,10) +! let expect=[ +! \ " 789012", +! \ " 345678", +! \ " 901234", +! \ ] +! call s:compare_lines(expect, lines) +! let lines=s:screen_lines(4,10) +! let expect=[ +! \ " 567890", +! \ " 123456", +! \ " 7890 ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunction +--- 472,617 ---- + call assert_equal('d', @a) + call assert_equal('w', @b) + call s:close_windows() +! endfunc + +! func Test_breakindent13_vartabs() +! if !has("vartabs") +! return +! endif +! let s:input = "" +! call s:test_windows('setl breakindent briopt=min:10 ts=8 vts=8') +! vert resize 20 +! call setline(1, [" a\tb\tc\td\te", " z y x w v"]) +! 1 +! norm! fbgj"ayl +! 2 +! norm! fygj"byl +! call assert_equal('d', @a) +! call assert_equal('w', @b) +! call s:close_windows('set vts&') +! endfunc +! +! func Test_breakindent14() +! let s:input = "" + call s:test_windows('setl breakindent briopt= ts=8') + vert resize 30 + norm! 3a1234567890 + norm! a abcde + exec "norm! 0\<C-V>tex" +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ "e ", +! \ "~ ", +! \ "~ ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunc +! +! func Test_breakindent14_vartabs() +! if !has("vartabs") +! return +! endif +! let s:input = "" +! call s:test_windows('setl breakindent briopt= ts=8 vts=8') +! vert resize 30 +! norm! 3a1234567890 +! norm! a abcde +! exec "norm! 0\<C-V>tex" +! let lines = s:screen_lines(line('.'),8) +! let expect = [ +! \ "e ", +! \ "~ ", +! \ "~ ", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set vts&') +! endfunc + +! func Test_breakindent15() +! let s:input = "" + call s:test_windows('setl breakindent briopt= ts=8 sw=8') + vert resize 30 + norm! 4a1234567890 + exe "normal! >>\<C-V>3f0x" +! let lines = s:screen_lines(line('.'),20) +! let expect = [ +! \ " 1234567890 ", +! \ "~ ", +! \ "~ ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunc +! +! func Test_breakindent15_vartabs() +! if !has("vartabs") +! return +! endif +! let s:input = "" +! call s:test_windows('setl breakindent briopt= ts=8 sw=8 vts=8') +! vert resize 30 +! norm! 4a1234567890 +! exe "normal! >>\<C-V>3f0x" +! let lines = s:screen_lines(line('.'),20) +! let expect = [ +! \ " 1234567890 ", +! \ "~ ", +! \ "~ ", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set vts&') +! endfunc + +! func Test_breakindent16() + " Check that overlong lines are indented correctly. +! let s:input = "" + call s:test_windows('setl breakindent briopt=min:0 ts=4') + call setline(1, "\t".repeat("1234567890", 10)) + resize 6 + norm! 1gg$ + redraw! +! let lines = s:screen_lines(1,10) +! let expect = [ +! \ " 789012", +! \ " 345678", +! \ " 901234", +! \ ] +! call s:compare_lines(expect, lines) +! let lines = s:screen_lines(4,10) +! let expect = [ +! \ " 567890", +! \ " 123456", +! \ " 7890 ", +! \ ] + call s:compare_lines(expect, lines) + call s:close_windows() +! endfunc +! +! func Test_breakindent16_vartabs() +! if !has("vartabs") +! return +! endif +! " Check that overlong lines are indented correctly. +! let s:input = "" +! call s:test_windows('setl breakindent briopt=min:0 ts=4 vts=4') +! call setline(1, "\t".repeat("1234567890", 10)) +! resize 6 +! norm! 1gg$ +! redraw! +! let lines = s:screen_lines(1,10) +! let expect = [ +! \ " 789012", +! \ " 345678", +! \ " 901234", +! \ ] +! call s:compare_lines(expect, lines) +! let lines = s:screen_lines(4,10) +! let expect = [ +! \ " 567890", +! \ " 123456", +! \ " 7890 ", +! \ ] +! call s:compare_lines(expect, lines) +! call s:close_windows('set vts&') +! endfunc +*** ../vim-8.1.0104/src/testdir/test_vartabs.vim 2018-06-23 19:18:52.740059396 +0200 +--- src/testdir/test_vartabs.vim 2018-06-23 18:05:31.387656858 +0200 +*************** +*** 0 **** +--- 1,257 ---- ++ " Test for variable tabstops ++ ++ if !has("vartabs") ++ finish ++ endif ++ ++ func! Test_vartabs() ++ new ++ %d ++ ++ " Test normal operation of tabstops ... ++ set ts=4 ++ call setline(1, join(split('aaaaa', '\zs'), "\t")) ++ retab 8 ++ let expect = "a a\<tab>a a\<tab>a" ++ call assert_equal(expect, getline(1)) ++ ++ " ... and softtabstops ++ set ts=8 sts=6 ++ exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b" ++ let expect = "b b\<tab> b\<tab> b\<tab>b" ++ call assert_equal(expect, getline(1)) ++ ++ " Test variable tabstops. ++ set sts=0 vts=4,8,4,8 ++ exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c" ++ retab 8 ++ let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c" ++ call assert_equal(expect, getline(1)) ++ ++ set et vts=4,8,4,8 ++ exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d" ++ let expect = "d d d d d d" ++ call assert_equal(expect, getline(1)) ++ ++ " Changing ts should have no effect if vts is in use. ++ call cursor(1, 1) ++ set ts=6 ++ exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e" ++ let expect = "e e e e e e" ++ call assert_equal(expect, getline(1)) ++ ++ " Clearing vts should revert to using ts. ++ set vts= ++ exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f" ++ let expect = "f f f f f f" ++ call assert_equal(expect, getline(1)) ++ ++ " Test variable softtabstops. ++ set noet ts=8 vsts=12,2,6 ++ exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g" ++ let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g" ++ call assert_equal(expect, getline(1)) ++ ++ " Variable tabstops and softtabstops combined. ++ set vsts=6,12,8 vts=4,6,8 ++ exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h" ++ let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with a single value, not using vts. ++ set ts=8 sts=0 vts= vsts= ++ exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i" ++ retab 4 ++ let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with a single value, using vts. ++ set ts=8 sts=0 vts=6 vsts= ++ exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j" ++ retab 4 ++ let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with multiple values, not using vts. ++ set ts=6 sts=0 vts= vsts= ++ exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k" ++ retab 4,8 ++ let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with multiple values, using vts. ++ set ts=8 sts=0 vts=6 vsts= ++ exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l" ++ retab 4,8 ++ let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l" ++ call assert_equal(expect, getline(1)) ++ ++ " Check that global and local values are set. ++ set ts=4 vts=6 sts=8 vsts=10 ++ call assert_equal(&ts, 4) ++ call assert_equal(&vts, '6') ++ call assert_equal(&sts, 8) ++ call assert_equal(&vsts, '10') ++ new ++ call assert_equal(&ts, 4) ++ call assert_equal(&vts, '6') ++ call assert_equal(&sts, 8) ++ call assert_equal(&vsts, '10') ++ bwipeout! ++ ++ " Check that local values only are set. ++ setlocal ts=5 vts=7 sts=9 vsts=11 ++ call assert_equal(&ts, 5) ++ call assert_equal(&vts, '7') ++ call assert_equal(&sts, 9) ++ call assert_equal(&vsts, '11') ++ new ++ call assert_equal(&ts, 4) ++ call assert_equal(&vts, '6') ++ call assert_equal(&sts, 8) ++ call assert_equal(&vsts, '10') ++ bwipeout! ++ ++ " Check that global values only are set. ++ setglobal ts=6 vts=8 sts=10 vsts=12 ++ call assert_equal(&ts, 5) ++ call assert_equal(&vts, '7') ++ call assert_equal(&sts, 9) ++ call assert_equal(&vsts, '11') ++ new ++ call assert_equal(&ts, 6) ++ call assert_equal(&vts, '8') ++ call assert_equal(&sts, 10) ++ call assert_equal(&vsts, '12') ++ bwipeout! ++ ++ set ts& vts& sts& vsts& et& ++ bwipeout! ++ endfunc ++ ++ func! Test_vartabs_breakindent() ++ if !exists("+breakindent") ++ return ++ endif ++ new ++ %d ++ ++ " Test normal operation of tabstops ... ++ set ts=4 ++ call setline(1, join(split('aaaaa', '\zs'), "\t")) ++ retab 8 ++ let expect = "a a\<tab>a a\<tab>a" ++ call assert_equal(expect, getline(1)) ++ ++ " ... and softtabstops ++ set ts=8 sts=6 ++ exe "norm! Sb\<tab>b\<tab>b\<tab>b\<tab>b" ++ let expect = "b b\<tab> b\<tab> b\<tab>b" ++ call assert_equal(expect, getline(1)) ++ ++ " Test variable tabstops. ++ set sts=0 vts=4,8,4,8 ++ exe "norm! Sc\<tab>c\<tab>c\<tab>c\<tab>c\<tab>c" ++ retab 8 ++ let expect = "c c\<tab> c\<tab>c\<tab>c\<tab>c" ++ call assert_equal(expect, getline(1)) ++ ++ set et vts=4,8,4,8 ++ exe "norm! Sd\<tab>d\<tab>d\<tab>d\<tab>d\<tab>d" ++ let expect = "d d d d d d" ++ call assert_equal(expect, getline(1)) ++ ++ " Changing ts should have no effect if vts is in use. ++ call cursor(1, 1) ++ set ts=6 ++ exe "norm! Se\<tab>e\<tab>e\<tab>e\<tab>e\<tab>e" ++ let expect = "e e e e e e" ++ call assert_equal(expect, getline(1)) ++ ++ " Clearing vts should revert to using ts. ++ set vts= ++ exe "norm! Sf\<tab>f\<tab>f\<tab>f\<tab>f\<tab>f" ++ let expect = "f f f f f f" ++ call assert_equal(expect, getline(1)) ++ ++ " Test variable softtabstops. ++ set noet ts=8 vsts=12,2,6 ++ exe "norm! Sg\<tab>g\<tab>g\<tab>g\<tab>g\<tab>g" ++ let expect = "g\<tab> g g\<tab> g\<tab> g\<tab>g" ++ call assert_equal(expect, getline(1)) ++ ++ " Variable tabstops and softtabstops combined. ++ set vsts=6,12,8 vts=4,6,8 ++ exe "norm! Sh\<tab>h\<tab>h\<tab>h\<tab>h" ++ let expect = "h\<tab> h\<tab>\<tab>h\<tab>h\<tab>h" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with a single value, not using vts. ++ set ts=8 sts=0 vts= vsts= ++ exe "norm! Si\<tab>i\<tab>i\<tab>i\<tab>i" ++ retab 4 ++ let expect = "i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i\<tab>\<tab>i" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with a single value, using vts. ++ set ts=8 sts=0 vts=6 vsts= ++ exe "norm! Sj\<tab>j\<tab>j\<tab>j\<tab>j" ++ retab 4 ++ let expect = "j\<tab> j\<tab>\<tab>j\<tab> j\<tab>\<tab>j" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with multiple values, not using vts. ++ set ts=6 sts=0 vts= vsts= ++ exe "norm! Sk\<tab>k\<tab>k\<tab>k\<tab>k\<tab>k" ++ retab 4,8 ++ let expect = "k\<tab> k\<tab>k k\<tab> k\<tab> k" ++ call assert_equal(expect, getline(1)) ++ ++ " Retab with multiple values, using vts. ++ set ts=8 sts=0 vts=6 vsts= ++ exe "norm! Sl\<tab>l\<tab>l\<tab>l\<tab>l\<tab>l" ++ retab 4,8 ++ let expect = "l\<tab> l\<tab>l l\<tab> l\<tab> l" ++ call assert_equal(expect, getline(1)) ++ ++ " Check that global and local values are set. ++ set ts=4 vts=6 sts=8 vsts=10 ++ call assert_equal(&ts, 4) ++ call assert_equal(&vts, '6') ++ call assert_equal(&sts, 8) ++ call assert_equal(&vsts, '10') ++ new ++ call assert_equal(&ts, 4) ++ call assert_equal(&vts, '6') ++ call assert_equal(&sts, 8) ++ call assert_equal(&vsts, '10') ++ bwipeout! ++ ++ " Check that local values only are set. ++ setlocal ts=5 vts=7 sts=9 vsts=11 ++ call assert_equal(&ts, 5) ++ call assert_equal(&vts, '7') ++ call assert_equal(&sts, 9) ++ call assert_equal(&vsts, '11') ++ new ++ call assert_equal(&ts, 4) ++ call assert_equal(&vts, '6') ++ call assert_equal(&sts, 8) ++ call assert_equal(&vsts, '10') ++ bwipeout! ++ ++ " Check that global values only are set. ++ setglobal ts=6 vts=8 sts=10 vsts=12 ++ call assert_equal(&ts, 5) ++ call assert_equal(&vts, '7') ++ call assert_equal(&sts, 9) ++ call assert_equal(&vsts, '11') ++ new ++ call assert_equal(&ts, 6) ++ call assert_equal(&vts, '8') ++ call assert_equal(&sts, 10) ++ call assert_equal(&vsts, '12') ++ bwipeout! ++ ++ bwipeout! ++ endfunc +*** ../vim-8.1.0104/src/version.c 2018-06-23 17:14:36.801909989 +0200 +--- src/version.c 2018-06-23 19:18:18.788276086 +0200 +*************** +*** 677,682 **** +--- 677,687 ---- + #else + "-user_commands", + #endif ++ #ifdef FEAT_VARTABS ++ "+vartabs", ++ #else ++ "-vartabs", ++ #endif + "+vertsplit", + #ifdef FEAT_VIRTUALEDIT + "+virtualedit", +*** ../vim-8.1.0104/src/workshop.c 2017-11-18 21:10:42.000000000 +0100 +--- src/workshop.c 2018-06-23 17:41:10.116365995 +0200 +*************** +*** 49,55 **** +--- 49,59 ---- + static void warp_to_pc(int); + #ifdef FEAT_BEVAL_GUI + void workshop_beval_cb(BalloonEval *, int); ++ # ifdef FEAT_VARTABS ++ static int computeIndex(int, char_u *, int, int *); ++ # else + static int computeIndex(int, char_u *, int); ++ # endif + #endif + static char *fixAccelText(char *); + static void addMenu(char *, char *, char *); +*************** +*** 1534,1540 **** +--- 1538,1548 ---- + * a column number. Compute the index from col. Also set + * line to 0 because thats what dbx expects. + */ ++ #ifdef FEAT_VARTABS ++ idx = computeIndex(col, text, beval->ts, beval->vts); ++ #else + idx = computeIndex(col, text, beval->ts); ++ #endif + if (idx > 0) + { + lnum = 0; +*************** +*** 1569,1575 **** + computeIndex( + int wantedCol, + char_u *line, +! int ts) + { + int col = 0; + int idx = 0; +--- 1577,1587 ---- + computeIndex( + int wantedCol, + char_u *line, +! int ts +! #ifdef FEAT_VARTABS +! int *vts +! #else +! ) + { + int col = 0; + int idx = 0; +*************** +*** 1577,1583 **** +--- 1589,1599 ---- + while (line[idx]) + { + if (line[idx] == '\t') ++ #ifdef FEAT_VARTABS ++ col += tabstop_padding(col, ts, vts); ++ #else + col += ts - (col % ts); ++ #endif + else + col++; + idx++; +*** ../vim-8.1.0104/src/Makefile 2018-06-03 14:42:17.836505122 +0200 +--- src/Makefile 2018-06-23 18:09:24.498279403 +0200 +*************** +*** 2305,2310 **** +--- 2305,2311 ---- + test_usercommands \ + test_utf8 \ + test_utf8_comparisons \ ++ test_vartabs \ + test_viminfo \ + test_vimscript \ + test_virtualedit \ +*** ../vim-8.1.0104/src/version.c 2018-06-23 17:14:36.801909989 +0200 +--- src/version.c 2018-06-23 19:18:18.788276086 +0200 +*************** +*** 780,781 **** +--- 785,788 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 105, + /**/ + +-- +# echo reboot >universe +# chmod +x universe +# ./universe + + /// 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 /// diff --git a/data/vim/patches/8.1.0106 b/data/vim/patches/8.1.0106 new file mode 100644 index 000000000..af7b56a3c --- /dev/null +++ b/data/vim/patches/8.1.0106 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0106 +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.0106 (after 8.1.0103) +Problem: Build fails when HAVE_DATE_TIME is undefined. +Solution: Always define init_longVersion(). (Christian Brabandt, + closes #3075) +Files: src/version.c + + +*** ../vim-8.1.0105/src/version.c 2018-06-23 19:22:45.618486231 +0200 +--- src/version.c 2018-06-24 14:44:21.454379055 +0200 +*************** +*** 71,76 **** +--- 71,82 ---- + # endif + #else + char *longVersion = VIM_VERSION_LONG; ++ ++ void ++ init_longVersion(void) ++ { ++ // nothing to do ++ } + #endif + + static void list_features(void); +*** ../vim-8.1.0105/src/version.c 2018-06-23 19:22:45.618486231 +0200 +--- src/version.c 2018-06-24 14:44:21.454379055 +0200 +*************** +*** 785,786 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 106, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +97. Your mother tells you to remember something, and you look for + a File/Save command. + + /// 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 /// diff --git a/data/vim/patches/8.1.0107 b/data/vim/patches/8.1.0107 new file mode 100644 index 000000000..4f0262d36 --- /dev/null +++ b/data/vim/patches/8.1.0107 @@ -0,0 +1,93 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0107 +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.0107 +Problem: Python: getting buffer option clears message. (Jacob Niehus) +Solution: Don't use aucmd_prepbuf(). (closes #3079) +Files: src/option.c + + +*** ../vim-8.1.0106/src/option.c 2018-06-23 19:22:45.614486258 +0200 +--- src/option.c 2018-06-24 15:13:42.200150566 +0200 +*************** +*** 9692,9698 **** + * consider it set when 'ff' or 'fenc' changed. */ + if (p->indir == PV_MOD) + { +! *numval = bufIsChanged((buf_T *) from); + varp = NULL; + } + #ifdef FEAT_CRYPT +--- 9692,9698 ---- + * consider it set when 'ff' or 'fenc' changed. */ + if (p->indir == PV_MOD) + { +! *numval = bufIsChanged((buf_T *)from); + varp = NULL; + } + #ifdef FEAT_CRYPT +*************** +*** 9705,9721 **** + #endif + else + { +! aco_save_T aco; +! aucmd_prepbuf(&aco, (buf_T *) from); + varp = get_varp(p); +! aucmd_restbuf(&aco); + } + } + else if (opt_type == SREQ_WIN) + { +! win_T *save_curwin; +! save_curwin = curwin; +! curwin = (win_T *) from; + curbuf = curwin->w_buffer; + varp = get_varp(p); + curwin = save_curwin; +--- 9705,9725 ---- + #endif + else + { +! buf_T *save_curbuf = curbuf; +! +! // only getting a pointer, no need to use aucmd_prepbuf() +! curbuf = (buf_T *)from; +! curwin->w_buffer = curbuf; + varp = get_varp(p); +! curbuf = save_curbuf; +! curwin->w_buffer = curbuf; + } + } + else if (opt_type == SREQ_WIN) + { +! win_T *save_curwin = curwin; +! +! curwin = (win_T *)from; + curbuf = curwin->w_buffer; + varp = get_varp(p); + curwin = save_curwin; +*** ../vim-8.1.0106/src/version.c 2018-06-24 14:44:42.282243290 +0200 +--- src/version.c 2018-06-24 15:11:21.536911391 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 107, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +99. The hum of a cooling fan and the click of keys is comforting to you. + + /// 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 /// diff --git a/data/vim/patches/8.1.0108 b/data/vim/patches/8.1.0108 new file mode 100644 index 000000000..13a497324 --- /dev/null +++ b/data/vim/patches/8.1.0108 @@ -0,0 +1,7847 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0108 +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.0108 +Problem: No Danish translations. +Solution: Add Danish message translations. (closes #3073) Move list of + languages to a common makefile. +Files: src/po/Makefile, src/po/Make_cyg.mak, src/po/Make_mvc.mak, + src/po/Make_ming.mak, src/po/Make_all.mak, src/po/da.po + + +*** ../vim-8.1.0107/src/po/Makefile 2018-04-29 12:09:57.000000000 +0200 +--- src/po/Makefile 2018-06-24 15:50:59.192329630 +0200 +*************** +*** 3,138 **** + # Include stuff found by configure. + include ../auto/config.mk + +! # TODO make this configurable + # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are + # not installed on Unix + +- LANGUAGES = \ +- af \ +- ca \ +- cs \ +- de \ +- en_GB \ +- eo \ +- es \ +- fi \ +- fr \ +- ga \ +- it \ +- ja \ +- ko \ +- ko.UTF-8 \ +- lv \ +- nb \ +- nl \ +- no \ +- pl \ +- pt_BR \ +- ru \ +- sk \ +- sr \ +- sv \ +- uk \ +- vi \ +- zh_CN \ +- zh_CN.UTF-8 \ +- zh_TW \ +- zh_TW.UTF-8 +- +- CONVERTED = \ +- cs.cp1250 \ +- ja.sjis \ +- ja.euc-jp \ +- pl.cp1250 \ +- pl.UTF-8 \ +- ru.cp1251 \ +- sk.cp1250 \ +- uk.cp1251 \ +- zh_CN.cp936 +- +- MOFILES = \ +- af.mo \ +- ca.mo \ +- cs.mo \ +- de.mo \ +- en_GB.mo \ +- eo.mo \ +- es.mo \ +- fi.mo \ +- fr.mo \ +- ga.mo \ +- it.mo \ +- ja.mo \ +- ko.mo \ +- ko.UTF-8.mo \ +- lv.mo \ +- nb.mo \ +- nl.mo \ +- no.mo \ +- pl.mo \ +- pt_BR.mo \ +- ru.mo \ +- sk.mo \ +- sr.mo \ +- sv.mo \ +- uk.mo \ +- vi.mo \ +- zh_CN.UTF-8.mo \ +- zh_CN.mo \ +- zh_TW.UTF-8.mo \ +- zh_TW.mo +- +- MOCONVERTED = \ +- cs.cp1250.mo \ +- ja.sjis.mo \ +- ja.euc-jp.mo \ +- pl.cp1250.mo \ +- pl.UTF-8.mo \ +- ru.cp1251.mo \ +- sk.cp1250.mo \ +- uk.cp1251.mo \ +- zh_CN.cp936.mo +- +- CHECKFILES = \ +- af.ck \ +- ca.ck \ +- cs.ck \ +- de.ck \ +- en_GB.ck \ +- eo.ck \ +- es.ck \ +- fi.ck \ +- fr.ck \ +- ga.ck \ +- it.ck \ +- ja.ck \ +- ko.ck \ +- ko.UTF-8.ck \ +- nb.ck \ +- nl.ck \ +- no.ck \ +- pl.ck \ +- pt_BR.ck \ +- ru.ck \ +- sk.ck \ +- sr.ck \ +- sv.ck \ +- uk.ck \ +- vi.ck \ +- zh_CN.UTF-8.ck \ +- zh_CN.ck \ +- zh_TW.UTF-8.ck \ +- zh_TW.ck \ +- cs.cp1250.ck \ +- ja.sjis.ck \ +- ja.euc-jp.ck \ +- pl.cp1250.ck \ +- pl.UTF-8.ck \ +- ru.cp1251.ck \ +- sk.cp1250.ck \ +- uk.cp1251.ck \ +- zh_CN.cp936.ck +- + PACKAGE = vim + SHELL = /bin/sh + VIM = ../vim +--- 3,14 ---- + # Include stuff found by configure. + include ../auto/config.mk + +! # get LANGUAGES, MOFILES, MOCONVERTED and CHECKFILES +! include Make_all.mak +! + # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are + # not installed on Unix + + PACKAGE = vim + SHELL = /bin/sh + VIM = ../vim +*************** +*** 147,153 **** + + .SUFFIXES: + .SUFFIXES: .po .mo .pot .ck +! .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED) + + .po.mo: + $(MSGFMTCMD) -o $@ $< +--- 23,29 ---- + + .SUFFIXES: + .SUFFIXES: .po .mo .pot .ck +! .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) + + .po.mo: + $(MSGFMTCMD) -o $@ $< +*************** +*** 162,168 **** + + install: $(MOFILES) $(MOCONVERTED) + @$(MAKE) prefixcheck +! for lang in $(LANGUAGES) $(CONVERTED); do \ + dir=$(LOCALEDIR)/$$lang/; \ + if test ! -x "$$dir"; then \ + mkdir $$dir; chmod 755 $$dir; \ +--- 38,44 ---- + + install: $(MOFILES) $(MOCONVERTED) + @$(MAKE) prefixcheck +! for lang in $(LANGUAGES); do \ + dir=$(LOCALEDIR)/$$lang/; \ + if test ! -x "$$dir"; then \ + mkdir $$dir; chmod 755 $$dir; \ +*************** +*** 257,269 **** + ru.cp1251.po: ru.po + rm -f ru.cp1251.po + iconv -f utf-8 -t cp1251 ru.po | \ +! sed -e 's/charset=utf-8/charset=cp1251/' -e 's/# Original translations/# Generated from ru.po, DO NOT EDIT/' > ru.cp1251.po + + # Convert uk.po to create uk.cp1251.po. + uk.cp1251.po: uk.po + rm -f uk.cp1251.po + iconv -f utf-8 -t cp1251 uk.po | \ +! sed -e 's/charset=utf-8/charset=cp1251/' -e 's/# Original translations/# Generated from uk.po, DO NOT EDIT/' > uk.cp1251.po + + prefixcheck: + @if test "x" = "x$(prefix)"; then \ +--- 133,145 ---- + ru.cp1251.po: ru.po + rm -f ru.cp1251.po + iconv -f utf-8 -t cp1251 ru.po | \ +! sed -e 's/charset=[uU][tT][fF]-8/charset=cp1251/' -e 's/# Original translations/# Generated from ru.po, DO NOT EDIT/' > ru.cp1251.po + + # Convert uk.po to create uk.cp1251.po. + uk.cp1251.po: uk.po + rm -f uk.cp1251.po + iconv -f utf-8 -t cp1251 uk.po | \ +! sed -e 's/charset=[uU][tT][fF]-8/charset=cp1251/' -e 's/# Original translations/# Generated from uk.po, DO NOT EDIT/' > uk.cp1251.po + + prefixcheck: + @if test "x" = "x$(prefix)"; then \ +*** ../vim-8.1.0107/src/po/Make_cyg.mak 2018-04-29 12:09:57.000000000 +0200 +--- src/po/Make_cyg.mak 2018-06-24 15:41:25.979639598 +0200 +*************** +*** 12,96 **** + VIMRUNTIME = ../../runtime + endif + +! LANGUAGES = \ +! af \ +! ca \ +! cs \ +! cs.cp1250 \ +! de \ +! en_GB \ +! eo \ +! es \ +! fi \ +! fr \ +! ga \ +! it \ +! ja \ +! ja.euc-jp \ +! ja.sjis \ +! ko \ +! ko.UTF-8 \ +! nb \ +! nl \ +! no \ +! pl \ +! pl.cp1250 \ +! pl.UTF-8 \ +! pt_BR \ +! ru \ +! ru.cp1251 \ +! sk \ +! sk.cp1250 \ +! sr \ +! sv \ +! uk \ +! uk.cp1251 \ +! vi \ +! zh_CN \ +! zh_CN.cp936 \ +! zh_CN.UTF-8 \ +! zh_TW \ +! zh_TW.UTF-8 \ +! +! MOFILES = \ +! af.mo \ +! ca.mo \ +! cs.cp1250.mo \ +! cs.mo \ +! de.mo \ +! en_GB.mo \ +! eo.mo \ +! es.mo \ +! fi.mo \ +! fr.mo \ +! ga.mo \ +! it.mo \ +! ja.euc-jp.mo \ +! ja.mo \ +! ja.sjis.mo \ +! ko.mo \ +! ko.UTF-8.mo \ +! nb.mo \ +! nl.mo \ +! no.mo \ +! pl.cp1250.mo \ +! pl.mo \ +! pl.UTF-8.mo \ +! pt_BR.mo \ +! ru.cp1251.mo \ +! ru.mo \ +! sk.cp1250.mo \ +! sk.mo \ +! sr.mo \ +! sv.mo \ +! uk.cp1251.mo \ +! uk.mo \ +! vi.mo \ +! zh_CN.mo \ +! zh_CN.cp936.mo \ +! zh_CN.UTF-8.mo \ +! zh_TW.mo \ +! zh_TW.UTF-8.mo \ + + PACKAGE = vim + +--- 12,19 ---- + VIMRUNTIME = ../../runtime + endif + +! # get LANGUAGES, MOFILES and MOCONVERTED +! include Make_all.mak + + PACKAGE = vim + +*************** +*** 126,132 **** + .po.mo: + $(MSGFMT) -o $@ $< + +! all: $(MOFILES) + + first_time: + $(XGETTEXT) --default-domain=$(LANGUAGE) \ +--- 49,55 ---- + .po.mo: + $(MSGFMT) -o $@ $< + +! all: $(MOFILES) $(MOCONVERTED) + + first_time: + $(XGETTEXT) --default-domain=$(LANGUAGE) \ +*************** +*** 141,147 **** + $(MSGMERGE) $@.po.old $(PACKAGE).pot -o $@.po + $(RM) $@.po.old + +! install: $(MOFILES) + for TARGET in $(LANGUAGES); do \ + $(MKD) $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES ; \ + $(CP) $$TARGET.mo $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES/$(PACKAGE).mo ; \ +--- 64,70 ---- + $(MSGMERGE) $@.po.old $(PACKAGE).pot -o $@.po + $(RM) $@.po.old + +! install: $(MOFILES) $(MOCONVERTED) + for TARGET in $(LANGUAGES); do \ + $(MKD) $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES ; \ + $(CP) $$TARGET.mo $(VIMRUNTIME)/lang/$$TARGET/LC_MESSAGES/$(PACKAGE).mo ; \ +*** ../vim-8.1.0107/src/po/Make_mvc.mak 2018-04-29 12:09:57.000000000 +0200 +--- src/po/Make_mvc.mak 2018-06-24 15:42:00.171455825 +0200 +*************** +*** 10,94 **** + VIMRUNTIME = ..\..\runtime + !endif + +! LANGUAGES = \ +! af \ +! ca \ +! cs \ +! cs.cp1250 \ +! de \ +! en_GB \ +! eo \ +! es \ +! fi \ +! fr \ +! ga \ +! it \ +! ja \ +! ja.euc-jp \ +! ja.sjis \ +! ko \ +! ko.UTF-8 \ +! nb \ +! nl \ +! no \ +! pl \ +! pl.cp1250 \ +! pl.UTF-8 \ +! pt_BR \ +! ru \ +! ru.cp1251 \ +! sk \ +! sk.cp1250 \ +! sr \ +! sv \ +! uk \ +! uk.cp1251 \ +! vi \ +! zh_CN \ +! zh_CN.cp936 \ +! zh_CN.UTF-8 \ +! zh_TW \ +! zh_TW.UTF-8 \ +! +! MOFILES = \ +! af.mo \ +! ca.mo \ +! cs.cp1250.mo \ +! cs.mo \ +! de.mo \ +! en_GB.mo \ +! eo.mo \ +! es.mo \ +! fi.mo \ +! fr.mo \ +! ga.mo \ +! it.mo \ +! ja.euc-jp.mo \ +! ja.mo \ +! ja.sjis.mo \ +! ko.mo \ +! ko.UTF-8.mo \ +! nb.mo \ +! nl.mo \ +! no.mo \ +! pl.cp1250.mo \ +! pl.mo \ +! pl.UTF-8.mo \ +! pt_BR.mo \ +! ru.cp1251.mo \ +! ru.mo \ +! sk.cp1250.mo \ +! sk.mo \ +! sr.mo \ +! sv.mo \ +! uk.cp1251.mo \ +! uk.mo \ +! vi.mo \ +! zh_CN.mo \ +! zh_CN.cp936.mo \ +! zh_CN.UTF-8.mo \ +! zh_TW.mo \ +! zh_TW.UTF-8.mo \ + + PACKAGE = vim + +--- 10,17 ---- + VIMRUNTIME = ..\..\runtime + !endif + +! # get LANGUAGES, MOFILES and MOCONVERTED +! !include Make_all.mak + + PACKAGE = vim + +*************** +*** 116,122 **** + set OLD_PO_FILE_INPUT=yes + $(MSGFMT) -o $@ $< + +! all: $(MOFILES) + + files: + $(LS) $(LSFLAGS) ..\*.c ..\if_perl.xs ..\GvimExt\gvimext.cpp ..\globals.h ..\if_py_both.h ..\vim.h > .\files +--- 39,45 ---- + set OLD_PO_FILE_INPUT=yes + $(MSGFMT) -o $@ $< + +! all: $(MOFILES) $(MOCONVERTED) + + files: + $(LS) $(LSFLAGS) ..\*.c ..\if_perl.xs ..\GvimExt\gvimext.cpp ..\globals.h ..\if_py_both.h ..\vim.h > .\files +*** ../vim-8.1.0107/src/po/Make_ming.mak 2018-04-29 12:09:57.000000000 +0200 +--- src/po/Make_ming.mak 2018-06-24 15:41:39.523566813 +0200 +*************** +*** 18,102 **** + endif + endif + +! LANGUAGES = \ +! af \ +! ca \ +! cs \ +! cs.cp1250 \ +! de \ +! en_GB \ +! eo \ +! es \ +! fi \ +! fr \ +! ga \ +! it \ +! ja \ +! ja.euc-jp \ +! ja.sjis \ +! ko \ +! ko.UTF-8 \ +! nb \ +! nl \ +! no \ +! pl \ +! pl.cp1250 \ +! pl.UTF-8 \ +! pt_BR \ +! ru \ +! ru.cp1251 \ +! sk \ +! sk.cp1250 \ +! sr \ +! sv \ +! uk \ +! uk.cp1251 \ +! vi \ +! zh_CN \ +! zh_CN.cp936 \ +! zh_CN.UTF-8 \ +! zh_TW \ +! zh_TW.UTF-8 \ +! +! MOFILES = \ +! af.mo \ +! ca.mo \ +! cs.cp1250.mo \ +! cs.mo \ +! de.mo \ +! en_GB.mo \ +! eo.mo \ +! es.mo \ +! fi.mo \ +! fr.mo \ +! ga.mo \ +! it.mo \ +! ja.euc-jp.mo \ +! ja.mo \ +! ja.sjis.mo \ +! ko.mo \ +! ko.UTF-8.mo \ +! nb.mo \ +! nl.mo \ +! no.mo \ +! pl.cp1250.mo \ +! pl.mo \ +! pl.UTF-8.mo \ +! pt_BR.mo \ +! ru.cp1251.mo \ +! ru.mo \ +! sk.cp1250.mo \ +! sk.mo \ +! sr.mo \ +! sv.mo \ +! uk.cp1251.mo \ +! uk.mo \ +! vi.mo \ +! zh_CN.mo \ +! zh_CN.cp936.mo \ +! zh_CN.UTF-8.mo \ +! zh_TW.mo \ +! zh_TW.UTF-8.mo \ + + PACKAGE = vim + +--- 18,25 ---- + endif + endif + +! # get LANGUAGES, MOFILES and MOCONVERTED +! include Make_all.mak + + PACKAGE = vim + +*************** +*** 135,141 **** + .po.mo: + $(MSGFMT) -o $@ $< + +! all: $(MOFILES) + + first_time: + $(XGETTEXT) --default-domain=$(LANGUAGE) \ +--- 58,64 ---- + .po.mo: + $(MSGFMT) -o $@ $< + +! all: $(MOFILES) $(MOCONVERTED) + + first_time: + $(XGETTEXT) --default-domain=$(LANGUAGE) \ +*** ../vim-8.1.0107/src/po/Make_all.mak 2018-06-24 15:50:12.300626368 +0200 +--- src/po/Make_all.mak 2018-06-24 15:43:56.730828750 +0200 +*************** +*** 0 **** +--- 1,135 ---- ++ # ++ # Common po Makefile, defines the list of languages. ++ # ++ ++ LANGUAGES = \ ++ af \ ++ ca \ ++ cs \ ++ cs.cp1250 \ ++ da \ ++ de \ ++ en_GB \ ++ eo \ ++ es \ ++ fi \ ++ fr \ ++ ga \ ++ it \ ++ ja \ ++ ja.euc-jp \ ++ ja.sjis \ ++ ko \ ++ ko.UTF-8 \ ++ nb \ ++ nl \ ++ no \ ++ pl \ ++ pl.UTF-8 \ ++ pl.cp1250 \ ++ pt_BR \ ++ ru \ ++ ru.cp1251 \ ++ sk \ ++ sk.cp1250 \ ++ sr \ ++ sv \ ++ uk \ ++ uk.cp1251 \ ++ vi \ ++ zh_CN \ ++ zh_CN.UTF-8 \ ++ zh_CN.cp936 \ ++ zh_TW \ ++ zh_TW.UTF-8 \ ++ lv \ ++ ++ ++ MOFILES = \ ++ af.mo \ ++ ca.mo \ ++ cs.mo \ ++ da.mo \ ++ de.mo \ ++ en_GB.mo \ ++ eo.mo \ ++ es.mo \ ++ fi.mo \ ++ fr.mo \ ++ ga.mo \ ++ it.mo \ ++ ja.mo \ ++ ko.UTF-8.mo \ ++ ko.mo \ ++ nb.mo \ ++ nl.mo \ ++ no.mo \ ++ pl.mo \ ++ pt_BR.mo \ ++ ru.mo \ ++ sk.mo \ ++ sr.mo \ ++ sv.mo \ ++ uk.mo \ ++ vi.mo \ ++ zh_CN.UTF-8.mo \ ++ zh_CN.mo \ ++ zh_TW.UTF-8.mo \ ++ zh_TW.mo \ ++ lv.mo \ ++ ++ ++ MOCONVERTED = \ ++ cs.cp1250.mo \ ++ ja.euc-jp.mo \ ++ ja.sjis.mo \ ++ pl.UTF-8.mo \ ++ pl.cp1250.mo \ ++ ru.cp1251.mo \ ++ sk.cp1250.mo \ ++ uk.cp1251.mo \ ++ zh_CN.cp936.mo \ ++ ++ ++ CHECKFILES = \ ++ af.ck \ ++ ca.ck \ ++ cs.ck \ ++ cs.cp1250.ck \ ++ da.ck \ ++ de.ck \ ++ en_GB.ck \ ++ eo.ck \ ++ es.ck \ ++ fi.ck \ ++ fr.ck \ ++ ga.ck \ ++ it.ck \ ++ ja.ck \ ++ ja.euc-jp.ck \ ++ ja.sjis.ck \ ++ ko.UTF-8.ck \ ++ ko.ck \ ++ lv.ck \ ++ nb.ck \ ++ nl.ck \ ++ no.ck \ ++ pl.UTF-8.ck \ ++ pl.ck \ ++ pl.cp1250.ck \ ++ pt_BR.ck \ ++ ru.ck \ ++ ru.cp1251.ck \ ++ sk.ck \ ++ sk.cp1250.ck \ ++ sr.ck \ ++ sv.ck \ ++ uk.ck \ ++ uk.cp1251.ck \ ++ vi.ck \ ++ zh_CN.UTF-8.ck \ ++ zh_CN.ck \ ++ zh_CN.cp936.ck \ ++ zh_TW.UTF-8.ck \ ++ zh_TW.ck \ ++ +*** ../vim-8.1.0107/src/po/da.po 2018-06-24 15:50:12.304626342 +0200 +--- src/po/da.po 2018-06-24 15:18:44.246744941 +0200 +*************** +*** 0 **** +--- 1,7088 ---- ++ # Danish translation for Vim ++ # Copyright (C) 2018 The Vim authors ++ # This file is distributed under the same license as the vim package. ++ # scootergrisen, 2018. ++ msgid "" ++ msgstr "" ++ "Project-Id-Version: Vim 8.1\n" ++ "Report-Msgid-Bugs-To: \n" ++ "POT-Creation-Date: 2018-06-08 22:09+0200\n" ++ "PO-Revision-Date: 2018-06-23 23:30+0200\n" ++ "Last-Translator: scootergrisen\n" ++ "Language-Team: Danish\n" ++ "Language: da\n" ++ "MIME-Version: 1.0\n" ++ "Content-Type: text/plain; charset=UTF-8\n" ++ "Content-Transfer-Encoding: 8bit\n" ++ "Plural-Forms: nplurals=2; plural=(n != 1);\n" ++ ++ msgid "E831: bf_key_init() called with empty password" ++ msgstr "E831: bf_key_init() kaldt med tom adgangskode" ++ ++ msgid "E820: sizeof(uint32_t) != 4" ++ msgstr "E820: sizeof(uint32_t) != 4" ++ ++ msgid "E817: Blowfish big/little endian use wrong" ++ msgstr "E817: Forkert brug af stor/lille byterækkefølge for blowfish" ++ ++ msgid "E818: sha256 test failed" ++ msgstr "E818: sha256-test mislykkede" ++ ++ msgid "E819: Blowfish test failed" ++ msgstr "E819: Blowfish-test mislykkede" ++ ++ msgid "[Location List]" ++ msgstr "[Placeringsliste]" ++ ++ msgid "[Quickfix List]" ++ msgstr "[Quickfix-liste]" ++ ++ msgid "E855: Autocommands caused command to abort" ++ msgstr "E855: Autokommandoer forÃ¥rsagede afbrydelse af kommando" ++ ++ msgid "E82: Cannot allocate any buffer, exiting..." ++ msgstr "E82: Kan ikke allokere buffer, afslutter..." ++ ++ msgid "E83: Cannot allocate buffer, using other one..." ++ msgstr "E83: Kan ikke allokere buffer, bruger en anden..." ++ ++ msgid "E931: Buffer cannot be registered" ++ msgstr "E931: Buffer kan ikke registreres" ++ ++ msgid "E937: Attempt to delete a buffer that is in use" ++ msgstr "E937: Forsøg pÃ¥ at slette en buffer som er i brug" ++ ++ msgid "E515: No buffers were unloaded" ++ msgstr "E515: Ingen buffere blev udlæst" ++ ++ msgid "E516: No buffers were deleted" ++ msgstr "E516: Ingen brugere blev slettet" ++ ++ msgid "E517: No buffers were wiped out" ++ msgstr "E517: Ingen buffere blev ryddet" ++ ++ msgid "1 buffer unloaded" ++ msgstr "1 buffer udlæst" ++ ++ #, c-format ++ msgid "%d buffers unloaded" ++ msgstr "%d buffere udlæst" ++ ++ msgid "1 buffer deleted" ++ msgstr "1 buffer slettet" ++ ++ #, c-format ++ msgid "%d buffers deleted" ++ msgstr "%d buffere slettet" ++ ++ msgid "1 buffer wiped out" ++ msgstr "1 buffer ryddet" ++ ++ #, c-format ++ msgid "%d buffers wiped out" ++ msgstr "%d buffere ryddet" ++ ++ msgid "E90: Cannot unload last buffer" ++ msgstr "E90: Kan ikke udlæse sidste buffer" ++ ++ msgid "E84: No modified buffer found" ++ msgstr "E84: Fandt ingen ændret buffer" ++ ++ msgid "E85: There is no listed buffer" ++ msgstr "E85: Der er ingen oplistet buffer" ++ ++ msgid "E87: Cannot go beyond last buffer" ++ msgstr "E87: Kan ikke gÃ¥ over sidste buffer" ++ ++ msgid "E88: Cannot go before first buffer" ++ msgstr "E88: Kan ikke gÃ¥ før første buffer" ++ ++ #, c-format ++ msgid "E89: No write since last change for buffer %ld (add ! to override)" ++ msgstr "" ++ "E89: Ingen skrivning siden sidste ændring for bufferen %ld (tilføj ! for at " ++ "tilsidesætte)" ++ ++ msgid "E948: Job still running (add ! to end the job)" ++ msgstr "E948: Job kører stadig (tilføj ! for at afslutte jobbet)" ++ ++ msgid "E37: No write since last change (add ! to override)" ++ msgstr "" ++ "E37: Ingen skrivning siden sidste ændring (tilføj ! for at tilsidesætte)" ++ ++ msgid "E948: Job still running" ++ msgstr "E948: Job kører stadig" ++ ++ msgid "E37: No write since last change" ++ msgstr "E37: Ingen skrivning siden sidste ændring" ++ ++ msgid "W14: Warning: List of file names overflow" ++ msgstr "W14: Advarsel: Overløb i liste over filnavne" ++ ++ #, c-format ++ msgid "E92: Buffer %ld not found" ++ msgstr "E92: Bufferen %ld blev ikke fundet" ++ ++ #, c-format ++ msgid "E93: More than one match for %s" ++ msgstr "E93: Flere end ét match for %s" ++ ++ #, c-format ++ msgid "E94: No matching buffer for %s" ++ msgstr "E94: Ingen matchende buffer for %s" ++ ++ #, c-format ++ msgid "line %ld" ++ msgstr "linje %ld" ++ ++ msgid "E95: Buffer with this name already exists" ++ msgstr "E95: Buffer med dette navn findes allerede" ++ ++ msgid " [Modified]" ++ msgstr " [Ændret]" ++ ++ msgid "[Not edited]" ++ msgstr "[Ikke redigeret]" ++ ++ msgid "[New file]" ++ msgstr "[Ny fil]" ++ ++ msgid "[Read errors]" ++ msgstr "[Læsefejl]" ++ ++ msgid "[RO]" ++ msgstr "[SB]" ++ ++ msgid "[readonly]" ++ msgstr "[skrivebeskyttet]" ++ ++ #, c-format ++ msgid "1 line --%d%%--" ++ msgstr "1 linje --%d%%--" ++ ++ #, c-format ++ msgid "%ld lines --%d%%--" ++ msgstr "%ld linjer --%d%%--" ++ ++ #, c-format ++ msgid "line %ld of %ld --%d%%-- col " ++ msgstr "linje %ld af %ld --%d%%-- kol " ++ ++ msgid "[No Name]" ++ msgstr "[Intet navn]" ++ ++ msgid "help" ++ msgstr "hjælp" ++ ++ msgid "[Help]" ++ msgstr "[Hjælp]" ++ ++ msgid "[Preview]" ++ msgstr "[ForhÃ¥ndsvisning]" ++ ++ msgid "All" ++ msgstr "Alt" ++ ++ msgid "Bot" ++ msgstr "Ned" ++ ++ msgid "Top" ++ msgstr "Øve" ++ ++ msgid "" ++ "\n" ++ "# Buffer list:\n" ++ msgstr "" ++ "\n" ++ "# Bufferliste:\n" ++ ++ msgid "E382: Cannot write, 'buftype' option is set" ++ msgstr "E382: Kan ikke skrive, 'buftype'-tilvalget er sat" ++ ++ msgid "[Prompt]" ++ msgstr "[Prompt]" ++ ++ msgid "[Scratch]" ++ msgstr "[Kladdeblok]" ++ ++ msgid "" ++ "\n" ++ "--- Signs ---" ++ msgstr "" ++ "\n" ++ "--- Signs ---" ++ ++ #, c-format ++ msgid "Signs for %s:" ++ msgstr "Signs for %s:" ++ ++ #, c-format ++ msgid " line=%ld id=%d name=%s" ++ msgstr " linje=%ld id=%d navn=%s" ++ ++ msgid "E902: Cannot connect to port" ++ msgstr "E902: Kan ikke oprette forbindelse til port" ++ ++ msgid "E901: gethostbyname() in channel_open()" ++ msgstr "E901: gethostbyname() i channel_open()" ++ ++ msgid "E898: socket() in channel_open()" ++ msgstr "E898: socket() i channel_open()" ++ ++ msgid "E903: received command with non-string argument" ++ msgstr "E903: modtog kommando med argument som ikke er en streng" ++ ++ msgid "E904: last argument for expr/call must be a number" ++ msgstr "E904: sidste argument for udtryk/kald skal være et nummer" ++ ++ msgid "E904: third argument for call must be a list" ++ msgstr "E904: tredje argument for kald skal være en liste" ++ ++ #, c-format ++ msgid "E905: received unknown command: %s" ++ msgstr "E905: modtog ukendt kommando: %s" ++ ++ #, c-format ++ msgid "E630: %s(): write while not connected" ++ msgstr "E630: %s(): skrivning mens der ikke er forbindelse" ++ ++ #, c-format ++ msgid "E631: %s(): write failed" ++ msgstr "E631: %s(): skrivning mislykkedes" ++ ++ #, c-format ++ msgid "E917: Cannot use a callback with %s()" ++ msgstr "E917: Kan ikke bruge et callback med %s()" ++ ++ msgid "E912: cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel" ++ msgstr "" ++ "E912: kan ikke bruge ch_evalexpr()/ch_sendexpr() med en rÃ¥- eller nl-kanal" ++ ++ msgid "E906: not an open channel" ++ msgstr "E906: ikke en Ã¥ben kanal" ++ ++ msgid "E920: _io file requires _name to be set" ++ msgstr "E920: _io-fil kræver at _name er sat" ++ ++ msgid "E915: in_io buffer requires in_buf or in_name to be set" ++ msgstr "E915: in_io-buffer kræver at in_buf eller in_name er sat" ++ ++ #, c-format ++ msgid "E918: buffer must be loaded: %s" ++ msgstr "E918: buffer skal være indlæst: %s" ++ ++ msgid "E821: File is encrypted with unknown method" ++ msgstr "E821: Filen er krypteret med ukendt metode" ++ ++ msgid "Warning: Using a weak encryption method; see :help 'cm'" ++ msgstr "Advarsel: Bruger en svag krypteringsmetode; se :help 'cm'" ++ ++ msgid "Enter encryption key: " ++ msgstr "Indtast krypteringsnøgle: " ++ ++ msgid "Enter same key again: " ++ msgstr "Indtast samme nøgle igen: " ++ ++ msgid "Keys don't match!" ++ msgstr "Nøglerne er ikke ens!" ++ ++ msgid "[crypted]" ++ msgstr "[crypted]" ++ ++ #, c-format ++ msgid "E720: Missing colon in Dictionary: %s" ++ msgstr "E720: Manglende kolon i ordbog: %s" ++ ++ #, c-format ++ msgid "E721: Duplicate key in Dictionary: \"%s\"" ++ msgstr "E721: Duplikeret nøgle i ordbog: \"%s\"" ++ ++ #, c-format ++ msgid "E722: Missing comma in Dictionary: %s" ++ msgstr "E722: Manglende komma i ordbog: %s" ++ ++ #, c-format ++ msgid "E723: Missing end of Dictionary '}': %s" ++ msgstr "E723: Manglende slutning pÃ¥ ordbog '}': %s" ++ ++ msgid "extend() argument" ++ msgstr "extend()-argument" ++ ++ #, c-format ++ msgid "E737: Key already exists: %s" ++ msgstr "E737: Nøgle findes allerede: %s" ++ ++ #, c-format ++ msgid "E96: Cannot diff more than %ld buffers" ++ msgstr "E96: Kan ikke diff'e flere end %ld buffere" ++ ++ msgid "E810: Cannot read or write temp files" ++ msgstr "E810: Kan ikke læse eller skrive midlertidige filer" ++ ++ msgid "E97: Cannot create diffs" ++ msgstr "E97: Kan ikke oprette diff'er" ++ ++ msgid "Patch file" ++ msgstr "Patch-fil" ++ ++ msgid "E816: Cannot read patch output" ++ msgstr "E816: Kan ikke læse patch-output" ++ ++ msgid "E98: Cannot read diff output" ++ msgstr "E98: Kan ikke læse diff-output" ++ ++ msgid "E99: Current buffer is not in diff mode" ++ msgstr "E99: Nuværende buffer er ikke i diff-tilstand" ++ ++ msgid "E793: No other buffer in diff mode is modifiable" ++ msgstr "E793: Ingen anden buffer i diff-tilstand kan ændres" ++ ++ msgid "E100: No other buffer in diff mode" ++ msgstr "E100: Ingen anden buffer i diff-tilstand" ++ ++ msgid "E101: More than two buffers in diff mode, don't know which one to use" ++ msgstr "" ++ "E101: Mere end to buffere i diff-tilstand, ved ikke hvilke der skal bruges" ++ ++ #, c-format ++ msgid "E102: Can't find buffer \"%s\"" ++ msgstr "E102: Kan ikke finde bufferen \"%s\"" ++ ++ #, c-format ++ msgid "E103: Buffer \"%s\" is not in diff mode" ++ msgstr "E103: Bufferen \"%s\" er ikke i diff-tilstand" ++ ++ msgid "E787: Buffer changed unexpectedly" ++ msgstr "E787: Buffer ændret uventet" ++ ++ msgid "E104: Escape not allowed in digraph" ++ msgstr "E104: Escape ikke tilladt i digraf" ++ ++ msgid "E544: Keymap file not found" ++ msgstr "E544: Keymap-fil ikke fundet" ++ ++ msgid "E105: Using :loadkeymap not in a sourced file" ++ msgstr "E105: Bruger :loadkeymap ikke i en sourced fil" ++ ++ msgid "E791: Empty keymap entry" ++ msgstr "E791: Tom keymap-post" ++ ++ msgid " Keyword completion (^N^P)" ++ msgstr " Fuldførelse af nøgleord (^N^P)" ++ ++ msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" ++ msgstr " ^X tilstand (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" ++ ++ msgid " Whole line completion (^L^N^P)" ++ msgstr " Fuldførelse af hel linje (^L^N^P)" ++ ++ msgid " File name completion (^F^N^P)" ++ msgstr " Fuldførelse af filnavn (^F^N^P)" ++ ++ msgid " Tag completion (^]^N^P)" ++ msgstr " Fuldførelse af tag (^]^N^P)" ++ ++ msgid " Path pattern completion (^N^P)" ++ msgstr " Fuldførelse af sti (^N^P)" ++ ++ msgid " Definition completion (^D^N^P)" ++ msgstr " Fuldførelse af definition (^D^N^P)" ++ ++ msgid " Dictionary completion (^K^N^P)" ++ msgstr " Fuldførelse af ordbog (^K^N^P)" ++ ++ msgid " Thesaurus completion (^T^N^P)" ++ msgstr " Fuldførelse af tesaurus (^T^N^P)" ++ ++ msgid " Command-line completion (^V^N^P)" ++ msgstr " Fuldførelse af kommandolinje (^V^N^P)" ++ ++ msgid " User defined completion (^U^N^P)" ++ msgstr " Fuldførelse af brugerdefineret (^U^N^P)" ++ ++ msgid " Omni completion (^O^N^P)" ++ msgstr " Fuldførelse af omni (^O^N^P)" ++ ++ msgid " Spelling suggestion (s^N^P)" ++ msgstr " Staveforslag (s^N^P)" ++ ++ msgid " Keyword Local completion (^N^P)" ++ msgstr " Fuldførelse af nøgleord local (^N^P)" ++ ++ msgid "Hit end of paragraph" ++ msgstr "Stødte pÃ¥ slutningen af afsnit" ++ ++ msgid "E839: Completion function changed window" ++ msgstr "E839: Fuldførelse-funktion ændrede vindue" ++ ++ msgid "E840: Completion function deleted text" ++ msgstr "E840: Fuldførelse-funktion slettede tekst" ++ ++ msgid "'dictionary' option is empty" ++ msgstr "'dictionary'-tilvalget er tomt" ++ ++ msgid "'thesaurus' option is empty" ++ msgstr "'thesaurus'-tilvalget er tomt" ++ ++ #, c-format ++ msgid "Scanning dictionary: %s" ++ msgstr "Skanner ordbog: %s" ++ ++ msgid " (insert) Scroll (^E/^Y)" ++ msgstr " (indsæt) Rul (^E/^Y)" ++ ++ msgid " (replace) Scroll (^E/^Y)" ++ msgstr " (erstat) Rul (^E/^Y)" ++ ++ #, c-format ++ msgid "Scanning: %s" ++ msgstr "Skanner: %s" ++ ++ msgid "Scanning tags." ++ msgstr "Skanner tags." ++ ++ msgid "match in file" ++ msgstr "match i fil" ++ ++ msgid " Adding" ++ msgstr " Tilføjer" ++ ++ msgid "-- Searching..." ++ msgstr "-- Søger..." ++ ++ msgid "Back at original" ++ msgstr "Tilbage ved original" ++ ++ msgid "Word from other line" ++ msgstr "Ord fra anden linje" ++ ++ msgid "The only match" ++ msgstr "Det eneste match" ++ ++ #, c-format ++ msgid "match %d of %d" ++ msgstr "match %d af %d" ++ ++ #, c-format ++ msgid "match %d" ++ msgstr "match %d" ++ ++ msgid "E18: Unexpected characters in :let" ++ msgstr "E18: Uventede tegn i :let" ++ ++ #, c-format ++ msgid "E121: Undefined variable: %s" ++ msgstr "E121: Udefineret variabel: %s" ++ ++ msgid "E111: Missing ']'" ++ msgstr "E111: Manglende ']'" ++ ++ msgid "E719: Cannot use [:] with a Dictionary" ++ msgstr "E719: Kan ikke bruge [:] med en ordbog" ++ ++ #, c-format ++ msgid "E734: Wrong variable type for %s=" ++ msgstr "E734: Forkert variabeltype for %s=" ++ ++ #, c-format ++ msgid "E461: Illegal variable name: %s" ++ msgstr "E461: Ulovligt variabelnavn: %s" ++ ++ msgid "E806: using Float as a String" ++ msgstr "E806: bruger flydende kommatal som en streng" ++ ++ msgid "E687: Less targets than List items" ++ msgstr "E687: Færre mÃ¥l end listepunkter" ++ ++ msgid "E688: More targets than List items" ++ msgstr "E688: Flere mÃ¥l end listepunkter" ++ ++ msgid "Double ; in list of variables" ++ msgstr "Dobbelt ; i liste over variabler" ++ ++ #, c-format ++ msgid "E738: Can't list variables for %s" ++ msgstr "E738: Kan ikke opliste variabler for %s" ++ ++ msgid "E689: Can only index a List or Dictionary" ++ msgstr "E689: Kan kun indeksere en liste eller ordbog" ++ ++ msgid "E708: [:] must come last" ++ msgstr "E708: [:] skal være sidst" ++ ++ msgid "E709: [:] requires a List value" ++ msgstr "E709: [:] kræver en listeværdi" ++ ++ msgid "E710: List value has more items than target" ++ msgstr "E710: Listeværdi har flere punkter end mÃ¥l" ++ ++ msgid "E711: List value has not enough items" ++ msgstr "E711: Listeværdi har ikke nok punkter" ++ ++ msgid "E690: Missing \"in\" after :for" ++ msgstr "E690: Manglende \"in\" efter :for" ++ ++ #, c-format ++ msgid "E108: No such variable: \"%s\"" ++ msgstr "E108: Ingen sÃ¥dan variabel: \"%s\"" ++ ++ #, c-format ++ msgid "E940: Cannot lock or unlock variable %s" ++ msgstr "E940: Kan ikke lÃ¥se eller lÃ¥se op for variablen %s" ++ ++ msgid "E743: variable nested too deep for (un)lock" ++ msgstr "E743: variabel indlejret for dybt til at blive lÃ¥st/lÃ¥st op" ++ ++ msgid "E109: Missing ':' after '?'" ++ msgstr "E109: Manglende ':' efter '?'" ++ ++ msgid "E804: Cannot use '%' with Float" ++ msgstr "E804: Kan ikke bruge '%' med flydende kommatal" ++ ++ msgid "E110: Missing ')'" ++ msgstr "E110: Manglende ')'" ++ ++ msgid "E695: Cannot index a Funcref" ++ msgstr "E695: Kan ikke indeksere en funcref" ++ ++ msgid "E909: Cannot index a special variable" ++ msgstr "E909: Kan ikke indeksere en speciel variabel" ++ ++ #, c-format ++ msgid "E112: Option name missing: %s" ++ msgstr "E112: Tilvalgsnavn mangler: %s" ++ ++ #, c-format ++ msgid "E113: Unknown option: %s" ++ msgstr "E113: Ukendt tilvalg: %s" ++ ++ #, c-format ++ msgid "E114: Missing quote: %s" ++ msgstr "E114: Manglende citationstegn: %s" ++ ++ #, c-format ++ msgid "E115: Missing quote: %s" ++ msgstr "E115: Manglende citationstegn: %s" ++ ++ msgid "Not enough memory to set references, garbage collection aborted!" ++ msgstr "Ikke nok hukommelse til at sætte referencer, affaldsindsamling afbrudt!" ++ ++ msgid "E724: variable nested too deep for displaying" ++ msgstr "E724: variabel indlejret for dybt til at blive vist" ++ ++ msgid "E805: Using a Float as a Number" ++ msgstr "E805: Bruger et flydende kommatal som et nummer" ++ ++ msgid "E703: Using a Funcref as a Number" ++ msgstr "E703: Bruger en funcref som et nummer" ++ ++ msgid "E745: Using a List as a Number" ++ msgstr "E745: Bruger en liste som et nummer" ++ ++ msgid "E728: Using a Dictionary as a Number" ++ msgstr "E728: Bruger en ordbog som et nummer" ++ ++ msgid "E910: Using a Job as a Number" ++ msgstr "E910: Bruger et job som et nummer" ++ ++ msgid "E913: Using a Channel as a Number" ++ msgstr "E913: Bruger en kanal som et nummer" ++ ++ msgid "E891: Using a Funcref as a Float" ++ msgstr "E891: Bruger en funcref som et fyldende kommatal" ++ ++ msgid "E892: Using a String as a Float" ++ msgstr "E892: Bruger en streng som et flydende kommatal" ++ ++ msgid "E893: Using a List as a Float" ++ msgstr "E893: Bruger en liste som et flydende kommatal" ++ ++ msgid "E894: Using a Dictionary as a Float" ++ msgstr "E894: Bruger en ordbog som et flydende kommatal" ++ ++ msgid "E907: Using a special value as a Float" ++ msgstr "E907: Bruger en speciel værdi som et flydende kommatal" ++ ++ msgid "E911: Using a Job as a Float" ++ msgstr "E911: Bruger et job som et flydende kommatal" ++ ++ msgid "E914: Using a Channel as a Float" ++ msgstr "E914: Bruger en kanal som et flydende kommatal" ++ ++ msgid "E729: using Funcref as a String" ++ msgstr "E729: bruger funcref som en streng" ++ ++ msgid "E730: using List as a String" ++ msgstr "E730: bruger liste som en streng" ++ ++ msgid "E731: using Dictionary as a String" ++ msgstr "E731: bruger ordbog som en streng" ++ ++ msgid "E908: using an invalid value as a String" ++ msgstr "E908: bruger en ugyldig værdi som en streng" ++ ++ #, c-format ++ msgid "E795: Cannot delete variable %s" ++ msgstr "E795: Kan ikke slette variablen %s" ++ ++ #, c-format ++ msgid "E704: Funcref variable name must start with a capital: %s" ++ msgstr "E704: Funcref-variabelnavn skal begynde med et stort bogstav: %s" ++ ++ #, c-format ++ msgid "E705: Variable name conflicts with existing function: %s" ++ msgstr "E705: Variabelnavn er i konflikt med eksisterende funktion: %s" ++ ++ #, c-format ++ msgid "E741: Value is locked: %s" ++ msgstr "E741: Værdien er lÃ¥st: %s" ++ ++ msgid "Unknown" ++ msgstr "Ukendt" ++ ++ #, c-format ++ msgid "E742: Cannot change value of %s" ++ msgstr "E742: Kan ikke ændre værdien af %s" ++ ++ msgid "E698: variable nested too deep for making a copy" ++ msgstr "E698: variabel indlejret for dybt til at lave en kopi" ++ ++ msgid "" ++ "\n" ++ "# global variables:\n" ++ msgstr "" ++ "\n" ++ "# globale variabler:\n" ++ ++ msgid "" ++ "\n" ++ "\tLast set from " ++ msgstr "" ++ "\n" ++ "\tSidst sat fra " ++ ++ msgid "E691: Can only compare List with List" ++ msgstr "E691: Kan kun sammenligne liste med liste" ++ ++ msgid "E692: Invalid operation for List" ++ msgstr "E692: Ugyldig handling for liste" ++ ++ msgid "E735: Can only compare Dictionary with Dictionary" ++ msgstr "E735: Kan kun sammenligne ordbog med ordbog" ++ ++ msgid "E736: Invalid operation for Dictionary" ++ msgstr "E736: Ugyldig handling for ordbog" ++ ++ msgid "E694: Invalid operation for Funcrefs" ++ msgstr "E694: Ugyldig handling for funcref'er" ++ ++ msgid "map() argument" ++ msgstr "map()-argument" ++ ++ msgid "filter() argument" ++ msgstr "filter()-argument" ++ ++ #, c-format ++ msgid "E686: Argument of %s must be a List" ++ msgstr "E686: Argument af %s skal være en liste" ++ ++ msgid "E928: String required" ++ msgstr "E928: Streng kræves" ++ ++ msgid "E808: Number or Float required" ++ msgstr "E808: Nummer eller flydende kommatal kræves" ++ ++ msgid "add() argument" ++ msgstr "add()-argument" ++ ++ msgid "E785: complete() can only be used in Insert mode" ++ msgstr "E785: complete() kan kun bruges i indsæt-tilstand" ++ ++ msgid "&Ok" ++ msgstr "&Ok" ++ ++ #, c-format ++ msgid "+-%s%3ld line: " ++ msgid_plural "+-%s%3ld lines: " ++ msgstr[0] "+-%s%3ld linje: " ++ msgstr[1] "+-%s%3ld linjer: " ++ ++ #, c-format ++ msgid "E700: Unknown function: %s" ++ msgstr "E700: Ukendt funktion: %s" ++ ++ msgid "E922: expected a dict" ++ msgstr "E922: ventede en ordbog" ++ ++ msgid "E923: Second argument of function() must be a list or a dict" ++ msgstr "E923: Andet argument af function() skal være en liste eller en ordbog" ++ ++ msgid "" ++ "&OK\n" ++ "&Cancel" ++ msgstr "" ++ "&OK\n" ++ "&Annuller" ++ ++ msgid "called inputrestore() more often than inputsave()" ++ msgstr "kaldte inputrestore() flere gange end inputsave()" ++ ++ msgid "insert() argument" ++ msgstr "insert()-argument" ++ ++ msgid "E786: Range not allowed" ++ msgstr "E786: OmrÃ¥de ikke tilladt" ++ ++ msgid "E916: not a valid job" ++ msgstr "E916: ikke et gyldigt job" ++ ++ msgid "E701: Invalid type for len()" ++ msgstr "E701: Ugyldig type for len()" ++ ++ #, c-format ++ msgid "E798: ID is reserved for \":match\": %ld" ++ msgstr "E798: ID er reserveret til \":match\": %ld" ++ ++ msgid "E726: Stride is zero" ++ msgstr "E726: Stride er nul" ++ ++ msgid "E727: Start past end" ++ msgstr "E727: Start efter slutningen" ++ ++ msgid "<empty>" ++ msgstr "<tom>" ++ ++ msgid "E240: No connection to the X server" ++ msgstr "E240: Ingen forbindelse til X-serveren" ++ ++ #, c-format ++ msgid "E241: Unable to send to %s" ++ msgstr "E241: Kan ikke sende til %s" ++ ++ msgid "E277: Unable to read a server reply" ++ msgstr "E277: Kan ikke læse et serversvar" ++ ++ msgid "E941: already started a server" ++ msgstr "E941: allerede startet en server" ++ ++ msgid "E942: +clientserver feature not available" ++ msgstr "E942: +clientserver-funktionalitet ikke tilgængelig" ++ ++ msgid "remove() argument" ++ msgstr "remove()-argument" ++ ++ msgid "E655: Too many symbolic links (cycle?)" ++ msgstr "E655: For mange symbolske links (cyklus?)" ++ ++ msgid "reverse() argument" ++ msgstr "reverse()-argument" ++ ++ msgid "E258: Unable to send to client" ++ msgstr "E258: Kan ikke sende til klient" ++ ++ #, c-format ++ msgid "E927: Invalid action: '%s'" ++ msgstr "E927: Ugyldig handling: '%s'" ++ ++ msgid "sort() argument" ++ msgstr "sort()-argument" ++ ++ msgid "uniq() argument" ++ msgstr "uniq()-argument" ++ ++ msgid "E702: Sort compare function failed" ++ msgstr "E702: Sort-sammenligningsfunktion mislykkedes" ++ ++ msgid "E882: Uniq compare function failed" ++ msgstr "E882: Uniq-sammenligningsfunktion mislykkedes" ++ ++ msgid "(Invalid)" ++ msgstr "(Ugyldig)" ++ ++ #, c-format ++ msgid "E935: invalid submatch number: %d" ++ msgstr "E935: ugyldigt undermatch-nummer: %d" ++ ++ msgid "E677: Error writing temp file" ++ msgstr "E677: Fejl ved skrivning af midlertidig fil" ++ ++ msgid "E921: Invalid callback argument" ++ msgstr "E921: Ugyldigt callback-argument" ++ ++ #, c-format ++ msgid "<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s" ++ msgstr "<%s>%s%s %d, hex %02x, oct %03o, digr %s" ++ ++ #, c-format ++ msgid "<%s>%s%s %d, Hex %02x, Octal %03o" ++ msgstr "<%s>%s%s %d, hex %02x, octal %03o" ++ ++ #, c-format ++ msgid "> %d, Hex %04x, Oct %o, Digr %s" ++ msgstr "> %d, hex %04x, oct %o, digr %s" ++ ++ #, c-format ++ msgid "> %d, Hex %08x, Oct %o, Digr %s" ++ msgstr "> %d, hex %08x, oct %o, digr %s" ++ ++ #, c-format ++ msgid "> %d, Hex %04x, Octal %o" ++ msgstr "> %d, hex %04x, octal %o" ++ ++ #, c-format ++ msgid "> %d, Hex %08x, Octal %o" ++ msgstr "> %d, hex %08x, octal %o" ++ ++ msgid "E134: Move lines into themselves" ++ msgstr "E134: flyt linjer ind i dem selv" ++ ++ msgid "1 line moved" ++ msgstr "1 linje flyttet" ++ ++ #, c-format ++ msgid "%ld lines moved" ++ msgstr "%ld linjer flyttet" ++ ++ #, c-format ++ msgid "%ld lines filtered" ++ msgstr "%ld linjer filtreret" ++ ++ msgid "E135: *Filter* Autocommands must not change current buffer" ++ msgstr "E135: *Filter*-autokommandoer mÃ¥ ikke ændre nuværende buffer" ++ ++ msgid "[No write since last change]\n" ++ msgstr "[Ingen skrivning siden sidste ændring]\n" ++ ++ #, c-format ++ msgid "%sviminfo: %s in line: " ++ msgstr "%sviminfo: %s pÃ¥ linje: " ++ ++ msgid "E136: viminfo: Too many errors, skipping rest of file" ++ msgstr "E136: viminfo: For mange fejl, springer resten af filen over" ++ ++ #, c-format ++ msgid "Reading viminfo file \"%s\"%s%s%s" ++ msgstr "Læser viminfo-filen \"%s\"%s%s%s" ++ ++ msgid " info" ++ msgstr " info" ++ ++ msgid " marks" ++ msgstr " mærker" ++ ++ msgid " oldfiles" ++ msgstr " gamle filer" ++ ++ msgid " FAILED" ++ msgstr " MISLYKKEDES" ++ ++ #, c-format ++ msgid "E137: Viminfo file is not writable: %s" ++ msgstr "E137: Viminfo-filen er skrivebeskyttet: %s" ++ ++ #, c-format ++ msgid "E929: Too many viminfo temp files, like %s!" ++ msgstr "E929: For mange midlertidige filer for viminfo, sÃ¥som %s!" ++ ++ #, c-format ++ msgid "E138: Can't write viminfo file %s!" ++ msgstr "E138: Kan ikke skrive viminfo-filen %s!" ++ ++ #, c-format ++ msgid "Writing viminfo file \"%s\"" ++ msgstr "Skriver viminfo-filen \"%s\"" ++ ++ #, c-format ++ msgid "E886: Can't rename viminfo file to %s!" ++ msgstr "E886: Kan ikke omdøbe viminfo-fil til %s!" ++ ++ #, c-format ++ msgid "# This viminfo file was generated by Vim %s.\n" ++ msgstr "# Denne viminfo-fil blev genereret af Vim %s.\n" ++ ++ msgid "" ++ "# You may edit it if you're careful!\n" ++ "\n" ++ msgstr "" ++ "# Du kan redigere den, hvis du er forsigtig!\n" ++ "\n" ++ ++ msgid "# Value of 'encoding' when this file was written\n" ++ msgstr "# Værdien af 'encoding' da filen blev skrevet\n" ++ ++ msgid "Illegal starting char" ++ msgstr "Ulovligt tegn i begyndelsen" ++ ++ msgid "" ++ "\n" ++ "# Bar lines, copied verbatim:\n" ++ msgstr "" ++ "\n" ++ "#-bjælkelinjer, kopieret ordret:\n" ++ ++ msgid "Save As" ++ msgstr "Gem som" ++ ++ msgid "Write partial file?" ++ msgstr "Skriv ufuldstændig fil?" ++ ++ msgid "E140: Use ! to write partial buffer" ++ msgstr "E140: Brug ! til at skrive ufuldstændig buffer" ++ ++ #, c-format ++ msgid "Overwrite existing file \"%s\"?" ++ msgstr "Overskriv eksisterende fil \"%s\"?" ++ ++ #, c-format ++ msgid "Swap file \"%s\" exists, overwrite anyway?" ++ msgstr "Swap-filen \"%s\" findes, overskriv alligevel?" ++ ++ #, c-format ++ msgid "E768: Swap file exists: %s (:silent! overrides)" ++ msgstr "E768: Swap-filen findes: %s (:silent! tilsidesætter)" ++ ++ #, c-format ++ msgid "E141: No file name for buffer %ld" ++ msgstr "E141: Intet filnavn for buffer %ld" ++ ++ msgid "E142: File not written: Writing is disabled by 'write' option" ++ msgstr "E142: Fil ikke skrevet: Skrivning er deaktiveret af 'write'-tilvalget" ++ ++ #, c-format ++ msgid "" ++ "'readonly' option is set for \"%s\".\n" ++ "Do you wish to write anyway?" ++ msgstr "" ++ "'readonly'-tilvalget er sat for \"%s\".\n" ++ "Vil du skrive alligevel?" ++ ++ #, c-format ++ msgid "" ++ "File permissions of \"%s\" are read-only.\n" ++ "It may still be possible to write it.\n" ++ "Do you wish to try?" ++ msgstr "" ++ "Filtilladelserne for \"%s\" er skrivebeskyttede.\n" ++ "Der kan stadig være mulighed for at skrive den.\n" ++ "Vil du prøve?" ++ ++ #, c-format ++ msgid "E505: \"%s\" is read-only (add ! to override)" ++ msgstr "E505: \"%s\" er skrivebeskyttet (tilføj ! for at tilsidesætte)" ++ ++ msgid "Edit File" ++ msgstr "Rediger fil" ++ ++ #, c-format ++ msgid "E143: Autocommands unexpectedly deleted new buffer %s" ++ msgstr "E143: Autokommandoer slettede uventede ny buffer %s" ++ ++ msgid "E144: non-numeric argument to :z" ++ msgstr "E144: ikke-numerisk argument til :z" ++ ++ msgid "E145: Shell commands not allowed in rvim" ++ msgstr "E145: Skalkommandoer er ikke tilladt i rvim" ++ ++ msgid "E146: Regular expressions can't be delimited by letters" ++ msgstr "E146: Regulære udtryk kan ikke afgrænses af bogstaver" ++ ++ #, c-format ++ msgid "replace with %s (y/n/a/q/l/^E/^Y)?" ++ msgstr "erstat med %s (y/n/a/q/l/^E/^Y)?" ++ ++ msgid "(Interrupted) " ++ msgstr "(Afbrudt) " ++ ++ msgid "1 match" ++ msgstr "1 match" ++ ++ msgid "1 substitution" ++ msgstr "1 erstatning" ++ ++ #, c-format ++ msgid "%ld matches" ++ msgstr "%ld match" ++ ++ #, c-format ++ msgid "%ld substitutions" ++ msgstr "%ld erstatninger" ++ ++ msgid " on 1 line" ++ msgstr " pÃ¥ 1 linje" ++ ++ #, c-format ++ msgid " on %ld lines" ++ msgstr " pÃ¥ %ld linjer" ++ ++ msgid "E147: Cannot do :global recursive with a range" ++ msgstr "E147: Kan ikke foretage :global rekursivt med et omrÃ¥de" ++ ++ msgid "E148: Regular expression missing from global" ++ msgstr "E148: Regulære udtryk mangler fra global" ++ ++ #, c-format ++ msgid "Pattern found in every line: %s" ++ msgstr "Mønster fundet pÃ¥ hver linje: %s" ++ ++ #, c-format ++ msgid "Pattern not found: %s" ++ msgstr "Mønster ikke fundet: %s" ++ ++ msgid "" ++ "\n" ++ "# Last Substitute String:\n" ++ "$" ++ msgstr "" ++ "\n" ++ "# Sidste erstatningsstreng:\n" ++ "$" ++ ++ msgid "E478: Don't panic!" ++ msgstr "E478: Tag det bare helt roligt!" ++ ++ #, c-format ++ msgid "E661: Sorry, no '%s' help for %s" ++ msgstr "E661: Beklager, ingen '%s' hjælp til %s" ++ ++ #, c-format ++ msgid "E149: Sorry, no help for %s" ++ msgstr "E149: Beklager, ingen hjælp til %s" ++ ++ #, c-format ++ msgid "Sorry, help file \"%s\" not found" ++ msgstr "Beklager, hjælpfilen \"%s\" ikke fundet" ++ ++ #, c-format ++ msgid "E151: No match: %s" ++ msgstr "E151: Intet match: %s" ++ ++ #, c-format ++ msgid "E152: Cannot open %s for writing" ++ msgstr "E152: Kan ikke Ã¥bne %s til skrivning" ++ ++ #, c-format ++ msgid "E153: Unable to open %s for reading" ++ msgstr "E153: Kan ikke Ã¥bne %s til læsning" ++ ++ #, c-format ++ msgid "E670: Mix of help file encodings within a language: %s" ++ msgstr "E670: Blanding af kodninger for hjælpfiler i samme sprog: %s" ++ ++ #, c-format ++ msgid "E154: Duplicate tag \"%s\" in file %s/%s" ++ msgstr "E154: Duplikeret tag \"%s\" i fil %s/%s" ++ ++ #, c-format ++ msgid "E150: Not a directory: %s" ++ msgstr "E150: Ikke en mappe: %s" ++ ++ #, c-format ++ msgid "E160: Unknown sign command: %s" ++ msgstr "E160: Ukendt sign-kommando: %s" ++ ++ msgid "E156: Missing sign name" ++ msgstr "E156: Manglende sign-navn" ++ ++ msgid "E612: Too many signs defined" ++ msgstr "E612: For mange signs defineret" ++ ++ #, c-format ++ msgid "E239: Invalid sign text: %s" ++ msgstr "E239: Ugyldig sign-tekst: %s" ++ ++ #, c-format ++ msgid "E155: Unknown sign: %s" ++ msgstr "E155: Ukendt sign: %s" ++ ++ msgid "E159: Missing sign number" ++ msgstr "E159: Manglende sign-nummer" ++ ++ #, c-format ++ msgid "E158: Invalid buffer name: %s" ++ msgstr "E158: Ugyldigt buffernavn: %s" ++ ++ msgid "E934: Cannot jump to a buffer that does not have a name" ++ msgstr "E934: Kan ikke hoppe til en buffer som ikke har et navn" ++ ++ #, c-format ++ msgid "E157: Invalid sign ID: %ld" ++ msgstr "E157: Ugyldigt sign-ID: %ld" ++ ++ #, c-format ++ msgid "E885: Not possible to change sign %s" ++ msgstr "E885: Det er ikke muligt at ændre sign %s" ++ ++ msgid " (NOT FOUND)" ++ msgstr " (IKKE FUNDET)" ++ ++ msgid " (not supported)" ++ msgstr " (understøttes ikke)" ++ ++ msgid "[Deleted]" ++ msgstr "[Slettet]" ++ ++ msgid "No old files" ++ msgstr "Ingen gamle filer" ++ ++ msgid "Entering Debug mode. Type \"cont\" to continue." ++ msgstr "GÃ¥r i fejlretningstilstand. Skriv \"cont\" for at fortsætte." ++ ++ #, c-format ++ msgid "Oldval = \"%s\"" ++ msgstr "Oldval = \"%s\"" ++ ++ #, c-format ++ msgid "Newval = \"%s\"" ++ msgstr "Newval = \"%s\"" ++ ++ #, c-format ++ msgid "line %ld: %s" ++ msgstr "linje %ld: %s" ++ ++ #, c-format ++ msgid "cmd: %s" ++ msgstr "cmd: %s" ++ ++ msgid "frame is zero" ++ msgstr "ramme er nul" ++ ++ #, c-format ++ msgid "frame at highest level: %d" ++ msgstr "ramme pÃ¥ højeste niveau: %d" ++ ++ #, c-format ++ msgid "Breakpoint in \"%s%s\" line %ld" ++ msgstr "Breakpoint i \"%s%s\" linje %ld" ++ ++ #, c-format ++ msgid "E161: Breakpoint not found: %s" ++ msgstr "E161: Breakpoint ikke fundet: %s" ++ ++ msgid "No breakpoints defined" ++ msgstr "Ingen breakpoints defineret" ++ ++ #, c-format ++ msgid "%3d %s %s line %ld" ++ msgstr "%3d %s %s linje %ld" ++ ++ #, c-format ++ msgid "%3d expr %s" ++ msgstr "%3d udtryk %s" ++ ++ msgid "E750: First use \":profile start {fname}\"" ++ msgstr "E750: Brug først \":profile start {fname}\"" ++ ++ #, c-format ++ msgid "Save changes to \"%s\"?" ++ msgstr "Gem ændringer til \"%s\"?" ++ ++ #, c-format ++ msgid "E947: Job still running in buffer \"%s\"" ++ msgstr "E947: Job kører stadig i bufferen \"%s\"" ++ ++ #, c-format ++ msgid "E162: No write since last change for buffer \"%s\"" ++ msgstr "E162: Ingen skrivning siden sidste ændring for bufferen \"%s\"" ++ ++ msgid "Warning: Entered other buffer unexpectedly (check autocommands)" ++ msgstr "Advarsel: Indtastede anden buffer uventede (tjek autokommandoer)" ++ ++ msgid "E163: There is only one file to edit" ++ msgstr "E163: Der er kun én fil at redigere" ++ ++ msgid "E164: Cannot go before first file" ++ msgstr "E164: Kan ikke gÃ¥ før første fil" ++ ++ msgid "E165: Cannot go beyond last file" ++ msgstr "E165: Kan ikke gÃ¥ over sidste fil" ++ ++ #, c-format ++ msgid "E666: compiler not supported: %s" ++ msgstr "E666: kompiler understøttes ikke: %s" ++ ++ #, c-format ++ msgid "Searching for \"%s\" in \"%s\"" ++ msgstr "Søger efter \"%s\" i \"%s\"" ++ ++ #, c-format ++ msgid "Searching for \"%s\"" ++ msgstr "Søger efter \"%s\"" ++ ++ #, c-format ++ msgid "not found in '%s': \"%s\"" ++ msgstr "ikke fundet i '%s': \"%s\"" ++ ++ #, c-format ++ msgid "W20: Required python version 2.x not supported, ignoring file: %s" ++ msgstr "W20: Krævede python-version 2.x understøttes ikke, ignorerer fil: %s" ++ ++ #, c-format ++ msgid "W21: Required python version 3.x not supported, ignoring file: %s" ++ msgstr "W21: Krævede python-version 3.x understøttes ikke, ignorerer fil: %s" ++ ++ msgid "Source Vim script" ++ msgstr "Source Vim-script" ++ ++ #, c-format ++ msgid "Cannot source a directory: \"%s\"" ++ msgstr "Kan ikke source en mappe: \"%s\"" ++ ++ #, c-format ++ msgid "could not source \"%s\"" ++ msgstr "kunne ikke source \"%s\"" ++ ++ #, c-format ++ msgid "line %ld: could not source \"%s\"" ++ msgstr "linje %ld: kunne ikke source \"%s\"" ++ ++ #, c-format ++ msgid "sourcing \"%s\"" ++ msgstr "sourcing \"%s\"" ++ ++ #, c-format ++ msgid "line %ld: sourcing \"%s\"" ++ msgstr "linje %ld: sourcing \"%s\"" ++ ++ #, c-format ++ msgid "finished sourcing %s" ++ msgstr "færdig med sourcing af %s" ++ ++ #, c-format ++ msgid "continuing in %s" ++ msgstr "fortsætter i %s" ++ ++ msgid "modeline" ++ msgstr "tilstandslinje" ++ ++ msgid "--cmd argument" ++ msgstr "--cmd-argument" ++ ++ msgid "-c argument" ++ msgstr "-c-argument" ++ ++ msgid "environment variable" ++ msgstr "miljøvariabel" ++ ++ msgid "error handler" ++ msgstr "fejlhÃ¥ndtering" ++ ++ msgid "W15: Warning: Wrong line separator, ^M may be missing" ++ msgstr "W15: Advarsel: Forkert linjeseparator, ^M mangler muligvis" ++ ++ msgid "E167: :scriptencoding used outside of a sourced file" ++ msgstr "E167: :scriptencoding brugt udenfor en sourced fil" ++ ++ msgid "E168: :finish used outside of a sourced file" ++ msgstr "E168: :finish udenfor en sourced fil" ++ ++ #, c-format ++ msgid "Current %slanguage: \"%s\"" ++ msgstr "Nuværende %ssprog: \"%s\"" ++ ++ #, c-format ++ msgid "E197: Cannot set language to \"%s\"" ++ msgstr "E197: Kan ikke sætte sprog til \"%s\"" ++ ++ msgid "Entering Ex mode. Type \"visual\" to go to Normal mode." ++ msgstr "GÃ¥r i Ex-tilstand. Skriv \"visual\" for at gÃ¥ til normal tilstand." ++ ++ msgid "E501: At end-of-file" ++ msgstr "E501: Ved filens slutning" ++ ++ msgid "E169: Command too recursive" ++ msgstr "E169: Kommando for rekursiv" ++ ++ #, c-format ++ msgid "E605: Exception not caught: %s" ++ msgstr "E605: Undtagelse ikke fanget: %s" ++ ++ msgid "End of sourced file" ++ msgstr "Slut pÃ¥ sourced fil" ++ ++ msgid "End of function" ++ msgstr "Slutning af funktion" ++ ++ msgid "E464: Ambiguous use of user-defined command" ++ msgstr "E464: Flertydig brug af brugerdefineret kommando" ++ ++ msgid "E492: Not an editor command" ++ msgstr "E492: Ikke en editor-kommando" ++ ++ msgid "E493: Backwards range given" ++ msgstr "E493: Baglæns omrÃ¥de givet" ++ ++ msgid "Backwards range given, OK to swap" ++ msgstr "Baglæns omrÃ¥de givet, OK at bytte om" ++ ++ msgid "E494: Use w or w>>" ++ msgstr "E494: Brug w eller w>>" ++ ++ msgid "E943: Command table needs to be updated, run 'make cmdidxs'" ++ msgstr "E943: Kommandotabel skal opdateres, kør 'make cmdidxs'" ++ ++ msgid "E319: Sorry, the command is not available in this version" ++ msgstr "E319: Beklager, kommandoen er ikke tilgængelig i denne version" ++ ++ msgid "1 more file to edit. Quit anyway?" ++ msgstr "1 fil mere at redigere. Afslut alligevel?" ++ ++ #, c-format ++ msgid "%d more files to edit. Quit anyway?" ++ msgstr "%d filer mere at redigere. Afslut alligevel?" ++ ++ msgid "E173: 1 more file to edit" ++ msgstr "E173: 1 fil mere at redigere" ++ ++ #, c-format ++ msgid "E173: %ld more files to edit" ++ msgstr "E173: %ld filer mere at redigere" ++ ++ msgid "E174: Command already exists: add ! to replace it" ++ msgstr "E174: Kommandoen findes allerede: tilføj ! for at erstatte den" ++ ++ msgid "" ++ "\n" ++ " Name Args Address Complete Definition" ++ msgstr "" ++ "\n" ++ " Navn Argumenter Adresse Fuldført Definition" ++ ++ msgid "No user-defined commands found" ++ msgstr "Fandt ingen brugerdefinerede kommandoer" ++ ++ msgid "E175: No attribute specified" ++ msgstr "E175: Ingen attribut angivet" ++ ++ msgid "E176: Invalid number of arguments" ++ msgstr "E176: Ugyldigt antal argumenter" ++ ++ msgid "E177: Count cannot be specified twice" ++ msgstr "E177: Tælling mÃ¥ ikke angives to gange" ++ ++ msgid "E178: Invalid default value for count" ++ msgstr "E178: Ugyldig standardværdi for tælling" ++ ++ msgid "E179: argument required for -complete" ++ msgstr "E179: argument kræves til -complete" ++ ++ msgid "E179: argument required for -addr" ++ msgstr "E179: argument kræves til -addr" ++ ++ #, c-format ++ msgid "E181: Invalid attribute: %s" ++ msgstr "E181: Ugyldig attribut: %s" ++ ++ msgid "E182: Invalid command name" ++ msgstr "E182: Ugyldigt kommandonavn" ++ ++ msgid "E183: User defined commands must start with an uppercase letter" ++ msgstr "E183: Brugerdefinerede kommandoer skal begynde med et stort bogstav" ++ ++ msgid "E841: Reserved name, cannot be used for user defined command" ++ msgstr "E841: Reserveret navn, kan ikke bruges til brugerdefineret kommando" ++ ++ #, c-format ++ msgid "E184: No such user-defined command: %s" ++ msgstr "E184: Ingen sÃ¥dan brugerdefineret kommando: %s" ++ ++ #, c-format ++ msgid "E180: Invalid address type value: %s" ++ msgstr "E180: Ugyldig værdi for adressetype: %s" ++ ++ #, c-format ++ msgid "E180: Invalid complete value: %s" ++ msgstr "E180: Ugyldig complete-værdi: %s" ++ ++ msgid "E468: Completion argument only allowed for custom completion" ++ msgstr "E468: Fuldførelse-argument kun tilladt for tilpasset fuldførelse" ++ ++ msgid "E467: Custom completion requires a function argument" ++ msgstr "E467: Tilpasset fuldførelse kræver et funktion-argument" ++ ++ msgid "unknown" ++ msgstr "ukendt" ++ ++ #, c-format ++ msgid "E185: Cannot find color scheme '%s'" ++ msgstr "E185: Kan ikke finde farveskemaet '%s'" ++ ++ msgid "Greetings, Vim user!" ++ msgstr "Hejsa, Vim-bruger!" ++ ++ msgid "E784: Cannot close last tab page" ++ msgstr "E784: Kan ikke lukke sidste fanebladsside" ++ ++ msgid "Already only one tab page" ++ msgstr "Allerede kun én fanebladsside" ++ ++ msgid "Edit File in new window" ++ msgstr "Rediger fil i nyt vindue" ++ ++ #, c-format ++ msgid "Tab page %d" ++ msgstr "Fanebladsside %d" ++ ++ msgid "No swap file" ++ msgstr "Ingen swap-fil" ++ ++ msgid "Append File" ++ msgstr "Tilføj fil til slutningen" ++ ++ msgid "E747: Cannot change directory, buffer is modified (add ! to override)" ++ msgstr "" ++ "E747: Kan ikke skifte mappe, buffer er ændret (tilføj ! for at tilsidesætte)" ++ ++ msgid "E186: No previous directory" ++ msgstr "E186: Ingen tidligere ordbog" ++ ++ msgid "E187: Unknown" ++ msgstr "E187: Ukendt" ++ ++ msgid "E465: :winsize requires two number arguments" ++ msgstr "E465: :winsize kræver to nummer-argumenter" ++ ++ #, c-format ++ msgid "Window position: X %d, Y %d" ++ msgstr "Vinduesplacering: X %d, Y %d" ++ ++ msgid "E188: Obtaining window position not implemented for this platform" ++ msgstr "" ++ "E188: Indhentelse af vinduesplacering ikke implementeret pÃ¥ denne platform" ++ ++ msgid "E466: :winpos requires two number arguments" ++ msgstr "E466: :winpos kræver to nummer-argumenter" ++ ++ msgid "E930: Cannot use :redir inside execute()" ++ msgstr "E930: Kan ikke bruge :redir i execute()" ++ ++ msgid "Save Redirection" ++ msgstr "Gem omdirigering" ++ ++ msgid "Save View" ++ msgstr "Gem visning" ++ ++ msgid "Save Session" ++ msgstr "Gem session" ++ ++ msgid "Save Setup" ++ msgstr "Gem opsætning" ++ ++ #, c-format ++ msgid "E739: Cannot create directory: %s" ++ msgstr "E739: Kan ikke oprette mappe: %s" ++ ++ #, c-format ++ msgid "E189: \"%s\" exists (add ! to override)" ++ msgstr "E189: \"%s\" findes (tilføj ! for at tilsidesætte)" ++ ++ #, c-format ++ msgid "E190: Cannot open \"%s\" for writing" ++ msgstr "E190: Kan ikke Ã¥bne \"%s\" til skrivning" ++ ++ msgid "E191: Argument must be a letter or forward/backward quote" ++ msgstr "" ++ "E191: Argument skal være et bogstav eller retvendt/omvendt citationstegn" ++ ++ msgid "E192: Recursive use of :normal too deep" ++ msgstr "E192: Rekursiv brug af :normal for dyb" ++ ++ msgid "E809: #< is not available without the +eval feature" ++ msgstr "E809: #< er ikke tilgængelig uden +eval-funktionaliteten" ++ ++ msgid "E194: No alternate file name to substitute for '#'" ++ msgstr "E194: Intet alternate-filnavn til erstatning for '#'" ++ ++ msgid "E495: no autocommand file name to substitute for \"<afile>\"" ++ msgstr "E495: intet autokommando-filnavn til erstatning for \"<afile>\"" ++ ++ msgid "E496: no autocommand buffer number to substitute for \"<abuf>\"" ++ msgstr "E496: intet autokommando-buffernummer til erstatning for \"<abuf>\"" ++ ++ msgid "E497: no autocommand match name to substitute for \"<amatch>\"" ++ msgstr "E497: intet autokommando-matchnavn til erstatning for \"<amatch>\"" ++ ++ msgid "E498: no :source file name to substitute for \"<sfile>\"" ++ msgstr "E498: intet :source-filnavn til erstatning for \"<sfile>\"" ++ ++ msgid "E842: no line number to use for \"<slnum>\"" ++ msgstr "E842: intet linjenummer til brug for \"<slnum>\"" ++ ++ #, no-c-format ++ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\"" ++ msgstr "E499: Tomt filnavn for '%' eller '#', virker kun med \":p:h\"" ++ ++ msgid "E500: Evaluates to an empty string" ++ msgstr "E500: Evaluerer til en tom streng" ++ ++ msgid "E195: Cannot open viminfo file for reading" ++ msgstr "E195: Kan ikke Ã¥bne viminfo-fil til læsning" ++ ++ msgid "Untitled" ++ msgstr "Unavngivet" ++ ++ msgid "E196: No digraphs in this version" ++ msgstr "E196: Ingen digraffer i denne version" ++ ++ msgid "E608: Cannot :throw exceptions with 'Vim' prefix" ++ msgstr "E608: Kan ikke :throw-undtagelser med 'Vim'-præfiks" ++ ++ #, c-format ++ msgid "Exception thrown: %s" ++ msgstr "Undtagelse kastet: %s" ++ ++ #, c-format ++ msgid "Exception finished: %s" ++ msgstr "Undtagelse færdig: %s" ++ ++ #, c-format ++ msgid "Exception discarded: %s" ++ msgstr "Undtagelse forkastet: %s" ++ ++ #, c-format ++ msgid "%s, line %ld" ++ msgstr "%s, linje %ld" ++ ++ #, c-format ++ msgid "Exception caught: %s" ++ msgstr "Undtagelse fanget: %s" ++ ++ #, c-format ++ msgid "%s made pending" ++ msgstr "%s gjort afventende" ++ ++ #, c-format ++ msgid "%s resumed" ++ msgstr "%s genoptaget" ++ ++ #, c-format ++ msgid "%s discarded" ++ msgstr "%s forkastet" ++ ++ msgid "Exception" ++ msgstr "Undtagelse" ++ ++ msgid "Error and interrupt" ++ msgstr "Fejl og afbryd" ++ ++ msgid "Error" ++ msgstr "Fejl" ++ ++ msgid "Interrupt" ++ msgstr "Afbryd" ++ ++ msgid "E579: :if nesting too deep" ++ msgstr "E579: :if-indlejring for dyb" ++ ++ msgid "E580: :endif without :if" ++ msgstr "E580: :endif uden :if" ++ ++ msgid "E581: :else without :if" ++ msgstr "E581: :else uden :if" ++ ++ msgid "E582: :elseif without :if" ++ msgstr "E582: :elseif uden :if" ++ ++ msgid "E583: multiple :else" ++ msgstr "E583: flere :else" ++ ++ msgid "E584: :elseif after :else" ++ msgstr "E584: :elseif efter :else" ++ ++ msgid "E585: :while/:for nesting too deep" ++ msgstr "E585: :while/:for-indlejring for dyb" ++ ++ msgid "E586: :continue without :while or :for" ++ msgstr "E586: :continue uden :while eller :for" ++ ++ msgid "E587: :break without :while or :for" ++ msgstr "E587: :break uden :while eller :for" ++ ++ msgid "E732: Using :endfor with :while" ++ msgstr "E732: Bruger :endfor med :while" ++ ++ msgid "E733: Using :endwhile with :for" ++ msgstr "E733: Bruger :endwhile med :for" ++ ++ msgid "E601: :try nesting too deep" ++ msgstr "E601: :try-indlejring for dyb" ++ ++ msgid "E603: :catch without :try" ++ msgstr "E603: :catch uden :try" ++ ++ msgid "E604: :catch after :finally" ++ msgstr "E604: :catch efter :finally" ++ ++ msgid "E606: :finally without :try" ++ msgstr "E606: :finally uden :try" ++ ++ msgid "E607: multiple :finally" ++ msgstr "E607: flere :finally" ++ ++ msgid "E602: :endtry without :try" ++ msgstr "E602: :endtry uden :try" ++ ++ msgid "E193: :endfunction not inside a function" ++ msgstr "E193: :endfunction ikke i en funktion" ++ ++ msgid "E788: Not allowed to edit another buffer now" ++ msgstr "E788: Ikke tilladt at redigere anden buffer nu" ++ ++ msgid "E811: Not allowed to change buffer information now" ++ msgstr "E811: Ikke tilladt at ændre bufferinformation nu" ++ ++ msgid "tagname" ++ msgstr "tagnavn" ++ ++ msgid " kind file\n" ++ msgstr " kind-fil\n" ++ ++ msgid "'history' option is zero" ++ msgstr "'history'-tilvalget er nul" ++ ++ #, c-format ++ msgid "" ++ "\n" ++ "# %s History (newest to oldest):\n" ++ msgstr "" ++ "\n" ++ "# %s Historik (nyeste til ældste):\n" ++ ++ msgid "Command Line" ++ msgstr "Kommandolinje" ++ ++ msgid "Search String" ++ msgstr "Søgestreng" ++ ++ msgid "Expression" ++ msgstr "Udtryk" ++ ++ msgid "Input Line" ++ msgstr "Inputlinje" ++ ++ msgid "Debug Line" ++ msgstr "Fejlretningslinje" ++ ++ msgid "E198: cmd_pchar beyond the command length" ++ msgstr "E198: cmd_pchar efter kommandolængden" ++ ++ msgid "E199: Active window or buffer deleted" ++ msgstr "E199: Aktivt vindue eller buffer slettet" ++ ++ msgid "E812: Autocommands changed buffer or buffer name" ++ msgstr "E812: Autokommandoer ændrede buffer eller buffernavn" ++ ++ msgid "Illegal file name" ++ msgstr "Ulovlig filnavn" ++ ++ msgid "is a directory" ++ msgstr "er en mappe" ++ ++ msgid "is not a file" ++ msgstr "er ikke en fil" ++ ++ msgid "is a device (disabled with 'opendevice' option)" ++ msgstr "er en enhed (deaktiveret med 'opendevice'-tilvalget)" ++ ++ msgid "[New File]" ++ msgstr "[Ny fil]" ++ ++ msgid "[New DIRECTORY]" ++ msgstr "[Ny MAPPE]" ++ ++ msgid "[File too big]" ++ msgstr "[Filen er for stor]" ++ ++ msgid "[Permission Denied]" ++ msgstr "[Tilladelse nægtet]" ++ ++ msgid "E200: *ReadPre autocommands made the file unreadable" ++ msgstr "E200: *ReadPre-autokommandoer gjorde filen ulæselig" ++ ++ msgid "E201: *ReadPre autocommands must not change current buffer" ++ msgstr "E201: *ReadPre-autokommandoer mÃ¥ ikke ændre nuværende buffer" ++ ++ msgid "Vim: Reading from stdin...\n" ++ msgstr "Vim: Læser fra stdin...\n" ++ ++ msgid "Reading from stdin..." ++ msgstr "Læser fra stdin..." ++ ++ msgid "E202: Conversion made file unreadable!" ++ msgstr "E202: Konvertering gjorde filen ulæselig!" ++ ++ msgid "[fifo/socket]" ++ msgstr "[fifo/sokkel]" ++ ++ msgid "[fifo]" ++ msgstr "[fifo]" ++ ++ msgid "[socket]" ++ msgstr "[sokkel]" ++ ++ msgid "[character special]" ++ msgstr "[character special]" ++ ++ msgid "[CR missing]" ++ msgstr "[CR mangler]" ++ ++ msgid "[long lines split]" ++ msgstr "[opdeling af lange linjer]" ++ ++ msgid "[NOT converted]" ++ msgstr "[IKKE konverteret]" ++ ++ msgid "[converted]" ++ msgstr "[konverteret]" ++ ++ #, c-format ++ msgid "[CONVERSION ERROR in line %ld]" ++ msgstr "[KONVERTERINGSFEJL pÃ¥ linje %ld]" ++ ++ #, c-format ++ msgid "[ILLEGAL BYTE in line %ld]" ++ msgstr "[ULOVLIG BYTE pÃ¥ linje %ld]" ++ ++ msgid "[READ ERRORS]" ++ msgstr "[LÆSEFEJL]" ++ ++ msgid "Can't find temp file for conversion" ++ msgstr "Kan ikke finde midlertidig fil til konvertering" ++ ++ msgid "Conversion with 'charconvert' failed" ++ msgstr "Konvertering med 'charconvert' mislykkedes" ++ ++ msgid "can't read output of 'charconvert'" ++ msgstr "kan ikke læse output af 'charconvert'" ++ ++ msgid "E676: No matching autocommands for acwrite buffer" ++ msgstr "E676: Ingen matchende autokommandoer for acwrite-buffer" ++ ++ msgid "E203: Autocommands deleted or unloaded buffer to be written" ++ msgstr "E203: Autokommandoer slettet eller udlæste buffer som skal skrives" ++ ++ msgid "E204: Autocommand changed number of lines in unexpected way" ++ msgstr "E204: Autokommando ændrede antal linjer pÃ¥ en uventede mÃ¥de" ++ ++ msgid "NetBeans disallows writes of unmodified buffers" ++ msgstr "NetBeans tillader ikke skrivninger af uændrede buffere" ++ ++ msgid "Partial writes disallowed for NetBeans buffers" ++ msgstr "Ufuldstændige skrivninger er ikke tilladt for NetBeans-buffere" ++ ++ msgid "is not a file or writable device" ++ msgstr "er ikke en fil eller enhed som der kan skrives til" ++ ++ msgid "writing to device disabled with 'opendevice' option" ++ msgstr "skrivning til enhed er deaktiveret med 'opendevice'-tilvalget" ++ ++ msgid "is read-only (add ! to override)" ++ msgstr "er skrivebeskyttet (tilføj ! for at tilsidesætte)" ++ ++ msgid "E506: Can't write to backup file (add ! to override)" ++ msgstr "" ++ "E506: Kan ikke skrive til sikkerhedskopieret fil (tilføj ! for at " ++ "tilsidesætte)" ++ ++ msgid "E507: Close error for backup file (add ! to override)" ++ msgstr "" ++ "E507: Fejl ved lukning af sikkerhedskopieret fil (tilføj ! for at " ++ "tilsidesætte)" ++ ++ msgid "E508: Can't read file for backup (add ! to override)" ++ msgstr "" ++ "E508: Kan ikke læse fil til sikkerhedskopiering (tilføj ! for at " ++ "tilsidesætte)" ++ ++ msgid "E509: Cannot create backup file (add ! to override)" ++ msgstr "" ++ "E509: Kan ikke oprette (create) sikkerhedskopieret fil (tilføj ! for at " ++ "tilsidesætte)" ++ ++ msgid "E510: Can't make backup file (add ! to override)" ++ msgstr "" ++ "E510: Kan ikke oprette (make) sikkerhedskopieret fil (tilføj ! for at " ++ "tilsidesætte)" ++ ++ msgid "E214: Can't find temp file for writing" ++ msgstr "E214: Kan ikke finde midlertidig fil til skrivning" ++ ++ msgid "E213: Cannot convert (add ! to write without conversion)" ++ msgstr "E213: Kan ikke konvertere (tilføj ! for at skrive uden konvertering)" ++ ++ msgid "E166: Can't open linked file for writing" ++ msgstr "E166: Kan ikke Ã¥bne linket fil til skrivning" ++ ++ msgid "E212: Can't open file for writing" ++ msgstr "E212: Kan ikke Ã¥bne filen til skrivning" ++ ++ msgid "E949: File changed while writing" ++ msgstr "E949: Filen blev ændret ved skrivning" ++ ++ msgid "E512: Close failed" ++ msgstr "E512: Lukning mislykkedes" ++ ++ msgid "E513: write error, conversion failed (make 'fenc' empty to override)" ++ msgstr "" ++ "E513: fejl ved skrivning, konvertering mislykkedes (gør 'fenc' tom for at " ++ "tilsidesætte)" ++ ++ #, c-format ++ msgid "" ++ "E513: write error, conversion failed in line %ld (make 'fenc' empty to " ++ "override)" ++ msgstr "" ++ "E513: fejl ved skrivning, konvertering mislykkedes pÃ¥ linje %ld (gør 'fenc' " ++ "tom for at tilsidesætte)" ++ ++ msgid "E514: write error (file system full?)" ++ msgstr "E514: skrivefejl (er filsystemet fuldt?)" ++ ++ msgid " CONVERSION ERROR" ++ msgstr " KONVERTERINGSFEJL" ++ ++ #, c-format ++ msgid " in line %ld;" ++ msgstr " pÃ¥ linje %ld;" ++ ++ msgid "[Device]" ++ msgstr "[Enhed]" ++ ++ msgid "[New]" ++ msgstr "[Ny]" ++ ++ msgid " [a]" ++ msgstr " [a]" ++ ++ msgid " appended" ++ msgstr " tilføjet i slutningen" ++ ++ msgid " [w]" ++ msgstr " [s]" ++ ++ msgid " written" ++ msgstr " skrevet" ++ ++ msgid "E205: Patchmode: can't save original file" ++ msgstr "E205: Patchmode: kan ikke gemme original fil" ++ ++ msgid "E206: patchmode: can't touch empty original file" ++ msgstr "E206: patchmode: kan ikke touch tom original fil" ++ ++ msgid "E207: Can't delete backup file" ++ msgstr "E207: Kan ikke slette sikkerhedskopieret fil" ++ ++ msgid "" ++ "\n" ++ "WARNING: Original file may be lost or damaged\n" ++ msgstr "" ++ "\n" ++ "ADVARSEL: Den originale fil kan man mistet eller beskadiget\n" ++ ++ msgid "don't quit the editor until the file is successfully written!" ++ msgstr "afslut ikke editoren inden filen er blevet skrevet!" ++ ++ msgid "[dos]" ++ msgstr "[dos]" ++ ++ msgid "[dos format]" ++ msgstr "[dos-format]" ++ ++ msgid "[mac]" ++ msgstr "[mac]" ++ ++ msgid "[mac format]" ++ msgstr "[mac-format]" ++ ++ msgid "[unix]" ++ msgstr "[unix]" ++ ++ msgid "[unix format]" ++ msgstr "[unix-format]" ++ ++ msgid "1 line, " ++ msgstr "1 linje, " ++ ++ #, c-format ++ msgid "%ld lines, " ++ msgstr "%ld linjer, " ++ ++ msgid "1 character" ++ msgstr "1 tegn" ++ ++ #, c-format ++ msgid "%lld characters" ++ msgstr "%lld tegn" ++ ++ msgid "[noeol]" ++ msgstr "[ingen eol]" ++ ++ msgid "[Incomplete last line]" ++ msgstr "[Ufuldstændig sidste linje]" ++ ++ msgid "WARNING: The file has been changed since reading it!!!" ++ msgstr "ADVARSEL: Filen er blevet ændret siden den blev læst!!!" ++ ++ msgid "Do you really want to write to it" ++ msgstr "Vil du virkelig skrive den" ++ ++ #, c-format ++ msgid "E208: Error writing to \"%s\"" ++ msgstr "E208: Fejl ved skrivning til \"%s\"" ++ ++ #, c-format ++ msgid "E209: Error closing \"%s\"" ++ msgstr "E209: Fejl ved lukning af \"%s\"" ++ ++ #, c-format ++ msgid "E210: Error reading \"%s\"" ++ msgstr "E210: Fejl ved læsning af \"%s\"" ++ ++ msgid "E246: FileChangedShell autocommand deleted buffer" ++ msgstr "E246: FileChangedShell-autokommando slettede buffer" ++ ++ #, c-format ++ msgid "E211: File \"%s\" no longer available" ++ msgstr "E211: Filen \"%s\" er ikke længere tilgængelig" ++ ++ #, c-format ++ msgid "" ++ "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as " ++ "well" ++ msgstr "" ++ "W12: Advarsel: Filen \"%s\" er blevet ændret og bufferen blev ogsÃ¥ ændret i " ++ "Vim" ++ ++ msgid "See \":help W12\" for more info." ++ msgstr "Se \":help W12\" for mere info." ++ ++ #, c-format ++ msgid "W11: Warning: File \"%s\" has changed since editing started" ++ msgstr "W11: Advarsel: Filen \"%s\" er blevet ændret siden redigeringen startede" ++ ++ msgid "See \":help W11\" for more info." ++ msgstr "Se \":help W11\" for mere info." ++ ++ #, c-format ++ msgid "W16: Warning: Mode of file \"%s\" has changed since editing started" ++ msgstr "" ++ "W16: Advarsel: Tilstanden af filen \"%s\" er blevet ændret siden redigeringen " ++ "startede" ++ ++ msgid "See \":help W16\" for more info." ++ msgstr "Se \":help W16\" for mere info." ++ ++ #, c-format ++ msgid "W13: Warning: File \"%s\" has been created after editing started" ++ msgstr "" ++ "W13: Advarsel: Filen \"%s\" er blevet oprettet efter redigeringen startede" ++ ++ msgid "Warning" ++ msgstr "Advarsel" ++ ++ msgid "" ++ "&OK\n" ++ "&Load File" ++ msgstr "" ++ "&OK\n" ++ "&Indlæs fil" ++ ++ #, c-format ++ msgid "E462: Could not prepare for reloading \"%s\"" ++ msgstr "E462: Kunne ikke forbedre til genindlæsning af \"%s\"" ++ ++ #, c-format ++ msgid "E321: Could not reload \"%s\"" ++ msgstr "E321: Kunne ikke genindlæse \"%s\"" ++ ++ msgid "--Deleted--" ++ msgstr "--Slettet--" ++ ++ #, c-format ++ msgid "auto-removing autocommand: %s <buffer=%d>" ++ msgstr "auto-removing-autokommando: %s <buffer=%d>" ++ ++ #, c-format ++ msgid "E367: No such group: \"%s\"" ++ msgstr "E367: Ingen sÃ¥dan gruppe: \"%s\"" ++ ++ msgid "E936: Cannot delete the current group" ++ msgstr "E936: Kan ikke slette den nuværende gruppe" ++ ++ msgid "W19: Deleting augroup that is still in use" ++ msgstr "W19: Sletter augroup som stadig er i brug" ++ ++ #, c-format ++ msgid "E215: Illegal character after *: %s" ++ msgstr "E215: Ulovligt tegn efter *: %s" ++ ++ #, c-format ++ msgid "E216: No such event: %s" ++ msgstr "E216: Ingen sÃ¥dan hændelse: %s" ++ ++ #, c-format ++ msgid "E216: No such group or event: %s" ++ msgstr "E216: Ingen sÃ¥dan gruppe eller hændelse: %s" ++ ++ msgid "" ++ "\n" ++ "--- Auto-Commands ---" ++ msgstr "" ++ "\n" ++ "--- Auto-kommandoer ---" ++ ++ #, c-format ++ msgid "E680: <buffer=%d>: invalid buffer number " ++ msgstr "E680: <buffer=%d>: ugyldigt buffernummer " ++ ++ msgid "E217: Can't execute autocommands for ALL events" ++ msgstr "E217: Kan ikke udføre autokommandoer for ALLE hændelser" ++ ++ msgid "No matching autocommands" ++ msgstr "Ingen matchende autokommandoer" ++ ++ msgid "E218: autocommand nesting too deep" ++ msgstr "E218: autokommando indlejret for dyb" ++ ++ #, c-format ++ msgid "%s Auto commands for \"%s\"" ++ msgstr "%s Auto-kommandoer for \"%s\"" ++ ++ #, c-format ++ msgid "Executing %s" ++ msgstr "Udfører %s" ++ ++ #, c-format ++ msgid "autocommand %s" ++ msgstr "autokommando %s" ++ ++ msgid "E219: Missing {." ++ msgstr "E219: Manglende {." ++ ++ msgid "E220: Missing }." ++ msgstr "E220: Manglende }." ++ ++ msgid "E490: No fold found" ++ msgstr "E490: Ingen sammenfoldning fundet" ++ ++ msgid "E350: Cannot create fold with current 'foldmethod'" ++ msgstr "E350: Kan ikke oprette sammenfoldning med nuværende 'foldmethod'" ++ ++ msgid "E351: Cannot delete fold with current 'foldmethod'" ++ msgstr "E351: Kan ikke slette sammenfoldning med nuværende 'foldmethod'" ++ ++ #, c-format ++ msgid "+--%3ld line folded " ++ msgid_plural "+--%3ld lines folded " ++ msgstr[0] "+--%3ld linje sammenfoldet " ++ msgstr[1] "+--%3ld linjer sammenfoldet " ++ ++ msgid "E222: Add to read buffer" ++ msgstr "E222: Tilføj til læsebuffer" ++ ++ msgid "E223: recursive mapping" ++ msgstr "E223: rekursiv mapping" ++ ++ #, c-format ++ msgid "E224: global abbreviation already exists for %s" ++ msgstr "E224: global forkortelse findes allerede for %s" ++ ++ #, c-format ++ msgid "E225: global mapping already exists for %s" ++ msgstr "E225: global mapping findes allerede for %s" ++ ++ #, c-format ++ msgid "E226: abbreviation already exists for %s" ++ msgstr "E226: forkortelse findes allerede for %s" ++ ++ #, c-format ++ msgid "E227: mapping already exists for %s" ++ msgstr "E227: mapping findes allerede for %s" ++ ++ msgid "No abbreviation found" ++ msgstr "Ingen forkortelse fundet" ++ ++ msgid "No mapping found" ++ msgstr "Ingen mapping fundet" ++ ++ msgid "E228: makemap: Illegal mode" ++ msgstr "E228: makemap: Ulovlig tilstand" ++ ++ msgid "E851: Failed to create a new process for the GUI" ++ msgstr "E851: Kunne ikke oprette en ny proces for GUI'en" ++ ++ msgid "E852: The child process failed to start the GUI" ++ msgstr "E852: Barneprocessen kunne ikke starte GUI'en" ++ ++ msgid "E229: Cannot start the GUI" ++ msgstr "E229: Kan ikke starte GUI'en" ++ ++ #, c-format ++ msgid "E230: Cannot read from \"%s\"" ++ msgstr "E230: Kan ikke læse fra \"%s\"" ++ ++ msgid "E665: Cannot start GUI, no valid font found" ++ msgstr "E665: Kan ikke starte GUI, ingen gyldig skrifttype fundet" ++ ++ msgid "E231: 'guifontwide' invalid" ++ msgstr "E231: 'guifontwide' ugyldig" ++ ++ msgid "E599: Value of 'imactivatekey' is invalid" ++ msgstr "E599: Værdien af 'imactivatekey' er ugyldig" ++ ++ #, c-format ++ msgid "E254: Cannot allocate color %s" ++ msgstr "E254: Kan ikke allokere farven %s" ++ ++ msgid "No match at cursor, finding next" ++ msgstr "Intet match ved markør, finder næste" ++ ++ msgid "<cannot open> " ++ msgstr "<kan ikke Ã¥bne> " ++ ++ #, c-format ++ msgid "E616: vim_SelFile: can't get font %s" ++ msgstr "E616: vim_SelFile: kan ikke hente skrifttypen %s" ++ ++ msgid "E614: vim_SelFile: can't return to current directory" ++ msgstr "E614: vim_SelFile: kan ikke vende tilbage til nuværende mappe" ++ ++ msgid "Pathname:" ++ msgstr "Stinavn:" ++ ++ msgid "E615: vim_SelFile: can't get current directory" ++ msgstr "E615: vim_SelFile: kan ikke hente nuværende mappe" ++ ++ msgid "OK" ++ msgstr "OK" ++ ++ msgid "Cancel" ++ msgstr "Annuller" ++ ++ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap." ++ msgstr "" ++ "Rullebjælke-widget: Kunne ikke hente geometri eller pixelkort til miniature." ++ ++ msgid "Vim dialog" ++ msgstr "Vim-dialog" ++ ++ msgid "E232: Cannot create BalloonEval with both message and callback" ++ msgstr "E232: Kan ikke oprette BalloonEval med bÃ¥de meddelelse og callback" ++ ++ msgid "_Cancel" ++ msgstr "_Annuller" ++ ++ msgid "_Save" ++ msgstr "_Gem" ++ ++ msgid "_Open" ++ msgstr "_Ã…bn" ++ ++ msgid "_OK" ++ msgstr "_OK" ++ ++ msgid "" ++ "&Yes\n" ++ "&No\n" ++ "&Cancel" ++ msgstr "" ++ "&Ja\n" ++ "&Nej\n" ++ "&Annuller" ++ ++ msgid "Yes" ++ msgstr "Ja" ++ ++ msgid "No" ++ msgstr "Nej" ++ ++ msgid "Input _Methods" ++ msgstr "Input_metoder" ++ ++ msgid "VIM - Search and Replace..." ++ msgstr "VIM - Søg og erstat..." ++ ++ msgid "VIM - Search..." ++ msgstr "VIM - Søg..." ++ ++ msgid "Find what:" ++ msgstr "Find hvad:" ++ ++ msgid "Replace with:" ++ msgstr "Erstat med:" ++ ++ msgid "Match whole word only" ++ msgstr "Match kun hele ord" ++ ++ msgid "Match case" ++ msgstr "Der skelnes ikke mellem store og smÃ¥ bogstaver" ++ ++ msgid "Direction" ++ msgstr "Retning" ++ ++ msgid "Up" ++ msgstr "Op" ++ ++ msgid "Down" ++ msgstr "Ned" ++ ++ msgid "Find Next" ++ msgstr "Find næste" ++ ++ msgid "Replace" ++ msgstr "Erstat" ++ ++ msgid "Replace All" ++ msgstr "Erstat alle" ++ ++ msgid "_Close" ++ msgstr "_Luk" ++ ++ msgid "Vim: Received \"die\" request from session manager\n" ++ msgstr "Vim: Modtog \"die\"-anmodning fra sessionshÃ¥ndtering\n" ++ ++ msgid "Close tab" ++ msgstr "Luk faneblad" ++ ++ msgid "New tab" ++ msgstr "Nyt faneblad" ++ ++ msgid "Open Tab..." ++ msgstr "Ã…bn faneblad..." ++ ++ msgid "Vim: Main window unexpectedly destroyed\n" ++ msgstr "Vim: Hovedvindue uventet ødelagt\n" ++ ++ msgid "&Filter" ++ msgstr "&Filter" ++ ++ msgid "&Cancel" ++ msgstr "&Annuller" ++ ++ msgid "Directories" ++ msgstr "Mapper" ++ ++ msgid "Filter" ++ msgstr "Filter" ++ ++ msgid "&Help" ++ msgstr "&Hjælp" ++ ++ msgid "Files" ++ msgstr "Filer" ++ ++ msgid "&OK" ++ msgstr "&OK" ++ ++ msgid "Selection" ++ msgstr "Markering" ++ ++ msgid "Find &Next" ++ msgstr "Find &næste" ++ ++ msgid "&Replace" ++ msgstr "&Erstat" ++ ++ msgid "Replace &All" ++ msgstr "Erstat &alle" ++ ++ msgid "&Undo" ++ msgstr "&Fortryd" ++ ++ msgid "Open tab..." ++ msgstr "Ã…bn faneblad..." ++ ++ msgid "Find string (use '\\\\' to find a '\\')" ++ msgstr "Find streng (brug '\\\\' til at finde et '\\')" ++ ++ msgid "Find & Replace (use '\\\\' to find a '\\')" ++ msgstr "Find og erstat (brug '\\\\' til at finde et '\\')" ++ ++ msgid "Not Used" ++ msgstr "Ikke brugt" ++ ++ msgid "Directory\t*.nothing\n" ++ msgstr "Mappe\t\t*.nothing\n" ++ ++ #, c-format ++ msgid "E671: Cannot find window title \"%s\"" ++ msgstr "E671: Kan ikke finde vinduestitlen \"%s\"" ++ ++ #, c-format ++ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version." ++ msgstr "E243: Argumentet understøttes ikke: \"-%s\"; Brug OLE-versionen." ++ ++ msgid "E672: Unable to open window inside MDI application" ++ msgstr "E672: Kan ikke Ã¥bne vindue i MDI-program" ++ ++ msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect" ++ msgstr "" ++ "Vim E458: Kan ikke allokere colormap-post, nogle farver kan være forkerte" ++ ++ #, c-format ++ msgid "E250: Fonts for the following charsets are missing in fontset %s:" ++ msgstr "E250: Skrifttyper for følgende tegnsæt mangler i skrifttypesættet %s:" ++ ++ #, c-format ++ msgid "E252: Fontset name: %s" ++ msgstr "E252: Skrifttypesætnavn: %s" ++ ++ #, c-format ++ msgid "Font '%s' is not fixed-width" ++ msgstr "Skrifttypen '%s' er ikke med fast bredde" ++ ++ #, c-format ++ msgid "E253: Fontset name: %s" ++ msgstr "E253: Skrifttypesætnavn: %s" ++ ++ #, c-format ++ msgid "Font0: %s" ++ msgstr "Skrifttype0: %s" ++ ++ #, c-format ++ msgid "Font1: %s" ++ msgstr "Skrifttype1: %s" ++ ++ #, c-format ++ msgid "Font%ld width is not twice that of font0" ++ msgstr "Bredden pÃ¥ skrifttype%ld er ikke det dobbelte af skrifttype0" ++ ++ #, c-format ++ msgid "Font0 width: %ld" ++ msgstr "Bredden pÃ¥ skrifttype0: %ld" ++ ++ #, c-format ++ msgid "Font1 width: %ld" ++ msgstr "Bredden pÃ¥ skrifttype1: %ld" ++ ++ msgid "Invalid font specification" ++ msgstr "Ugyldig skrifttypespecifikation" ++ ++ msgid "&Dismiss" ++ msgstr "&Luk" ++ ++ msgid "no specific match" ++ msgstr "intet specifikt match" ++ ++ msgid "Vim - Font Selector" ++ msgstr "Vim - Skrifttypevælger" ++ ++ msgid "Name:" ++ msgstr "Navn:" ++ ++ msgid "Show size in Points" ++ msgstr "Vis størrelse i punkter" ++ ++ msgid "Encoding:" ++ msgstr "Kodning:" ++ ++ msgid "Font:" ++ msgstr "Skrifttype:" ++ ++ msgid "Style:" ++ msgstr "Stil:" ++ ++ msgid "Size:" ++ msgstr "Størrelse:" ++ ++ msgid "E256: Hangul automata ERROR" ++ msgstr "E256: FEJL ved Hangul automata" ++ ++ msgid "E550: Missing colon" ++ msgstr "E550: Manglende kolon" ++ ++ msgid "E551: Illegal component" ++ msgstr "E551: Ulovlig komponent" ++ ++ msgid "E552: digit expected" ++ msgstr "E552: ciffer ventet" ++ ++ #, c-format ++ msgid "Page %d" ++ msgstr "Side %d" ++ ++ msgid "No text to be printed" ++ msgstr "Ingen tekst at udskrive" ++ ++ #, c-format ++ msgid "Printing page %d (%d%%)" ++ msgstr "Udskriver side %d (%d%%)" ++ ++ #, c-format ++ msgid " Copy %d of %d" ++ msgstr " Kopi %d af %d" ++ ++ #, c-format ++ msgid "Printed: %s" ++ msgstr "Udskrev: %s" ++ ++ msgid "Printing aborted" ++ msgstr "Udskrivning afbrudt" ++ ++ msgid "E455: Error writing to PostScript output file" ++ msgstr "E455: Fejl ved skrivning til PostScript-output-fil" ++ ++ #, c-format ++ msgid "E624: Can't open file \"%s\"" ++ msgstr "E624: Kan ikke Ã¥bne filen \"%s\"" ++ ++ #, c-format ++ msgid "E457: Can't read PostScript resource file \"%s\"" ++ msgstr "E457: Kan ikke læse PostScript-ressourcefilen \"%s\"" ++ ++ #, c-format ++ msgid "E618: file \"%s\" is not a PostScript resource file" ++ msgstr "E618: filen \"%s\" er ikke en PostScript-ressourcefil" ++ ++ #, c-format ++ msgid "E619: file \"%s\" is not a supported PostScript resource file" ++ msgstr "E619: filen \"%s\" er ikke en understøttet PostScript-ressourcefil" ++ ++ #, c-format ++ msgid "E621: \"%s\" resource file has wrong version" ++ msgstr "E621: \"%s\"-ressourcefilen har forkert version" ++ ++ msgid "E673: Incompatible multi-byte encoding and character set." ++ msgstr "E673: Inkompatibel multibyte-kodning og -tegnsæt." ++ ++ msgid "E674: printmbcharset cannot be empty with multi-byte encoding." ++ msgstr "E674: printmbcharset mÃ¥ ikke være tom med multibyte-kodning." ++ ++ msgid "E675: No default font specified for multi-byte printing." ++ msgstr "E675: Ingen standardskrifttype angivet for multibyte-udskrivning." ++ ++ msgid "E324: Can't open PostScript output file" ++ msgstr "E324: Kan ikke Ã¥bne PostScript-output-fil" ++ ++ #, c-format ++ msgid "E456: Can't open file \"%s\"" ++ msgstr "E456: Kan ikke Ã¥bne filen \"%s\"" ++ ++ msgid "E456: Can't find PostScript resource file \"prolog.ps\"" ++ msgstr "E456: Kan ikke finde PostScript-ressourcefilen \"prolog.ps\"" ++ ++ msgid "E456: Can't find PostScript resource file \"cidfont.ps\"" ++ msgstr "E456: Kan ikke finde PostScript-ressourcefilen \"cidfont.ps\"" ++ ++ #, c-format ++ msgid "E456: Can't find PostScript resource file \"%s.ps\"" ++ msgstr "E456: Kan ikke finde PostScript-ressourcefilen \"%s.ps\"" ++ ++ #, c-format ++ msgid "E620: Unable to convert to print encoding \"%s\"" ++ msgstr "E620: Kan ikke konvertere til udskrivningskodningen \"%s\"" ++ ++ msgid "Sending to printer..." ++ msgstr "Sender til printer..." ++ ++ msgid "E365: Failed to print PostScript file" ++ msgstr "E365: Kunne ikke udskrive PostScript-fil" ++ ++ msgid "Print job sent." ++ msgstr "Udskrivningsjob sendt." ++ ++ msgid "Add a new database" ++ msgstr "Tilføj en ny database" ++ ++ msgid "Query for a pattern" ++ msgstr "Forespørgsel til et mønster" ++ ++ msgid "Show this message" ++ msgstr "Vis denne meddelelse" ++ ++ msgid "Kill a connection" ++ msgstr "Dræb en forbindelse" ++ ++ msgid "Reinit all connections" ++ msgstr "Geninitialisere alle forbindelser" ++ ++ msgid "Show connections" ++ msgstr "Vis forbindelser" ++ ++ #, c-format ++ msgid "E560: Usage: cs[cope] %s" ++ msgstr "E560: Anvendelse: cs[cope] %s" ++ ++ msgid "This cscope command does not support splitting the window.\n" ++ msgstr "Denne cscope-kommando understøtter ikke opdeling af vinduet.\n" ++ ++ msgid "E562: Usage: cstag <ident>" ++ msgstr "E562: Anvendelse: cstag <ident>" ++ ++ msgid "E257: cstag: tag not found" ++ msgstr "E257: cstag: tag ikke fundet" ++ ++ #, c-format ++ msgid "E563: stat(%s) error: %d" ++ msgstr "E563: fejl ved stat(%s): %d" ++ ++ msgid "E563: stat error" ++ msgstr "E563: fejl ved stat" ++ ++ #, c-format ++ msgid "E564: %s is not a directory or a valid cscope database" ++ msgstr "E564: %s er ikke en mappe eller en gyldig cscope-database" ++ ++ #, c-format ++ msgid "Added cscope database %s" ++ msgstr "Tilføjede cscope-databasen %s" ++ ++ #, c-format ++ msgid "E262: error reading cscope connection %ld" ++ msgstr "E262: fejl ved læsning af cscope-forbindelse %ld" ++ ++ msgid "E561: unknown cscope search type" ++ msgstr "E561: ukendt cscope-søgetype" ++ ++ msgid "E566: Could not create cscope pipes" ++ msgstr "E566: Kunne ikke oprette cscope-pipes" ++ ++ msgid "E622: Could not fork for cscope" ++ msgstr "E622: Kunne ikke fork for cscope" ++ ++ msgid "cs_create_connection setpgid failed" ++ msgstr "cs_create_connection setpgid mislykkedes" ++ ++ msgid "cs_create_connection exec failed" ++ msgstr "cs_create_connection exec mislykkedes" ++ ++ msgid "cs_create_connection: fdopen for to_fp failed" ++ msgstr "cs_create_connection: fdopen for to_fp mislykkedes" ++ ++ msgid "cs_create_connection: fdopen for fr_fp failed" ++ msgstr "cs_create_connection: fdopen for fr_fp mislykkedes" ++ ++ msgid "E623: Could not spawn cscope process" ++ msgstr "E623: Kunne ikke spawn cscope-proces" ++ ++ msgid "E567: no cscope connections" ++ msgstr "E567: ingen cscope-forbindelser" ++ ++ #, c-format ++ msgid "E469: invalid cscopequickfix flag %c for %c" ++ msgstr "E469: ugyldigt cscopequickfix-flag %c for %c" ++ ++ #, c-format ++ msgid "E259: no matches found for cscope query %s of %s" ++ msgstr "E259: ingen match fundet for cscope-forespørgsel %s af %s" ++ ++ msgid "cscope commands:\n" ++ msgstr "cscope-kommandoer:\n" ++ ++ #, c-format ++ msgid "%-5s: %s%*s (Usage: %s)" ++ msgstr "%-5s: %s%*s (Anvendelse: %s)" ++ ++ msgid "" ++ "\n" ++ " a: Find assignments to this symbol\n" ++ " c: Find functions calling this function\n" ++ " d: Find functions called by this function\n" ++ " e: Find this egrep pattern\n" ++ " f: Find this file\n" ++ " g: Find this definition\n" ++ " i: Find files #including this file\n" ++ " s: Find this C symbol\n" ++ " t: Find this text string\n" ++ msgstr "" ++ "\n" ++ " a: Find tildelinger til symbolet\n" ++ " c: Find funktioner som kalder funktionen\n" ++ " d: Find funktioner som kaldes af funktionen\n" ++ " e: Find dette egrep-mønster\n" ++ " f: Find filen\n" ++ " g: Find definitionen\n" ++ " i: Find filer som #inkludere filen\n" ++ " s: Find C-symbolet\n" ++ " t: Find tekststrengen\n" ++ ++ #, c-format ++ msgid "E625: cannot open cscope database: %s" ++ msgstr "E625: kan ikke Ã¥bne cscope-database: %s" ++ ++ msgid "E626: cannot get cscope database information" ++ msgstr "E626: kan ikke hente information for cscope-database" ++ ++ msgid "E568: duplicate cscope database not added" ++ msgstr "E568: duplikeret cscope-database ikke tilføjet" ++ ++ #, c-format ++ msgid "E261: cscope connection %s not found" ++ msgstr "E261: cscope-forbindelsen %s ikke fundet" ++ ++ #, c-format ++ msgid "cscope connection %s closed" ++ msgstr "cscope-forbindelsen %s lukket" ++ ++ msgid "E570: fatal error in cs_manage_matches" ++ msgstr "E570: fatal fejl i cs_manage_matches" ++ ++ #, c-format ++ msgid "Cscope tag: %s" ++ msgstr "Cscope-tag: %s" ++ ++ msgid "" ++ "\n" ++ " # line" ++ msgstr "" ++ "\n" ++ " # linje" ++ ++ msgid "filename / context / line\n" ++ msgstr "filnavn/kontekst/linje\n" ++ ++ #, c-format ++ msgid "E609: Cscope error: %s" ++ msgstr "E609: Fejl ved cscope: %s" ++ ++ msgid "All cscope databases reset" ++ msgstr "Alle cscope-databaser nulstillet" ++ ++ msgid "no cscope connections\n" ++ msgstr "ingen cscope-forbindelser\n" ++ ++ msgid " # pid database name prepend path\n" ++ msgstr " # pid databasenavn prepend-sti\n" ++ ++ msgid "Lua library cannot be loaded." ++ msgstr "Lua-bibliotek kan ikke indlæses." ++ ++ msgid "cannot save undo information" ++ msgstr "kan ikke gemme fortrydinformation" ++ ++ msgid "" ++ "E815: Sorry, this command is disabled, the MzScheme libraries could not be " ++ "loaded." ++ msgstr "" ++ "E815: Beklager, kommandoen er deaktiveret, MzScheme-bibliotekerne kunne ikke " ++ "indlæses." ++ ++ msgid "" ++ "E895: Sorry, this command is disabled, the MzScheme's racket/base module " ++ "could not be loaded." ++ msgstr "" ++ "E895: Beklager, kommandoen er deaktiveret, MzScheme's racket-/base-modul " ++ "kunne ikke indlæses." ++ ++ msgid "invalid expression" ++ msgstr "ugyldigt udtryk" ++ ++ msgid "expressions disabled at compile time" ++ msgstr "udtryk deaktiveret ved kompileringstid" ++ ++ msgid "hidden option" ++ msgstr "skjult tilvalg" ++ ++ msgid "unknown option" ++ msgstr "ukendt tilvalg" ++ ++ msgid "window index is out of range" ++ msgstr "vinduesindeks udenfor omrÃ¥de" ++ ++ msgid "couldn't open buffer" ++ msgstr "kan ikke Ã¥bne buffer" ++ ++ msgid "cannot delete line" ++ msgstr "kan ikke slette linje" ++ ++ msgid "cannot replace line" ++ msgstr "kan ikke erstatte linje" ++ ++ msgid "cannot insert line" ++ msgstr "kan ikke indsætte linje" ++ ++ msgid "string cannot contain newlines" ++ msgstr "streng mÃ¥ ikke indeholde linjeskift" ++ ++ msgid "error converting Scheme values to Vim" ++ msgstr "fejl ved konvertering af Scheme-værdier til Vim" ++ ++ msgid "Vim error: ~a" ++ msgstr "Fejl ved Vim: ~a" ++ ++ msgid "Vim error" ++ msgstr "Fejl ved Vim" ++ ++ msgid "buffer is invalid" ++ msgstr "buffer er ugyldig" ++ ++ msgid "window is invalid" ++ msgstr "vindue er ugyldigt" ++ ++ msgid "linenr out of range" ++ msgstr "linjenummer udenfor omrÃ¥de" ++ ++ msgid "not allowed in the Vim sandbox" ++ msgstr "ikke tilladt i Vim-sandboksen" ++ ++ msgid "E836: This Vim cannot execute :python after using :py3" ++ msgstr "E836: Denne Vim kan ikke udføre :python efter brug af :py3" ++ ++ msgid "" ++ "E263: Sorry, this command is disabled, the Python library could not be " ++ "loaded." ++ msgstr "" ++ "E263: Beklager, kommandoen er deaktiveret, Python-biblioteket kunne ikke " ++ "indlæses." ++ ++ msgid "" ++ "E887: Sorry, this command is disabled, the Python's site module could not be " ++ "loaded." ++ msgstr "" ++ "E887: Beklager, kommandoen er deaktiveret, Python's site-modul kunne ikke " ++ "indlæses." ++ ++ msgid "E659: Cannot invoke Python recursively" ++ msgstr "E659: Kan ikke starte Python rekursivt" ++ ++ msgid "E837: This Vim cannot execute :py3 after using :python" ++ msgstr "E837: Denne Vim kan ikke udføre :py3 efter brug af :python" ++ ++ msgid "E265: $_ must be an instance of String" ++ msgstr "E265: $_ skal være en instans af streng" ++ ++ msgid "" ++ "E266: Sorry, this command is disabled, the Ruby library could not be loaded." ++ msgstr "" ++ "E266: Beklager, kommandoen er deaktiveret, Ruby-biblioteket kunne ikke " ++ "indlæses." ++ ++ msgid "E267: unexpected return" ++ msgstr "E267: uventet return" ++ ++ msgid "E268: unexpected next" ++ msgstr "E268: uventet next" ++ ++ msgid "E269: unexpected break" ++ msgstr "E269: uventet break" ++ ++ msgid "E270: unexpected redo" ++ msgstr "E270: uventet redo" ++ ++ msgid "E271: retry outside of rescue clause" ++ msgstr "E271: prøv igen udenfor rescue clause" ++ ++ msgid "E272: unhandled exception" ++ msgstr "E272: uhÃ¥ndteret undtagelse" ++ ++ #, c-format ++ msgid "E273: unknown longjmp status %d" ++ msgstr "E273: ukendt longjmp-status %d" ++ ++ msgid "invalid buffer number" ++ msgstr "ugyldigt buffernummer" ++ ++ msgid "not implemented yet" ++ msgstr "endnu ikke implementeret" ++ ++ msgid "cannot set line(s)" ++ msgstr "kan ikke sætte linje(r)" ++ ++ msgid "invalid mark name" ++ msgstr "ugyldigt mærkenavn" ++ ++ msgid "mark not set" ++ msgstr "mærke ikke sat" ++ ++ #, c-format ++ msgid "row %d column %d" ++ msgstr "række %d kolonne %d" ++ ++ msgid "cannot insert/append line" ++ msgstr "kan ikke indsætte/tilføje linje" ++ ++ msgid "line number out of range" ++ msgstr "linjenummer udenfor omrÃ¥de" ++ ++ msgid "unknown flag: " ++ msgstr "ukendt flag: " ++ ++ msgid "unknown vimOption" ++ msgstr "ukendt vimOption" ++ ++ msgid "keyboard interrupt" ++ msgstr "tastaturafbryd" ++ ++ msgid "vim error" ++ msgstr "fejl ved vim" ++ ++ msgid "cannot create buffer/window command: object is being deleted" ++ msgstr "kan ikke oprette buffer-/vindue-kommando: objekt slettes" ++ ++ msgid "" ++ "cannot register callback command: buffer/window is already being deleted" ++ msgstr "" ++ "kan ikke registrere callback-kommando: buffer/vindue er allerede ved at " ++ "blive slettet" ++ ++ msgid "" ++ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim." ++ "org" ++ msgstr "" ++ "E280: FATAL FEJL VED TCL: reflist korrupt!? Rapportér det venligst til vim-" ++ "dev@vim.org" ++ ++ msgid "cannot register callback command: buffer/window reference not found" ++ msgstr "" ++ "kan ikke registrere callback-kommando: buffer-/vindue-reference ikke fundet" ++ ++ msgid "" ++ "E571: Sorry, this command is disabled: the Tcl library could not be loaded." ++ msgstr "" ++ "E571: Beklager, kommandoen er deaktiveret: Tcl-biblioteket kunne ikke " ++ "indlæses." ++ ++ #, c-format ++ msgid "E572: exit code %d" ++ msgstr "E572: afslutningskode %d" ++ ++ msgid "cannot get line" ++ msgstr "kan ikke hente linje" ++ ++ msgid "Unable to register a command server name" ++ msgstr "Kan ikke registrere et kommandoservernavn" ++ ++ msgid "E248: Failed to send command to the destination program" ++ msgstr "E248: Kunne ikke sende kommando til destinationsprogrammet" ++ ++ #, c-format ++ msgid "E573: Invalid server id used: %s" ++ msgstr "E573: Ugyldigt server-id brugt: %s" ++ ++ msgid "E251: VIM instance registry property is badly formed. Deleted!" ++ msgstr "" ++ "E251: Registreringsegenskab for VIM-instans er dÃ¥rligt udformet. Slettet!" ++ ++ #, c-format ++ msgid "E938: Duplicate key in JSON: \"%s\"" ++ msgstr "E938: Duplikeret nøgle i JSON: \"%s\"" ++ ++ #, c-format ++ msgid "E696: Missing comma in List: %s" ++ msgstr "E696: Manglende komma i liste: %s" ++ ++ #, c-format ++ msgid "E697: Missing end of List ']': %s" ++ msgstr "E697: Manglende slutning pÃ¥ List ']': %s" ++ ++ msgid "Unknown option argument" ++ msgstr "Ukendt tilvalgsargument" ++ ++ msgid "Too many edit arguments" ++ msgstr "For mange redigeringsargumenter" ++ ++ msgid "Argument missing after" ++ msgstr "Argument mangler efter" ++ ++ msgid "Garbage after option argument" ++ msgstr "Affald efter tilvalgsargument" ++ ++ msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments" ++ msgstr "" ++ "For mange \"+kommando\"-, \"-c kommando\"- eller \"--cmd kommando\"-argumenter" ++ ++ msgid "Invalid argument for" ++ msgstr "Ugyldigt argument for" ++ ++ #, c-format ++ msgid "%d files to edit\n" ++ msgstr "%d filer at redigere\n" ++ ++ msgid "netbeans is not supported with this GUI\n" ++ msgstr "netbeans understøttes ikke med denne GUI\n" ++ ++ msgid "'-nb' cannot be used: not enabled at compile time\n" ++ msgstr "'-nb' kan ikke bruges: ikke aktiveret ved kompileringstid\n" ++ ++ msgid "This Vim was not compiled with the diff feature." ++ msgstr "Denne Vim blev ikke kompileret med diff-funktionaliteten." ++ ++ msgid "Attempt to open script file again: \"" ++ msgstr "Forsøg pÃ¥ at Ã¥bne scriptfil igen: \"" ++ ++ msgid "Cannot open for reading: \"" ++ msgstr "Kan ikke Ã¥bne til læsning: \"" ++ ++ msgid "Cannot open for script output: \"" ++ msgstr "Kan ikke Ã¥bne for script-output: \"" ++ ++ msgid "Vim: Error: Failure to start gvim from NetBeans\n" ++ msgstr "Vim: Fejl: Kunne ikke starte gvim fra NetBeans\n" ++ ++ msgid "Vim: Error: This version of Vim does not run in a Cygwin terminal\n" ++ msgstr "Vim: Fejl: Denne version af Vim kører ikke i en Cygwin-terminal\n" ++ ++ msgid "Vim: Warning: Output is not to a terminal\n" ++ msgstr "Vim: Advarsel: Output er ikke til en terminal\n" ++ ++ msgid "Vim: Warning: Input is not from a terminal\n" ++ msgstr "Vim: Advarsel: Input er ikke fra en terminal\n" ++ ++ msgid "pre-vimrc command line" ++ msgstr "pre-vimrc-kommandolinje" ++ ++ #, c-format ++ msgid "E282: Cannot read from \"%s\"" ++ msgstr "E282: Kan ikke læse fra \"%s\"" ++ ++ msgid "" ++ "\n" ++ "More info with: \"vim -h\"\n" ++ msgstr "" ++ "\n" ++ "Mere info med: \"vim -h\"\n" ++ ++ msgid "[file ..] edit specified file(s)" ++ msgstr "[fil ..] rediger angivne fil(er)" ++ ++ msgid "- read text from stdin" ++ msgstr "- læs tekst fra stdin" ++ ++ msgid "-t tag edit file where tag is defined" ++ msgstr "-t tag rediger fil hvor tag er defineret" ++ ++ msgid "-q [errorfile] edit file with first error" ++ msgstr "-q [fejlfil] rediger fil med første fejl" ++ ++ msgid "" ++ "\n" ++ "\n" ++ "usage:" ++ msgstr "" ++ "\n" ++ "\n" ++ "anvendelse:" ++ ++ msgid " vim [arguments] " ++ msgstr " vim [argumenter] " ++ ++ msgid "" ++ "\n" ++ " or:" ++ msgstr "" ++ "\n" ++ " eller:" ++ ++ msgid "" ++ "\n" ++ "Where case is ignored prepend / to make flag upper case" ++ msgstr "" ++ "\n" ++ "NÃ¥r der ikke skelnes mellem store og smÃ¥ bogstaver, sÃ¥ tilføj / i " ++ "begyndelsen for at gøre flag til store bogstaver" ++ ++ msgid "" ++ "\n" ++ "\n" ++ "Arguments:\n" ++ msgstr "" ++ "\n" ++ "\n" ++ "Argumenter:\n" ++ ++ msgid "--\t\t\tOnly file names after this" ++ msgstr "--\t\t\tKun filnavne herefter" ++ ++ msgid "--literal\t\tDon't expand wildcards" ++ msgstr "--literal\t\tUdvid ikke jokertegn" ++ ++ msgid "-register\t\tRegister this gvim for OLE" ++ msgstr "-register\t\tRegistrer denne gvim til OLE" ++ ++ msgid "-unregister\t\tUnregister gvim for OLE" ++ msgstr "-unregister\t\tAfregistrer gvim for OLE" ++ ++ msgid "-g\t\t\tRun using GUI (like \"gvim\")" ++ msgstr "-g\t\t\tKør med GUI (ligesom \"gvim\")" ++ ++ msgid "-f or --nofork\tForeground: Don't fork when starting GUI" ++ msgstr "-f eller --nofork\tForgrund: Fork ikke nÃ¥r GUI startes" ++ ++ msgid "-v\t\t\tVi mode (like \"vi\")" ++ msgstr "-v\t\t\tVi-tilstand (ligesom \"vi\")" ++ ++ msgid "-e\t\t\tEx mode (like \"ex\")" ++ msgstr "-e\t\t\tEx-tilstand (ligesom \"ex\")" ++ ++ msgid "-E\t\t\tImproved Ex mode" ++ msgstr "-E\t\t\tForbedret Ex-tilstand" ++ ++ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")" ++ msgstr "-s\t\t\tStille (batch) tilstand (kun til \"ex\")" ++ ++ msgid "-d\t\t\tDiff mode (like \"vimdiff\")" ++ msgstr "-d\t\t\tDiff-tilstand (ligesom \"vimdiff\")" ++ ++ msgid "-y\t\t\tEasy mode (like \"evim\", modeless)" ++ msgstr "-y\t\t\tEasy-tilstand (ligesom \"evim\", tilstandsløs)" ++ ++ msgid "-R\t\t\tReadonly mode (like \"view\")" ++ msgstr "-R\t\t\tSkrivebeskyttet tilstand (ligesom \"view\")" ++ ++ msgid "-Z\t\t\tRestricted mode (like \"rvim\")" ++ msgstr "-Z\t\t\tRestriktiv tilstand (ligesom \"rvim\")" ++ ++ msgid "-m\t\t\tModifications (writing files) not allowed" ++ msgstr "-m\t\t\tÆndringer (skrivning af filer) ikke tilladt" ++ ++ msgid "-M\t\t\tModifications in text not allowed" ++ msgstr "-M\t\t\tÆndringer i tekst ikke tilladt" ++ ++ msgid "-b\t\t\tBinary mode" ++ msgstr "-b\t\t\tBinær tilstand" ++ ++ msgid "-l\t\t\tLisp mode" ++ msgstr "-l\t\t\tLisp-tilstand" ++ ++ msgid "-C\t\t\tCompatible with Vi: 'compatible'" ++ msgstr "-C\t\t\tKompatibel med Vi: 'compatible'" ++ ++ msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'" ++ msgstr "-N\t\t\tIkke fuldt ud Vi-kompatibel: 'nocompatible'" ++ ++ msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]" ++ msgstr "-V[N][fnavn]\t\tVær uddybende [niveau N] [log meddelelser til fnavn]" ++ ++ msgid "-D\t\t\tDebugging mode" ++ msgstr "-D\t\t\tFejlretningstilstand" ++ ++ msgid "-n\t\t\tNo swap file, use memory only" ++ msgstr "-n\t\t\tIngen swap-fil, brug kun hukommelse" ++ ++ msgid "-r\t\t\tList swap files and exit" ++ msgstr "-r\t\t\tOplist swap-filer og afslut" ++ ++ msgid "-r (with file name)\tRecover crashed session" ++ msgstr "-r (med filnavn)\tGendan session som holdt op med at virke" ++ ++ msgid "-L\t\t\tSame as -r" ++ msgstr "-L\t\t\tSamme som -r" ++ ++ msgid "-f\t\t\tDon't use newcli to open window" ++ msgstr "-f\t\t\tBrug ikke newcli til at Ã¥bne vindue" ++ ++ msgid "-dev <device>\t\tUse <device> for I/O" ++ msgstr "-dev <enhed>\t\tBrug <enhed> til I/O" ++ ++ msgid "-A\t\t\tstart in Arabic mode" ++ msgstr "-A\t\t\tstart i arabisk tilstand" ++ ++ msgid "-H\t\t\tStart in Hebrew mode" ++ msgstr "-H\t\t\tStart i hebraisk tilstand" ++ ++ msgid "-F\t\t\tStart in Farsi mode" ++ msgstr "-F\t\t\tStart i persisk tilstand" ++ ++ msgid "-T <terminal>\tSet terminal type to <terminal>" ++ msgstr "-T <terminal>\tSæt terminaltype til <terminal>" ++ ++ msgid "--not-a-term\t\tSkip warning for input/output not being a terminal" ++ msgstr "" ++ "--not-a-term\t\tSpring advarsel over for input/output som ikke er en terminal" ++ ++ msgid "--ttyfail\t\tExit if input or output is not a terminal" ++ msgstr "--ttyfail\t\tAfslut hvis input eller output ikke er en terminal" ++ ++ msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc" ++ msgstr "-u <vimrc>\t\tBrug <vimrc> i stedet for nogen .vimrc" ++ ++ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc" ++ msgstr "-U <gvimrc>\t\tBrug <gvimrc> i stedet for nogen .gvimrc" ++ ++ msgid "--noplugin\t\tDon't load plugin scripts" ++ msgstr "--noplugin\t\tIndlæs ikke plugin-scripts" ++ ++ msgid "-p[N]\t\tOpen N tab pages (default: one for each file)" ++ msgstr "-p[N]\t\tÃ…bn N fanebladssider (standard: én pr. fil)" ++ ++ msgid "-o[N]\t\tOpen N windows (default: one for each file)" ++ msgstr "-o[N]\t\tÃ…bn N vinduer (standard: én pr. fil)" ++ ++ msgid "-O[N]\t\tLike -o but split vertically" ++ msgstr "-O[N]\t\tLigesom -o men opdel lodret" ++ ++ msgid "+\t\t\tStart at end of file" ++ msgstr "+\t\t\tBegynd ved slutningen af filen" ++ ++ msgid "+<lnum>\t\tStart at line <lnum>" ++ msgstr "+<lnum>\t\tBegynd ved linje <lnum>" ++ ++ msgid "--cmd <command>\tExecute <command> before loading any vimrc file" ++ msgstr "--cmd <kommando>\tUdfør <kommando> inden indlæsning af vimrc-filer" ++ ++ msgid "-c <command>\t\tExecute <command> after loading the first file" ++ msgstr "-c <kommando>\tUdfør <kommando> efter indlæsning af den første fil" ++ ++ msgid "-S <session>\t\tSource file <session> after loading the first file" ++ msgstr "-S <session>\t\tSource filen <session> efter indlæsning af den første fil" ++ ++ msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>" ++ msgstr "-s <scriptind>\tLæs normal tilstand-kommandoer fra filen <scriptind>" ++ ++ msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>" ++ msgstr "" ++ "-w <scriptud>\tTilføj alle indtastede kommandoer til slutningen af filen " ++ "<scriptud>" ++ ++ msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>" ++ msgstr "-W <scriptud>\tSkriv alle indtastede kommandoer til filen <scriptud>" ++ ++ msgid "-x\t\t\tEdit encrypted files" ++ msgstr "-x\t\t\tRediger krypterede filer" ++ ++ msgid "-display <display>\tConnect vim to this particular X-server" ++ msgstr "-display <display>\tForbind vim til denne X-server" ++ ++ msgid "-X\t\t\tDo not connect to X server" ++ msgstr "-X\t\t\tOpret ikke forbindelse til X-server" ++ ++ msgid "--remote <files>\tEdit <files> in a Vim server if possible" ++ msgstr "--remote <filer>\tRediger <filer> i en Vim-server, hvis det er muligt" ++ ++ msgid "--remote-silent <files> Same, don't complain if there is no server" ++ msgstr "" ++ "--remote-silent <filer> Samme, men vær tavs hvis der ikke er nogen server" ++ ++ msgid "" ++ "--remote-wait <files> As --remote but wait for files to have been edited" ++ msgstr "" ++ "--remote-wait <filer> Som --remote men vent pÃ¥ filer som skal redigeres" ++ ++ msgid "" ++ "--remote-wait-silent <files> Same, don't complain if there is no server" ++ msgstr "" ++ "--remote-wait-silent <filer> Samme, men vær tavs hvis der ikke er nogen " ++ "server" ++ ++ msgid "" ++ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per file" ++ msgstr "" ++ "--remote-tab[-wait][-silent] <filer> Som --remote men brug fanebladsside " ++ "pr. fil" ++ ++ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit" ++ msgstr "--remote-send <nøgler>\tSend <nøgler> til en Vim-server og afslut" ++ ++ msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result" ++ msgstr "" ++ "--remote-expr <udtryk>\tEvaluér <udtryk> i en Vim-server og udskriv " ++ "resultatet" ++ ++ msgid "--serverlist\t\tList available Vim server names and exit" ++ msgstr "--serverlist\t\tOplist tilgængelige Vim-servernavne og afslut" ++ ++ msgid "--servername <name>\tSend to/become the Vim server <name>" ++ msgstr "--servername <navn>\tSend til/bliv Vim-serveren <navn>" ++ ++ msgid "--startuptime <file>\tWrite startup timing messages to <file>" ++ msgstr "--startuptime <fil>\tSkriv meddelelser om opstartstiming til <fil>" ++ ++ msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo" ++ msgstr "-i <viminfo>\t\tBrug <viminfo> i stedet for .viminfo" ++ ++ msgid "--clean\t\t'nocompatible', Vim defaults, no plugins, no viminfo" ++ msgstr "--clean\t\t'nocompatible', Vim-standarder, ingen plugins, ingen viminfo" ++ ++ msgid "-h or --help\tPrint Help (this message) and exit" ++ msgstr "-h eller --help\tUdskriv hjælp (denne meddelelse) og afslut" ++ ++ msgid "--version\t\tPrint version information and exit" ++ msgstr "--version\t\tUdskriv versionsinformation og afslut" ++ ++ msgid "" ++ "\n" ++ "Arguments recognised by gvim (Motif version):\n" ++ msgstr "" ++ "\n" ++ "Argumenter som genkendes af gvim (Motif-version):\n" ++ ++ msgid "" ++ "\n" ++ "Arguments recognised by gvim (neXtaw version):\n" ++ msgstr "" ++ "\n" ++ "Argumenter som genkendes af gvim (neXtaw-version):\n" ++ ++ msgid "" ++ "\n" ++ "Arguments recognised by gvim (Athena version):\n" ++ msgstr "" ++ "\n" ++ "Argumenter som genkendes af gvim (Athena-version):\n" ++ ++ msgid "-display <display>\tRun vim on <display>" ++ msgstr "-display <display>\tKør vim pÃ¥ <display>" ++ ++ msgid "-iconic\t\tStart vim iconified" ++ msgstr "-iconic\t\tStart vim som ikon" ++ ++ msgid "-background <color>\tUse <color> for the background (also: -bg)" ++ msgstr "-background <farve>\tBrug <farve> til baggrunden (ogsÃ¥: -bg)" ++ ++ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)" ++ msgstr "-foreground <farve>\tBrug <farve> til normal tekst (ogsÃ¥: -fg)" ++ ++ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)" ++ msgstr "-font <skrifttype>\tBrug <skrifttype> til normal tekst (ogsÃ¥: -fn)" ++ ++ msgid "-boldfont <font>\tUse <font> for bold text" ++ msgstr "-boldfont <skrifttype>\tBrug <skrifttype> til fed tekst" ++ ++ msgid "-italicfont <font>\tUse <font> for italic text" ++ msgstr "-italicfont <skriftt.>\tBrug <skrifttype> til kursiv tekst" ++ ++ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)" ++ msgstr "-geometry <geom>\tBrug <geom> for indledende geometri (ogsÃ¥: -geom)" ++ ++ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)" ++ msgstr "-borderwidth <bredde>\tBrug en kantbredde pÃ¥ <bredde> (ogsÃ¥: -bw)" ++ ++ msgid "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)" ++ msgstr "" ++ "-scrollbarwidth <bredde> Brug en rullebjælkebredde pÃ¥ <bredde> (ogsÃ¥: -sw)" ++ ++ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)" ++ msgstr "-menuheight <højde>\tBrug en menulinjehøjde pÃ¥ <højde> (ogsÃ¥: -mh)" ++ ++ msgid "-reverse\t\tUse reverse video (also: -rv)" ++ msgstr "-reverse\t\tBrug omvendt grafik (ogsÃ¥: -rv)" ++ ++ msgid "+reverse\t\tDon't use reverse video (also: +rv)" ++ msgstr "+reverse\t\tBrug ikke omvendt grafik (ogsÃ¥: +rv)" ++ ++ msgid "-xrm <resource>\tSet the specified resource" ++ msgstr "-xrm <ressource>\tSæt den angivne ressource" ++ ++ msgid "" ++ "\n" ++ "Arguments recognised by gvim (GTK+ version):\n" ++ msgstr "" ++ "\n" ++ "Argumenter genkendt af gvim (GTK+-version):\n" ++ ++ msgid "-display <display>\tRun vim on <display> (also: --display)" ++ msgstr "-display <display>\tKør vim pÃ¥ <display> (ogsÃ¥: --display)" ++ ++ msgid "--role <role>\tSet a unique role to identify the main window" ++ msgstr "--role <rolle>\tSæt en unik rolle til at identificere hovedvinduet" ++ ++ msgid "--socketid <xid>\tOpen Vim inside another GTK widget" ++ msgstr "--socketid <xid>\tÃ…bn Vim i en anden GTK-widget" ++ ++ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout" ++ msgstr "--echo-wid\t\tFÃ¥ gvim til at skrive vinduets ID til stdout" ++ ++ msgid "-P <parent title>\tOpen Vim inside parent application" ++ msgstr "-P <forældertitel>\tÃ…bn Vim i forælderprogram" ++ ++ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget" ++ msgstr "--windowid <HWND>\tÃ…bn Vim i en anden win32-widget" ++ ++ msgid "No display" ++ msgstr "Intet display" ++ ++ msgid ": Send failed.\n" ++ msgstr ": Sending mislykkedes.\n" ++ ++ msgid ": Send failed. Trying to execute locally\n" ++ msgstr ": Sending mislykkedes. Prøver at udføre lokalt\n" ++ ++ #, c-format ++ msgid "%d of %d edited" ++ msgstr "%d af %d redigeret" ++ ++ msgid "No display: Send expression failed.\n" ++ msgstr "Intet display: Send-udtryk mislykkedes.\n" ++ ++ msgid ": Send expression failed.\n" ++ msgstr ": Send-udtryk mislykkedes.\n" ++ ++ msgid "No marks set" ++ msgstr "Ingen mærker sat" ++ ++ #, c-format ++ msgid "E283: No marks matching \"%s\"" ++ msgstr "E283: Ingen mærker matcher \"%s\"" ++ ++ msgid "" ++ "\n" ++ "mark line col file/text" ++ msgstr "" ++ "\n" ++ "mærke linje kol fil/tekst" ++ ++ msgid "" ++ "\n" ++ " jump line col file/text" ++ msgstr "" ++ "\n" ++ " hop linje kol fil/tekst" ++ ++ msgid "" ++ "\n" ++ "change line col text" ++ msgstr "" ++ "\n" ++ "skift linje kol tekst" ++ ++ msgid "" ++ "\n" ++ "# File marks:\n" ++ msgstr "" ++ "\n" ++ "# Filmærker:\n" ++ ++ msgid "" ++ "\n" ++ "# Jumplist (newest first):\n" ++ msgstr "" ++ "\n" ++ "# Hopliste (nyeste først):\n" ++ ++ msgid "" ++ "\n" ++ "# History of marks within files (newest to oldest):\n" ++ msgstr "" ++ "\n" ++ "# Historik over mærker i filer (nyeste til ældste):\n" ++ ++ msgid "Missing '>'" ++ msgstr "Manglende '>'" ++ ++ msgid "E543: Not a valid codepage" ++ msgstr "E543: Ikke en gyldig tegnkodningstabel" ++ ++ msgid "E284: Cannot set IC values" ++ msgstr "E284: Kan ikke sætte IC-værdier" ++ ++ msgid "E285: Failed to create input context" ++ msgstr "E285: Kunne ikke oprette inputkontekst" ++ ++ msgid "E286: Failed to open input method" ++ msgstr "E286: Kunne ikke Ã¥bne inputmetode" ++ ++ msgid "E287: Warning: Could not set destroy callback to IM" ++ msgstr "E287: Advarsel: Kunne ikke sætte destroy callback til IM" ++ ++ msgid "E288: input method doesn't support any style" ++ msgstr "E288: inputmetode understøtter ikke nogen stil" ++ ++ msgid "E289: input method doesn't support my preedit type" ++ msgstr "E289: inputmetode understøtter ikke min preedit-type" ++ ++ msgid "E293: block was not locked" ++ msgstr "E293: blok blev ikke lÃ¥st" ++ ++ msgid "E294: Seek error in swap file read" ++ msgstr "E294: Søgefejl ved læsning af swap-fil" ++ ++ msgid "E295: Read error in swap file" ++ msgstr "E295: Læsefejl i swap-fil" ++ ++ msgid "E296: Seek error in swap file write" ++ msgstr "E296: Søgefejl ved skrivning af swap-fil" ++ ++ msgid "E297: Write error in swap file" ++ msgstr "E297: Skrivefejl i swap-fil" ++ ++ msgid "E300: Swap file already exists (symlink attack?)" ++ msgstr "E300: Swap-filen findes allerede (symlink angreb?)" ++ ++ msgid "E298: Didn't get block nr 0?" ++ msgstr "E298: Blev blok nr. 0 ikke hentet?" ++ ++ msgid "E298: Didn't get block nr 1?" ++ msgstr "E298: Blev blok nr. 1 ikke hentet?" ++ ++ msgid "E298: Didn't get block nr 2?" ++ msgstr "E298: Blev blok nr. 2 ikke hentet?" ++ ++ msgid "E843: Error while updating swap file crypt" ++ msgstr "E843: Fejl ved opdatering af crypt for swap-fil" ++ ++ msgid "E301: Oops, lost the swap file!!!" ++ msgstr "E301: Ups, mistede swap-filen!!!" ++ ++ msgid "E302: Could not rename swap file" ++ msgstr "E302: Kunne ikke omdøbe swap-fil" ++ ++ #, c-format ++ msgid "E303: Unable to open swap file for \"%s\", recovery impossible" ++ msgstr "E303: Kan ikke Ã¥bne swap-filen for \"%s\", gendannelse er ikke muligt" ++ ++ msgid "E304: ml_upd_block0(): Didn't get block 0??" ++ msgstr "E304: ml_upd_block0(): Blev blok 0 ikke hentet??" ++ ++ #, c-format ++ msgid "E305: No swap file found for %s" ++ msgstr "E305: Fandt ingen swap-fil for %s" ++ ++ msgid "Enter number of swap file to use (0 to quit): " ++ msgstr "Indtast antal swap-filer som der skal bruges (0 for at afslutte): " ++ ++ #, c-format ++ msgid "E306: Cannot open %s" ++ msgstr "E306: Kan ikke Ã¥bne %s" ++ ++ msgid "Unable to read block 0 from " ++ msgstr "Kan ikke læse blok 0 fra " ++ ++ msgid "" ++ "\n" ++ "Maybe no changes were made or Vim did not update the swap file." ++ msgstr "" ++ "\n" ++ "MÃ¥ske er der ikke foretaget nogen ændringer eller Vim opdaterede ikke swap-" ++ "filen." ++ ++ msgid " cannot be used with this version of Vim.\n" ++ msgstr " kan ikke bruges med denne version af Vim.\n" ++ ++ msgid "Use Vim version 3.0.\n" ++ msgstr "Brug Vim version 3.0.\n" ++ ++ #, c-format ++ msgid "E307: %s does not look like a Vim swap file" ++ msgstr "E307: %s ligner ikke en Vim swap-fil" ++ ++ msgid " cannot be used on this computer.\n" ++ msgstr " kan ikke bruges pÃ¥ denne computer.\n" ++ ++ msgid "The file was created on " ++ msgstr "Filen blev oprettet pÃ¥ " ++ ++ msgid "" ++ ",\n" ++ "or the file has been damaged." ++ msgstr "" ++ ",\n" ++ "eller filen er beskadiget." ++ ++ #, c-format ++ msgid "" ++ "E833: %s is encrypted and this version of Vim does not support encryption" ++ msgstr "" ++ "E833: %s er krypteret og denne version af Vim understøtter ikke kryptering" ++ ++ msgid " has been damaged (page size is smaller than minimum value).\n" ++ msgstr " er beskadiget (sidestørrelsen er mindre end minimumsværdien).\n" ++ ++ #, c-format ++ msgid "Using swap file \"%s\"" ++ msgstr "Bruger swap-filen \"%s\"" ++ ++ #, c-format ++ msgid "Original file \"%s\"" ++ msgstr "Den originale fil \"%s\"" ++ ++ msgid "E308: Warning: Original file may have been changed" ++ msgstr "E308: Advarsel: Den originale fil kan være ændret" ++ ++ #, c-format ++ msgid "Swap file is encrypted: \"%s\"" ++ msgstr "Swap-filen er krypteret: \"%s\"" ++ ++ msgid "" ++ "\n" ++ "If you entered a new crypt key but did not write the text file," ++ msgstr "" ++ "\n" ++ "Hvis du indtastede en ny crypt-nøgle men ikke skrev tekstfilen," ++ ++ msgid "" ++ "\n" ++ "enter the new crypt key." ++ msgstr "" ++ "\n" ++ "sÃ¥ indtast den nye crypt-nøgle." ++ ++ msgid "" ++ "\n" ++ "If you wrote the text file after changing the crypt key press enter" ++ msgstr "" ++ "\n" ++ "Hvis du skrev tekstfilen efter crypt-nøglen blev ændret, sÃ¥ tryk pÃ¥ enter" ++ ++ msgid "" ++ "\n" ++ "to use the same key for text file and swap file" ++ msgstr "" ++ "\n" ++ "for at bruge den samme nøgle til tekstfilen og swap-filen" ++ ++ #, c-format ++ msgid "E309: Unable to read block 1 from %s" ++ msgstr "E309: Kan ikke læse blok 1 fra %s" ++ ++ msgid "???MANY LINES MISSING" ++ msgstr "???MANGE LINJER MANGLER" ++ ++ msgid "???LINE COUNT WRONG" ++ msgstr "???LINJEANTAL FORKERT" ++ ++ msgid "???EMPTY BLOCK" ++ msgstr "???TOM BLOK" ++ ++ msgid "???LINES MISSING" ++ msgstr "???LINJER MANGLER" ++ ++ #, c-format ++ msgid "E310: Block 1 ID wrong (%s not a .swp file?)" ++ msgstr "E310: Forkert ID for blok 1 (%s ikke en .swp-fil?)" ++ ++ msgid "???BLOCK MISSING" ++ msgstr "???BLOK MANGLER" ++ ++ msgid "??? from here until ???END lines may be messed up" ++ msgstr "??? herfra indtil ???SLUT kan linjer være rodet" ++ ++ msgid "??? from here until ???END lines may have been inserted/deleted" ++ msgstr "??? herfra indtil ???SLUT kan linjer være indsat/slettet" ++ ++ msgid "???END" ++ msgstr "???SLUT" ++ ++ msgid "E311: Recovery Interrupted" ++ msgstr "E311: Gendannelse afbrudt" ++ ++ msgid "" ++ "E312: Errors detected while recovering; look for lines starting with ???" ++ msgstr "" ++ "E312: Fejl registreret ved gendannelse; kig efter linjer som begynder med " ++ "???" ++ ++ msgid "See \":help E312\" for more information." ++ msgstr "Se \":help E312\" for mere information." ++ ++ msgid "Recovery completed. You should check if everything is OK." ++ msgstr "Gendannelse gennemført. Du bør tjekke om alt er OK." ++ ++ msgid "" ++ "\n" ++ "(You might want to write out this file under another name\n" ++ msgstr "" ++ "\n" ++ "(Det kan være du vil skrive filen under et andet navn\n" ++ ++ msgid "and run diff with the original file to check for changes)" ++ msgstr "og kør diff men den originale fil for at tjekke for ændringer)" ++ ++ msgid "Recovery completed. Buffer contents equals file contents." ++ msgstr "" ++ "Gendannelse gennemført. Bufferens indhold er det samme som filens indhold." ++ ++ msgid "" ++ "\n" ++ "You may want to delete the .swp file now.\n" ++ "\n" ++ msgstr "" ++ "\n" ++ "Det kan være du vil slette .swp-filen nu.\n" ++ "\n" ++ ++ msgid "Using crypt key from swap file for the text file.\n" ++ msgstr "Bruger crypt-nøglen fra swap-filen til tekstfilen.\n" ++ ++ msgid "Swap files found:" ++ msgstr "Swap-filer fundet:" ++ ++ msgid " In current directory:\n" ++ msgstr " I nuværende mappe:\n" ++ ++ msgid " Using specified name:\n" ++ msgstr " Bruger angivne navn:\n" ++ ++ msgid " In directory " ++ msgstr " I mappe " ++ ++ msgid " -- none --\n" ++ msgstr " -- ingen --\n" ++ ++ msgid " owned by: " ++ msgstr " ejet af: " ++ ++ msgid " dated: " ++ msgstr " dateret: " ++ ++ msgid " dated: " ++ msgstr " dateret: " ++ ++ msgid " [from Vim version 3.0]" ++ msgstr " [fra Vim version 3.0]" ++ ++ msgid " [does not look like a Vim swap file]" ++ msgstr " [ligner ikke en Vim swap-fil]" ++ ++ msgid " file name: " ++ msgstr " filnavn: " ++ ++ msgid "" ++ "\n" ++ " modified: " ++ msgstr "" ++ "\n" ++ " ændret: " ++ ++ msgid "YES" ++ msgstr "JA" ++ ++ msgid "no" ++ msgstr "nej" ++ ++ msgid "" ++ "\n" ++ " user name: " ++ msgstr "" ++ "\n" ++ " brugernavn: " ++ ++ msgid " host name: " ++ msgstr " værtsnavn: " ++ ++ msgid "" ++ "\n" ++ " host name: " ++ msgstr "" ++ "\n" ++ " værtsnavn: " ++ ++ msgid "" ++ "\n" ++ " process ID: " ++ msgstr "" ++ "\n" ++ " proces-ID: " ++ ++ msgid " (still running)" ++ msgstr " (kører stadig)" ++ ++ msgid "" ++ "\n" ++ " [not usable with this version of Vim]" ++ msgstr "" ++ "\n" ++ " [ikke anvendelig med denne version af Vim]" ++ ++ msgid "" ++ "\n" ++ " [not usable on this computer]" ++ msgstr "" ++ "\n" ++ " [ikke anvendelig pÃ¥ denne computer]" ++ ++ msgid " [cannot be read]" ++ msgstr " [kan ikke læses]" ++ ++ msgid " [cannot be opened]" ++ msgstr " [kan ikke Ã¥bnes]" ++ ++ msgid "E313: Cannot preserve, there is no swap file" ++ msgstr "E313: Kan ikke bevares, der er ikke nogen swap-fil" ++ ++ msgid "File preserved" ++ msgstr "Fil bevaret" ++ ++ msgid "E314: Preserve failed" ++ msgstr "E314: Bevaring mislykkedes" ++ ++ #, c-format ++ msgid "E315: ml_get: invalid lnum: %ld" ++ msgstr "E315: ml_get: ugyldig lnum: %ld" ++ ++ #, c-format ++ msgid "E316: ml_get: cannot find line %ld" ++ msgstr "E316: ml_get: kan ikke finde linje %ld" ++ ++ msgid "E317: pointer block id wrong 3" ++ msgstr "E317: forkert blok-id for pointer 3" ++ ++ msgid "stack_idx should be 0" ++ msgstr "stack_idx skal være 0" ++ ++ msgid "E318: Updated too many blocks?" ++ msgstr "E318: Opdaterede for mange blokke?" ++ ++ msgid "E317: pointer block id wrong 4" ++ msgstr "E317: forkert blok-id for pointer 4" ++ ++ msgid "deleted block 1?" ++ msgstr "slettede blok 1?" ++ ++ #, c-format ++ msgid "E320: Cannot find line %ld" ++ msgstr "E320: Kan ikke finde linje %ld" ++ ++ msgid "E317: pointer block id wrong" ++ msgstr "E317: forkert blok-id for pointer" ++ ++ msgid "pe_line_count is zero" ++ msgstr "pe_line_count er nul" ++ ++ #, c-format ++ msgid "E322: line number out of range: %ld past the end" ++ msgstr "E322: linjenummer udenfor omrÃ¥de: %ld efter slutningen" ++ ++ #, c-format ++ msgid "E323: line count wrong in block %ld" ++ msgstr "E323: linje antal forkert i blok %ld" ++ ++ msgid "Stack size increases" ++ msgstr "Stakstørrelse øges" ++ ++ msgid "E317: pointer block id wrong 2" ++ msgstr "E317: forkert blok-id for pointer 2" ++ ++ #, c-format ++ msgid "E773: Symlink loop for \"%s\"" ++ msgstr "E773: Symlink-løkke for \"%s\"" ++ ++ msgid "E325: ATTENTION" ++ msgstr "E325: OBS" ++ ++ msgid "" ++ "\n" ++ "Found a swap file by the name \"" ++ msgstr "" ++ "\n" ++ "Fandt en swap-fil ved navn \"" ++ ++ msgid "While opening file \"" ++ msgstr "Ved Ã¥bning af filen \"" ++ ++ msgid " NEWER than swap file!\n" ++ msgstr " NYERE end swap-fil!\n" ++ ++ msgid "" ++ "\n" ++ "(1) Another program may be editing the same file. If this is the case,\n" ++ " be careful not to end up with two different instances of the same\n" ++ " file when making changes. Quit, or continue with caution.\n" ++ msgstr "" ++ "\n" ++ "(1) Et andet program redigere muligvis den samme fil. Hvis det er tilfældet,\n" ++ " sÃ¥ pas pÃ¥ ikke at ende med to forskellige instanser af den samme\n" ++ " fil nÃ¥r der foretages ændringer. Afslut, eller fortsæt med forsigtighed.\n" ++ ++ msgid "(2) An edit session for this file crashed.\n" ++ msgstr "(2) En redigeringssession for filen holdt op med at virke.\n" ++ ++ msgid " If this is the case, use \":recover\" or \"vim -r " ++ msgstr " Hvis det er tilfældet, sÃ¥ brug \":recover\" eller \"vim -r " ++ ++ msgid "" ++ "\"\n" ++ " to recover the changes (see \":help recovery\").\n" ++ msgstr "" ++ "\"\n" ++ " for at gendanne ændringerne (se \":help recovery\").\n" ++ ++ msgid " If you did this already, delete the swap file \"" ++ msgstr " Hvis du allerede har gjort det, sÃ¥ slet swap-filen \"" ++ ++ msgid "" ++ "\"\n" ++ " to avoid this message.\n" ++ msgstr "" ++ "\"\n" ++ " for at undgÃ¥ denne meddelelse.\n" ++ ++ msgid "Swap file \"" ++ msgstr "Swap-filen \"" ++ ++ msgid "\" already exists!" ++ msgstr "\" findes allerede!" ++ ++ msgid "VIM - ATTENTION" ++ msgstr "VIM - OBS" ++ ++ msgid "Swap file already exists!" ++ msgstr "Swap-filen findes allerede!" ++ ++ msgid "" ++ "&Open Read-Only\n" ++ "&Edit anyway\n" ++ "&Recover\n" ++ "&Quit\n" ++ "&Abort" ++ msgstr "" ++ "&Ã…bn skrivebeskyttet\n" ++ "&Rediger alligevel\n" ++ "&Gendan\n" ++ "&Afslut\n" ++ "&Afbryd" ++ ++ msgid "" ++ "&Open Read-Only\n" ++ "&Edit anyway\n" ++ "&Recover\n" ++ "&Delete it\n" ++ "&Quit\n" ++ "&Abort" ++ msgstr "" ++ "&Ã…bn skrivebeskyttet\n" ++ "&Rediger alligevel\n" ++ "&Gendan\n" ++ "&Slet den\n" ++ "&Afslut\n" ++ "&Afbryd" ++ ++ msgid "E326: Too many swap files found" ++ msgstr "E326: For mange swap-filer fundet" ++ ++ msgid "E327: Part of menu-item path is not sub-menu" ++ msgstr "E327: Del af sti til menupunkt er ikke undermenu" ++ ++ msgid "E328: Menu only exists in another mode" ++ msgstr "E328: Menuen findes kun i en anden tilstand" ++ ++ #, c-format ++ msgid "E329: No menu \"%s\"" ++ msgstr "E329: Ingen menu \"%s\"" ++ ++ msgid "E792: Empty menu name" ++ msgstr "E792: Tomt menunavn" ++ ++ msgid "E330: Menu path must not lead to a sub-menu" ++ msgstr "E330: Menusti mÃ¥ ikke lede til en undermenu" ++ ++ msgid "E331: Must not add menu items directly to menu bar" ++ msgstr "E331: MÃ¥ ikke tilføje menupunkter direkte til menulinje" ++ ++ msgid "E332: Separator cannot be part of a menu path" ++ msgstr "E332: Separator mÃ¥ ikke være del af en menusti" ++ ++ msgid "" ++ "\n" ++ "--- Menus ---" ++ msgstr "" ++ "\n" ++ "--- Menuer ---" ++ ++ msgid "Tear off this menu" ++ msgstr "Løsriv menuen" ++ ++ #, c-format ++ msgid "E335: Menu not defined for %s mode" ++ msgstr "E335: Menu ikke defineret for %s-tilstand" ++ ++ msgid "E333: Menu path must lead to a menu item" ++ msgstr "E333: Menusti skal lede til et menupunkt" ++ ++ #, c-format ++ msgid "E334: Menu not found: %s" ++ msgstr "E334: Menu ikke fundet: %s" ++ ++ msgid "E336: Menu path must lead to a sub-menu" ++ msgstr "E336: Menusti skal lede til en undermenu" ++ ++ msgid "E337: Menu not found - check menu names" ++ msgstr "E337: Menu ikke fundet - tjek menunavne" ++ ++ #, c-format ++ msgid "Error detected while processing %s:" ++ msgstr "Fejl registreret ved behandling af %s:" ++ ++ #, c-format ++ msgid "line %4ld:" ++ msgstr "linje %4ld:" ++ ++ #, c-format ++ msgid "E354: Invalid register name: '%s'" ++ msgstr "E354: Ugyldigt registernavn: '%s'" ++ ++ msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>" ++ msgstr "Oversætter: scootergrisen" ++ ++ msgid "Interrupt: " ++ msgstr "Afbryd: " ++ ++ msgid "Press ENTER or type command to continue" ++ msgstr "Tryk pÃ¥ ENTER eller skriv kommando for at fortsætte" ++ ++ #, c-format ++ msgid "%s line %ld" ++ msgstr "%s linje %ld" ++ ++ msgid "-- More --" ++ msgstr "-- Mere --" ++ ++ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit " ++ msgstr " MELLEMRUM/d/j: skærm/side/linje ned, b/u/k: op, q: afslut " ++ ++ msgid "Question" ++ msgstr "SpørgsmÃ¥l" ++ ++ msgid "" ++ "&Yes\n" ++ "&No" ++ msgstr "" ++ "&Ja\n" ++ "&Nej" ++ ++ msgid "" ++ "&Yes\n" ++ "&No\n" ++ "Save &All\n" ++ "&Discard All\n" ++ "&Cancel" ++ msgstr "" ++ "&Ja\n" ++ "&Nej\n" ++ "Gem &alle\n" ++ "&Forkast alle\n" ++ "&Annuller" ++ ++ msgid "Select Directory dialog" ++ msgstr "Vælg mappe-dialog" ++ ++ msgid "Save File dialog" ++ msgstr "Gem fil-dialog" ++ ++ msgid "Open File dialog" ++ msgstr "Ã…bn fil-dialog" ++ ++ msgid "E338: Sorry, no file browser in console mode" ++ msgstr "E338: Beklager, ingen filbrowser i konsol-tilstand" ++ ++ msgid "E766: Insufficient arguments for printf()" ++ msgstr "E766: Ikke nok argumenter for printf()" ++ ++ msgid "E807: Expected Float argument for printf()" ++ msgstr "E807: Ventede flydende kommatal-argument for printf()" ++ ++ msgid "E767: Too many arguments to printf()" ++ msgstr "E767: For mange argumenter til printf()" ++ ++ msgid "W10: Warning: Changing a readonly file" ++ msgstr "W10: Advarsel: Ændre en skrivebeskyttet fil" ++ ++ msgid "Type number and <Enter> or click with mouse (empty cancels): " ++ msgstr "Skriv nummer og <Enter> eller klik med musen (tom annullerer): " ++ ++ msgid "Type number and <Enter> (empty cancels): " ++ msgstr "Skriv nummer og <Enter> (tom annullerer): " ++ ++ msgid "1 more line" ++ msgstr "1 linje mere" ++ ++ msgid "1 line less" ++ msgstr "1 linje mindre" ++ ++ #, c-format ++ msgid "%ld more lines" ++ msgstr "%ld linjer mere" ++ ++ #, c-format ++ msgid "%ld fewer lines" ++ msgstr "%ld linjere mindre" ++ ++ msgid " (Interrupted)" ++ msgstr " (Afbrudt)" ++ ++ msgid "Beep!" ++ msgstr "Bip!" ++ ++ msgid "ERROR: " ++ msgstr "FEJL: " ++ ++ #, c-format ++ msgid "" ++ "\n" ++ "[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n" ++ msgstr "" ++ "\n" ++ "[byte] samlet allok-frigivet %lu-%lu, i brug %lu, spidspunktsbrug %lu\n" ++ ++ #, c-format ++ msgid "" ++ "[calls] total re/malloc()'s %lu, total free()'s %lu\n" ++ "\n" ++ msgstr "" ++ "[kald] samlet re/malloc()'er %lu, samlet free()'er %lu\n" ++ "\n" ++ ++ msgid "E340: Line is becoming too long" ++ msgstr "E340: Linje er ved at blive for lang" ++ ++ #, c-format ++ msgid "E341: Internal error: lalloc(%ld, )" ++ msgstr "E341: Intern fejl: lalloc(%ld, )" ++ ++ #, c-format ++ msgid "E342: Out of memory! (allocating %lu bytes)" ++ msgstr "E342: Ikke mere ledig hukommelse! (allokerer %lu byte)" ++ ++ #, c-format ++ msgid "Calling shell to execute: \"%s\"" ++ msgstr "Kalder skal til udførelse af: \"%s\"" ++ ++ msgid "E545: Missing colon" ++ msgstr "E545: Manglende kolon" ++ ++ msgid "E546: Illegal mode" ++ msgstr "E546: Ulovlig tilstand" ++ ++ msgid "E547: Illegal mouseshape" ++ msgstr "E547: Ulovlig museform" ++ ++ msgid "E548: digit expected" ++ msgstr "E548: ciffer ventet" ++ ++ msgid "E549: Illegal percentage" ++ msgstr "E549: Ulovlig procent" ++ ++ msgid "E854: path too long for completion" ++ msgstr "E854: sti for lang til fuldførelse" ++ ++ #, c-format ++ msgid "" ++ "E343: Invalid path: '**[number]' must be at the end of the path or be " ++ "followed by '%s'." ++ msgstr "" ++ "E343: Ugyldig sti: '**[nummer]' skal være i slutningen af stien eller " ++ "efterfølges af '%s'." ++ ++ #, c-format ++ msgid "E344: Can't find directory \"%s\" in cdpath" ++ msgstr "E344: Kan ikke finde mappen \"%s\" i cdpath" ++ ++ #, c-format ++ msgid "E345: Can't find file \"%s\" in path" ++ msgstr "E345: Kan ikke finde filen \"%s\" i path" ++ ++ #, c-format ++ msgid "E346: No more directory \"%s\" found in cdpath" ++ msgstr "E346: Ikke flere mappe \"%s\" fundet i cdpath" ++ ++ #, c-format ++ msgid "E347: No more file \"%s\" found in path" ++ msgstr "E347: Ikke flere fil \"%s\" fundet i path" ++ ++ #, c-format ++ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\"" ++ msgstr "E668: Forkert adgangstilstand for NetBeans-forbindelsens info-fil: \"%s\"" ++ ++ #, c-format ++ msgid "E658: NetBeans connection lost for buffer %ld" ++ msgstr "E658: NetBeans-forbindelse mistet for buffer %ld" ++ ++ msgid "E838: netbeans is not supported with this GUI" ++ msgstr "E838: netbeans understøttes ikke med denne GUI" ++ ++ msgid "E511: netbeans already connected" ++ msgstr "E511: netbeans allerede forbundet" ++ ++ #, c-format ++ msgid "E505: %s is read-only (add ! to override)" ++ msgstr "E505: %s er skrivebeskyttet (tilføj ! for at tilsidesætte)" ++ ++ msgid "E349: No identifier under cursor" ++ msgstr "E349: Ingen identifikator under markør" ++ ++ msgid "E774: 'operatorfunc' is empty" ++ msgstr "E774: 'operatorfunc' er tom" ++ ++ msgid "E775: Eval feature not available" ++ msgstr "E775: Eval-funktionalitet ikke tilgængelig" ++ ++ msgid "Warning: terminal cannot highlight" ++ msgstr "Advarsel: terminal kan ikke fremhæve" ++ ++ msgid "E348: No string under cursor" ++ msgstr "E348: Ingen streng under markør" ++ ++ msgid "E352: Cannot erase folds with current 'foldmethod'" ++ msgstr "E352: Kan ikke slette sammenfoldninger med nuværende 'foldmethod'" ++ ++ msgid "E664: changelist is empty" ++ msgstr "E664: ændringsliste er tom" ++ ++ msgid "E662: At start of changelist" ++ msgstr "E662: Ved begyndelsen af ændringsliste" ++ ++ msgid "E663: At end of changelist" ++ msgstr "E663: Ved slutningen af ændringsliste" ++ ++ msgid "Type :qa! and press <Enter> to abandon all changes and exit Vim" ++ msgstr "" ++ "Skriv :qa! og tryk pÃ¥ <Enter> for at droppe alle ændringer og afslut Vim" ++ ++ #, c-format ++ msgid "1 line %sed 1 time" ++ msgstr "1 linje %sed 1 gang" ++ ++ #, c-format ++ msgid "1 line %sed %d times" ++ msgstr "1 linje %sed %d gange" ++ ++ #, c-format ++ msgid "%ld lines %sed 1 time" ++ msgstr "%ld linjer %sed 1 gang" ++ ++ #, c-format ++ msgid "%ld lines %sed %d times" ++ msgstr "%ld linjer %sed %d gange" ++ ++ #, c-format ++ msgid "%ld lines to indent... " ++ msgstr "%ld linjer at indrykke... " ++ ++ msgid "1 line indented " ++ msgstr "1 linje indrykket " ++ ++ #, c-format ++ msgid "%ld lines indented " ++ msgstr "%ld linjer indrykket " ++ ++ msgid "E748: No previously used register" ++ msgstr "E748: Intet tidligere brugt register" ++ ++ msgid "cannot yank; delete anyway" ++ msgstr "kan ikke rykke; slet alligevel" ++ ++ msgid "1 line changed" ++ msgstr "1 linje ændret" ++ ++ #, c-format ++ msgid "%ld lines changed" ++ msgstr "%ld linjer ændret" ++ ++ #, c-format ++ msgid "freeing %ld lines" ++ msgstr "frigør %ld linjer" ++ ++ #, c-format ++ msgid " into \"%c" ++ msgstr " i \"%c" ++ ++ #, c-format ++ msgid "block of 1 line yanked%s" ++ msgstr "blok pÃ¥ 1 linje rykket%s" ++ ++ #, c-format ++ msgid "1 line yanked%s" ++ msgstr "1 linje rykket%s" ++ ++ #, c-format ++ msgid "block of %ld lines yanked%s" ++ msgstr "blok pÃ¥ %ld linjer rykket%s" ++ ++ #, c-format ++ msgid "%ld lines yanked%s" ++ msgstr "%ld linjer rykket%s" ++ ++ #, c-format ++ msgid "E353: Nothing in register %s" ++ msgstr "E353: Intet i register %s" ++ ++ msgid "" ++ "\n" ++ "--- Registers ---" ++ msgstr "" ++ "\n" ++ "--- Registre ---" ++ ++ msgid "Illegal register name" ++ msgstr "Ulovligt registernavn" ++ ++ msgid "" ++ "\n" ++ "# Registers:\n" ++ msgstr "" ++ "\n" ++ "# Registre:\n" ++ ++ #, c-format ++ msgid "E574: Unknown register type %d" ++ msgstr "E574: Ukendt registertype %d" ++ ++ msgid "" ++ "E883: search pattern and expression register may not contain two or more " ++ "lines" ++ msgstr "" ++ "E883: søgemønster og udtryksregister mÃ¥ ikke indeholde to eller flere linjer" ++ ++ #, c-format ++ msgid "%ld Cols; " ++ msgstr "%ld kolonner; " ++ ++ #, c-format ++ msgid "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Bytes" ++ msgstr "Markerede %s%ld af %ld linje; %lld af %lld ord; %lld af %lld byte" ++ ++ #, c-format ++ msgid "" ++ "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Chars; %lld of " ++ "%lld Bytes" ++ msgstr "" ++ "Markerede %s%ld af %ld linje; %lld af %lld ord; %lld af %lld tegn; %lld af %" ++ "lld byte" ++ ++ #, c-format ++ msgid "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Byte %lld of %lld" ++ msgstr "Kol %s af %s; Linje %ld af %ld; Ord %lld af %lld; Byte %lld af %lld" ++ ++ #, c-format ++ msgid "" ++ "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte " ++ "%lld of %lld" ++ msgstr "" ++ "Kol %s af %s; Linje %ld af %ld; Ord %lld af %lld; Tegn %lld af %lld; Byte %" ++ "lld af %lld" ++ ++ #, c-format ++ msgid "(+%lld for BOM)" ++ msgstr "(+%lld for BOM)" ++ ++ msgid "Thanks for flying Vim" ++ msgstr "Tak fordi du fløj med Vim" ++ ++ msgid "E518: Unknown option" ++ msgstr "E518: Ukendt tilvalg" ++ ++ msgid "E519: Option not supported" ++ msgstr "E519: Tilvalg understøttes ikke" ++ ++ msgid "E520: Not allowed in a modeline" ++ msgstr "E520: Ikke tilladt pÃ¥ en tilstandslinje" ++ ++ msgid "E846: Key code not set" ++ msgstr "E846: Tastekode ikke sat" ++ ++ msgid "E521: Number required after =" ++ msgstr "E521: Nummer kræves efter =" ++ ++ msgid "E522: Not found in termcap" ++ msgstr "E522: Ikke fundet i termcap" ++ ++ #, c-format ++ msgid "E539: Illegal character <%s>" ++ msgstr "E539: Ulovligt tegn <%s>" ++ ++ #, c-format ++ msgid "For option %s" ++ msgstr "For tilvalget %s" ++ ++ msgid "E529: Cannot set 'term' to empty string" ++ msgstr "E529: Kan ikke sætte 'term' til tom streng" ++ ++ msgid "E530: Cannot change term in GUI" ++ msgstr "E530: Kan ikke skifte term i GUI" ++ ++ msgid "E531: Use \":gui\" to start the GUI" ++ msgstr "E531: Brug \":gui\" til at starte GUI'en" ++ ++ msgid "E589: 'backupext' and 'patchmode' are equal" ++ msgstr "E589: 'backupext' og 'patchmode' er ens" ++ ++ msgid "E834: Conflicts with value of 'listchars'" ++ msgstr "E834: Er i konflikt med værdien af 'listchars'" ++ ++ msgid "E835: Conflicts with value of 'fillchars'" ++ msgstr "E835: Er i konflikt med værdien af 'fillchars'" ++ ++ msgid "E617: Cannot be changed in the GTK+ 2 GUI" ++ msgstr "E617: Kan ikke ændres i GTK+ 2 GUI'en" ++ ++ #, c-format ++ msgid "E950: Cannot convert between %s and %s" ++ msgstr "E950: Kan ikke konvertere mellem %s og %s" ++ ++ msgid "E524: Missing colon" ++ msgstr "E524: Manglende kolon" ++ ++ msgid "E525: Zero length string" ++ msgstr "E525: Streng uden længde" ++ ++ #, c-format ++ msgid "E526: Missing number after <%s>" ++ msgstr "E526: Manglende nummer efter <%s>" ++ ++ msgid "E527: Missing comma" ++ msgstr "E527: Manglende komma" ++ ++ msgid "E528: Must specify a ' value" ++ msgstr "E528: Skal angive en '-værdi" ++ ++ msgid "E595: contains unprintable or wide character" ++ msgstr "E595: indeholder tegn som ikke kan udskrives eller er bredt" ++ ++ msgid "E596: Invalid font(s)" ++ msgstr "E596: Ugyldig skrifttype(r)" ++ ++ msgid "E597: can't select fontset" ++ msgstr "E597: kan ikke vælge skrifttypesæt" ++ ++ msgid "E598: Invalid fontset" ++ msgstr "E598: Ugyldigt skrifttypesæt" ++ ++ msgid "E533: can't select wide font" ++ msgstr "E533: kan ikke vælge bred skrifttype" ++ ++ msgid "E534: Invalid wide font" ++ msgstr "E534: Ugyldig bred skrifttype" ++ ++ #, c-format ++ msgid "E535: Illegal character after <%c>" ++ msgstr "E535: Ulovligt tegn efter <%c>" ++ ++ msgid "E536: comma required" ++ msgstr "E536: komma kræves" ++ ++ #, c-format ++ msgid "E537: 'commentstring' must be empty or contain %s" ++ msgstr "E537: 'commentstring' skal være tom eller indeholde %s" ++ ++ msgid "E538: No mouse support" ++ msgstr "E538: Ingen understøttelse af mus" ++ ++ msgid "E540: Unclosed expression sequence" ++ msgstr "E540: Ulukket udtryk-sekvens" ++ ++ msgid "E541: too many items" ++ msgstr "E541: for mange punkter" ++ ++ msgid "E542: unbalanced groups" ++ msgstr "E542: ubalancerede grupper" ++ ++ msgid "E946: Cannot make a terminal with running job modifiable" ++ msgstr "E946: Kan ikke gøre en terminal med kørende job ændringsbar" ++ ++ msgid "E590: A preview window already exists" ++ msgstr "E590: Der findes allerede et forhÃ¥ndsvisningsvindue" ++ ++ msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" ++ msgstr "W17: Arabisk kræver UTF-8, brug ':set encoding=utf-8'" ++ ++ msgid "E954: 24-bit colors are not supported on this environment" ++ msgstr "E954: 24-bit farver understøttes ikke i dette miljø" ++ ++ #, c-format ++ msgid "E593: Need at least %d lines" ++ msgstr "E593: Skal være mindst %d linjer" ++ ++ #, c-format ++ msgid "E594: Need at least %d columns" ++ msgstr "E594: Skal være mindst %d kolonner" ++ ++ #, c-format ++ msgid "E355: Unknown option: %s" ++ msgstr "E355: Ukendt tilvalg: %s" ++ ++ #, c-format ++ msgid "E521: Number required: &%s = '%s'" ++ msgstr "E521: Nummer kræves: &%s = '%s'" ++ ++ msgid "" ++ "\n" ++ "--- Terminal codes ---" ++ msgstr "" ++ "\n" ++ "--- Terminal-koder ---" ++ ++ msgid "" ++ "\n" ++ "--- Global option values ---" ++ msgstr "" ++ "\n" ++ "--- Værdier for globale tilvalg ---" ++ ++ msgid "" ++ "\n" ++ "--- Local option values ---" ++ msgstr "" ++ "\n" ++ "--- Værdier for lokale tilvalg ---" ++ ++ msgid "" ++ "\n" ++ "--- Options ---" ++ msgstr "" ++ "\n" ++ "--- Tilvalg ---" ++ ++ msgid "E356: get_varp ERROR" ++ msgstr "E356: Fejl ved get_varp" ++ ++ #, c-format ++ msgid "E357: 'langmap': Matching character missing for %s" ++ msgstr "E357: 'langmap': Matchende tegn mangler for %s" ++ ++ #, c-format ++ msgid "E358: 'langmap': Extra characters after semicolon: %s" ++ msgstr "E358: 'langmap': Ekstra tegn efter semikolon: %s" ++ ++ msgid "cannot open " ++ msgstr "kan ikke Ã¥bne " ++ ++ msgid "VIM: Can't open window!\n" ++ msgstr "VIM: Kan ikke Ã¥bne vindue!\n" ++ ++ msgid "Need Amigados version 2.04 or later\n" ++ msgstr "Behøver Amigados version 2.04 eller senere\n" ++ ++ #, c-format ++ msgid "Need %s version %ld\n" ++ msgstr "Behøver %s version %ld\n" ++ ++ msgid "Cannot open NIL:\n" ++ msgstr "Kan ikke Ã¥bne NIL:\n" ++ ++ msgid "Cannot create " ++ msgstr "Kan ikke oprette " ++ ++ #, c-format ++ msgid "Vim exiting with %d\n" ++ msgstr "Vim afsluttede med %d\n" ++ ++ msgid "cannot change console mode ?!\n" ++ msgstr "kan ikke skifte konsoltilstand ?!\n" ++ ++ msgid "mch_get_shellsize: not a console??\n" ++ msgstr "mch_get_shellsize: ikke en konsol??\n" ++ ++ msgid "E360: Cannot execute shell with -f option" ++ msgstr "E360: Kan ikke udføre skal med -f-tilvalget" ++ ++ msgid "Cannot execute " ++ msgstr "Kan ikke udføre " ++ ++ msgid "shell " ++ msgstr "skal " ++ ++ msgid " returned\n" ++ msgstr " returnerede\n" ++ ++ msgid "ANCHOR_BUF_SIZE too small." ++ msgstr "ANCHOR_BUF_SIZE for lille." ++ ++ msgid "I/O ERROR" ++ msgstr "FEJL VED I/O" ++ ++ msgid "Message" ++ msgstr "Meddelelse" ++ ++ msgid "E237: Printer selection failed" ++ msgstr "E237: Valg af printer mislykkedes" ++ ++ #, c-format ++ msgid "to %s on %s" ++ msgstr "til %s pÃ¥ %s" ++ ++ #, c-format ++ msgid "E613: Unknown printer font: %s" ++ msgstr "E613: Ukendt skrifttype til printer: %s" ++ ++ #, c-format ++ msgid "E238: Print error: %s" ++ msgstr "E238: Fejl ved udskrivning: %s" ++ ++ #, c-format ++ msgid "Printing '%s'" ++ msgstr "Udskriver '%s'" ++ ++ #, c-format ++ msgid "E244: Illegal charset name \"%s\" in font name \"%s\"" ++ msgstr "E244: Ulovligt tegnsætnavn \"%s\" i skrifttypenavnet \"%s\"" ++ ++ #, c-format ++ msgid "E244: Illegal quality name \"%s\" in font name \"%s\"" ++ msgstr "E244: Ulovligt kvalitetsnavn \"%s\" i skrifttypenavnet \"%s\"" ++ ++ #, c-format ++ msgid "E245: Illegal char '%c' in font name \"%s\"" ++ msgstr "E245: Ulovligt tegn '%c' i skrifttypenavnet \"%s\"" ++ ++ #, c-format ++ msgid "Opening the X display took %ld msec" ++ msgstr "Ã…bningen af X-displayet tog %ld ms" ++ ++ msgid "" ++ "\n" ++ "Vim: Got X error\n" ++ msgstr "" ++ "\n" ++ "Vim: Fik fejl ved X\n" ++ ++ msgid "Testing the X display failed" ++ msgstr "Test af X-displayet mislykkedes" ++ ++ msgid "Opening the X display timed out" ++ msgstr "Ã…bningen af X-displayet fik timeout" ++ ++ msgid "" ++ "\n" ++ "Could not get security context for " ++ msgstr "" ++ "\n" ++ "Kunne ikke hente sikkerhedskontekst for " ++ ++ msgid "" ++ "\n" ++ "Could not set security context for " ++ msgstr "" ++ "\n" ++ "Kunne ikke sætte sikkerhedskontekst for " ++ ++ #, c-format ++ msgid "Could not set security context %s for %s" ++ msgstr "Kunne ikke sætte sikkerhedskonteksten %s for %s" ++ ++ #, c-format ++ msgid "Could not get security context %s for %s. Removing it!" ++ msgstr "Kunne ikke hente sikkerhedskonteksten %s for %s. Fjerner den!" ++ ++ msgid "" ++ "\n" ++ "Cannot execute shell sh\n" ++ msgstr "" ++ "\n" ++ "Kan ikke udføre skallen sh\n" ++ ++ msgid "" ++ "\n" ++ "shell returned " ++ msgstr "" ++ "\n" ++ "skal returnerede " ++ ++ msgid "" ++ "\n" ++ "Cannot create pipes\n" ++ msgstr "" ++ "\n" ++ "Kan ikke oprette pipes\n" ++ ++ msgid "" ++ "\n" ++ "Cannot fork\n" ++ msgstr "" ++ "\n" ++ "Kan ikke fork\n" ++ ++ msgid "" ++ "\n" ++ "Cannot execute shell " ++ msgstr "" ++ "\n" ++ "Kan ikke udføre skallen " ++ ++ msgid "" ++ "\n" ++ "Command terminated\n" ++ msgstr "" ++ "\n" ++ "Kommando termineret\n" ++ ++ msgid "XSMP lost ICE connection" ++ msgstr "XSMP mistede ICE-forbindelse" ++ ++ #, c-format ++ msgid "dlerror = \"%s\"" ++ msgstr "dlerror = \"%s\"" ++ ++ msgid "Opening the X display failed" ++ msgstr "Ã…bningen af X-displayet mislykkedes" ++ ++ msgid "XSMP handling save-yourself request" ++ msgstr "XSMP-hÃ¥ndtering save-yourself-anmodning" ++ ++ msgid "XSMP opening connection" ++ msgstr "XSMP Ã¥bner forbindelse" ++ ++ msgid "XSMP ICE connection watch failed" ++ msgstr "XSMP ICE-forbindelse watch mislykkedes" ++ ++ #, c-format ++ msgid "XSMP SmcOpenConnection failed: %s" ++ msgstr "XSMP SmcOpenConnection mislykkedes: %s" ++ ++ msgid "At line" ++ msgstr "PÃ¥ linje" ++ ++ msgid "Could not load vim32.dll!" ++ msgstr "Kunne ikke indlæse vim32.dll!" ++ ++ msgid "VIM Error" ++ msgstr "Fejl ved VIM" ++ ++ msgid "Could not fix up function pointers to the DLL!" ++ msgstr "Kunne ikke rette op pÃ¥ funktion-pointere til DLL'en!" ++ ++ #, c-format ++ msgid "Vim: Caught %s event\n" ++ msgstr "Vim: Fangede %s-hændelse\n" ++ ++ msgid "close" ++ msgstr "luk" ++ ++ msgid "logoff" ++ msgstr "log ud" ++ ++ msgid "shutdown" ++ msgstr "luk ned" ++ ++ msgid "E371: Command not found" ++ msgstr "E371: Kommando ikke fundet" ++ ++ msgid "" ++ "VIMRUN.EXE not found in your $PATH.\n" ++ "External commands will not pause after completion.\n" ++ "See :help win32-vimrun for more information." ++ msgstr "" ++ "VIMRUN.EXE ikke fundet i din $PATH.\n" ++ "Eksterne kommandoer sættes ikke pÃ¥ pause efter fuldførelse.\n" ++ "Se :help win32-vimrun for mere information." ++ ++ msgid "Vim Warning" ++ msgstr "Advarsel ved Vim" ++ ++ #, c-format ++ msgid "shell returned %d" ++ msgstr "skal returnerede %d" ++ ++ msgid "E926: Current location list was changed" ++ msgstr "E926: Nuværende placeringsliste blev ændret" ++ ++ #, c-format ++ msgid "E372: Too many %%%c in format string" ++ msgstr "E372: For mange %%%c i formatet streng" ++ ++ #, c-format ++ msgid "E373: Unexpected %%%c in format string" ++ msgstr "E373: Uventet %%%c i formatet streng" ++ ++ msgid "E374: Missing ] in format string" ++ msgstr "E374: Manglende ] i formatet streng" ++ ++ #, c-format ++ msgid "E375: Unsupported %%%c in format string" ++ msgstr "E375: Ikke-understøttet %%%c i formatet streng" ++ ++ #, c-format ++ msgid "E376: Invalid %%%c in format string prefix" ++ msgstr "E376: Ugyldig %%%c i præfiks for formatet streng" ++ ++ #, c-format ++ msgid "E377: Invalid %%%c in format string" ++ msgstr "E377: Ugyldig %%%c i formatet streng" ++ ++ msgid "E378: 'errorformat' contains no pattern" ++ msgstr "E378: 'errorformat' indeholder ikke noget mønter" ++ ++ msgid "E379: Missing or empty directory name" ++ msgstr "E379: Manglende eller tomt mappenavn" ++ ++ msgid "E553: No more items" ++ msgstr "E553: Ikke flere punkter" ++ ++ msgid "E924: Current window was closed" ++ msgstr "E924: Nuværende vindue blev lukket" ++ ++ msgid "E925: Current quickfix was changed" ++ msgstr "E925: Nuværende quickfix blev ændret" ++ ++ #, c-format ++ msgid "(%d of %d)%s%s: " ++ msgstr "(%d af %d)%s%s: " ++ ++ msgid " (line deleted)" ++ msgstr " (linje slettet)" ++ ++ #, c-format ++ msgid "%serror list %d of %d; %d errors " ++ msgstr "%sfejlliste %d af %d; %d fejl " ++ ++ msgid "E380: At bottom of quickfix stack" ++ msgstr "E380: Nederst i quickfix-stakken" ++ ++ msgid "E381: At top of quickfix stack" ++ msgstr "E381: Øverst i quickfix-stakken" ++ ++ msgid "No entries" ++ msgstr "Ingen poster" ++ ++ msgid "Error file" ++ msgstr "Fejlfil" ++ ++ msgid "E683: File name missing or invalid pattern" ++ msgstr "E683: Filnavn mangler eller ugyldigt mønster" ++ ++ #, c-format ++ msgid "Cannot open file \"%s\"" ++ msgstr "Kan ikke Ã¥bne filen \"%s\"" ++ ++ msgid "E681: Buffer is not loaded" ++ msgstr "E681: Buffer er ikke indlæst" ++ ++ msgid "E777: String or List expected" ++ msgstr "E777: Streng eller liste ventet" ++ ++ #, c-format ++ msgid "E369: invalid item in %s%%[]" ++ msgstr "E369: ugyldigt punkt i %s%%[]" ++ ++ #, c-format ++ msgid "E769: Missing ] after %s[" ++ msgstr "E769: Manglende ] efter %s[" ++ ++ msgid "E944: Reverse range in character class" ++ msgstr "E944: Baglæns omrÃ¥de i tegnklasse" ++ ++ msgid "E945: Range too large in character class" ++ msgstr "E945: OmrÃ¥de for stort i tegnklasse" ++ ++ #, c-format ++ msgid "E53: Unmatched %s%%(" ++ msgstr "E53: Ikke-matchet %s%%(" ++ ++ #, c-format ++ msgid "E54: Unmatched %s(" ++ msgstr "E54: Ikke-matchet %s(" ++ ++ #, c-format ++ msgid "E55: Unmatched %s)" ++ msgstr "E55: Ikke-matchet %s)" ++ ++ msgid "E66: \\z( not allowed here" ++ msgstr "E66: \\z( ikke tilladt her" ++ ++ msgid "E67: \\z1 et al. not allowed here" ++ msgstr "E67: \\z1 og andre ikke tilladt her" ++ ++ #, c-format ++ msgid "E69: Missing ] after %s%%[" ++ msgstr "E69: Manglende ] efter %s%%[" ++ ++ #, c-format ++ msgid "E70: Empty %s%%[]" ++ msgstr "E70: Tom %s%%[]" ++ ++ msgid "E65: Illegal back reference" ++ msgstr "E65: Ulovlig tilbage-reference" ++ ++ msgid "E339: Pattern too long" ++ msgstr "E339: Mønster for langt" ++ ++ msgid "E50: Too many \\z(" ++ msgstr "E50: For mange \\z(" ++ ++ #, c-format ++ msgid "E51: Too many %s(" ++ msgstr "E51: For mange %s(" ++ ++ msgid "E52: Unmatched \\z(" ++ msgstr "E52: Ikke-matchet \\z(" ++ ++ #, c-format ++ msgid "E59: invalid character after %s@" ++ msgstr "E59: ugyldigt tegn efter %s@" ++ ++ #, c-format ++ msgid "E60: Too many complex %s{...}s" ++ msgstr "E60: For mange komplekse %s{...}s" ++ ++ #, c-format ++ msgid "E61: Nested %s*" ++ msgstr "E61: Indlejret %s*" ++ ++ #, c-format ++ msgid "E62: Nested %s%c" ++ msgstr "E62: Indlejret %s%c" ++ ++ msgid "E63: invalid use of \\_" ++ msgstr "E63: ugyldig brug af \\_" ++ ++ #, c-format ++ msgid "E64: %s%c follows nothing" ++ msgstr "E64: %s%c efterfølger intet" ++ ++ msgid "E68: Invalid character after \\z" ++ msgstr "E68: Ugyldigt tegn efter \\z" ++ ++ #, c-format ++ msgid "E678: Invalid character after %s%%[dxouU]" ++ msgstr "E678: Ugyldigt tegn efter %s%%[dxouU]" ++ ++ #, c-format ++ msgid "E71: Invalid character after %s%%" ++ msgstr "E71: Ugyldigt tegn efter %s%%" ++ ++ #, c-format ++ msgid "E554: Syntax error in %s{...}" ++ msgstr "E554: Fejl ved syntaks i %s{...}" ++ ++ msgid "External submatches:\n" ++ msgstr "Eksterne undermatch:\n" ++ ++ #, c-format ++ msgid "E888: (NFA regexp) cannot repeat %s" ++ msgstr "E888: (NFA regexp) kan ikke gentage %s" ++ ++ msgid "" ++ "E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " ++ "used " ++ msgstr "" ++ "E864: \\%#= mÃ¥ kun efterfølges af 0, 1 eller 2. Bruger den automatiske motor " ++ ++ msgid "Switching to backtracking RE engine for pattern: " ++ msgstr "Skifter til backtracking RE-motor for mønster: " ++ ++ msgid "E865: (NFA) Regexp end encountered prematurely" ++ msgstr "E865: (NFA) Mødte slutningen pÃ¥ regulært udtryk for tidligt" ++ ++ #, c-format ++ msgid "E866: (NFA regexp) Misplaced %c" ++ msgstr "E866: (NFA regexp) Forkert placeret %c" ++ ++ #, c-format ++ msgid "E877: (NFA regexp) Invalid character class: %ld" ++ msgstr "E877: (NFA regexp) Ugyldig tegnklasse: %ld" ++ ++ #, c-format ++ msgid "E867: (NFA) Unknown operator '\\z%c'" ++ msgstr "E867: (NFA) Ukendt operator '\\z%c'" ++ ++ msgid "E951: \\% value too large" ++ msgstr "E951: \\%-værdi for stor" ++ ++ #, c-format ++ msgid "E867: (NFA) Unknown operator '\\%%%c'" ++ msgstr "E867: (NFA) Ukendt operator '\\%%%c'" ++ ++ msgid "E868: Error building NFA with equivalence class!" ++ msgstr "E868: Fejl ved bygning af NFA med ligestillet klasse!" ++ ++ #, c-format ++ msgid "E869: (NFA) Unknown operator '\\@%c'" ++ msgstr "E869: (NFA) Ukendt operator '\\@%c'" ++ ++ msgid "E870: (NFA regexp) Error reading repetition limits" ++ msgstr "E870: (NFA regexp) Fejl ved læsning af gentagelsesgrænser" ++ ++ msgid "E871: (NFA regexp) Can't have a multi follow a multi !" ++ msgstr "E871: (NFA regexp) En multi mÃ¥ ikke efterfølges af en multi !" ++ ++ msgid "E872: (NFA regexp) Too many '('" ++ msgstr "E872: (NFA regexp) For mange '('" ++ ++ msgid "E879: (NFA regexp) Too many \\z(" ++ msgstr "E879: (NFA regexp) For mange \\z(" ++ ++ msgid "E873: (NFA regexp) proper termination error" ++ msgstr "E873: (NFA regexp) fejl ved korrekt terminering" ++ ++ msgid "E874: (NFA) Could not pop the stack !" ++ msgstr "E874: (NFA) Kunne ikke pop'e stakken !" ++ ++ msgid "" ++ "E875: (NFA regexp) (While converting from postfix to NFA), too many states " ++ "left on stack" ++ msgstr "" ++ "E875: (NFA regexp) (Ved konvertering fra postfix til NFA), for mange " ++ "tilstande tilbage pÃ¥ stak" ++ ++ msgid "E876: (NFA regexp) Not enough space to store the whole NFA " ++ msgstr "E876: (NFA regexp) Ikke nok plads til at lagre hele NFA'en " ++ ++ msgid "E878: (NFA) Could not allocate memory for branch traversal!" ++ msgstr "E878: (NFA) Kunne ikke allokere hukommelse til gennemgang af gren!" ++ ++ msgid "" ++ "Could not open temporary log file for writing, displaying on stderr ... " ++ msgstr "Kunne ikke Ã¥bne midlertidig logfil til skrivning, viser pÃ¥ stderr ... " ++ ++ #, c-format ++ msgid "(NFA) COULD NOT OPEN %s !" ++ msgstr "(NFA) KUNNE IKKE Ã…BNE %s !" ++ ++ msgid "Could not open temporary log file for writing " ++ msgstr "Kunne ikke Ã¥bne midlertidig logfil til skrivning " ++ ++ msgid " VREPLACE" ++ msgstr " VERSTAT" ++ ++ msgid " REPLACE" ++ msgstr " ERSTAT" ++ ++ msgid " REVERSE" ++ msgstr " BAGLÆNS" ++ ++ msgid " INSERT" ++ msgstr " INDSÆT" ++ ++ msgid " (insert)" ++ msgstr " (indsæt)" ++ ++ msgid " (replace)" ++ msgstr " (erstat)" ++ ++ msgid " (vreplace)" ++ msgstr " (verstat)" ++ ++ msgid " Hebrew" ++ msgstr " Hebraisk" ++ ++ msgid " Arabic" ++ msgstr " Arabisk" ++ ++ msgid " (paste)" ++ msgstr " (indsæt)" ++ ++ msgid " VISUAL" ++ msgstr " VISUEL" ++ ++ msgid " VISUAL LINE" ++ msgstr " VISUEL LINJE" ++ ++ msgid " VISUAL BLOCK" ++ msgstr " VISUEL BLOK" ++ ++ msgid " SELECT" ++ msgstr " VÆLG" ++ ++ msgid " SELECT LINE" ++ msgstr " VÆLG LINJE" ++ ++ msgid " SELECT BLOCK" ++ msgstr " VÆLG BLOK" ++ ++ msgid "recording" ++ msgstr "optager" ++ ++ #, c-format ++ msgid "E383: Invalid search string: %s" ++ msgstr "E383: Ugyldig søgestreng: %s" ++ ++ #, c-format ++ msgid "E384: search hit TOP without match for: %s" ++ msgstr "E384: søgning ramte ØVERST uden match for: %s" ++ ++ #, c-format ++ msgid "E385: search hit BOTTOM without match for: %s" ++ msgstr "E385: søgning ramte NEDERST uden match for: %s" ++ ++ msgid "E386: Expected '?' or '/' after ';'" ++ msgstr "E386: Ventede '?' eller '/' efter ';'" ++ ++ msgid " (includes previously listed match)" ++ msgstr " (inkluderer tidligere oplistet match)" ++ ++ msgid "--- Included files " ++ msgstr "--- Inkluderede filer " ++ ++ msgid "not found " ++ msgstr "ikke fundet " ++ ++ msgid "in path ---\n" ++ msgstr "i sti ---\n" ++ ++ msgid " (Already listed)" ++ msgstr " (Allerede oplistet)" ++ ++ msgid " NOT FOUND" ++ msgstr " IKKE FUNDET" ++ ++ #, c-format ++ msgid "Scanning included file: %s" ++ msgstr "Skanner inkluderede filer: %s" ++ ++ #, c-format ++ msgid "Searching included file %s" ++ msgstr "Søger efter inkluderede fil %s" ++ ++ msgid "E387: Match is on current line" ++ msgstr "E387: Match er pÃ¥ nuværende linje" ++ ++ msgid "All included files were found" ++ msgstr "Alle inkluderede filer blev fundet" ++ ++ msgid "No included files" ++ msgstr "Ingen inkluderede filer" ++ ++ msgid "E388: Couldn't find definition" ++ msgstr "E388: Kunne ikke finde definition" ++ ++ msgid "E389: Couldn't find pattern" ++ msgstr "E389: Kunne ikke finde mønster" ++ ++ msgid "Substitute " ++ msgstr "Erstatning " ++ ++ #, c-format ++ msgid "" ++ "\n" ++ "# Last %sSearch Pattern:\n" ++ "~" ++ msgstr "" ++ "\n" ++ "# Sidste %sSøgemønster:\n" ++ "~" ++ ++ msgid "E756: Spell checking is not enabled" ++ msgstr "E756: Stavekontrol er ikke aktiveret" ++ ++ #, c-format ++ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\"" ++ msgstr "Advarsel: Kan ikke finde ordlisten \"%s_%s.spl\" eller \"%s_ascii.spl\"" ++ ++ #, c-format ++ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\"" ++ msgstr "Advarsel: Kan ikke finde ordlisten \"%s.%s.spl\" eller \"%s.ascii.spl\"" ++ ++ msgid "E797: SpellFileMissing autocommand deleted buffer" ++ msgstr "E797: SpellFileMissing-autokommando slettede buffer" ++ ++ #, c-format ++ msgid "Warning: region %s not supported" ++ msgstr "Advarsel: regionen %s understøttes ikke" ++ ++ msgid "Sorry, no suggestions" ++ msgstr "Beklager, ingen forslag" ++ ++ #, c-format ++ msgid "Sorry, only %ld suggestions" ++ msgstr "Beklager, kun %ld forslag" ++ ++ #, c-format ++ msgid "Change \"%.*s\" to:" ++ msgstr "Ændr \"%.*s\" til:" ++ ++ #, c-format ++ msgid " < \"%.*s\"" ++ msgstr " < \"%.*s\"" ++ ++ msgid "E752: No previous spell replacement" ++ msgstr "E752: Ingen tidligere staveerstatning" ++ ++ #, c-format ++ msgid "E753: Not found: %s" ++ msgstr "E753: Ikke fundet: %s" ++ ++ msgid "E758: Truncated spell file" ++ msgstr "E758: Afkortet spell-fil" ++ ++ #, c-format ++ msgid "Trailing text in %s line %d: %s" ++ msgstr "Efterstillede tekst i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Affix name too long in %s line %d: %s" ++ msgstr "Affix-navn for langt i %s linje %d: %s" ++ ++ msgid "E761: Format error in affix file FOL, LOW or UPP" ++ msgstr "E761: Fejl i format i affix-filens FOL, LOW eller UPP" ++ ++ msgid "E762: Character in FOL, LOW or UPP is out of range" ++ msgstr "E762: Tegn i FOL, LOW eller UPP er udenfor omrÃ¥de" ++ ++ msgid "Compressing word tree..." ++ msgstr "Komprimerer ordtræ..." ++ ++ #, c-format ++ msgid "Reading spell file \"%s\"" ++ msgstr "Læser spell-filen \"%s\"" ++ ++ msgid "E757: This does not look like a spell file" ++ msgstr "E757: Det ligner ikke en spell-fil" ++ ++ msgid "E771: Old spell file, needs to be updated" ++ msgstr "E771: Gammel spell-fil, som skal opdateres" ++ ++ msgid "E772: Spell file is for newer version of Vim" ++ msgstr "E772: Spell-filen er til en nyere version af Vim" ++ ++ msgid "E770: Unsupported section in spell file" ++ msgstr "E770: Ikke-understøttet sektion i spell-fil" ++ ++ #, c-format ++ msgid "E778: This does not look like a .sug file: %s" ++ msgstr "E778: ligner ikke en .sug-fil: %s" ++ ++ #, c-format ++ msgid "E779: Old .sug file, needs to be updated: %s" ++ msgstr "E779: Gammel .sug-fil, som skal opdateres: %s" ++ ++ #, c-format ++ msgid "E780: .sug file is for newer version of Vim: %s" ++ msgstr "E780: .sug-filen er til en nyere version af Vim: %s" ++ ++ #, c-format ++ msgid "E781: .sug file doesn't match .spl file: %s" ++ msgstr "E781: .sug-filen matcher ikke .spl-filen: %s" ++ ++ #, c-format ++ msgid "E782: error while reading .sug file: %s" ++ msgstr "E782: fejl ved læsning af .sug-fil: %s" ++ ++ #, c-format ++ msgid "Reading affix file %s ..." ++ msgstr "Læser affix-filen %s ..." ++ ++ #, c-format ++ msgid "Conversion failure for word in %s line %d: %s" ++ msgstr "Mislykkede konvertering for ordet %s linje %d: %s" ++ ++ #, c-format ++ msgid "Conversion in %s not supported: from %s to %s" ++ msgstr "Konvertering i %s understøttes ikke: fra %s til %s" ++ ++ #, c-format ++ msgid "Conversion in %s not supported" ++ msgstr "Konvertering i %s understøttes ikke" ++ ++ #, c-format ++ msgid "Invalid value for FLAG in %s line %d: %s" ++ msgstr "Ugyldig værdi for FLAG i %s linje %d: %s" ++ ++ #, c-format ++ msgid "FLAG after using flags in %s line %d: %s" ++ msgstr "FLAG efter brug af flag i %s linje %d: %s" ++ ++ #, c-format ++ msgid "" ++ "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line " ++ "%d" ++ msgstr "" ++ "Definering af COMPOUNDFORBIDFLAG efter PFX-punkt kan give forkerte " ++ "resultater i %s linje %d" ++ ++ #, c-format ++ msgid "" ++ "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line " ++ "%d" ++ msgstr "" ++ "Definering af COMPOUNDPERMITFLAG efter PFX-punkt kan give forkerte " ++ "resultater i %s linje %d" ++ ++ #, c-format ++ msgid "Wrong COMPOUNDRULES value in %s line %d: %s" ++ msgstr "Forkert COMPOUNDRULES-værdi i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s" ++ msgstr "Forkert COMPOUNDWORDMAX-værdi i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Wrong COMPOUNDMIN value in %s line %d: %s" ++ msgstr "Forkert COMPOUNDMIN-værdi i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s" ++ msgstr "Forkert COMPOUNDSYLMAX-værdi i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s" ++ msgstr "Forkert CHECKCOMPOUNDPATTERN-værdi i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Different combining flag in continued affix block in %s line %d: %s" ++ msgstr "Forskellige kombineringsflag i fortsat affix-blok i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Duplicate affix in %s line %d: %s" ++ msgstr "Duplikeret affix i %s linje %d: %s" ++ ++ #, c-format ++ msgid "" ++ "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s " ++ "line %d: %s" ++ msgstr "" ++ "Affix ogsÃ¥ brugt for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST i %s " ++ "linje %d: %s" ++ ++ #, c-format ++ msgid "Expected Y or N in %s line %d: %s" ++ msgstr "Ventede Y eller N i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Broken condition in %s line %d: %s" ++ msgstr "Ødelagt betingelse i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Expected REP(SAL) count in %s line %d" ++ msgstr "Ventede REP(SAL)-tælling i %s linje %d" ++ ++ #, c-format ++ msgid "Expected MAP count in %s line %d" ++ msgstr "Ventede MAP-tælling i %s linje %d" ++ ++ #, c-format ++ msgid "Duplicate character in MAP in %s line %d" ++ msgstr "Duplikeret tegn i MAP i %s linje %d" ++ ++ #, c-format ++ msgid "Unrecognized or duplicate item in %s line %d: %s" ++ msgstr "Ikke-genkendt eller duplikeret punkt i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Missing FOL/LOW/UPP line in %s" ++ msgstr "Manglende FOL-/LOW-/UPP-linje i %s" ++ ++ msgid "COMPOUNDSYLMAX used without SYLLABLE" ++ msgstr "COMPOUNDSYLMAX brugt uden SYLLABLE" ++ ++ msgid "Too many postponed prefixes" ++ msgstr "For mange udskudte præfikser" ++ ++ msgid "Too many compound flags" ++ msgstr "For mange compound-flag" ++ ++ msgid "Too many postponed prefixes and/or compound flags" ++ msgstr "For mange udskudte præfikser og/eller compound-flag" ++ ++ #, c-format ++ msgid "Missing SOFO%s line in %s" ++ msgstr "Manglende SOFO%s-linje i %s" ++ ++ #, c-format ++ msgid "Both SAL and SOFO lines in %s" ++ msgstr "BÃ¥de SAL- og SOFO-linjer i %s" ++ ++ #, c-format ++ msgid "Flag is not a number in %s line %d: %s" ++ msgstr "Flag er ikke et nummer i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Illegal flag in %s line %d: %s" ++ msgstr "Ulovligt flag i %s linje %d: %s" ++ ++ #, c-format ++ msgid "%s value differs from what is used in another .aff file" ++ msgstr "%s-værdi er ikke den samme som bruges i en anden .aff-fil" ++ ++ #, c-format ++ msgid "Reading dictionary file %s ..." ++ msgstr "Læser ordbogsfilen %s ..." ++ ++ #, c-format ++ msgid "E760: No word count in %s" ++ msgstr "E760: Ingen ordtælling i %s" ++ ++ #, c-format ++ msgid "line %6d, word %6ld - %s" ++ msgstr "linje %6d, ord %6ld - %s" ++ ++ #, c-format ++ msgid "Duplicate word in %s line %d: %s" ++ msgstr "Duplikeret ord i %s linje %d: %s" ++ ++ #, c-format ++ msgid "First duplicate word in %s line %d: %s" ++ msgstr "Første duplikeret ord i %s linje %d: %s" ++ ++ #, c-format ++ msgid "%d duplicate word(s) in %s" ++ msgstr "%d duplikeret ord i %s" ++ ++ #, c-format ++ msgid "Ignored %d word(s) with non-ASCII characters in %s" ++ msgstr "Ignorerede %d ord med ikke-ASCII-tegn i %s" ++ ++ #, c-format ++ msgid "Reading word file %s ..." ++ msgstr "Læser ordfilen %s ..." ++ ++ #, c-format ++ msgid "Duplicate /encoding= line ignored in %s line %d: %s" ++ msgstr "Duplikeret /encoding=-linje ignoreret i %s linje %d: %s" ++ ++ #, c-format ++ msgid "/encoding= line after word ignored in %s line %d: %s" ++ msgstr "/encoding=-linje efter ord ignoreret i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Duplicate /regions= line ignored in %s line %d: %s" ++ msgstr "Duplikerede /regions=-linjer ignoreret i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Too many regions in %s line %d: %s" ++ msgstr "For mange regioner i %s linje %d: %s" ++ ++ #, c-format ++ msgid "/ line ignored in %s line %d: %s" ++ msgstr "/-linje ignoreret i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Invalid region nr in %s line %d: %s" ++ msgstr "Ugyldigt regisionsnummer i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Unrecognized flags in %s line %d: %s" ++ msgstr "Ugenkendte flag i %s linje %d: %s" ++ ++ #, c-format ++ msgid "Ignored %d words with non-ASCII characters" ++ msgstr "Ignorerer %d ord med ikke-ASCII-tegn" ++ ++ msgid "E845: Insufficient memory, word list will be incomplete" ++ msgstr "E845: Ikke nok hukommelse, ordlisten vil være ufuldstændig" ++ ++ #, c-format ++ msgid "Compressed %d of %d nodes; %d (%d%%) remaining" ++ msgstr "Komprimerede %d af %d punkter; %d (%d%%) tilbage" ++ ++ msgid "Reading back spell file..." ++ msgstr "Læser spell-fil tilbage..." ++ ++ msgid "Performing soundfolding..." ++ msgstr "Udfører lydsammenfoldning..." ++ ++ #, c-format ++ msgid "Number of words after soundfolding: %ld" ++ msgstr "Antal ord efter lydsammenfoldning: %ld" ++ ++ #, c-format ++ msgid "Total number of words: %d" ++ msgstr "Samlet antal ord: %d" ++ ++ #, c-format ++ msgid "Writing suggestion file %s ..." ++ msgstr "Skriver forslagsfilen %s ..." ++ ++ #, c-format ++ msgid "Estimated runtime memory use: %d bytes" ++ msgstr "AnslÃ¥et brug af afviklingshukommelse: %d byte" ++ ++ msgid "E751: Output file name must not have region name" ++ msgstr "E751: Outputfilnavn mÃ¥ ikke have regionsnavn" ++ ++ #, c-format ++ msgid "E754: Only up to %ld regions supported" ++ msgstr "E754: Kun op til %ld regioner understøttes" ++ ++ #, c-format ++ msgid "E755: Invalid region in %s" ++ msgstr "E755: Ugyldig region i %s" ++ ++ msgid "Warning: both compounding and NOBREAK specified" ++ msgstr "Advarsel: bÃ¥de compounding og NOBREAK angivet" ++ ++ #, c-format ++ msgid "Writing spell file %s ..." ++ msgstr "Skriver spell-filen %s ..." ++ ++ msgid "Done!" ++ msgstr "Færdig!" ++ ++ #, c-format ++ msgid "E765: 'spellfile' does not have %ld entries" ++ msgstr "E765: 'spellfile' har ingen %ld-poster" ++ ++ #, c-format ++ msgid "Word '%.*s' removed from %s" ++ msgstr "Ordet '%.*s' fjernet fra %s" ++ ++ #, c-format ++ msgid "Word '%.*s' added to %s" ++ msgstr "Ordet '%.*s' tilføjet til %s" ++ ++ msgid "E763: Word characters differ between spell files" ++ msgstr "E763: Ordtegn er ikke ens i spell-filer" ++ ++ msgid "E783: duplicate char in MAP entry" ++ msgstr "E783: duplikeret tegn i MAP-post" ++ ++ msgid "No Syntax items defined for this buffer" ++ msgstr "Ingen syntakspunkter defineret for denne buffer" ++ ++ msgid "syntax conceal on" ++ msgstr "syntax conceal on" ++ ++ msgid "syntax conceal off" ++ msgstr "syntax conceal off" ++ ++ #, c-format ++ msgid "E390: Illegal argument: %s" ++ msgstr "E390: Ulovligt argument: %s" ++ ++ msgid "syntax case ignore" ++ msgstr "syntax case ignore" ++ ++ msgid "syntax case match" ++ msgstr "syntax case match" ++ ++ msgid "syntax spell toplevel" ++ msgstr "syntax spell toplevel" ++ ++ msgid "syntax spell notoplevel" ++ msgstr "syntax spell notoplevel" ++ ++ msgid "syntax spell default" ++ msgstr "syntax spell default" ++ ++ msgid "syntax iskeyword " ++ msgstr "syntax iskeyword " ++ ++ #, c-format ++ msgid "E391: No such syntax cluster: %s" ++ msgstr "E391: Ingen sÃ¥dan syntaks-cluster: %s" ++ ++ msgid "syncing on C-style comments" ++ msgstr "synkronisering pÃ¥ C-style-kommentarer" ++ ++ msgid "no syncing" ++ msgstr "ingen synkronisering" ++ ++ msgid "syncing starts " ++ msgstr "synkronisering starter " ++ ++ msgid " lines before top line" ++ msgstr " linjer inden øverste linje" ++ ++ msgid "" ++ "\n" ++ "--- Syntax sync items ---" ++ msgstr "" ++ "\n" ++ "--- Syntaks-synkroniseringspunkter ---" ++ ++ msgid "" ++ "\n" ++ "syncing on items" ++ msgstr "" ++ "\n" ++ "synkroniserer pÃ¥ punkter" ++ ++ msgid "" ++ "\n" ++ "--- Syntax items ---" ++ msgstr "" ++ "\n" ++ "--- Syntakspunkter ---" ++ ++ #, c-format ++ msgid "E392: No such syntax cluster: %s" ++ msgstr "E392: Ingen sÃ¥dan syntaks-cluster: %s" ++ ++ msgid "minimal " ++ msgstr "minimal " ++ ++ msgid "maximal " ++ msgstr "maksimal " ++ ++ msgid "; match " ++ msgstr "; match " ++ ++ msgid " line breaks" ++ msgstr " linjeombrydninger" ++ ++ msgid "E395: contains argument not accepted here" ++ msgstr "E395: indeholder argument som ikke accepteres her" ++ ++ msgid "E844: invalid cchar value" ++ msgstr "E844: ugyldig cchar-værdi" ++ ++ msgid "E393: group[t]here not accepted here" ++ msgstr "E393: group[t]here accepteres ikke her" ++ ++ #, c-format ++ msgid "E394: Didn't find region item for %s" ++ msgstr "E394: Find ikke regionspunkter for %s" ++ ++ msgid "E397: Filename required" ++ msgstr "E397: Filnavn kræves" ++ ++ msgid "E847: Too many syntax includes" ++ msgstr "E847: For mange syntaks inkluderinger" ++ ++ #, c-format ++ msgid "E789: Missing ']': %s" ++ msgstr "E789: Manglende ']': %s" ++ ++ #, c-format ++ msgid "E890: trailing char after ']': %s]%s" ++ msgstr "E890: efterstillede tegn efter ']': %s]%s" ++ ++ #, c-format ++ msgid "E398: Missing '=': %s" ++ msgstr "E398: Manglende '=': %s" ++ ++ #, c-format ++ msgid "E399: Not enough arguments: syntax region %s" ++ msgstr "E399: For mange argumenter: syntaks region %s" ++ ++ msgid "E848: Too many syntax clusters" ++ msgstr "E848: For mange syntaks-clusters" ++ ++ msgid "E400: No cluster specified" ++ msgstr "E400: Ingen cluster angivet" ++ ++ #, c-format ++ msgid "E401: Pattern delimiter not found: %s" ++ msgstr "E401: Mønsterafgrænser ikke fundet: %s" ++ ++ #, c-format ++ msgid "E402: Garbage after pattern: %s" ++ msgstr "E402: Affald efter mønster: %s" ++ ++ msgid "E403: syntax sync: line continuations pattern specified twice" ++ msgstr "" ++ "E403: syntaks synkronisering: linjefortsættelsesmønster angivet to gange" ++ ++ #, c-format ++ msgid "E404: Illegal arguments: %s" ++ msgstr "E404: Ulovlige argumenter: %s" ++ ++ #, c-format ++ msgid "E405: Missing equal sign: %s" ++ msgstr "E405: Manglende lighedstegn: %s" ++ ++ #, c-format ++ msgid "E406: Empty argument: %s" ++ msgstr "E406: Tomt argument: %s" ++ ++ #, c-format ++ msgid "E407: %s not allowed here" ++ msgstr "E407: %s ikke tilladt her" ++ ++ #, c-format ++ msgid "E408: %s must be first in contains list" ++ msgstr "E408: %s skal være først i contains-liste" ++ ++ #, c-format ++ msgid "E409: Unknown group name: %s" ++ msgstr "E409: Ukendt gruppenavn: %s" ++ ++ #, c-format ++ msgid "E410: Invalid :syntax subcommand: %s" ++ msgstr "E410: Ugyldig :syntax-underkommando: %s" ++ ++ msgid "" ++ " TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN" ++ msgstr "" ++ " SAMLET ANTAL MATCH LANGSOMST GENNEMS. NAVN MØNSTER" ++ ++ msgid "E679: recursive loop loading syncolor.vim" ++ msgstr "E679: rekursiv løkke ved indlæsning af syncolor.vim" ++ ++ #, c-format ++ msgid "E411: highlight group not found: %s" ++ msgstr "E411: fremhævningsgruppe ikke fundet: %s" ++ ++ #, c-format ++ msgid "E412: Not enough arguments: \":highlight link %s\"" ++ msgstr "E412: Ikke nok argumenter: \":highlight link %s\"" ++ ++ #, c-format ++ msgid "E413: Too many arguments: \":highlight link %s\"" ++ msgstr "E413: For mange argumenter: \":highlight link %s\"" ++ ++ msgid "E414: group has settings, highlight link ignored" ++ msgstr "E414: gruppe har indstillinger, highlight link ignoreret" ++ ++ #, c-format ++ msgid "E415: unexpected equal sign: %s" ++ msgstr "E415: uventet lighedstegn: %s" ++ ++ #, c-format ++ msgid "E416: missing equal sign: %s" ++ msgstr "E416: manglende lighedstegn: %s" ++ ++ #, c-format ++ msgid "E417: missing argument: %s" ++ msgstr "E417: manglende argument: %s" ++ ++ #, c-format ++ msgid "E418: Illegal value: %s" ++ msgstr "E418: Ulovlig værdi: %s" ++ ++ msgid "E419: FG color unknown" ++ msgstr "E419: Forgrundsfarve ukendt" ++ ++ msgid "E420: BG color unknown" ++ msgstr "E420: Baggrundsfarve ukendt" ++ ++ #, c-format ++ msgid "E421: Color name or number not recognized: %s" ++ msgstr "E421: Farvenavn eller -nummer ikke genkendt: %s" ++ ++ #, c-format ++ msgid "E422: terminal code too long: %s" ++ msgstr "E422: terminalkode for lang: %s" ++ ++ #, c-format ++ msgid "E423: Illegal argument: %s" ++ msgstr "E423: Ulovligt argument: %s" ++ ++ msgid "E424: Too many different highlighting attributes in use" ++ msgstr "E424: For mange forskellige fremhævningsattributter i brug" ++ ++ msgid "E669: Unprintable character in group name" ++ msgstr "E669: Tegn som ikke kan udskrives i gruppenavn" ++ ++ msgid "W18: Invalid character in group name" ++ msgstr "W18: Ugyldige tegn i gruppenavn" ++ ++ msgid "E849: Too many highlight and syntax groups" ++ msgstr "E849: For mange fremhævnings- og syntaksgrupper" ++ ++ msgid "E555: at bottom of tag stack" ++ msgstr "E555: nederst i tag-stak" ++ ++ msgid "E556: at top of tag stack" ++ msgstr "E556: øverst i tag-stak" ++ ++ msgid "E425: Cannot go before first matching tag" ++ msgstr "E425: Kan ikke gÃ¥ efter første matchende tag" ++ ++ #, c-format ++ msgid "E426: tag not found: %s" ++ msgstr "E426: tag ikke fundet: %s" ++ ++ msgid " # pri kind tag" ++ msgstr " # pri kind tag" ++ ++ msgid "file\n" ++ msgstr "fil\n" ++ ++ msgid "E427: There is only one matching tag" ++ msgstr "E427: Der er kun ét matchende tag" ++ ++ msgid "E428: Cannot go beyond last matching tag" ++ msgstr "E428: Kan ikke gÃ¥ efter sidste matchende tag" ++ ++ #, c-format ++ msgid "File \"%s\" does not exist" ++ msgstr "Filen \"%s\" findes ikke" ++ ++ #, c-format ++ msgid "tag %d of %d%s" ++ msgstr "tag %d af %d%s" ++ ++ msgid " or more" ++ msgstr " eller flere" ++ ++ msgid " Using tag with different case!" ++ msgstr " Bruger tag med anden versaltype!" ++ ++ #, c-format ++ msgid "E429: File \"%s\" does not exist" ++ msgstr "E429: Filen \"%s\" findes ikke" ++ ++ msgid "" ++ "\n" ++ " # TO tag FROM line in file/text" ++ msgstr "" ++ "\n" ++ " # TIL tag FRA linje i fil/tekst" ++ ++ #, c-format ++ msgid "Searching tags file %s" ++ msgstr "Søger i tags-filen %s" ++ ++ #, c-format ++ msgid "E430: Tag file path truncated for %s\n" ++ msgstr "E430: Tag-filens sti afkortet for %s\n" ++ ++ msgid "Ignoring long line in tags file" ++ msgstr "Ignorerer lang linje i tags-fil" ++ ++ #, c-format ++ msgid "E431: Format error in tags file \"%s\"" ++ msgstr "E431: Fejl ved format i tags-filen \"%s\"" ++ ++ #, c-format ++ msgid "Before byte %ld" ++ msgstr "Inden byte %ld" ++ ++ #, c-format ++ msgid "E432: Tags file not sorted: %s" ++ msgstr "E432: Tags-fil ikke sorteret: %s" ++ ++ msgid "E433: No tags file" ++ msgstr "E433: Ingen tags-fil" ++ ++ msgid "E434: Can't find tag pattern" ++ msgstr "E434: Kan ikke finde tag-mønster" ++ ++ msgid "E435: Couldn't find tag, just guessing!" ++ msgstr "E435: Kunne ikke finde tag, gætter bare!" ++ ++ #, c-format ++ msgid "Duplicate field name: %s" ++ msgstr "Duplikeret feltnavn: %s" ++ ++ msgid "' not known. Available builtin terminals are:" ++ msgstr "' ikke kendt. Tilgængelige indbyggede terminaler:" ++ ++ msgid "defaulting to '" ++ msgstr "bruger standarden '" ++ ++ msgid "E557: Cannot open termcap file" ++ msgstr "E557: Kan ikke Ã¥bne termcap-fil" ++ ++ msgid "E558: Terminal entry not found in terminfo" ++ msgstr "E558: Terminal-post ikke fundet i terminfo" ++ ++ msgid "E559: Terminal entry not found in termcap" ++ msgstr "E559: Terminal-post ikke fundet i termcap" ++ ++ #, c-format ++ msgid "E436: No \"%s\" entry in termcap" ++ msgstr "E436: Ingen \"%s\"-post i termcap" ++ ++ msgid "E437: terminal capability \"cm\" required" ++ msgstr "E437: terminal-formÃ¥enheden \"cm\" kræves" ++ ++ msgid "" ++ "\n" ++ "--- Terminal keys ---" ++ msgstr "" ++ "\n" ++ "--- Terminal-taster ---" ++ ++ msgid "Cannot open $VIMRUNTIME/rgb.txt" ++ msgstr "Kan ikke Ã¥bne $VIMRUNTIME/rgb.txt" ++ ++ #, c-format ++ msgid "Kill job in \"%s\"?" ++ msgstr "Dræb job i \"%s\"?" ++ ++ msgid "Terminal" ++ msgstr "Terminal" ++ ++ msgid "Terminal-finished" ++ msgstr "Terminal-færdig" ++ ++ msgid "active" ++ msgstr "aktiv" ++ ++ msgid "running" ++ msgstr "køre" ++ ++ msgid "finished" ++ msgstr "færdig" ++ ++ #, c-format ++ msgid "E953: File exists: %s" ++ msgstr "E953: Filen findes: %s" ++ ++ msgid "E955: Not a terminal buffer" ++ msgstr "E955: Ikke en terminal-buffer" ++ ++ msgid "new shell started\n" ++ msgstr "ny skal startet\n" ++ ++ msgid "Vim: Error reading input, exiting...\n" ++ msgstr "Vim: Fejl ved læsning af input, afslutter...\n" ++ ++ msgid "Used CUT_BUFFER0 instead of empty selection" ++ msgstr "Brugte CUT_BUFFER0 i stedet for tom markering" ++ ++ msgid "E881: Line count changed unexpectedly" ++ msgstr "E881: Linjeantal ændret uventet" ++ ++ msgid "No undo possible; continue anyway" ++ msgstr "Ingen fortryd mulig; fortsætter alligevel" ++ ++ #, c-format ++ msgid "E828: Cannot open undo file for writing: %s" ++ msgstr "E828: Kan ikke Ã¥bne fortrydelsesfil til skrivning: %s" ++ ++ #, c-format ++ msgid "E825: Corrupted undo file (%s): %s" ++ msgstr "E825: Korrupt fortrydelsesfil (%s): %s" ++ ++ msgid "Cannot write undo file in any directory in 'undodir'" ++ msgstr "Kan ikke skrive fortrydelsesfil i nogen mappe i 'undodir'" ++ ++ #, c-format ++ msgid "Will not overwrite with undo file, cannot read: %s" ++ msgstr "Overskriver ikke med fortrydelsesfil, kan ikke læse: %s" ++ ++ #, c-format ++ msgid "Will not overwrite, this is not an undo file: %s" ++ msgstr "Overskriver ikke, det er ikke en fortrydelsesfil: %s" ++ ++ msgid "Skipping undo file write, nothing to undo" ++ msgstr "Springer skrivning af fortrydelsesfil over, intet at fortryde" ++ ++ #, c-format ++ msgid "Writing undo file: %s" ++ msgstr "Skriver fortrydelsesfil: %s" ++ ++ #, c-format ++ msgid "E829: write error in undo file: %s" ++ msgstr "E829: fejl ved skrivning i fortrydelsesfil: %s" ++ ++ #, c-format ++ msgid "Not reading undo file, owner differs: %s" ++ msgstr "Læser ikke fortrydelsesfil, ejer er ikke den samme: %s" ++ ++ #, c-format ++ msgid "Reading undo file: %s" ++ msgstr "Læser fortrydelsesfil: %s" ++ ++ #, c-format ++ msgid "E822: Cannot open undo file for reading: %s" ++ msgstr "E822: Kan ikke Ã¥bne fortrydelsesfil til læsning: %s" ++ ++ #, c-format ++ msgid "E823: Not an undo file: %s" ++ msgstr "E823: Ikke en fortrydelsesfil: %s" ++ ++ #, c-format ++ msgid "E832: Non-encrypted file has encrypted undo file: %s" ++ msgstr "E832: Ikke-krypteret fil har krypteret fortrydelsesfil: %s" ++ ++ #, c-format ++ msgid "E826: Undo file decryption failed: %s" ++ msgstr "E826: Dekryptering af fortrydelsesfil mislykkedes: %s" ++ ++ #, c-format ++ msgid "E827: Undo file is encrypted: %s" ++ msgstr "E827: Fortrydelsesfilen er krypteret: %s" ++ ++ #, c-format ++ msgid "E824: Incompatible undo file: %s" ++ msgstr "E824: Inkompatibel fortrydelsesfil: %s" ++ ++ msgid "File contents changed, cannot use undo info" ++ msgstr "Filindholdet ændret, kan ikke bruge fortrydelsesinfo" ++ ++ #, c-format ++ msgid "Finished reading undo file %s" ++ msgstr "Færdig med at læse fortrydelsesfilen %s" ++ ++ msgid "Already at oldest change" ++ msgstr "Allerede ved ældste ændring" ++ ++ msgid "Already at newest change" ++ msgstr "Allerede ved nyeste ændring" ++ ++ #, c-format ++ msgid "E830: Undo number %ld not found" ++ msgstr "E830: Fortrydelsesnummer %ld ikke fundet" ++ ++ msgid "E438: u_undo: line numbers wrong" ++ msgstr "E438: u_undo: linjenumre forkerte" ++ ++ msgid "more line" ++ msgstr "linje mere" ++ ++ msgid "more lines" ++ msgstr "linjer mere" ++ ++ msgid "line less" ++ msgstr "linje mindre" ++ ++ msgid "fewer lines" ++ msgstr "linjere mindre" ++ ++ msgid "change" ++ msgstr "ændring" ++ ++ msgid "changes" ++ msgstr "ændringer" ++ ++ #, c-format ++ msgid "%ld %s; %s #%ld %s" ++ msgstr "%ld %s; %s #%ld %s" ++ ++ msgid "before" ++ msgstr "inden" ++ ++ msgid "after" ++ msgstr "efter" ++ ++ msgid "Nothing to undo" ++ msgstr "Intet at fortryde" ++ ++ msgid "number changes when saved" ++ msgstr "nummer ændrin. hvornÃ¥r gemt" ++ ++ #, c-format ++ msgid "%ld seconds ago" ++ msgstr "%ld sekunder siden" ++ ++ msgid "E790: undojoin is not allowed after undo" ++ msgstr "E790: undojoin ikke tilladt efter undo" ++ ++ msgid "E439: undo list corrupt" ++ msgstr "E439: fortrydelsesliste korrupt" ++ ++ msgid "E440: undo line missing" ++ msgstr "E440: fortrydelseslinje mangler" ++ ++ #, c-format ++ msgid "E122: Function %s already exists, add ! to replace it" ++ msgstr "E122: Funktionen %s findes allerede, tilføj ! for at erstatte den" ++ ++ msgid "E717: Dictionary entry already exists" ++ msgstr "E717: Ordbog-post findes allerede" ++ ++ msgid "E718: Funcref required" ++ msgstr "E718: Funcref kræves" ++ ++ #, c-format ++ msgid "E130: Unknown function: %s" ++ msgstr "E130: Ukendt funktion: %s" ++ ++ #, c-format ++ msgid "E125: Illegal argument: %s" ++ msgstr "E125: Ulovligt argument: %s" ++ ++ #, c-format ++ msgid "E853: Duplicate argument name: %s" ++ msgstr "E853: Duplikeret argumentnavn: %s" ++ ++ #, c-format ++ msgid "E740: Too many arguments for function %s" ++ msgstr "E740: For mange argumenter til funktionen %s" ++ ++ #, c-format ++ msgid "E116: Invalid arguments for function %s" ++ msgstr "E116: Ugyldige argumenter til funktionen %s" ++ ++ msgid "E132: Function call depth is higher than 'maxfuncdepth'" ++ msgstr "E132: Dybden af funktionskald er større end 'maxfuncdepth'" ++ ++ #, c-format ++ msgid "calling %s" ++ msgstr "kalder %s" ++ ++ #, c-format ++ msgid "%s aborted" ++ msgstr "%s afbrudt" ++ ++ #, c-format ++ msgid "%s returning #%ld" ++ msgstr "%s returnerer #%ld" ++ ++ #, c-format ++ msgid "%s returning %s" ++ msgstr "%s returnerer %s" ++ ++ msgid "E699: Too many arguments" ++ msgstr "E699: For mange argumenter" ++ ++ #, c-format ++ msgid "E117: Unknown function: %s" ++ msgstr "E117: Ukendt funktion: %s" ++ ++ #, c-format ++ msgid "E933: Function was deleted: %s" ++ msgstr "E933: Funktion blev slettet: %s" ++ ++ #, c-format ++ msgid "E119: Not enough arguments for function: %s" ++ msgstr "E119: Ikke nok argumenter til funktionen: %s" ++ ++ #, c-format ++ msgid "E120: Using <SID> not in a script context: %s" ++ msgstr "E120: Bruger <SID> ikke i et script kontekst: %s" ++ ++ #, c-format ++ msgid "E725: Calling dict function without Dictionary: %s" ++ msgstr "E725: Kalder dict-funktion uden ordbog: %s" ++ ++ msgid "E129: Function name required" ++ msgstr "E129: Funktionsnavn kræves" ++ ++ #, c-format ++ msgid "E128: Function name must start with a capital or \"s:\": %s" ++ msgstr "E128: Funktionsnavnet skal begynde med et stort bogstav eller \"s:\": %s" ++ ++ #, c-format ++ msgid "E884: Function name cannot contain a colon: %s" ++ msgstr "E884: Funktionsnavnet mÃ¥ ikke indeholdet et kolon: %s" ++ ++ #, c-format ++ msgid "E123: Undefined function: %s" ++ msgstr "E123: Udefineret funktion: %s" ++ ++ #, c-format ++ msgid "E124: Missing '(': %s" ++ msgstr "E124: Manglende '(': %s" ++ ++ msgid "E862: Cannot use g: here" ++ msgstr "E862: Kan ikke bruge g: her" ++ ++ #, c-format ++ msgid "E932: Closure function should not be at top level: %s" ++ msgstr "E932: Closure-funktion skal ikke være pÃ¥ topniveau: %s" ++ ++ msgid "E126: Missing :endfunction" ++ msgstr "E126: Manglende :endfunction" ++ ++ #, c-format ++ msgid "W22: Text found after :endfunction: %s" ++ msgstr "W22: Tekst fundet efter :endfunction: %s" ++ ++ #, c-format ++ msgid "E707: Function name conflicts with variable: %s" ++ msgstr "E707: Funktionsnavnet er i konflikt med variablen: %s" ++ ++ #, c-format ++ msgid "E127: Cannot redefine function %s: It is in use" ++ msgstr "E127: Kan ikke redefinere funktionen %s: Den er i brug" ++ ++ #, c-format ++ msgid "E746: Function name does not match script file name: %s" ++ msgstr "E746: Funktionsnavn matcher ikke scriptfilnavn: %s" ++ ++ #, c-format ++ msgid "E131: Cannot delete function %s: It is in use" ++ msgstr "E131: Kan ikke slette funktionen %s: Den er i brug" ++ ++ msgid "E133: :return not inside a function" ++ msgstr "E133: :return ikke i en funktion" ++ ++ #, c-format ++ msgid "E107: Missing parentheses: %s" ++ msgstr "E107: Manglende parenteser: %s" ++ ++ msgid "" ++ "\n" ++ "MS-Windows 64-bit GUI version" ++ msgstr "" ++ "\n" ++ "MS-Windows 64-bit GUI-version" ++ ++ msgid "" ++ "\n" ++ "MS-Windows 32-bit GUI version" ++ msgstr "" ++ "\n" ++ "MS-Windows 32-bit GUI-version" ++ ++ msgid " with OLE support" ++ msgstr " med understøttelse af OLE" ++ ++ msgid "" ++ "\n" ++ "MS-Windows 64-bit console version" ++ msgstr "" ++ "\n" ++ "MS-Windows 64-bit konsol-version" ++ ++ msgid "" ++ "\n" ++ "MS-Windows 32-bit console version" ++ msgstr "" ++ "\n" ++ "MS-Windows 32-bit konsol-version" ++ ++ msgid "" ++ "\n" ++ "macOS version" ++ msgstr "" ++ "\n" ++ "macOS-version" ++ ++ msgid "" ++ "\n" ++ "macOS version w/o darwin feat." ++ msgstr "" ++ "\n" ++ "macOS-version med/uden darwin-funktionalitet." ++ ++ msgid "" ++ "\n" ++ "OpenVMS version" ++ msgstr "" ++ "\n" ++ "OpenVMS-version" ++ ++ msgid "" ++ "\n" ++ "Included patches: " ++ msgstr "" ++ "\n" ++ "Rettelser som er med: " ++ ++ msgid "" ++ "\n" ++ "Extra patches: " ++ msgstr "" ++ "\n" ++ "Ekstra rettelser: " ++ ++ msgid "Modified by " ++ msgstr "Ændret af " ++ ++ msgid "" ++ "\n" ++ "Compiled " ++ msgstr "" ++ "\n" ++ "Kompileret " ++ ++ msgid "by " ++ msgstr "af " ++ ++ msgid "" ++ "\n" ++ "Huge version " ++ msgstr "" ++ "\n" ++ "Huge-version " ++ ++ msgid "" ++ "\n" ++ "Big version " ++ msgstr "" ++ "\n" ++ "Big-version " ++ ++ msgid "" ++ "\n" ++ "Normal version " ++ msgstr "" ++ "\n" ++ "Normal-version " ++ ++ msgid "" ++ "\n" ++ "Small version " ++ msgstr "" ++ "\n" ++ "Small-version " ++ ++ msgid "" ++ "\n" ++ "Tiny version " ++ msgstr "" ++ "\n" ++ "Tiny-version " ++ ++ msgid "without GUI." ++ msgstr "uden GUI." ++ ++ msgid "with GTK3 GUI." ++ msgstr "med GTK3-GUI." ++ ++ msgid "with GTK2-GNOME GUI." ++ msgstr "med GTK2-GNOME-GUI." ++ ++ msgid "with GTK2 GUI." ++ msgstr "med GTK2-GUI." ++ ++ msgid "with X11-Motif GUI." ++ msgstr "med X11-Motif-GUI." ++ ++ msgid "with X11-neXtaw GUI." ++ msgstr "med X11-neXtaw-GUI." ++ ++ msgid "with X11-Athena GUI." ++ msgstr "med X11-Athena-GUI." ++ ++ msgid "with Photon GUI." ++ msgstr "med Photon-GUI." ++ ++ msgid "with GUI." ++ msgstr "med GUI." ++ ++ msgid "with Carbon GUI." ++ msgstr "med Carbon-GUI." ++ ++ msgid "with Cocoa GUI." ++ msgstr "med Cocoa-GUI." ++ ++ msgid " Features included (+) or not (-):\n" ++ msgstr " Funktionaliteter som er med (+) eller ikke (-):\n" ++ ++ msgid " system vimrc file: \"" ++ msgstr " system vimrc-fil: \"" ++ ++ msgid " user vimrc file: \"" ++ msgstr " bruger vimrc-fil: \"" ++ ++ msgid " 2nd user vimrc file: \"" ++ msgstr " 2. bruger vimrc-fil: \"" ++ ++ msgid " 3rd user vimrc file: \"" ++ msgstr " 3. bruger vimrc-fil: \"" ++ ++ msgid " user exrc file: \"" ++ msgstr " bruger exrc-fil: \"" ++ ++ msgid " 2nd user exrc file: \"" ++ msgstr " 2. bruger exrc-fil: \"" ++ ++ msgid " system gvimrc file: \"" ++ msgstr " system gvimrc-fil: \"" ++ ++ msgid " user gvimrc file: \"" ++ msgstr " bruger gvimrc-fil: \"" ++ ++ msgid "2nd user gvimrc file: \"" ++ msgstr "2. bruger gvimrc-fil: \"" ++ ++ msgid "3rd user gvimrc file: \"" ++ msgstr "3. bruger gvimrc-fil: \"" ++ ++ msgid " defaults file: \"" ++ msgstr " defaults-fil: \"" ++ ++ msgid " system menu file: \"" ++ msgstr " system menu-fil: \"" ++ ++ msgid " fall-back for $VIM: \"" ++ msgstr " fall-back for $VIM: \"" ++ ++ msgid " f-b for $VIMRUNTIME: \"" ++ msgstr " f-b for $VIMRUNTIME: \"" ++ ++ msgid "Compilation: " ++ msgstr "Kompilering: " ++ ++ msgid "Compiler: " ++ msgstr "Kompiler: " ++ ++ msgid "Linking: " ++ msgstr "Linking: " ++ ++ msgid " DEBUG BUILD" ++ msgstr " FEJLRETNINGSBYG" ++ ++ msgid "VIM - Vi IMproved" ++ msgstr "VIM - Vi IMproved" ++ ++ msgid "version " ++ msgstr "version " ++ ++ msgid "by Bram Moolenaar et al." ++ msgstr "af Bram Moolenaar og andre" ++ ++ msgid "Vim is open source and freely distributable" ++ msgstr "Vim er open source og kan frit distribueres" ++ ++ msgid "Help poor children in Uganda!" ++ msgstr "Hjælp fattige børn i Uganda!" ++ ++ msgid "type :help iccf<Enter> for information " ++ msgstr "skriv :help iccf<Enter> for information " ++ ++ msgid "type :q<Enter> to exit " ++ msgstr "skriv :q<Enter> for at afslutte " ++ ++ msgid "type :help<Enter> or <F1> for on-line help" ++ msgstr "skriv :help<Enter> eller <F1> for onlinehjælp " ++ ++ msgid "type :help version8<Enter> for version info" ++ msgstr "skriv :help version8<Enter> for versionsinfo" ++ ++ msgid "Running in Vi compatible mode" ++ msgstr "Kører i Vi-kompatibel-tilstand" ++ ++ msgid "type :set nocp<Enter> for Vim defaults" ++ msgstr "skriv :set nocp<Enter> for Vim-standarder" ++ ++ msgid "type :help cp-default<Enter> for info on this" ++ msgstr "skriv :help cp-default<Enter> for info om det " ++ ++ msgid "menu Help->Orphans for information " ++ msgstr "menu Hjælp->Forældreløse børnfor information " ++ ++ msgid "Running modeless, typed text is inserted" ++ msgstr "Kører tilstandsløs, skrevet tekst indsættes" ++ ++ msgid "menu Edit->Global Settings->Toggle Insert Mode " ++ msgstr "menu Rediger->Globale indstillinger->Indsæt-tilstand til/fra " ++ ++ msgid " for two modes " ++ msgstr " for to-tilstande " ++ ++ msgid "menu Edit->Global Settings->Toggle Vi Compatible" ++ msgstr "menu Rediger->Globale indstillinger->Vi-kompatibel til/fra" ++ ++ msgid " for Vim defaults " ++ msgstr " for Vim-standarder " ++ ++ msgid "Sponsor Vim development!" ++ msgstr "Sponsorer udviklingen af Vim!" ++ ++ msgid "Become a registered Vim user!" ++ msgstr "Bliv en registreret Vim-bruger!" ++ ++ msgid "type :help sponsor<Enter> for information " ++ msgstr "skriv :help sponsor<Enter> for information " ++ ++ msgid "type :help register<Enter> for information " ++ msgstr "skriv :help register<Enter> for information " ++ ++ msgid "menu Help->Sponsor/Register for information " ++ msgstr "menu Hjælp->Sponsorer/registrer for information " ++ ++ msgid "Already only one window" ++ msgstr "Allerede kun ét vindue" ++ ++ msgid "E441: There is no preview window" ++ msgstr "E441: Der er ikke noget forhÃ¥ndsvisningsvindue" ++ ++ msgid "E442: Can't split topleft and botright at the same time" ++ msgstr "E442: Kan ikke opdele øverste venstre og nederste højre pÃ¥ samme tid" ++ ++ msgid "E443: Cannot rotate when another window is split" ++ msgstr "E443: Kan ikke rotere nÃ¥r et andet vindue er opdelt" ++ ++ msgid "E444: Cannot close last window" ++ msgstr "E444: Kan ikke lukke sidste vindue" ++ ++ msgid "E813: Cannot close autocmd window" ++ msgstr "E813: Kan ikke lukke autocmd-vindue" ++ ++ msgid "E814: Cannot close window, only autocmd window would remain" ++ msgstr "E814: Kan ikke lukke vindue, kun autocmd-vindue ville være tilbage" ++ ++ msgid "E445: Other window contains changes" ++ msgstr "E445: Et andet vindue indeholder ændringer" ++ ++ msgid "E446: No file name under cursor" ++ msgstr "E446: Intet filnavn under markør" ++ ++ #, c-format ++ msgid "E447: Can't find file \"%s\" in path" ++ msgstr "E447: Kan ikke finde filen \"%s\" i sti" ++ ++ #, c-format ++ msgid "E799: Invalid ID: %ld (must be greater than or equal to 1)" ++ msgstr "E799: Ugyldigt ID: %ld (skal være større end eller lig med 1)" ++ ++ #, c-format ++ msgid "E801: ID already taken: %ld" ++ msgstr "E801: ID allerede taget: %ld" ++ ++ msgid "List or number required" ++ msgstr "Liste eller nummer kræves" ++ ++ #, c-format ++ msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)" ++ msgstr "E802: Ugyldigt ID: %ld (skal være større end eller lig med 1)" ++ ++ #, c-format ++ msgid "E803: ID not found: %ld" ++ msgstr "E803: ID ikke fundet: %ld" ++ ++ #, c-format ++ msgid "E370: Could not load library %s" ++ msgstr "E370: Kunne ikke indlæse biblioteket %s" ++ ++ msgid "Sorry, this command is disabled: the Perl library could not be loaded." ++ msgstr "" ++ "Beklager, kommandoen er deaktiveret: Perl-biblioteket kunne ikke indlæses." ++ ++ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module" ++ msgstr "E299: Perl-evaluering forbudt i sandbox uden Safe-modulet" ++ ++ msgid "Edit with &multiple Vims" ++ msgstr "Rediger med &flere Vim'er" ++ ++ msgid "Edit with single &Vim" ++ msgstr "Rediger med én &Vim" ++ ++ msgid "Diff with Vim" ++ msgstr "Diff med Vim" ++ ++ msgid "Edit with &Vim" ++ msgstr "Rediger med &Vim" ++ ++ msgid "Edit with existing Vim - " ++ msgstr "Rediger med eksisterende Vim - " ++ ++ msgid "Edits the selected file(s) with Vim" ++ msgstr "Redigerer den valgt fil(er) med Vim" ++ ++ msgid "Error creating process: Check if gvim is in your path!" ++ msgstr "Fejl ved oprettelse af proces: Tjek om gvim er i din sti!" ++ ++ msgid "gvimext.dll error" ++ msgstr "fejl ved gvimext.dll" ++ ++ msgid "Path length too long!" ++ msgstr "Stiens længde er for lang!" ++ ++ msgid "--No lines in buffer--" ++ msgstr "--Ingen linjer i buffer--" ++ ++ msgid "E470: Command aborted" ++ msgstr "E470: Kommando afbrudt" ++ ++ msgid "E471: Argument required" ++ msgstr "E471: Argument kræves" ++ ++ msgid "E10: \\ should be followed by /, ? or &" ++ msgstr "E10: \\ skal efterføles af /, ? eller &" ++ ++ msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits" ++ msgstr "E11: Ugyldig i kommandolinjevindue; <CR> udfører, CTRL-C afslutter" ++ ++ msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search" ++ msgstr "" ++ "E12: Kommando ikke tilladt fra exrc/vimrc i nuværende mappe- eller " ++ "tagsøgning" ++ ++ msgid "E171: Missing :endif" ++ msgstr "E171: Manglende :endif" ++ ++ msgid "E600: Missing :endtry" ++ msgstr "E600: Manglende :endtry" ++ ++ msgid "E170: Missing :endwhile" ++ msgstr "E170: Manglende :endwhile" ++ ++ msgid "E170: Missing :endfor" ++ msgstr "E170: Manglende :endfor" ++ ++ msgid "E588: :endwhile without :while" ++ msgstr "E588: :endwhile uden :while" ++ ++ msgid "E588: :endfor without :for" ++ msgstr "E588: :endfor uden :for" ++ ++ msgid "E13: File exists (add ! to override)" ++ msgstr "E13: Filen findes (tilføj ! for at tilsidesætte)" ++ ++ msgid "E472: Command failed" ++ msgstr "E472: Kommando mislykkede" ++ ++ #, c-format ++ msgid "E234: Unknown fontset: %s" ++ msgstr "E234: Ukendt skrifttypesæt: %s" ++ ++ #, c-format ++ msgid "E235: Unknown font: %s" ++ msgstr "E235: Ukendt skrifttype: %s" ++ ++ #, c-format ++ msgid "E236: Font \"%s\" is not fixed-width" ++ msgstr "E236: Skrifttypen \"%s\" er ikke med fast bredde" ++ ++ msgid "E473: Internal error" ++ msgstr "E473: Intern fejl" ++ ++ #, c-format ++ msgid "E685: Internal error: %s" ++ msgstr "E685: Intern fejl: %s" ++ ++ msgid "Interrupted" ++ msgstr "Afbrudt" ++ ++ msgid "E14: Invalid address" ++ msgstr "E14: Ugyldig adresse" ++ ++ msgid "E474: Invalid argument" ++ msgstr "E474: Ugyldigt argument" ++ ++ #, c-format ++ msgid "E475: Invalid argument: %s" ++ msgstr "E475: Ugyldigt argument: %s" ++ ++ #, c-format ++ msgid "E475: Invalid value for argument %s" ++ msgstr "E475: Ugyldig værdi for argumentet %s" ++ ++ #, c-format ++ msgid "E475: Invalid value for argument %s: %s" ++ msgstr "E475: Ugyldig værdi for argumentet %s: %s" ++ ++ #, c-format ++ msgid "E15: Invalid expression: %s" ++ msgstr "E15: Ugyldigt udtryk: %s" ++ ++ msgid "E16: Invalid range" ++ msgstr "E16: Ugyldigt omrÃ¥de" ++ ++ msgid "E476: Invalid command" ++ msgstr "E476: Ugyldig kommando" ++ ++ #, c-format ++ msgid "E17: \"%s\" is a directory" ++ msgstr "E17: \"%s\" er en mappe" ++ ++ #, c-format ++ msgid "E364: Library call failed for \"%s()\"" ++ msgstr "E364: Kald af bibliotek mislykkedes for \"%s()\"" ++ ++ msgid "E667: Fsync failed" ++ msgstr "E667: Fsync mislykkedes" ++ ++ #, c-format ++ msgid "E448: Could not load library function %s" ++ msgstr "E448: Kunne ikke indlæse biblioteksfunktionen %s" ++ ++ msgid "E19: Mark has invalid line number" ++ msgstr "E19: Mærke har ugyldigt linjenummer" ++ ++ msgid "E20: Mark not set" ++ msgstr "E20: Mærke ikke sat" ++ ++ msgid "E21: Cannot make changes, 'modifiable' is off" ++ msgstr "E21: Kan ikke foretage ændringer, 'modifiable' er slÃ¥et fra" ++ ++ msgid "E22: Scripts nested too deep" ++ msgstr "E22: Scripts indlejret for dybt" ++ ++ msgid "E23: No alternate file" ++ msgstr "E23: Ingen alternate-fil" ++ ++ msgid "E24: No such abbreviation" ++ msgstr "E24: Ingen sÃ¥dan forkortelse" ++ ++ msgid "E477: No ! allowed" ++ msgstr "E477: Ingen ! tilladt" ++ ++ msgid "E25: GUI cannot be used: Not enabled at compile time" ++ msgstr "E25: GUI kan ikke bruges: Ikke aktiveret ved kompileringstid" ++ ++ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n" ++ msgstr "E26: Hebraisk kan ikke bruges: Ikke aktiveret ved kompileringstid\n" ++ ++ msgid "E27: Farsi cannot be used: Not enabled at compile time\n" ++ msgstr "" ++ "E27: Persisk kan ikke bruges: Ikke aktiveret ved kompileringstid\n" ++ "\n" ++ ++ msgid "E800: Arabic cannot be used: Not enabled at compile time\n" ++ msgstr "E800: Arabisk kan ikke bruges: Ikke aktiveret ved kompileringstid\n" ++ ++ #, c-format ++ msgid "E28: No such highlight group name: %s" ++ msgstr "E28: Intet sÃ¥dan fremhævningsgruppenavn: %s" ++ ++ msgid "E29: No inserted text yet" ++ msgstr "E29: Endnu ingen indsat tekst" ++ ++ msgid "E30: No previous command line" ++ msgstr "E30: Ingen tidligere kommandolinje" ++ ++ msgid "E31: No such mapping" ++ msgstr "E31: Ingen sÃ¥dan mapping" ++ ++ msgid "E479: No match" ++ msgstr "E479: Intet match" ++ ++ #, c-format ++ msgid "E480: No match: %s" ++ msgstr "E480: Intet match: %s" ++ ++ msgid "E32: No file name" ++ msgstr "E32: Intet filnavn" ++ ++ msgid "E33: No previous substitute regular expression" ++ msgstr "E33: Ingen tidligere erstatnings regulært udtryk" ++ ++ msgid "E34: No previous command" ++ msgstr "E34: Ingen tidligere kommando" ++ ++ msgid "E35: No previous regular expression" ++ msgstr "E35: Ingen tidligere regulære udtryk" ++ ++ msgid "E481: No range allowed" ++ msgstr "E481: Intet omrÃ¥de tilladt" ++ ++ msgid "E36: Not enough room" ++ msgstr "E36: Ikke plads nok" ++ ++ #, c-format ++ msgid "E247: no registered server named \"%s\"" ++ msgstr "E247: ingen registreret server ved navn \"%s\"" ++ ++ #, c-format ++ msgid "E482: Can't create file %s" ++ msgstr "E482: Kan ikke oprette filen %s" ++ ++ msgid "E483: Can't get temp file name" ++ msgstr "E483: Kan ikke hente midlertidigt filnavn" ++ ++ #, c-format ++ msgid "E484: Can't open file %s" ++ msgstr "E484: Kan ikke Ã¥bne filen %s" ++ ++ #, c-format ++ msgid "E485: Can't read file %s" ++ msgstr "E485: Kan ikke læse filen %s" ++ ++ msgid "E38: Null argument" ++ msgstr "E38: Null-argument" ++ ++ msgid "E39: Number expected" ++ msgstr "E39: Nummer ventet" ++ ++ #, c-format ++ msgid "E40: Can't open errorfile %s" ++ msgstr "E40: Kan ikke Ã¥bne fejlfilen %s" ++ ++ msgid "E233: cannot open display" ++ msgstr "E233: kan ikke Ã¥bne display" ++ ++ msgid "E41: Out of memory!" ++ msgstr "E41: Ikke mere ledig hukommelse!" ++ ++ msgid "Pattern not found" ++ msgstr "Mønster ikke fundet" ++ ++ #, c-format ++ msgid "E486: Pattern not found: %s" ++ msgstr "E486: Mønster ikke fundet: %s" ++ ++ msgid "E487: Argument must be positive" ++ msgstr "E487: Argument skal være positivt" ++ ++ msgid "E459: Cannot go back to previous directory" ++ msgstr "E459: Kan ikke gÃ¥ tilbage til tidligere mappe" ++ ++ msgid "E42: No Errors" ++ msgstr "E42: Ingen fejl" ++ ++ msgid "E776: No location list" ++ msgstr "E776: Ingen placeringsliste" ++ ++ msgid "E43: Damaged match string" ++ msgstr "E43: Beskadiget matchstreng" ++ ++ msgid "E44: Corrupted regexp program" ++ msgstr "E44: Korrupt regexp-program" ++ ++ msgid "E45: 'readonly' option is set (add ! to override)" ++ msgstr "E45: 'readonly'-tilvalget er sat (tilføj ! for at tilsidesætte)" ++ ++ #, c-format ++ msgid "E46: Cannot change read-only variable \"%s\"" ++ msgstr "E46: Kan ikke ændre skrivebeskyttet variabel \"%s\"" ++ ++ #, c-format ++ msgid "E794: Cannot set variable in the sandbox: \"%s\"" ++ msgstr "E794: Kan ikke sætte variabel i sandboksen: \"%s\"" ++ ++ msgid "E713: Cannot use empty key for Dictionary" ++ msgstr "E713: Kan ikke bruge tom nøgle til ordbog" ++ ++ msgid "E715: Dictionary required" ++ msgstr "E715: Ordbog kræves" ++ ++ #, c-format ++ msgid "E684: list index out of range: %ld" ++ msgstr "E684: listeindeks udenfor omrÃ¥de: %ld" ++ ++ #, c-format ++ msgid "E118: Too many arguments for function: %s" ++ msgstr "E118: For mange argumenter til funktion: %s" ++ ++ #, c-format ++ msgid "E716: Key not present in Dictionary: %s" ++ msgstr "E716: Nøgle findes ikke i ordbog: %s" ++ ++ msgid "E714: List required" ++ msgstr "E714: Liste kræves" ++ ++ #, c-format ++ msgid "E712: Argument of %s must be a List or Dictionary" ++ msgstr "E712: Argument af %s skal være en liste eller ordbog" ++ ++ msgid "E47: Error while reading errorfile" ++ msgstr "E47: Fejl ved læsning af fejlfil" ++ ++ msgid "E48: Not allowed in sandbox" ++ msgstr "E48: Ikke tilladt i sandboks" ++ ++ msgid "E523: Not allowed here" ++ msgstr "E523: Ikke tilladt her" ++ ++ msgid "E359: Screen mode setting not supported" ++ msgstr "E359: Skærmtilstand-indstilling understøttes ikke" ++ ++ msgid "E49: Invalid scroll size" ++ msgstr "E49: Ugyldig rullestørrelse" ++ ++ msgid "E91: 'shell' option is empty" ++ msgstr "E91: 'shell'-tilvalget er tomt" ++ ++ msgid "E255: Couldn't read in sign data!" ++ msgstr "E255: Kunne ikke læse i sign-data!" ++ ++ msgid "E72: Close error on swap file" ++ msgstr "E72: Fejl ved lukning af swap-fil" ++ ++ msgid "E73: tag stack empty" ++ msgstr "E73: tag-stak tom" ++ ++ msgid "E74: Command too complex" ++ msgstr "E74: Kommando for kompleks" ++ ++ msgid "E75: Name too long" ++ msgstr "E75: Navn for langt" ++ ++ msgid "E76: Too many [" ++ msgstr "E76: For mange [" ++ ++ msgid "E77: Too many file names" ++ msgstr "E77: For mange filnavne" ++ ++ msgid "E488: Trailing characters" ++ msgstr "E488: Efterstillede tegn" ++ ++ msgid "E78: Unknown mark" ++ msgstr "E78: Ukendt mærke" ++ ++ msgid "E79: Cannot expand wildcards" ++ msgstr "E79: Kan ikke udvide jokertegn" ++ ++ msgid "E591: 'winheight' cannot be smaller than 'winminheight'" ++ msgstr "E591: 'winheight' mÃ¥ ikke være mindre end 'winminheight'" ++ ++ msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'" ++ msgstr "E592: 'winwidth' mÃ¥ ikke være mindre end 'winminwidth'" ++ ++ msgid "E80: Error while writing" ++ msgstr "E80: Fejl ved skrivning" ++ ++ msgid "E939: Positive count required" ++ msgstr "E939: Positiv tælling kræves" ++ ++ msgid "E81: Using <SID> not in a script context" ++ msgstr "E81: Bruger <SID> ikke i et script kontekst" ++ ++ msgid "E449: Invalid expression received" ++ msgstr "E449: Ugyldigt udtryk modtaget" ++ ++ msgid "E463: Region is guarded, cannot modify" ++ msgstr "E463: Regionen er beskyttet, kan ikke ændre" ++ ++ msgid "E744: NetBeans does not allow changes in read-only files" ++ msgstr "E744: NetBeans tillader ikke ændringer i skrivebeskyttede filer" ++ ++ msgid "E363: pattern uses more memory than 'maxmempattern'" ++ msgstr "E363: mønster bruger mere hukommelse end 'maxmempattern'" ++ ++ msgid "E749: empty buffer" ++ msgstr "E749: tom buffer" ++ ++ #, c-format ++ msgid "E86: Buffer %ld does not exist" ++ msgstr "E86: Bufferen %ld findes ikke" ++ ++ msgid "E682: Invalid search pattern or delimiter" ++ msgstr "E682: Ugyldigt søgemønster eller -afgrænser" ++ ++ msgid "E139: File is loaded in another buffer" ++ msgstr "E139: Filen er indlæst i en anden buffer" ++ ++ #, c-format ++ msgid "E764: Option '%s' is not set" ++ msgstr "E764: Tilvalget '%s' er ikke sat" ++ ++ msgid "E850: Invalid register name" ++ msgstr "E850: Ugyldigt registernavn" ++ ++ #, c-format ++ msgid "E919: Directory not found in '%s': \"%s\"" ++ msgstr "E919: Mappe ikke fundet i '%s': \"%s\"" ++ ++ msgid "E952: Autocommand caused recursive behavior" ++ msgstr "E952: Autokommando forÃ¥rsagede rekursiv opførsel" ++ ++ msgid "search hit TOP, continuing at BOTTOM" ++ msgstr "søgning ramte ØVERST, fortsætter ved NEDERST" ++ ++ msgid "search hit BOTTOM, continuing at TOP" ++ msgstr "søgning ramte NEDERST, fortsætter ved ØVERST" ++ ++ #, c-format ++ msgid "Need encryption key for \"%s\"" ++ msgstr "Behøver krypteringsnøgle til \"%s\"" ++ ++ msgid "empty keys are not allowed" ++ msgstr "tomme nøgler er ikke tilladt" ++ ++ msgid "dictionary is locked" ++ msgstr "ordbog er lÃ¥st" ++ ++ msgid "list is locked" ++ msgstr "liste er lÃ¥st" ++ ++ #, c-format ++ msgid "failed to add key '%s' to dictionary" ++ msgstr "kunne ikke tilføje nøglen '%s' til ordbog" ++ ++ #, c-format ++ msgid "index must be int or slice, not %s" ++ msgstr "indeks skal være heltal eller slice, ikke %s" ++ ++ #, c-format ++ msgid "expected str() or unicode() instance, but got %s" ++ msgstr "ventede str()- eller unicode()-instans, men fik %s" ++ ++ #, c-format ++ msgid "expected bytes() or str() instance, but got %s" ++ msgstr "ventede bytes()- eller str()-instans, min fik %s" ++ ++ #, c-format ++ msgid "" ++ "expected int(), long() or something supporting coercing to long(), but got %s" ++ msgstr "" ++ "ventede int(), long() eller noget som understøtter coercing til long(), min " ++ "fik %s" ++ ++ #, c-format ++ msgid "expected int() or something supporting coercing to int(), but got %s" ++ msgstr "" ++ "ventede int() eller noget som understøtter coercing til int(), min fik %s" ++ ++ msgid "value is too large to fit into C int type" ++ msgstr "værdi er for stor til at passe i C-heltalstype" ++ ++ msgid "value is too small to fit into C int type" ++ msgstr "værdi er for lille til at passe i C-heltalstype" ++ ++ msgid "number must be greater than zero" ++ msgstr "nummer skal være større end nul" ++ ++ msgid "number must be greater or equal to zero" ++ msgstr "nummer skal være større end eller lig med nul" ++ ++ msgid "can't delete OutputObject attributes" ++ msgstr "kan ikke slette OutputObject-attributter" ++ ++ #, c-format ++ msgid "invalid attribute: %s" ++ msgstr "ugyldig attribut: %s" ++ ++ msgid "E264: Python: Error initialising I/O objects" ++ msgstr "E264: Python: Fejl ved initialisering af I/O-objekter" ++ ++ msgid "failed to change directory" ++ msgstr "kunne ikke skifte mappe" ++ ++ #, c-format ++ msgid "expected 3-tuple as imp.find_module() result, but got %s" ++ msgstr "ventede 3-tuple som imp.find_module() resultat, men fik %s" ++ ++ #, c-format ++ msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d" ++ msgstr "" ++ "ventede 3-tuple som imp.find_module() resultat, men fik tuple af størrelse %" ++ "d" ++ ++ msgid "internal error: imp.find_module returned tuple with NULL" ++ msgstr "intern fejl: imp.find_module returnerede tuple med NULL" ++ ++ msgid "cannot delete vim.Dictionary attributes" ++ msgstr "kan ikke slette vim.Dictionary-attributter" ++ ++ msgid "cannot modify fixed dictionary" ++ msgstr "kan ikke ændre fast ordbog" ++ ++ #, c-format ++ msgid "cannot set attribute %s" ++ msgstr "kan ikke sætte attributten %s" ++ ++ msgid "hashtab changed during iteration" ++ msgstr "hashtab ændret under gennemløb" ++ ++ #, c-format ++ msgid "expected sequence element of size 2, but got sequence of size %d" ++ msgstr "ventede sekvenselement af størrelse 2, men fik sekvens af størrelse %d" ++ ++ msgid "list constructor does not accept keyword arguments" ++ msgstr "liste-constructor accepterer ikke nøgleord-argumenter" ++ ++ msgid "list index out of range" ++ msgstr "listeindeks udenfor omrÃ¥de" ++ ++ #, c-format ++ msgid "internal error: failed to get vim list item %d" ++ msgstr "intern fejl: kunne ikke hente vim-listepunkt %d" ++ ++ msgid "slice step cannot be zero" ++ msgstr "slice-trin mÃ¥ ikke være nul" ++ ++ #, c-format ++ msgid "attempt to assign sequence of size greater than %d to extended slice" ++ msgstr "forsøg pÃ¥ at tildele sekvens som er større end %d til udvidet slice" ++ ++ #, c-format ++ msgid "internal error: no vim list item %d" ++ msgstr "intern fejl: intet vim-listepunkt %d" ++ ++ msgid "internal error: not enough list items" ++ msgstr "intern fejl: ikke nok listepunkter" ++ ++ msgid "internal error: failed to add item to list" ++ msgstr "intern fejl: kunne ikke tilføje punkt til liste" ++ ++ #, c-format ++ msgid "attempt to assign sequence of size %d to extended slice of size %d" ++ msgstr "" ++ "forsøg pÃ¥ at tildele sekvens af størrelsen %d til udvidet slice af " ++ "størrelsen %d" ++ ++ msgid "failed to add item to list" ++ msgstr "kunne ikke tilføje punkt til liste" ++ ++ msgid "cannot delete vim.List attributes" ++ msgstr "kan ikke slette vim.List-attributter" ++ ++ msgid "cannot modify fixed list" ++ msgstr "kan ikke ændre fast liste" ++ ++ #, c-format ++ msgid "unnamed function %s does not exist" ++ msgstr "unavngivet funktion %s findes ikke" ++ ++ #, c-format ++ msgid "function %s does not exist" ++ msgstr "funktionen %s findes ikke" ++ ++ #, c-format ++ msgid "failed to run function %s" ++ msgstr "kunne ikke køre funktionen %s" ++ ++ msgid "unable to get option value" ++ msgstr "kan ikke hente tilvalgsværdi" ++ ++ msgid "internal error: unknown option type" ++ msgstr "intern fejl: ukendt tilvalgstype" ++ ++ msgid "problem while switching windows" ++ msgstr "problem ved skift af vinduer" ++ ++ #, c-format ++ msgid "unable to unset global option %s" ++ msgstr "kan ikke fjerne det globale tilvalg %s" ++ ++ #, c-format ++ msgid "unable to unset option %s which does not have global value" ++ msgstr "kan ikke fjerne tilvalget %s som ikke har global værdi" ++ ++ msgid "attempt to refer to deleted tab page" ++ msgstr "forsøg pÃ¥ at referere til slettet fanebladsside" ++ ++ msgid "no such tab page" ++ msgstr "ingen sÃ¥dan fanebladsside" ++ ++ msgid "attempt to refer to deleted window" ++ msgstr "forsøg pÃ¥ at referere til slettet vindue" ++ ++ msgid "readonly attribute: buffer" ++ msgstr "skrivebeskyttet attribut: buffer" ++ ++ msgid "cursor position outside buffer" ++ msgstr "markørposition udenfor buffer" ++ ++ msgid "no such window" ++ msgstr "intet sÃ¥dan vindue" ++ ++ msgid "attempt to refer to deleted buffer" ++ msgstr "forsøg pÃ¥ at referere til slettet buffer" ++ ++ msgid "failed to rename buffer" ++ msgstr "kunne ikke omdøbe bufferen" ++ ++ msgid "mark name must be a single character" ++ msgstr "mærkenavn skal være ét tegn" ++ ++ #, c-format ++ msgid "expected vim.Buffer object, but got %s" ++ msgstr "ventede vim.Buffer-objekt, men fik %s" ++ ++ #, c-format ++ msgid "failed to switch to buffer %d" ++ msgstr "kunne ikke skifte til bufferen %d" ++ ++ #, c-format ++ msgid "expected vim.Window object, but got %s" ++ msgstr "ventede vim.Window-objekt, men fik %s" ++ ++ msgid "failed to find window in the current tab page" ++ msgstr "kunne ikke finde vindue i den nuværende fanebladsside" ++ ++ msgid "did not switch to the specified window" ++ msgstr "skiftede ikke til det angivne vindue" ++ ++ #, c-format ++ msgid "expected vim.TabPage object, but got %s" ++ msgstr "ventede vim.TabPage-objekt, men fik %s" ++ ++ msgid "did not switch to the specified tab page" ++ msgstr "skiftede ikke til den angivne fanebladsside" ++ ++ msgid "failed to run the code" ++ msgstr "kunne ikke køre koden" ++ ++ msgid "E858: Eval did not return a valid python object" ++ msgstr "E858: Eval returnerede ikke et gyldigt python-objekt" ++ ++ msgid "E859: Failed to convert returned python object to vim value" ++ msgstr "E859: Kunne ikke konvertere returnerede python-objekt til vim-værdi" ++ ++ #, c-format ++ msgid "unable to convert %s to vim dictionary" ++ msgstr "kan ikke konvertere %s til vim-ordbog" ++ ++ #, c-format ++ msgid "unable to convert %s to vim list" ++ msgstr "kan ikke konvertere %s til vim-liste" ++ ++ #, c-format ++ msgid "unable to convert %s to vim structure" ++ msgstr "kan ikke konvertere %s til vim-struktur" ++ ++ msgid "internal error: NULL reference passed" ++ msgstr "intern fejl: NULL-reference givet" ++ ++ msgid "internal error: invalid value type" ++ msgstr "intern fejl: ugyldig værditype" ++ ++ msgid "" ++ "Failed to set path hook: sys.path_hooks is not a list\n" ++ "You should now do the following:\n" ++ "- append vim.path_hook to sys.path_hooks\n" ++ "- append vim.VIM_SPECIAL_PATH to sys.path\n" ++ msgstr "" ++ "Kunne ikke sætte sti-hook: sys.path_hooks er ikke en liste\n" ++ "Du bør nu gøre følgende:\n" ++ "- tilføj vim.path_hook til slutningen af sys.path_hooks\n" ++ "- tilføj vim.VIM_SPECIAL_PATH til slutningen af sys.path\n" ++ ++ msgid "" ++ "Failed to set path: sys.path is not a list\n" ++ "You should now append vim.VIM_SPECIAL_PATH to sys.path" ++ msgstr "" ++ "Kunne ikke sætte sti: sys.path er ikke en liste\n" ++ "Du bør nu tilføje vim.VIM_SPECIAL_PATH til slutningen af sys.path" ++ ++ msgid "" ++ "Vim macro files (*.vim)\t*.vim\n" ++ "All Files (*.*)\t*.*\n" ++ msgstr "" ++ "Vim-makrofiler (*.vim)\t*.vim\n" ++ "Alle filer (*.*)\t*.*\n" ++ ++ msgid "All Files (*.*)\t*.*\n" ++ msgstr "Alle filer (*.*)\t*.*\n" ++ ++ msgid "" ++ "All Files (*.*)\t*.*\n" ++ "C source (*.c, *.h)\t*.c;*.h\n" ++ "C++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\n" ++ "VB code (*.bas, *.frm)\t*.bas;*.frm\n" ++ "Vim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" ++ msgstr "" ++ "Alle filer (*.*)\t*.*\n" ++ "C-kildekode (*.c, *.h)\t*.c;*.h\n" ++ "C++-kildekode (*.cpp, *.hpp)\t*.cpp;*.hpp\n" ++ "VB-kode (*.bas, *.frm)\t*.bas;*.frm\n" ++ "Vim-filer (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" ++ ++ msgid "" ++ "Vim macro files (*.vim)\t*.vim\n" ++ "All Files (*)\t*\n" ++ msgstr "" ++ "Vim-makrofiler (*.vim)\t*.vim\n" ++ "Alle filer (*)\t*\n" ++ ++ msgid "All Files (*)\t*\n" ++ msgstr "Alle filer (*)\t*\n" ++ ++ msgid "" ++ "All Files (*)\t*\n" ++ "C source (*.c, *.h)\t*.c;*.h\n" ++ "C++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\n" ++ "Vim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" ++ msgstr "" ++ "Alle filer (*)\t*\n" ++ "C-kildekode (*.c, *.h)\t*.c;*.h\n" ++ "C++-kildekode (*.cpp, *.hpp)\t*.cpp;*.hpp\n" ++ "Vim-filer (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" +*** ../vim-8.1.0107/src/version.c 2018-06-24 15:14:02.224061917 +0200 +--- src/version.c 2018-06-24 15:49:32.812878767 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 108, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +100. The most exciting sporting events you noticed during summer 1996 + was Netscape vs. Microsoft. + + /// 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 /// diff --git a/data/vim/patches/8.1.0109 b/data/vim/patches/8.1.0109 new file mode 100644 index 000000000..6199bf1ba --- /dev/null +++ b/data/vim/patches/8.1.0109 @@ -0,0 +1,45 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0109 +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.0109 +Problem: New po makefile missing from distribution. +Solution: Add it to the file list. +Files: Filelist + + +*** ../vim-8.1.0108/Filelist 2018-04-25 21:35:37.000000000 +0200 +--- Filelist 2018-06-24 15:54:13.943126126 +0200 +*************** +*** 907,912 **** +--- 907,913 ---- + src/po/check.vim \ + src/po/cleanup.vim \ + src/po/Makefile \ ++ src/po/Make_all.mak \ + src/po/Make_cyg.mak \ + src/po/Make_ming.mak \ + src/po/Make_mvc.mak \ +*** ../vim-8.1.0108/src/version.c 2018-06-24 15:52:37.083719389 +0200 +--- src/version.c 2018-06-24 15:55:43.546585056 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 109, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +101. U can read htis w/o ny porblm and cant figur eout Y its evn listd. + + /// 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 /// diff --git a/data/vim/patches/8.1.0110 b/data/vim/patches/8.1.0110 new file mode 100644 index 000000000..5d074f91d --- /dev/null +++ b/data/vim/patches/8.1.0110 @@ -0,0 +1,84 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0110 +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.0110 +Problem: File name not displayed with ":file" when 'F' is in 'shortmess'. +Solution: Always display the file name when there is no argument (Christian + Brabandt, closes #3070) +Files: src/ex_cmds.c, src/testdir/test_options.vim + + +*** ../vim-8.1.0109/src/ex_cmds.c 2018-06-23 19:22:45.606486311 +0200 +--- src/ex_cmds.c 2018-06-24 16:53:22.557962803 +0200 +*************** +*** 3094,3104 **** + { + if (rename_buffer(eap->arg) == FAIL) + return; + } +! /* print full file name if :cd used */ +! if (!shortmess(SHM_FILEINFO)) + fileinfo(FALSE, FALSE, eap->forceit); +- redraw_tabline = TRUE; + } + + /* +--- 3094,3105 ---- + { + if (rename_buffer(eap->arg) == FAIL) + return; ++ redraw_tabline = TRUE; + } +! +! // print file name if no argument or 'F' is not in 'shortmess' +! if (*eap->arg == NUL || !shortmess(SHM_FILEINFO)) + fileinfo(FALSE, FALSE, eap->forceit); + } + + /* +*** ../vim-8.1.0109/src/testdir/test_options.vim 2018-05-13 17:56:20.000000000 +0200 +--- src/testdir/test_options.vim 2018-06-24 16:36:00.704103065 +0200 +*************** +*** 400,402 **** +--- 400,416 ---- + call assert_equal(4,&numberwidth) + bw! + endfunc ++ ++ func Test_shortmess_F() ++ new ++ call assert_match('\[No Name\]', execute('file')) ++ set shortmess+=F ++ call assert_match('\[No Name\]', execute('file')) ++ call assert_match('^\s*$', execute('file foo')) ++ call assert_match('foo', execute('file')) ++ set shortmess-=F ++ call assert_match('bar', execute('file bar')) ++ call assert_match('bar', execute('file')) ++ set shortmess& ++ bwipe ++ endfunc +*** ../vim-8.1.0109/src/version.c 2018-06-24 15:56:20.602363176 +0200 +--- src/version.c 2018-06-24 16:32:41.109320897 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 110, + /**/ + + +-- +To be rich is not the end, but only a change of worries. + + /// 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 /// diff --git a/data/vim/patches/8.1.0111 b/data/vim/patches/8.1.0111 new file mode 100644 index 000000000..c8efeab6b --- /dev/null +++ b/data/vim/patches/8.1.0111 @@ -0,0 +1,149 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0111 +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.0111 +Problem: .po files do not use recommended names. +Solution: Give a warning if the recommended name is not used. Accept the + recommended name for conversion. (Christian Brabandt, Ken Takata) +Files: src/po/Makefile, src/po/sjiscorr.c, src/po/check.vim + + +*** ../vim-8.1.0110/src/po/Makefile 2018-06-24 15:52:37.075719437 +0200 +--- src/po/Makefile 2018-06-24 17:58:04.858324254 +0200 +*************** +*** 87,93 **** + + ja.euc-jp.po: ja.po + iconv -f utf-8 -t euc-jp ja.po | \ +! sed -e 's/charset=utf-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po + + # Convert cs.po to create cs.cp1250.po. + cs.cp1250.po: cs.po +--- 87,93 ---- + + ja.euc-jp.po: ja.po + iconv -f utf-8 -t euc-jp ja.po | \ +! sed -e 's/charset=[uU][tT][fF]-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po + + # Convert cs.po to create cs.cp1250.po. + cs.cp1250.po: cs.po +*************** +*** 105,111 **** + pl.UTF-8.po: pl.po + rm -f pl.UTF-8.po + iconv -f iso-8859-2 -t utf-8 pl.po | \ +! sed -e 's/charset=ISO-8859-2/charset=utf-8/' -e 's/# Original translations/# Generated from pl.po, DO NOT EDIT/' > pl.UTF-8.po + + # Convert sk.po to create sk.cp1250.po. + sk.cp1250.po: sk.po +--- 105,111 ---- + pl.UTF-8.po: pl.po + rm -f pl.UTF-8.po + iconv -f iso-8859-2 -t utf-8 pl.po | \ +! sed -e 's/charset=ISO-8859-2/charset=UTF-8/' -e 's/# Original translations/# Generated from pl.po, DO NOT EDIT/' > pl.UTF-8.po + + # Convert sk.po to create sk.cp1250.po. + sk.cp1250.po: sk.po +*************** +*** 119,125 **** + zh_CN.cp936.po: zh_CN.UTF-8.po + rm -f zh_CN.cp936.po + iconv -f UTF-8 -t cp936 zh_CN.UTF-8.po | \ +! sed -e 's/charset=utf-8/charset=gbk/' -e 's/# Original translations/# Generated from zh_CN.UTF-8.po, DO NOT EDIT/' > zh_CN.cp936.po + + # Convert ko.UTF-8.po to create ko.po. + ko.po: ko.UTF-8.po +--- 119,125 ---- + zh_CN.cp936.po: zh_CN.UTF-8.po + rm -f zh_CN.cp936.po + iconv -f UTF-8 -t cp936 zh_CN.UTF-8.po | \ +! sed -e 's/charset=[uU][tT][fF]-8/charset=gbk/' -e 's/# Original translations/# Generated from zh_CN.UTF-8.po, DO NOT EDIT/' > zh_CN.cp936.po + + # Convert ko.UTF-8.po to create ko.po. + ko.po: ko.UTF-8.po +*** ../vim-8.1.0110/src/po/sjiscorr.c 2016-01-31 17:13:47.000000000 +0100 +--- src/po/sjiscorr.c 2018-06-24 17:58:04.858324254 +0200 +*************** +*** 16,22 **** + { + for (p = buffer; *p != 0; p++) + { +! if (strncmp(p, "charset=utf-8", 13) == 0) + { + fputs("charset=cp932", stdout); + p += 12; +--- 16,23 ---- + { + for (p = buffer; *p != 0; p++) + { +! if (strncmp(p, "charset=utf-8", 13) == 0 +! || strncmp(p, "charset=UTF-8", 13) == 0) + { + fputs("charset=cp932", stdout); + p += 12; +*** ../vim-8.1.0110/src/po/check.vim 2018-05-08 16:05:44.000000000 +0200 +--- src/po/check.vim 2018-06-24 17:57:34.634490594 +0200 +*************** +*** 173,184 **** +--- 173,209 ---- + " We allow for a stray plural header, msginit adds one. + endif + ++ " Check that 8bit encoding is used instead of 8-bit ++ let cte = search('^"Content-Transfer-Encoding:\s\+8-bit', 'n') ++ let ctc = search('^"Content-Type:.*;\s\+\<charset=[iI][sS][oO]_', 'n') ++ let ctu = search('^"Content-Type:.*;\s\+\<charset=utf-8', 'n') ++ if cte ++ echomsg "Content-Transfer-Encoding should be 8bit instead of 8-bit" ++ " TODO: make this an error ++ " if error == 0 ++ " let error = cte ++ " endif ++ elseif ctc ++ echomsg "Content-Type charset should be 'ISO-...' instead of 'ISO_...'" ++ " TODO: make this an error ++ " if error == 0 ++ " let error = ct ++ " endif ++ elseif ctu ++ echomsg "Content-Type charset should be 'UTF-8' instead of 'utf-8'" ++ " TODO: make this an error ++ " if error == 0 ++ " let error = ct ++ " endif ++ endif ++ + + if error == 0 + " If all was OK restore the view. + call winrestview(wsv) + echomsg "OK" + else ++ " Put the cursor on the line with the error. + exe error + endif + +*** ../vim-8.1.0110/src/version.c 2018-06-24 16:53:31.649909925 +0200 +--- src/version.c 2018-06-24 18:04:11.412305463 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 111, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +104. When people ask about the Presidential Election you ask "Which country?" + + /// 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 /// diff --git a/data/vim/patches/8.1.0112 b/data/vim/patches/8.1.0112 new file mode 100644 index 000000000..e55f3a260 --- /dev/null +++ b/data/vim/patches/8.1.0112 @@ -0,0 +1,139 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0112 +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.0112 +Problem: No error when using bad arguments with searchpair(). +Solution: Add error messages. +Files: src/evalfunc.c, src/testdir/test_search.vim + + +*** ../vim-8.1.0111/src/evalfunc.c 2018-06-23 19:22:45.602486336 +0200 +--- src/evalfunc.c 2018-06-24 18:42:08.826927103 +0200 +*************** +*** 10152,10158 **** + long lnum_stop = 0; + long time_limit = 0; + +! /* Get the three pattern arguments: start, middle, end. */ + spat = get_tv_string_chk(&argvars[0]); + mpat = get_tv_string_buf_chk(&argvars[1], nbuf1); + epat = get_tv_string_buf_chk(&argvars[2], nbuf2); +--- 10152,10159 ---- + long lnum_stop = 0; + long time_limit = 0; + +! /* Get the three pattern arguments: start, middle, end. Will result in an +! * error if not a valid argument. */ + spat = get_tv_string_chk(&argvars[0]); + mpat = get_tv_string_buf_chk(&argvars[1], nbuf1); + epat = get_tv_string_buf_chk(&argvars[2], nbuf2); +*************** +*** 10189,10207 **** +--- 10190,10215 ---- + && skip->v_type != VAR_STRING) + { + /* Type error */ ++ EMSG2(_(e_invarg2), get_tv_string(&argvars[4])); + goto theend; + } + if (argvars[5].v_type != VAR_UNKNOWN) + { + lnum_stop = (long)get_tv_number_chk(&argvars[5], NULL); + if (lnum_stop < 0) ++ { ++ EMSG2(_(e_invarg2), get_tv_string(&argvars[5])); + goto theend; ++ } + #ifdef FEAT_RELTIME + if (argvars[6].v_type != VAR_UNKNOWN) + { + time_limit = (long)get_tv_number_chk(&argvars[6], NULL); + if (time_limit < 0) ++ { ++ EMSG2(_(e_invarg2), get_tv_string(&argvars[6])); + goto theend; ++ } + } + #endif + } +*** ../vim-8.1.0111/src/testdir/test_search.vim 2018-04-30 13:22:53.000000000 +0200 +--- src/testdir/test_search.vim 2018-06-24 18:48:30.844524919 +0200 +*************** +*** 287,302 **** + new + call setline(1, ['other code here', '', '[', '" cursor here', ']']) + 4 +! let a=searchpair('\[','',']','bW') + call assert_equal(3, a) + set nomagic + 4 +! let a=searchpair('\[','',']','bW') + call assert_equal(3, a) + set magic + q! + endfunc + + func Test_searchpair_skip() + func Zero() + return 0 +--- 287,312 ---- + new + call setline(1, ['other code here', '', '[', '" cursor here', ']']) + 4 +! let a = searchpair('\[','',']','bW') + call assert_equal(3, a) + set nomagic + 4 +! let a = searchpair('\[','',']','bW') + call assert_equal(3, a) + set magic + q! + endfunc + ++ func Test_searchpair_errors() ++ call assert_fails("call searchpair([0], 'middle', 'end', 'bW', 'skip', 99, 100)", 'E730: using List as a String') ++ call assert_fails("call searchpair('start', {-> 0}, 'end', 'bW', 'skip', 99, 100)", 'E729: using Funcref as a String') ++ call assert_fails("call searchpair('start', 'middle', {'one': 1}, 'bW', 'skip', 99, 100)", 'E731: using Dictionary as a String') ++ call assert_fails("call searchpair('start', 'middle', 'end', 'flags', 'skip', 99, 100)", 'E475: Invalid argument: flags') ++ call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 0, 99, 100)", 'E475: Invalid argument: 0') ++ call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', -99, 100)", 'E475: Invalid argument: -99') ++ call assert_fails("call searchpair('start', 'middle', 'end', 'bW', 'func', 99, -100)", 'E475: Invalid argument: -100') ++ endfunc ++ + func Test_searchpair_skip() + func Zero() + return 0 +*************** +*** 311,318 **** + 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', {-> 0})) + 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', function('Zero'))) + 3 | call assert_equal(1, searchpair('{', '', '}', 'bWn', function('Partial', [0]))) +- " invalid argument +- 3 | call assert_equal(0, searchpair('{', '', '}', 'bWn', 0)) + bw! + endfunc + +--- 321,326 ---- +*** ../vim-8.1.0111/src/version.c 2018-06-24 18:04:45.440091103 +0200 +--- src/version.c 2018-06-24 18:10:31.957980576 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 112, + /**/ + +-- +Laughing helps. It's like jogging on the inside. + + /// 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 /// diff --git a/data/vim/patches/8.1.0113 b/data/vim/patches/8.1.0113 new file mode 100644 index 000000000..b1f9bfca7 --- /dev/null +++ b/data/vim/patches/8.1.0113 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0113 +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.0113 +Problem: Compiler warning for unused variable. (Yegappan Lakshmanan) +Solution: Add UNUSED. (Christian Brabandt) +Files: src/screen.c + + +*** ../vim-8.1.0112/src/screen.c 2018-06-23 19:22:45.614486258 +0200 +--- src/screen.c 2018-06-24 19:20:57.281940880 +0200 +*************** +*** 6874,6880 **** + * displayed. + */ + static void +! win_redr_status(win_T *wp, int ignore_pum) + { + int row; + char_u *p; +--- 6879,6885 ---- + * displayed. + */ + static void +! win_redr_status(win_T *wp, int ignore_pum UNUSED) + { + int row; + char_u *p; +*** ../vim-8.1.0112/src/version.c 2018-06-24 19:01:55.411752372 +0200 +--- src/version.c 2018-06-24 19:22:02.657626019 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 113, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +108. While reading a magazine, you look for the Zoom icon for a better + look at a photograph. + + /// 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 /// diff --git a/data/vim/patches/8.1.0114 b/data/vim/patches/8.1.0114 new file mode 100644 index 000000000..d6f78f5ac --- /dev/null +++ b/data/vim/patches/8.1.0114 @@ -0,0 +1,218 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0114 +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.0114 +Problem: Confusing variable name. +Solution: Rename new_ts to new_vts_array. Change zero to NULL. +Files: src/ex_cmds.c, src/option.c + + +*** ../vim-8.1.0113/src/ex_cmds.c 2018-06-24 16:53:31.649909925 +0200 +--- src/ex_cmds.c 2018-06-24 22:04:12.929793169 +0200 +*************** +*** 678,684 **** + char_u *new_line = (char_u *)1; /* init to non-NULL */ + int did_undo; /* called u_save for current line */ + #ifdef FEAT_VARTABS +! int *new_ts = 0; + char_u *new_ts_str; /* string value of tab argument */ + #else + int temp; +--- 678,684 ---- + char_u *new_line = (char_u *)1; /* init to non-NULL */ + int did_undo; /* called u_save for current line */ + #ifdef FEAT_VARTABS +! int *new_vts_array = NULL; + char_u *new_ts_str; /* string value of tab argument */ + #else + int temp; +*************** +*** 693,708 **** + + #ifdef FEAT_VARTABS + new_ts_str = eap->arg; +! if (!tabstop_set(eap->arg, &new_ts)) + return; + while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',') + ++(eap->arg); + +! // This ensures that either new_ts and new_ts_str are freshly allocated, +! // or new_ts points to an existing array and new_ts_str is null. +! if (new_ts == 0) + { +! new_ts = curbuf->b_p_vts_array; + new_ts_str = NULL; + } + else +--- 693,709 ---- + + #ifdef FEAT_VARTABS + new_ts_str = eap->arg; +! if (!tabstop_set(eap->arg, &new_vts_array)) + return; + while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',') + ++(eap->arg); + +! // This ensures that either new_vts_array and new_ts_str are freshly +! // allocated, or new_vts_array points to an existing array and new_ts_str +! // is null. +! if (new_vts_array == NULL) + { +! new_vts_array = curbuf->b_p_vts_array; + new_ts_str = NULL; + } + else +*************** +*** 753,761 **** + int t, s; + + tabstop_fromto(start_vcol, vcol, +! tabstop_count(new_ts)? 0: curbuf->b_p_ts, +! new_ts, +! &t, &s); + num_tabs = t; + num_spaces = s; + #else +--- 754,760 ---- + int t, s; + + tabstop_fromto(start_vcol, vcol, +! curbuf->b_p_ts, new_vts_array, &t, &s); + num_tabs = t; + num_spaces = s; + #else +*************** +*** 829,839 **** + // If a single value was given then it can be considered equal to + // either the value of 'tabstop' or the value of 'vartabstop'. + if (tabstop_count(curbuf->b_p_vts_array) == 0 +! && tabstop_count(new_ts) == 1 +! && curbuf->b_p_ts == tabstop_first(new_ts)) + ; /* not changed */ + else if (tabstop_count(curbuf->b_p_vts_array) > 0 +! && tabstop_eq(curbuf->b_p_vts_array, new_ts)) + ; /* not changed */ + else + redraw_curbuf_later(NOT_VALID); +--- 828,838 ---- + // If a single value was given then it can be considered equal to + // either the value of 'tabstop' or the value of 'vartabstop'. + if (tabstop_count(curbuf->b_p_vts_array) == 0 +! && tabstop_count(new_vts_array) == 1 +! && curbuf->b_p_ts == tabstop_first(new_vts_array)) + ; /* not changed */ + else if (tabstop_count(curbuf->b_p_vts_array) > 0 +! && tabstop_eq(curbuf->b_p_vts_array, new_vts_array)) + ; /* not changed */ + else + redraw_curbuf_later(NOT_VALID); +*************** +*** 853,872 **** + // than one tabstop then update 'vartabstop'. + int *old_vts_ary = curbuf->b_p_vts_array; + +! if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_ts) > 1) + { + set_string_option_direct((char_u *)"vts", -1, new_ts_str, + OPT_FREE|OPT_LOCAL, 0); + vim_free(new_ts_str); +! curbuf->b_p_vts_array = new_ts; + vim_free(old_vts_ary); + } + else + { + // 'vartabstop' wasn't in use and a single value was given to + // retab then update 'tabstop'. +! curbuf->b_p_ts = tabstop_first(new_ts); +! vim_free(new_ts); + } + } + #else +--- 852,871 ---- + // than one tabstop then update 'vartabstop'. + int *old_vts_ary = curbuf->b_p_vts_array; + +! if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_vts_array) > 1) + { + set_string_option_direct((char_u *)"vts", -1, new_ts_str, + OPT_FREE|OPT_LOCAL, 0); + vim_free(new_ts_str); +! curbuf->b_p_vts_array = new_vts_array; + vim_free(old_vts_ary); + } + else + { + // 'vartabstop' wasn't in use and a single value was given to + // retab then update 'tabstop'. +! curbuf->b_p_ts = tabstop_first(new_vts_array); +! vim_free(new_vts_array); + } + } + #else +*** ../vim-8.1.0113/src/option.c 2018-06-24 15:14:02.224061917 +0200 +--- src/option.c 2018-06-24 22:03:45.413912296 +0200 +*************** +*** 12844,12850 **** + int t; + int excess; + +! if (vts == 0 || vts[0] == 0) + return (col / ts) * ts; + + tabcount = vts[0]; +--- 12844,12850 ---- + int t; + int excess; + +! if (vts == NULL || vts[0] == 0) + return (col / ts) * ts; + + tabcount = vts[0]; +*************** +*** 12878,12887 **** + int tabcount; + int t; + +! if (vts == 0 || vts[0] == 0) + { + int tabs = 0; + int initspc = ts - (start_col % ts); + if (spaces >= initspc) + { + spaces -= initspc; +--- 12878,12888 ---- + int tabcount; + int t; + +! if (vts == NULL || vts[0] == 0) + { + int tabs = 0; + int initspc = ts - (start_col % ts); ++ + if (spaces >= initspc) + { + spaces -= initspc; +*** ../vim-8.1.0113/src/version.c 2018-06-24 19:23:59.989047923 +0200 +--- src/version.c 2018-06-24 22:05:27.937462580 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 114, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +109. You actually read -- and enjoy -- lists like this. + + /// 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 /// diff --git a/data/vim/patches/8.1.0115 b/data/vim/patches/8.1.0115 new file mode 100644 index 000000000..046669e75 --- /dev/null +++ b/data/vim/patches/8.1.0115 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0115 +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.0115 +Problem: The matchparen plugin may throw an error. +Solution: Change the skip argument from zero to "0". +Files: runtime/plugin/matchparen.vim + + +*** ../vim-8.1.0114/runtime/plugin/matchparen.vim 2017-09-30 14:51:57.000000000 +0200 +--- runtime/plugin/matchparen.vim 2018-06-25 00:01:59.103022741 +0200 +*************** +*** 114,120 **** + " within those syntax types (i.e., not skip). Otherwise, the cursor is + " outside of the syntax types and s_skip should keep its value so we skip any + " matching pair inside the syntax types. +! execute 'if' s_skip '| let s_skip = 0 | endif' + + " Limit the search to lines visible in the window. + let stoplinebottom = line('w$') +--- 114,120 ---- + " within those syntax types (i.e., not skip). Otherwise, the cursor is + " outside of the syntax types and s_skip should keep its value so we skip any + " matching pair inside the syntax types. +! execute 'if' s_skip '| let s_skip = "0" | endif' + + " Limit the search to lines visible in the window. + let stoplinebottom = line('w$') +*** ../vim-8.1.0114/src/version.c 2018-06-24 23:53:25.153526495 +0200 +--- src/version.c 2018-06-25 00:03:27.870567571 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 115, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +110. You actually volunteer to become your employer's webmaster. + + /// 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 /// diff --git a/data/vim/patches/8.1.0116 b/data/vim/patches/8.1.0116 new file mode 100644 index 000000000..c1fdabebf --- /dev/null +++ b/data/vim/patches/8.1.0116 @@ -0,0 +1,95 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0116 +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.0116 +Problem: Display problem with 'vartabstop' and 'linebreak'. (Chauca + Fuentes) +Solution: Call tabstop_padding(). (Christian Brabandt, closes #3076) +Files: src/screen.c, src/testdir/test_vartabs.vim + + +*** ../vim-8.1.0115/src/screen.c 2018-06-24 19:23:59.989047923 +0200 +--- src/screen.c 2018-06-25 21:21:42.002042548 +0200 +*************** +*** 4753,4760 **** +--- 4753,4765 ---- + n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, + NULL) - 1; + if (c == TAB && n_extra + col > wp->w_width) ++ #ifdef FEAT_VARTABS ++ n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_array) - 1; ++ #else + n_extra = (int)wp->w_buffer->b_p_ts + - vcol % (int)wp->w_buffer->b_p_ts - 1; ++ #endif + + # ifdef FEAT_MBYTE + c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; +*** ../vim-8.1.0115/src/testdir/test_vartabs.vim 2018-06-23 19:22:45.618486231 +0200 +--- src/testdir/test_vartabs.vim 2018-06-25 21:22:50.237671137 +0200 +*************** +*** 4,9 **** +--- 4,14 ---- + finish + endif + ++ source view_util.vim ++ function! s:compare_lines(expect, actual) ++ call assert_equal(join(a:expect, "\n"), join(a:actual, "\n")) ++ endfunction ++ + func! Test_vartabs() + new + %d +*************** +*** 255,257 **** +--- 260,282 ---- + + bwipeout! + endfunc ++ ++ func! Test_vartabs_linebreak() ++ if winwidth(0) < 80 ++ return ++ endif ++ new ++ 70vnew ++ %d ++ setl linebreak vartabstop=10,15,20,40 ++ call setline(1, "\tx\tx\tx\tx") ++ ++ let lines = ScreenLines([1, 2], winwidth(0)) ++ let expect = [' x x x ', ++ \ ' x '] ++ call s:compare_lines(expect, lines) ++ ++ " cleanup ++ bw! ++ bw! ++ endfunc +*** ../vim-8.1.0115/src/version.c 2018-06-25 00:05:55.901799630 +0200 +--- src/version.c 2018-06-25 21:24:22.389089360 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 116, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +115. You are late picking up your kid from school and try to explain + to the teacher you were stuck in Web traffic. + + /// 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 /// diff --git a/data/vim/patches/8.1.0117 b/data/vim/patches/8.1.0117 new file mode 100644 index 000000000..f102405a0 --- /dev/null +++ b/data/vim/patches/8.1.0117 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0117 +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.0117 +Problem: URL in install program still points to SourceForge. +Solution: Change it to www.vim.org. (closes #3100) +Files: src/dosinst.c + + +*** ../vim-8.1.0116/src/dosinst.c 2018-05-11 19:52:42.000000000 +0200 +--- src/dosinst.c 2018-06-26 23:09:12.956537417 +0200 +*************** +*** 1878,1884 **** + add_pathsep(shell_folder_path); + strcat(shell_folder_path, "Vim Online.url"); + if (!WritePrivateProfileString("InternetShortcut", "URL", +! "http://vim.sf.net/", shell_folder_path)) + { + printf("Creating the Vim online URL failed\n"); + return; +--- 1878,1884 ---- + add_pathsep(shell_folder_path); + strcat(shell_folder_path, "Vim Online.url"); + if (!WritePrivateProfileString("InternetShortcut", "URL", +! "https://www.vim.org/", shell_folder_path)) + { + printf("Creating the Vim online URL failed\n"); + return; +*** ../vim-8.1.0116/src/version.c 2018-06-25 21:24:47.288934354 +0200 +--- src/version.c 2018-06-26 23:09:53.416289165 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 117, + /**/ + +-- +An actual excerpt from a classified section of a city newspaper: +"Illiterate? Write today for free help!" + + /// 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 /// diff --git a/data/vim/patches/8.1.0118 b/data/vim/patches/8.1.0118 new file mode 100644 index 000000000..afcdf937e --- /dev/null +++ b/data/vim/patches/8.1.0118 @@ -0,0 +1,136 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0118 +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.0118 +Problem: Duplicate error message for put command. +Solution: Check return value of u_save(). (Jason Franklin) +Files: src/ops.c, src/testdir/test_messages.vim src/testdir/test_put.vim + + +*** ../vim-8.1.0117/src/ops.c 2018-06-23 19:22:45.610486284 +0200 +--- src/ops.c 2018-06-27 20:35:21.160021864 +0200 +*************** +*** 3551,3559 **** + return; + } + +! /* Autocommands may be executed when saving lines for undo, which may make +! * y_array invalid. Start undo now to avoid that. */ +! u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1); + + if (insert_string != NULL) + { +--- 3551,3560 ---- + return; + } + +! /* Autocommands may be executed when saving lines for undo. This might +! * make "y_array" invalid, so we start undo now to avoid that. */ +! if (u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1) == FAIL) +! goto end; + + if (insert_string != NULL) + { +*** ../vim-8.1.0117/src/testdir/test_messages.vim 2018-05-19 14:43:26.779509715 +0200 +--- src/testdir/test_messages.vim 2018-06-27 20:35:21.160021864 +0200 +*************** +*** 39,45 **** + endtry + endfunction + +! " Patch 7.4.1696 defined the "clearmode()" command for clearing the mode + " indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked. Message + " output could then be disturbed when 'cmdheight' was greater than one. + " This test ensures that the bugfix for this issue remains in place. +--- 39,45 ---- + endtry + endfunction + +! " Patch 7.4.1696 defined the "clearmode()" function for clearing the mode + " indicator (e.g., "-- INSERT --") when ":stopinsert" is invoked. Message + " output could then be disturbed when 'cmdheight' was greater than one. + " This test ensures that the bugfix for this issue remains in place. +*** ../vim-8.1.0117/src/testdir/test_put.vim 2018-05-23 21:53:48.352478970 +0200 +--- src/testdir/test_put.vim 2018-06-27 20:48:28.788199160 +0200 +*************** +*** 1,3 **** +--- 1,4 ---- ++ " Tests for put commands, e.g. ":put", "p", "gp", "P", "gP", etc. + + func Test_put_block() + if !has('multi_byte') +*************** +*** 58,60 **** +--- 59,106 ---- + call assert_equal(['A1','A2','A3','4A','5A','6A'], getline(1,'$')) + bw! + endfunc ++ ++ func Test_put_fails_when_nomodifiable() ++ new ++ set nomodifiable ++ ++ normal! yy ++ call assert_fails(':put', 'E21') ++ call assert_fails(':put!', 'E21') ++ call assert_fails(':normal! p', 'E21') ++ call assert_fails(':normal! gp', 'E21') ++ call assert_fails(':normal! P', 'E21') ++ call assert_fails(':normal! gP', 'E21') ++ ++ if has('mouse') ++ set mouse=n ++ call assert_fails('execute "normal! \<MiddleMouse>"', 'E21') ++ set mouse& ++ endif ++ ++ bwipeout! ++ endfunc ++ ++ " A bug was discovered where the Normal mode put commands (e.g., "p") would ++ " output duplicate error messages when invoked in a non-modifiable buffer. ++ func Test_put_p_errmsg_nodup() ++ new ++ set nomodifiable ++ ++ normal! yy ++ ++ func Capture_p_error() ++ redir => s:p_err ++ normal! p ++ redir END ++ endfunc ++ ++ silent! call Capture_p_error() ++ ++ " Error message output within a function should be three lines (the function ++ " name, the line number, and the error message). ++ call assert_equal(3, count(s:p_err, "\n")) ++ ++ delfunction Capture_p_error ++ bwipeout! ++ endfunc +*** ../vim-8.1.0117/src/version.c 2018-06-26 23:18:40.593167147 +0200 +--- src/version.c 2018-06-27 20:36:32.259661095 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 118, + /**/ + +-- +Would you care for a drink? I mean, if it were, like, +disabled and you had to look after 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 /// diff --git a/data/vim/patches/8.1.0119 b/data/vim/patches/8.1.0119 new file mode 100644 index 000000000..902f0bf7d --- /dev/null +++ b/data/vim/patches/8.1.0119 @@ -0,0 +1,71 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0119 +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.0119 +Problem: Failing test goes unnoticed because testdir/messages is not + written. +Solution: Set 'nomodifiable' only local to the buffer. +Files: src/testdir/test_put.vim + + +*** ../vim-8.1.0118/src/testdir/test_put.vim 2018-06-27 20:49:40.571862365 +0200 +--- src/testdir/test_put.vim 2018-06-27 22:21:37.122498815 +0200 +*************** +*** 62,68 **** + + func Test_put_fails_when_nomodifiable() + new +! set nomodifiable + + normal! yy + call assert_fails(':put', 'E21') +--- 62,68 ---- + + func Test_put_fails_when_nomodifiable() + new +! setlocal nomodifiable + + normal! yy + call assert_fails(':put', 'E21') +*************** +*** 85,91 **** + " output duplicate error messages when invoked in a non-modifiable buffer. + func Test_put_p_errmsg_nodup() + new +! set nomodifiable + + normal! yy + +--- 85,91 ---- + " output duplicate error messages when invoked in a non-modifiable buffer. + func Test_put_p_errmsg_nodup() + new +! setlocal nomodifiable + + normal! yy + +*** ../vim-8.1.0118/src/version.c 2018-06-27 20:49:40.571862365 +0200 +--- src/version.c 2018-06-27 23:11:22.293187958 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 119, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +125. You begin to wonder how often it REALLY is necessary to get up + and shower or bathe. + + /// 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 /// diff --git a/data/vim/patches/8.1.0120 b/data/vim/patches/8.1.0120 new file mode 100644 index 000000000..d16fae336 --- /dev/null +++ b/data/vim/patches/8.1.0120 @@ -0,0 +1,217 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0120 +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.0120 +Problem: Buffer 'modified' set even when :sort has no changes. +Solution: Only set 'modified' when lines are moved. (Jason Franklin) +Files: src/ex_cmds.c, src/testdir/test_sort.vim + + +*** ../vim-8.1.0119/src/ex_cmds.c 2018-06-24 23:53:25.149526513 +0200 +--- src/ex_cmds.c 2018-06-28 11:22:44.383108832 +0200 +*************** +*** 398,403 **** +--- 398,404 ---- + colnr_T end_col; + int sort_what = 0; + int format_found = 0; ++ int change_occurred = FALSE; // Buffer contents changed. + + /* Sorting one line is really quick! */ + if (count <= 1) +*************** +*** 616,627 **** + lnum = eap->line2; + for (i = 0; i < count; ++i) + { +! s = ml_get(nrs[eap->forceit ? count - i - 1 : i].lnum); + if (!unique || i == 0 + || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0) + { +! /* Copy the line into a buffer, it may become invalid in +! * ml_append(). And it's needed for "unique". */ + STRCPY(sortbuf1, s); + if (ml_append(lnum++, sortbuf1, (colnr_T)0, FALSE) == FAIL) + break; +--- 617,635 ---- + lnum = eap->line2; + for (i = 0; i < count; ++i) + { +! linenr_T get_lnum = nrs[eap->forceit ? count - i - 1 : i].lnum; +! +! // If the original line number of the line being placed is not the same +! // as "lnum" (accounting for offset), we know that the buffer changed. +! if (get_lnum + ((linenr_T)count - 1) != lnum) +! change_occurred = TRUE; +! +! s = ml_get(get_lnum); + if (!unique || i == 0 + || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0) + { +! // Copy the line into a buffer, it may become invalid in +! // ml_append(). And it's needed for "unique". + STRCPY(sortbuf1, s); + if (ml_append(lnum++, sortbuf1, (colnr_T)0, FALSE) == FAIL) + break; +*************** +*** 644,650 **** + mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted); + else if (deleted < 0) + mark_adjust(eap->line2, MAXLNUM, -deleted, 0L); +! changed_lines(eap->line1, 0, eap->line2 + 1, -deleted); + + curwin->w_cursor.lnum = eap->line1; + beginline(BL_WHITE | BL_FIX); +--- 652,660 ---- + mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted); + else if (deleted < 0) + mark_adjust(eap->line2, MAXLNUM, -deleted, 0L); +! +! if (change_occurred || deleted != 0) +! changed_lines(eap->line1, 0, eap->line2 + 1, -deleted); + + curwin->w_cursor.lnum = eap->line1; + beginline(BL_WHITE | BL_FIX); +*** ../vim-8.1.0119/src/testdir/test_sort.vim 2017-09-23 18:58:18.000000000 +0200 +--- src/testdir/test_sort.vim 2018-06-28 11:21:15.071564844 +0200 +*************** +*** 1,13 **** +! " Test sort() + +! :func Compare1(a, b) abort + call sort(range(3), 'Compare2') + return a:a - a:b +! :endfunc + +! :func Compare2(a, b) abort + return a:a - a:b +! :endfunc + + func Test_sort_strings() + " numbers compared as strings +--- 1,13 ---- +! " Tests for the "sort()" function and for the ":sort" command. + +! func Compare1(a, b) abort + call sort(range(3), 'Compare2') + return a:a - a:b +! endfunc + +! func Compare2(a, b) abort + return a:a - a:b +! endfunc + + func Test_sort_strings() + " numbers compared as strings +*************** +*** 45,51 **** + call assert_fails('call sort([3.3, 1, "2"], 3)', "E474") + endfunc + +! " Tests for the :sort command + func Test_sort_cmd() + let tests = [ + \ { +--- 45,51 ---- + call assert_fails('call sort([3.3, 1, "2"], 3)', "E474") + endfunc + +! " Tests for the ":sort" command. + func Test_sort_cmd() + let tests = [ + \ { +*************** +*** 1167,1181 **** + \ '1.234', + \ '123.456' + \ ] +! \ } + \ ] + + for t in tests + enew! + call append(0, t.input) + $delete _ +! exe t.cmd + call assert_equal(t.expected, getline(1, '$'), t.name) + endfor + + call assert_fails('sort no', 'E474') +--- 1167,1220 ---- + \ '1.234', + \ '123.456' + \ ] +! \ }, +! \ { +! \ 'name' : 'alphabetical, sorted input', +! \ 'cmd' : 'sort', +! \ 'input' : [ +! \ 'a', +! \ 'b', +! \ 'c', +! \ ], +! \ 'expected' : [ +! \ 'a', +! \ 'b', +! \ 'c', +! \ ] +! \ }, +! \ { +! \ 'name' : 'alphabetical, sorted input, unique at end', +! \ 'cmd' : 'sort u', +! \ 'input' : [ +! \ 'aa', +! \ 'bb', +! \ 'cc', +! \ 'cc', +! \ ], +! \ 'expected' : [ +! \ 'aa', +! \ 'bb', +! \ 'cc', +! \ ] +! \ }, + \ ] + + for t in tests + enew! + call append(0, t.input) + $delete _ +! setlocal nomodified +! execute t.cmd +! + call assert_equal(t.expected, getline(1, '$'), t.name) ++ ++ " Previously, the ":sort" command would set 'modified' even if the buffer ++ " contents did not change. Here, we check that this problem is fixed. ++ if t.input == t.expected ++ call assert_false(&modified, t.name . ': &mod is not correct') ++ else ++ call assert_true(&modified, t.name . ': &mod is not correct') ++ endif + endfor + + call assert_fails('sort no', 'E474') +*** ../vim-8.1.0119/src/version.c 2018-06-27 23:12:30.608811033 +0200 +--- src/version.c 2018-06-28 11:09:56.954947638 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 120, + /**/ + +-- +You cannot have a baby in one month by getting nine women pregnant. + + /// 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 /// diff --git a/data/vim/patches/8.1.0121 b/data/vim/patches/8.1.0121 new file mode 100644 index 000000000..ee442239c --- /dev/null +++ b/data/vim/patches/8.1.0121 @@ -0,0 +1,175 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0121 +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.0121 +Problem: Crash when using ballooneval related to 'vartabstop'. +Solution: Initialize balloonEval->vts to NULL. (Markus Braun) +Files: src/ex_cmds2.c, src/gui_beval.c, src/gui_w32.c, src/gui.c + + +*** ../vim-8.1.0120/src/ex_cmds2.c 2018-05-12 15:36:03.000000000 +0200 +--- src/ex_cmds2.c 2018-06-28 11:54:26.812645846 +0200 +*************** +*** 1419,1425 **** + bevalexpr_due_set = FALSE; + if (balloonEval == NULL) + { +! balloonEval = (BalloonEval *)alloc(sizeof(BalloonEval)); + balloonEvalForTerm = TRUE; + } + if (balloonEval != NULL) +--- 1419,1425 ---- + bevalexpr_due_set = FALSE; + if (balloonEval == NULL) + { +! balloonEval = (BalloonEval *)alloc_clear(sizeof(BalloonEval)); + balloonEvalForTerm = TRUE; + } + if (balloonEval != NULL) +*** ../vim-8.1.0120/src/gui_beval.c 2018-06-23 19:22:45.606486311 +0200 +--- src/gui_beval.c 2018-06-28 11:58:57.003085639 +0200 +*************** +*** 111,138 **** + return NULL; + } + +! beval = (BalloonEval *)alloc(sizeof(BalloonEval)); + if (beval != NULL) + { + #ifdef FEAT_GUI_GTK + beval->target = GTK_WIDGET(target); +- beval->balloonShell = NULL; +- beval->timerID = 0; + #else + beval->target = (Widget)target; +- beval->balloonShell = NULL; +- beval->timerID = (XtIntervalId)NULL; + beval->appContext = XtWidgetToApplicationContext((Widget)target); + #endif + beval->showState = ShS_NEUTRAL; +- beval->x = 0; +- beval->y = 0; + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; +- #ifdef FEAT_VARTABS +- beval->vts = NULL; +- #endif + + /* + * Set up event handler which will keep its eyes on the pointer, +--- 111,129 ---- + return NULL; + } + +! beval = (BalloonEval *)alloc_clear(sizeof(BalloonEval)); + if (beval != NULL) + { + #ifdef FEAT_GUI_GTK + beval->target = GTK_WIDGET(target); + #else + beval->target = (Widget)target; + beval->appContext = XtWidgetToApplicationContext((Widget)target); + #endif + beval->showState = ShS_NEUTRAL; + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; + + /* + * Set up event handler which will keep its eyes on the pointer, +*** ../vim-8.1.0120/src/gui_w32.c 2018-06-23 19:22:45.606486311 +0200 +--- src/gui_w32.c 2018-06-28 11:59:35.478867007 +0200 +*************** +*** 8922,8949 **** + return NULL; + } + +! beval = (BalloonEval *)alloc(sizeof(BalloonEval)); + if (beval != NULL) + { + beval->target = s_textArea; +- beval->balloon = NULL; + + beval->showState = ShS_NEUTRAL; +- beval->x = 0; +- beval->y = 0; + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; +- #ifdef FEAT_VARTABS +- beval->vts = NULL; +- #endif + + InitCommonControls(); + cur_beval = beval; + + if (p_beval) + gui_mch_enable_beval_area(beval); +- + } + return beval; + } +--- 8922,8942 ---- + return NULL; + } + +! beval = (BalloonEval *)alloc_clear(sizeof(BalloonEval)); + if (beval != NULL) + { + beval->target = s_textArea; + + beval->showState = ShS_NEUTRAL; + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; + + InitCommonControls(); + cur_beval = beval; + + if (p_beval) + gui_mch_enable_beval_area(beval); + } + return beval; + } +*** ../vim-8.1.0120/src/gui.c 2018-05-13 17:03:53.000000000 +0200 +--- src/gui.c 2018-06-28 12:01:22.930259972 +0200 +*************** +*** 745,751 **** +--- 745,756 ---- + /* Always create the Balloon Evaluation area, but disable it when + * 'ballooneval' is off. */ + if (balloonEval != NULL) ++ { ++ # ifdef FEAT_VARTABS ++ vim_free(balloonEval->vts); ++ # endif + vim_free(balloonEval); ++ } + balloonEvalForTerm = FALSE; + # ifdef FEAT_GUI_GTK + balloonEval = gui_mch_create_beval_area(gui.drawarea, NULL, +*** ../vim-8.1.0120/src/version.c 2018-06-28 11:28:04.797455530 +0200 +--- src/version.c 2018-06-28 12:02:15.657963770 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 121, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +129. You cancel your newspaper subscription. + + /// 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 /// diff --git a/data/vim/patches/8.1.0122 b/data/vim/patches/8.1.0122 new file mode 100644 index 000000000..62b00d4bc --- /dev/null +++ b/data/vim/patches/8.1.0122 @@ -0,0 +1,49 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0122 +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.0122 +Problem: Translators don't always understand the maintainer message. +Solution: Add a comment that ends up in the generated po file. (Christian + Brabandt, closes #3037) +Files: src/message.c + + +*** ../vim-8.1.0121/src/message.c 2018-06-23 19:22:45.610486284 +0200 +--- src/message.c 2018-06-28 14:52:34.909193468 +0200 +*************** +*** 982,988 **** +--- 982,992 ---- + { + s = mch_getenv((char_u *)"LANG"); + if (s != NULL && *s != NUL) ++ // The next comment is extracted by xgettext and put in po file for ++ // translators to read. + msg_attr((char_u *) ++ // Translator: Please replace the name and email address ++ // with the appropriate text for your translation. + _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"), + HL_ATTR(HLF_T)); + } +*** ../vim-8.1.0121/src/version.c 2018-06-28 12:05:07.089006904 +0200 +--- src/version.c 2018-06-28 14:53:46.820830021 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 122, + /**/ + +-- +In a world without fences, who needs Gates and Windows? + + /// 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 /// diff --git a/data/vim/patches/8.1.0123 b/data/vim/patches/8.1.0123 new file mode 100644 index 000000000..e9494588f --- /dev/null +++ b/data/vim/patches/8.1.0123 @@ -0,0 +1,62 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0123 +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.0123 +Problem: MS-Windows: colors are wrong after setting 'notgc'. +Solution: Only call control_console_color_rgb() for the win32 terminal. + (Nobuhiro Takasaki, closes #3107) +Files: src/option.c + + +*** ../vim-8.1.0122/src/option.c 2018-06-24 23:53:25.153526495 +0200 +--- src/option.c 2018-06-28 15:26:10.110799983 +0200 +*************** +*** 8819,8828 **** + # endif + highlight_gui_started(); + # ifdef FEAT_VTP +- control_console_color_rgb(); + /* reset t_Co */ + if (is_term_win32()) + set_termname(T_NAME); + # endif + } + #endif +--- 8819,8831 ---- + # endif + highlight_gui_started(); + # ifdef FEAT_VTP + /* reset t_Co */ + if (is_term_win32()) ++ { ++ control_console_color_rgb(); + set_termname(T_NAME); ++ init_highlight(TRUE, FALSE); ++ } + # endif + } + #endif +*** ../vim-8.1.0122/src/version.c 2018-06-28 14:54:38.764565527 +0200 +--- src/version.c 2018-06-28 15:29:00.809904697 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 123, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +132. You come back and check this list every half-hour. + + /// 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 /// diff --git a/data/vim/patches/8.1.0124 b/data/vim/patches/8.1.0124 new file mode 100644 index 000000000..48bcf4f6d --- /dev/null +++ b/data/vim/patches/8.1.0124 @@ -0,0 +1,51 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0124 +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.0124 +Problem: has('vcon') returns true even for non-win32 terminal. +Solution: Check the terminal type. (Nobuhiro Takasaki, closes #3106) +Files: src/evalfunc.c + + +*** ../vim-8.1.0123/src/evalfunc.c 2018-06-24 19:01:55.411752372 +0200 +--- src/evalfunc.c 2018-06-28 15:48:43.199224854 +0200 +*************** +*** 6609,6615 **** + #endif + #ifdef FEAT_VTP + else if (STRICMP(name, "vcon") == 0) +! n = has_vtp_working(); + #endif + #ifdef FEAT_NETBEANS_INTG + else if (STRICMP(name, "netbeans_enabled") == 0) +--- 6609,6615 ---- + #endif + #ifdef FEAT_VTP + else if (STRICMP(name, "vcon") == 0) +! n = is_term_win32() && has_vtp_working(); + #endif + #ifdef FEAT_NETBEANS_INTG + else if (STRICMP(name, "netbeans_enabled") == 0) +*** ../vim-8.1.0123/src/version.c 2018-06-28 15:29:48.085656078 +0200 +--- src/version.c 2018-06-28 15:49:29.070921349 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 124, + /**/ + +-- +There are three kinds of persons: Those who can count and those who can't. + + /// 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 /// diff --git a/data/vim/patches/8.1.0125 b/data/vim/patches/8.1.0125 new file mode 100644 index 000000000..697ddffba --- /dev/null +++ b/data/vim/patches/8.1.0125 @@ -0,0 +1,197 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0125 +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.0125 +Problem: Virtual edit replace with multi-byte fails at end of line. (Lukas + Werling) +Solution: use ins_char() to add the character. (Christian Brabandt, + closes #3114) Rename PCHAR() to PBYTE() to avoid mistakes like + this. +Files: src/ops.c, src/testdir/test_virtualedit.vim, src/macros.h + + +*** ../vim-8.1.0124/src/ops.c 2018-06-27 20:49:40.567862384 +0200 +--- src/ops.c 2018-06-28 19:20:39.671555865 +0200 +*************** +*** 2146,2151 **** +--- 2146,2170 ---- + #endif + + #if defined(FEAT_VISUALEXTRA) || defined(PROTO) ++ ++ # ifdef FEAT_MBYTE ++ /* ++ * Replace the character under the cursor with "c". ++ * This takes care of multi-byte characters. ++ */ ++ static void ++ replace_character(int c) ++ { ++ int n = State; ++ ++ State = REPLACE; ++ ins_char(c); ++ State = n; ++ /* Backup to the replaced character. */ ++ dec_cursor(); ++ } ++ ++ # endif + /* + * Replace a whole area with one character. + */ +*************** +*** 2331,2342 **** + * with a multi-byte and the other way around. */ + if (curwin->w_cursor.lnum == oap->end.lnum) + oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n); +! n = State; +! State = REPLACE; +! ins_char(c); +! State = n; +! /* Backup to the replaced character. */ +! dec_cursor(); + } + else + #endif +--- 2350,2356 ---- + * with a multi-byte and the other way around. */ + if (curwin->w_cursor.lnum == oap->end.lnum) + oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n); +! replace_character(c); + } + else + #endif +*************** +*** 2358,2364 **** + getvpos(&oap->end, end_vcol); + } + #endif +! PCHAR(curwin->w_cursor, c); + } + } + #ifdef FEAT_VIRTUALEDIT +--- 2372,2378 ---- + getvpos(&oap->end, end_vcol); + } + #endif +! PBYTE(curwin->w_cursor, c); + } + } + #ifdef FEAT_VIRTUALEDIT +*************** +*** 2377,2385 **** + curwin->w_cursor.col -= (virtcols + 1); + for (; virtcols >= 0; virtcols--) + { +! PCHAR(curwin->w_cursor, c); +! if (inc(&curwin->w_cursor) == -1) +! break; + } + } + #endif +--- 2391,2404 ---- + curwin->w_cursor.col -= (virtcols + 1); + for (; virtcols >= 0; virtcols--) + { +! #ifdef FEAT_MBYTE +! if ((*mb_char2len)(c) > 1) +! replace_character(c); +! else +! #endif +! PBYTE(curwin->w_cursor, c); +! if (inc(&curwin->w_cursor) == -1) +! break; + } + } + #endif +*************** +*** 2619,2625 **** + } + else + #endif +! PCHAR(*pos, nc); + return TRUE; + } + return FALSE; +--- 2638,2644 ---- + } + else + #endif +! PBYTE(*pos, nc); + return TRUE; + } + return FALSE; +*** ../vim-8.1.0124/src/testdir/test_virtualedit.vim 2018-04-25 21:58:46.000000000 +0200 +--- src/testdir/test_virtualedit.vim 2018-06-28 19:12:57.486074037 +0200 +*************** +*** 42,47 **** +--- 42,63 ---- + set virtualedit= + endfunc + ++ func Test_replace_end_of_line() ++ new ++ set virtualedit=all ++ call setline(1, range(20)) ++ exe "normal! gg2jv10lr-" ++ call assert_equal(["1", "-----------", "3"], getline(2,4)) ++ if has('multi_byte') ++ call setline(1, range(20)) ++ exe "normal! gg2jv10lr\<c-k>hh" ++ call assert_equal(["1", "───────────", "3"], getline(2,4)) ++ endif ++ ++ bwipe! ++ set virtualedit= ++ endfunc ++ + func Test_edit_CTRL_G() + new + set virtualedit=insert +*** ../vim-8.1.0124/src/macros.h 2018-04-10 18:37:19.000000000 +0200 +--- src/macros.h 2018-06-28 19:15:50.801135759 +0200 +*************** +*** 14,22 **** + */ + + /* +! * PCHAR(lp, c) - put character 'c' at position 'lp' + */ +! #define PCHAR(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c)) + + /* + * Position comparisons +--- 14,22 ---- + */ + + /* +! * PBYTE(lp, c) - put byte 'c' at position 'lp' + */ +! #define PBYTE(lp, c) (*(ml_get_buf(curbuf, (lp).lnum, TRUE) + (lp).col) = (c)) + + /* + * Position comparisons +*** ../vim-8.1.0124/src/version.c 2018-06-28 15:50:23.178568297 +0200 +--- src/version.c 2018-06-28 19:11:53.922415636 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 125, + /**/ + +-- +The coffee just wasn't strong enough to defend itself -- Tom Waits + + /// 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 /// diff --git a/data/vim/patches/8.1.0126 b/data/vim/patches/8.1.0126 new file mode 100644 index 000000000..a179307be --- /dev/null +++ b/data/vim/patches/8.1.0126 @@ -0,0 +1,213 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0126 +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.0126 +Problem: Various problems with 'vartabstop'. +Solution: Fix memory leak. Fix crash. Add a few more tests. (Christian + Brabandt, closes #3076) +Files: src/ex_cmds.c, src/option.c, src/screen.c, + src/testdir/test_vartabs.vim + + +*** ../vim-8.1.0125/src/ex_cmds.c 2018-06-28 11:28:04.793455550 +0200 +--- src/ex_cmds.c 2018-06-28 20:37:11.354721386 +0200 +*************** +*** 866,872 **** + { + set_string_option_direct((char_u *)"vts", -1, new_ts_str, + OPT_FREE|OPT_LOCAL, 0); +- vim_free(new_ts_str); + curbuf->b_p_vts_array = new_vts_array; + vim_free(old_vts_ary); + } +--- 866,871 ---- +*************** +*** 877,882 **** +--- 876,882 ---- + curbuf->b_p_ts = tabstop_first(new_vts_array); + vim_free(new_vts_array); + } ++ vim_free(new_ts_str); + } + #else + curbuf->b_p_ts = new_ts; +*** ../vim-8.1.0125/src/option.c 2018-06-28 15:29:48.081656098 +0200 +--- src/option.c 2018-06-28 20:40:51.173370370 +0200 +*************** +*** 12870,12876 **** + tabstop_fromto( + colnr_T start_col, + colnr_T end_col, +! int ts, + int *vts, + int *ntabs, + int *nspcs) +--- 12870,12876 ---- + tabstop_fromto( + colnr_T start_col, + colnr_T end_col, +! int ts_arg, + int *vts, + int *ntabs, + int *nspcs) +*************** +*** 12880,12891 **** + int padding = 0; + int tabcount; + int t; + + if (vts == NULL || vts[0] == 0) + { + int tabs = 0; +! int initspc = ts - (start_col % ts); + + if (spaces >= initspc) + { + spaces -= initspc; +--- 12880,12893 ---- + int padding = 0; + int tabcount; + int t; ++ int ts = ts_arg == 0 ? curbuf->b_p_ts : ts_arg; + + if (vts == NULL || vts[0] == 0) + { + int tabs = 0; +! int initspc = 0; + ++ initspc = ts - (start_col % ts); + if (spaces >= initspc) + { + spaces -= initspc; +*** ../vim-8.1.0125/src/screen.c 2018-06-25 21:24:47.284934379 +0200 +--- src/screen.c 2018-06-28 20:38:50.538108113 +0200 +*************** +*** 4753,4765 **** + n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, + NULL) - 1; + if (c == TAB && n_extra + col > wp->w_width) +! #ifdef FEAT_VARTABS + n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts, +! wp->w_buffer->b_p_vts_array) - 1; +! #else + n_extra = (int)wp->w_buffer->b_p_ts + - vcol % (int)wp->w_buffer->b_p_ts - 1; +! #endif + + # ifdef FEAT_MBYTE + c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; +--- 4753,4765 ---- + n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, + NULL) - 1; + if (c == TAB && n_extra + col > wp->w_width) +! # ifdef FEAT_VARTABS + n_extra = tabstop_padding(vcol, wp->w_buffer->b_p_ts, +! wp->w_buffer->b_p_vts_array) - 1; +! # else + n_extra = (int)wp->w_buffer->b_p_ts + - vcol % (int)wp->w_buffer->b_p_ts - 1; +! # endif + + # ifdef FEAT_MBYTE + c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; +*************** +*** 4902,4907 **** +--- 4902,4912 ---- + p_extra_free = p; + for (i = 0; i < tab_len; i++) + { ++ if (*p == NUL) ++ { ++ tab_len = i; ++ break; ++ } + #ifdef FEAT_MBYTE + mb_char2bytes(lcs_tab2, p); + p += mb_char2len(lcs_tab2); +*** ../vim-8.1.0125/src/testdir/test_vartabs.vim 2018-06-25 21:24:47.284934379 +0200 +--- src/testdir/test_vartabs.vim 2018-06-28 20:42:19.772833210 +0200 +*************** +*** 262,282 **** + endfunc + + func! Test_vartabs_linebreak() +! if winwidth(0) < 80 + return + endif + new +! 70vnew + %d +! setl linebreak vartabstop=10,15,20,40 + call setline(1, "\tx\tx\tx\tx") + +! let lines = ScreenLines([1, 2], winwidth(0)) +! let expect = [' x x x ', +! \ ' x '] + call s:compare_lines(expect, lines) + + " cleanup + bw! + bw! + endfunc +--- 262,298 ---- + endfunc + + func! Test_vartabs_linebreak() +! if winwidth(0) < 40 + return + endif + new +! 40vnew + %d +! setl linebreak vartabstop=10,20,30,40 + call setline(1, "\tx\tx\tx\tx") + +! let expect = [' x ', +! \ 'x x ', +! \ 'x '] +! let lines = ScreenLines([1, 3], winwidth(0)) +! call s:compare_lines(expect, lines) +! setl list listchars=tab:>- +! let expect = ['>---------x>------------------ ', +! \ 'x>------------------x>------------------', +! \ 'x '] +! let lines = ScreenLines([1, 3], winwidth(0)) +! call s:compare_lines(expect, lines) +! setl linebreak vartabstop=40 +! let expect = ['>---------------------------------------', +! \ 'x>--------------------------------------', +! \ 'x>--------------------------------------', +! \ 'x>--------------------------------------', +! \ 'x '] +! let lines = ScreenLines([1, 5], winwidth(0)) + call s:compare_lines(expect, lines) + + " cleanup + bw! + bw! ++ set nolist listchars&vim + endfunc +*** ../vim-8.1.0125/src/version.c 2018-06-28 19:26:24.321655175 +0200 +--- src/version.c 2018-06-28 20:36:19.043047749 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 126, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +138. You develop a liking for cold coffee. + + /// 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 /// diff --git a/data/vim/patches/8.1.0127 b/data/vim/patches/8.1.0127 new file mode 100644 index 000000000..48599b5df --- /dev/null +++ b/data/vim/patches/8.1.0127 @@ -0,0 +1,54 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0127 +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.0127 +Problem: Build failure when disabling the session feature. (Pawel Slowik) +Solution: Adjust #ifdef for vim_chdirfile(). +Files: src/misc2.c + + +*** ../vim-8.1.0126/src/misc2.c 2018-04-21 23:24:12.000000000 +0200 +--- src/misc2.c 2018-06-29 20:25:56.182566403 +0200 +*************** +*** 3381,3388 **** + && pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0); + } + +! #if defined(FEAT_SESSION) || defined(MSWIN) || defined(FEAT_GUI_MAC) \ +! || defined(FEAT_GUI_GTK) \ + || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ + || defined(PROTO) + /* +--- 3381,3388 ---- + && pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0); + } + +! #if defined(FEAT_SESSION) || defined(FEAT_AUTOCHDIR) \ +! || defined(MSWIN) || defined(FEAT_GUI_MAC) || defined(FEAT_GUI_GTK) \ + || defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG) \ + || defined(PROTO) + /* +*** ../vim-8.1.0126/src/version.c 2018-06-28 22:22:56.233315600 +0200 +--- src/version.c 2018-06-29 20:28:20.233705119 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 127, + /**/ + +-- +I wish there was a knob on the TV to turn up the intelligence. +There's a knob called "brightness", but it doesn't seem to work. + + /// 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 /// diff --git a/data/vim/patches/8.1.0128 b/data/vim/patches/8.1.0128 new file mode 100644 index 000000000..5b9907bda --- /dev/null +++ b/data/vim/patches/8.1.0128 @@ -0,0 +1,487 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0128 +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.0128 +Problem: Building with MinGW does not work out-of-the-box. +Solution: Add instructions for MSYS2. Set default WINVER. Add batch files + to set $PATH for MSYS2. +Files: src/Make_cyg_ming.mak, src/INSTALLpc.txt, src/msys32.bat, + src/msys64.bat, Filelist + + +*** ../vim-8.1.0127/src/Make_cyg_ming.mak 2018-06-19 18:58:04.006489842 +0200 +--- src/Make_cyg_ming.mak 2018-06-30 15:56:42.425768825 +0200 +*************** +*** 75,83 **** + # Set to yes to enable OLE support. + OLE=no + +! # Set the default $(WINVER) to make it work with WinXP. + ifndef WINVER +! WINVER = 0x0501 + endif + + # Set to yes to enable Cscope support. +--- 75,84 ---- + # Set to yes to enable OLE support. + OLE=no + +! # Set the default $(WINVER). Use 0x0501 to make it work with WinXP. + ifndef WINVER +! # WINVER = 0x0501 +! WINVER = 0x0600 + endif + + # Set to yes to enable Cscope support. +*** ../vim-8.1.0127/src/INSTALLpc.txt 2017-12-14 13:07:27.000000000 +0100 +--- src/INSTALLpc.txt 2018-06-30 16:08:36.949674031 +0200 +*************** +*** 22,44 **** + + Contents: + 1. Microsoft Visual C++ +! 2. Using MinGW +! 3. Cygwin +! 4. Borland +! 5. Cross compiling for Win32 from a Linux machine +! 6. Building with Python support +! 7. Building with Python3 support +! 8. Building with Racket or MzScheme support +! 9. Building with Lua support +! 10. Building with Perl support +! 11. Building with Ruby support +! 12. Building with Tcl support +! 13. Building with Terminal support +! 14. Building with DirectX (DirectWrite) support +! 15. Windows 3.1 +! 16. MS-DOS + +! 17. Installing after building from sources + + + The currently recommended way (that means it has been verified to work) is +--- 22,45 ---- + + Contents: + 1. Microsoft Visual C++ +! 2. Using MSYS2 with MinGW +! 3. Using MinGW +! 4. Cygwin +! 5. Borland +! 6. Cross compiling for Win32 from a Linux machine +! 7. Building with Python support +! 8. Building with Python3 support +! 9. Building with Racket or MzScheme support +! 10. Building with Lua support +! 11. Building with Perl support +! 12. Building with Ruby support +! 13. Building with Tcl support +! 14. Building with Terminal support +! 15. Building with DirectX (DirectWrite) support +! 16. Windows 3.1 +! 17. MS-DOS + +! 18. Installing after building from sources + + + The currently recommended way (that means it has been verified to work) is +*************** +*** 261,268 **** + http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx + + + +! 2. MinGW + ======== + + (written by Ron Aaron: <ronaharon@yahoo.com>) +--- 262,348 ---- + http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx + + ++ 2. MSYS2 with MinGW ++ =================== + +! 2.1. Setup the basic msys2 environment +! +! Go to the official page of MSYS2: https://www.msys2.org +! Download an installer: +! +! * msys2-x86_64-YYYYMMDD.exe for 64-bit Windows +! (Even if you want to build 32-bit Vim) +! * msys2-i686-YYYYMMDD.exe for 32-bit Windows +! +! Execute the installer and follow the instructions to update basic packages. +! At the end keep the checkbox checked to run msys2 now. If needed, you can +! open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS +! +! Execute: +! $ pacman -Syu +! +! And restart MSYS2 window (select "MSYS2 MSYS" icon from the Start Menu). +! Then execute: +! $ pacman -Su +! +! If pacman complains that `catgets` and `libcatgets` conflict with another +! package, select `y` to remove them. +! +! +! 2.2. Install additional packages for building Vim +! +! The following package groups are required for building Vim: +! +! * base-devel +! * mingw-w64-i686-toolchain (for building 32-bit Vim) +! * mingw-w64-x86_64-toolchain (for building 64-bit Vim) +! +! Use the following command to install them: +! +! $ pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain +! +! Or you can use the `pacboy` command to avoid long package names: +! +! $ pacboy -S base-devel: toolchain:m +! +! (See `pacboy help` for the help.) +! +! +! 2.3. Keep the build environment up-to-date +! +! After you have installed the build environment, you may want to keep it +! up-to-date (E.g. always use the latest GCC). +! In that case, you just need to execute the command: +! $ pacman -Syu +! +! +! # Build Vim +! +! Select one of the following icon from the Start Menu: +! +! * MSYS2 MinGW 32-bit (To build 32-bit versions of Vim) +! * MSYS2 MinGW 64-bit (To build 64-bit versions of Vim) +! +! Go to the source directory of Vim, then execute the make command. E.g.: +! +! make -f Make_ming.mak +! make -f Make_ming.mak GUI=no +! make -f Make_ming.mak GUI=no DEBUG=yes +! +! NOTE: you can't execute the vim.exe in the MSYS console, open a normal Windows +! console for that. You need to set $PATH to be able to build there, e.g.: +! +! set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH% +! +! This command is in msys32.bat. Or or the 64 bit compiler use msys64.bat: +! +! set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH% +! +! If you have msys64 in another location you will need to adjust the paths for +! that. +! +! +! 3. MinGW + ======== + + (written by Ron Aaron: <ronaharon@yahoo.com>) +*************** +*** 344,350 **** + You need to uncomment lines in Make_ming.mak to have NLS defined. + + +! 3. Cygwin + ========= + + Use Make_cyg.mak with Cygwin's GCC. See +--- 424,430 ---- + You need to uncomment lines in Make_ming.mak to have NLS defined. + + +! 4. Cygwin + ========= + + Use Make_cyg.mak with Cygwin's GCC. See +*************** +*** 356,369 **** + with the other makefiles). + + +! 4. Borland + =========== + + Use Make_bc5.mak with Borland C++ 5.x. See + http://users.skynet.be/antoine.mechelynck/vim/compile.htm + + +! 5. Cross compiling for Win32 from a Linux machine + ================================================= + + [Update of 1) needs to be verified] +--- 436,449 ---- + with the other makefiles). + + +! 5. Borland + =========== + + Use Make_bc5.mak with Borland C++ 5.x. See + http://users.skynet.be/antoine.mechelynck/vim/compile.htm + + +! 6. Cross compiling for Win32 from a Linux machine + ================================================= + + [Update of 1) needs to be verified] +*************** +*** 383,389 **** + Now you have created the Windows binary from your Linux box! Have fun... + + +! 6. Building with Python support + =============================== + + For building with MSVC 2008 the "Windows Installer" from www.python.org +--- 463,469 ---- + Now you have created the Windows binary from your Linux box! Have fun... + + +! 7. Building with Python support + =============================== + + For building with MSVC 2008 the "Windows Installer" from www.python.org +*************** +*** 435,441 **** + You will end up with a Python-enabled, Win32 version. Enjoy! + + +! 7. Building with Python3 support + ================================ + + For building with MSVC 2008 the "Windows Installer" from www.python.org +--- 515,521 ---- + You will end up with a Python-enabled, Win32 version. Enjoy! + + +! 8. Building with Python3 support + ================================ + + For building with MSVC 2008 the "Windows Installer" from www.python.org +*************** +*** 466,472 **** + (This is for 64-bit builds. For 32-bit builds, replace mingw64 with mingw32.) + + +! 8. Building with Racket or MzScheme support + ======================================== + + 1) Building with Racket support (newest) +--- 546,552 ---- + (This is for 64-bit builds. For 32-bit builds, replace mingw64 with mingw32.) + + +! 9. Building with Racket or MzScheme support + ======================================== + + 1) Building with Racket support (newest) +*************** +*** 556,562 **** + + + +! 9. Building with Lua support + ============================ + + Vim with Lua support can be built with either MSVC or MinGW (or maybe Cygwin). +--- 636,642 ---- + + + +! 10. Building with Lua support + ============================ + + Vim with Lua support can be built with either MSVC or MinGW (or maybe Cygwin). +*************** +*** 611,617 **** + LUA=/cygdrive/c/projects/lua53 DYNAMIC_LUA=yes LUA_VER=53 + + +! 10. Building with Perl support + ============================== + + Vim with Perl support can be built with either MSVC or MinGW (or Cygwin). +--- 691,697 ---- + LUA=/cygdrive/c/projects/lua53 DYNAMIC_LUA=yes LUA_VER=53 + + +! 11. Building with Perl support + ============================== + + Vim with Perl support can be built with either MSVC or MinGW (or Cygwin). +*************** +*** 637,643 **** + PERL=C:/Perl DYNAMIC_PERL=yes PERL_VER=522 + + +! 11. Building with Ruby support + ============================== + + Vim with Ruby support can be built with either MSVC or MinGW (or Cygwin). +--- 717,723 ---- + PERL=C:/Perl DYNAMIC_PERL=yes PERL_VER=522 + + +! 12. Building with Ruby support + ============================== + + Vim with Ruby support can be built with either MSVC or MinGW (or Cygwin). +*************** +*** 745,751 **** + + + +! 12. Building with Tcl support + ============================= + + Vim with Tcl support can be built with either MSVC or MinGW (or Cygwin). +--- 825,831 ---- + + + +! 13. Building with Tcl support + ============================= + + Vim with Tcl support can be built with either MSVC or MinGW (or Cygwin). +*************** +*** 777,783 **** + TCL=C:/Tcl86 DYNAMIC_TCL=yes TCL_VER=86 TCL_VER_LONG=8.6 + + +! 13. Building with Terminal support + ================================== + + Vim with Terminal support can be built with either MSVC, MinGW or Cygwin. +--- 857,863 ---- + TCL=C:/Tcl86 DYNAMIC_TCL=yes TCL_VER=86 TCL_VER_LONG=8.6 + + +! 14. Building with Terminal support + ================================== + + Vim with Terminal support can be built with either MSVC, MinGW or Cygwin. +*************** +*** 793,799 **** + mingw32-make -f Make_ming.mak TERMINAL=yes + + +! 14. Building with DirectX (DirectWrite) support + =============================================== + + Vim with DirectX (DirectWrite) support can be built with either MSVC or MinGW. +--- 873,879 ---- + mingw32-make -f Make_ming.mak TERMINAL=yes + + +! 15. Building with DirectX (DirectWrite) support + =============================================== + + Vim with DirectX (DirectWrite) support can be built with either MSVC or MinGW. +*************** +*** 827,846 **** + mingw32-make -f Make_ming.mak DIRECTX=yes + + +! 15. Windows 3.1x + ================ + + The Windows 3.1x support was removed in patch 7.4.1364. + + +! 16. MS-DOS + ========== + + The MS-DOS support was removed in patch 7.4.1399. Only very old Vim versions + work on MS-DOS because of the limited amount of memory available. + + +! 17. Installing after building from sources + ========================================== + + [provided by Michael Soyka, updated by Ken Takata] +--- 907,926 ---- + mingw32-make -f Make_ming.mak DIRECTX=yes + + +! 16. Windows 3.1x + ================ + + The Windows 3.1x support was removed in patch 7.4.1364. + + +! 17. MS-DOS + ========== + + The MS-DOS support was removed in patch 7.4.1399. Only very old Vim versions + work on MS-DOS because of the limited amount of memory available. + + +! 18. Installing after building from sources + ========================================== + + [provided by Michael Soyka, updated by Ken Takata] +*** ../vim-8.1.0127/src/msys32.bat 2018-06-30 16:24:02.228096012 +0200 +--- src/msys32.bat 2018-06-30 16:23:34.768256429 +0200 +*************** +*** 0 **** +--- 1,6 ---- ++ @echo off ++ rem To be used on MS-Windows for Msys2 with the 32 bit MinGW compiler. ++ rem Adjust the "c:\msys64" part to match your installation. ++ @echo on ++ ++ set PATH=c:\msys64\mingw32\bin;c:\msys64\usr\bin;%PATH% +*** ../vim-8.1.0127/src/msys64.bat 2018-06-30 16:24:02.236095965 +0200 +--- src/msys64.bat 2018-06-30 16:23:33.832261898 +0200 +*************** +*** 0 **** +--- 1,6 ---- ++ @echo off ++ rem To be used on MS-Windows for Msys2 with the 64 bit MinGW compiler. ++ rem Adjust the "c:\msys64" part to match your installation. ++ @echo on ++ ++ set PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;%PATH% +*** ../vim-8.1.0127/Filelist 2018-06-24 15:56:20.602363176 +0200 +--- Filelist 2018-06-30 16:15:24.499158371 +0200 +*************** +*** 412,417 **** +--- 412,419 ---- + src/msvc2008.bat \ + src/msvc2010.bat \ + src/msvc2015.bat \ ++ src/msys32.bat \ ++ src/msys64.bat \ + src/dimm.idl \ + src/dlldata.c \ + src/dosinst.c \ +*** ../vim-8.1.0127/src/version.c 2018-06-29 20:28:27.505661796 +0200 +--- src/version.c 2018-06-30 16:24:09.380054257 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 128, + /**/ + +-- +Fingers not found - Pound head on keyboard to continue. + + /// 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 /// diff --git a/data/vim/patches/8.1.0129 b/data/vim/patches/8.1.0129 new file mode 100644 index 000000000..8d9c59f1c --- /dev/null +++ b/data/vim/patches/8.1.0129 @@ -0,0 +1,50 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0129 +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.0129 +Problem: Still some xterm-like terminals get a stray "p" on startup. +Solution: Consider all terminals that reply with a version smaller than 95 + as not an xterm. (James McCoy) +Files: src/term.c + + +*** ../vim-8.1.0128/src/term.c 2018-05-23 20:30:52.738566360 +0200 +--- src/term.c 2018-06-30 17:02:55.602235946 +0200 +*************** +*** 4690,4695 **** +--- 4690,4700 ---- + && STRNCMP(tp + extra - 2, "0;115;0c", 8) == 0) + is_not_xterm = TRUE; + ++ // Xterm first responded to this request at patch level ++ // 95, so assume anything below 95 is not xterm. ++ if (version < 95) ++ is_not_xterm = TRUE; ++ + /* Only request the cursor style if t_SH and t_RS are + * set. Only supported properly by xterm since version + * 279 (otherwise it returns 0x18). +*** ../vim-8.1.0128/src/version.c 2018-06-30 17:09:12.656017847 +0200 +--- src/version.c 2018-06-30 17:04:03.133837926 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 129, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +147. You finally give up smoking...because it made the monitor dirty. + + /// 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 /// diff --git a/data/vim/patches/8.1.0130 b/data/vim/patches/8.1.0130 new file mode 100644 index 000000000..ba2232eed --- /dev/null +++ b/data/vim/patches/8.1.0130 @@ -0,0 +1,169 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0130 +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.0130 +Problem: ":profdel func" does not work if func was called already. + (Dominique Pelle) +Solution: Reset uf_profiling and add a flag to indicate initialization was + done. +Files: src/structs.h, src/userfunc.c + + +*** ../vim-8.1.0129/src/structs.h 2018-06-23 19:22:45.614486258 +0200 +--- src/structs.h 2018-06-30 18:12:48.678664711 +0200 +*************** +*** 1345,1350 **** +--- 1345,1351 ---- + garray_T uf_lines; /* function lines */ + #ifdef FEAT_PROFILE + int uf_profiling; /* TRUE when func is being profiled */ ++ int uf_prof_initialized; + /* profiling the function as a whole */ + int uf_tm_count; /* nr of calls */ + proftime_T uf_tm_total; /* time spent in function + children */ +*** ../vim-8.1.0129/src/userfunc.c 2018-05-22 18:31:30.001365739 +0200 +--- src/userfunc.c 2018-06-30 18:20:15.704075693 +0200 +*************** +*** 293,302 **** + fp->uf_scoped = NULL; + + #ifdef FEAT_PROFILE +- fp->uf_tml_count = NULL; +- fp->uf_tml_total = NULL; +- fp->uf_tml_self = NULL; +- fp->uf_profiling = FALSE; + if (prof_def_func()) + func_do_profile(fp); + #endif +--- 293,298 ---- +*************** +*** 706,711 **** +--- 702,708 ---- + #ifdef FEAT_PROFILE + proftime_T wait_start; + proftime_T call_start; ++ int started_profiling = FALSE; + #endif + + /* If depth of calling is getting too high, don't execute the function */ +*************** +*** 921,927 **** +--- 918,927 ---- + if (do_profiling == PROF_YES) + { + if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL)) ++ { ++ started_profiling = TRUE; + func_do_profile(fp); ++ } + if (fp->uf_profiling + || (fc->caller != NULL && fc->caller->func->uf_profiling)) + { +*************** +*** 965,970 **** +--- 965,973 ---- + profile_add(&fc->caller->func->uf_tm_children, &call_start); + profile_add(&fc->caller->func->uf_tml_children, &call_start); + } ++ if (started_profiling) ++ // make a ":profdel func" stop profiling the function ++ fp->uf_profiling = FALSE; + } + #endif + +*************** +*** 2522,2544 **** + { + int len = fp->uf_lines.ga_len; + +! if (len == 0) +! len = 1; /* avoid getting error for allocating zero bytes */ +! fp->uf_tm_count = 0; +! profile_zero(&fp->uf_tm_self); +! profile_zero(&fp->uf_tm_total); +! if (fp->uf_tml_count == NULL) +! fp->uf_tml_count = (int *)alloc_clear((unsigned) (sizeof(int) * len)); +! if (fp->uf_tml_total == NULL) +! fp->uf_tml_total = (proftime_T *)alloc_clear((unsigned) +! (sizeof(proftime_T) * len)); +! if (fp->uf_tml_self == NULL) +! fp->uf_tml_self = (proftime_T *)alloc_clear((unsigned) +! (sizeof(proftime_T) * len)); +! fp->uf_tml_idx = -1; +! if (fp->uf_tml_count == NULL || fp->uf_tml_total == NULL +! || fp->uf_tml_self == NULL) +! return; /* out of memory */ + + fp->uf_profiling = TRUE; + } +--- 2525,2552 ---- + { + int len = fp->uf_lines.ga_len; + +! if (!fp->uf_prof_initialized) +! { +! if (len == 0) +! len = 1; /* avoid getting error for allocating zero bytes */ +! fp->uf_tm_count = 0; +! profile_zero(&fp->uf_tm_self); +! profile_zero(&fp->uf_tm_total); +! if (fp->uf_tml_count == NULL) +! fp->uf_tml_count = (int *)alloc_clear( +! (unsigned)(sizeof(int) * len)); +! if (fp->uf_tml_total == NULL) +! fp->uf_tml_total = (proftime_T *)alloc_clear( +! (unsigned)(sizeof(proftime_T) * len)); +! if (fp->uf_tml_self == NULL) +! fp->uf_tml_self = (proftime_T *)alloc_clear( +! (unsigned)(sizeof(proftime_T) * len)); +! fp->uf_tml_idx = -1; +! if (fp->uf_tml_count == NULL || fp->uf_tml_total == NULL +! || fp->uf_tml_self == NULL) +! return; /* out of memory */ +! fp->uf_prof_initialized = TRUE; +! } + + fp->uf_profiling = TRUE; + } +*************** +*** 2568,2574 **** + { + --todo; + fp = HI2UF(hi); +! if (fp->uf_profiling) + { + if (sorttab != NULL) + sorttab[st_len++] = fp; +--- 2576,2582 ---- + { + --todo; + fp = HI2UF(hi); +! if (fp->uf_prof_initialized) + { + if (sorttab != NULL) + sorttab[st_len++] = fp; +*** ../vim-8.1.0129/src/version.c 2018-06-30 17:09:23.039956879 +0200 +--- src/version.c 2018-06-30 18:12:14.990860555 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 130, + /**/ + + +-- +hundred-and-one symptoms of being an internet addict: +149. You find your computer sexier than your girlfriend + + /// 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 /// diff --git a/data/vim/patches/8.1.0131 b/data/vim/patches/8.1.0131 new file mode 100644 index 000000000..c0c0e2335 --- /dev/null +++ b/data/vim/patches/8.1.0131 @@ -0,0 +1,196 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0131 +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.0131 +Problem: :profdel is not tested. +Solution: Add a test. (Dominique Pelle, closes #3123) +Files: src/testdir/test_profile.vim + + +*** ../vim-8.1.0130/src/testdir/test_profile.vim 2017-12-05 16:42:08.000000000 +0100 +--- src/testdir/test_profile.vim 2018-06-30 21:16:50.974593817 +0200 +*************** +*** 5,10 **** +--- 5,12 ---- + + func Test_profile_func() + let lines = [ ++ \ 'profile start Xprofile_func.log', ++ \ 'profile func Foo*"', + \ "func! Foo1()", + \ "endfunc", + \ "func! Foo2()", +*************** +*** 33,41 **** + + call writefile(lines, 'Xprofile_func.vim') + call system(v:progpath +! \ . ' -es -u NONE -U NONE -i NONE --noplugin' +! \ . ' -c "profile start Xprofile_func.log"' +! \ . ' -c "profile func Foo*"' + \ . ' -c "so Xprofile_func.vim"' + \ . ' -c "qall!"') + call assert_equal(0, v:shell_error) +--- 35,41 ---- + + call writefile(lines, 'Xprofile_func.vim') + call system(v:progpath +! \ . ' -es --clean' + \ . ' -c "so Xprofile_func.vim"' + \ . ' -c "qall!"') + call assert_equal(0, v:shell_error) +*************** +*** 97,103 **** + + call writefile(lines, 'Xprofile_file.vim') + call system(v:progpath +! \ . ' -es -u NONE -U NONE -i NONE --noplugin' + \ . ' -c "profile start Xprofile_file.log"' + \ . ' -c "profile file Xprofile_file.vim"' + \ . ' -c "so Xprofile_file.vim"' +--- 97,103 ---- + + call writefile(lines, 'Xprofile_file.vim') + call system(v:progpath +! \ . ' -es --clean' + \ . ' -c "profile start Xprofile_file.log"' + \ . ' -c "profile file Xprofile_file.vim"' + \ . ' -c "so Xprofile_file.vim"' +*************** +*** 152,168 **** + let lines = readfile('Xprofile_file.log') + call assert_equal(11, len(lines)) + +! call assert_match('^SCRIPT .*Xprofile_file.vim$', lines[0]) +! call assert_equal('Sourced 1 time', lines[1]) +! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2]) +! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3]) +! call assert_equal('', lines[4]) +! call assert_equal('count total (s) self (s)', lines[5]) +! call assert_match(' 1 0.\d\+ echo "hello', lines[6]) +! call assert_equal(' \ world"', lines[7]) +! call assert_match(' 1 0.\d\+ echo "foo ', lines[8]) +! call assert_equal(' \bar"', lines[9]) +! call assert_equal('', lines[10]) + + call delete('Xprofile_file.vim') + call delete('Xprofile_file.log') +--- 152,168 ---- + let lines = readfile('Xprofile_file.log') + call assert_equal(11, len(lines)) + +! call assert_match('^SCRIPT .*Xprofile_file.vim$', lines[0]) +! call assert_equal('Sourced 1 time', lines[1]) +! call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2]) +! call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3]) +! call assert_equal('', lines[4]) +! call assert_equal('count total (s) self (s)', lines[5]) +! call assert_match(' 1 0.\d\+ echo "hello', lines[6]) +! call assert_equal(' \ world"', lines[7]) +! call assert_match(' 1 0.\d\+ echo "foo ', lines[8]) +! call assert_equal(' \bar"', lines[9]) +! call assert_equal('', lines[10]) + + call delete('Xprofile_file.vim') + call delete('Xprofile_file.log') +*************** +*** 221,224 **** +--- 221,294 ---- + + call delete('Xprofile_file.vim') + call delete('Xprofile_file.log') ++ endfunc ++ ++ func Test_profdel_func() ++ let lines = [ ++ \ 'profile start Xprofile_file.log', ++ \ 'func! Foo1()', ++ \ 'endfunc', ++ \ 'func! Foo2()', ++ \ 'endfunc', ++ \ 'func! Foo3()', ++ \ 'endfunc', ++ \ '', ++ \ 'profile func Foo1', ++ \ 'profile func Foo2', ++ \ 'call Foo1()', ++ \ 'call Foo2()', ++ \ '', ++ \ 'profile func Foo3', ++ \ 'profdel func Foo2', ++ \ 'profdel func Foo3', ++ \ 'call Foo1()', ++ \ 'call Foo2()', ++ \ 'call Foo3()' ] ++ call writefile(lines, 'Xprofile_file.vim') ++ call system(v:progpath . ' -es --clean -c "so Xprofile_file.vim" -c q') ++ call assert_equal(0, v:shell_error) ++ ++ let lines = readfile('Xprofile_file.log') ++ call assert_equal(24, len(lines)) ++ ++ " Check that: ++ " - Foo1() is called twice (profdel not invoked) ++ " - Foo2() is called once (profdel invoked after it was called) ++ " - Foo3() is not called (profdel invoked before it was called) ++ call assert_equal('FUNCTION Foo1()', lines[0]) ++ call assert_equal('Called 2 times', lines[1]) ++ call assert_equal('FUNCTION Foo2()', lines[7]) ++ call assert_equal('Called 1 time', lines[8]) ++ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[14]) ++ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[19]) ++ ++ call delete('Xprofile_file.vim') ++ call delete('Xprofile_file.log') ++ endfunc ++ ++ func Test_profdel_star() ++ " Foo() is invoked once before and once after 'profdel *'. ++ " So profiling should report it only once. ++ let lines = [ ++ \ 'profile start Xprofile_file.log', ++ \ 'func! Foo()', ++ \ 'endfunc', ++ \ 'profile func Foo', ++ \ 'call Foo()', ++ \ 'profdel *', ++ \ 'call Foo()' ] ++ call writefile(lines, 'Xprofile_file.vim') ++ call system(v:progpath . ' -es --clean -c "so Xprofile_file.vim" -c q') ++ call assert_equal(0, v:shell_error) ++ ++ let lines = readfile('Xprofile_file.log') ++ call assert_equal(15, len(lines)) ++ ++ call assert_equal('FUNCTION Foo()', lines[0]) ++ call assert_equal('Called 1 time', lines[1]) ++ call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[7]) ++ call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[11]) ++ ++ call delete('Xprofile_file.vim') ++ call delete('Xprofile_file.log') + endfunc +*** ../vim-8.1.0130/src/version.c 2018-06-30 18:27:59.901025116 +0200 +--- src/version.c 2018-06-30 21:16:22.754692467 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 131, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +154. You fondle your mouse. + + /// 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 /// diff --git a/data/vim/patches/8.1.0132 b/data/vim/patches/8.1.0132 new file mode 100644 index 000000000..2271859db --- /dev/null +++ b/data/vim/patches/8.1.0132 @@ -0,0 +1,737 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0132 +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.0132 +Problem: Lua tests are old style. +Solution: Convert to new style tests. Improve coverage. (Dominique Pelle, + closes #3091) +Files: src/Makefile, src/testdir/Make_all.mak, + src/testdir/Make_amiga.mak, src/testdir/Make_vms.mms, + src/testdir/test85.in, src/testdir/test_lua.vim + + +*** ../vim-8.1.0131/src/Makefile 2018-06-23 19:22:45.618486231 +0200 +--- src/Makefile 2018-06-30 21:22:17.965276852 +0200 +*************** +*** 2119,2125 **** + test52 test59 \ + test64 test69 \ + test70 test72 \ +! test85 test86 test87 test88 \ + test94 test95 test99 test108: + cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) + +--- 2119,2125 ---- + test52 test59 \ + test64 test69 \ + test70 test72 \ +! test86 test87 test88 \ + test94 test95 test99 test108: + cd testdir; rm -f $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) + +*** ../vim-8.1.0131/src/testdir/Make_all.mak 2018-06-23 19:22:45.614486258 +0200 +--- src/testdir/Make_all.mak 2018-06-30 21:20:58.605620983 +0200 +*************** +*** 36,42 **** + SCRIPTS_MORE1 = \ + test11.out \ + test52.out \ +- test85.out \ + test86.out \ + test87.out + +--- 36,41 ---- +*** ../vim-8.1.0131/src/testdir/Make_amiga.mak 2017-11-02 20:58:54.000000000 +0100 +--- src/testdir/Make_amiga.mak 2018-06-30 21:20:58.605620983 +0200 +*************** +*** 14,20 **** + # test10 'errorformat' is different + # test11 "cat" doesn't work properly + # test52 only for Win32 +- # test85 no Lua interface + # test86, 87 no Python interface + + SCRIPTS = $(SCRIPTS_ALL) $(SCRIPTS_MORE4) +--- 14,19 ---- +*** ../vim-8.1.0131/src/testdir/Make_vms.mms 2018-01-31 19:23:08.000000000 +0100 +--- src/testdir/Make_vms.mms 2018-06-30 21:20:58.605620983 +0200 +*************** +*** 93,99 **** + # + # test72: bug - Vim hangs at :rename (while rename works well otherwise) + # test78: bug - Vim dies at :recover Xtest +- # test85: no Lua interface + # test89: bug - findfile() does not work on VMS (just in the current directory) + # test102: Just ODS-5 supports space and special chars in the filename. + # On ODS-2 tests fail. +--- 93,98 ---- +*************** +*** 119,127 **** + SCRIPT_MZSCH = test70.out + .ENDIF + +! .IFDEF HAVE_ODS5 +! SCRIPT_ODS5 = test102.out +! .ENDIF + + .IFDEF HAVE_GZIP + SCRIPT_GZIP = test11.out +--- 118,126 ---- + SCRIPT_MZSCH = test70.out + .ENDIF + +! .IFDEF HAVE_ODS5 +! SCRIPT_ODS5 = test102.out +! .ENDIF + + .IFDEF HAVE_GZIP + SCRIPT_GZIP = test11.out +*************** +*** 131,140 **** + SCRIPT_GDIFF = test47.out + .ENDIF + +- .IFDEF HAVE_LUA +- SCRIPT_LUA = test85.out +- .ENDIF +- + .IFDEF HAVE_PYTHON + SCRIPT_PYTHON = test86.out test87.out + .ENDIF +--- 130,135 ---- +*** ../vim-8.1.0131/src/testdir/test85.in 2017-03-08 22:48:59.000000000 +0100 +--- src/testdir/test85.in 1970-01-01 01:00:00.000000000 +0100 +*************** +*** 1,86 **** +- Test for Lua interface and luaeval() function +- +- STARTTEST +- :so small.vim +- :set belloff=all +- :so lua.vim +- :set nocompatible viminfo+=nviminfo +- :lua l = vim.list():add"item0":add"dictionary with list OK":add"item2" +- :lua h = vim.dict(); h.list = l +- :call garbagecollect() +- /^1 +- :" change buffer contents +- :lua curbuf = vim.buffer() +- :lua curline = vim.eval"line('.')" +- :lua curbuf[curline] = "1 changed line 1" +- :" scalar test +- :let tmp_string = luaeval('"string"') +- :let tmp_1000 = luaeval('1000') +- :if printf("%s%.0f", tmp_string, tmp_1000) == "string1000" +- :let scalar_res = "OK" +- :else +- :let scalar_res = "FAILED" +- :endif +- :call append(search("^1"), "scalar test " . scalar_res) +- :" dictionary containing a list +- :let tmp = luaeval("h").list[1] +- :/^2/put =tmp +- :" circular list (at the same time test lists containing lists) +- :lua l[2] = l +- :let l2 = luaeval("h").list +- :if l2[2] == l2 +- :let res = "OK" +- :else +- :let res = "FAILED" +- :endif +- :call setline(search("^3"), "circular test " . res) +- +- :let l = [] +- :lua l = vim.eval("l") +- :lua l:add(123) +- :lua l:add("abc") +- :lua l:add(vim.eval("[1, 2, 3]")) +- :lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}")) +- :lua l:insert(123) +- :lua l:insert("abc") +- :lua l:insert(vim.eval("[1, 2, 3]")) +- :lua l:insert(vim.eval("{'a':1, 'b':2, 'c':3}")) +- :lua l[0] = l[0] +- :lua l[1] = l[1] +- :lua l[2] = l[2] +- :lua l[3] = l[3] +- :lua l[0] = 123 +- :lua l[1] = "abc" +- :lua l[2] = vim.eval("[1, 2, 3]") +- :lua l[3] = vim.eval("{'a':1, 'b':2, 'c':3}") +- :lua l[3] = nil +- :lua l[2] = nil +- :lua l[1] = nil +- :lua l[0] = nil +- :lua l = nil +- :$put =string(l) +- +- :let d = {} +- :lua d = vim.eval("d") +- :lua d[0] = 123 +- :lua d[1] = "abc" +- :lua d[2] = vim.eval("[1, 2, 3]") +- :lua d[3] = vim.eval("{'a':1, 'b':2, 'c':3}") +- :lua d[4] = d[0] +- :lua d[5] = d[1] +- :lua d[6] = d[2] +- :lua d[7] = d[3] +- :lua d[3] = nil +- :lua d[2] = nil +- :lua d[1] = nil +- :lua d[0] = nil +- :lua d = nil +- :$put =string(d) +- +- :?^1?,$w! test.out +- :qa! +- ENDTEST +- +- 1 line 1 +- 2 line 2 +- 3 line 3 +--- 0 ---- +*** ../vim-8.1.0131/src/testdir/test_lua.vim 2017-01-29 22:39:50.000000000 +0100 +--- src/testdir/test_lua.vim 2018-06-30 21:20:58.609620966 +0200 +*************** +*** 1,22 **** + " Tests for Lua. +- " TODO: move tests from test85.in here. + + if !has('lua') + finish + endif + +! func Test_luado() +! new +! call setline(1, ['one', 'two', 'three']) +! luado vim.command("%d_") +! bwipe! +! +! " Check switching to another buffer does not trigger ml_get error. + new + let wincount = winnr('$') + call setline(1, ['one', 'two', 'three']) + luado vim.command("new") + call assert_equal(wincount + 1, winnr('$')) + bwipe! + bwipe! + endfunc +--- 1,494 ---- + " Tests for Lua. + + if !has('lua') + finish + endif + +! " Check that switching to another buffer does not trigger ml_get error. +! func Test_command_new_no_ml_get_error() + new + let wincount = winnr('$') + call setline(1, ['one', 'two', 'three']) + luado vim.command("new") + call assert_equal(wincount + 1, winnr('$')) ++ %bwipe! ++ endfunc ++ ++ " Test vim.command() ++ func Test_command() ++ new ++ call setline(1, ['one', 'two', 'three']) ++ luado vim.command("1,2d_") ++ call assert_equal(['three'], getline(1, '$')) ++ bwipe! ++ endfunc ++ ++ " Test vim.eval() ++ func Test_eval() ++ " lua.eval with a number ++ lua v = vim.eval('123') ++ call assert_equal('number', luaeval('vim.type(v)')) ++ call assert_equal(123.0, luaeval('v')) ++ ++ " lua.eval with a string ++ lua v = vim.eval('"abc"') ++ call assert_equal('string', luaeval('vim.type(v)')) ++ call assert_equal('abc', luaeval('v')) ++ ++ " lua.eval with a list ++ lua v = vim.eval("['a']") ++ call assert_equal('list', luaeval('vim.type(v)')) ++ call assert_equal(['a'], luaeval('v')) ++ ++ " lua.eval with a dict ++ lua v = vim.eval("{'a':'b'}") ++ call assert_equal('dict', luaeval('vim.type(v)')) ++ call assert_equal({'a':'b'}, luaeval('v')) ++ ++ call assert_fails('lua v = vim.eval(nil)', ++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got nil)") ++ call assert_fails('lua v = vim.eval(true)', ++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got boolean)") ++ call assert_fails('lua v = vim.eval({})', ++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got table)") ++ call assert_fails('lua v = vim.eval(print)', ++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got function)") ++ call assert_fails('lua v = vim.eval(vim.buffer())', ++ \ "[string \"vim chunk\"]:1: bad argument #1 to 'eval' (string expected, got userdata)") ++ ++ lua v = nil ++ endfunc ++ ++ " Test vim.window() ++ func Test_window() ++ e Xfoo2 ++ new Xfoo1 ++ ++ " Window 1 (top window) contains Xfoo1 ++ " Window 2 (bottom window) contains Xfoo2 ++ call assert_equal('Xfoo1', luaeval('vim.window(1):buffer().name')) ++ call assert_equal('Xfoo2', luaeval('vim.window(2):buffer().name')) ++ ++ " Window 3 does not exist so vim.window(3) should return nil ++ call assert_equal('nil', luaeval('tostring(vim.window(3))')) ++ ++ %bwipe! ++ endfunc ++ ++ " Test vim.window().height ++ func Test_window_height() ++ new ++ lua vim.window().height = 2 ++ call assert_equal(2, winheight(0)) ++ lua vim.window().height = vim.window().height + 1 ++ call assert_equal(3, winheight(0)) ++ bwipe! ++ endfunc ++ ++ " Test vim.window().width ++ func Test_window_width() ++ vert new ++ lua vim.window().width = 2 ++ call assert_equal(2, winwidth(0)) ++ lua vim.window().width = vim.window().width + 1 ++ call assert_equal(3, winwidth(0)) ++ bwipe! ++ endfunc ++ ++ " Test vim.window().line and vim.window.col ++ func Test_window_line_col() ++ new ++ call setline(1, ['line1', 'line2', 'line3']) ++ lua vim.window().line = 2 ++ lua vim.window().col = 4 ++ call assert_equal([0, 2, 4, 0], getpos('.')) ++ lua vim.window().line = vim.window().line + 1 ++ lua vim.window().col = vim.window().col - 1 ++ call assert_equal([0, 3, 3, 0], getpos('.')) ++ ++ call assert_fails('lua vim.window().line = 10', ++ \ '[string "vim chunk"]:1: line out of range') ++ bwipe! ++ endfunc ++ ++ " Test setting the current window ++ func Test_window_set_current() ++ new Xfoo1 ++ lua w1 = vim.window() ++ new Xfoo2 ++ lua w2 = vim.window() ++ ++ call assert_equal('Xfoo2', bufname('%')) ++ lua w1() ++ call assert_equal('Xfoo1', bufname('%')) ++ lua w2() ++ call assert_equal('Xfoo2', bufname('%')) ++ ++ lua w1, w2 = nil, nil ++ %bwipe! ++ endfunc ++ ++ " Test vim.window().buffer ++ func Test_window_buffer() ++ new Xfoo1 ++ lua w1 = vim.window() ++ lua b1 = w1.buffer() ++ new Xfoo2 ++ lua w2 = vim.window() ++ lua b2 = w2.buffer() ++ ++ lua b1() ++ call assert_equal('Xfoo1', bufname('%')) ++ lua b2() ++ call assert_equal('Xfoo2', bufname('%')) ++ ++ lua b1, b2 = nil, nil ++ %bwipe! ++ endfunc ++ ++ " Test vim.window():previous() and vim.window():next() ++ func Test_window_next_previous() ++ new Xfoo1 ++ new Xfoo2 ++ new Xfoo3 ++ wincmd j ++ ++ call assert_equal('Xfoo2', luaeval('vim.window().buffer().name')) ++ call assert_equal('Xfoo1', luaeval('vim.window():next():buffer().name')) ++ call assert_equal('Xfoo3', luaeval('vim.window():previous():buffer().name')) ++ ++ %bwipe! ++ endfunc ++ ++ " Test vim.window():isvalid() ++ func Test_window_isvalid() ++ new Xfoo ++ lua w = vim.window() ++ call assert_true(luaeval('w:isvalid()')) ++ ++ " FIXME: how to test the case when isvalid() returns v:false? ++ " isvalid() gives errors when the window is deleted. Is it a bug? ++ ++ lua w = nil ++ bwipe! ++ endfunc ++ ++ " Test vim.buffer() with and without argument ++ func Test_buffer() ++ new Xfoo1 ++ let bn1 = bufnr('%') ++ new Xfoo2 ++ let bn2 = bufnr('%') ++ ++ " Test vim.buffer() without argument. ++ call assert_equal('Xfoo2', luaeval("vim.buffer().name")) ++ ++ " Test vim.buffer() with string argument. ++ call assert_equal('Xfoo1', luaeval("vim.buffer('Xfoo1').name")) ++ call assert_equal('Xfoo2', luaeval("vim.buffer('Xfoo2').name")) ++ ++ " Test vim.buffer() with integer argument. ++ call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name")) ++ call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name")) ++ ++ lua bn1, bn2 = nil, nil ++ %bwipe! ++ endfunc ++ ++ " Test vim.buffer().name and vim.buffer().fname ++ func Test_buffer_name() ++ new ++ " FIXME: for an unnamed buffer, I would expect ++ " vim.buffer().name to give an empty string, but ++ " it returns 0. Is it a bug? ++ " so this assert_equal is commented out. ++ " call assert_equal('', luaeval('vim.buffer().name')) ++ bwipe! ++ ++ new Xfoo ++ call assert_equal('Xfoo', luaeval('vim.buffer().name')) ++ call assert_equal(expand('%:p'), luaeval('vim.buffer().fname')) ++ bwipe! ++ endfunc ++ ++ " Test vim.buffer().number ++ func Test_buffer_number() ++ " All numbers in Lua are floating points number (no integers). ++ call assert_equal(bufnr('%'), float2nr(luaeval('vim.buffer().number'))) ++ endfunc ++ ++ " Test inserting lines in buffer. ++ func Test_buffer_insert() ++ new ++ lua vim.buffer()[1] = '3' ++ lua vim.buffer():insert('1', 0) ++ lua vim.buffer():insert('2', 1) ++ lua vim.buffer():insert('4', 10) ++ ++ call assert_equal(['1', '2', '3', '4'], getline(1, '$')) ++ bwipe! ++ endfunc ++ ++ " Test deleting line in buffer ++ func Test_buffer_delete() ++ new ++ call setline(1, ['1', '2', '3']) ++ lua vim.buffer()[2] = nil ++ call assert_equal(['1', '3'], getline(1, '$')) ++ ++ call assert_fails('lua vim.buffer()[3] = nil', ++ \ '[string "vim chunk"]:1: invalid line number') ++ bwipe! ++ endfunc ++ ++ " Test #vim.buffer() i.e. number of lines in buffer ++ func Test_buffer_number_lines() ++ new ++ call setline(1, ['a', 'b', 'c']) ++ call assert_equal(3.0, luaeval('#vim.buffer()')) ++ bwipe! ++ endfunc ++ ++ " Test vim.buffer():next() and vim.buffer():previous() ++ " Note that these functions get the next or previous buffers ++ " but do not switch buffer. ++ func Test_buffer_next_previous() ++ new Xfoo1 ++ new Xfoo2 ++ new Xfoo3 ++ b Xfoo2 ++ ++ lua bn = vim.buffer():next() ++ lua bp = vim.buffer():previous() ++ ++ call assert_equal('Xfoo2', luaeval('vim.buffer().name')) ++ call assert_equal('Xfoo1', luaeval('bp.name')) ++ call assert_equal('Xfoo3', luaeval('bn.name')) ++ ++ call assert_equal('Xfoo2', bufname('%')) ++ ++ lua bn() ++ call assert_equal('Xfoo3', luaeval('vim.buffer().name')) ++ call assert_equal('Xfoo3', bufname('%')) ++ ++ lua bp() ++ call assert_equal('Xfoo1', luaeval('vim.buffer().name')) ++ call assert_equal('Xfoo1', bufname('%')) ++ ++ lua bn, bp = nil, nil ++ %bwipe! ++ endfunc ++ ++ " Test vim.buffer():isvalid() ++ func Test_buffer_isvalid() ++ new Xfoo ++ lua b = vim.buffer() ++ call assert_true(luaeval('b:isvalid()')) ++ ++ " FIXME: how to test the case when isvalid() returns v:false? ++ " isvalid() gives errors when the buffer is wiped. Is it a bug? ++ ++ lua b = nil + bwipe! ++ endfunc ++ ++ func Test_list() ++ call assert_equal([], luaeval('vim.list()')) ++ ++ " Same example as in :help lua-vim. ++ " FIXME: test is disabled because it does not work. ++ " See https://github.com/vim/vim/issues/3086 ++ " lua t = {math.pi, false, say = 'hi'} ++ " call assert_equal([3.141593, 0], luaeval('vim.list(t)')) ++ ++ let l = [] ++ lua l = vim.eval('l') ++ lua l:add(123) ++ lua l:add('abc') ++ lua l:add(true) ++ lua l:add(false) ++ lua l:add(vim.eval("[1, 2, 3]")) ++ lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}")) ++ call assert_equal([123.0, 'abc', v:true, v:false, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l) ++ call assert_equal(6.0, luaeval('#l')) ++ call assert_match('^list: 0x\x\+$', luaeval('tostring(l)')) ++ ++ lua l[0] = 124 ++ lua l[4] = nil ++ lua l:insert('first') ++ lua l:insert('xx', 3) ++ call assert_equal(['first', 124.0, 'abc', 'xx', v:true, v:false, {'a': 1, 'b': 2, 'c': 3}], l) ++ ++ lua l = nil ++ endfunc ++ ++ " Test l() i.e. iterator on list ++ func Test_list_iter() ++ lua l = vim.list():add('foo'):add('bar') ++ lua str = '' ++ lua for v in l() do str = str .. v end ++ call assert_equal('foobar', luaeval('str')) ++ ++ lua str, v, l = nil, nil, nil ++ endfunc ++ ++ func Test_recursive_list() ++ lua l = vim.list():add(1):add(2) ++ lua l = l:add(l) ++ ++ call assert_equal(1.0, luaeval('l[0]')) ++ call assert_equal(2.0, luaeval('l[1]')) ++ ++ call assert_equal(1.0, luaeval('l[2][0]')) ++ call assert_equal(2.0, luaeval('l[2][1]')) ++ ++ call assert_equal(1.0, luaeval('l[2][2][0]')) ++ call assert_equal(2.0, luaeval('l[2][2][1]')) ++ ++ call assert_equal('[1.0, 2.0, [...]]', string(luaeval('l'))) ++ ++ call assert_match('^list: 0x\x\+$', luaeval('tostring(l)')) ++ call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[2])')) ++ ++ call assert_equal(luaeval('l'), luaeval('l[2]')) ++ call assert_equal(luaeval('l'), luaeval('l[2][2]')) ++ ++ lua l = nil ++ endfunc ++ ++ func Test_dict() ++ call assert_equal({}, luaeval('vim.dict()')) ++ ++ " Same example as in :help lua-vim. ++ " FIXME: test is disabled because it does not work. ++ " See https://github.com/vim/vim/issues/3086 ++ " lua t = {math.pi, false, say = 'hi'} ++ " call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)')) ++ ++ let d = {} ++ lua d = vim.eval('d') ++ lua d[0] = 123 ++ lua d[1] = "abc" ++ lua d[2] = true ++ lua d[3] = false ++ lua d[4] = vim.eval("[1, 2, 3]") ++ lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}") ++ call assert_equal({'0':123.0, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d) ++ call assert_equal(6.0, luaeval('#d')) ++ call assert_match('^dict: 0x\x\+$', luaeval('tostring(d)')) ++ ++ call assert_equal('abc', luaeval('d[1]')) ++ ++ lua d[0] = 124 ++ lua d[4] = nil ++ call assert_equal({'0':124.0, '1':'abc', '2':v:true, '3':v:false, '5': {'a':1, 'b':2, 'c':3}}, d) ++ ++ lua d = nil ++ endfunc ++ ++ " Test d() i.e. iterator on dictionary ++ func Test_dict_iter() ++ let d = {'a': 1, 'b':2} ++ lua d = vim.eval('d') ++ lua str = '' ++ lua for k,v in d() do str = str .. k ..':' .. v .. ',' end ++ call assert_equal('a:1,b:2,', luaeval('str')) ++ ++ lua str, k, v, d = nil, nil, nil, nil ++ endfunc ++ ++ " Test vim.type() ++ func Test_type() ++ " The following values are identical to Lua's type function. ++ call assert_equal('string', luaeval('vim.type("foo")')) ++ call assert_equal('number', luaeval('vim.type(1)')) ++ call assert_equal('number', luaeval('vim.type(1.2)')) ++ call assert_equal('function', luaeval('vim.type(print)')) ++ call assert_equal('table', luaeval('vim.type({})')) ++ call assert_equal('boolean', luaeval('vim.type(true)')) ++ call assert_equal('boolean', luaeval('vim.type(false)')) ++ call assert_equal('nil', luaeval('vim.type(nil)')) ++ ++ " The following values are specific to Vim. ++ call assert_equal('window', luaeval('vim.type(vim.window())')) ++ call assert_equal('buffer', luaeval('vim.type(vim.buffer())')) ++ call assert_equal('list', luaeval('vim.type(vim.list())')) ++ call assert_equal('dict', luaeval('vim.type(vim.dict())')) ++ endfunc ++ ++ " Test vim.open() ++ func Test_open() ++ call assert_notmatch('XOpen', execute('ls')) ++ ++ " Open a buffer XOpen1, but do not jump to it. ++ lua b = vim.open('XOpen1') ++ call assert_equal('XOpen1', luaeval('b.name')) ++ call assert_equal('', bufname('%')) ++ ++ call assert_match('XOpen1', execute('ls')) ++ call assert_notequal('XOpen2', bufname('%')) ++ ++ " Open a buffer XOpen2 and jump to it. ++ lua b = vim.open('XOpen2')() ++ call assert_equal('XOpen2', luaeval('b.name')) ++ call assert_equal('XOpen2', bufname('%')) ++ ++ lua b = nil ++ %bwipe! ++ endfunc ++ ++ " Test vim.line() ++ func Test_line() ++ new ++ call setline(1, ['first line', 'second line']) ++ 1 ++ call assert_equal('first line', luaeval('vim.line()')) ++ 2 ++ call assert_equal('second line', luaeval('vim.line()')) ++ bwipe! ++ endfunc ++ ++ " Test vim.beep() ++ func Test_beep() ++ call assert_beeps('lua vim.beep()') ++ endfunc ++ ++ " Test errors in luaeval() ++ func Test_luaeval_error() ++ " Compile error ++ call assert_fails("call luaeval('-nil')", ++ \ '[string "luaeval"]:1: attempt to perform arithmetic on a nil value') ++ call assert_fails("call luaeval(']')", ++ \ "[string \"luaeval\"]:1: unexpected symbol near ']'") ++ endfunc ++ ++ " Test :luafile foo.lua ++ func Test_luafile() ++ call delete('Xlua_file') ++ call writefile(["str = 'hello'", "num = 123.0" ], 'Xlua_file') ++ call setfperm('Xlua_file', 'r-xr-xr-x') ++ ++ luafile Xlua_file ++ call assert_equal('hello', luaeval('str')) ++ call assert_equal(123.0, luaeval('num')) ++ ++ lua str, num = nil, nil ++ call delete('Xlua_file') ++ endfunc ++ ++ " Test :luafile % ++ func Test_luafile_percent() ++ new Xlua_file ++ append ++ str, num = 'foo', 321.0 ++ print(string.format('str=%s, num=%d', str, num)) ++ . ++ w! ++ luafile % ++ let msg = split(execute('message'), "\n")[-1] ++ call assert_equal('str=foo, num=321', msg) ++ ++ lua str, num = nil, nil ++ call delete('Xlua_file') + bwipe! + endfunc +*** ../vim-8.1.0131/src/version.c 2018-06-30 21:18:10.486300954 +0200 +--- src/version.c 2018-06-30 21:22:03.417340889 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 132, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +155. You forget to eat because you're too busy surfing the net. + + /// 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 /// diff --git a/data/vim/patches/8.1.0133 b/data/vim/patches/8.1.0133 new file mode 100644 index 000000000..b1f6d2253 --- /dev/null +++ b/data/vim/patches/8.1.0133 @@ -0,0 +1,141 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0133 +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.0133 +Problem: tagfiles() can have duplicate entries. +Solution: Simplify the filename to make checking for duplicates work better. + Add a test. (Dominique Pelle, closes #2979) +Files: src/tag.c, src/testdir/test_taglist.vim + + +*** ../vim-8.1.0132/src/tag.c 2018-04-27 22:44:39.000000000 +0200 +--- src/tag.c 2018-06-30 22:40:27.157629813 +0200 +*************** +*** 2595,2601 **** + } + + static garray_T tag_fnames = GA_EMPTY; +- static void found_tagfile_cb(char_u *fname, void *cookie); + + /* + * Callback function for finding all "tags" and "tags-??" files in +--- 2595,2600 ---- +*************** +*** 2605,2612 **** + found_tagfile_cb(char_u *fname, void *cookie UNUSED) + { + if (ga_grow(&tag_fnames, 1) == OK) +! ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] = +! vim_strsave(fname); + } + + #if defined(EXITFREE) || defined(PROTO) +--- 2604,2618 ---- + found_tagfile_cb(char_u *fname, void *cookie UNUSED) + { + if (ga_grow(&tag_fnames, 1) == OK) +! { +! char_u *tag_fname = vim_strsave(fname); +! +! #ifdef BACKSLASH_IN_FILENAME +! slash_adjust(tag_fname); +! #endif +! simplify_filename(tag_fname); +! ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] = tag_fname; +! } + } + + #if defined(EXITFREE) || defined(PROTO) +*************** +*** 2638,2643 **** +--- 2644,2650 ---- + { + char_u *fname = NULL; + char_u *r_ptr; ++ int i; + + if (first) + vim_memset(tnp, 0, sizeof(tagname_T)); +*************** +*** 2679,2684 **** +--- 2686,2699 ---- + ++tnp->tn_hf_idx; + STRCPY(buf, p_hf); + STRCPY(gettail(buf), "tags"); ++ #ifdef BACKSLASH_IN_FILENAME ++ slash_adjust(buf); ++ #endif ++ simplify_filename(buf); ++ ++ for (i = 0; i < tag_fnames.ga_len; ++i) ++ if (STRCMP(buf, ((char_u **)(tag_fnames.ga_data))[i]) == 0) ++ return FAIL; // avoid duplicate file names + } + else + vim_strncpy(buf, ((char_u **)(tag_fnames.ga_data))[ +*** ../vim-8.1.0132/src/testdir/test_taglist.vim 2018-02-09 18:25:21.000000000 +0100 +--- src/testdir/test_taglist.vim 2018-06-30 22:33:05.044664951 +0200 +*************** +*** 1,4 **** +! " test 'taglist' function and :tags command + + func Test_taglist() + call writefile([ +--- 1,4 ---- +! " test taglist(), tagfiles() functions and :tags command + + func Test_taglist() + call writefile([ +*************** +*** 61,63 **** +--- 61,86 ---- + call assert_fails('tag ' . repeat('x', 1020), 'E426') + tags + endfunc ++ ++ func Test_tagfiles() ++ call assert_equal([], tagfiles()) ++ ++ call writefile(["FFoo\tXfoo\t1"], 'Xtags1') ++ call writefile(["FBar\tXbar\t1"], 'Xtags2') ++ set tags=Xtags1,Xtags2 ++ call assert_equal(['Xtags1', 'Xtags2'], tagfiles()) ++ ++ help ++ let tf = tagfiles() ++ call assert_equal(1, len(tf)) ++ call assert_equal(fnamemodify(expand('$VIMRUNTIME/doc/tags'), ':p:gs?\\?/?'), ++ \ fnamemodify(tf[0], ':p:gs?\\?/?')) ++ helpclose ++ call assert_equal(['Xtags1', 'Xtags2'], tagfiles()) ++ set tags& ++ call assert_equal([], tagfiles()) ++ ++ call delete('Xtags1') ++ call delete('Xtags2') ++ bd ++ endfunc +*** ../vim-8.1.0132/src/version.c 2018-06-30 21:50:16.856674912 +0200 +--- src/version.c 2018-06-30 22:33:36.756434678 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 133, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +158. You get a tuner card so you can watch TV while surfing. + + /// 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 /// diff --git a/data/vim/patches/8.1.0134 b/data/vim/patches/8.1.0134 new file mode 100644 index 000000000..ff07dfe27 --- /dev/null +++ b/data/vim/patches/8.1.0134 @@ -0,0 +1,724 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0134 +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.0134 +Problem: Lua interface does not support funcref. +Solution: Add funcref support. (Luis Carvalho) +Files: src/if_lua.c, src/testdir/test_lua.vim + + +*** ../vim-8.1.0133/src/if_lua.c 2017-12-16 18:17:27.000000000 +0100 +--- src/if_lua.c 2018-07-01 14:49:42.013143173 +0200 +*************** +*** 28,37 **** +--- 28,43 ---- + typedef win_T *luaV_Window; + typedef dict_T *luaV_Dict; + typedef list_T *luaV_List; ++ typedef struct { ++ typval_T tv; // funcref ++ typval_T args; ++ dict_T *self; // selfdict ++ } luaV_Funcref; + typedef void (*msgfunc_T)(char_u *); + + static const char LUAVIM_DICT[] = "dict"; + static const char LUAVIM_LIST[] = "list"; ++ static const char LUAVIM_FUNCREF[] = "funcref"; + static const char LUAVIM_BUFFER[] = "buffer"; + static const char LUAVIM_WINDOW[] = "window"; + static const char LUAVIM_FREE[] = "luaV_free"; +*************** +*** 55,63 **** + if (sandbox) luaL_error((L), "not allowed in sandbox") + #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg) + #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg) +! +! static luaV_List *luaV_pushlist (lua_State *L, list_T *lis); +! static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic); + + #if LUA_VERSION_NUM <= 501 + #define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n) +--- 61,75 ---- + if (sandbox) luaL_error((L), "not allowed in sandbox") + #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg) + #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg) +! #define luaV_checktypval(L, a, v, msg) \ +! do { \ +! if (luaV_totypval(L, a, v) == FAIL) \ +! luaL_error(L, msg ": cannot convert value"); \ +! } while (0) +! +! static luaV_List *luaV_pushlist(lua_State *L, list_T *lis); +! static luaV_Dict *luaV_pushdict(lua_State *L, dict_T *dic); +! static luaV_Funcref *luaV_pushfuncref(lua_State *L, typval_T *tv); + + #if LUA_VERSION_NUM <= 501 + #define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n) +*************** +*** 506,521 **** + else + lua_pushnil(L); + break; + default: + lua_pushnil(L); + } + } + +! /* converts lua value at 'pos' to typval 'tv' */ +! static void +! luaV_totypval (lua_State *L, int pos, typval_T *tv) + { +! switch(lua_type(L, pos)) { + case LUA_TBOOLEAN: + tv->v_type = VAR_SPECIAL; + tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos); +--- 518,542 ---- + else + lua_pushnil(L); + break; ++ case VAR_FUNC: ++ luaV_pushfuncref(L, tv); ++ break; + default: + lua_pushnil(L); + } + } + +! /* +! * Converts lua value at 'pos' to typval 'tv'. +! * Returns OK or FAIL. +! */ +! static int +! luaV_totypval(lua_State *L, int pos, typval_T *tv) + { +! int status = OK; +! +! switch (lua_type(L, pos)) +! { + case LUA_TBOOLEAN: + tv->v_type = VAR_SPECIAL; + tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos); +*************** +*** 533,540 **** + tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos); + #endif + break; +! case LUA_TUSERDATA: { + void *p = lua_touserdata(L, pos); + if (lua_getmetatable(L, pos)) /* has metatable? */ + { + /* check list */ +--- 554,563 ---- + tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos); + #endif + break; +! case LUA_TUSERDATA: +! { + void *p = lua_touserdata(L, pos); ++ + if (lua_getmetatable(L, pos)) /* has metatable? */ + { + /* check list */ +*************** +*** 545,551 **** + tv->vval.v_list = *((luaV_List *) p); + ++tv->vval.v_list->lv_refcount; + lua_pop(L, 2); /* MTs */ +! return; + } + /* check dict */ + luaV_getfield(L, LUAVIM_DICT); +--- 568,574 ---- + tv->vval.v_list = *((luaV_List *) p); + ++tv->vval.v_list->lv_refcount; + lua_pop(L, 2); /* MTs */ +! break; + } + /* check dict */ + luaV_getfield(L, LUAVIM_DICT); +*************** +*** 555,570 **** + tv->vval.v_dict = *((luaV_Dict *) p); + ++tv->vval.v_dict->dv_refcount; + lua_pop(L, 3); /* MTs */ +! return; + } +! lua_pop(L, 3); /* MTs */ + } +- break; + } + default: + tv->v_type = VAR_NUMBER; + tv->vval.v_number = 0; + } + } + + /* similar to luaL_addlstring, but replaces \0 with \n if toline and +--- 578,604 ---- + tv->vval.v_dict = *((luaV_Dict *) p); + ++tv->vval.v_dict->dv_refcount; + lua_pop(L, 3); /* MTs */ +! break; + } +! /* check funcref */ +! luaV_getfield(L, LUAVIM_FUNCREF); +! if (lua_rawequal(L, -1, -4)) +! { +! luaV_Funcref *f = (luaV_Funcref *) p; +! copy_tv(&f->tv, tv); +! lua_pop(L, 4); /* MTs */ +! break; +! } +! lua_pop(L, 4); /* MTs */ + } + } ++ /* FALLTHROUGH */ + default: + tv->v_type = VAR_NUMBER; + tv->vval.v_number = 0; ++ status = FAIL; + } ++ return status; + } + + /* similar to luaL_addlstring, but replaces \0 with \n if toline and +*************** +*** 646,652 **** + + #define luaV_pushtype(typ,tname,luatyp) \ + static luatyp * \ +! luaV_push##tname (lua_State *L, typ *obj) \ + { \ + luatyp *o = NULL; \ + if (obj == NULL) \ +--- 680,686 ---- + + #define luaV_pushtype(typ,tname,luatyp) \ + static luatyp * \ +! luaV_push##tname(lua_State *L, typ *obj) \ + { \ + luatyp *o = NULL; \ + if (obj == NULL) \ +*************** +*** 766,772 **** + else + { + typval_T v; +! luaV_totypval(L, 3, &v); + clear_tv(&li->li_tv); + copy_tv(&v, &li->li_tv); + clear_tv(&v); +--- 800,806 ---- + else + { + typval_T v; +! luaV_checktypval(L, 3, &v, "setting list item"); + clear_tv(&li->li_tv); + copy_tv(&v, &li->li_tv); + clear_tv(&v); +*************** +*** 783,793 **** + if (l->lv_lock) + luaL_error(L, "list is locked"); + lua_settop(L, 2); +! luaV_totypval(L, 2, &v); + if (list_append_tv(l, &v) == FAIL) + { + clear_tv(&v); +! luaL_error(L, "Failed to add item to list"); + } + clear_tv(&v); + lua_settop(L, 1); +--- 817,827 ---- + if (l->lv_lock) + luaL_error(L, "list is locked"); + lua_settop(L, 2); +! luaV_checktypval(L, 2, &v, "adding list item"); + if (list_append_tv(l, &v) == FAIL) + { + clear_tv(&v); +! luaL_error(L, "failed to add item to list"); + } + clear_tv(&v); + lua_settop(L, 1); +*************** +*** 811,821 **** + luaL_error(L, "invalid position"); + } + lua_settop(L, 2); +! luaV_totypval(L, 2, &v); + if (list_insert_tv(l, &v, li) == FAIL) + { + clear_tv(&v); +! luaL_error(L, "Failed to add item to list"); + } + clear_tv(&v); + lua_settop(L, 1); +--- 845,855 ---- + luaL_error(L, "invalid position"); + } + lua_settop(L, 2); +! luaV_checktypval(L, 2, &v, "inserting list item"); + if (list_insert_tv(l, &v, li) == FAIL) + { + clear_tv(&v); +! luaL_error(L, "failed to add item to list"); + } + clear_tv(&v); + lua_settop(L, 1); +*************** +*** 894,919 **** + } + + static int +! luaV_dict_index (lua_State *L) + { + dict_T *d = luaV_unbox(L, luaV_Dict, 1); + char_u *key = (char_u *) luaL_checkstring(L, 2); + dictitem_T *di = dict_find(d, key, -1); + if (di == NULL) + lua_pushnil(L); + else + luaV_pushtypval(L, &di->di_tv); + return 1; + } + + static int +! luaV_dict_newindex (lua_State *L) + { + dict_T *d = luaV_unbox(L, luaV_Dict, 1); + char_u *key = (char_u *) luaL_checkstring(L, 2); + dictitem_T *di; + if (d->dv_lock) + luaL_error(L, "dict is locked"); + di = dict_find(d, key, -1); + if (di == NULL) /* non-existing key? */ + { +--- 928,970 ---- + } + + static int +! luaV_dict_index(lua_State *L) + { + dict_T *d = luaV_unbox(L, luaV_Dict, 1); + char_u *key = (char_u *) luaL_checkstring(L, 2); + dictitem_T *di = dict_find(d, key, -1); ++ + if (di == NULL) + lua_pushnil(L); + else ++ { + luaV_pushtypval(L, &di->di_tv); ++ if (di->di_tv.v_type == VAR_FUNC) /* funcref? */ ++ { ++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, -1); ++ f->self = d; /* keep "self" reference */ ++ d->dv_refcount++; ++ } ++ } + return 1; + } + + static int +! luaV_dict_newindex(lua_State *L) + { + dict_T *d = luaV_unbox(L, luaV_Dict, 1); + char_u *key = (char_u *) luaL_checkstring(L, 2); + dictitem_T *di; ++ typval_T v; + if (d->dv_lock) + luaL_error(L, "dict is locked"); ++ if (key != NULL && *key == NUL) ++ luaL_error(L, "empty key"); ++ if (!lua_isnil(L, 3)) { /* read value? */ ++ luaV_checktypval(L, 3, &v, "setting dict item"); ++ if (d->dv_scope == VAR_DEF_SCOPE && v.v_type == VAR_FUNC) ++ luaL_error(L, "cannot assign funcref to builtin scope"); ++ } + di = dict_find(d, key, -1); + if (di == NULL) /* non-existing key? */ + { +*************** +*** 934,942 **** + hash_remove(&d->dv_hashtab, hi); + dictitem_free(di); + } +! else { +! typval_T v; +! luaV_totypval(L, 3, &v); + copy_tv(&v, &di->di_tv); + clear_tv(&v); + } +--- 985,992 ---- + hash_remove(&d->dv_hashtab, hi); + dictitem_free(di); + } +! else +! { + copy_tv(&v, &di->di_tv); + clear_tv(&v); + } +*************** +*** 953,958 **** +--- 1003,1094 ---- + }; + + ++ /* ======= Funcref type ======= */ ++ ++ static luaV_Funcref * ++ luaV_newfuncref(lua_State *L, char_u *name) ++ { ++ luaV_Funcref *f = (luaV_Funcref *)lua_newuserdata(L, sizeof(luaV_Funcref)); ++ ++ if (name != NULL) ++ { ++ func_ref(name); /* as in copy_tv */ ++ f->tv.vval.v_string = vim_strsave(name); ++ } ++ f->tv.v_type = VAR_FUNC; ++ f->args.v_type = VAR_LIST; ++ f->self = NULL; ++ luaV_getfield(L, LUAVIM_FUNCREF); ++ lua_setmetatable(L, -2); ++ return f; ++ } ++ ++ static luaV_Funcref * ++ luaV_pushfuncref(lua_State *L, typval_T *tv) ++ { ++ luaV_Funcref *f = luaV_newfuncref(L, NULL); ++ copy_tv(tv, &f->tv); ++ clear_tv(tv); ++ return f; ++ } ++ ++ ++ luaV_type_tostring(funcref, LUAVIM_FUNCREF) ++ ++ static int ++ luaV_funcref_gc(lua_State *L) ++ { ++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, 1); ++ ++ func_unref(f->tv.vval.v_string); ++ vim_free(f->tv.vval.v_string); ++ dict_unref(f->self); ++ return 0; ++ } ++ ++ /* equivalent to string(funcref) */ ++ static int ++ luaV_funcref_len(lua_State *L) ++ { ++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, 1); ++ ++ lua_pushstring(L, (const char *) f->tv.vval.v_string); ++ return 1; ++ } ++ ++ static int ++ luaV_funcref_call(lua_State *L) ++ { ++ luaV_Funcref *f = (luaV_Funcref *) lua_touserdata(L, 1); ++ int i, n = lua_gettop(L) - 1; /* #args */ ++ int status; ++ typval_T v, rettv; ++ ++ f->args.vval.v_list = list_alloc(); ++ rettv.v_type = VAR_UNKNOWN; /* as in clear_tv */ ++ for (i = 0; i < n; i++) { ++ luaV_checktypval(L, i + 2, &v, "calling funcref"); ++ list_append_tv(f->args.vval.v_list, &v); ++ } ++ status = func_call(f->tv.vval.v_string, &f->args, NULL, f->self, &rettv); ++ if (status == OK) ++ luaV_pushtypval(L, &rettv); ++ clear_tv(&f->args); ++ clear_tv(&rettv); ++ if (status != OK) ++ luaL_error(L, "cannot call funcref"); ++ return 1; ++ } ++ ++ static const luaL_Reg luaV_Funcref_mt[] = { ++ {"__tostring", luaV_funcref_tostring}, ++ {"__gc", luaV_funcref_gc}, ++ {"__len", luaV_funcref_len}, ++ {"__call", luaV_funcref_call}, ++ {NULL, NULL} ++ }; ++ ++ + /* ======= Buffer type ======= */ + + luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER) +*************** +*** 1033,1039 **** + curbuf = buf; + luaL_error(L, "cannot delete line"); + } +! else { + deleted_lines_mark(n, 1L); + if (b == curwin->w_buffer) /* fix cursor in current window? */ + { +--- 1169,1176 ---- + curbuf = buf; + luaL_error(L, "cannot delete line"); + } +! else +! { + deleted_lines_mark(n, 1L); + if (b == curwin->w_buffer) /* fix cursor in current window? */ + { +*************** +*** 1371,1392 **** + static int + luaV_list(lua_State *L) + { +! list_T *l = list_alloc(); + if (l == NULL) + lua_pushnil(L); + else + luaV_newlist(L, l); + return 1; + } + + static int + luaV_dict(lua_State *L) + { +! dict_T *d = dict_alloc(); + if (d == NULL) + lua_pushnil(L); + else + luaV_newdict(L, d); + return 1; + } + +--- 1508,1591 ---- + static int + luaV_list(lua_State *L) + { +! list_T *l; +! int initarg = !lua_isnoneornil(L, 1); +! +! if (initarg && lua_type(L, 1) != LUA_TTABLE) +! luaL_error(L, "table expected, got %s", luaL_typename(L, 1)); +! l = list_alloc(); + if (l == NULL) + lua_pushnil(L); + else ++ { + luaV_newlist(L, l); ++ if (initarg) { /* traverse table to init dict */ ++ int notnil, i = 0; ++ typval_T v; ++ do { ++ lua_rawgeti(L, 1, ++i); ++ notnil = !lua_isnil(L, -1); ++ if (notnil) { ++ luaV_checktypval(L, -1, &v, "vim.list"); ++ list_append_tv(l, &v); ++ } ++ lua_pop(L, 1); /* value */ ++ } while (notnil); ++ } ++ } + return 1; + } + + static int + luaV_dict(lua_State *L) + { +! dict_T *d; +! int initarg = !lua_isnoneornil(L, 1); +! +! if (initarg && lua_type(L, 1) != LUA_TTABLE) +! luaL_error(L, "table expected, got %s", luaL_typename(L, 1)); +! d = dict_alloc(); + if (d == NULL) + lua_pushnil(L); + else ++ { + luaV_newdict(L, d); ++ if (initarg) /* traverse table to init dict */ ++ { ++ lua_pushnil(L); ++ while (lua_next(L, 1)) ++ { ++ char_u *key; ++ dictitem_T *di; ++ typval_T v; ++ lua_pushvalue(L, -2); /* dup key in case it's a number */ ++ key = (char_u *) lua_tostring(L, -1); ++ if (key != NULL && *key == NUL) ++ luaL_error(L, "table has empty key"); ++ luaV_checktypval(L, -2, &v, "vim.dict"); /* value */ ++ di = dictitem_alloc(key); ++ if (di == NULL || dict_add(d, di) == FAIL) { ++ vim_free(di); ++ lua_pushnil(L); ++ return 1; ++ } ++ copy_tv(&v, &di->di_tv); ++ clear_tv(&v); ++ lua_pop(L, 2); /* key copy and value */ ++ } ++ } ++ } ++ return 1; ++ } ++ ++ static int ++ luaV_funcref(lua_State *L) ++ { ++ const char *name = luaL_checkstring(L, 1); ++ /* note: not checking if function exists (needs function_exists) */ ++ if (name == NULL || *name == NUL || VIM_ISDIGIT(*name)) ++ luaL_error(L, "invalid function name: %s", name); ++ luaV_newfuncref(L, (char_u *) name); + return 1; + } + +*************** +*** 1402,1408 **** + FOR_ALL_BUFFERS(buf) + if (buf->b_fnum == n) break; + } +! else { /* by name */ + size_t l; + const char *s = lua_tolstring(L, 1, &l); + FOR_ALL_BUFFERS(buf) +--- 1601,1608 ---- + FOR_ALL_BUFFERS(buf) + if (buf->b_fnum == n) break; + } +! else // by name +! { + size_t l; + const char *s = lua_tolstring(L, 1, &l); + FOR_ALL_BUFFERS(buf) +*************** +*** 1472,1477 **** +--- 1672,1683 ---- + lua_pushstring(L, "dict"); + return 1; + } ++ luaV_getfield(L, LUAVIM_FUNCREF); ++ if (lua_rawequal(L, -1, 2)) ++ { ++ lua_pushstring(L, "funcref"); ++ return 1; ++ } + luaV_getfield(L, LUAVIM_BUFFER); + if (lua_rawequal(L, -1, 2)) + { +*************** +*** 1497,1502 **** +--- 1703,1709 ---- + {"line", luaV_line}, + {"list", luaV_list}, + {"dict", luaV_dict}, ++ {"funcref", luaV_funcref}, + {"buffer", luaV_buffer}, + {"window", luaV_window}, + {"open", luaV_open}, +*************** +*** 1537,1543 **** + luaV_emsg(L); + return 0; + } +! luaV_totypval(L, -1, rettv); + return 0; + } + +--- 1744,1751 ---- + luaV_emsg(L); + return 0; + } +! if (luaV_totypval(L, -1, rettv) == FAIL) +! EMSG("luaeval: cannot convert value"); + return 0; + } + +*************** +*** 1612,1617 **** +--- 1820,1828 ---- + luaV_newmetatable(L, LUAVIM_DICT); + lua_pushvalue(L, 1); + luaV_openlib(L, luaV_Dict_mt, 1); ++ luaV_newmetatable(L, LUAVIM_FUNCREF); ++ lua_pushvalue(L, 1); ++ luaV_openlib(L, luaV_Funcref_mt, 1); + luaV_newmetatable(L, LUAVIM_BUFFER); + lua_pushvalue(L, 1); /* cache table */ + luaV_openlib(L, luaV_Buffer_mt, 1); +*** ../vim-8.1.0133/src/testdir/test_lua.vim 2018-06-30 21:50:16.856674912 +0200 +--- src/testdir/test_lua.vim 2018-07-01 15:00:55.884371772 +0200 +*************** +*** 397,402 **** +--- 397,425 ---- + lua str, k, v, d = nil, nil, nil, nil + endfunc + ++ func Test_funcref() ++ function I(x) ++ return a:x ++ endfunction ++ let R = function('I') ++ lua i1 = vim.funcref"I" ++ lua i2 = vim.eval"R" ++ lua msg = "funcref|test|" .. (#i2(i1) == #i1(i2) and "OK" or "FAIL") ++ lua msg = vim.funcref"tr"(msg, "|", " ") ++ call assert_equal("funcref test OK", luaeval('msg')) ++ ++ " dict funcref ++ function Mylen() dict ++ return len(self.data) ++ endfunction ++ let l = [0, 1, 2, 3] ++ let mydict = {'data': l} ++ lua d = vim.eval"mydict" ++ lua d.len = vim.funcref"Mylen" -- assign d as 'self' ++ lua res = (d.len() == vim.funcref"len"(vim.eval"l")) and "OK" or "FAIL" ++ call assert_equal("OK", luaeval('res')) ++ endfunc ++ + " Test vim.type() + func Test_type() + " The following values are identical to Lua's type function. +*************** +*** 414,419 **** +--- 437,443 ---- + call assert_equal('buffer', luaeval('vim.type(vim.buffer())')) + call assert_equal('list', luaeval('vim.type(vim.list())')) + call assert_equal('dict', luaeval('vim.type(vim.dict())')) ++ call assert_equal('funcref', luaeval('vim.type(vim.funcref("Test_type"))')) + endfunc + + " Test vim.open() +*** ../vim-8.1.0133/src/version.c 2018-06-30 22:40:39.097551835 +0200 +--- src/version.c 2018-07-01 15:01:56.939951330 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 134, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +162. You go outside and look for a brightness knob to turn down the sun. + + /// 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 /// diff --git a/data/vim/patches/8.1.0135 b/data/vim/patches/8.1.0135 new file mode 100644 index 000000000..f12030c9f --- /dev/null +++ b/data/vim/patches/8.1.0135 @@ -0,0 +1,95 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0135 +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.0135 +Problem: Undo message delays screen update for CTRL-O u. +Solution: Add smsg_attr_keep(). (closes #3125) +Files: src/message.c, src/proto.h, src/undo.c + + +*** ../vim-8.1.0134/src/message.c 2018-06-28 14:54:38.764565527 +0200 +--- src/message.c 2018-07-01 16:35:40.549594202 +0200 +*************** +*** 399,404 **** +--- 399,418 ---- + return msg_attr(IObuff, attr); + } + ++ int ++ # ifdef __BORLANDC__ ++ _RTLENTRYF ++ # endif ++ smsg_attr_keep(int attr, char_u *s, ...) ++ { ++ va_list arglist; ++ ++ va_start(arglist, s); ++ vim_vsnprintf((char *)IObuff, IOSIZE, (char *)s, arglist); ++ va_end(arglist); ++ return msg_attr_keep(IObuff, attr, TRUE); ++ } ++ + #endif + + /* +*** ../vim-8.1.0134/src/proto.h 2018-04-10 12:40:16.000000000 +0200 +--- src/proto.h 2018-07-01 16:37:05.753116076 +0200 +*************** +*** 119,124 **** +--- 119,130 ---- + # ifdef __BORLANDC__ + _RTLENTRYF + # endif ++ smsg_attr_keep(int, char_u *, ...); ++ ++ int ++ # ifdef __BORLANDC__ ++ _RTLENTRYF ++ # endif + vim_snprintf_add(char *, size_t, char *, ...) + #ifdef USE_PRINTF_FORMAT_ATTRIBUTE + __attribute__((format(printf, 3, 4))) +*** ../vim-8.1.0134/src/undo.c 2018-06-20 22:37:52.658911284 +0200 +--- src/undo.c 2018-07-01 16:37:22.233023025 +0200 +*************** +*** 2968,2974 **** + } + #endif + +! smsg((char_u *)_("%ld %s; %s #%ld %s"), + u_oldcount < 0 ? -u_oldcount : u_oldcount, + _(msgstr), + did_undo ? _("before") : _("after"), +--- 2968,2974 ---- + } + #endif + +! smsg_attr_keep(0, (char_u *)_("%ld %s; %s #%ld %s"), + u_oldcount < 0 ? -u_oldcount : u_oldcount, + _(msgstr), + did_undo ? _("before") : _("after"), +*** ../vim-8.1.0134/src/version.c 2018-07-01 15:12:00.224057865 +0200 +--- src/version.c 2018-07-01 16:43:21.810957974 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 135, + /**/ + + +-- +hundred-and-one symptoms of being an internet addict: +164. You got out to buy software, instead of going out for a beer. + + /// 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 /// diff --git a/data/vim/patches/8.1.0136 b/data/vim/patches/8.1.0136 new file mode 100644 index 000000000..659431504 --- /dev/null +++ b/data/vim/patches/8.1.0136 @@ -0,0 +1,342 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0136 +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.0136 +Problem: Lua tests don't cover new features. +Solution: Add more tests. (Dominique Pelle, closes #3130) +Files: runtime/doc/if_lua.txt, src/testdir/test_lua.vim + + +*** ../vim-8.1.0135/runtime/doc/if_lua.txt 2018-05-17 13:41:41.000000000 +0200 +--- runtime/doc/if_lua.txt 2018-07-01 19:45:39.183210699 +0200 +*************** +*** 127,133 **** + rules. Example: > + :lua t = {math.pi, false, say = 'hi'} + :echo luaeval('vim.list(t)') +! :" [3.141593, 0], 'say' is ignored + < + vim.dict([arg]) Returns an empty dictionary or, if "arg" is a + Lua table, returns a dict d such that d[k] = +--- 127,133 ---- + rules. Example: > + :lua t = {math.pi, false, say = 'hi'} + :echo luaeval('vim.list(t)') +! :" [3.141593, v:false], 'say' is ignored + < + vim.dict([arg]) Returns an empty dictionary or, if "arg" is a + Lua table, returns a dict d such that d[k] = +*************** +*** 141,148 **** + :" {'say': 'hi'}, numeric keys ignored + < + vim.funcref({name}) Returns a Funcref to function {name} (see +! |Funcref|). It is equivalent to Vim's +! "function". NOT IMPLEMENTED YET + + vim.buffer([arg]) If "arg" is a number, returns buffer with + number "arg" in the buffer list or, if "arg" +--- 141,147 ---- + :" {'say': 'hi'}, numeric keys ignored + < + vim.funcref({name}) Returns a Funcref to function {name} (see +! |Funcref|). It is equivalent to Vim's function(). + + vim.buffer([arg]) If "arg" is a number, returns buffer with + number "arg" in the buffer list or, if "arg" +*************** +*** 166,172 **** + or window, respectively. Examples: > + :lua l = vim.list() + :lua print(type(l), vim.type(l)) +! :" userdata list + < + vim.command({cmd}) Executes the vim (ex-mode) command {cmd}. + Examples: > +--- 165,171 ---- + or window, respectively. Examples: > + :lua l = vim.list() + :lua print(type(l), vim.type(l)) +! :" list + < + vim.command({cmd}) Executes the vim (ex-mode) command {cmd}. + Examples: > +*** ../vim-8.1.0135/src/testdir/test_lua.vim 2018-07-01 15:12:00.224057865 +0200 +--- src/testdir/test_lua.vim 2018-07-01 19:45:39.183210699 +0200 +*************** +*** 124,130 **** + lua w2() + call assert_equal('Xfoo2', bufname('%')) + +! lua w1, w2 = nil, nil + %bwipe! + endfunc + +--- 124,130 ---- + lua w2() + call assert_equal('Xfoo2', bufname('%')) + +! lua w1, w2 = nil + %bwipe! + endfunc + +*************** +*** 142,148 **** + lua b2() + call assert_equal('Xfoo2', bufname('%')) + +! lua b1, b2 = nil, nil + %bwipe! + endfunc + +--- 142,148 ---- + lua b2() + call assert_equal('Xfoo2', bufname('%')) + +! lua b1, b2, w1, w2 = nil + %bwipe! + endfunc + +*************** +*** 191,197 **** + call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name")) + call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name")) + +! lua bn1, bn2 = nil, nil + %bwipe! + endfunc + +--- 191,197 ---- + call assert_equal('Xfoo1', luaeval("vim.buffer(" . bn1 . ").name")) + call assert_equal('Xfoo2', luaeval("vim.buffer(" . bn2 . ").name")) + +! lua bn1, bn2 = nil + %bwipe! + endfunc + +*************** +*** 275,281 **** + call assert_equal('Xfoo1', luaeval('vim.buffer().name')) + call assert_equal('Xfoo1', bufname('%')) + +! lua bn, bp = nil, nil + %bwipe! + endfunc + +--- 275,281 ---- + call assert_equal('Xfoo1', luaeval('vim.buffer().name')) + call assert_equal('Xfoo1', bufname('%')) + +! lua bn, bp = nil + %bwipe! + endfunc + +*************** +*** 295,306 **** + func Test_list() + call assert_equal([], luaeval('vim.list()')) + +- " Same example as in :help lua-vim. +- " FIXME: test is disabled because it does not work. +- " See https://github.com/vim/vim/issues/3086 +- " lua t = {math.pi, false, say = 'hi'} +- " call assert_equal([3.141593, 0], luaeval('vim.list(t)')) +- + let l = [] + lua l = vim.eval('l') + lua l:add(123) +--- 295,300 ---- +*************** +*** 319,327 **** +--- 313,338 ---- + lua l:insert('xx', 3) + call assert_equal(['first', 124.0, 'abc', 'xx', v:true, v:false, {'a': 1, 'b': 2, 'c': 3}], l) + ++ lockvar 1 l ++ call assert_fails('lua l:add("x")', '[string "vim chunk"]:1: list is locked') ++ + lua l = nil + endfunc + ++ func Test_list_table() ++ " See :help lua-vim ++ " Non-numeric keys should not be used to initialize the list ++ " so say = 'hi' should be ignored. ++ lua t = {3.14, 'hello', false, true, say = 'hi'} ++ call assert_equal([3.14, 'hello', v:false, v:true], luaeval('vim.list(t)')) ++ lua t = nil ++ ++ call assert_fails('lua vim.list(1)', '[string "vim chunk"]:1: table expected, got number') ++ call assert_fails('lua vim.list("x")', '[string "vim chunk"]:1: table expected, got string') ++ call assert_fails('lua vim.list(print)', '[string "vim chunk"]:1: table expected, got function') ++ call assert_fails('lua vim.list(true)', '[string "vim chunk"]:1: table expected, got boolean') ++ endfunc ++ + " Test l() i.e. iterator on list + func Test_list_iter() + lua l = vim.list():add('foo'):add('bar') +*************** +*** 329,335 **** + lua for v in l() do str = str .. v end + call assert_equal('foobar', luaeval('str')) + +! lua str, v, l = nil, nil, nil + endfunc + + func Test_recursive_list() +--- 340,346 ---- + lua for v in l() do str = str .. v end + call assert_equal('foobar', luaeval('str')) + +! lua str, l = nil + endfunc + + func Test_recursive_list() +*************** +*** 359,370 **** + func Test_dict() + call assert_equal({}, luaeval('vim.dict()')) + +- " Same example as in :help lua-vim. +- " FIXME: test is disabled because it does not work. +- " See https://github.com/vim/vim/issues/3086 +- " lua t = {math.pi, false, say = 'hi'} +- " call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)')) +- + let d = {} + lua d = vim.eval('d') + lua d[0] = 123 +--- 370,375 ---- +*************** +*** 383,391 **** +--- 388,419 ---- + lua d[4] = nil + call assert_equal({'0':124.0, '1':'abc', '2':v:true, '3':v:false, '5': {'a':1, 'b':2, 'c':3}}, d) + ++ lockvar 1 d ++ call assert_fails('lua d[6] = 1', '[string "vim chunk"]:1: dict is locked') ++ + lua d = nil + endfunc + ++ func Test_dict_table() ++ lua t = {key1 = 'x', key2 = 3.14, key3 = true, key4 = false} ++ call assert_equal({'key1': 'x', 'key2': 3.14, 'key3': v:true, 'key4': v:false}, ++ \ luaeval('vim.dict(t)')) ++ ++ " Same example as in :help lua-vim. ++ lua t = {math.pi, false, say = 'hi'} ++ " FIXME: commented out as it currently does not work as documented: ++ " Expected {'say': 'hi'} ++ " but got {'1': 3.141593, '2': v:false, 'say': 'hi'} ++ " Is the documentation or the code wrong? ++ "call assert_equal({'say' : 'hi'}, luaeval('vim.dict(t)')) ++ lua t = nil ++ ++ call assert_fails('lua vim.dict(1)', '[string "vim chunk"]:1: table expected, got number') ++ call assert_fails('lua vim.dict("x")', '[string "vim chunk"]:1: table expected, got string') ++ call assert_fails('lua vim.dict(print)', '[string "vim chunk"]:1: table expected, got function') ++ call assert_fails('lua vim.dict(true)', '[string "vim chunk"]:1: table expected, got boolean') ++ endfunc ++ + " Test d() i.e. iterator on dictionary + func Test_dict_iter() + let d = {'a': 1, 'b':2} +*************** +*** 394,400 **** + lua for k,v in d() do str = str .. k ..':' .. v .. ',' end + call assert_equal('a:1,b:2,', luaeval('str')) + +! lua str, k, v, d = nil, nil, nil, nil + endfunc + + func Test_funcref() +--- 422,428 ---- + lua for k,v in d() do str = str .. k ..':' .. v .. ',' end + call assert_equal('a:1,b:2,', luaeval('str')) + +! lua str, d = nil + endfunc + + func Test_funcref() +*************** +*** 418,423 **** +--- 446,453 ---- + lua d.len = vim.funcref"Mylen" -- assign d as 'self' + lua res = (d.len() == vim.funcref"len"(vim.eval"l")) and "OK" or "FAIL" + call assert_equal("OK", luaeval('res')) ++ ++ lua i1, i2, msg, d, res = nil + endfunc + + " Test vim.type() +*************** +*** 496,502 **** + call assert_equal('hello', luaeval('str')) + call assert_equal(123.0, luaeval('num')) + +! lua str, num = nil, nil + call delete('Xlua_file') + endfunc + +--- 526,532 ---- + call assert_equal('hello', luaeval('str')) + call assert_equal(123.0, luaeval('num')) + +! lua str, num = nil + call delete('Xlua_file') + endfunc + +*************** +*** 512,518 **** + let msg = split(execute('message'), "\n")[-1] + call assert_equal('str=foo, num=321', msg) + +! lua str, num = nil, nil + call delete('Xlua_file') + bwipe! + endfunc +--- 542,560 ---- + let msg = split(execute('message'), "\n")[-1] + call assert_equal('str=foo, num=321', msg) + +! lua str, num = nil +! call delete('Xlua_file') +! bwipe! +! endfunc +! +! " Test :luafile with syntax error +! func Test_luafile_error() +! new Xlua_file +! call writefile(['nil = 0' ], 'Xlua_file') +! call setfperm('Xlua_file', 'r-xr-xr-x') +! +! call assert_fails('luafile Xlua_file', "Xlua_file:1: unexpected symbol near 'nil'") +! + call delete('Xlua_file') + bwipe! + endfunc +*** ../vim-8.1.0135/src/version.c 2018-07-01 16:43:59.850736541 +0200 +--- src/version.c 2018-07-01 19:47:47.126402301 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 136, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +165. You have a web page burned into your glasses + + /// 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 /// diff --git a/data/vim/patches/8.1.0137 b/data/vim/patches/8.1.0137 new file mode 100644 index 000000000..22e45b23d --- /dev/null +++ b/data/vim/patches/8.1.0137 @@ -0,0 +1,137 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0137 +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.0137 +Problem: CI does not run with TCL. +Solution: Add TCL to the travis config. (Dominique Pelle, closes #3133) +Files: .travis.yml + + +*** ../vim-8.1.0136/.travis.yml 2018-04-12 20:05:02.000000000 +0200 +--- .travis.yml 2018-07-01 21:11:02.830191643 +0200 +*************** +*** 11,28 **** + + env: + - BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp'" + - BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes + - BUILD=yes TEST=test COVERAGE=no FEATURES=normal CONFOPT= SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow CHECK_AUTOCONF=no + - BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + - BUILD=yes TEST=test COVERAGE=no FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + # Mac OSX build + - BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'" + # ASAN build + - BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" + FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'" + + sudo: false + +--- 11,28 ---- + + env: + - BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + - BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes + - BUILD=yes TEST=test COVERAGE=no FEATURES=normal CONFOPT= SHADOWOPT="-C src/shadow" SRCDIR=./src/shadow CHECK_AUTOCONF=no + - BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + - BUILD=yes TEST=test COVERAGE=no FEATURES=tiny CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + # Mac OSX build + - BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + # ASAN build + - BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" + FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + + sudo: false + +*************** +*** 39,54 **** + env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + - os: osx + env: BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp'" + - os: osx + env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" + FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'" + - os: linux + compiler: clang + env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" + FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'" + - os: linux + compiler: clang + env: BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes +--- 39,54 ---- + env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + - os: osx + env: BUILD=yes TEST=scripttests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + - os: osx + env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" + FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + - os: linux + compiler: clang + env: BUILD=yes TEST=test SANITIZER_CFLAGS="-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize=address -fno-omit-frame-pointer" + FEATURES=huge SRCDIR=./src CHECK_AUTOCONF=no ASAN_OPTIONS="print_stacktrace=1 log_path=asan" LSAN_OPTIONS="suppressions=$TRAVIS_BUILD_DIR/src/testdir/lsan-suppress.txt" +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + - os: linux + compiler: clang + env: BUILD=no TEST=unittests COVERAGE=yes CFLAGS=--coverage LDFLAGS=--coverage FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=yes +*************** +*** 57,63 **** + env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + - os: linux + env: BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp'" + + branches: + except: +--- 57,63 ---- + env: BUILD=yes TEST=test COVERAGE=no FEATURES=small CONFOPT= SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no + - os: linux + env: BUILD=yes TEST=test COVERAGE=no FEATURES=huge SHADOWOPT= SRCDIR=./src CHECK_AUTOCONF=no +! "CONFOPT='--enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-luainterp --enable-tclinterp'" + + branches: + except: +*************** +*** 75,80 **** +--- 75,81 ---- + - liblua5.2-dev + - lua5.2 + - ruby-dev ++ - tcl-dev + - cscope + - libgtk2.0-dev + +*** ../vim-8.1.0136/src/version.c 2018-07-01 19:49:23.605793273 +0200 +--- src/version.c 2018-07-01 21:12:17.361760352 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 137, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +166. You have been on your computer soo long that you didn't realize + you had grandchildren. + + /// 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 /// diff --git a/data/vim/patches/8.1.0138 b/data/vim/patches/8.1.0138 new file mode 100644 index 000000000..14beff0f8 --- /dev/null +++ b/data/vim/patches/8.1.0138 @@ -0,0 +1,153 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0138 +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.0138 +Problem: Negative value of 'softtabstop' not used correctly. +Solution: Use get_sts_value(). (Tom Ryder) +Files: src/edit.c, src/option.c, src/Makefile, src/testdir/test_tab.vim + + +*** ../vim-8.1.0137/src/edit.c 2018-06-23 19:22:45.602486336 +0200 +--- src/edit.c 2018-07-02 20:48:14.924888068 +0200 +*************** +*** 9373,9379 **** + if (p_sta && in_indent) + want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw; + else +! want_vcol = tabstop_start(want_vcol, curbuf->b_p_sts, + curbuf->b_p_vsts_array); + #else + want_vcol = (want_vcol / ts) * ts; +--- 9373,9379 ---- + if (p_sta && in_indent) + want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw; + else +! want_vcol = tabstop_start(want_vcol, get_sts_value(), + curbuf->b_p_vsts_array); + #else + want_vcol = (want_vcol / ts) * ts; +*************** +*** 10203,10211 **** + temp = (int)curbuf->b_p_sw; + temp -= get_nolist_virtcol() % temp; + } +! else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts > 0) + /* use 'softtabstop' when set */ +! temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_sts, + curbuf->b_p_vsts_array); + else /* otherwise use 'tabstop' */ + temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts, +--- 10203,10211 ---- + temp = (int)curbuf->b_p_sw; + temp -= get_nolist_virtcol() % temp; + } +! else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0) + /* use 'softtabstop' when set */ +! temp = tabstop_padding(get_nolist_virtcol(), get_sts_value(), + curbuf->b_p_vsts_array); + else /* otherwise use 'tabstop' */ + temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts, +*** ../vim-8.1.0137/src/option.c 2018-06-28 22:22:56.229315623 +0200 +--- src/option.c 2018-07-02 20:21:42.957136087 +0200 +*************** +*** 13016,13022 **** + + /* + * Return the effective softtabstop value for the current buffer, using the +! * 'tabstop' value when 'softtabstop' is negative. + */ + long + get_sts_value(void) +--- 13016,13022 ---- + + /* + * Return the effective softtabstop value for the current buffer, using the +! * 'shiftwidth' value when 'softtabstop' is negative. + */ + long + get_sts_value(void) +*** ../vim-8.1.0137/src/Makefile 2018-06-30 21:50:16.852674935 +0200 +--- src/Makefile 2018-07-02 20:29:59.606438353 +0200 +*************** +*** 2288,2293 **** +--- 2288,2294 ---- + test_syn_attr \ + test_syntax \ + test_system \ ++ test_tab \ + test_tabline \ + test_tabpage \ + test_tagcase \ +*** ../vim-8.1.0137/src/testdir/test_tab.vim 2017-10-26 19:57:28.000000000 +0200 +--- src/testdir/test_tab.vim 2018-07-02 20:47:37.277090611 +0200 +*************** +*** 1,3 **** +--- 1,4 ---- ++ " Various tests for inserting a Tab. + + " Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set. + " Also test that dv_ works correctly +*************** +*** 43,45 **** +--- 44,81 ---- + enew! + set expandtab& smartindent& copyindent& ts& sw& sts& + endfunc ++ ++ func Test_softtabstop() ++ new ++ set sts=0 sw=0 ++ exe "normal ix\<Tab>x\<Esc>" ++ call assert_equal("x\tx", getline(1)) ++ ++ call setline(1, '') ++ set sts=4 ++ exe "normal ix\<Tab>x\<Esc>" ++ call assert_equal("x x", getline(1)) ++ ++ call setline(1, '') ++ set sts=-1 sw=4 ++ exe "normal ix\<Tab>x\<Esc>" ++ call assert_equal("x x", getline(1)) ++ ++ call setline(1, 'x ') ++ set sts=0 sw=0 backspace=start ++ exe "normal A\<BS>x\<Esc>" ++ call assert_equal("x x", getline(1)) ++ ++ call setline(1, 'x ') ++ set sts=4 ++ exe "normal A\<BS>x\<Esc>" ++ call assert_equal("x x", getline(1)) ++ ++ call setline(1, 'x ') ++ set sts=-1 sw=4 ++ exe "normal A\<BS>x\<Esc>" ++ call assert_equal("x x", getline(1)) ++ ++ set sts=0 sw=0 backspace& ++ bwipe! ++ endfunc +*** ../vim-8.1.0137/src/version.c 2018-07-01 21:12:49.765572778 +0200 +--- src/version.c 2018-07-02 20:19:59.125722660 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 138, + /**/ + +-- +"Hit any key to continue" is very confusing when you have two keyboards. + + /// 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 /// diff --git a/data/vim/patches/8.1.0139 b/data/vim/patches/8.1.0139 new file mode 100644 index 000000000..69bdcfc6f --- /dev/null +++ b/data/vim/patches/8.1.0139 @@ -0,0 +1,86 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0139 +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.0139 +Problem: Lua tests fail on some platforms. +Solution: Accept a hex number with and without "0x". (Ken Takata, + closes #3137) +Files: src/testdir/test_lua.vim + + +*** ../vim-8.1.0138/src/testdir/test_lua.vim 2018-07-01 19:49:23.605793273 +0200 +--- src/testdir/test_lua.vim 2018-07-02 22:51:02.549409377 +0200 +*************** +*** 305,311 **** + lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}")) + call assert_equal([123.0, 'abc', v:true, v:false, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l) + call assert_equal(6.0, luaeval('#l')) +! call assert_match('^list: 0x\x\+$', luaeval('tostring(l)')) + + lua l[0] = 124 + lua l[4] = nil +--- 305,311 ---- + lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}")) + call assert_equal([123.0, 'abc', v:true, v:false, [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}], l) + call assert_equal(6.0, luaeval('#l')) +! call assert_match('^list: \%(0x\)\?\x\+$', luaeval('tostring(l)')) + + lua l[0] = 124 + lua l[4] = nil +*************** +*** 358,364 **** + + call assert_equal('[1.0, 2.0, [...]]', string(luaeval('l'))) + +! call assert_match('^list: 0x\x\+$', luaeval('tostring(l)')) + call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[2])')) + + call assert_equal(luaeval('l'), luaeval('l[2]')) +--- 358,364 ---- + + call assert_equal('[1.0, 2.0, [...]]', string(luaeval('l'))) + +! call assert_match('^list: \%(0x\)\?\x\+$', luaeval('tostring(l)')) + call assert_equal(luaeval('tostring(l)'), luaeval('tostring(l[2])')) + + call assert_equal(luaeval('l'), luaeval('l[2]')) +*************** +*** 380,386 **** + lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}") + call assert_equal({'0':123.0, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d) + call assert_equal(6.0, luaeval('#d')) +! call assert_match('^dict: 0x\x\+$', luaeval('tostring(d)')) + + call assert_equal('abc', luaeval('d[1]')) + +--- 380,386 ---- + lua d[5] = vim.eval("{'a':1, 'b':2, 'c':3}") + call assert_equal({'0':123.0, '1':'abc', '2':v:true, '3':v:false, '4': [1, 2, 3], '5': {'a':1, 'b':2, 'c':3}}, d) + call assert_equal(6.0, luaeval('#d')) +! call assert_match('^dict: \%(0x\)\?\x\+$', luaeval('tostring(d)')) + + call assert_equal('abc', luaeval('d[1]')) + +*** ../vim-8.1.0138/src/version.c 2018-07-02 20:51:21.035882093 +0200 +--- src/version.c 2018-07-02 22:52:54.644808570 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 139, + /**/ + +-- +An error has occurred. Hit any user to continue. + + /// 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 /// diff --git a/data/vim/patches/8.1.0140 b/data/vim/patches/8.1.0140 new file mode 100644 index 000000000..cbf5b77b1 --- /dev/null +++ b/data/vim/patches/8.1.0140 @@ -0,0 +1,108 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0140 +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.0140 +Problem: Recording into a register has focus events. (Michael Naumann) +Solution: Don't record K_FOCUSGAINED and K_FOCUSLOST. (closes #3143) +Files: src/getchar.c + + +*** ../vim-8.1.0139/src/getchar.c 2018-06-12 21:35:37.518665900 +0200 +--- src/getchar.c 2018-07-03 14:44:36.364310432 +0200 +*************** +*** 1246,1272 **** + static void + gotchars(char_u *chars, int len) + { +! char_u *s = chars; +! int c; +! char_u buf[2]; +! int todo = len; + +- /* remember how many chars were last recorded */ +- if (reg_recording != 0) +- last_recorded_len += len; +- +- buf[1] = NUL; + while (todo--) + { + /* Handle one byte at a time; no translation to be done. */ +! c = *s++; +! updatescript(c); + + if (reg_recording != 0) + { +! buf[0] = c; +! add_buff(&recordbuff, buf, 1L); + } + } + may_sync_undo(); + +--- 1246,1288 ---- + static void + gotchars(char_u *chars, int len) + { +! char_u *s = chars; +! int i; +! static char_u buf[4]; +! static int buflen = 0; +! int todo = len; + + while (todo--) + { ++ buf[buflen++] = *s++; ++ ++ // When receiving a special key sequence, store it until we have all ++ // the bytes and we can decide what to do with it. ++ if (buflen == 1 && buf[0] == K_SPECIAL) ++ continue; ++ if (buflen == 2) ++ continue; ++ if (buflen == 3 && buf[1] == KS_EXTRA ++ && (buf[2] == KE_FOCUSGAINED || buf[2] == KE_FOCUSLOST)) ++ { ++ // Drop K_FOCUSGAINED and K_FOCUSLOST, they are not useful in a ++ // recording. ++ buflen = 0; ++ continue; ++ } ++ + /* Handle one byte at a time; no translation to be done. */ +! for (i = 0; i < buflen; ++i) +! updatescript(buf[i]); + + if (reg_recording != 0) + { +! buf[buflen] = NUL; +! add_buff(&recordbuff, buf, (long)buflen); +! /* remember how many chars were last recorded */ +! last_recorded_len += buflen; + } ++ buflen = 0; + } + may_sync_undo(); + +*** ../vim-8.1.0139/src/version.c 2018-07-02 22:54:32.488278811 +0200 +--- src/version.c 2018-07-03 14:40:15.567864170 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 140, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +171. You invent another person and chat with yourself in empty chat rooms. + + /// 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 /// diff --git a/data/vim/patches/8.1.0141 b/data/vim/patches/8.1.0141 new file mode 100644 index 000000000..40b1a6775 --- /dev/null +++ b/data/vim/patches/8.1.0141 @@ -0,0 +1,558 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0141 +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.0141 +Problem: :cexpr no longer jumps to the first error. +Solution: Use the quickfix list identifier. (Yegappan Lakshmanan, + closes #3092) +Files: src/quickfix.c, src/testdir/test_quickfix.vim + + +*** ../vim-8.1.0140/src/quickfix.c 2018-06-18 21:53:23.514826893 +0200 +--- src/quickfix.c 2018-07-03 16:50:52.302649159 +0200 +*************** +*** 2231,2237 **** + } + + /* +! * When loading a file from the quickfix, the auto commands may modify it. + * This may invalidate the current quickfix entry. This function checks + * whether an entry is still present in the quickfix list. + * Similar to location list. +--- 2231,2237 ---- + } + + /* +! * When loading a file from the quickfix, the autocommands may modify it. + * This may invalidate the current quickfix entry. This function checks + * whether an entry is still present in the quickfix list. + * Similar to location list. +*************** +*** 2579,2585 **** + if (win->w_llist == NULL) + { + win->w_llist = ll_ref; +! ll_ref->qf_refcount++; + } + } + +--- 2579,2586 ---- + if (win->w_llist == NULL) + { + win->w_llist = ll_ref; +! if (ll_ref != NULL) +! ll_ref->qf_refcount++; + } + } + +*************** +*** 2986,2993 **** + if (curbuf == old_curbuf) + setpcmark(); + +! qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col, qf_ptr->qf_viscol, +! qf_ptr->qf_pattern); + + #ifdef FEAT_FOLDING + if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped) +--- 2987,2995 ---- + if (curbuf == old_curbuf) + setpcmark(); + +! if (qf_ptr != NULL) +! qf_jump_goto_line(qf_ptr->qf_lnum, qf_ptr->qf_col, +! qf_ptr->qf_viscol, qf_ptr->qf_pattern); + + #ifdef FEAT_FOLDING + if ((fdo_flags & FDO_QUICKFIX) && old_KeyTyped) +*************** +*** 4056,4061 **** +--- 4058,4078 ---- + } + + /* ++ * Return the quickfix/location list number with the given identifier. ++ * Returns -1 if list is not found. ++ */ ++ static int ++ qf_id2nr(qf_info_T *qi, int_u qfid) ++ { ++ int qf_idx; ++ ++ for (qf_idx = 0; qf_idx < qi->qf_listcount; qf_idx++) ++ if (qi->qf_lists[qf_idx].qf_id == qfid) ++ return qf_idx; ++ return INVALID_QFIDX; ++ } ++ ++ /* + * Return TRUE when using ":vimgrep" for ":grep". + */ + int +*************** +*** 4083,4088 **** +--- 4100,4106 ---- + qf_info_T *qi = &ql_info; + int res; + char_u *au_name = NULL; ++ int_u save_qfid; + + /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */ + if (grep_internal(eap->cmdidx)) +*************** +*** 4161,4181 **** + && eap->cmdidx != CMD_lgrepadd), + qf_cmdtitle(*eap->cmdlinep), enc); + if (wp != NULL) + qi = GET_LOC_LIST(wp); +! if (res >= 0 && qi != NULL) + qf_list_changed(qi, qi->qf_curlist); + if (au_name != NULL) +- { + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); +! if (qi != NULL && qi->qf_curlist < qi->qf_listcount) +! res = qi->qf_lists[qi->qf_curlist].qf_count; +! else +! res = 0; +! } +! if (res > 0 && !eap->forceit) + qf_jump(qi, 0, 0, FALSE); /* display first error */ + + mch_remove(fname); + vim_free(fname); + vim_free(cmd); +--- 4179,4206 ---- + && eap->cmdidx != CMD_lgrepadd), + qf_cmdtitle(*eap->cmdlinep), enc); + if (wp != NULL) ++ { + qi = GET_LOC_LIST(wp); +! if (qi == NULL) +! goto cleanup; +! } +! if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); ++ // Remember the current quickfix list identifier, so that we can ++ // check for autocommands changing the current quickfix list. ++ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); +! if (res > 0 && !eap->forceit && qflist_valid(wp, save_qfid)) +! { +! // If autocommands changed the current list, then restore it +! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) +! qi->qf_curlist = qf_id2nr(qi, save_qfid); + qf_jump(qi, 0, 0, FALSE); /* display first error */ ++ } + ++ cleanup: + mch_remove(fname); + vim_free(fname); + vim_free(cmd); +*************** +*** 4502,4508 **** + win_T *wp = NULL; + qf_info_T *qi = &ql_info; + char_u *au_name = NULL; +! int save_qfid = 0; /* init for gcc */ + int res; + + switch (eap->cmdidx) +--- 4527,4533 ---- + win_T *wp = NULL; + qf_info_T *qi = &ql_info; + char_u *au_name = NULL; +! int_u save_qfid = 0; /* init for gcc */ + int res; + + switch (eap->cmdidx) +*************** +*** 4555,4589 **** + && eap->cmdidx != CMD_laddfile), + qf_cmdtitle(*eap->cmdlinep), enc); + if (wp != NULL) + qi = GET_LOC_LIST(wp); +! if (res >= 0 && qi != NULL) + qf_list_changed(qi, qi->qf_curlist); +! if (qi != NULL) +! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf); + +! /* An autocmd might have freed the quickfix/location list. Check whether it +! * is still valid. */ +! if (qi != NULL && !qflist_valid(wp, save_qfid)) +! return; +! if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile)) + qf_jump(qi, 0, 0, eap->forceit); /* display first error */ +! } +! +! /* +! * Return the quickfix/location list number with the given identifier. +! * Returns -1 if list is not found. +! */ +! static int +! qf_id2nr(qf_info_T *qi, int_u qfid) +! { +! int qf_idx; +! +! for (qf_idx = 0; qf_idx < qi->qf_listcount; qf_idx++) +! if (qi->qf_lists[qf_idx].qf_id == qfid) +! return qf_idx; +! return INVALID_QFIDX; + } + + /* +--- 4580,4606 ---- + && eap->cmdidx != CMD_laddfile), + qf_cmdtitle(*eap->cmdlinep), enc); + if (wp != NULL) ++ { + qi = GET_LOC_LIST(wp); +! if (qi == NULL) +! return; +! } +! if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); +! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf); + +! // Jump to the first error for a new list and if autocmds didn't +! // free the list. +! if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile) +! && qflist_valid(wp, save_qfid)) +! { +! // If autocommands changed the current list, then restore it +! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) +! qi->qf_curlist = qf_id2nr(qi, save_qfid); + qf_jump(qi, 0, 0, eap->forceit); /* display first error */ +! } + } + + /* +*************** +*** 5070,5075 **** +--- 5087,5096 ---- + if (!qflist_valid(wp, save_qfid)) + goto theend; + ++ // If autocommands changed the current list, then restore it ++ if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) ++ qi->qf_curlist = qf_id2nr(qi, save_qfid); ++ + /* Jump to first match. */ + if (qi->qf_lists[qi->qf_curlist].qf_count > 0) + { +*************** +*** 5162,5168 **** + /* need to open the memfile before putting the buffer in a window */ + if (ml_open(newbuf) == OK) + { +! /* Make sure this buffer isn't wiped out by auto commands. */ + ++newbuf->b_locked; + + /* set curwin/curbuf to buf and save a few things */ +--- 5183,5189 ---- + /* need to open the memfile before putting the buffer in a window */ + if (ml_open(newbuf) == OK) + { +! /* Make sure this buffer isn't wiped out by autocommands. */ + ++newbuf->b_locked; + + /* set curwin/curbuf to buf and save a few things */ +*************** +*** 6205,6210 **** +--- 6226,6233 ---- + qf_info_T *qi = &ql_info; + char_u *au_name = NULL; + int res; ++ int_u save_qfid; ++ win_T *wp = NULL; + + switch (eap->cmdidx) + { +*************** +*** 6233,6238 **** +--- 6256,6262 ---- + qi = ll_get_or_alloc_list(curwin); + if (qi == NULL) + return; ++ wp = curwin; + } + + if (*eap->arg == NUL) +*************** +*** 6271,6276 **** +--- 6295,6304 ---- + qf_title, NULL); + if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); ++ ++ // Remember the current quickfix list identifier, so that we can ++ // check for autocommands changing the current quickfix list. ++ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; + if (au_name != NULL) + { + buf_T *curbuf_old = curbuf; +*************** +*** 6282,6290 **** + // be invalid. + res = 0; + } + if (res > 0 && (eap->cmdidx == CMD_cbuffer || +! eap->cmdidx == CMD_lbuffer)) + qf_jump(qi, 0, 0, eap->forceit); /* display first error */ + } + } + } +--- 6310,6326 ---- + // be invalid. + res = 0; + } ++ // Jump to the first error for a new list and if autocmds didn't ++ // free the list. + if (res > 0 && (eap->cmdidx == CMD_cbuffer || +! eap->cmdidx == CMD_lbuffer) +! && qflist_valid(wp, save_qfid)) +! { +! // If autocommands changed the current list, then restore it +! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) +! qi->qf_curlist = qf_id2nr(qi, save_qfid); + qf_jump(qi, 0, 0, eap->forceit); /* display first error */ ++ } + } + } + } +*************** +*** 6301,6306 **** +--- 6337,6344 ---- + qf_info_T *qi = &ql_info; + char_u *au_name = NULL; + int res; ++ int_u save_qfid; ++ win_T *wp = NULL; + + switch (eap->cmdidx) + { +*************** +*** 6328,6333 **** +--- 6366,6372 ---- + qi = ll_get_or_alloc_list(curwin); + if (qi == NULL) + return; ++ wp = curwin; + } + + /* Evaluate the expression. When the result is a string or a list we can +*************** +*** 6345,6358 **** + qf_cmdtitle(*eap->cmdlinep), NULL); + if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); + if (res > 0 && (eap->cmdidx == CMD_cexpr + || eap->cmdidx == CMD_lexpr) +! && qi == GET_LOC_LIST(curwin)) +! // Jump to the first error if autocmds didn't free the list. + qf_jump(qi, 0, 0, eap->forceit); + } + else + EMSG(_("E777: String or List expected")); +--- 6384,6408 ---- + qf_cmdtitle(*eap->cmdlinep), NULL); + if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); ++ ++ // Remember the current quickfix list identifier, so that we can ++ // check for autocommands changing the current quickfix list. ++ save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; + if (au_name != NULL) + apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, + curbuf->b_fname, TRUE, curbuf); ++ ++ // Jump to the first error for a new list and if autocmds didn't ++ // free the list. + if (res > 0 && (eap->cmdidx == CMD_cexpr + || eap->cmdidx == CMD_lexpr) +! && qflist_valid(wp, save_qfid)) +! { +! // If autocommands changed the current list, then restore it +! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid) +! qi->qf_curlist = qf_id2nr(qi, save_qfid); + qf_jump(qi, 0, 0, eap->forceit); ++ } + } + else + EMSG(_("E777: String or List expected")); +*** ../vim-8.1.0140/src/testdir/test_quickfix.vim 2018-06-18 20:52:09.553050181 +0200 +--- src/testdir/test_quickfix.vim 2018-07-03 16:50:52.302649159 +0200 +*************** +*** 3363,3375 **** + augroup END + endfunc + +! func Test_setloclist_in_aucmd() + " This was using freed memory. + augroup nasty +! au * * call setloclist(0, [], 'f') + augroup END +! lexpr "x" + augroup nasty + au! + augroup END + endfunc +--- 3363,3486 ---- + augroup END + endfunc + +! " Test for an autocmd freeing the quickfix/location list when cexpr/lexpr is +! " running +! func Xexpr_acmd_freelist(cchar) +! call s:setup_commands(a:cchar) +! + " This was using freed memory. + augroup nasty +! au * * call g:Xsetlist([], 'f') + augroup END +! Xexpr "x" + augroup nasty + au! + augroup END + endfunc ++ ++ func Test_cexpr_acmd_freelist() ++ call Xexpr_acmd_freelist('c') ++ call Xexpr_acmd_freelist('l') ++ endfunc ++ ++ " Test for commands that create a new quickfix/location list and jump to the ++ " first error automatically. ++ func Xjumpto_first_error_test(cchar) ++ call s:setup_commands(a:cchar) ++ ++ call s:create_test_file('Xtestfile1') ++ call s:create_test_file('Xtestfile2') ++ let l = ['Xtestfile1:2:Line2', 'Xtestfile2:4:Line4'] ++ ++ " Test for cexpr/lexpr ++ enew ++ Xexpr l ++ call assert_equal('Xtestfile1', bufname('')) ++ call assert_equal(2, line('.')) ++ ++ " Test for cfile/lfile ++ enew ++ call writefile(l, 'Xerr') ++ Xfile Xerr ++ call assert_equal('Xtestfile1', bufname('')) ++ call assert_equal(2, line('.')) ++ ++ " Test for cbuffer/lbuffer ++ edit Xerr ++ Xbuffer ++ call assert_equal('Xtestfile1', bufname('')) ++ call assert_equal(2, line('.')) ++ ++ call delete('Xerr') ++ call delete('Xtestfile1') ++ call delete('Xtestfile2') ++ endfunc ++ ++ func Test_jumpto_first_error() ++ call Xjumpto_first_error_test('c') ++ call Xjumpto_first_error_test('l') ++ endfunc ++ ++ " Test for a quickfix autocmd changing the quickfix/location list before ++ " jumping to the first error in the new list. ++ func Xautocmd_changelist(cchar) ++ call s:setup_commands(a:cchar) ++ ++ " Test for cfile/lfile ++ call s:create_test_file('Xtestfile1') ++ call s:create_test_file('Xtestfile2') ++ Xexpr 'Xtestfile1:2:Line2' ++ autocmd QuickFixCmdPost * Xolder ++ call writefile(['Xtestfile2:4:Line4'], 'Xerr') ++ Xfile Xerr ++ call assert_equal('Xtestfile2', bufname('')) ++ call assert_equal(4, line('.')) ++ autocmd! QuickFixCmdPost ++ ++ " Test for cbuffer/lbuffer ++ call g:Xsetlist([], 'f') ++ Xexpr 'Xtestfile1:2:Line2' ++ autocmd QuickFixCmdPost * Xolder ++ call writefile(['Xtestfile2:4:Line4'], 'Xerr') ++ edit Xerr ++ Xbuffer ++ call assert_equal('Xtestfile2', bufname('')) ++ call assert_equal(4, line('.')) ++ autocmd! QuickFixCmdPost ++ ++ " Test for cexpr/lexpr ++ call g:Xsetlist([], 'f') ++ Xexpr 'Xtestfile1:2:Line2' ++ autocmd QuickFixCmdPost * Xolder ++ Xexpr 'Xtestfile2:4:Line4' ++ call assert_equal('Xtestfile2', bufname('')) ++ call assert_equal(4, line('.')) ++ autocmd! QuickFixCmdPost ++ ++ " Test for grep/lgrep ++ call g:Xsetlist([], 'f') ++ Xexpr 'Xtestfile1:2:Line2' ++ autocmd QuickFixCmdPost * Xolder ++ silent Xgrep Line5 Xtestfile2 ++ call assert_equal('Xtestfile2', bufname('')) ++ call assert_equal(5, line('.')) ++ autocmd! QuickFixCmdPost ++ ++ " Test for vimgrep/lvimgrep ++ call g:Xsetlist([], 'f') ++ Xexpr 'Xtestfile1:2:Line2' ++ autocmd QuickFixCmdPost * Xolder ++ silent Xvimgrep Line5 Xtestfile2 ++ call assert_equal('Xtestfile2', bufname('')) ++ call assert_equal(5, line('.')) ++ autocmd! QuickFixCmdPost ++ ++ call delete('Xerr') ++ call delete('Xtestfile1') ++ call delete('Xtestfile2') ++ endfunc ++ ++ func Test_autocmd_changelist() ++ call Xautocmd_changelist('c') ++ call Xautocmd_changelist('l') ++ endfunc +*** ../vim-8.1.0140/src/version.c 2018-07-03 14:48:11.877218375 +0200 +--- src/version.c 2018-07-03 16:50:31.718764552 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 141, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +175. You send yourself e-mail before you go to bed to remind you + what to do when you wake up. + + /// 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 /// diff --git a/data/vim/patches/8.1.0142 b/data/vim/patches/8.1.0142 new file mode 100644 index 000000000..c172faa19 --- /dev/null +++ b/data/vim/patches/8.1.0142 @@ -0,0 +1,103 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0142 +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.0142 +Problem: Xterm and vt320 builtin termcap missing keypad keys. +Solution: Add the escape sequences. (Kouichi Iwamoto, closes #2973) +Files: src/term.c + + +*** ../vim-8.1.0141/src/term.c 2018-06-30 17:09:23.039956879 +0200 +--- src/term.c 2018-07-03 17:14:08.563027961 +0200 +*************** +*** 671,677 **** + /* + * VT320 is working as an ANSI terminal compatible DEC terminal. + * (it covers VT1x0, VT2x0 and VT3x0 up to VT320 on VMS as well) +- * Note: K_F1...K_F5 are for internal use, should not be defined. + * TODO:- rewrite ESC[ codes to CSI + * - keyboard languages (CSI ? 26 n) + */ +--- 671,676 ---- +*************** +*** 723,728 **** +--- 722,729 ---- + {K_DOWN, IF_EB("\033[B", ESC_STR "[B")}, + {K_RIGHT, IF_EB("\033[C", ESC_STR "[C")}, + {K_LEFT, IF_EB("\033[D", ESC_STR "[D")}, ++ // Note: cursor key sequences for application cursor mode are omitted, ++ // because they interfere with typed commands: <Esc>OA. + {K_F1, IF_EB("\033[11~", ESC_STR "[11~")}, + {K_F2, IF_EB("\033[12~", ESC_STR "[12~")}, + {K_F3, IF_EB("\033[13~", ESC_STR "[13~")}, +*************** +*** 749,759 **** +--- 750,772 ---- + {K_END, IF_EB("\033[4~", ESC_STR "[4~")}, + {K_PAGEUP, IF_EB("\033[5~", ESC_STR "[5~")}, + {K_PAGEDOWN, IF_EB("\033[6~", ESC_STR "[6~")}, ++ // These sequences starting with <Esc> O may interfere with what the user ++ // is typing. Remove these if that bothers you. + {K_KPLUS, IF_EB("\033Ok", ESC_STR "Ok")}, /* keypad plus */ + {K_KMINUS, IF_EB("\033Om", ESC_STR "Om")}, /* keypad minus */ + {K_KDIVIDE, IF_EB("\033Oo", ESC_STR "Oo")}, /* keypad / */ + {K_KMULTIPLY, IF_EB("\033Oj", ESC_STR "Oj")}, /* keypad * */ + {K_KENTER, IF_EB("\033OM", ESC_STR "OM")}, /* keypad Enter */ ++ {K_K0, IF_EB("\033Op", ESC_STR "Op")}, /* keypad 0 */ ++ {K_K1, IF_EB("\033Oq", ESC_STR "Oq")}, /* keypad 1 */ ++ {K_K2, IF_EB("\033Or", ESC_STR "Or")}, /* keypad 2 */ ++ {K_K3, IF_EB("\033Os", ESC_STR "Os")}, /* keypad 3 */ ++ {K_K4, IF_EB("\033Ot", ESC_STR "Ot")}, /* keypad 4 */ ++ {K_K5, IF_EB("\033Ou", ESC_STR "Ou")}, /* keypad 5 */ ++ {K_K6, IF_EB("\033Ov", ESC_STR "Ov")}, /* keypad 6 */ ++ {K_K7, IF_EB("\033Ow", ESC_STR "Ow")}, /* keypad 7 */ ++ {K_K8, IF_EB("\033Ox", ESC_STR "Ox")}, /* keypad 8 */ ++ {K_K9, IF_EB("\033Oy", ESC_STR "Oy")}, /* keypad 9 */ + {K_BS, "\x7f"}, /* for some reason 0177 doesn't work */ + # endif + +*************** +*** 960,965 **** +--- 973,988 ---- + {K_KMULTIPLY, IF_EB("\033O*j", ESC_STR "O*j")}, /* keypad * */ + {K_KENTER, IF_EB("\033O*M", ESC_STR "O*M")}, /* keypad Enter */ + {K_KPOINT, IF_EB("\033O*n", ESC_STR "O*n")}, /* keypad . */ ++ {K_K0, IF_EB("\033O*p", ESC_STR "O*p")}, /* keypad 0 */ ++ {K_K1, IF_EB("\033O*q", ESC_STR "O*q")}, /* keypad 1 */ ++ {K_K2, IF_EB("\033O*r", ESC_STR "O*r")}, /* keypad 2 */ ++ {K_K3, IF_EB("\033O*s", ESC_STR "O*s")}, /* keypad 3 */ ++ {K_K4, IF_EB("\033O*t", ESC_STR "O*t")}, /* keypad 4 */ ++ {K_K5, IF_EB("\033O*u", ESC_STR "O*u")}, /* keypad 5 */ ++ {K_K6, IF_EB("\033O*v", ESC_STR "O*v")}, /* keypad 6 */ ++ {K_K7, IF_EB("\033O*w", ESC_STR "O*w")}, /* keypad 7 */ ++ {K_K8, IF_EB("\033O*x", ESC_STR "O*x")}, /* keypad 8 */ ++ {K_K9, IF_EB("\033O*y", ESC_STR "O*y")}, /* keypad 9 */ + {K_KDEL, IF_EB("\033[3;*~", ESC_STR "[3;*~")}, /* keypad Del */ + {K_PS, IF_EB("\033[200~", ESC_STR "[200~")}, /* paste start */ + {K_PE, IF_EB("\033[201~", ESC_STR "[201~")}, /* paste end */ +*** ../vim-8.1.0141/src/version.c 2018-07-03 16:54:18.241509389 +0200 +--- src/version.c 2018-07-03 17:09:33.568507424 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 142, + /**/ + +-- +If Apple would build a car... +... it would be powered by the sun, be reliable, five times +as fast and twice as easy to drive; but would only run on +five percent of the roads. + + /// 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 /// diff --git a/data/vim/patches/8.1.0143 b/data/vim/patches/8.1.0143 new file mode 100644 index 000000000..d9d03c15b --- /dev/null +++ b/data/vim/patches/8.1.0143 @@ -0,0 +1,163 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0143 +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.0143 +Problem: Matchit and matchparen don't handle E363. +Solution: Catch the E363 error. (Christian Brabandt) +Files: runtime/pack/dist/opt/matchit/plugin/matchit.vim, + runtime/plugin/matchparen.vim + + +*** ../vim-8.1.0142/runtime/pack/dist/opt/matchit/plugin/matchit.vim 2017-09-15 22:24:05.000000000 +0200 +--- runtime/pack/dist/opt/matchit/plugin/matchit.vim 2018-07-03 18:08:21.939478130 +0200 +*************** +*** 1,5 **** + " matchit.vim: (global plugin) Extended "%" matching +! " Last Change: 2017 Sep 15 + " Maintainer: Benji Fisher PhD <benji@member.AMS.org> + " Version: 1.13.3, for Vim 6.3+ + " Fix from Fernando Torres included. +--- 1,5 ---- + " matchit.vim: (global plugin) Extended "%" matching +! " Last Change: 2018 Jul 3 by Christian Brabandt + " Maintainer: Benji Fisher PhD <benji@member.AMS.org> + " Version: 1.13.3, for Vim 6.3+ + " Fix from Fernando Torres included. +*************** +*** 272,278 **** + " execute "normal!" . curcol . "l" + " endif + if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) +! let skip = "0" + else + execute "if " . skip . "| let skip = '0' | endif" + endif +--- 272,278 ---- + " execute "normal!" . curcol . "l" + " endif + if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) +! let skip = '0' + else + execute "if " . skip . "| let skip = '0' | endif" + endif +*************** +*** 719,728 **** + let openpat = substitute(openpat, ',', '\\|', 'g') + let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g') + let closepat = substitute(closepat, ',', '\\|', 'g') + if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) + let skip = '0' + else +! execute "if " . skip . "| let skip = '0' | endif" + endif + mark ' + while level +--- 719,734 ---- + let openpat = substitute(openpat, ',', '\\|', 'g') + let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g') + let closepat = substitute(closepat, ',', '\\|', 'g') ++ + if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) + let skip = '0' + else +! try +! execute "if " . skip . "| let skip = '0' | endif" +! catch /^Vim\%((\a\+)\)\=:E363/ +! " We won't find anything, so skip searching, should keep Vim responsive. +! return +! endtry + endif + mark ' + while level +*** ../vim-8.1.0142/runtime/plugin/matchparen.vim 2018-06-25 00:05:55.897799652 +0200 +--- runtime/plugin/matchparen.vim 2018-07-03 18:14:30.337154571 +0200 +*************** +*** 1,6 **** + " Vim plugin for showing matching parens + " Maintainer: Bram Moolenaar <Bram@vim.org> +! " Last Change: 2017 Sep 30 + + " Exit quickly when: + " - this plugin was already loaded (or disabled) +--- 1,6 ---- + " Vim plugin for showing matching parens + " Maintainer: Bram Moolenaar <Bram@vim.org> +! " Last Change: 2018 Jul 3 + + " Exit quickly when: + " - this plugin was already loaded (or disabled) +*************** +*** 103,120 **** + call cursor(c_lnum, c_col - before) + endif + +! " Build an expression that detects whether the current cursor position is in +! " certain syntax types (string, comment, etc.), for use as searchpairpos()'s +! " skip argument. +! " We match "escape" for special items, such as lispEscapeSpecial. +! let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' . + \ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))' +! " If executing the expression determines that the cursor is currently in +! " one of the syntax types, then we want searchpairpos() to find the pair +! " within those syntax types (i.e., not skip). Otherwise, the cursor is +! " outside of the syntax types and s_skip should keep its value so we skip any +! " matching pair inside the syntax types. +! execute 'if' s_skip '| let s_skip = "0" | endif' + + " Limit the search to lines visible in the window. + let stoplinebottom = line('w$') +--- 103,130 ---- + call cursor(c_lnum, c_col - before) + endif + +! if !has("syntax") || !exists("g:syntax_on") +! let s_skip = "0" +! else +! " Build an expression that detects whether the current cursor position is +! " in certain syntax types (string, comment, etc.), for use as +! " searchpairpos()'s skip argument. +! " We match "escape" for special items, such as lispEscapeSpecial. +! let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' . + \ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))' +! " If executing the expression determines that the cursor is currently in +! " one of the syntax types, then we want searchpairpos() to find the pair +! " within those syntax types (i.e., not skip). Otherwise, the cursor is +! " outside of the syntax types and s_skip should keep its value so we skip +! " any matching pair inside the syntax types. +! " Catch if this throws E363: pattern uses more memory than 'maxmempattern'. +! try +! execute 'if ' . s_skip . ' | let s_skip = "0" | endif' +! catch /^Vim\%((\a\+)\)\=:E363/ +! " We won't find anything, so skip searching, should keep Vim responsive. +! return +! endtry +! endif + + " Limit the search to lines visible in the window. + let stoplinebottom = line('w$') +*** ../vim-8.1.0142/src/version.c 2018-07-03 17:16:55.626135028 +0200 +--- src/version.c 2018-07-03 18:16:06.620560417 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 143, + /**/ + +-- +If Microsoft would build a car... +... Occasionally, executing a maneuver such as a left turn +would cause your car to shut down and refuse to restart, in +which case you would have to reinstall the engine. + + /// 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 /// diff --git a/data/vim/patches/8.1.0144 b/data/vim/patches/8.1.0144 new file mode 100644 index 000000000..d923b9675 --- /dev/null +++ b/data/vim/patches/8.1.0144 @@ -0,0 +1,97 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0144 +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.0144 +Problem: The :cd command does not have good test coverage. +Solution: Add more tests. (Dominique Pelle, closes #2972) +Files: src/testdir/test_cd.vim + + +*** ../vim-8.1.0143/src/testdir/test_cd.vim 2017-03-19 21:32:54.000000000 +0100 +--- src/testdir/test_cd.vim 2018-07-03 18:35:26.589670346 +0200 +*************** +*** 8,13 **** +--- 8,67 ---- + func Test_cd_up_and_down() + let path = getcwd() + cd .. ++ call assert_notequal(path, getcwd()) + exe 'cd ' . path + call assert_equal(path, getcwd()) + endfunc ++ ++ func Test_cd_no_arg() ++ if has('unix') ++ " Test that cd without argument goes to $HOME directory on Unix systems. ++ let path = getcwd() ++ cd ++ call assert_equal($HOME, getcwd()) ++ call assert_notequal(path, getcwd()) ++ exe 'cd ' . path ++ call assert_equal(path, getcwd()) ++ else ++ " Test that cd without argument echoes cwd on non-Unix systems. ++ call assert_match(getcwd(), execute('cd')) ++ endif ++ endfunc ++ ++ func Test_cd_minus() ++ " Test the :cd - goes back to the previous directory. ++ let path = getcwd() ++ cd .. ++ let path_dotdot = getcwd() ++ call assert_notequal(path, path_dotdot) ++ cd - ++ call assert_equal(path, getcwd()) ++ cd - ++ call assert_equal(path_dotdot, getcwd()) ++ cd - ++ call assert_equal(path, getcwd()) ++ endfunc ++ ++ func Test_cd_with_cpo_chdir() ++ e Xfoo ++ call setline(1, 'foo') ++ let path = getcwd() ++ set cpo+=. ++ ++ " :cd should fail when buffer is modified and 'cpo' contains dot. ++ call assert_fails('cd ..', 'E747:') ++ call assert_equal(path, getcwd()) ++ ++ " :cd with exclamation mark should succeed. ++ cd! .. ++ call assert_notequal(path, getcwd()) ++ ++ " :cd should succeed when buffer has been written. ++ w! ++ exe 'cd ' . path ++ call assert_equal(path, getcwd()) ++ ++ call delete('Xfoo') ++ set cpo& ++ bw! ++ endfunc +*** ../vim-8.1.0143/src/version.c 2018-07-03 18:17:24.664083244 +0200 +--- src/version.c 2018-07-03 18:28:12.884213499 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 144, + /**/ + +-- +I'm so disorganized my keyboard isn't even in alphabetical order! + + /// 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 /// diff --git a/data/vim/patches/8.1.0145 b/data/vim/patches/8.1.0145 new file mode 100644 index 000000000..2457f5cbd --- /dev/null +++ b/data/vim/patches/8.1.0145 @@ -0,0 +1,73 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0145 +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.0145 +Problem: Test with grep is failing on MS-Windows. +Solution: Skip the test. +Files: src/testdir/test_quickfix.vim + + +*** ../vim-8.1.0144/src/testdir/test_quickfix.vim 2018-07-03 16:54:18.241509389 +0200 +--- src/testdir/test_quickfix.vim 2018-07-03 19:13:52.523893686 +0200 +*************** +*** 3457,3470 **** + call assert_equal(4, line('.')) + autocmd! QuickFixCmdPost + +! " Test for grep/lgrep +! call g:Xsetlist([], 'f') +! Xexpr 'Xtestfile1:2:Line2' +! autocmd QuickFixCmdPost * Xolder +! silent Xgrep Line5 Xtestfile2 +! call assert_equal('Xtestfile2', bufname('')) +! call assert_equal(5, line('.')) +! autocmd! QuickFixCmdPost + + " Test for vimgrep/lvimgrep + call g:Xsetlist([], 'f') +--- 3457,3473 ---- + call assert_equal(4, line('.')) + autocmd! QuickFixCmdPost + +! " The grepprg may not be set on non-Unix systems +! if has('unix') +! " Test for grep/lgrep +! call g:Xsetlist([], 'f') +! Xexpr 'Xtestfile1:2:Line2' +! autocmd QuickFixCmdPost * Xolder +! silent Xgrep Line5 Xtestfile2 +! call assert_equal('Xtestfile2', bufname('')) +! call assert_equal(5, line('.')) +! autocmd! QuickFixCmdPost +! endif + + " Test for vimgrep/lvimgrep + call g:Xsetlist([], 'f') +*** ../vim-8.1.0144/src/version.c 2018-07-03 18:36:23.041340530 +0200 +--- src/version.c 2018-07-03 19:14:29.267677389 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 145, + /**/ + +-- +If Microsoft would build a car... +... Occasionally your car would die on the freeway for no +reason. You would have to pull over to the side of the road, +close all of the car windows, shut it off, restart it, and +reopen the windows before you could continue. For some reason +you would simply accept this. + + /// 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 /// diff --git a/data/vim/patches/8.1.0146 b/data/vim/patches/8.1.0146 new file mode 100644 index 000000000..ac5393501 --- /dev/null +++ b/data/vim/patches/8.1.0146 @@ -0,0 +1,49 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0146 +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.0146 +Problem: When $LANG is set the compiler test may fail. +Solution: Unset $LANG. +Files: src/testdir/test_compiler.vim + + +*** ../vim-8.1.0145/src/testdir/test_compiler.vim Sat May 19 16:45:12 2018 +--- src/testdir/test_compiler.vim Tue Jul 3 21:24:51 2018 +*************** +*** 5,10 **** +--- 5,15 ---- + return + endif + ++ " $LANG changes the output of Perl. ++ if $LANG != '' ++ unlet $LANG ++ endif ++ + e Xfoo.pl + compiler perl + call assert_equal('perl', b:current_compiler) +*** ../vim-8.1.0145/src/version.c Tue Jul 3 19:15:56 2018 +--- src/version.c Tue Jul 3 21:25:38 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 146, + /**/ + +-- +If Microsoft would build a car... +... You'd have to press the "Start" button to turn the engine off. + + /// 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 /// diff --git a/data/vim/patches/8.1.0147 b/data/vim/patches/8.1.0147 new file mode 100644 index 000000000..dd8b126e0 --- /dev/null +++ b/data/vim/patches/8.1.0147 @@ -0,0 +1,78 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0147 +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.0147 +Problem: Compiler warning when building with Python 3.7. +Solution: #undef PySlice_GetIndicesEx before redefining it. (Ozaki Kiichi, + closes #3153) +Files: src/if_python3.c + + +*** ../vim-8.1.0146/src/if_python3.c 2018-04-14 13:54:46.000000000 +0200 +--- src/if_python3.c 2018-07-04 21:55:38.545469805 +0200 +*************** +*** 167,172 **** +--- 167,177 ---- + # define PySequence_Fast py3_PySequence_Fast + # define PyTuple_Size py3_PyTuple_Size + # define PyTuple_GetItem py3_PyTuple_GetItem ++ # if PY_VERSION_HEX >= 0x030601f0 ++ # define PySlice_AdjustIndices py3_PySlice_AdjustIndices ++ # define PySlice_Unpack py3_PySlice_Unpack ++ # endif ++ # undef PySlice_GetIndicesEx + # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx + # define PyImport_ImportModule py3_PyImport_ImportModule + # define PyObject_Init py3__PyObject_Init +*************** +*** 305,310 **** +--- 310,321 ---- + static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t); + static int (*py3_PyMapping_Check)(PyObject *); + static PyObject* (*py3_PyMapping_Keys)(PyObject *); ++ # if PY_VERSION_HEX >= 0x030601f0 ++ static int (*py3_PySlice_AdjustIndices)(Py_ssize_t length, ++ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step); ++ static int (*py3_PySlice_Unpack)(PyObject *slice, ++ Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); ++ # endif + static int (*py3_PySlice_GetIndicesEx)(PySliceObject_T *r, Py_ssize_t length, + Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, + Py_ssize_t *slicelen); +*************** +*** 474,479 **** +--- 485,494 ---- + {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast}, + {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size}, + {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem}, ++ # if PY_VERSION_HEX >= 0x030601f0 ++ {"PySlice_AdjustIndices", (PYTHON_PROC*)&py3_PySlice_AdjustIndices}, ++ {"PySlice_Unpack", (PYTHON_PROC*)&py3_PySlice_Unpack}, ++ # endif + {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx}, + {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory}, + {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize}, +*** ../vim-8.1.0146/src/version.c 2018-07-03 21:26:33.820587829 +0200 +--- src/version.c 2018-07-04 22:00:23.391752084 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 147, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +177. You log off of your system because it's time to go to work. + + /// 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 /// diff --git a/data/vim/patches/8.1.0148 b/data/vim/patches/8.1.0148 new file mode 100644 index 000000000..60e8ef0a5 --- /dev/null +++ b/data/vim/patches/8.1.0148 @@ -0,0 +1,48 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0148 +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.0148 +Problem: Memory leak when using :tcl expr command. +Solution: Free the result of expression evaluation. (Dominique Pelle, + closes #3150) +Files: src/if_tcl.c + + +*** ../vim-8.1.0147/src/if_tcl.c 2017-09-16 19:58:18.000000000 +0200 +--- src/if_tcl.c 2018-07-04 22:09:29.189322096 +0200 +*************** +*** 1385,1391 **** +--- 1385,1394 ---- + if (str == NULL) + Tcl_SetResult(interp, _("invalid expression"), TCL_STATIC); + else ++ { + Tcl_SetResult(interp, str, TCL_VOLATILE); ++ vim_free(str); ++ } + err = vimerror(interp); + #else + Tcl_SetResult(interp, _("expressions disabled at compile time"), TCL_STATIC); +*** ../vim-8.1.0147/src/version.c 2018-07-04 22:03:22.110919832 +0200 +--- src/version.c 2018-07-04 22:08:39.721556114 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 148, + /**/ + +-- +Rule #1: Don't give somebody a tool that he's going to hurt himself with. + + /// 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 /// diff --git a/data/vim/patches/8.1.0149 b/data/vim/patches/8.1.0149 new file mode 100644 index 000000000..af951193b --- /dev/null +++ b/data/vim/patches/8.1.0149 @@ -0,0 +1,263 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0149 +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.0149 +Problem: The generated sessions file does not restore tabs properly if :lcd + was used in one of them. +Solution: Create the tab pages before setting the directory. (Yee Cheng + Chin, closes #3152) +Files: src/ex_docmd.c, src/testdir/test_mksession.vim + + +*** ../vim-8.1.0148/src/ex_docmd.c 2018-06-21 22:10:04.404854396 +0200 +--- src/ex_docmd.c 2018-07-04 22:21:20.461625002 +0200 +*************** +*** 5491,5497 **** + ex_autocmd(exarg_T *eap) + { + /* +! * Disallow auto commands from .exrc and .vimrc in current + * directory for security reasons. + */ + if (secure) +--- 5491,5497 ---- + ex_autocmd(exarg_T *eap) + { + /* +! * Disallow autocommands from .exrc and .vimrc in current + * directory for security reasons. + */ + if (secure) +*************** +*** 11080,11089 **** + #endif + + /* +! * Close all windows but one. + */ + if (put_line(fd, "silent only") == FAIL) + return FAIL; + + /* + * Now a :cd command to the session directory or the current directory +--- 11080,11092 ---- + #endif + + /* +! * Close all windows and tabs but one. + */ + if (put_line(fd, "silent only") == FAIL) + return FAIL; ++ if ((ssop_flags & SSOP_TABPAGES) ++ && put_line(fd, "silent tabonly") == FAIL) ++ return FAIL; + + /* + * Now a :cd command to the session directory or the current directory +*************** +*** 11193,11201 **** + */ + tab_firstwin = firstwin; /* first window in tab page "tabnr" */ + tab_topframe = topframe; + for (tabnr = 1; ; ++tabnr) + { +! int need_tabnew = FALSE; + int cnr = 1; + + if ((ssop_flags & SSOP_TABPAGES)) +--- 11196,11228 ---- + */ + tab_firstwin = firstwin; /* first window in tab page "tabnr" */ + tab_topframe = topframe; ++ if ((ssop_flags & SSOP_TABPAGES)) ++ { ++ int num_tabs; ++ ++ /* ++ * Similar to ses_win_rec() below, populate the tab pages first so ++ * later local options won't be copied to the new tabs. ++ */ ++ for (tabnr = 1; ; ++tabnr) ++ { ++ tabpage_T *tp = find_tabpage(tabnr); ++ ++ if (tp == NULL) /* done all tab pages */ ++ break; ++ ++ if (tabnr > 1 && put_line(fd, "tabnew") == FAIL) ++ return FAIL; ++ } ++ ++ num_tabs = tabnr - 1; ++ if (num_tabs > 1 && (fprintf(fd, "tabnext -%d", num_tabs - 1) < 0 ++ || put_eol(fd) == FAIL)) ++ return FAIL; ++ } + for (tabnr = 1; ; ++tabnr) + { +! int need_tabnext = FALSE; + int cnr = 1; + + if ((ssop_flags & SSOP_TABPAGES)) +*************** +*** 11215,11221 **** + tab_topframe = tp->tp_topframe; + } + if (tabnr > 1) +! need_tabnew = TRUE; + } + + /* +--- 11242,11248 ---- + tab_topframe = tp->tp_topframe; + } + if (tabnr > 1) +! need_tabnext = TRUE; + } + + /* +*************** +*** 11233,11243 **** + #endif + ) + { +! if (fputs(need_tabnew ? "tabedit " : "edit ", fd) < 0 + || ses_fname(fd, wp->w_buffer, &ssop_flags, TRUE) + == FAIL) + return FAIL; +- need_tabnew = FALSE; + if (!wp->w_arg_idx_invalid) + edited_win = wp; + break; +--- 11260,11273 ---- + #endif + ) + { +! if (need_tabnext && put_line(fd, "tabnext") == FAIL) +! return FAIL; +! need_tabnext = FALSE; +! +! if (fputs("edit ", fd) < 0 + || ses_fname(fd, wp->w_buffer, &ssop_flags, TRUE) + == FAIL) + return FAIL; + if (!wp->w_arg_idx_invalid) + edited_win = wp; + break; +*************** +*** 11245,11251 **** + } + + /* If no file got edited create an empty tab page. */ +! if (need_tabnew && put_line(fd, "tabnew") == FAIL) + return FAIL; + + /* +--- 11275,11281 ---- + } + + /* If no file got edited create an empty tab page. */ +! if (need_tabnext && put_line(fd, "tabnext") == FAIL) + return FAIL; + + /* +*************** +*** 11348,11354 **** + /* + * Wipe out an empty unnamed buffer we started in. + */ +! if (put_line(fd, "if exists('s:wipebuf') && s:wipebuf != bufnr('%')") + == FAIL) + return FAIL; + if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL) +--- 11378,11384 ---- + /* + * Wipe out an empty unnamed buffer we started in. + */ +! if (put_line(fd, "if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0") + == FAIL) + return FAIL; + if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL) +*** ../vim-8.1.0148/src/testdir/test_mksession.vim 2018-06-12 16:49:26.366028607 +0200 +--- src/testdir/test_mksession.vim 2018-07-04 22:15:48.099410298 +0200 +*************** +*** 162,167 **** +--- 162,214 ---- + call delete('Xtest_mks.out') + endfunc + ++ func Test_mksession_lcd_multiple_tabs() ++ tabnew ++ tabnew ++ lcd ++ tabfirst ++ lcd ++ mksession! Xtest_mks.out ++ tabonly ++ source Xtest_mks.out ++ call assert_true(haslocaldir(), 'Tab 1 localdir') ++ tabnext 2 ++ call assert_true(!haslocaldir(), 'Tab 2 localdir') ++ tabnext 3 ++ call assert_true(haslocaldir(), 'Tab 3 localdir') ++ call delete('Xtest_mks.out') ++ endfunc ++ ++ func Test_mksession_blank_tabs() ++ tabnew ++ tabnew ++ tabnew ++ tabnext 3 ++ mksession! Xtest_mks.out ++ tabnew ++ tabnew ++ tabnext 2 ++ source Xtest_mks.out ++ call assert_equal(4, tabpagenr('$'), 'session restore should restore number of tabs') ++ call assert_equal(3, tabpagenr(), 'session restore should restore the active tab') ++ call delete('Xtest_mks.out') ++ endfunc ++ ++ func Test_mksession_blank_windows() ++ split ++ split ++ split ++ 3 wincmd w ++ mksession! Xtest_mks.out ++ split ++ split ++ 2 wincmd w ++ source Xtest_mks.out ++ call assert_equal(4, winnr('$'), 'session restore should restore number of windows') ++ call assert_equal(3, winnr(), 'session restore should restore the active window') ++ call delete('Xtest_mks.out') ++ endfunc ++ + if has('terminal') + + func Test_mksession_terminal_shell() +*** ../vim-8.1.0148/src/version.c 2018-07-04 22:12:19.880483379 +0200 +--- src/version.c 2018-07-04 22:18:05.734679485 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 149, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +179. You wonder why your household garbage can doesn't have an + "empty recycle bin" button. + + /// 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 /// diff --git a/data/vim/patches/8.1.0150 b/data/vim/patches/8.1.0150 new file mode 100644 index 000000000..a9ee674fe --- /dev/null +++ b/data/vim/patches/8.1.0150 @@ -0,0 +1,692 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0150 +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.0150 +Problem: Insufficient test coverage for Tcl. +Solution: Add more tests. (Dominique Pelle, closes #3140) +Files: src/testdir/test_tcl.vim + + +*** ../vim-8.1.0149/src/testdir/test_tcl.vim 2017-01-29 23:18:53.000000000 +0100 +--- src/testdir/test_tcl.vim 2018-07-04 22:33:49.173452418 +0200 +*************** +*** 4,23 **** + finish + end + +! function Test_tcldo() + " Check deleting lines does not trigger ml_get error. + new + call setline(1, ['one', 'two', 'three']) + tcldo ::vim::command %d_ + bwipe! + +! " Check switching to another buffer does not trigger ml_get error. + new + let wincount = winnr('$') + call setline(1, ['one', 'two', 'three']) + tcldo ::vim::command new + call assert_equal(wincount + 1, winnr('$')) + bwipe! + bwipe! + endfunc + +--- 4,637 ---- + finish + end + +! " Helper function as there is no builtin tcleval() function similar +! " to perleval, luaevel(), pyeval(), etc. +! func TclEval(tcl_expr) +! let s = split(execute('tcl ' . a:tcl_expr), "\n") +! return (len(s) == 0) ? '' : s[-1] +! endfunc +! +! func Test_tcldo() + " Check deleting lines does not trigger ml_get error. + new + call setline(1, ['one', 'two', 'three']) + tcldo ::vim::command %d_ + bwipe! + +! " Check that switching to another buffer does not trigger ml_get error. + new + let wincount = winnr('$') + call setline(1, ['one', 'two', 'three']) + tcldo ::vim::command new + call assert_equal(wincount + 1, winnr('$')) ++ %bwipe! ++ endfunc ++ ++ " Test :tcldo with a range ++ func Test_tcldo_range() ++ new ++ call setline(1, ['line1', 'line2', 'line3', 'line4']) ++ 2,3tcldo set line [string toupper $line] ++ call assert_equal(['line1', 'LINE2', 'LINE3', 'line4'], getline(1, '$')) ++ bwipe! ++ endfunc ++ ++ " Test ::vim::beep ++ func Test_vim_beep() ++ call assert_beeps('tcl ::vim::beep') ++ call assert_fails('tcl ::vim::beep x', 'wrong # args: should be "::vim::beep"') ++ endfunc ++ ++ " Test ::vim::buffer ++ func Test_vim_buffer() ++ " Test ::vim::buffer {nr} ++ e Xfoo1 ++ call setline(1, ['foobar']) ++ let bn1 = bufnr('%') ++ let b1 = TclEval('::vim::buffer ' . bn1) ++ call assert_equal(b1, TclEval('set ::vim::current(buffer)')) ++ ++ new Xfoo2 ++ call setline(1, ['barfoo']) ++ let bn2 = bufnr('%') ++ let b2 = TclEval('::vim::buffer ' . bn2) ++ call assert_equal(b2, TclEval('set ::vim::current(buffer)')) ++ ++ call assert_match('Xfoo1$', TclEval(b1 . ' name')) ++ call assert_match('Xfoo2$', TclEval(b2 . ' name')) ++ ++ " Test ::vim::buffer exists {nr} ++ call assert_match('^[1-9]\d*$', TclEval('::vim::buffer exists ' . bn1)) ++ call assert_match('^[1-9]\d*$', TclEval('::vim::buffer exists ' . bn2)) ++ call assert_equal('0', TclEval('::vim::buffer exists 54321')) ++ ++ " Test ::vim::buffer list ++ call assert_equal('2', TclEval('llength [::vim::buffer list]')) ++ call assert_equal(b1.' '.b2, TclEval('::vim::buffer list')) ++ tcl <<EOF ++ proc eachbuf { cmd } { ++ foreach b [::vim::buffer list] { $b command $cmd } ++ } ++ EOF ++ tcl eachbuf %s/foo/FOO/g ++ b! Xfoo1 ++ call assert_equal(['FOObar'], getline(1, '$')) ++ b! Xfoo2 ++ call assert_equal(['barFOO'], getline(1, '$')) ++ ++ call assert_fails('tcl ::vim::buffer', ++ \ 'wrong # args: should be "::vim::buffer option"') ++ call assert_fails('tcl ::vim::buffer ' . bn1 . ' x', ++ \ 'wrong # args: should be "::vim::buffer bufNumber"') ++ call assert_fails('tcl ::vim::buffer 4321', 'invalid buffer number') ++ call assert_fails('tcl ::vim::buffer x', ++ \ 'bad option "x": must be exists or list') ++ call assert_fails('tcl ::vim::buffer exists', ++ \ 'wrong # args: should be "::vim::buffer exists bufNumber"') ++ call assert_fails('tcl ::vim::buffer exists x', ++ \ 'expected integer but got "x"') ++ call assert_fails('tcl ::vim::buffer list x', ++ \ 'wrong # args: should be "::vim::buffer list "') ++ ++ tcl rename eachbuf "" ++ %bwipe! ++ endfunc ++ ++ " Test ::vim::option ++ func Test_vim_option() ++ set cc=3,5 ++ ++ " Test getting option 'cc' ++ call assert_equal('3,5', TclEval('::vim::option cc')) ++ call assert_equal('3,5', &cc) ++ ++ " Test setting option 'cc' (it returns the old option value) ++ call assert_equal('3,5', TclEval('::vim::option cc +4')) ++ call assert_equal('+4', &cc) ++ call assert_equal('+4', TclEval('::vim::option cc')) ++ ++ call assert_fails('tcl ::vim::option xxx', 'unknown vimOption') ++ call assert_fails('tcl ::vim::option', ++ \ 'wrong # args: should be "::vim::option vimOption ?value?"') ++ ++ set cc& ++ endfunc ++ ++ " Test ::vim::expr ++ func Test_vim_expr() ++ call assert_equal(string(char2nr('X')), ++ \ TclEval('::vim::expr char2nr("X")')) ++ ++ call assert_fails('tcl ::vim::expr x y', ++ \ 'wrong # args: should be "::vim::expr vimExpr"') ++ endfunc ++ ++ " Test ::vim::command ++ func Test_vim_command() ++ call assert_equal('hello world', ++ \ TclEval('::vim::command {echo "hello world"}')) ++ ++ " With the -quiet option, the error should silently be ignored. ++ call assert_equal('', TclEval('::vim::command -quiet xyz')) ++ ++ call assert_fails('tcl ::vim::command', ++ \ 'wrong # args: should be "::vim::command ?-quiet? exCommand"') ++ call assert_fails('tcl ::vim::command -foo xyz', 'unknown flag: -foo') ++ call assert_fails('tcl ::vim::command xyz', ++ \ 'E492: Not an editor command: xyz') ++ ++ " With the -quiet option, the error should silently be ignored. ++ call assert_equal('', TclEval('::vim::command -quiet xyz')) ++ endfunc ++ ++ " Test ::vim::window list ++ func Test_vim_window_list() ++ e Xfoo1 ++ new Xfoo2 ++ let w2 = TclEval('set ::vim::current(window)') ++ wincmd j ++ let w1 = TclEval('set ::vim::current(window)') ++ ++ call assert_equal('2', TclEval('llength [::vim::window list]')) ++ call assert_equal(w2.' '.w1, TclEval('::vim::window list')) ++ ++ call assert_fails('tcl ::vim::window x', 'unknown option') ++ call assert_fails('tcl ::vim::window list x', ++ \ 'wrong # args: should be "::vim::window option"') ++ ++ %bwipe ++ endfunc ++ ++ " Test output messages ++ func Test_output() ++ call assert_fails('tcl puts vimerr "an error"', 'an error') ++ tcl puts vimout "a message" ++ tcl puts "another message" ++ let messages = split(execute('message'), "\n") ++ call assert_equal('a message', messages[-2]) ++ call assert_equal('another message', messages[-1]) ++ ++ call assert_fails('tcl puts', ++ \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"') ++ endfunc ++ ++ " Test $win height (get and set window height) ++ func Test_window_height() ++ new ++ ++ " Test setting window height ++ tcl $::vim::current(window) height 2 ++ call assert_equal(2, winheight(0)) ++ ++ " Test getting window height ++ call assert_equal('2', TclEval('$::vim::current(window) height')) ++ ++ call assert_fails('tcl $::vim::current(window) height 2 2', 'wrong # args:') ++ call assert_fails('tcl $::vim::current(window) height x', ++ \ 'expected integer but got "x"') ++ bwipe ++ endfunc ++ ++ " Test $win cursor (get and set cursor) ++ func Test_window_cursor() ++ new ++ call setline(1, ['line1', 'line2', 'line3', 'line5']) ++ tcl set win $::vim::current(window) ++ ++ tcl $win cursor 2 4 ++ call assert_equal([0, 2, 4, 0], getpos('.')) ++ call assert_equal('row 2 column 4', TclEval('$win cursor')) ++ ++ " When setting ::vim::lbase to 0, line/col are counted from 0 ++ " instead of 1. ++ tcl set ::vim::lbase 0 ++ call assert_equal([0, 2, 4, 0], getpos('.')) ++ call assert_equal('row 1 column 3', TclEval('$win cursor')) ++ tcl $win cursor 2 4 ++ call assert_equal([0, 3, 5, 0], getpos('.')) ++ call assert_equal('row 2 column 4', TclEval('$win cursor')) ++ tcl set ::vim::lbase 1 ++ call assert_equal('row 3 column 5', TclEval('$win cursor')) ++ call assert_equal([0, 3, 5, 0], getpos('.')) ++ ++ " test $win cursor {$var} ++ call cursor(2, 3) ++ tcl array set here [$win cursor] ++ call assert_equal([0, 2, 3, 0], getpos('.')) ++ call cursor(3, 1) ++ call assert_equal([0, 3, 1, 0], getpos('.')) ++ tcl $win cursor here ++ call assert_equal([0, 2, 3, 0], getpos('.')) ++ call cursor(3, 1) ++ call assert_equal([0, 3, 1, 0], getpos('.')) ++ tcl $win cursor $here(row) $here(column) ++ call assert_equal([0, 2, 3, 0], getpos('.')) ++ ++ call assert_fails('tcl $win cursor 1 1 1', 'wrong # args:') ++ ++ tcl unset win here ++ bwipe! ++ endfunc ++ ++ " Test $win buffer ++ func Test_window_buffer() ++ new Xfoo1 ++ new Xfoo2 ++ tcl set b2 $::vim::current(buffer) ++ tcl set w2 $::vim::current(window) ++ wincmd j ++ tcl set b1 $::vim::current(buffer) ++ tcl set w1 $::vim::current(window) ++ ++ call assert_equal(TclEval('set b1'), TclEval('$w1 buffer')) ++ call assert_equal(TclEval('set b2'), TclEval('$w2 buffer')) ++ call assert_equal(string(bufnr('Xfoo1')), TclEval('[$w1 buffer] number')) ++ call assert_equal(string(bufnr('Xfoo2')), TclEval('[$w2 buffer] number')) ++ ++ call assert_fails('tcl $w1 buffer x', 'wrong # args:') ++ ++ tcl unset b1 b2 w1 w2 ++ %bwipe ++ endfunc ++ ++ " Test $win command ++ func Test_window_command() ++ new Xfoo1 ++ call setline(1, ['FOObar']) ++ new Xfoo2 ++ call setline(1, ['fooBAR']) ++ tcl set w2 $::vim::current(window) ++ wincmd j ++ tcl set w1 $::vim::current(window) ++ ++ tcl $w1 command "norm VU" ++ tcl $w2 command "norm Vu" ++ b! Xfoo1 ++ call assert_equal('FOOBAR', getline(1)) ++ b! Xfoo2 ++ call assert_equal('foobar', getline(1)) ++ ++ call assert_fails('tcl $w1 command xyz', ++ \ 'E492: Not an editor command: xyz') ++ tcl $w1 command -quiet xyz ++ ++ tcl unset w1 w2 ++ %bwipe! ++ endfunc ++ ++ " Test $win expr ++ func Test_window_expr() ++ new Xfoo1 ++ new Xfoo2 ++ tcl set w2 $::vim::current(window) ++ wincmd j ++ tcl set w1 $::vim::current(window) ++ ++ call assert_equal('Xfoo1', TclEval('$w1 expr bufname("%")')) ++ call assert_equal('Xfoo2', TclEval('$w2 expr bufname("%")')) ++ ++ call assert_fails('tcl $w1 expr', 'wrong # args:') ++ call assert_fails('tcl $w1 expr x x', 'wrong # args:') ++ ++ tcl unset w1 w2 ++ %bwipe ++ endfunc ++ ++ " Test $win option ++ func Test_window_option() ++ new Xfoo1 ++ new Xfoo2 ++ tcl set w2 $::vim::current(window) ++ wincmd j ++ tcl set w1 $::vim::current(window) ++ ++ " Test setting window option ++ tcl $w1 option syntax java ++ tcl $w2 option syntax rust ++ ++ call assert_equal('java', &syntax) ++ wincmd k ++ call assert_equal('rust', &syntax) ++ ++ " Test getting window option ++ call assert_equal('java', TclEval('$w1 option syntax')) ++ call assert_equal('rust', TclEval('$w2 option syntax')) ++ ++ tcl unset w1 w2 ++ %bwipe ++ endfunc ++ ++ " Test $win delcmd {cmd} ++ func Test_window_delcmd() ++ new ++ tcl $::vim::current(window) delcmd [list set msg "window deleted"] ++ call assert_fails('tcl set msg', "can't read \"msg\": no such variable") ++ q ++ call assert_equal('window deleted', TclEval('set msg')) ++ ++ call assert_fails('tcl $::vim::current(window) delcmd', 'wrong # args') ++ ++ tcl unset msg ++ bwipe ++ endfunc ++ ++ " Test $buf name ++ func Test_buffer_name() ++ " Test buffer name with a named buffer ++ new Xfoo ++ call assert_equal(expand('%:p'), TclEval('$::vim::current(buffer) name')) ++ bwipe ++ ++ " Test buffer name with an unnamed buffer ++ new ++ call assert_equal('', TclEval('$::vim::current(buffer) name')) ++ ++ call assert_fails('tcl $::vim::current(buffer) name x', 'wrong # args:') ++ ++ bwipe ++ endfunc ++ ++ " Test $buf number ++ func Test_buffer_number() ++ new ++ call assert_equal(string(bufnr('%')), TclEval('$::vim::current(buffer) number')) ++ new ++ call assert_equal(string(bufnr('%')), TclEval('$::vim::current(buffer) number')) ++ ++ call assert_fails('tcl $::vim::current(buffer) number x', 'wrong # args:') ++ ++ %bwipe ++ endfunc ++ ++ " Test $buf count and $buf last ++ func Test_buffer_count() ++ new ++ call setline(1, ['one', 'two', 'three']) ++ call assert_equal('3', TclEval('$::vim::current(buffer) count')) ++ call assert_equal('3', TclEval('$::vim::current(buffer) last')) ++ ++ " Check that $buf count and $buf last differ when ::vim::lbase is 0. ++ tcl set ::vim::lbase 0 ++ call assert_equal('3', TclEval('$::vim::current(buffer) count')) ++ call assert_equal('2', TclEval('$::vim::current(buffer) last')) ++ ++ call assert_fails('tcl $::vim::current(buffer) count x', 'wrong # args:') ++ call assert_fails('tcl $::vim::current(buffer) last x', 'wrong # args:') ++ ++ tcl set ::vim::lbase 1 ++ bwipe! ++ endfunc ++ ++ " Test $buf delete (delete line(s) in buffer) ++ func Test_buffer_delete() ++ new ++ call setline(1, ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight']) ++ tcl $::vim::current(buffer) delete 4 6 ++ tcl $::vim::current(buffer) delete 2 ++ call assert_equal(['one', 'three', 'seven', 'eight'], getline(1, '$')) ++ ++ call assert_fails('tcl $::vim::current(buffer) delete -1', 'line number out of range') ++ call assert_fails('tcl $::vim::current(buffer) delete 0', 'line number out of range') ++ call assert_fails('tcl $::vim::current(buffer) delete 5', 'line number out of range') ++ ++ call assert_fails('tcl $::vim::current(buffer) delete', 'wrong # args:') ++ call assert_fails('tcl $::vim::current(buffer) delete 1 2 3', 'wrong # args:') ++ ++ bwipe! ++ endfunc ++ ++ " Test $buf insert (insert line(s) in buffer) ++ func Test_buffer_insert() ++ new ++ tcl set buf $::vim::current(buffer) ++ tcl $buf insert 1 "first" ++ tcl $buf insert 2 "second" ++ tcl $buf insert 2 "third" ++ tcl $buf insert 4 "fourth" ++ tcl $buf insert 1 "fifth" ++ call assert_equal(['fifth', 'first', 'third', 'second', 'fourth', ''], getline(1, '$')) ++ ++ call assert_fails('tcl $buf insert -1 "x"', 'line number out of range') ++ call assert_fails('tcl $buf insert 0 "x"', 'line number out of range') ++ call assert_fails('tcl $buf insert 7 "x"', 'line number out of range') ++ ++ tcl unset buf ++ bwipe! ++ endfunc ++ ++ " Test $buf append (append line in buffer) ++ func Test_buffer_append() ++ new ++ tcl set buf $::vim::current(buffer) ++ tcl $buf append 1 "first" ++ tcl $buf append 2 "second" ++ tcl $buf append 2 "third" ++ tcl $buf append 4 "fourth" ++ tcl $buf append 1 "fifth" ++ call assert_equal(['', 'fifth', 'first', 'third', 'second', 'fourth'], getline(1, '$')) ++ ++ call assert_fails('tcl $buf append -1 "x"', 'line number out of range') ++ call assert_fails('tcl $buf append 0 "x"', 'line number out of range') ++ call assert_fails('tcl $buf append 7 "x"', 'line number out of range') ++ ++ call assert_fails('tcl $buf append', 'wrong # args:') ++ call assert_fails('tcl $buf append 1 x x', 'wrong # args:') ++ ++ tcl unset buf ++ bwipe! ++ endfunc ++ ++ " Test $buf set (replacing line(s) in a buffer) ++ func Test_buffer_set() ++ new ++ call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5']) ++ tcl $::vim::current(buffer) set 2 a ++ call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$')) ++ tcl $::vim::current(buffer) set 3 4 b ++ call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$')) ++ tcl $::vim::current(buffer) set 4 3 c ++ call assert_equal(['line1', 'a', 'c'], getline(1, '$')) ++ ++ call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range') ++ call assert_fails('tcl $::vim::current(buffer) set 5 "x"', 'line number out of range') ++ ++ call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:') ++ bwipe! ++ endfunc ++ ++ " Test $buf get (get line(s) from buffer) ++ func Test_buffer_get() ++ new ++ call setline(1, ['first line', 'two', 'three', 'last line']) ++ tcl set buf $::vim::current(buffer) ++ ++ call assert_equal('first line', TclEval('$buf get top')) ++ call assert_equal('first line', TclEval('$buf get begin')) ++ call assert_equal('last line', TclEval('$buf get bottom')) ++ call assert_equal('last line', TclEval('$buf get last')) ++ ++ call assert_equal('first line', TclEval('$buf get 1')) ++ call assert_equal('two', TclEval('$buf get 2')) ++ call assert_equal('three', TclEval('$buf get 3')) ++ call assert_equal('last line', TclEval('$buf get 4')) ++ ++ call assert_equal('two three', TclEval('$buf get 2 3')) ++ call assert_equal('two three', TclEval('$buf get 3 2')) ++ call assert_equal('three {last line}', TclEval('$buf get 3 last')) ++ ++ call assert_fails('tcl $buf get -1', 'line number out of range') ++ call assert_fails('tcl $buf get 0', 'line number out of range') ++ call assert_fails('tcl $buf get 5', 'line number out of range') ++ call assert_fails('tcl $buf get 0 1', 'line number out of range') ++ ++ call assert_fails('tcl $::vim::current(buffer) get x', 'expected integer but got "x"') ++ call assert_fails('tcl $::vim::current(buffer) get 1 1 1', 'wrong # args:') ++ ++ tcl unset buf + bwipe! ++ endfunc ++ ++ " Test $buf mark (get position of a mark) ++ func Test_buffer_mark() ++ new ++ call setline(1, ['one', 'two', 'three', 'four']) ++ /three ++ norm! ma ++ norm! jllmB ++ ++ call assert_equal('row 3 column 1', TclEval('$::vim::current(buffer) mark a')) ++ call assert_equal('row 4 column 3', TclEval('$::vim::current(buffer) mark B')) ++ ++ call assert_fails('tcl $::vim::current(buffer) mark /', 'invalid mark name') ++ call assert_fails('tcl $::vim::current(buffer) mark z', 'mark not set') ++ call assert_fails('tcl $::vim::current(buffer) mark', 'wrong # args:') ++ ++ delmarks aB + bwipe! + endfunc + ++ " Test $buf option (test and set option in context of a buffer) ++ func Test_buffer_option() ++ new Xfoo1 ++ tcl set b1 $::vim::current(buffer) ++ new Xfoo2 ++ tcl set b2 $::vim::current(buffer) ++ ++ tcl $b1 option foldcolumn 2 ++ tcl $b2 option foldcolumn 3 ++ ++ call assert_equal(3, &foldcolumn) ++ wincmd j ++ call assert_equal(2, &foldcolumn) ++ ++ call assert_equal('2', TclEval('$b1 option foldcolumn')) ++ call assert_equal('3', TclEval('$b2 option foldcolumn')) ++ ++ call assert_fails('tcl $::vim::current(buffer) option', 'wrong # args:') ++ ++ set foldcolumn& ++ tcl unset b1 b2 ++ %bwipe ++ endfunc ++ ++ " Test $buf expr (evaluate vim expression) ++ func Test_buffer_expr() ++ new Xfoo1 ++ norm ifoo1 ++ tcl set b1 $::vim::current(buffer) ++ ++ new Xfoo2 ++ norm ifoo2 ++ tcl set b2 $::vim::current(buffer) ++ ++ call assert_equal('foo1', TclEval('$b1 expr getline(1)')) ++ call assert_equal('foo2', TclEval('$b2 expr getline(1)')) ++ ++ call assert_fails('tcl expr', 'wrong # args:') ++ ++ tcl unset b1 b2 ++ %bwipe! ++ endfunc ++ ++ " Test $buf delcmd {cmd} (command executed when buffer is deleted) ++ func Test_buffer_delcmd() ++ new Xfoo ++ split ++ tcl $::vim::current(buffer) delcmd [list set msg "buffer deleted"] ++ q ++ call assert_fails('tcl set msg', "can't read \"msg\": no such variable") ++ q ++ call assert_equal('buffer deleted', TclEval('set msg')) ++ ++ call assert_fails('tcl $::vim::current(window) delcmd', 'wrong # args') ++ call assert_fails('tcl $::vim::current(window) delcmd x x', 'wrong # args') ++ ++ tcl unset msg ++ %bwipe ++ endfunc ++ ++ func Test_vim_current() ++ " Only test errors as ::vim::current(...) is already indirectly ++ " tested by many other tests. ++ call assert_fails('tcl $::vim::current(buffer)', 'wrong # args:') ++ call assert_fails('tcl $::vim::current(window)', 'wrong # args:') ++ endfunc ++ ++ " Test $buf windows (windows list of a buffer) ++ func Test_buffer_windows() ++ new Xfoo ++ split ++ new Xbar ++ split ++ vsplit ++ ++ tcl set bar_wl [$::vim::current(buffer) windows] ++ 2wincmd j ++ tcl set foo_wl [$::vim::current(buffer) windows] ++ ++ call assert_equal('2', TclEval('llength $foo_wl')) ++ call assert_equal('3', TclEval('llength $bar_wl')) ++ ++ call assert_fails('tcl $::vim::current(buffer) windows x', 'wrong # args:') ++ ++ tcl unset bar_wl foo_wl ++ %bwipe ++ endfunc ++ ++ " Test :tclfile ++ func Test_tclfile() ++ call delete('Xtcl_file') ++ call writefile(['set pi [format "%.2f" [expr acos(-1.0)]]'], 'Xtcl_file') ++ call setfperm('Xtcl_file', 'r-xr-xr-x') ++ ++ tclfile Xtcl_file ++ call assert_equal('3.14', TclEval('set pi')) ++ ++ tcl unset pi ++ call delete('Xtcl_file') ++ endfunc ++ ++ " Test :tclfile with syntax error in tcl script ++ func Test_tclfile_error() ++ call delete('Xtcl_file') ++ call writefile(['xyz'], 'Xtcl_file') ++ call setfperm('Xtcl_file', 'r-xr-xr-x') ++ ++ call assert_fails('tclfile Xtcl_file', 'invalid command name "xyz"') ++ ++ call delete('Xtcl_file') ++ endfunc ++ ++ " Test exiting current Tcl interprepter and re-creating one. ++ func Test_tcl_exit() ++ tcl set foo "foo" ++ call assert_fails('tcl exit 3', 'E572: exit code 3') ++ ++ " The Tcl interpreter should have been deleted and a new one ++ " is re-created with the next :tcl command. ++ call assert_fails('tcl set foo', "can't read \"foo\": no such variable") ++ tcl set bar "bar" ++ call assert_equal('bar', TclEval('set bar')) ++ ++ tcl unset bar ++ endfunc +*** ../vim-8.1.0149/src/version.c 2018-07-04 22:26:24.515946368 +0200 +--- src/version.c 2018-07-04 22:36:32.324478980 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 150, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +180. You maintain more than six e-mail addresses. + + /// 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 /// diff --git a/data/vim/patches/8.1.0151 b/data/vim/patches/8.1.0151 new file mode 100644 index 000000000..34c8d0068 --- /dev/null +++ b/data/vim/patches/8.1.0151 @@ -0,0 +1,57 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0151 +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.0151 +Problem: Mksession test fails on MS-Windows. +Solution: Always use an argument for :lcd. +Files: src/testdir/test_mksession.vim + + +*** ../vim-8.1.0150/src/testdir/test_mksession.vim 2018-07-04 22:26:24.515946368 +0200 +--- src/testdir/test_mksession.vim 2018-07-04 22:42:41.126071782 +0200 +*************** +*** 165,173 **** + func Test_mksession_lcd_multiple_tabs() + tabnew + tabnew +! lcd + tabfirst +! lcd + mksession! Xtest_mks.out + tabonly + source Xtest_mks.out +--- 165,173 ---- + func Test_mksession_lcd_multiple_tabs() + tabnew + tabnew +! lcd . + tabfirst +! lcd . + mksession! Xtest_mks.out + tabonly + source Xtest_mks.out +*** ../vim-8.1.0150/src/version.c 2018-07-04 22:36:42.796407775 +0200 +--- src/version.c 2018-07-04 22:43:33.357743716 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 151, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +181. You still remember the "happy tune" your modem made + while dialing your ISP. + + /// 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 /// diff --git a/data/vim/patches/8.1.0152 b/data/vim/patches/8.1.0152 new file mode 100644 index 000000000..dc4db0b92 --- /dev/null +++ b/data/vim/patches/8.1.0152 @@ -0,0 +1,512 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0152 +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.0152 +Problem: Cannot easily run individual tests on MS-Windows. +Solution: Move the list of tests to a separate file. Add a build rule in + the MSVC makefile. +Files: Filelist, src/Makefile, src/Make_all.mak, src/Make_mvc.mak + + +*** ../vim-8.1.0151/Filelist 2018-06-30 17:08:56.064115274 +0200 +--- Filelist 2018-07-04 22:58:13.976431486 +0200 +*************** +*** 7,12 **** +--- 7,13 ---- + .lgtm.yml \ + .travis.yml \ + appveyor.yml \ ++ src/Make_all.mak \ + src/appveyor.bat \ + src/README.txt \ + src/alloc.h \ +*** ../vim-8.1.0151/src/Makefile 2018-07-02 20:51:21.035882093 +0200 +--- src/Makefile 2018-07-04 23:00:00.671802398 +0200 +*************** +*** 1524,1529 **** +--- 1524,1532 ---- + DEST_MAN_RU = $(DEST_MAN_TOP)/ru.KOI8-R$(MAN1DIR) + DEST_MAN_RU_U = $(DEST_MAN_TOP)/ru.UTF-8$(MAN1DIR) + ++ # The list of tests is common to all systems. ++ include Make_all.mak ++ + # BASIC_SRC: files that are always used + # GUI_SRC: extra GUI files for current configuration + # ALL_GUI_SRC: all GUI files for Unix +*************** +*** 2125,2327 **** + + # Run individual NEW style test. + # These do not depend on the executable, compile it when needed. +! test_arglist \ +! test_arabic \ +! test_assert \ +! test_assign \ +! test_autochdir \ +! test_autocmd \ +! test_autoload \ +! test_backspace_opt \ +! test_blockedit \ +! test_breakindent \ +! test_bufline \ +! test_bufwintabinfo \ +! test_cd \ +! test_cdo \ +! test_changedtick \ +! test_changelist \ +! test_channel \ +! test_charsearch \ +! test_charsearch_utf8 \ +! test_cindent \ +! test_clientserver \ +! test_close_count \ +! test_cmdline \ +! test_command_count \ +! test_comparators \ +! test_compiler \ +! test_crypt \ +! test_cscope \ +! test_cursor_func \ +! test_curswant \ +! test_delete \ +! test_diffmode \ +! test_digraph \ +! test_display \ +! test_edit \ +! test_erasebackword \ +! test_escaped_glob \ +! test_eval_stuff \ +! test_ex_undo \ +! test_ex_z \ +! test_exit \ +! test_exec_while_if \ +! test_execute_func \ +! test_exists \ +! test_exists_autocmd \ +! test_expand \ +! test_expand_dllpath \ +! test_expr \ +! test_expr_utf8 \ +! test_farsi \ +! test_feedkeys \ +! test_file_perm \ +! test_file_size \ +! test_fileformat \ +! test_filetype \ +! test_filter_cmd \ +! test_filter_map \ +! test_find_complete \ +! test_findfile \ +! test_fixeol \ +! test_float_func \ +! test_fnameescape \ +! test_fnamemodify \ +! test_fold \ +! test_functions \ +! test_ga \ +! test_getcwd \ +! test_getvar \ +! test_gf \ +! test_glob2regpat \ +! test_global \ +! test_gn \ +! test_goto \ +! test_gui \ +! test_gui_init \ +! test_hardcopy \ +! test_help \ +! test_help_tagjump \ +! test_hide \ +! test_highlight \ +! test_history \ +! test_hlsearch \ +! test_iminsert \ +! test_increment \ +! test_increment_dbcs \ +! test_ins_complete \ +! test_job_fails \ +! test_join \ +! test_json \ +! test_jumplist \ +! test_jumps \ +! test_lambda \ +! test_langmap \ +! test_largefile \ +! test_let \ +! test_lineending \ +! test_lispwords \ +! test_listchars \ +! test_listdict \ +! test_listlbr \ +! test_listlbr_utf8 \ +! test_lua \ +! test_makeencoding \ +! test_man \ +! test_maparg \ +! test_mapping \ +! test_marks \ +! test_match \ +! test_matchadd_conceal \ +! test_matchadd_conceal_utf8 \ +! test_menu \ +! test_messages \ +! test_mksession \ +! test_mksession_utf8 \ +! test_nested_function \ +! test_netbeans \ +! test_normal \ +! test_number \ +! test_options \ +! test_packadd \ +! test_partial \ +! test_paste \ +! test_perl \ +! test_plus_arg_edit \ +! test_popup \ +! test_preview \ +! test_profile \ +! test_prompt_buffer \ +! test_put \ +! test_python2 \ +! test_python3 \ +! test_pyx2 \ +! test_pyx3 \ +! test_quickfix \ +! test_quotestar \ +! test_recover \ +! test_regex_char_classes \ +! test_regexp_latin \ +! test_regexp_utf8 \ +! test_registers \ +! test_reltime \ +! test_retab \ +! test_ruby \ +! test_scroll_opt \ +! test_scrollbind \ +! test_search \ +! test_searchpos \ +! test_set \ +! test_sha256 \ +! test_signs \ +! test_smartindent \ +! test_sort \ +! test_source_utf8 \ +! test_spell \ +! test_startup \ +! test_startup_utf8 \ +! test_stat \ +! test_statusline \ +! test_substitute \ +! test_swap \ +! test_syn_attr \ +! test_syntax \ +! test_system \ +! test_tab \ +! test_tabline \ +! test_tabpage \ +! test_tagcase \ +! test_tagjump \ +! test_taglist \ +! test_tcl \ +! test_terminal \ +! test_terminal_fail \ +! test_textformat \ +! test_textobjects \ +! test_timers \ +! test_true_false \ +! test_undo \ +! test_unlet \ +! test_usercommands \ +! test_utf8 \ +! test_utf8_comparisons \ +! test_vartabs \ +! test_viminfo \ +! test_vimscript \ +! test_virtualedit \ +! test_visual \ +! test_winbar \ +! test_winbuf_close \ +! test_window_cmd \ +! test_window_id \ +! test_windows_home \ +! test_wordcount \ +! test_writefile \ +! test_xxd \ +! test_alot_latin \ +! test_alot_utf8 \ +! test_alot: + cd testdir; rm -f $@.res test.log messages; $(MAKE) -f Makefile $@.res VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) + @if test -f testdir/test.log; then \ + cat testdir/test.log; \ +--- 2128,2134 ---- + + # Run individual NEW style test. + # These do not depend on the executable, compile it when needed. +! $(NEW_TESTS): + cd testdir; rm -f $@.res test.log messages; $(MAKE) -f Makefile $@.res VIMPROG=../$(VIMTESTTARGET) $(GUI_TESTARG) SCRIPTSOURCE=../$(SCRIPTSOURCE) + @if test -f testdir/test.log; then \ + cat testdir/test.log; \ +*** ../vim-8.1.0151/src/Make_all.mak 2018-07-04 23:04:22.810262212 +0200 +--- src/Make_all.mak 2018-07-04 22:58:28.564345380 +0200 +*************** +*** 0 **** +--- 1,203 ---- ++ # ++ # Common Makefile, defines the list of tests to run. ++ # ++ ++ # Individual tests, including the ones part of test_alot ++ NEW_TESTS = \ ++ test_arglist \ ++ test_arabic \ ++ test_assert \ ++ test_assign \ ++ test_autochdir \ ++ test_autocmd \ ++ test_autoload \ ++ test_backspace_opt \ ++ test_blockedit \ ++ test_breakindent \ ++ test_bufline \ ++ test_bufwintabinfo \ ++ test_cd \ ++ test_cdo \ ++ test_changedtick \ ++ test_changelist \ ++ test_channel \ ++ test_charsearch \ ++ test_charsearch_utf8 \ ++ test_cindent \ ++ test_clientserver \ ++ test_close_count \ ++ test_cmdline \ ++ test_command_count \ ++ test_comparators \ ++ test_compiler \ ++ test_crypt \ ++ test_cscope \ ++ test_cursor_func \ ++ test_curswant \ ++ test_delete \ ++ test_diffmode \ ++ test_digraph \ ++ test_display \ ++ test_edit \ ++ test_erasebackword \ ++ test_escaped_glob \ ++ test_eval_stuff \ ++ test_ex_undo \ ++ test_ex_z \ ++ test_exit \ ++ test_exec_while_if \ ++ test_execute_func \ ++ test_exists \ ++ test_exists_autocmd \ ++ test_expand \ ++ test_expand_dllpath \ ++ test_expr \ ++ test_expr_utf8 \ ++ test_farsi \ ++ test_feedkeys \ ++ test_file_perm \ ++ test_file_size \ ++ test_fileformat \ ++ test_filetype \ ++ test_filter_cmd \ ++ test_filter_map \ ++ test_find_complete \ ++ test_findfile \ ++ test_fixeol \ ++ test_float_func \ ++ test_fnameescape \ ++ test_fnamemodify \ ++ test_fold \ ++ test_functions \ ++ test_ga \ ++ test_getcwd \ ++ test_getvar \ ++ test_gf \ ++ test_glob2regpat \ ++ test_global \ ++ test_gn \ ++ test_goto \ ++ test_gui \ ++ test_gui_init \ ++ test_hardcopy \ ++ test_help \ ++ test_help_tagjump \ ++ test_hide \ ++ test_highlight \ ++ test_history \ ++ test_hlsearch \ ++ test_iminsert \ ++ test_increment \ ++ test_increment_dbcs \ ++ test_ins_complete \ ++ test_job_fails \ ++ test_join \ ++ test_json \ ++ test_jumplist \ ++ test_jumps \ ++ test_lambda \ ++ test_langmap \ ++ test_largefile \ ++ test_let \ ++ test_lineending \ ++ test_lispwords \ ++ test_listchars \ ++ test_listdict \ ++ test_listlbr \ ++ test_listlbr_utf8 \ ++ test_lua \ ++ test_makeencoding \ ++ test_man \ ++ test_maparg \ ++ test_mapping \ ++ test_marks \ ++ test_match \ ++ test_matchadd_conceal \ ++ test_matchadd_conceal_utf8 \ ++ test_menu \ ++ test_messages \ ++ test_mksession \ ++ test_mksession_utf8 \ ++ test_nested_function \ ++ test_netbeans \ ++ test_normal \ ++ test_number \ ++ test_options \ ++ test_packadd \ ++ test_partial \ ++ test_paste \ ++ test_perl \ ++ test_plus_arg_edit \ ++ test_popup \ ++ test_preview \ ++ test_profile \ ++ test_prompt_buffer \ ++ test_put \ ++ test_python2 \ ++ test_python3 \ ++ test_pyx2 \ ++ test_pyx3 \ ++ test_quickfix \ ++ test_quotestar \ ++ test_recover \ ++ test_regex_char_classes \ ++ test_regexp_latin \ ++ test_regexp_utf8 \ ++ test_registers \ ++ test_reltime \ ++ test_retab \ ++ test_ruby \ ++ test_scroll_opt \ ++ test_scrollbind \ ++ test_search \ ++ test_searchpos \ ++ test_set \ ++ test_sha256 \ ++ test_signs \ ++ test_smartindent \ ++ test_sort \ ++ test_source_utf8 \ ++ test_spell \ ++ test_startup \ ++ test_startup_utf8 \ ++ test_stat \ ++ test_statusline \ ++ test_substitute \ ++ test_swap \ ++ test_syn_attr \ ++ test_syntax \ ++ test_system \ ++ test_tab \ ++ test_tabline \ ++ test_tabpage \ ++ test_tagcase \ ++ test_tagjump \ ++ test_taglist \ ++ test_tcl \ ++ test_terminal \ ++ test_terminal_fail \ ++ test_textformat \ ++ test_textobjects \ ++ test_timers \ ++ test_true_false \ ++ test_undo \ ++ test_unlet \ ++ test_usercommands \ ++ test_utf8 \ ++ test_utf8_comparisons \ ++ test_vartabs \ ++ test_viminfo \ ++ test_vimscript \ ++ test_virtualedit \ ++ test_visual \ ++ test_winbar \ ++ test_winbuf_close \ ++ test_window_cmd \ ++ test_window_id \ ++ test_windows_home \ ++ test_wordcount \ ++ test_writefile \ ++ test_xxd \ ++ test_alot_latin \ ++ test_alot_utf8 \ ++ test_alot +*** ../vim-8.1.0151/src/Make_mvc.mak 2018-06-19 18:58:04.010489820 +0200 +--- src/Make_mvc.mak 2018-07-04 23:01:41.003212115 +0200 +*************** +*** 693,698 **** +--- 693,700 ---- + ! endif + !endif # DEBUG + ++ !include Make_all.mak ++ + INCL = vim.h alloc.h arabic.h ascii.h ex_cmds.h farsi.h feature.h globals.h \ + keymap.h macros.h option.h os_dos.h os_win32.h proto.h regexp.h \ + spell.h structs.h term.h beval.h $(NBDEBUG_INCL) +*************** +*** 1296,1301 **** +--- 1298,1311 ---- + $(MAKE) /NOLOGO -f Make_dos.mak clean + cd .. + ++ $(NEW_TESTS): ++ cd testdir ++ - if exist $@.res del $@.res ++ $(MAKE) /NOLOGO -f Make_dos.mak nolog ++ $(MAKE) /NOLOGO -f Make_dos.mak $@.res ++ $(MAKE) /NOLOGO -f Make_dos.mak report ++ cd .. ++ + ########################################################################### + + # Create a default rule for transforming .c files to .obj files in $(OUTDIR) +*** ../vim-8.1.0151/src/version.c 2018-07-04 22:44:05.273544402 +0200 +--- src/version.c 2018-07-04 22:56:31.145039418 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 152, + /**/ + +-- +Wizards had always known that the act of observation changed the thing that +was observed, and sometimes forgot that it also changed the observer too. + Terry Pratchett - Interesting times + + /// 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 /// diff --git a/data/vim/patches/8.1.0153 b/data/vim/patches/8.1.0153 new file mode 100644 index 000000000..5d8a2e571 --- /dev/null +++ b/data/vim/patches/8.1.0153 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0153 +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.0153 (after 8.1.0152) +Problem: Build with SHADOWDIR fails. (Elimar Riesebieter) +Solution: Create a link for Make_all.mak. (Tony Mechelynck) +Files: src/Makefile + + +*** ../vim-8.1.0152/src/Makefile 2018-07-04 23:05:19.221931527 +0200 +--- src/Makefile 2018-07-05 17:08:32.727810237 +0200 +*************** +*** 2681,2687 **** + + shadow: runtime pixmaps + $(MKDIR_P) $(SHADOWDIR) +! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh . + mkdir $(SHADOWDIR)/auto + cd $(SHADOWDIR)/auto; ln -s ../../auto/configure . + $(MKDIR_P) $(SHADOWDIR)/po +--- 2681,2687 ---- + + shadow: runtime pixmaps + $(MKDIR_P) $(SHADOWDIR) +! cd $(SHADOWDIR); ln -s ../*.[chm] ../*.in ../*.sh ../*.xs ../*.xbm ../gui_gtk_res.xml ../toolcheck ../proto ../libvterm ../vimtutor ../gvimtutor ../install-sh ../Make_all.mak . + mkdir $(SHADOWDIR)/auto + cd $(SHADOWDIR)/auto; ln -s ../../auto/configure . + $(MKDIR_P) $(SHADOWDIR)/po +*** ../vim-8.1.0152/src/version.c 2018-07-04 23:05:19.221931527 +0200 +--- src/version.c 2018-07-05 17:09:44.847425259 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 153, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +184. You no longer ask prospective dates what their sign is, instead + your line is "Hi, what's your URL?" + + /// 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 /// diff --git a/data/vim/patches/8.1.0154 b/data/vim/patches/8.1.0154 new file mode 100644 index 000000000..c22b71b97 --- /dev/null +++ b/data/vim/patches/8.1.0154 @@ -0,0 +1,132 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0154 +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.0154 +Problem: Crash with "set smarttab shiftwidth=0 softtabstop=-1". +Solution: Fall back to using 'tabstop'. (closes #3155) +Files: src/edit.c, src/testdir/test_tab.vim + + +*** ../vim-8.1.0153/src/edit.c 2018-07-02 20:51:21.031882115 +0200 +--- src/edit.c 2018-07-05 22:23:27.440802276 +0200 +*************** +*** 9347,9366 **** + && (!*inserted_space_p + || arrow_used)))))) + { +- #ifndef FEAT_VARTABS + int ts; +- #endif + colnr_T vcol; + colnr_T want_vcol; + colnr_T start_vcol; + + *inserted_space_p = FALSE; +- #ifndef FEAT_VARTABS +- if (p_sta && in_indent) +- ts = (int)get_sw_value(curbuf); +- else +- ts = (int)get_sts_value(); +- #endif + /* Compute the virtual column where we want to be. Since + * 'showbreak' may get in the way, need to get the last column of + * the previous character. */ +--- 9347,9358 ---- +*************** +*** 9371,9381 **** + inc_cursor(); + #ifdef FEAT_VARTABS + if (p_sta && in_indent) +! want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw; + else + want_vcol = tabstop_start(want_vcol, get_sts_value(), + curbuf->b_p_vsts_array); + #else + want_vcol = (want_vcol / ts) * ts; + #endif + +--- 9363,9380 ---- + inc_cursor(); + #ifdef FEAT_VARTABS + if (p_sta && in_indent) +! { +! ts = (int)get_sw_value(curbuf); +! want_vcol = (want_vcol / ts) * ts; +! } + else + want_vcol = tabstop_start(want_vcol, get_sts_value(), + curbuf->b_p_vsts_array); + #else ++ if (p_sta && in_indent) ++ ts = (int)get_sw_value(curbuf); ++ else ++ ts = (int)get_sts_value(); + want_vcol = (want_vcol / ts) * ts; + #endif + +*************** +*** 10200,10206 **** + #ifdef FEAT_VARTABS + if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ + { +! temp = (int)curbuf->b_p_sw; + temp -= get_nolist_virtcol() % temp; + } + else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0) +--- 10199,10205 ---- + #ifdef FEAT_VARTABS + if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ + { +! temp = (int)get_sw_value(curbuf); + temp -= get_nolist_virtcol() % temp; + } + else if (tabstop_count(curbuf->b_p_vsts_array) > 0 || curbuf->b_p_sts != 0) +*** ../vim-8.1.0153/src/testdir/test_tab.vim 2018-07-02 20:51:21.035882093 +0200 +--- src/testdir/test_tab.vim 2018-07-05 22:19:41.994015889 +0200 +*************** +*** 76,81 **** + exe "normal A\<BS>x\<Esc>" + call assert_equal("x x", getline(1)) + +! set sts=0 sw=0 backspace& + bwipe! + endfunc +--- 76,90 ---- + exe "normal A\<BS>x\<Esc>" + call assert_equal("x x", getline(1)) + +! call setline(1, 'x') +! set sts=-1 sw=0 smarttab +! exe "normal I\<Tab>\<Esc>" +! call assert_equal("\tx", getline(1)) +! +! call setline(1, 'x') +! exe "normal I\<Tab>\<BS>\<Esc>" +! call assert_equal("x", getline(1)) +! +! set sts=0 sw=0 backspace& nosmarttab + bwipe! + endfunc +*** ../vim-8.1.0153/src/version.c 2018-07-05 17:11:15.726937929 +0200 +--- src/version.c 2018-07-05 22:26:36.351782249 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 154, + /**/ + +-- +A computer program does what you tell it to do, not what you want it to do. + + /// 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 /// diff --git a/data/vim/patches/8.1.0155 b/data/vim/patches/8.1.0155 new file mode 100644 index 000000000..bda4f000e --- /dev/null +++ b/data/vim/patches/8.1.0155 @@ -0,0 +1,44 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0155 +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.0155 +Problem: Evim.man missing from the distribution. +Solution: Add it to the list. +Files: Filelist + + +*** ../vim-8.1.0154/Filelist 2018-07-04 23:05:19.221931527 +0200 +--- Filelist 2018-07-05 22:56:27.346990258 +0200 +*************** +*** 710,715 **** +--- 710,716 ---- + + # runtime for Amiga (also in the extra archive) + RT_AMI_DOS = \ ++ runtime/doc/evim.man \ + runtime/doc/vim.man \ + runtime/doc/vimdiff.man \ + runtime/doc/vimtutor.man \ +*** ../vim-8.1.0154/src/version.c 2018-07-05 22:27:04.463630279 +0200 +--- src/version.c 2018-07-05 22:57:19.182722612 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 155, + /**/ + +-- +I'm in shape. Round IS a shape. + + /// 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 /// diff --git a/data/vim/patches/8.1.0156 b/data/vim/patches/8.1.0156 new file mode 100644 index 000000000..6fffda959 --- /dev/null +++ b/data/vim/patches/8.1.0156 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0156 +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.0156 +Problem: MS-Windows compiler warning. +Solution: Add a type cast. (Mike Williams) +Files: src/version.c + + +*** ../vim-8.1.0155/src/version.c 2018-07-05 22:58:12.658446246 +0200 +--- src/version.c 2018-07-06 22:50:55.951147490 +0200 +*************** +*** 61,67 **** + + strlen(VIM_VERSION_DATE_ONLY) + + strlen(date_time); + +! longVersion = (char *)alloc(len); + if (longVersion == NULL) + longVersion = VIM_VERSION_LONG; + else +--- 61,67 ---- + + strlen(VIM_VERSION_DATE_ONLY) + + strlen(date_time); + +! longVersion = (char *)alloc((unsigned)len); + if (longVersion == NULL) + longVersion = VIM_VERSION_LONG; + else +*** ../vim-8.1.0155/src/version.c 2018-07-05 22:58:12.658446246 +0200 +--- src/version.c 2018-07-06 22:50:55.951147490 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 156, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +192. Your boss asks you to "go fer" coffee and you come up with 235 FTP sites. + + /// 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 /// diff --git a/data/vim/patches/8.1.0157 b/data/vim/patches/8.1.0157 new file mode 100644 index 000000000..0608b5cdb --- /dev/null +++ b/data/vim/patches/8.1.0157 @@ -0,0 +1,76 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.01 +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.0157 +Problem: Old iTerm2 is not recognized, resulting in stray output. +Solution: Recognize the termresponse. +Files: src/term.c + + +*** ../vim-8.1.0156/src/term.c 2018-07-03 17:16:55.626135028 +0200 +--- src/term.c 2018-07-06 23:07:26.257971889 +0200 +*************** +*** 4659,4675 **** + + if (version == 95) + { +! /* Mac Terminal.app sends 1;95;0 */ + if (STRNCMP(tp + extra - 2, "1;95;0c", 7) == 0) + { + is_not_xterm = TRUE; + is_mac_terminal = TRUE; + } + # ifdef FEAT_MOUSE_SGR +! /* iTerm2 sends 0;95;0 */ + if (STRNCMP(tp + extra - 2, "0;95;0c", 7) == 0) + is_iterm2 = TRUE; + # endif + } + + /* Only set 'ttymouse' automatically if it was not set +--- 4659,4679 ---- + + if (version == 95) + { +! // Mac Terminal.app sends 1;95;0 + if (STRNCMP(tp + extra - 2, "1;95;0c", 7) == 0) + { + is_not_xterm = TRUE; + is_mac_terminal = TRUE; + } + # ifdef FEAT_MOUSE_SGR +! // iTerm2 sends 0;95;0 + if (STRNCMP(tp + extra - 2, "0;95;0c", 7) == 0) + is_iterm2 = TRUE; ++ else + # endif ++ // old iTerm2 sends 0;95; ++ if (STRNCMP(tp + extra - 2, "0;95;c", 6) == 0) ++ is_not_xterm = TRUE; + } + + /* Only set 'ttymouse' automatically if it was not set +*** ../vim-8.1.0156/src/version.c 2018-07-06 22:51:58.010808660 +0200 +--- src/version.c 2018-07-06 23:10:48.856915992 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 157, + /**/ + + +-- +Press any key to continue, press any other key to quit. + + /// 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 /// diff --git a/data/vim/patches/8.1.0158 b/data/vim/patches/8.1.0158 new file mode 100644 index 000000000..878bf2e15 --- /dev/null +++ b/data/vim/patches/8.1.0158 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0158 +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.0158 +Problem: GUI: input() fails if CTRL-C was pressed before. (Michael Naumann) +Solution: call vpeekc() to drop the CTRL-C from the input stream. +Files: src/ex_docmd.c + + +*** ../vim-8.1.0157/src/ex_docmd.c 2018-07-04 22:26:24.515946368 +0200 +--- src/ex_docmd.c 2018-07-07 16:11:37.571323580 +0200 +*************** +*** 9157,9162 **** +--- 9157,9167 ---- + parse_queued_messages(); + #endif + } ++ ++ // If CTRL-C was typed to interrupt the sleep, drop the CTRL-C from the ++ // input buffer, otherwise a following call to input() fails. ++ if (got_int) ++ (void)vpeekc(); + } + + static void +*** ../vim-8.1.0157/src/version.c 2018-07-06 23:11:35.484671649 +0200 +--- src/version.c 2018-07-07 16:12:59.190883016 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 158, + /**/ + +-- +Some of the well known MS-Windows errors: + EMULTI Multitasking attempted, system confused + EKEYBOARD Keyboard locked, try getting out of this one! + EXPLAIN Unexplained error, please tell us what happened + EFUTURE Reserved for our future mistakes + + /// 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 /// diff --git a/data/vim/patches/8.1.0159 b/data/vim/patches/8.1.0159 new file mode 100644 index 000000000..27a8575b1 --- /dev/null +++ b/data/vim/patches/8.1.0159 @@ -0,0 +1,77 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0159 +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.0159 +Problem: Completion for user names does not work if a prefix is also a full + matching name. (Nazri Ramliy) +Solution: Accept both full and partial matches. (Dominique Pelle) +Files: src/misc1.c, src/ex_docmd.c + + +*** ../vim-8.1.0158/src/misc1.c 2018-06-23 19:22:45.610486284 +0200 +--- src/misc1.c 2018-07-07 16:35:08.759245918 +0200 +*************** +*** 4827,4833 **** + * 1 if name partially matches the beginning of a user name. + * 2 is name fully matches a user name. + */ +! int match_user(char_u* name) + { + int i; + int n = (int)STRLEN(name); +--- 4827,4834 ---- + * 1 if name partially matches the beginning of a user name. + * 2 is name fully matches a user name. + */ +! int +! match_user(char_u *name) + { + int i; + int n = (int)STRLEN(name); +*** ../vim-8.1.0158/src/ex_docmd.c 2018-07-07 16:18:09.345159549 +0200 +--- src/ex_docmd.c 2018-07-07 16:36:53.494751472 +0200 +*************** +*** 3764,3770 **** + * A full match ~user<Tab> will be replaced by user's home + * directory i.e. something like ~user<Tab> -> /home/user/ */ + if (*p == NUL && p > xp->xp_pattern + 1 +! && match_user(xp->xp_pattern + 1) == 1) + { + xp->xp_context = EXPAND_USER; + ++xp->xp_pattern; +--- 3764,3770 ---- + * A full match ~user<Tab> will be replaced by user's home + * directory i.e. something like ~user<Tab> -> /home/user/ */ + if (*p == NUL && p > xp->xp_pattern + 1 +! && match_user(xp->xp_pattern + 1) >= 1) + { + xp->xp_context = EXPAND_USER; + ++xp->xp_pattern; +*** ../vim-8.1.0158/src/version.c 2018-07-07 16:18:09.349159526 +0200 +--- src/version.c 2018-07-07 16:40:39.866042630 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 159, + /**/ + +-- +Some of the well known MS-Windows errors: + ETIME Wrong time, wait a little while + ECRASH Try again... + EDETECT Unable to detect errors + EOVER You lost! Play another game? + ENOCLUE Eh, what did you want? + + /// 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 /// diff --git a/data/vim/patches/8.1.0160 b/data/vim/patches/8.1.0160 new file mode 100644 index 000000000..4e3a75365 --- /dev/null +++ b/data/vim/patches/8.1.0160 @@ -0,0 +1,46 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0160 +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.0160 +Problem: No Danish manual translations. +Solution: Add the Danish manual translations to the file list. +Files: Filelist + + +*** ../vim-8.1.0159/Filelist 2018-07-05 22:58:12.658446246 +0200 +--- Filelist 2018-07-07 17:20:09.996801627 +0200 +*************** +*** 851,856 **** +--- 851,858 ---- + + # generic language files + LANG_GEN = \ ++ runtime/doc/*-da.1 \ ++ runtime/doc/*-da.UTF-8.1 \ + runtime/doc/*-de.1 \ + runtime/doc/*-de.UTF-8.1 \ + runtime/doc/*-fr.1 \ +*** ../vim-8.1.0159/src/version.c 2018-07-07 16:41:10.153931299 +0200 +--- src/version.c 2018-07-07 17:21:19.424337015 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 160, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +196. Your computer costs more than your car. + + /// 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 /// diff --git a/data/vim/patches/8.1.0161 b/data/vim/patches/8.1.0161 new file mode 100644 index 000000000..ff88d792f --- /dev/null +++ b/data/vim/patches/8.1.0161 @@ -0,0 +1,154 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0161 +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.0161 +Problem: Buffer not updated with 'autoread' set if file was deleted. + (Michael Naumann) +Solution: Don't set the timestamp to zero. (closes #3165) +Files: src/fileio.c, src/testdir/test_stat.vim + + +*** ../vim-8.1.0160/src/fileio.c 2018-06-22 21:30:27.351186530 +0200 +--- src/fileio.c 2018-07-07 17:31:23.592491109 +0200 +*************** +*** 6923,6933 **** + { + retval = 1; + +! /* set b_mtime to stop further warnings (e.g., when executing +! * FileChangedShell autocmd) */ + if (stat_res < 0) + { +! buf->b_mtime = 0; + buf->b_orig_size = 0; + buf->b_orig_mode = 0; + } +--- 6923,6935 ---- + { + retval = 1; + +! // set b_mtime to stop further warnings (e.g., when executing +! // FileChangedShell autocmd) + if (stat_res < 0) + { +! // When 'autoread' is set we'll check the file again to see if it +! // re-appears. +! buf->b_mtime = buf->b_p_ar; + buf->b_orig_size = 0; + buf->b_orig_mode = 0; + } +*** ../vim-8.1.0160/src/testdir/test_stat.vim 2017-08-17 17:34:06.000000000 +0200 +--- src/testdir/test_stat.vim 2018-07-07 18:27:11.809270986 +0200 +*************** +*** 46,51 **** +--- 46,60 ---- + call assert_equal('rwx', getfperm(dname)[0:2]) + endfunc + ++ func SleepForTimestamp() ++ " FAT has a granularity of 2 seconds, otherwise it's usually 1 second ++ if has('win32') ++ sleep 2 ++ else ++ sleep 1 ++ endif ++ endfunc ++ + func Test_checktime() + let fname = 'Xtest.tmp' + +*************** +*** 53,64 **** + call writefile(fl, fname) + set autoread + exec 'e' fname +! " FAT has a granularity of 2 seconds, otherwise it's usually 1 second +! if has('win32') +! sleep 2 +! else +! sleep 1 +! endif + let fl = readfile(fname) + let fl[0] .= ' - checktime' + call writefile(fl, fname) +--- 62,68 ---- + call writefile(fl, fname) + set autoread + exec 'e' fname +! call SleepForTimestamp() + let fl = readfile(fname) + let fl[0] .= ' - checktime' + call writefile(fl, fname) +*************** +*** 68,73 **** +--- 72,117 ---- + call delete(fname) + endfunc + ++ func Test_autoread_file_deleted() ++ new Xautoread ++ set autoread ++ call setline(1, 'original') ++ w! ++ ++ call SleepForTimestamp() ++ if has('win32') ++ silent !echo changed > Xautoread ++ else ++ silent !echo 'changed' > Xautoread ++ endif ++ checktime ++ call assert_equal('changed', trim(getline(1))) ++ ++ call SleepForTimestamp() ++ messages clear ++ if has('win32') ++ silent !del Xautoread ++ else ++ silent !rm Xautoread ++ endif ++ checktime ++ call assert_match('E211:', execute('messages')) ++ call assert_equal('changed', trim(getline(1))) ++ ++ call SleepForTimestamp() ++ if has('win32') ++ silent !echo recreated > Xautoread ++ else ++ silent !echo 'recreated' > Xautoread ++ endif ++ checktime ++ call assert_equal('recreated', trim(getline(1))) ++ ++ call delete('Xautoread') ++ bwipe! ++ endfunc ++ ++ + func Test_nonexistent_file() + let fname = 'Xtest.tmp' + +*** ../vim-8.1.0160/src/version.c 2018-07-07 17:21:49.120140280 +0200 +--- src/version.c 2018-07-07 17:33:03.899873420 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 161, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +197. Your desk collapses under the weight of your computer peripherals. + + /// 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 /// diff --git a/data/vim/patches/8.1.0162 b/data/vim/patches/8.1.0162 new file mode 100644 index 000000000..95c3959e7 --- /dev/null +++ b/data/vim/patches/8.1.0162 @@ -0,0 +1,149 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0162 +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.0162 +Problem: Danish and German man pages are not installed. (Tony Mechelynck) +Solution: Adjust the makefile +Files: src/Makefile + + +*** ../vim-8.1.0161/src/Makefile Thu Jul 5 17:11:15 2018 +--- src/Makefile Sat Jul 7 22:19:17 2018 +*************** +*** 1511,1516 **** +--- 1511,1522 ---- + # directory first. + # FreeBSD uses ".../man/xx.ISO8859-1/man1" for latin1, use that one too. + DEST_MAN = $(DEST_MAN_TOP)$(MAN1DIR) ++ DEST_MAN_DA = $(DEST_MAN_TOP)/da$(MAN1DIR) ++ DEST_MAN_DA_I = $(DEST_MAN_TOP)/da.ISO8859-1$(MAN1DIR) ++ DEST_MAN_DA_U = $(DEST_MAN_TOP)/da.UTF-8$(MAN1DIR) ++ DEST_MAN_DE = $(DEST_MAN_TOP)/de$(MAN1DIR) ++ DEST_MAN_DE_I = $(DEST_MAN_TOP)/de.ISO8859-1$(MAN1DIR) ++ DEST_MAN_DE_U = $(DEST_MAN_TOP)/de.UTF-8$(MAN1DIR) + DEST_MAN_FR = $(DEST_MAN_TOP)/fr$(MAN1DIR) + DEST_MAN_FR_I = $(DEST_MAN_TOP)/fr.ISO8859-1$(MAN1DIR) + DEST_MAN_FR_U = $(DEST_MAN_TOP)/fr.UTF-8$(MAN1DIR) +*************** +*** 2381,2386 **** +--- 2387,2398 ---- + + # install the language specific files for tools, if they were unpacked + install-tool-languages: ++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DA) "-da" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DA_I) "-da" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DA_U) "-da.UTF-8" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DE) "-de" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DE_I) "-de" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh xxd $(DEST_MAN_DE_U) "-de.UTF-8" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh xxd $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh xxd $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh xxd $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS) +*************** +*** 2396,2401 **** +--- 2408,2419 ---- + + # install the language specific files, if they were unpacked + install-languages: languages $(DEST_LANG) $(DEST_KMAP) ++ -$(SHELL) ./installman.sh install $(DEST_MAN_DA) "-da" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh install $(DEST_MAN_DA_I) "-da" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh install $(DEST_MAN_DA_U) "-da.UTF-8" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh install $(DEST_MAN_DE) "-de" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh install $(DEST_MAN_DE_I) "-de" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh install $(DEST_MAN_DE_U) "-de.UTF-8" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh install $(DEST_MAN_FR) "-fr" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh install $(DEST_MAN_FR_I) "-fr" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh install $(DEST_MAN_FR_U) "-fr.UTF-8" $(INSTALLMANARGS) +*************** +*** 2409,2414 **** +--- 2427,2444 ---- + -$(SHELL) ./installman.sh install $(DEST_MAN_RU) "-ru" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh install $(DEST_MAN_RU_U) "-ru.UTF-8" $(INSTALLMANARGS) + -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DA) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DA_I) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DA_U) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DE) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DE_I) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DE_U) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_FR) $(INSTALLMLARGS) + -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_FR_I) $(INSTALLMLARGS) +*************** +*** 2582,2587 **** +--- 2612,2623 ---- + # Note: the "rmdir" will fail if any files were added after "make install" + uninstall_runtime: + -$(SHELL) ./installman.sh uninstall $(DEST_MAN) "" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DA) "" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DA_I) "" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DA_U) "" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DE) "" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DE_I) "" $(INSTALLMANARGS) ++ -$(SHELL) ./installman.sh uninstall $(DEST_MAN_DE_U) "" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh uninstall $(DEST_MAN_FR) "" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh uninstall $(DEST_MAN_FR_I) "" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh uninstall $(DEST_MAN_FR_U) "" $(INSTALLMANARGS) +*************** +*** 2597,2602 **** +--- 2633,2650 ---- + -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN) $(INSTALLMLARGS) + -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DA) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DA_I) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DA_U) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DE) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DE_I) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ ++ $(DEST_MAN_DE_U) $(INSTALLMLARGS) ++ -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_FR) $(INSTALLMLARGS) + -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_FR_I) $(INSTALLMLARGS) +*************** +*** 2621,2626 **** +--- 2669,2676 ---- + -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_RU_U) $(INSTALLMLARGS) + -rm -f $(DEST_MAN)/xxd.1 ++ -rm -f $(DEST_MAN_DA)/xxd.1 $(DEST_MAN_DA_I)/xxd.1 $(DEST_MAN_DA_U)/xxd.1 ++ -rm -f $(DEST_MAN_DE)/xxd.1 $(DEST_MAN_DE_I)/xxd.1 $(DEST_MAN_DE_U)/xxd.1 + -rm -f $(DEST_MAN_FR)/xxd.1 $(DEST_MAN_FR_I)/xxd.1 $(DEST_MAN_FR_U)/xxd.1 + -rm -f $(DEST_MAN_IT)/xxd.1 $(DEST_MAN_IT_I)/xxd.1 $(DEST_MAN_IT_U)/xxd.1 + -rm -f $(DEST_MAN_JA_U)/xxd.1 +*** ../vim-8.1.0161/src/version.c Sat Jul 7 18:34:08 2018 +--- src/version.c Sat Jul 7 22:20:11 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 162, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +199. You read this entire list of symptoms, looking for something + that doesn't describe you. + + /// 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 /// diff --git a/data/vim/patches/8.1.0163 b/data/vim/patches/8.1.0163 new file mode 100644 index 000000000..f85411a6b --- /dev/null +++ b/data/vim/patches/8.1.0163 @@ -0,0 +1,174 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0163 +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.0163 +Problem: Insufficient testing for Tcl. +Solution: Add a few more tests. (Dominique Pelle, closes #3166) +Files: src/testdir/test_tcl.vim + + +*** ../vim-8.1.0162/src/testdir/test_tcl.vim Wed Jul 4 22:36:42 2018 +--- src/testdir/test_tcl.vim Sat Jul 7 22:39:36 2018 +*************** +*** 110,115 **** +--- 110,126 ---- + call assert_equal('+4', &cc) + call assert_equal('+4', TclEval('::vim::option cc')) + ++ " Test boolean option with 'toggle', 'on' and 'off' keywords. ++ call assert_equal('0', TclEval('::vim::option nu toggle')) ++ call assert_equal(1, &nu) ++ call assert_equal('1', TclEval('::vim::option nu toggle')) ++ call assert_equal(0, &nu) ++ call assert_equal('0', TclEval('::vim::option nu on')) ++ call assert_equal(1, &nu) ++ call assert_equal('1', TclEval('::vim::option nu off')) ++ call assert_equal(0, &nu) ++ ++ call assert_fails('tcl ::vim::option nu x', 'expected integer but got "x"') + call assert_fails('tcl ::vim::option xxx', 'unknown vimOption') + call assert_fails('tcl ::vim::option', + \ 'wrong # args: should be "::vim::option vimOption ?value?"') +*************** +*** 124,129 **** +--- 135,141 ---- + + call assert_fails('tcl ::vim::expr x y', + \ 'wrong # args: should be "::vim::expr vimExpr"') ++ call assert_fails('tcl ::vim::expr 1-', 'E15: Invalid expression: 1-') + endfunc + + " Test ::vim::command +*************** +*** 131,136 **** +--- 143,153 ---- + call assert_equal('hello world', + \ TclEval('::vim::command {echo "hello world"}')) + ++ " Check that if ::vim::command created a new Tcl interpreter, it is removed. ++ tcl set foo 123 ++ call assert_equal('321', TclEval('::vim::command "tcl set foo 321"')) ++ call assert_equal('123', TclEval('set foo')) ++ + " With the -quiet option, the error should silently be ignored. + call assert_equal('', TclEval('::vim::command -quiet xyz')) + +*************** +*** 142,147 **** +--- 159,166 ---- + + " With the -quiet option, the error should silently be ignored. + call assert_equal('', TclEval('::vim::command -quiet xyz')) ++ ++ tcl unset foo + endfunc + + " Test ::vim::window list +*************** +*** 164,175 **** + + " Test output messages + func Test_output() +! call assert_fails('tcl puts vimerr "an error"', 'an error') +! tcl puts vimout "a message" +! tcl puts "another message" + let messages = split(execute('message'), "\n") +! call assert_equal('a message', messages[-2]) +! call assert_equal('another message', messages[-1]) + + call assert_fails('tcl puts', + \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"') +--- 183,197 ---- + + " Test output messages + func Test_output() +! call assert_fails('tcl puts vimerr "error #1"', 'error #1') +! call assert_fails('tcl puts stderr "error #2"', 'error #2') +! tcl puts vimout "message #1" +! tcl puts stdout "message #2" +! tcl puts "message #3" + let messages = split(execute('message'), "\n") +! call assert_equal('message #3', messages[-1]) +! call assert_equal('message #2', messages[-2]) +! call assert_equal('message #1', messages[-3]) + + call assert_fails('tcl puts', + \ 'wrong # args: should be "puts ?-nonewline? ?channelId? string"') +*************** +*** 447,459 **** + call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5']) + tcl $::vim::current(buffer) set 2 a + call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$')) + tcl $::vim::current(buffer) set 3 4 b + call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$')) + tcl $::vim::current(buffer) set 4 3 c + call assert_equal(['line1', 'a', 'c'], getline(1, '$')) + + call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range') +! call assert_fails('tcl $::vim::current(buffer) set 5 "x"', 'line number out of range') + + call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:') + bwipe! +--- 469,489 ---- + call setline(1, ['line1', 'line2', 'line3', 'line4', 'line5']) + tcl $::vim::current(buffer) set 2 a + call assert_equal(['line1', 'a', 'line3', 'line4', 'line5'], getline(1, '$')) ++ ++ " Test with fewer replacing lines than replaced lines: lines get deleted. + tcl $::vim::current(buffer) set 3 4 b + call assert_equal(['line1', 'a', 'b', 'line5'], getline(1, '$')) + tcl $::vim::current(buffer) set 4 3 c + call assert_equal(['line1', 'a', 'c'], getline(1, '$')) + ++ " Test with more replacing lines than replaced lines: lines get added. ++ tcl $::vim::current(buffer) set 2 3 {x y z} ++ call assert_equal(['line1', 'x', 'y', 'z'], getline(1, '$')) ++ tcl $::vim::current(buffer) set 3 2 {X Y Z} ++ call assert_equal(['line1', 'X', 'Y', 'Z', 'z'], getline(1, '$')) ++ + call assert_fails('tcl $::vim::current(buffer) set 0 "x"', 'line number out of range') +! call assert_fails('tcl $::vim::current(buffer) set 6 "x"', 'line number out of range') + + call assert_fails('tcl $::vim::current(buffer) set', 'wrong # args:') + bwipe! +*************** +*** 622,628 **** + call delete('Xtcl_file') + endfunc + +! " Test exiting current Tcl interprepter and re-creating one. + func Test_tcl_exit() + tcl set foo "foo" + call assert_fails('tcl exit 3', 'E572: exit code 3') +--- 652,658 ---- + call delete('Xtcl_file') + endfunc + +! " Test exiting current Tcl interpreter and re-creating one. + func Test_tcl_exit() + tcl set foo "foo" + call assert_fails('tcl exit 3', 'E572: exit code 3') +*** ../vim-8.1.0162/src/version.c Sat Jul 7 22:26:49 2018 +--- src/version.c Sat Jul 7 22:39:52 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 163, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +200. You really believe in the concept of a "paperless" office. + + /// 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 /// diff --git a/data/vim/patches/8.1.0164 b/data/vim/patches/8.1.0164 new file mode 100644 index 000000000..a4982fcb9 --- /dev/null +++ b/data/vim/patches/8.1.0164 @@ -0,0 +1,83 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0164 +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.0164 +Problem: luaeval('vim.buffer().name') returns an error. +Solution: Return an empty string. (Dominique Pelle, closes #3167) +Files: src/if_lua.c, src/testdir/test_lua.vim + + +*** ../vim-8.1.0163/src/if_lua.c Sun Jul 1 15:12:00 2018 +--- src/if_lua.c Sat Jul 7 23:04:53 2018 +*************** +*** 1123,1131 **** + { + const char *s = lua_tostring(L, 2); + if (strncmp(s, "name", 4) == 0) +! lua_pushstring(L, (char *) b->b_sfname); + else if (strncmp(s, "fname", 5) == 0) +! lua_pushstring(L, (char *) b->b_ffname); + else if (strncmp(s, "number", 6) == 0) + lua_pushinteger(L, b->b_fnum); + /* methods */ +--- 1123,1133 ---- + { + const char *s = lua_tostring(L, 2); + if (strncmp(s, "name", 4) == 0) +! lua_pushstring(L, (b->b_sfname == NULL) +! ? "" : (char *) b->b_sfname); + else if (strncmp(s, "fname", 5) == 0) +! lua_pushstring(L, (b->b_ffname == NULL) +! ? "" : (char *) b->b_ffname); + else if (strncmp(s, "number", 6) == 0) + lua_pushinteger(L, b->b_fnum); + /* methods */ +*** ../vim-8.1.0163/src/testdir/test_lua.vim Mon Jul 2 22:54:32 2018 +--- src/testdir/test_lua.vim Sat Jul 7 23:04:53 2018 +*************** +*** 198,208 **** + " Test vim.buffer().name and vim.buffer().fname + func Test_buffer_name() + new +! " FIXME: for an unnamed buffer, I would expect +! " vim.buffer().name to give an empty string, but +! " it returns 0. Is it a bug? +! " so this assert_equal is commented out. +! " call assert_equal('', luaeval('vim.buffer().name')) + bwipe! + + new Xfoo +--- 198,205 ---- + " Test vim.buffer().name and vim.buffer().fname + func Test_buffer_name() + new +! call assert_equal('', luaeval('vim.buffer().name')) +! call assert_equal('', luaeval('vim.buffer().fname')) + bwipe! + + new Xfoo +*** ../vim-8.1.0163/src/version.c Sat Jul 7 22:41:57 2018 +--- src/version.c Sat Jul 7 23:06:18 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 164, + /**/ + +-- +Spam seems to be something useful to novices. Later you realize that +it's a bunch of indigestable junk that only clogs your system. +Applies to both the food and the e-mail! + + /// 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 /// diff --git a/data/vim/patches/8.1.0165 b/data/vim/patches/8.1.0165 new file mode 100644 index 000000000..39977900c --- /dev/null +++ b/data/vim/patches/8.1.0165 @@ -0,0 +1,123 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0165 +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.0165 +Problem: :clist output can be very long. +Solution: Support filtering :clist entries. (Yegappan Lakshmanan) +Files: src/quickfix.c, src/testdir/test_quickfix.vim + + +*** ../vim-8.1.0164/src/quickfix.c Tue Jul 3 16:54:18 2018 +--- src/quickfix.c Sun Jul 8 15:53:26 2018 +*************** +*** 3051,3056 **** +--- 3051,3057 ---- + int qfFileAttr; + int qfSepAttr; + int qfLineAttr; ++ int filter_entry; + int all = eap->forceit; /* if not :cl!, only show + recognised errors */ + qf_info_T *qi = &ql_info; +*************** +*** 3120,3126 **** + { + if ((qfp->qf_valid || all) && idx1 <= i && i <= idx2) + { +- msg_putchar('\n'); + if (got_int) + break; + +--- 3121,3126 ---- +*************** +*** 3141,3146 **** +--- 3141,3160 ---- + vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", + i, (char *)fname); + } ++ ++ // Support for filtering entries using :filter /pat/ clist ++ filter_entry = 1; ++ if (qfp->qf_module != NULL && *qfp->qf_module != NUL) ++ filter_entry &= message_filtered(qfp->qf_module); ++ if (fname != NULL) ++ filter_entry &= message_filtered(fname); ++ if (qfp->qf_pattern != NULL) ++ filter_entry &= message_filtered(qfp->qf_pattern); ++ filter_entry &= message_filtered(qfp->qf_text); ++ if (filter_entry) ++ goto next_entry; ++ ++ msg_putchar('\n'); + msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index + ? HL_ATTR(HLF_QFL) : qfFileAttr); + +*************** +*** 3175,3180 **** +--- 3189,3195 ---- + out_flush(); /* show one line at a time */ + } + ++ next_entry: + qfp = qfp->qf_next; + if (qfp == NULL) + break; +*************** +*** 4186,4191 **** +--- 4201,4207 ---- + } + if (res >= 0) + qf_list_changed(qi, qi->qf_curlist); ++ + // Remember the current quickfix list identifier, so that we can + // check for autocommands changing the current quickfix list. + save_qfid = qi->qf_lists[qi->qf_curlist].qf_id; +*** ../vim-8.1.0164/src/testdir/test_quickfix.vim Tue Jul 3 19:15:56 2018 +--- src/testdir/test_quickfix.vim Sun Jul 8 15:53:26 2018 +*************** +*** 3487,3489 **** +--- 3487,3506 ---- + call Xautocmd_changelist('c') + call Xautocmd_changelist('l') + endfunc ++ ++ " Tests for the ':filter /pat/ clist' command ++ func Test_filter_clist() ++ cexpr ['Xfile1:10:10:Line 10', 'Xfile2:15:15:Line 15'] ++ call assert_equal([' 2 Xfile2:15 col 15: Line 15'], ++ \ split(execute('filter /Line 15/ clist'), "\n")) ++ call assert_equal([' 1 Xfile1:10 col 10: Line 10'], ++ \ split(execute('filter /Xfile1/ clist'), "\n")) ++ call assert_equal([], split(execute('filter /abc/ clist'), "\n")) ++ ++ call setqflist([{'module' : 'abc', 'pattern' : 'pat1'}, ++ \ {'module' : 'pqr', 'pattern' : 'pat2'}], ' ') ++ call assert_equal([' 2 pqr:pat2: '], ++ \ split(execute('filter /pqr/ clist'), "\n")) ++ call assert_equal([' 1 abc:pat1: '], ++ \ split(execute('filter /pat1/ clist'), "\n")) ++ endfunc +*** ../vim-8.1.0164/src/version.c Sat Jul 7 23:07:35 2018 +--- src/version.c Sun Jul 8 15:54:40 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 165, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +204. You're being audited because you mailed your tax return to the IRC. + + /// 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 /// diff --git a/data/vim/patches/8.1.0166 b/data/vim/patches/8.1.0166 new file mode 100644 index 000000000..33266c94e --- /dev/null +++ b/data/vim/patches/8.1.0166 @@ -0,0 +1,1183 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0166 +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.0166 +Problem: Using dict_add_nr_str() is clumsy. +Solution: Split into two functions. (Ozaki Kiichi, closes #3154) +Files: src/channel.c, src/dict.c, src/edit.c, src/evalfunc.c, + src/ex_cmds2.c, src/ops.c, src/option.c, src/proto/dict.pro, + src/quickfix.c, src/tag.c, src/terminal.c, src/undo.c + + +*** ../vim-8.1.0165/src/channel.c Sun Jun 17 19:36:30 2018 +--- src/channel.c Sun Jul 8 16:42:07 2018 +*************** +*** 2809,2815 **** + status = "buffered"; + else + status = "closed"; +! dict_add_nr_str(dict, namebuf, 0, (char_u *)status); + + STRCPY(namebuf + tail, "mode"); + switch (chanpart->ch_mode) +--- 2809,2815 ---- + status = "buffered"; + else + status = "closed"; +! dict_add_string(dict, namebuf, (char_u *)status); + + STRCPY(namebuf + tail, "mode"); + switch (chanpart->ch_mode) +*************** +*** 2819,2825 **** + case MODE_JSON: s = "JSON"; break; + case MODE_JS: s = "JS"; break; + } +! dict_add_nr_str(dict, namebuf, 0, (char_u *)s); + + STRCPY(namebuf + tail, "io"); + if (part == PART_SOCK) +--- 2819,2825 ---- + case MODE_JSON: s = "JSON"; break; + case MODE_JS: s = "JS"; break; + } +! dict_add_string(dict, namebuf, (char_u *)s); + + STRCPY(namebuf + tail, "io"); + if (part == PART_SOCK) +*************** +*** 2832,2853 **** + case JIO_BUFFER: s = "buffer"; break; + case JIO_OUT: s = "out"; break; + } +! dict_add_nr_str(dict, namebuf, 0, (char_u *)s); + + STRCPY(namebuf + tail, "timeout"); +! dict_add_nr_str(dict, namebuf, chanpart->ch_timeout, NULL); + } + + void + channel_info(channel_T *channel, dict_T *dict) + { +! dict_add_nr_str(dict, "id", channel->ch_id, NULL); +! dict_add_nr_str(dict, "status", 0, (char_u *)channel_status(channel, -1)); + + if (channel->ch_hostname != NULL) + { +! dict_add_nr_str(dict, "hostname", 0, (char_u *)channel->ch_hostname); +! dict_add_nr_str(dict, "port", channel->ch_port, NULL); + channel_part_info(channel, dict, "sock", PART_SOCK); + } + else +--- 2832,2853 ---- + case JIO_BUFFER: s = "buffer"; break; + case JIO_OUT: s = "out"; break; + } +! dict_add_string(dict, namebuf, (char_u *)s); + + STRCPY(namebuf + tail, "timeout"); +! dict_add_number(dict, namebuf, chanpart->ch_timeout); + } + + void + channel_info(channel_T *channel, dict_T *dict) + { +! dict_add_number(dict, "id", channel->ch_id); +! dict_add_string(dict, "status", (char_u *)channel_status(channel, -1)); + + if (channel->ch_hostname != NULL) + { +! dict_add_string(dict, "hostname", (char_u *)channel->ch_hostname); +! dict_add_number(dict, "port", channel->ch_port); + channel_part_info(channel, dict, "sock", PART_SOCK); + } + else +*************** +*** 5737,5743 **** + list_T *l; + int i; + +! dict_add_nr_str(dict, "status", 0L, (char_u *)job_status(job)); + + item = dictitem_alloc((char_u *)"channel"); + if (item == NULL) +--- 5737,5743 ---- + list_T *l; + int i; + +! dict_add_string(dict, "status", (char_u *)job_status(job)); + + item = dictitem_alloc((char_u *)"channel"); + if (item == NULL) +*************** +*** 5755,5769 **** + #else + nr = job->jv_proc_info.dwProcessId; + #endif +! dict_add_nr_str(dict, "process", nr, NULL); +! dict_add_nr_str(dict, "tty_in", 0L, +! job->jv_tty_in != NULL ? job->jv_tty_in : (char_u *)""); +! dict_add_nr_str(dict, "tty_out", 0L, +! job->jv_tty_out != NULL ? job->jv_tty_out : (char_u *)""); +! +! dict_add_nr_str(dict, "exitval", job->jv_exitval, NULL); +! dict_add_nr_str(dict, "exit_cb", 0L, job->jv_exit_cb); +! dict_add_nr_str(dict, "stoponexit", 0L, job->jv_stoponexit); + + l = list_alloc(); + if (l != NULL) +--- 5755,5767 ---- + #else + nr = job->jv_proc_info.dwProcessId; + #endif +! dict_add_number(dict, "process", nr); +! dict_add_string(dict, "tty_in", job->jv_tty_in); +! dict_add_string(dict, "tty_out", job->jv_tty_out); +! +! dict_add_number(dict, "exitval", job->jv_exitval); +! dict_add_string(dict, "exit_cb", job->jv_exit_cb); +! dict_add_string(dict, "stoponexit", job->jv_stoponexit); + + l = list_alloc(); + if (l != NULL) +*** ../vim-8.1.0165/src/dict.c Sat Dec 16 18:21:39 2017 +--- src/dict.c Sun Jul 8 16:42:07 2018 +*************** +*** 327,342 **** + } + + /* +! * Add a number or string entry to dictionary "d". +! * When "str" is NULL use number "nr", otherwise use "str". + * Returns FAIL when out of memory and when key already exists. + */ + int +! dict_add_nr_str( +! dict_T *d, +! char *key, +! varnumber_T nr, +! char_u *str) + { + dictitem_T *item; + +--- 327,337 ---- + } + + /* +! * Add a number entry to dictionary "d". + * Returns FAIL when out of memory and when key already exists. + */ + int +! dict_add_number(dict_T *d, char *key, varnumber_T nr) + { + dictitem_T *item; + +*************** +*** 344,359 **** + if (item == NULL) + return FAIL; + item->di_tv.v_lock = 0; +! if (str == NULL) +! { +! item->di_tv.v_type = VAR_NUMBER; +! item->di_tv.vval.v_number = nr; +! } +! else + { +! item->di_tv.v_type = VAR_STRING; +! item->di_tv.vval.v_string = vim_strsave(str); + } + if (dict_add(d, item) == FAIL) + { + dictitem_free(item); +--- 339,369 ---- + if (item == NULL) + return FAIL; + item->di_tv.v_lock = 0; +! item->di_tv.v_type = VAR_NUMBER; +! item->di_tv.vval.v_number = nr; +! if (dict_add(d, item) == FAIL) + { +! dictitem_free(item); +! return FAIL; + } ++ return OK; ++ } ++ ++ /* ++ * Add a string entry to dictionary "d". ++ * Returns FAIL when out of memory and when key already exists. ++ */ ++ int ++ dict_add_string(dict_T *d, char *key, char_u *str) ++ { ++ dictitem_T *item; ++ ++ item = dictitem_alloc((char_u *)key); ++ if (item == NULL) ++ return FAIL; ++ item->di_tv.v_lock = 0; ++ item->di_tv.v_type = VAR_STRING; ++ item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL; + if (dict_add(d, item) == FAIL) + { + dictitem_free(item); +*** ../vim-8.1.0165/src/edit.c Thu Jul 5 22:27:04 2018 +--- src/edit.c Sun Jul 8 16:42:07 2018 +*************** +*** 4884,4901 **** + dict = dict_alloc_lock(VAR_FIXED); + if (dict != NULL) + { +! dict_add_nr_str(dict, "word", 0L, +! EMPTY_IF_NULL(compl_shown_match->cp_str)); +! dict_add_nr_str(dict, "abbr", 0L, +! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_ABBR])); +! dict_add_nr_str(dict, "menu", 0L, +! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_MENU])); +! dict_add_nr_str(dict, "kind", 0L, +! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_KIND])); +! dict_add_nr_str(dict, "info", 0L, +! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_INFO])); +! dict_add_nr_str(dict, "user_data", 0L, +! EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_USER_DATA])); + } + set_vim_var_dict(VV_COMPLETED_ITEM, dict); + if (!in_compl_func) +--- 4884,4896 ---- + dict = dict_alloc_lock(VAR_FIXED); + if (dict != NULL) + { +! dict_add_string(dict, "word", compl_shown_match->cp_str); +! dict_add_string(dict, "abbr", compl_shown_match->cp_text[CPT_ABBR]); +! dict_add_string(dict, "menu", compl_shown_match->cp_text[CPT_MENU]); +! dict_add_string(dict, "kind", compl_shown_match->cp_text[CPT_KIND]); +! dict_add_string(dict, "info", compl_shown_match->cp_text[CPT_INFO]); +! dict_add_string(dict, "user_data", +! compl_shown_match->cp_text[CPT_USER_DATA]); + } + set_vim_var_dict(VV_COMPLETED_ITEM, dict); + if (!in_compl_func) +*** ../vim-8.1.0165/src/evalfunc.c Thu Jun 28 15:50:23 2018 +--- src/evalfunc.c Sun Jul 8 16:42:07 2018 +*************** +*** 4338,4346 **** + + if (d != NULL) + { +! dict_add_nr_str(d, "id", sign->id, NULL); +! dict_add_nr_str(d, "lnum", sign->lnum, NULL); +! dict_add_nr_str(d, "name", 0L, sign_typenr2name(sign->typenr)); + + list_append_dict(l, d); + } +--- 4338,4346 ---- + + if (d != NULL) + { +! dict_add_number(d, "id", sign->id); +! dict_add_number(d, "lnum", sign->lnum); +! dict_add_string(d, "name", sign_typenr2name(sign->typenr)); + + list_append_dict(l, d); + } +*************** +*** 4363,4380 **** + if (dict == NULL) + return NULL; + +! dict_add_nr_str(dict, "bufnr", buf->b_fnum, NULL); +! dict_add_nr_str(dict, "name", 0L, +! buf->b_ffname != NULL ? buf->b_ffname : (char_u *)""); +! dict_add_nr_str(dict, "lnum", buf == curbuf ? curwin->w_cursor.lnum +! : buflist_findlnum(buf), NULL); +! dict_add_nr_str(dict, "loaded", buf->b_ml.ml_mfp != NULL, NULL); +! dict_add_nr_str(dict, "listed", buf->b_p_bl, NULL); +! dict_add_nr_str(dict, "changed", bufIsChanged(buf), NULL); +! dict_add_nr_str(dict, "changedtick", CHANGEDTICK(buf), NULL); +! dict_add_nr_str(dict, "hidden", +! buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0, +! NULL); + + /* Get a reference to buffer variables */ + dict_add_dict(dict, "variables", buf->b_vars); +--- 4363,4378 ---- + if (dict == NULL) + return NULL; + +! dict_add_number(dict, "bufnr", buf->b_fnum); +! dict_add_string(dict, "name", buf->b_ffname); +! dict_add_number(dict, "lnum", buf == curbuf ? curwin->w_cursor.lnum +! : buflist_findlnum(buf)); +! dict_add_number(dict, "loaded", buf->b_ml.ml_mfp != NULL); +! dict_add_number(dict, "listed", buf->b_p_bl); +! dict_add_number(dict, "changed", bufIsChanged(buf)); +! dict_add_number(dict, "changedtick", CHANGEDTICK(buf)); +! dict_add_number(dict, "hidden", +! buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0); + + /* Get a reference to buffer variables */ + dict_add_dict(dict, "variables", buf->b_vars); +*************** +*** 4663,4672 **** + return; + if (list_append_dict(l, d) == FAIL) + return; +! dict_add_nr_str(d, "lnum", (long)buf->b_changelist[i].lnum, NULL); +! dict_add_nr_str(d, "col", (long)buf->b_changelist[i].col, NULL); + # ifdef FEAT_VIRTUALEDIT +! dict_add_nr_str(d, "coladd", (long)buf->b_changelist[i].coladd, NULL); + # endif + } + #endif +--- 4661,4670 ---- + return; + if (list_append_dict(l, d) == FAIL) + return; +! dict_add_number(d, "lnum", (long)buf->b_changelist[i].lnum); +! dict_add_number(d, "col", (long)buf->b_changelist[i].col); + # ifdef FEAT_VIRTUALEDIT +! dict_add_number(d, "coladd", (long)buf->b_changelist[i].coladd); + # endif + } + #endif +*************** +*** 4790,4798 **** + { + dict_T *dict = rettv->vval.v_dict; + +! dict_add_nr_str(dict, "char", 0L, last_csearch()); +! dict_add_nr_str(dict, "forward", last_csearch_forward(), NULL); +! dict_add_nr_str(dict, "until", last_csearch_until(), NULL); + } + } + +--- 4788,4796 ---- + { + dict_T *dict = rettv->vval.v_dict; + +! dict_add_string(dict, "char", last_csearch()); +! dict_add_number(dict, "forward", last_csearch_forward()); +! dict_add_number(dict, "until", last_csearch_until()); + } + } + +*************** +*** 5193,5209 **** + return; + if (list_append_dict(l, d) == FAIL) + return; +! dict_add_nr_str(d, "lnum", (long)wp->w_jumplist[i].fmark.mark.lnum, +! NULL); +! dict_add_nr_str(d, "col", (long)wp->w_jumplist[i].fmark.mark.col, +! NULL); + # ifdef FEAT_VIRTUALEDIT +! dict_add_nr_str(d, "coladd", (long)wp->w_jumplist[i].fmark.mark.coladd, +! NULL); + # endif +! dict_add_nr_str(d, "bufnr", (long)wp->w_jumplist[i].fmark.fnum, NULL); + if (wp->w_jumplist[i].fname != NULL) +! dict_add_nr_str(d, "filename", 0L, wp->w_jumplist[i].fname); + } + #endif + } +--- 5191,5204 ---- + return; + if (list_append_dict(l, d) == FAIL) + return; +! dict_add_number(d, "lnum", (long)wp->w_jumplist[i].fmark.mark.lnum); +! dict_add_number(d, "col", (long)wp->w_jumplist[i].fmark.mark.col); + # ifdef FEAT_VIRTUALEDIT +! dict_add_number(d, "coladd", (long)wp->w_jumplist[i].fmark.mark.coladd); + # endif +! dict_add_number(d, "bufnr", (long)wp->w_jumplist[i].fmark.fnum); + if (wp->w_jumplist[i].fname != NULL) +! dict_add_string(d, "filename", wp->w_jumplist[i].fname); + } + #endif + } +*************** +*** 5321,5338 **** + } + else + { +! dict_add_nr_str(dict, "pattern", 0L, cur->pattern); + } +! dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id)); +! dict_add_nr_str(dict, "priority", (long)cur->priority, NULL); +! dict_add_nr_str(dict, "id", (long)cur->id, NULL); + # if defined(FEAT_CONCEAL) && defined(FEAT_MBYTE) + if (cur->conceal_char) + { + char_u buf[MB_MAXBYTES + 1]; + + buf[(*mb_char2bytes)((int)cur->conceal_char, buf)] = NUL; +! dict_add_nr_str(dict, "conceal", 0L, (char_u *)&buf); + } + # endif + list_append_dict(rettv->vval.v_list, dict); +--- 5316,5333 ---- + } + else + { +! dict_add_string(dict, "pattern", cur->pattern); + } +! dict_add_string(dict, "group", syn_id2name(cur->hlg_id)); +! dict_add_number(dict, "priority", (long)cur->priority); +! dict_add_number(dict, "id", (long)cur->id); + # if defined(FEAT_CONCEAL) && defined(FEAT_MBYTE) + if (cur->conceal_char) + { + char_u buf[MB_MAXBYTES + 1]; + + buf[(*mb_char2bytes)((int)cur->conceal_char, buf)] = NUL; +! dict_add_string(dict, "conceal", (char_u *)&buf); + } + # endif + list_append_dict(rettv->vval.v_list, dict); +*************** +*** 5533,5539 **** + if (dict == NULL) + return NULL; + +! dict_add_nr_str(dict, "tabnr", tp_idx, NULL); + + l = list_alloc(); + if (l != NULL) +--- 5528,5534 ---- + if (dict == NULL) + return NULL; + +! dict_add_number(dict, "tabnr", tp_idx); + + l = list_alloc(); + if (l != NULL) +*************** +*** 5649,5671 **** + if (dict == NULL) + return NULL; + +! dict_add_nr_str(dict, "tabnr", tpnr, NULL); +! dict_add_nr_str(dict, "winnr", winnr, NULL); +! dict_add_nr_str(dict, "winid", wp->w_id, NULL); +! dict_add_nr_str(dict, "height", wp->w_height, NULL); + #ifdef FEAT_MENU +! dict_add_nr_str(dict, "winbar", wp->w_winbar_height, NULL); + #endif +! dict_add_nr_str(dict, "width", wp->w_width, NULL); +! dict_add_nr_str(dict, "bufnr", wp->w_buffer->b_fnum, NULL); + + #ifdef FEAT_TERMINAL +! dict_add_nr_str(dict, "terminal", bt_terminal(wp->w_buffer), NULL); + #endif + #ifdef FEAT_QUICKFIX +! dict_add_nr_str(dict, "quickfix", bt_quickfix(wp->w_buffer), NULL); +! dict_add_nr_str(dict, "loclist", +! (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL), NULL); + #endif + + /* Add a reference to window variables */ +--- 5644,5666 ---- + if (dict == NULL) + return NULL; + +! dict_add_number(dict, "tabnr", tpnr); +! dict_add_number(dict, "winnr", winnr); +! dict_add_number(dict, "winid", wp->w_id); +! dict_add_number(dict, "height", wp->w_height); + #ifdef FEAT_MENU +! dict_add_number(dict, "winbar", wp->w_winbar_height); + #endif +! dict_add_number(dict, "width", wp->w_width); +! dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum); + + #ifdef FEAT_TERMINAL +! dict_add_number(dict, "terminal", bt_terminal(wp->w_buffer)); + #endif + #ifdef FEAT_QUICKFIX +! dict_add_number(dict, "quickfix", bt_quickfix(wp->w_buffer)); +! dict_add_number(dict, "loclist", +! (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)); + #endif + + /* Add a reference to window variables */ +*************** +*** 7652,7666 **** + char_u *mapmode = map_mode_to_chars(mp->m_mode); + dict_T *dict = rettv->vval.v_dict; + +! dict_add_nr_str(dict, "lhs", 0L, lhs); +! dict_add_nr_str(dict, "rhs", 0L, mp->m_orig_str); +! dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL); +! dict_add_nr_str(dict, "expr", mp->m_expr ? 1L : 0L, NULL); +! dict_add_nr_str(dict, "silent", mp->m_silent ? 1L : 0L, NULL); +! dict_add_nr_str(dict, "sid", (long)mp->m_script_ID, NULL); +! dict_add_nr_str(dict, "buffer", (long)buffer_local, NULL); +! dict_add_nr_str(dict, "nowait", mp->m_nowait ? 1L : 0L, NULL); +! dict_add_nr_str(dict, "mode", 0L, mapmode); + + vim_free(lhs); + vim_free(mapmode); +--- 7647,7661 ---- + char_u *mapmode = map_mode_to_chars(mp->m_mode); + dict_T *dict = rettv->vval.v_dict; + +! dict_add_string(dict, "lhs", lhs); +! dict_add_string(dict, "rhs", mp->m_orig_str); +! dict_add_number(dict, "noremap", mp->m_noremap ? 1L : 0L); +! dict_add_number(dict, "expr", mp->m_expr ? 1L : 0L); +! dict_add_number(dict, "silent", mp->m_silent ? 1L : 0L); +! dict_add_number(dict, "sid", (long)mp->m_script_ID); +! dict_add_number(dict, "buffer", (long)buffer_local); +! dict_add_number(dict, "nowait", mp->m_nowait ? 1L : 0L); +! dict_add_string(dict, "mode", mapmode); + + vim_free(lhs); + vim_free(mapmode); +*************** +*** 13652,13664 **** + dict_T *dict = rettv->vval.v_dict; + list_T *list; + +! dict_add_nr_str(dict, "synced", (long)curbuf->b_u_synced, NULL); +! dict_add_nr_str(dict, "seq_last", curbuf->b_u_seq_last, NULL); +! dict_add_nr_str(dict, "save_last", +! (long)curbuf->b_u_save_nr_last, NULL); +! dict_add_nr_str(dict, "seq_cur", curbuf->b_u_seq_cur, NULL); +! dict_add_nr_str(dict, "time_cur", (long)curbuf->b_u_time_cur, NULL); +! dict_add_nr_str(dict, "save_cur", (long)curbuf->b_u_save_nr_cur, NULL); + + list = list_alloc(); + if (list != NULL) +--- 13647,13658 ---- + dict_T *dict = rettv->vval.v_dict; + list_T *list; + +! dict_add_number(dict, "synced", (long)curbuf->b_u_synced); +! dict_add_number(dict, "seq_last", curbuf->b_u_seq_last); +! dict_add_number(dict, "save_last", (long)curbuf->b_u_save_nr_last); +! dict_add_number(dict, "seq_cur", curbuf->b_u_seq_cur); +! dict_add_number(dict, "time_cur", (long)curbuf->b_u_time_cur); +! dict_add_number(dict, "save_cur", (long)curbuf->b_u_save_nr_cur); + + list = list_alloc(); + if (list != NULL) +*************** +*** 13882,13901 **** + return; + dict = rettv->vval.v_dict; + +! dict_add_nr_str(dict, "lnum", (long)curwin->w_cursor.lnum, NULL); +! dict_add_nr_str(dict, "col", (long)curwin->w_cursor.col, NULL); + #ifdef FEAT_VIRTUALEDIT +! dict_add_nr_str(dict, "coladd", (long)curwin->w_cursor.coladd, NULL); + #endif + update_curswant(); +! dict_add_nr_str(dict, "curswant", (long)curwin->w_curswant, NULL); + +! dict_add_nr_str(dict, "topline", (long)curwin->w_topline, NULL); + #ifdef FEAT_DIFF +! dict_add_nr_str(dict, "topfill", (long)curwin->w_topfill, NULL); + #endif +! dict_add_nr_str(dict, "leftcol", (long)curwin->w_leftcol, NULL); +! dict_add_nr_str(dict, "skipcol", (long)curwin->w_skipcol, NULL); + } + + /* +--- 13876,13895 ---- + return; + dict = rettv->vval.v_dict; + +! dict_add_number(dict, "lnum", (long)curwin->w_cursor.lnum); +! dict_add_number(dict, "col", (long)curwin->w_cursor.col); + #ifdef FEAT_VIRTUALEDIT +! dict_add_number(dict, "coladd", (long)curwin->w_cursor.coladd); + #endif + update_curswant(); +! dict_add_number(dict, "curswant", (long)curwin->w_curswant); + +! dict_add_number(dict, "topline", (long)curwin->w_topline); + #ifdef FEAT_DIFF +! dict_add_number(dict, "topfill", (long)curwin->w_topfill); + #endif +! dict_add_number(dict, "leftcol", (long)curwin->w_leftcol); +! dict_add_number(dict, "skipcol", (long)curwin->w_skipcol); + } + + /* +*** ../vim-8.1.0165/src/ex_cmds2.c Thu Jun 28 12:05:07 2018 +--- src/ex_cmds2.c Sun Jul 8 16:42:07 2018 +*************** +*** 689,695 **** + } + + /* +! * ":breakadd". + */ + void + ex_breakadd(exarg_T *eap) +--- 689,695 ---- + } + + /* +! * ":breakadd". Also used for ":profile". + */ + void + ex_breakadd(exarg_T *eap) +*************** +*** 1497,1512 **** + return; + list_append_dict(list, dict); + +! dict_add_nr_str(dict, "id", timer->tr_id, NULL); +! dict_add_nr_str(dict, "time", (long)timer->tr_interval, NULL); + + profile_start(&now); + remaining = proftime_time_left(&timer->tr_due, &now); +! dict_add_nr_str(dict, "remaining", (long)remaining, NULL); + +! dict_add_nr_str(dict, "repeat", +! (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1), NULL); +! dict_add_nr_str(dict, "paused", (long)(timer->tr_paused), NULL); + + di = dictitem_alloc((char_u *)"callback"); + if (di != NULL) +--- 1497,1512 ---- + return; + list_append_dict(list, dict); + +! dict_add_number(dict, "id", timer->tr_id); +! dict_add_number(dict, "time", (long)timer->tr_interval); + + profile_start(&now); + remaining = proftime_time_left(&timer->tr_due, &now); +! dict_add_number(dict, "remaining", (long)remaining); + +! dict_add_number(dict, "repeat", +! (long)(timer->tr_repeat < 0 ? -1 : timer->tr_repeat + 1)); +! dict_add_number(dict, "paused", (long)(timer->tr_paused)); + + di = dictitem_alloc((char_u *)"callback"); + if (di != NULL) +*** ../vim-8.1.0165/src/ops.c Thu Jun 28 19:26:24 2018 +--- src/ops.c Sun Jul 8 16:42:07 2018 +*************** +*** 1723,1734 **** + + buf[0] = (char_u)oap->regname; + buf[1] = NUL; +! dict_add_nr_str(v_event, "regname", 0, buf); + + buf[0] = get_op_char(oap->op_type); + buf[1] = get_extra_op_char(oap->op_type); + buf[2] = NUL; +! dict_add_nr_str(v_event, "operator", 0, buf); + + buf[0] = NUL; + buf[1] = NUL; +--- 1723,1734 ---- + + buf[0] = (char_u)oap->regname; + buf[1] = NUL; +! dict_add_string(v_event, "regname", buf); + + buf[0] = get_op_char(oap->op_type); + buf[1] = get_extra_op_char(oap->op_type); + buf[2] = NUL; +! dict_add_string(v_event, "operator", buf); + + buf[0] = NUL; + buf[1] = NUL; +*************** +*** 1741,1747 **** + reglen + 1); + break; + } +! dict_add_nr_str(v_event, "regtype", 0, buf); + + /* Lock the dictionary and its keys */ + dict_set_items_ro(v_event); +--- 1741,1747 ---- + reglen + 1); + break; + } +! dict_add_string(v_event, "regtype", buf); + + /* Lock the dictionary and its keys */ + dict_set_items_ro(v_event); +*************** +*** 7641,7659 **** + #if defined(FEAT_EVAL) + if (dict != NULL) + { +! dict_add_nr_str(dict, "words", word_count, NULL); +! dict_add_nr_str(dict, "chars", char_count, NULL); +! dict_add_nr_str(dict, "bytes", byte_count + # ifdef FEAT_MBYTE + + bom_count + # endif +! , NULL); +! dict_add_nr_str(dict, VIsual_active ? "visual_bytes" : "cursor_bytes", +! byte_count_cursor, NULL); +! dict_add_nr_str(dict, VIsual_active ? "visual_chars" : "cursor_chars", +! char_count_cursor, NULL); +! dict_add_nr_str(dict, VIsual_active ? "visual_words" : "cursor_words", +! word_count_cursor, NULL); + } + #endif + } +--- 7641,7659 ---- + #if defined(FEAT_EVAL) + if (dict != NULL) + { +! dict_add_number(dict, "words", word_count); +! dict_add_number(dict, "chars", char_count); +! dict_add_number(dict, "bytes", byte_count + # ifdef FEAT_MBYTE + + bom_count + # endif +! ); +! dict_add_number(dict, VIsual_active ? "visual_bytes" : "cursor_bytes", +! byte_count_cursor); +! dict_add_number(dict, VIsual_active ? "visual_chars" : "cursor_chars", +! char_count_cursor); +! dict_add_number(dict, VIsual_active ? "visual_words" : "cursor_words", +! word_count_cursor); + } + #endif + } +*** ../vim-8.1.0165/src/option.c Mon Jul 2 20:51:21 2018 +--- src/option.c Sun Jul 8 16:42:07 2018 +*************** +*** 13222,13232 **** + if (varp != NULL) + { + if (opt->flags & P_STRING) +! dict_add_nr_str(d, opt->fullname, 0L, *(char_u **)varp); + else if (opt->flags & P_NUM) +! dict_add_nr_str(d, opt->fullname, *(long *)varp, NULL); + else +! dict_add_nr_str(d, opt->fullname, *(int *)varp, NULL); + } + } + } +--- 13222,13232 ---- + if (varp != NULL) + { + if (opt->flags & P_STRING) +! dict_add_string(d, opt->fullname, *(char_u **)varp); + else if (opt->flags & P_NUM) +! dict_add_number(d, opt->fullname, *(long *)varp); + else +! dict_add_number(d, opt->fullname, *(int *)varp); + } + } + } +*** ../vim-8.1.0165/src/proto/dict.pro Thu May 17 13:52:31 2018 +--- src/proto/dict.pro Sun Jul 8 16:42:07 2018 +*************** +*** 12,18 **** + void dictitem_free(dictitem_T *item); + dict_T *dict_copy(dict_T *orig, int deep, int copyID); + int dict_add(dict_T *d, dictitem_T *item); +! int dict_add_nr_str(dict_T *d, char *key, varnumber_T nr, char_u *str); + int dict_add_list(dict_T *d, char *key, list_T *list); + int dict_add_dict(dict_T *d, char *key, dict_T *dict); + long dict_len(dict_T *d); +--- 12,19 ---- + void dictitem_free(dictitem_T *item); + dict_T *dict_copy(dict_T *orig, int deep, int copyID); + int dict_add(dict_T *d, dictitem_T *item); +! int dict_add_number(dict_T *d, char *key, varnumber_T nr); +! int dict_add_string(dict_T *d, char *key, char_u *str); + int dict_add_list(dict_T *d, char *key, list_T *list); + int dict_add_dict(dict_T *d, char *key, dict_T *dict); + long dict_len(dict_T *d); +*** ../vim-8.1.0165/src/quickfix.c Sun Jul 8 16:01:04 2018 +--- src/quickfix.c Sun Jul 8 16:42:07 2018 +*************** +*** 5360,5378 **** + + buf[0] = qfp->qf_type; + buf[1] = NUL; +! if ( dict_add_nr_str(dict, "bufnr", (long)bufnum, NULL) == FAIL +! || dict_add_nr_str(dict, "lnum", (long)qfp->qf_lnum, NULL) == FAIL +! || dict_add_nr_str(dict, "col", (long)qfp->qf_col, NULL) == FAIL +! || dict_add_nr_str(dict, "vcol", (long)qfp->qf_viscol, NULL) == FAIL +! || dict_add_nr_str(dict, "nr", (long)qfp->qf_nr, NULL) == FAIL +! || dict_add_nr_str(dict, "module", 0L, +! qfp->qf_module == NULL ? (char_u *)"" : qfp->qf_module) == FAIL +! || dict_add_nr_str(dict, "pattern", 0L, +! qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL +! || dict_add_nr_str(dict, "text", 0L, +! qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL +! || dict_add_nr_str(dict, "type", 0L, buf) == FAIL +! || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL) + return FAIL; + + qfp = qfp->qf_next; +--- 5360,5375 ---- + + buf[0] = qfp->qf_type; + buf[1] = NUL; +! if ( dict_add_number(dict, "bufnr", (long)bufnum) == FAIL +! || dict_add_number(dict, "lnum", (long)qfp->qf_lnum) == FAIL +! || dict_add_number(dict, "col", (long)qfp->qf_col) == FAIL +! || dict_add_number(dict, "vcol", (long)qfp->qf_viscol) == FAIL +! || dict_add_number(dict, "nr", (long)qfp->qf_nr) == FAIL +! || dict_add_string(dict, "module", qfp->qf_module) == FAIL +! || dict_add_string(dict, "pattern", qfp->qf_pattern) == FAIL +! || dict_add_string(dict, "text", qfp->qf_text) == FAIL +! || dict_add_string(dict, "type", buf) == FAIL +! || dict_add_number(dict, "valid", (long)qfp->qf_valid) == FAIL) + return FAIL; + + qfp = qfp->qf_next; +*************** +*** 5576,5582 **** + int status = OK; + + if (flags & QF_GETLIST_TITLE) +! status = dict_add_nr_str(retdict, "title", 0L, (char_u *)""); + if ((status == OK) && (flags & QF_GETLIST_ITEMS)) + { + list_T *l = list_alloc(); +--- 5573,5579 ---- + int status = OK; + + if (flags & QF_GETLIST_TITLE) +! status = dict_add_string(retdict, "title", (char_u *)""); + if ((status == OK) && (flags & QF_GETLIST_ITEMS)) + { + list_T *l = list_alloc(); +*************** +*** 5586,5604 **** + status = FAIL; + } + if ((status == OK) && (flags & QF_GETLIST_NR)) +! status = dict_add_nr_str(retdict, "nr", 0L, NULL); + if ((status == OK) && (flags & QF_GETLIST_WINID)) +! status = dict_add_nr_str(retdict, "winid", qf_winid(qi), NULL); + if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) +! status = dict_add_nr_str(retdict, "context", 0L, (char_u *)""); + if ((status == OK) && (flags & QF_GETLIST_ID)) +! status = dict_add_nr_str(retdict, "id", 0L, NULL); + if ((status == OK) && (flags & QF_GETLIST_IDX)) +! status = dict_add_nr_str(retdict, "idx", 0L, NULL); + if ((status == OK) && (flags & QF_GETLIST_SIZE)) +! status = dict_add_nr_str(retdict, "size", 0L, NULL); + if ((status == OK) && (flags & QF_GETLIST_TICK)) +! status = dict_add_nr_str(retdict, "changedtick", 0L, NULL); + + return status; + } +--- 5583,5601 ---- + status = FAIL; + } + if ((status == OK) && (flags & QF_GETLIST_NR)) +! status = dict_add_number(retdict, "nr", 0); + if ((status == OK) && (flags & QF_GETLIST_WINID)) +! status = dict_add_number(retdict, "winid", qf_winid(qi)); + if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) +! status = dict_add_string(retdict, "context", (char_u *)""); + if ((status == OK) && (flags & QF_GETLIST_ID)) +! status = dict_add_number(retdict, "id", 0); + if ((status == OK) && (flags & QF_GETLIST_IDX)) +! status = dict_add_number(retdict, "idx", 0); + if ((status == OK) && (flags & QF_GETLIST_SIZE)) +! status = dict_add_number(retdict, "size", 0); + if ((status == OK) && (flags & QF_GETLIST_TICK)) +! status = dict_add_number(retdict, "changedtick", 0); + + return status; + } +*************** +*** 5609,5620 **** + static int + qf_getprop_title(qf_info_T *qi, int qf_idx, dict_T *retdict) + { +! char_u *t; +! +! t = qi->qf_lists[qf_idx].qf_title; +! if (t == NULL) +! t = (char_u *)""; +! return dict_add_nr_str(retdict, "title", 0L, t); + } + + /* +--- 5606,5612 ---- + static int + qf_getprop_title(qf_info_T *qi, int qf_idx, dict_T *retdict) + { +! return dict_add_string(retdict, "title", qi->qf_lists[qf_idx].qf_title); + } + + /* +*************** +*** 5659,5665 **** + status = FAIL; + } + else +! status = dict_add_nr_str(retdict, "context", 0L, (char_u *)""); + + return status; + } +--- 5651,5657 ---- + status = FAIL; + } + else +! status = dict_add_string(retdict, "context", (char_u *)""); + + return status; + } +*************** +*** 5674,5680 **** + if (qi->qf_lists[qf_idx].qf_count == 0) + /* For empty lists, qf_index is set to 1 */ + idx = 0; +! return dict_add_nr_str(retdict, "idx", idx, NULL); + } + + /* +--- 5666,5672 ---- + if (qi->qf_lists[qf_idx].qf_count == 0) + /* For empty lists, qf_index is set to 1 */ + idx = 0; +! return dict_add_number(retdict, "idx", idx); + } + + /* +*************** +*** 5709,5732 **** + if (flags & QF_GETLIST_TITLE) + status = qf_getprop_title(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_NR)) +! status = dict_add_nr_str(retdict, "nr", qf_idx + 1, NULL); + if ((status == OK) && (flags & QF_GETLIST_WINID)) +! status = dict_add_nr_str(retdict, "winid", qf_winid(qi), NULL); + if ((status == OK) && (flags & QF_GETLIST_ITEMS)) + status = qf_getprop_items(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) + status = qf_getprop_ctx(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_ID)) +! status = dict_add_nr_str(retdict, "id", qi->qf_lists[qf_idx].qf_id, +! NULL); + if ((status == OK) && (flags & QF_GETLIST_IDX)) + status = qf_getprop_idx(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_SIZE)) +! status = dict_add_nr_str(retdict, "size", +! qi->qf_lists[qf_idx].qf_count, NULL); + if ((status == OK) && (flags & QF_GETLIST_TICK)) +! status = dict_add_nr_str(retdict, "changedtick", +! qi->qf_lists[qf_idx].qf_changedtick, NULL); + + return status; + } +--- 5701,5723 ---- + if (flags & QF_GETLIST_TITLE) + status = qf_getprop_title(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_NR)) +! status = dict_add_number(retdict, "nr", qf_idx + 1); + if ((status == OK) && (flags & QF_GETLIST_WINID)) +! status = dict_add_number(retdict, "winid", qf_winid(qi)); + if ((status == OK) && (flags & QF_GETLIST_ITEMS)) + status = qf_getprop_items(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) + status = qf_getprop_ctx(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_ID)) +! status = dict_add_number(retdict, "id", qi->qf_lists[qf_idx].qf_id); + if ((status == OK) && (flags & QF_GETLIST_IDX)) + status = qf_getprop_idx(qi, qf_idx, retdict); + if ((status == OK) && (flags & QF_GETLIST_SIZE)) +! status = dict_add_number(retdict, "size", +! qi->qf_lists[qf_idx].qf_count); + if ((status == OK) && (flags & QF_GETLIST_TICK)) +! status = dict_add_number(retdict, "changedtick", +! qi->qf_lists[qf_idx].qf_changedtick); + + return status; + } +*** ../vim-8.1.0165/src/tag.c Sat Jun 30 22:40:39 2018 +--- src/tag.c Sun Jul 8 16:42:07 2018 +*************** +*** 905,915 **** + continue; + } + +! dict_add_nr_str(dict, "text", 0L, tag_name); +! dict_add_nr_str(dict, "filename", 0L, fname); +! dict_add_nr_str(dict, "lnum", lnum, NULL); + if (lnum == 0) +! dict_add_nr_str(dict, "pattern", 0L, cmd); + } + + vim_snprintf((char *)IObuff, IOSIZE, "ltag %s", tag); +--- 905,915 ---- + continue; + } + +! dict_add_string(dict, "text", tag_name); +! dict_add_string(dict, "filename", fname); +! dict_add_number(dict, "lnum", lnum); + if (lnum == 0) +! dict_add_string(dict, "pattern", cmd); + } + + vim_snprintf((char *)IObuff, IOSIZE, "ltag %s", tag); +*************** +*** 3923,3929 **** + vim_strncpy(buf, start, len); + } + buf[len] = NUL; +! retval = dict_add_nr_str(dict, field_name, 0L, buf); + vim_free(buf); + return retval; + } +--- 3923,3929 ---- + vim_strncpy(buf, start, len); + } + buf[len] = NUL; +! retval = dict_add_string(dict, field_name, buf); + vim_free(buf); + return retval; + } +*************** +*** 3968,3974 **** + tp.command_end) == FAIL + || add_tag_field(dict, "kind", tp.tagkind, + tp.tagkind_end) == FAIL +! || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL) + ret = FAIL; + + vim_free(full_fname); +--- 3968,3974 ---- + tp.command_end) == FAIL + || add_tag_field(dict, "kind", tp.tagkind, + tp.tagkind_end) == FAIL +! || dict_add_number(dict, "static", is_static) == FAIL) + ret = FAIL; + + vim_free(full_fname); +*** ../vim-8.1.0165/src/terminal.c Tue Jun 19 19:59:15 2018 +--- src/terminal.c Sun Jul 8 16:42:07 2018 +*************** +*** 4729,4739 **** + d = dict_alloc(); + if (d != NULL) + { +! dict_add_nr_str(d, "visible", term->tl_cursor_visible, NULL); +! dict_add_nr_str(d, "blink", blink_state_is_inverted() +! ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL); +! dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL); +! dict_add_nr_str(d, "color", 0L, cursor_color_get(term->tl_cursor_color)); + list_append_dict(l, d); + } + } +--- 4729,4739 ---- + d = dict_alloc(); + if (d != NULL) + { +! dict_add_number(d, "visible", term->tl_cursor_visible); +! dict_add_number(d, "blink", blink_state_is_inverted() +! ? !term->tl_cursor_blink : term->tl_cursor_blink); +! dict_add_number(d, "shape", term->tl_cursor_shape); +! dict_add_string(d, "color", cursor_color_get(term->tl_cursor_color)); + list_append_dict(l, d); + } + } +*************** +*** 5059,5076 **** + break; + list_append_dict(l, dcell); + +! dict_add_nr_str(dcell, "chars", 0, mbs); + + vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", + fg.red, fg.green, fg.blue); +! dict_add_nr_str(dcell, "fg", 0, rgb); + vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", + bg.red, bg.green, bg.blue); +! dict_add_nr_str(dcell, "bg", 0, rgb); + +! dict_add_nr_str(dcell, "attr", +! cell2attr(attrs, fg, bg), NULL); +! dict_add_nr_str(dcell, "width", width, NULL); + + ++pos.col; + if (width == 2) +--- 5059,5075 ---- + break; + list_append_dict(l, dcell); + +! dict_add_string(dcell, "chars", mbs); + + vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", + fg.red, fg.green, fg.blue); +! dict_add_string(dcell, "fg", rgb); + vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", + bg.red, bg.green, bg.blue); +! dict_add_string(dcell, "bg", rgb); + +! dict_add_number(dcell, "attr", cell2attr(attrs, fg, bg)); +! dict_add_number(dcell, "width", width); + + ++pos.col; + if (width == 2) +*** ../vim-8.1.0165/src/undo.c Sun Jul 1 16:43:59 2018 +--- src/undo.c Sun Jul 8 16:42:07 2018 +*************** +*** 3567,3580 **** + dict = dict_alloc(); + if (dict == NULL) + return; +! dict_add_nr_str(dict, "seq", uhp->uh_seq, NULL); +! dict_add_nr_str(dict, "time", (long)uhp->uh_time, NULL); + if (uhp == curbuf->b_u_newhead) +! dict_add_nr_str(dict, "newhead", 1, NULL); + if (uhp == curbuf->b_u_curhead) +! dict_add_nr_str(dict, "curhead", 1, NULL); + if (uhp->uh_save_nr > 0) +! dict_add_nr_str(dict, "save", uhp->uh_save_nr, NULL); + + if (uhp->uh_alt_next.ptr != NULL) + { +--- 3567,3580 ---- + dict = dict_alloc(); + if (dict == NULL) + return; +! dict_add_number(dict, "seq", uhp->uh_seq); +! dict_add_number(dict, "time", (long)uhp->uh_time); + if (uhp == curbuf->b_u_newhead) +! dict_add_number(dict, "newhead", 1); + if (uhp == curbuf->b_u_curhead) +! dict_add_number(dict, "curhead", 1); + if (uhp->uh_save_nr > 0) +! dict_add_number(dict, "save", uhp->uh_save_nr); + + if (uhp->uh_alt_next.ptr != NULL) + { +*** ../vim-8.1.0165/src/version.c Sun Jul 8 16:01:04 2018 +--- src/version.c Sun Jul 8 16:43:50 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 166, + /**/ + + +-- +hundred-and-one symptoms of being an internet addict: +207. You're given one phone call in prison and you ask them for a laptop. + + /// 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 /// diff --git a/data/vim/patches/8.1.0167 b/data/vim/patches/8.1.0167 new file mode 100644 index 000000000..6cdbd2fd8 --- /dev/null +++ b/data/vim/patches/8.1.0167 @@ -0,0 +1,206 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0167 +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.0167 +Problem: Lock flag in new dictitem is reset in many places. +Solution: Always reset the lock flag. +Files: src/dict.c, src/channel.c, src/ex_cmds2.c, src/userfunc.c, + src/if_perl.xs, src/if_py_both.h + + +*** ../vim-8.1.0166/src/dict.c Sun Jul 8 16:50:33 2018 +--- src/dict.c Sun Jul 8 17:06:50 2018 +*************** +*** 188,194 **** + /* + * Allocate a Dictionary item. + * The "key" is copied to the new item. +! * Note that the value of the item "di_tv" still needs to be initialized! + * Returns NULL when out of memory. + */ + dictitem_T * +--- 188,195 ---- + /* + * Allocate a Dictionary item. + * The "key" is copied to the new item. +! * Note that the type and value of the item "di_tv" still needs to be +! * initialized! + * Returns NULL when out of memory. + */ + dictitem_T * +*************** +*** 201,206 **** +--- 202,208 ---- + { + STRCPY(di->di_key, key); + di->di_flags = DI_FLAGS_ALLOC; ++ di->di_tv.v_lock = 0; + } + return di; + } +*************** +*** 338,344 **** + item = dictitem_alloc((char_u *)key); + if (item == NULL) + return FAIL; +- item->di_tv.v_lock = 0; + item->di_tv.v_type = VAR_NUMBER; + item->di_tv.vval.v_number = nr; + if (dict_add(d, item) == FAIL) +--- 340,345 ---- +*************** +*** 361,367 **** + item = dictitem_alloc((char_u *)key); + if (item == NULL) + return FAIL; +- item->di_tv.v_lock = 0; + item->di_tv.v_type = VAR_STRING; + item->di_tv.vval.v_string = str != NULL ? vim_strsave(str) : NULL; + if (dict_add(d, item) == FAIL) +--- 362,367 ---- +*************** +*** 384,390 **** + item = dictitem_alloc((char_u *)key); + if (item == NULL) + return FAIL; +- item->di_tv.v_lock = 0; + item->di_tv.v_type = VAR_LIST; + item->di_tv.vval.v_list = list; + ++list->lv_refcount; +--- 384,389 ---- +*************** +*** 408,414 **** + item = dictitem_alloc((char_u *)key); + if (item == NULL) + return FAIL; +- item->di_tv.v_lock = 0; + item->di_tv.v_type = VAR_DICT; + item->di_tv.vval.v_dict = dict; + ++dict->dv_refcount; +--- 407,412 ---- +*** ../vim-8.1.0166/src/channel.c Sun Jul 8 16:50:33 2018 +--- src/channel.c Sun Jul 8 17:05:44 2018 +*************** +*** 5742,5748 **** + item = dictitem_alloc((char_u *)"channel"); + if (item == NULL) + return; +- item->di_tv.v_lock = 0; + item->di_tv.v_type = VAR_CHANNEL; + item->di_tv.vval.v_channel = job->jv_channel; + if (job->jv_channel != NULL) +--- 5742,5747 ---- +*** ../vim-8.1.0166/src/ex_cmds2.c Sun Jul 8 16:50:33 2018 +--- src/ex_cmds2.c Sun Jul 8 17:07:59 2018 +*************** +*** 1524,1530 **** + di->di_tv.v_type = VAR_FUNC; + di->di_tv.vval.v_string = vim_strsave(timer->tr_callback); + } +- di->di_tv.v_lock = 0; + } + } + +--- 1524,1529 ---- +*** ../vim-8.1.0166/src/userfunc.c Sat Jun 30 18:27:59 2018 +--- src/userfunc.c Sun Jul 8 17:10:33 2018 +*************** +*** 2390,2396 **** + /* overwrite existing dict entry */ + clear_tv(&fudi.fd_di->di_tv); + fudi.fd_di->di_tv.v_type = VAR_FUNC; +- fudi.fd_di->di_tv.v_lock = 0; + fudi.fd_di->di_tv.vval.v_string = vim_strsave(name); + + /* behave like "dict" was used */ +--- 2390,2395 ---- +*** ../vim-8.1.0166/src/if_perl.xs Tue Mar 6 12:22:50 2018 +--- src/if_perl.xs Sun Jul 8 17:11:10 2018 +*************** +*** 1200,1209 **** + + if ((item = dictitem_alloc((char_u *)key)) == NULL) + break; +! +! item->di_tv.v_type = VAR_NUMBER; +! item->di_tv.v_lock = 0; +! item->di_tv.vval.v_number = 0; + + if (dict_add(dict, item) == FAIL) { + dictitem_free(item); +--- 1200,1207 ---- + + if ((item = dictitem_alloc((char_u *)key)) == NULL) + break; +! item->di_tv.v_type = VAR_NUMBER; +! item->di_tv.vval.v_number = 0; + + if (dict_add(dict, item) == FAIL) { + dictitem_free(item); +*** ../vim-8.1.0166/src/if_py_both.h Sun Jun 10 13:55:48 2018 +--- src/if_py_both.h Sun Jul 8 17:12:13 2018 +*************** +*** 1832,1838 **** + PyErr_NoMemory(); + return -1; + } +- di->di_tv.v_lock = 0; + di->di_tv.v_type = VAR_UNKNOWN; + + if (dict_add(dict, di) == FAIL) +--- 1832,1837 ---- +*************** +*** 2038,2044 **** + PyErr_NoMemory(); + return NULL; + } +- di->di_tv.v_lock = 0; + di->di_tv.v_type = VAR_UNKNOWN; + + valObject = PySequence_Fast_GET_ITEM(fast, 1); +--- 2037,2042 ---- +*************** +*** 5852,5858 **** + dict_unref(dict); + return -1; + } +- di->di_tv.v_lock = 0; + + if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1) + { +--- 5850,5855 ---- +*************** +*** 5950,5956 **** + PyErr_NoMemory(); + return -1; + } +- di->di_tv.v_lock = 0; + + if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1) + { +--- 5947,5952 ---- +*** ../vim-8.1.0166/src/version.c Sun Jul 8 16:50:33 2018 +--- src/version.c Sun Jul 8 17:18:05 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 167, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +208. Your goals for the future are obtaining an T1 connection and + a 130 gig hard drive. + + /// 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 /// diff --git a/data/vim/patches/8.1.0168 b/data/vim/patches/8.1.0168 new file mode 100644 index 000000000..caf543f05 --- /dev/null +++ b/data/vim/patches/8.1.0168 @@ -0,0 +1,138 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0168 +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.0168 +Problem: Output of :marks is too short with multi-byte chars. (Tony + Mechelynck) +Solution: Get more bytes from the text line. +Files: src/mark.c, src/testdir/test_marks.vim + + +*** ../vim-8.1.0167/src/mark.c Tue Feb 13 13:31:39 2018 +--- src/mark.c Sun Jul 8 17:51:23 2018 +*************** +*** 686,695 **** + + if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count) + return vim_strsave((char_u *)"-invalid-"); +! s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns); + if (s == NULL) + return NULL; +! /* Truncate the line to fit it in the window */ + len = 0; + for (p = s; *p != NUL; MB_PTR_ADV(p)) + { +--- 686,696 ---- + + if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count) + return vim_strsave((char_u *)"-invalid-"); +! // Allow for up to 5 bytes per character. +! s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns * 5); + if (s == NULL) + return NULL; +! // Truncate the line to fit it in the window. + len = 0; + for (p = s; *p != NUL; MB_PTR_ADV(p)) + { +*** ../vim-8.1.0167/src/testdir/test_marks.vim Sun Oct 8 21:36:50 2017 +--- src/testdir/test_marks.vim Sun Jul 8 17:50:33 2018 +*************** +*** 80,86 **** + w! + + b Xone +! let a=split(execute('marks'), "\n") + call assert_equal(9, len(a)) + call assert_equal('mark line col file/text', a[0]) + call assert_equal(" ' 2 0 bbb", a[1]) +--- 80,86 ---- + w! + + b Xone +! let a = split(execute('marks'), "\n") + call assert_equal(9, len(a)) + call assert_equal('mark line col file/text', a[0]) + call assert_equal(" ' 2 0 bbb", a[1]) +*************** +*** 93,99 **** + call assert_equal(' . 2 0 bbb', a[8]) + + b Xtwo +! let a=split(execute('marks'), "\n") + call assert_equal(9, len(a)) + call assert_equal('mark line col file/text', a[0]) + call assert_equal(" ' 1 0 ccc", a[1]) +--- 93,99 ---- + call assert_equal(' . 2 0 bbb', a[8]) + + b Xtwo +! let a = split(execute('marks'), "\n") + call assert_equal(9, len(a)) + call assert_equal('mark line col file/text', a[0]) + call assert_equal(" ' 1 0 ccc", a[1]) +*************** +*** 107,113 **** + + b Xone + delmarks aB +! let a=split(execute('marks aBcD'), "\n") + call assert_equal(2, len(a)) + call assert_equal('mark line col file/text', a[0]) + call assert_equal(' D 2 0 Xtwo', a[1]) +--- 107,113 ---- + + b Xone + delmarks aB +! let a = split(execute('marks aBcD'), "\n") + call assert_equal(2, len(a)) + call assert_equal('mark line col file/text', a[0]) + call assert_equal(' D 2 0 Xtwo', a[1]) +*************** +*** 120,122 **** +--- 120,141 ---- + call delete('Xtwo') + %bwipe + endfunc ++ ++ func Test_marks_cmd_multibyte() ++ if !has('multi_byte') ++ return ++ endif ++ new Xone ++ call setline(1, ['ááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá']) ++ norm! ma ++ ++ let a = split(execute('marks a'), "\n") ++ call assert_equal(2, len(a)) ++ let expected = ' a 1 0 ' ++ while strwidth(expected) < &columns - 1 ++ let expected .= 'á' ++ endwhile ++ call assert_equal(expected, a[1]) ++ ++ bwipe! ++ endfunc +*** ../vim-8.1.0167/src/version.c Sun Jul 8 17:18:58 2018 +--- src/version.c Sun Jul 8 17:51:37 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 168, + /**/ + +-- +Your mouse has moved. Windows must be restarted for the change +to take effect. Reboot now? + + /// 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 /// diff --git a/data/vim/patches/8.1.0169 b/data/vim/patches/8.1.0169 new file mode 100644 index 000000000..8b6702b98 --- /dev/null +++ b/data/vim/patches/8.1.0169 @@ -0,0 +1,110 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0169 +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.0169 (after 8.1.0165) +Problem: Calling message_filtered() a bit too often. +Solution: Only call message_filtered() when filtering is already false. +Files: src/quickfix.c, runtime/doc/quickfix.txt + + +*** ../vim-8.1.0168/src/quickfix.c Sun Jul 8 16:50:33 2018 +--- src/quickfix.c Sun Jul 8 18:17:59 2018 +*************** +*** 3139,3156 **** + sprintf((char *)IObuff, "%2d", i); + else + vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", +! i, (char *)fname); + } + + // Support for filtering entries using :filter /pat/ clist +! filter_entry = 1; + if (qfp->qf_module != NULL && *qfp->qf_module != NUL) + filter_entry &= message_filtered(qfp->qf_module); +! if (fname != NULL) + filter_entry &= message_filtered(fname); +! if (qfp->qf_pattern != NULL) + filter_entry &= message_filtered(qfp->qf_pattern); +! filter_entry &= message_filtered(qfp->qf_text); + if (filter_entry) + goto next_entry; + +--- 3139,3159 ---- + sprintf((char *)IObuff, "%2d", i); + else + vim_snprintf((char *)IObuff, IOSIZE, "%2d %s", +! i, (char *)fname); + } + + // Support for filtering entries using :filter /pat/ clist +! // Match against the module name, file name, search pattern and +! // text of the entry. +! filter_entry = TRUE; + if (qfp->qf_module != NULL && *qfp->qf_module != NUL) + filter_entry &= message_filtered(qfp->qf_module); +! if (filter_entry && fname != NULL) + filter_entry &= message_filtered(fname); +! if (filter_entry && qfp->qf_pattern != NULL) + filter_entry &= message_filtered(qfp->qf_pattern); +! if (filter_entry) +! filter_entry &= message_filtered(qfp->qf_text); + if (filter_entry) + goto next_entry; + +*** ../vim-8.1.0168/runtime/doc/quickfix.txt Thu May 17 13:42:02 2018 +--- runtime/doc/quickfix.txt Sun Jul 8 18:16:55 2018 +*************** +*** 298,303 **** +--- 298,307 ---- + from the last error backwards, -1 being the last error. + The 'switchbuf' settings are respected when jumping + to a buffer. ++ The |:filter| command can be used to display only the ++ quickfix entries matching a supplied pattern. The ++ pattern is matched against the filename, module name, ++ pattern and text of the entry. + + :cl[ist] +{count} List the current and next {count} valid errors. This + is similar to ":clist from from+count", where "from" +*************** +*** 1287,1293 **** + Changing directory + + The following uppercase conversion characters specify the type of special +! format strings. At most one of them may be given as a prefix at the begin + of a single comma-separated format pattern. + Some compilers produce messages that consist of directory names that have to + be prepended to each file name read by %f (example: GNU make). The following +--- 1291,1297 ---- + Changing directory + + The following uppercase conversion characters specify the type of special +! format strings. At most one of them may be given as a prefix at the beginning + of a single comma-separated format pattern. + Some compilers produce messages that consist of directory names that have to + be prepended to each file name read by %f (example: GNU make). The following +*** ../vim-8.1.0168/src/version.c Sun Jul 8 17:57:30 2018 +--- src/version.c Sun Jul 8 18:16:48 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 169, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +211. Your husband leaves you...taking the computer with him and you + call him crying, and beg him to bring the computer back. + + /// 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 /// diff --git a/data/vim/patches/8.1.0170 b/data/vim/patches/8.1.0170 new file mode 100644 index 000000000..7c6ab3497 --- /dev/null +++ b/data/vim/patches/8.1.0170 @@ -0,0 +1,296 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0170 +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.0170 +Problem: Invalid memory use with complicated pattern. (Andy Massimino) +Solution: Reallocate the list of listids when needed. (closes #3175) + Remove unnecessary function prototypes. +Files: src/regexp_nfa.c + + +*** ../vim-8.1.0169/src/regexp_nfa.c Sat Jun 23 17:14:36 2018 +--- src/regexp_nfa.c Sun Jul 8 19:03:46 2018 +*************** +*** 282,322 **** + /* 0 for first call to nfa_regmatch(), 1 for recursive call. */ + static int nfa_ll_index = 0; + +- static int nfa_regcomp_start(char_u *expr, int re_flags); +- static int nfa_get_reganch(nfa_state_T *start, int depth); +- static int nfa_get_regstart(nfa_state_T *start, int depth); +- static char_u *nfa_get_match_text(nfa_state_T *start); + static int realloc_post_list(void); +- static int nfa_recognize_char_class(char_u *start, char_u *end, int extra_newl); +- static int nfa_emit_equi_class(int c); +- static int nfa_regatom(void); +- static int nfa_regpiece(void); +- static int nfa_regconcat(void); +- static int nfa_regbranch(void); + static int nfa_reg(int paren); + #ifdef DEBUG +- static void nfa_set_code(int c); +- static void nfa_postfix_dump(char_u *expr, int retval); +- static void nfa_print_state(FILE *debugf, nfa_state_T *state); + static void nfa_print_state2(FILE *debugf, nfa_state_T *state, garray_T *indent); +- static void nfa_dump(nfa_regprog_T *prog); + #endif +- static int *re2post(void); +- static nfa_state_T *alloc_state(int c, nfa_state_T *out, nfa_state_T *out1); +- static void st_error(int *postfix, int *end, int *p); +- static int nfa_max_width(nfa_state_T *startstate, int depth); +- static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size); +- static void nfa_postprocess(nfa_regprog_T *prog); +- static int check_char_class(int class, int c); +- static void nfa_save_listids(nfa_regprog_T *prog, int *list); +- static void nfa_restore_listids(nfa_regprog_T *prog, int *list); +- static int nfa_re_num_cmp(long_u val, int op, long_u pos); +- static long nfa_regtry(nfa_regprog_T *prog, colnr_T col, proftime_T *tm, int *timed_out); +- static long nfa_regexec_both(char_u *line, colnr_T col, proftime_T *tm, int *timed_out); +- static regprog_T *nfa_regcomp(char_u *expr, int re_flags); +- static void nfa_regfree(regprog_T *prog); +- static int nfa_regexec_nl(regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr); +- static long nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm, int *timed_out); + static int match_follows(nfa_state_T *startstate, int depth); + static int failure_chance(nfa_state_T *state, int depth); + +--- 282,292 ---- +*************** +*** 2876,2888 **** + }; + typedef struct Frag Frag_T; + +- static Frag_T frag(nfa_state_T *start, Ptrlist *out); +- static Ptrlist *list1(nfa_state_T **outp); +- static void patch(Ptrlist *l, nfa_state_T *s); +- static Ptrlist *append(Ptrlist *l1, Ptrlist *l2); +- static void st_push(Frag_T s, Frag_T **p, Frag_T *stack_end); +- static Frag_T st_pop(Frag_T **p, Frag_T *stack); +- + /* + * Initialize a Frag_T struct and return it. + */ +--- 2846,2851 ---- +*************** +*** 3917,3925 **** + } nfa_list_T; + + #ifdef ENABLE_LOG +- static void log_subsexpr(regsubs_T *subs); + static void log_subexpr(regsub_T *sub); +- static char *pim_info(nfa_pim_T *pim); + + static void + log_subsexpr(regsubs_T *subs) +--- 3880,3886 ---- +*************** +*** 3974,3998 **** + #endif + + /* Used during execution: whether a match has been found. */ +! static int nfa_match; + #ifdef FEAT_RELTIME + static proftime_T *nfa_time_limit; + static int *nfa_timed_out; + static int nfa_time_count; + #endif + +- static void copy_pim(nfa_pim_T *to, nfa_pim_T *from); +- static void clear_sub(regsub_T *sub); + static void copy_sub(regsub_T *to, regsub_T *from); +- static void copy_sub_off(regsub_T *to, regsub_T *from); +- static void copy_ze_off(regsub_T *to, regsub_T *from); +- static int sub_equal(regsub_T *sub1, regsub_T *sub2); +- static int match_backref(regsub_T *sub, int subidx, int *bytelen); +- static int has_state_with_pos(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim); + static int pim_equal(nfa_pim_T *one, nfa_pim_T *two); +- static int state_in_list(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs); +- static regsubs_T *addstate(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs_arg, nfa_pim_T *pim, int off); +- static void addstate_here(nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim, int *ip); + + /* + * Copy postponed invisible match info from "from" to "to". +--- 3935,3949 ---- + #endif + + /* Used during execution: whether a match has been found. */ +! static int nfa_match; + #ifdef FEAT_RELTIME + static proftime_T *nfa_time_limit; + static int *nfa_timed_out; + static int nfa_time_count; + #endif + + static void copy_sub(regsub_T *to, regsub_T *from); + static int pim_equal(nfa_pim_T *one, nfa_pim_T *two); + + /* + * Copy postponed invisible match info from "from" to "to". +*************** +*** 5018,5025 **** + + #ifdef FEAT_SYN_HL + +- static int match_zref(int subidx, int *bytelen); +- + /* + * Check for a match with \z subexpression "subidx". + * Return TRUE if it matches. +--- 4969,4974 ---- +*************** +*** 5095,5101 **** + return val == pos; + } + +- static int recursive_regmatch(nfa_state_T *state, nfa_pim_T *pim, nfa_regprog_T *prog, regsubs_T *submatch, regsubs_T *m, int **listids); + static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *submatch, regsubs_T *m); + + /* +--- 5044,5049 ---- +*************** +*** 5110,5116 **** + nfa_regprog_T *prog, + regsubs_T *submatch, + regsubs_T *m, +! int **listids) + { + int save_reginput_col = (int)(reginput - regline); + int save_reglnum = reglnum; +--- 5058,5065 ---- + nfa_regprog_T *prog, + regsubs_T *submatch, + regsubs_T *m, +! int **listids, +! int *listids_len) + { + int save_reginput_col = (int)(reginput - regline); + int save_reglnum = reglnum; +*************** +*** 5212,5225 **** + { + /* Already calling nfa_regmatch() recursively. Save the lastlist[1] + * values and clear them. */ +! if (*listids == NULL) + { + *listids = (int *)lalloc(sizeof(int) * nstate, TRUE); + if (*listids == NULL) + { + EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!")); + return 0; + } + } + nfa_save_listids(prog, *listids); + need_restore = TRUE; +--- 5161,5176 ---- + { + /* Already calling nfa_regmatch() recursively. Save the lastlist[1] + * values and clear them. */ +! if (*listids == NULL || *listids_len < nstate) + { ++ vim_free(*listids); + *listids = (int *)lalloc(sizeof(int) * nstate, TRUE); + if (*listids == NULL) + { + EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!")); + return 0; + } ++ *listids_len = nstate; + } + nfa_save_listids(prog, *listids); + need_restore = TRUE; +*************** +*** 5279,5287 **** + return result; + } + +- static int skip_to_start(int c, colnr_T *colp); +- static long find_match_text(colnr_T startcol, int regstart, char_u *match_text); +- + /* + * Estimate the chance of a match with "state" failing. + * empty match: 0 +--- 5230,5235 ---- +*************** +*** 5570,5575 **** +--- 5518,5524 ---- + nfa_list_T *thislist; + nfa_list_T *nextlist; + int *listids = NULL; ++ int listids_len = 0; + nfa_state_T *add_state; + int add_here; + int add_count; +*************** +*** 5898,5904 **** + * follows. + */ + result = recursive_regmatch(t->state, NULL, prog, +! submatch, m, &listids); + if (result == NFA_TOO_EXPENSIVE) + { + nfa_match = result; +--- 5847,5853 ---- + * follows. + */ + result = recursive_regmatch(t->state, NULL, prog, +! submatch, m, &listids, &listids_len); + if (result == NFA_TOO_EXPENSIVE) + { + nfa_match = result; +*************** +*** 6016,6022 **** + + /* First try matching the pattern. */ + result = recursive_regmatch(t->state, NULL, prog, +! submatch, m, &listids); + if (result == NFA_TOO_EXPENSIVE) + { + nfa_match = result; +--- 5965,5971 ---- + + /* First try matching the pattern. */ + result = recursive_regmatch(t->state, NULL, prog, +! submatch, m, &listids, &listids_len); + if (result == NFA_TOO_EXPENSIVE) + { + nfa_match = result; +*************** +*** 6783,6789 **** + fprintf(log_fd, "\n"); + #endif + result = recursive_regmatch(pim->state, pim, +! prog, submatch, m, &listids); + pim->result = result ? NFA_PIM_MATCH : NFA_PIM_NOMATCH; + /* for \@! and \@<! it is a match when the result is + * FALSE */ +--- 6732,6738 ---- + fprintf(log_fd, "\n"); + #endif + result = recursive_regmatch(pim->state, pim, +! prog, submatch, m, &listids, &listids_len); + pim->result = result ? NFA_PIM_MATCH : NFA_PIM_NOMATCH; + /* for \@! and \@<! it is a match when the result is + * FALSE */ +*** ../vim-8.1.0169/src/version.c Sun Jul 8 18:20:18 2018 +--- src/version.c Sun Jul 8 19:06:47 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 170, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +213. Your kids start referring to you as "that guy in front of the monitor." + + /// 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 /// diff --git a/data/vim/patches/8.1.0171 b/data/vim/patches/8.1.0171 new file mode 100644 index 000000000..3ea192f73 --- /dev/null +++ b/data/vim/patches/8.1.0171 @@ -0,0 +1,105 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0171 +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.0171 +Problem: Typing CTRL-W n in a terminal window causes ml_get error. +Solution: When resizing the terminal outside of terminal_loop() make sure + the snapshot is complete. +Files: src/terminal.c, src/testdir/test_terminal.vim + + +*** ../vim-8.1.0170/src/terminal.c Sun Jul 8 16:50:33 2018 +--- src/terminal.c Sun Jul 8 20:48:42 2018 +*************** +*** 3134,3146 **** + + if (term->tl_rows != newrows || term->tl_cols != newcols) + { +- +- + term->tl_vterm_size_changed = TRUE; + vterm_set_size(vterm, newrows, newcols); + ch_log(term->tl_job->jv_channel, "Resizing terminal to %d lines", + newrows); + term_report_winsize(term, newrows, newcols); + } + + /* The cursor may have been moved when resizing. */ +--- 3134,3149 ---- + + if (term->tl_rows != newrows || term->tl_cols != newcols) + { + term->tl_vterm_size_changed = TRUE; + vterm_set_size(vterm, newrows, newcols); + ch_log(term->tl_job->jv_channel, "Resizing terminal to %d lines", + newrows); + term_report_winsize(term, newrows, newcols); ++ ++ // Updating the terminal size will cause the snapshot to be cleared. ++ // When not in terminal_loop() we need to restore it. ++ if (term != in_terminal_loop) ++ may_move_terminal_to_buffer(term, FALSE); + } + + /* The cursor may have been moved when resizing. */ +*** ../vim-8.1.0170/src/testdir/test_terminal.vim Tue Jun 19 20:08:10 2018 +--- src/testdir/test_terminal.vim Sun Jul 8 20:46:08 2018 +*************** +*** 1525,1530 **** +--- 1525,1556 ---- + exe buf . 'bwipe!' + endfunc + ++ " Resizing the terminal window caused an ml_get error. ++ " TODO: This does not reproduce the original problem. ++ func Test_terminal_resize() ++ set statusline=x ++ terminal ++ call assert_equal(2, winnr('$')) ++ ++ " Fill the terminal with text. ++ if has('win32') ++ call feedkeys("dir\<CR>", 'xt') ++ else ++ call feedkeys("ls\<CR>", 'xt') ++ endif ++ " Go to Terminal-Normal mode for a moment. ++ call feedkeys("\<C-W>N", 'xt') ++ " Open a new window ++ call feedkeys("i\<C-W>n", 'xt') ++ call assert_equal(3, winnr('$')) ++ redraw ++ ++ close ++ call assert_equal(2, winnr('$')) ++ call feedkeys("exit\<CR>", 'xt') ++ set statusline& ++ endfunc ++ + " must be nearly the last, we can't go back from GUI to terminal + func Test_zz1_terminal_in_gui() + if !CanRunGui() +*** ../vim-8.1.0170/src/version.c Sun Jul 8 19:07:16 2018 +--- src/version.c Sun Jul 8 20:46:58 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 171, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +215. Your mouse-clicking forearm rivals Popeye's. + + /// 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 /// diff --git a/data/vim/patches/8.1.0172 b/data/vim/patches/8.1.0172 new file mode 100644 index 000000000..e83559014 --- /dev/null +++ b/data/vim/patches/8.1.0172 @@ -0,0 +1,54 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0172 +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.0172 +Problem: 'viminfofile' option does not behave like a file name. +Solution: Add the P_EXPAND flag. (closes #3178) +Files: src/option.c + + +*** ../vim-8.1.0171/src/option.c Sun Jul 8 16:50:33 2018 +--- src/option.c Sun Jul 8 21:39:50 2018 +*************** +*** 2997,3003 **** + {(char_u *)0L, (char_u *)0L} + #endif + SCRIPTID_INIT}, +! {"viminfofile", "vif", P_STRING|P_ONECOMMA|P_NODUP|P_SECURE|P_VI_DEF, + #ifdef FEAT_VIMINFO + (char_u *)&p_viminfofile, PV_NONE, + {(char_u *)"", (char_u *)0L} +--- 2997,3004 ---- + {(char_u *)0L, (char_u *)0L} + #endif + SCRIPTID_INIT}, +! {"viminfofile", "vif", P_STRING|P_EXPAND|P_ONECOMMA|P_NODUP +! |P_SECURE|P_VI_DEF, + #ifdef FEAT_VIMINFO + (char_u *)&p_viminfofile, PV_NONE, + {(char_u *)"", (char_u *)0L} +*** ../vim-8.1.0171/src/version.c Sun Jul 8 20:49:03 2018 +--- src/version.c Sun Jul 8 21:44:15 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 172, + /**/ + +-- +I noticed my daughter's Disney-net password on a sticky note: +"MickeyMinnieGoofyPluto". I asked her why it was so long. +"Because they say it has to have at least four characters." + + /// 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 /// diff --git a/data/vim/patches/8.1.0173 b/data/vim/patches/8.1.0173 new file mode 100644 index 000000000..9712a07a3 --- /dev/null +++ b/data/vim/patches/8.1.0173 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0173 +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.0173 +Problem: Compiler warning on MS-Windows. +Solution: Add type cast. (Mike Williams) +Files: src/libvterm/src/state.c + + +*** ../vim-8.1.0172/src/libvterm/src/state.c Tue Apr 24 18:21:11 2018 +--- src/libvterm/src/state.c Mon Jul 9 20:37:34 2018 +*************** +*** 268,274 **** + if(!npoints) + { + vterm_allocator_free(state->vt, codepoints); +! return eaten; + } + + if(state->gsingle_set && npoints) +--- 268,274 ---- + if(!npoints) + { + vterm_allocator_free(state->vt, codepoints); +! return (int)eaten; + } + + if(state->gsingle_set && npoints) +*** ../vim-8.1.0172/src/version.c Sun Jul 8 21:46:52 2018 +--- src/version.c Mon Jul 9 20:38:11 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 173, + /**/ + +-- +Don't be humble ... you're not that great. + -- Golda Meir + + /// 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 /// diff --git a/data/vim/patches/8.1.0174 b/data/vim/patches/8.1.0174 new file mode 100644 index 000000000..73011d4b0 --- /dev/null +++ b/data/vim/patches/8.1.0174 @@ -0,0 +1,130 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0174 +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.0174 +Problem: After paging up and down fold line is wrong. +Solution: Correct the computation of w_topline and w_botline. (Hirohito + Higashi) +Files: src/move.c, src/testdir/test_fold.vim + + +*** ../vim-8.1.0173/src/move.c Sun Mar 4 20:06:26 2018 +--- src/move.c Tue Jul 10 14:50:55 2018 +*************** +*** 2457,2478 **** + beginline(BL_SOL | BL_FIX); + curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL); + +! /* +! * Avoid the screen jumping up and down when 'scrolloff' is non-zero. +! * But make sure we scroll at least one line (happens with mix of long +! * wrapping lines and non-wrapping line). +! */ +! if (retval == OK && dir == FORWARD && check_top_offset()) + { +! scroll_cursor_top(1, FALSE); +! if (curwin->w_topline <= old_topline +! && old_topline < curbuf->b_ml.ml_line_count) + { +! curwin->w_topline = old_topline + 1; + #ifdef FEAT_FOLDING +! (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL); + #endif + } + } + + redraw_later(VALID); +--- 2457,2483 ---- + beginline(BL_SOL | BL_FIX); + curwin->w_valid &= ~(VALID_WCOL|VALID_WROW|VALID_VIRTCOL); + +! if (retval == OK && dir == FORWARD) + { +! // Avoid the screen jumping up and down when 'scrolloff' is non-zero. +! // But make sure we scroll at least one line (happens with mix of long +! // wrapping lines and non-wrapping line). +! if (check_top_offset()) + { +! scroll_cursor_top(1, FALSE); +! if (curwin->w_topline <= old_topline +! && old_topline < curbuf->b_ml.ml_line_count) +! { +! curwin->w_topline = old_topline + 1; + #ifdef FEAT_FOLDING +! (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL); + #endif ++ } + } ++ #ifdef FEAT_FOLDING ++ else if (curwin->w_botline > curbuf->b_ml.ml_line_count) ++ (void)hasFolding(curwin->w_topline, &curwin->w_topline, NULL); ++ #endif + } + + redraw_later(VALID); +*** ../vim-8.1.0173/src/testdir/test_fold.vim Sun Nov 5 20:53:03 2017 +--- src/testdir/test_fold.vim Tue Jul 10 14:50:55 2018 +*************** +*** 1,5 **** +--- 1,7 ---- + " Test for folding + ++ source view_util.vim ++ + func PrepIndent(arg) + return [a:arg] + repeat(["\t".a:arg], 5) + endfu +*************** +*** 648,650 **** +--- 650,676 ---- + endtry + call assert_match('E492:', a) + endfunc ++ ++ func Test_fold_last_line_with_pagedown() ++ enew! ++ set fdm=manual ++ ++ let expect = '+-- 11 lines: 9---' ++ let content = range(1,19) ++ call append(0, content) ++ normal dd9G ++ normal zfG ++ normal zt ++ call assert_equal('9', getline(foldclosed('.'))) ++ call assert_equal('19', getline(foldclosedend('.'))) ++ call assert_equal(expect, ScreenLines(1, len(expect))[0]) ++ call feedkeys("\<C-F>", 'xt') ++ call assert_equal(expect, ScreenLines(1, len(expect))[0]) ++ call feedkeys("\<C-F>", 'xt') ++ call assert_equal(expect, ScreenLines(1, len(expect))[0]) ++ call feedkeys("\<C-B>\<C-F>\<C-F>", 'xt') ++ call assert_equal(expect, ScreenLines(1, len(expect))[0]) ++ ++ set fdm& ++ enew! ++ endfunc +*** ../vim-8.1.0173/src/version.c Mon Jul 9 20:39:12 2018 +--- src/version.c Tue Jul 10 14:52:30 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 174, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +220. Your wife asks for sex and you tell her where to find you on IRC. + + /// 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 /// diff --git a/data/vim/patches/8.1.0175 b/data/vim/patches/8.1.0175 new file mode 100644 index 000000000..caabae101 --- /dev/null +++ b/data/vim/patches/8.1.0175 @@ -0,0 +1,64 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0175 +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.0175 +Problem: Marks test fails in very wide window. (Vladimir Lomov) +Solution: Extend the text to match 'columns'. (closes #3180, closes #3181) +Files: src/testdir/test_marks.vim + + +*** ../vim-8.1.0174/src/testdir/test_marks.vim Sun Jul 8 17:57:30 2018 +--- src/testdir/test_marks.vim Tue Jul 10 15:18:04 2018 +*************** +*** 126,140 **** + return + endif + new Xone +! call setline(1, ['ááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá']) + norm! ma + + let a = split(execute('marks a'), "\n") + call assert_equal(2, len(a)) +! let expected = ' a 1 0 ' +! while strwidth(expected) < &columns - 1 +! let expected .= 'á' +! endwhile + call assert_equal(expected, a[1]) + + bwipe! +--- 126,137 ---- + return + endif + new Xone +! call setline(1, [repeat('á', &columns)]) + norm! ma + + let a = split(execute('marks a'), "\n") + call assert_equal(2, len(a)) +! let expected = ' a 1 0 ' . repeat('á', &columns - 16) + call assert_equal(expected, a[1]) + + bwipe! +*** ../vim-8.1.0174/src/version.c Tue Jul 10 15:07:11 2018 +--- src/version.c Tue Jul 10 15:14:07 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 175, + /**/ + +-- +Your fault: core dumped + + /// 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 /// diff --git a/data/vim/patches/8.1.0176 b/data/vim/patches/8.1.0176 new file mode 100644 index 000000000..8530810f3 --- /dev/null +++ b/data/vim/patches/8.1.0176 @@ -0,0 +1,52 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0176 +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.0176 +Problem: Overlapping string argument for strcpy(). (Coverity) +Solution: Use STRMOVE() instead of STRCPY(). (Dominique Pelle, closes #3187) +Files: src/term.c + + +*** ../vim-8.1.0175/src/term.c Fri Jul 6 23:11:35 2018 +--- src/term.c Tue Jul 10 17:31:59 2018 +*************** +*** 1483,1489 **** + if (term_7to8bit(t)) + { + *t = term_7to8bit(t); +! STRCPY(t + 1, t + 2); + } + term_strings[p->bt_entry] = s; + set_term_option_alloced(&term_strings[p->bt_entry]); +--- 1483,1489 ---- + if (term_7to8bit(t)) + { + *t = term_7to8bit(t); +! STRMOVE(t + 1, t + 2); + } + term_strings[p->bt_entry] = s; + set_term_option_alloced(&term_strings[p->bt_entry]); +*** ../vim-8.1.0175/src/version.c Tue Jul 10 15:22:28 2018 +--- src/version.c Tue Jul 10 17:32:50 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 176, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +223. You set up a web-cam as your home's security system. + + /// 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 /// diff --git a/data/vim/patches/8.1.0177 b/data/vim/patches/8.1.0177 new file mode 100644 index 000000000..7df24e759 --- /dev/null +++ b/data/vim/patches/8.1.0177 @@ -0,0 +1,146 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0177 +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.0177 +Problem: Defining function in sandbox is inconsistent, cannot use :function + but can define a lambda. +Solution: Allow defining a function in the sandbox, but also use the sandbox + when executing it. (closes #3182) +Files: src/userfunc.c, src/ex_cmds.h + + +*** ../vim-8.1.0176/src/userfunc.c Sun Jul 8 17:18:58 2018 +--- src/userfunc.c Tue Jul 10 19:30:35 2018 +*************** +*** 14,26 **** + #include "vim.h" + + #if defined(FEAT_EVAL) || defined(PROTO) +! /* function flags */ +! #define FC_ABORT 0x01 /* abort function on error */ +! #define FC_RANGE 0x02 /* function accepts range */ +! #define FC_DICT 0x04 /* Dict function, uses "self" */ +! #define FC_CLOSURE 0x08 /* closure, uses outer scope variables */ +! #define FC_DELETED 0x10 /* :delfunction used while uf_refcount > 0 */ +! #define FC_REMOVED 0x20 /* function redefined while uf_refcount > 0 */ + + /* From user function to hashitem and back. */ + #define UF2HIKEY(fp) ((fp)->uf_name) +--- 14,27 ---- + #include "vim.h" + + #if defined(FEAT_EVAL) || defined(PROTO) +! // flags used in uf_flags +! #define FC_ABORT 0x01 // abort function on error +! #define FC_RANGE 0x02 // function accepts range +! #define FC_DICT 0x04 // Dict function, uses "self" +! #define FC_CLOSURE 0x08 // closure, uses outer scope variables +! #define FC_DELETED 0x10 // :delfunction used while uf_refcount > 0 +! #define FC_REMOVED 0x20 // function redefined while uf_refcount > 0 +! #define FC_SANDBOX 0x40 // function defined in the sandbox + + /* From user function to hashitem and back. */ + #define UF2HIKEY(fp) ((fp)->uf_name) +*************** +*** 296,301 **** +--- 297,304 ---- + if (prof_def_func()) + func_do_profile(fp); + #endif ++ if (sandbox) ++ flags |= FC_SANDBOX; + fp->uf_varargs = TRUE; + fp->uf_flags = flags; + fp->uf_calls = 0; +*************** +*** 688,693 **** +--- 691,697 ---- + char_u *save_sourcing_name; + linenr_T save_sourcing_lnum; + scid_T save_current_SID; ++ int using_sandbox = FALSE; + funccall_T *fc; + int save_did_emsg; + static int depth = 0; +*************** +*** 854,859 **** +--- 858,870 ---- + save_sourcing_name = sourcing_name; + save_sourcing_lnum = sourcing_lnum; + sourcing_lnum = 1; ++ ++ if (fp->uf_flags & FC_SANDBOX) ++ { ++ using_sandbox = TRUE; ++ ++sandbox; ++ } ++ + /* need space for function name + ("function " + 3) or "[number]" */ + len = (save_sourcing_name == NULL ? 0 : STRLEN(save_sourcing_name)) + + STRLEN(fp->uf_name) + 20; +*************** +*** 1020,1025 **** +--- 1031,1038 ---- + if (do_profiling == PROF_YES) + script_prof_restore(&wait_start); + #endif ++ if (using_sandbox) ++ --sandbox; + + if (p_verbose >= 12 && sourcing_name != NULL) + { +*************** +*** 2429,2434 **** +--- 2442,2449 ---- + func_do_profile(fp); + #endif + fp->uf_varargs = varargs; ++ if (sandbox) ++ flags |= FC_SANDBOX; + fp->uf_flags = flags; + fp->uf_calls = 0; + fp->uf_script_ID = current_SID; +*** ../vim-8.1.0176/src/ex_cmds.h Tue Apr 3 22:07:59 2018 +--- src/ex_cmds.h Tue Jul 10 19:17:05 2018 +*************** +*** 584,590 **** + EXTRA|NOTRLCOM|SBOXOK|CMDWIN, + ADDR_LINES), + EX(CMD_function, "function", ex_function, +! EXTRA|BANG|CMDWIN, + ADDR_LINES), + EX(CMD_global, "global", ex_global, + RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN, +--- 584,590 ---- + EXTRA|NOTRLCOM|SBOXOK|CMDWIN, + ADDR_LINES), + EX(CMD_function, "function", ex_function, +! EXTRA|BANG|SBOXOK|CMDWIN, + ADDR_LINES), + EX(CMD_global, "global", ex_global, + RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN, +*** ../vim-8.1.0176/src/version.c Tue Jul 10 17:33:41 2018 +--- src/version.c Tue Jul 10 19:38:37 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 177, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +224. You set up your own Web page. You set up a Web page for each + of your kids... and your pets. + + /// 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 /// diff --git a/data/vim/patches/8.1.0178 b/data/vim/patches/8.1.0178 new file mode 100644 index 000000000..fbba187e4 --- /dev/null +++ b/data/vim/patches/8.1.0178 @@ -0,0 +1,55 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0178 +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.0178 +Problem: Warning for passing pointer to non-pointer argument. +Solution: Use zero instead of NULL. +Files: src/if_ole.cpp + + +*** ../vim-8.1.0177/src/if_ole.cpp Mon Aug 29 22:42:20 2016 +--- src/if_ole.cpp Wed Jul 11 22:55:56 2018 +*************** +*** 759,765 **** + hr = RegisterActiveObject( + app, + MYCLSID, +! NULL, + &app_id); + + if (FAILED(hr)) +--- 759,765 ---- + hr = RegisterActiveObject( + app, + MYCLSID, +! 0, + &app_id); + + if (FAILED(hr)) +*** ../vim-8.1.0177/src/version.c Tue Jul 10 19:39:14 2018 +--- src/version.c Wed Jul 11 22:56:50 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 178, + /**/ + +-- +The term "free software" is defined by Richard M. Stallman as +being software that isn't necessarily for free. Confusing? +Let's call it "Stallman software" then! + -- Bram Moolenaar + + /// 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 /// diff --git a/data/vim/patches/8.1.0179 b/data/vim/patches/8.1.0179 new file mode 100644 index 000000000..e7e4aac00 --- /dev/null +++ b/data/vim/patches/8.1.0179 @@ -0,0 +1,58 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0179 +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.0179 +Problem: Redundant condition for boundary check. +Solution: Remove the condition. (Dominique Pelle). Change FALSE to FAIL. +Files: src/undo.c + + +*** ../vim-8.1.0178/src/undo.c 2018-07-08 16:50:33.111216814 +0200 +--- src/undo.c 2018-07-13 16:27:37.721354663 +0200 +*************** +*** 266,275 **** + if (undo_off) + return OK; + +! if (top > curbuf->b_ml.ml_line_count +! || top >= bot +! || bot > curbuf->b_ml.ml_line_count + 1) +! return FALSE; /* rely on caller to do error messages */ + + if (top + 2 == bot) + u_saveline((linenr_T)(top + 1)); +--- 266,273 ---- + if (undo_off) + return OK; + +! if (top >= bot || bot > curbuf->b_ml.ml_line_count + 1) +! return FAIL; // rely on caller to give an error message + + if (top + 2 == bot) + u_saveline((linenr_T)(top + 1)); +*** ../vim-8.1.0178/src/version.c 2018-07-11 22:57:47.947564638 +0200 +--- src/version.c 2018-07-13 16:29:28.492772093 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 179, + /**/ + +-- +"The amigos also appear to be guilty of not citing the work of others who had +gone before them. Even worse, they have a chapter about modeling time and +space without making a single reference to Star Trek!" + (Scott Ambler, reviewing the UML User Guide) + + /// 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 /// diff --git a/data/vim/patches/8.1.0180 b/data/vim/patches/8.1.0180 new file mode 100644 index 000000000..b5494c45b --- /dev/null +++ b/data/vim/patches/8.1.0180 @@ -0,0 +1,160 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0180 +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.0180 +Problem: Static analysis errors in Lua interface. (Coverity) +Solution: Check for NULL pointers. +Files: src/if_lua.c + + +*** ../vim-8.1.0179/src/if_lua.c Sat Jul 7 23:07:35 2018 +--- src/if_lua.c Fri Jul 13 22:05:37 2018 +*************** +*** 958,964 **** + typval_T v; + if (d->dv_lock) + luaL_error(L, "dict is locked"); +! if (key != NULL && *key == NUL) + luaL_error(L, "empty key"); + if (!lua_isnil(L, 3)) { /* read value? */ + luaV_checktypval(L, 3, &v, "setting dict item"); +--- 958,966 ---- + typval_T v; + if (d->dv_lock) + luaL_error(L, "dict is locked"); +! if (key == NULL) +! return 0; +! if (*key == NUL) + luaL_error(L, "empty key"); + if (!lua_isnil(L, 3)) { /* read value? */ + luaV_checktypval(L, 3, &v, "setting dict item"); +*************** +*** 968,980 **** + di = dict_find(d, key, -1); + if (di == NULL) /* non-existing key? */ + { +! if (lua_isnil(L, 3)) return 0; + di = dictitem_alloc(key); +! if (di == NULL) return 0; + if (dict_add(d, di) == FAIL) + { +! vim_free(di); +! return 0; + } + } + else +--- 970,984 ---- + di = dict_find(d, key, -1); + if (di == NULL) /* non-existing key? */ + { +! if (lua_isnil(L, 3)) +! return 0; + di = dictitem_alloc(key); +! if (di == NULL) +! return 0; + if (dict_add(d, di) == FAIL) + { +! vim_free(di); +! return 0; + } + } + else +*************** +*** 1066,1080 **** + + f->args.vval.v_list = list_alloc(); + rettv.v_type = VAR_UNKNOWN; /* as in clear_tv */ +! for (i = 0; i < n; i++) { +! luaV_checktypval(L, i + 2, &v, "calling funcref"); +! list_append_tv(f->args.vval.v_list, &v); +! } +! status = func_call(f->tv.vval.v_string, &f->args, NULL, f->self, &rettv); +! if (status == OK) +! luaV_pushtypval(L, &rettv); +! clear_tv(&f->args); +! clear_tv(&rettv); + if (status != OK) + luaL_error(L, "cannot call funcref"); + return 1; +--- 1070,1090 ---- + + f->args.vval.v_list = list_alloc(); + rettv.v_type = VAR_UNKNOWN; /* as in clear_tv */ +! if (f->args.vval.v_list == NULL) +! status = FAIL; +! else +! { +! for (i = 0; i < n; i++) { +! luaV_checktypval(L, i + 2, &v, "calling funcref"); +! list_append_tv(f->args.vval.v_list, &v); +! } +! status = func_call(f->tv.vval.v_string, &f->args, +! NULL, f->self, &rettv); +! if (status == OK) +! luaV_pushtypval(L, &rettv); +! clear_tv(&f->args); +! clear_tv(&rettv); +! } + if (status != OK) + luaL_error(L, "cannot call funcref"); + return 1; +*************** +*** 1560,1572 **** + char_u *key; + dictitem_T *di; + typval_T v; + lua_pushvalue(L, -2); /* dup key in case it's a number */ + key = (char_u *) lua_tostring(L, -1); +! if (key != NULL && *key == NUL) + luaL_error(L, "table has empty key"); + luaV_checktypval(L, -2, &v, "vim.dict"); /* value */ + di = dictitem_alloc(key); +! if (di == NULL || dict_add(d, di) == FAIL) { + vim_free(di); + lua_pushnil(L); + return 1; +--- 1570,1589 ---- + char_u *key; + dictitem_T *di; + typval_T v; ++ + lua_pushvalue(L, -2); /* dup key in case it's a number */ + key = (char_u *) lua_tostring(L, -1); +! if (key == NULL) +! { +! lua_pushnil(L); +! return 1; +! } +! if (*key == NUL) + luaL_error(L, "table has empty key"); + luaV_checktypval(L, -2, &v, "vim.dict"); /* value */ + di = dictitem_alloc(key); +! if (di == NULL || dict_add(d, di) == FAIL) +! { + vim_free(di); + lua_pushnil(L); + return 1; +*** ../vim-8.1.0179/src/version.c Fri Jul 13 16:31:11 2018 +--- src/version.c Fri Jul 13 22:05:56 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 180, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +240. You think Webster's Dictionary is a directory of WEB sites. + + /// 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 /// diff --git a/data/vim/patches/8.1.0181 b/data/vim/patches/8.1.0181 new file mode 100644 index 000000000..5235d20c3 --- /dev/null +++ b/data/vim/patches/8.1.0181 @@ -0,0 +1,66 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0181 +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.0181 +Problem: Memory leak with trailing characters in skip expression. +Solution: Free the return value. +Files: src/eval.c, src/testdir/test_search.vim + + +*** ../vim-8.1.0180/src/eval.c Tue Jun 12 22:05:10 2018 +--- src/eval.c Sat Jul 14 17:17:35 2018 +*************** +*** 729,734 **** +--- 729,735 ---- + return FAIL; + if (*s != NUL) /* check for trailing chars after expr */ + { ++ clear_tv(rettv); + EMSG2(_(e_invexpr2), s); + return FAIL; + } +*** ../vim-8.1.0180/src/testdir/test_search.vim Sun Jun 24 19:01:55 2018 +--- src/testdir/test_search.vim Sat Jul 14 17:14:23 2018 +*************** +*** 324,329 **** +--- 324,339 ---- + bw! + endfunc + ++ func Test_searchpair_leak() ++ new ++ call setline(1, 'if one else another endif') ++ ++ " The error in the skip expression caused memory to leak. ++ call assert_fails("call searchpair('\\<if\\>', '\\<else\\>', '\\<endif\\>', '', '\"foo\" 2')", 'E15:') ++ ++ bwipe! ++ endfunc ++ + func Test_searchc() + " These commands used to cause memory overflow in searchc(). + new +*** ../vim-8.1.0180/src/version.c Fri Jul 13 22:08:19 2018 +--- src/version.c Sat Jul 14 17:02:20 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 181, + /**/ + +-- +"Marriage is when a man and woman become as one; the trouble starts +when they try to decide which one" + + /// 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 /// diff --git a/data/vim/patches/8.1.0182 b/data/vim/patches/8.1.0182 new file mode 100644 index 000000000..bc93b8d96 --- /dev/null +++ b/data/vim/patches/8.1.0182 @@ -0,0 +1,425 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0182 +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.0182 +Problem: Unicode standard was updated. +Solution: Include the changes. (Christian Brabandt) +Files: src/mbyte.c + + +*** ../vim-8.1.0181/src/mbyte.c Wed Jun 13 21:27:20 2018 +--- src/mbyte.c Sat Jul 14 19:27:37 2018 +*************** +*** 1462,1468 **** + {0x3000, 0x303e}, + {0x3041, 0x3096}, + {0x3099, 0x30ff}, +! {0x3105, 0x312e}, + {0x3131, 0x318e}, + {0x3190, 0x31ba}, + {0x31c0, 0x31e3}, +--- 1462,1468 ---- + {0x3000, 0x303e}, + {0x3041, 0x3096}, + {0x3099, 0x30ff}, +! {0x3105, 0x312f}, + {0x3131, 0x318e}, + {0x3190, 0x31ba}, + {0x31c0, 0x31e3}, +*************** +*** 1482,1488 **** + {0xff01, 0xff60}, + {0xffe0, 0xffe6}, + {0x16fe0, 0x16fe1}, +! {0x17000, 0x187ec}, + {0x18800, 0x18af2}, + {0x1b000, 0x1b11e}, + {0x1b170, 0x1b2fb}, +--- 1482,1488 ---- + {0xff01, 0xff60}, + {0xffe0, 0xffe6}, + {0x16fe0, 0x16fe1}, +! {0x17000, 0x187f1}, + {0x18800, 0x18af2}, + {0x1b000, 0x1b11e}, + {0x1b170, 0x1b2fb}, +*************** +*** 1517,1529 **** + {0x1f6cc, 0x1f6cc}, + {0x1f6d0, 0x1f6d2}, + {0x1f6eb, 0x1f6ec}, +! {0x1f6f4, 0x1f6f8}, + {0x1f910, 0x1f93e}, +! {0x1f940, 0x1f94c}, +! {0x1f950, 0x1f96b}, +! {0x1f980, 0x1f997}, +! {0x1f9c0, 0x1f9c0}, +! {0x1f9d0, 0x1f9e6}, + {0x20000, 0x2fffd}, + {0x30000, 0x3fffd} + }; +--- 1517,1531 ---- + {0x1f6cc, 0x1f6cc}, + {0x1f6d0, 0x1f6d2}, + {0x1f6eb, 0x1f6ec}, +! {0x1f6f4, 0x1f6f9}, + {0x1f910, 0x1f93e}, +! {0x1f940, 0x1f970}, +! {0x1f973, 0x1f976}, +! {0x1f97a, 0x1f97a}, +! {0x1f97c, 0x1f9a2}, +! {0x1f9b0, 0x1f9b9}, +! {0x1f9c0, 0x1f9c2}, +! {0x1f9d0, 0x1f9ff}, + {0x20000, 0x2fffd}, + {0x30000, 0x3fffd} + }; +*************** +*** 2348,2359 **** + {0x0730, 0x074a}, + {0x07a6, 0x07b0}, + {0x07eb, 0x07f3}, + {0x0816, 0x0819}, + {0x081b, 0x0823}, + {0x0825, 0x0827}, + {0x0829, 0x082d}, + {0x0859, 0x085b}, +! {0x08d4, 0x08e1}, + {0x08e3, 0x0903}, + {0x093a, 0x093c}, + {0x093e, 0x094f}, +--- 2350,2362 ---- + {0x0730, 0x074a}, + {0x07a6, 0x07b0}, + {0x07eb, 0x07f3}, ++ {0x07fd, 0x07fd}, + {0x0816, 0x0819}, + {0x081b, 0x0823}, + {0x0825, 0x0827}, + {0x0829, 0x082d}, + {0x0859, 0x085b}, +! {0x08d3, 0x08e1}, + {0x08e3, 0x0903}, + {0x093a, 0x093c}, + {0x093e, 0x094f}, +*************** +*** 2366,2371 **** +--- 2369,2375 ---- + {0x09cb, 0x09cd}, + {0x09d7, 0x09d7}, + {0x09e2, 0x09e3}, ++ {0x09fe, 0x09fe}, + {0x0a01, 0x0a03}, + {0x0a3c, 0x0a3c}, + {0x0a3e, 0x0a42}, +*************** +*** 2393,2399 **** + {0x0bc6, 0x0bc8}, + {0x0bca, 0x0bcd}, + {0x0bd7, 0x0bd7}, +! {0x0c00, 0x0c03}, + {0x0c3e, 0x0c44}, + {0x0c46, 0x0c48}, + {0x0c4a, 0x0c4d}, +--- 2397,2403 ---- + {0x0bc6, 0x0bc8}, + {0x0bca, 0x0bcd}, + {0x0bd7, 0x0bd7}, +! {0x0c00, 0x0c04}, + {0x0c3e, 0x0c44}, + {0x0c46, 0x0c48}, + {0x0c4a, 0x0c4d}, +*************** +*** 2493,2498 **** +--- 2497,2503 ---- + {0xa880, 0xa881}, + {0xa8b4, 0xa8c5}, + {0xa8e0, 0xa8f1}, ++ {0xa8ff, 0xa8ff}, + {0xa926, 0xa92d}, + {0xa947, 0xa953}, + {0xa980, 0xa983}, +*************** +*** 2523,2543 **** + {0x10a38, 0x10a3a}, + {0x10a3f, 0x10a3f}, + {0x10ae5, 0x10ae6}, + {0x11000, 0x11002}, + {0x11038, 0x11046}, + {0x1107f, 0x11082}, + {0x110b0, 0x110ba}, + {0x11100, 0x11102}, + {0x11127, 0x11134}, + {0x11173, 0x11173}, + {0x11180, 0x11182}, + {0x111b3, 0x111c0}, +! {0x111ca, 0x111cc}, + {0x1122c, 0x11237}, + {0x1123e, 0x1123e}, + {0x112df, 0x112ea}, + {0x11300, 0x11303}, +! {0x1133c, 0x1133c}, + {0x1133e, 0x11344}, + {0x11347, 0x11348}, + {0x1134b, 0x1134d}, +--- 2528,2551 ---- + {0x10a38, 0x10a3a}, + {0x10a3f, 0x10a3f}, + {0x10ae5, 0x10ae6}, ++ {0x10d24, 0x10d27}, ++ {0x10f46, 0x10f50}, + {0x11000, 0x11002}, + {0x11038, 0x11046}, + {0x1107f, 0x11082}, + {0x110b0, 0x110ba}, + {0x11100, 0x11102}, + {0x11127, 0x11134}, ++ {0x11145, 0x11146}, + {0x11173, 0x11173}, + {0x11180, 0x11182}, + {0x111b3, 0x111c0}, +! {0x111c9, 0x111cc}, + {0x1122c, 0x11237}, + {0x1123e, 0x1123e}, + {0x112df, 0x112ea}, + {0x11300, 0x11303}, +! {0x1133b, 0x1133c}, + {0x1133e, 0x11344}, + {0x11347, 0x11348}, + {0x1134b, 0x1134d}, +*************** +*** 2546,2551 **** +--- 2554,2560 ---- + {0x11366, 0x1136c}, + {0x11370, 0x11374}, + {0x11435, 0x11446}, ++ {0x1145e, 0x1145e}, + {0x114b0, 0x114c3}, + {0x115af, 0x115b5}, + {0x115b8, 0x115c0}, +*************** +*** 2553,2558 **** +--- 2562,2568 ---- + {0x11630, 0x11640}, + {0x116ab, 0x116b7}, + {0x1171d, 0x1172b}, ++ {0x1182c, 0x1183a}, + {0x11a01, 0x11a0a}, + {0x11a33, 0x11a39}, + {0x11a3b, 0x11a3e}, +*************** +*** 2568,2573 **** +--- 2578,2587 ---- + {0x11d3c, 0x11d3d}, + {0x11d3f, 0x11d45}, + {0x11d47, 0x11d47}, ++ {0x11d8a, 0x11d8e}, ++ {0x11d90, 0x11d91}, ++ {0x11d93, 0x11d97}, ++ {0x11ef3, 0x11ef6}, + {0x16af0, 0x16af4}, + {0x16b30, 0x16b36}, + {0x16f51, 0x16f7e}, +*************** +*** 2659,2670 **** + {0x2640, 0x2640}, + {0x2642, 0x2642}, + {0x2648, 0x2653}, +! {0x2660, 0x2660}, + {0x2663, 0x2663}, + {0x2665, 0x2666}, + {0x2668, 0x2668}, + {0x267b, 0x267b}, +! {0x267f, 0x267f}, + {0x2692, 0x2697}, + {0x2699, 0x2699}, + {0x269b, 0x269c}, +--- 2673,2684 ---- + {0x2640, 0x2640}, + {0x2642, 0x2642}, + {0x2648, 0x2653}, +! {0x265f, 0x2660}, + {0x2663, 0x2663}, + {0x2665, 0x2666}, + {0x2668, 0x2668}, + {0x267b, 0x267b}, +! {0x267e, 0x267f}, + {0x2692, 0x2697}, + {0x2699, 0x2699}, + {0x269b, 0x269c}, +*************** +*** 2759,2773 **** + {0x1f6e9, 0x1f6e9}, + {0x1f6eb, 0x1f6ec}, + {0x1f6f0, 0x1f6f0}, +! {0x1f6f3, 0x1f6f8}, + {0x1f910, 0x1f93a}, + {0x1f93c, 0x1f93e}, + {0x1f940, 0x1f945}, +! {0x1f947, 0x1f94c}, +! {0x1f950, 0x1f96b}, +! {0x1f980, 0x1f997}, +! {0x1f9c0, 0x1f9c0}, +! {0x1f9d0, 0x1f9e6} + }; + + /* +--- 2773,2789 ---- + {0x1f6e9, 0x1f6e9}, + {0x1f6eb, 0x1f6ec}, + {0x1f6f0, 0x1f6f0}, +! {0x1f6f3, 0x1f6f9}, + {0x1f910, 0x1f93a}, + {0x1f93c, 0x1f93e}, + {0x1f940, 0x1f945}, +! {0x1f947, 0x1f970}, +! {0x1f973, 0x1f976}, +! {0x1f97a, 0x1f97a}, +! {0x1f97c, 0x1f9a2}, +! {0x1f9b0, 0x1f9b9}, +! {0x1f9c0, 0x1f9c2}, +! {0x1f9d0, 0x1f9ff} + }; + + /* +*************** +*** 3034,3039 **** +--- 3050,3057 ---- + {0x1c86,0x1c86,-1,-6204}, + {0x1c87,0x1c87,-1,-6180}, + {0x1c88,0x1c88,-1,35267}, ++ {0x1c90,0x1cba,1,-3008}, ++ {0x1cbd,0x1cbf,1,-3008}, + {0x1e00,0x1e94,2,1}, + {0x1e9b,0x1e9b,-1,-58}, + {0x1e9e,0x1e9e,-1,-7615}, +*************** +*** 3104,3116 **** + {0xa7b1,0xa7b1,-1,-42282}, + {0xa7b2,0xa7b2,-1,-42261}, + {0xa7b3,0xa7b3,-1,928}, +! {0xa7b4,0xa7b6,2,1}, + {0xab70,0xabbf,1,-38864}, + {0xff21,0xff3a,1,32}, + {0x10400,0x10427,1,40}, + {0x104b0,0x104d3,1,40}, + {0x10c80,0x10cb2,1,64}, + {0x118a0,0x118bf,1,32}, + {0x1e900,0x1e921,1,34} + }; + +--- 3122,3135 ---- + {0xa7b1,0xa7b1,-1,-42282}, + {0xa7b2,0xa7b2,-1,-42261}, + {0xa7b3,0xa7b3,-1,928}, +! {0xa7b4,0xa7b8,2,1}, + {0xab70,0xabbf,1,-38864}, + {0xff21,0xff3a,1,32}, + {0x10400,0x10427,1,40}, + {0x104b0,0x104d3,1,40}, + {0x10c80,0x10cb2,1,64}, + {0x118a0,0x118bf,1,32}, ++ {0x16e40,0x16e5f,1,32}, + {0x1e900,0x1e921,1,34} + }; + +*************** +*** 3256,3261 **** +--- 3275,3282 ---- + {0x10c7,0x10cd,6,7264}, + {0x13a0,0x13ef,1,38864}, + {0x13f0,0x13f5,1,8}, ++ {0x1c90,0x1cba,1,-3008}, ++ {0x1cbd,0x1cbf,1,-3008}, + {0x1e00,0x1e94,2,1}, + {0x1e9e,0x1e9e,-1,-7615}, + {0x1ea0,0x1efe,2,1}, +*************** +*** 3324,3335 **** + {0xa7b1,0xa7b1,-1,-42282}, + {0xa7b2,0xa7b2,-1,-42261}, + {0xa7b3,0xa7b3,-1,928}, +! {0xa7b4,0xa7b6,2,1}, + {0xff21,0xff3a,1,32}, + {0x10400,0x10427,1,40}, + {0x104b0,0x104d3,1,40}, + {0x10c80,0x10cb2,1,64}, + {0x118a0,0x118bf,1,32}, + {0x1e900,0x1e921,1,34} + }; + +--- 3345,3357 ---- + {0xa7b1,0xa7b1,-1,-42282}, + {0xa7b2,0xa7b2,-1,-42261}, + {0xa7b3,0xa7b3,-1,928}, +! {0xa7b4,0xa7b8,2,1}, + {0xff21,0xff3a,1,32}, + {0x10400,0x10427,1,40}, + {0x104b0,0x104d3,1,40}, + {0x10c80,0x10cb2,1,64}, + {0x118a0,0x118bf,1,32}, ++ {0x16e40,0x16e5f,1,32}, + {0x1e900,0x1e921,1,34} + }; + +*************** +*** 3443,3448 **** +--- 3465,3472 ---- + {0x4cf,0x4cf,-1,-15}, + {0x4d1,0x52f,2,-1}, + {0x561,0x586,1,-48}, ++ {0x10d0,0x10fa,1,3008}, ++ {0x10fd,0x10ff,1,3008}, + {0x13f8,0x13fd,1,-8}, + {0x1c80,0x1c80,-1,-6254}, + {0x1c81,0x1c81,-1,-6253}, +*************** +*** 3505,3511 **** + {0xa78c,0xa791,5,-1}, + {0xa793,0xa797,4,-1}, + {0xa799,0xa7a9,2,-1}, +! {0xa7b5,0xa7b7,2,-1}, + {0xab53,0xab53,-1,-928}, + {0xab70,0xabbf,1,-38864}, + {0xff41,0xff5a,1,-32}, +--- 3529,3535 ---- + {0xa78c,0xa791,5,-1}, + {0xa793,0xa797,4,-1}, + {0xa799,0xa7a9,2,-1}, +! {0xa7b5,0xa7b9,2,-1}, + {0xab53,0xab53,-1,-928}, + {0xab70,0xabbf,1,-38864}, + {0xff41,0xff5a,1,-32}, +*************** +*** 3513,3518 **** +--- 3537,3543 ---- + {0x104d8,0x104fb,1,-40}, + {0x10cc0,0x10cf2,1,-64}, + {0x118c0,0x118df,1,-32}, ++ {0x16e60,0x16e7f,1,-32}, + {0x1e922,0x1e943,1,-34} + }; + +*** ../vim-8.1.0181/src/version.c Sat Jul 14 17:24:57 2018 +--- src/version.c Sat Jul 14 19:30:14 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 182, + /**/ + +-- +If you're sending someone Styrofoam, what do you pack it in? + + /// 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 /// diff --git a/data/vim/patches/8.1.0183 b/data/vim/patches/8.1.0183 new file mode 100644 index 000000000..f21beffc5 --- /dev/null +++ b/data/vim/patches/8.1.0183 @@ -0,0 +1,130 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0183 +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.0183 +Problem: Lua API changed, breaking the build. +Solution: Adjust prototype of lua_rawgeti(). (Ken Takata, + closes #3157, closes #3144) +Files: src/if_lua.c + + +*** ../vim-8.1.0182/src/if_lua.c Fri Jul 13 22:08:19 2018 +--- src/if_lua.c Sat Jul 14 20:48:49 2018 +*************** +*** 253,266 **** +--- 253,275 ---- + void (*dll_lua_pushboolean) (lua_State *L, int b); + void (*dll_lua_pushlightuserdata) (lua_State *L, void *p); + void (*dll_lua_getfield) (lua_State *L, int idx, const char *k); ++ #if LUA_VERSION_NUM <= 502 + void (*dll_lua_rawget) (lua_State *L, int idx); + void (*dll_lua_rawgeti) (lua_State *L, int idx, int n); ++ #else ++ int (*dll_lua_rawget) (lua_State *L, int idx); ++ int (*dll_lua_rawgeti) (lua_State *L, int idx, lua_Integer n); ++ #endif + void (*dll_lua_createtable) (lua_State *L, int narr, int nrec); + void *(*dll_lua_newuserdata) (lua_State *L, size_t sz); + int (*dll_lua_getmetatable) (lua_State *L, int objindex); + void (*dll_lua_setfield) (lua_State *L, int idx, const char *k); + void (*dll_lua_rawset) (lua_State *L, int idx); ++ #if LUA_VERSION_NUM <= 502 + void (*dll_lua_rawseti) (lua_State *L, int idx, int n); ++ #else ++ void (*dll_lua_rawseti) (lua_State *L, int idx, lua_Integer n); ++ #endif + int (*dll_lua_setmetatable) (lua_State *L, int objindex); + int (*dll_lua_next) (lua_State *L, int idx); + /* libs */ +*************** +*** 962,968 **** + return 0; + if (*key == NUL) + luaL_error(L, "empty key"); +! if (!lua_isnil(L, 3)) { /* read value? */ + luaV_checktypval(L, 3, &v, "setting dict item"); + if (d->dv_scope == VAR_DEF_SCOPE && v.v_type == VAR_FUNC) + luaL_error(L, "cannot assign funcref to builtin scope"); +--- 971,978 ---- + return 0; + if (*key == NUL) + luaL_error(L, "empty key"); +! if (!lua_isnil(L, 3)) /* read value? */ +! { + luaV_checktypval(L, 3, &v, "setting dict item"); + if (d->dv_scope == VAR_DEF_SCOPE && v.v_type == VAR_FUNC) + luaL_error(L, "cannot assign funcref to builtin scope"); +*************** +*** 1074,1080 **** + status = FAIL; + else + { +! for (i = 0; i < n; i++) { + luaV_checktypval(L, i + 2, &v, "calling funcref"); + list_append_tv(f->args.vval.v_list, &v); + } +--- 1084,1091 ---- + status = FAIL; + else + { +! for (i = 0; i < n; i++) +! { + luaV_checktypval(L, i + 2, &v, "calling funcref"); + list_append_tv(f->args.vval.v_list, &v); + } +*************** +*** 1531,1543 **** + else + { + luaV_newlist(L, l); +! if (initarg) { /* traverse table to init dict */ + int notnil, i = 0; + typval_T v; +! do { + lua_rawgeti(L, 1, ++i); + notnil = !lua_isnil(L, -1); +! if (notnil) { + luaV_checktypval(L, -1, &v, "vim.list"); + list_append_tv(l, &v); + } +--- 1542,1557 ---- + else + { + luaV_newlist(L, l); +! if (initarg) /* traverse table to init list */ +! { + int notnil, i = 0; + typval_T v; +! do +! { + lua_rawgeti(L, 1, ++i); + notnil = !lua_isnil(L, -1); +! if (notnil) +! { + luaV_checktypval(L, -1, &v, "vim.list"); + list_append_tv(l, &v); + } +*** ../vim-8.1.0182/src/version.c Sat Jul 14 19:30:32 2018 +--- src/version.c Sat Jul 14 20:49:07 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 183, + /**/ + +-- +Hear about the guy who played a blank tape at full blast? +The mime next door went nuts. + + /// 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 /// diff --git a/data/vim/patches/8.1.0184 b/data/vim/patches/8.1.0184 new file mode 100644 index 000000000..4d7901174 --- /dev/null +++ b/data/vim/patches/8.1.0184 @@ -0,0 +1,122 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0184 +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.0184 +Problem: Not easy to figure out the window layout. +Solution: Add "wincol" and "winrow" to what getwininfo() returns. +Files: src/evalfunc.c, src/testdir/test_bufwintabinfo.vim, + runtime/doc/eval.txt + + +*** ../vim-8.1.0183/src/evalfunc.c Sun Jul 8 16:50:33 2018 +--- src/evalfunc.c Sat Jul 14 21:17:08 2018 +*************** +*** 5648,5657 **** +--- 5648,5659 ---- + dict_add_number(dict, "winnr", winnr); + dict_add_number(dict, "winid", wp->w_id); + dict_add_number(dict, "height", wp->w_height); ++ dict_add_number(dict, "winrow", wp->w_winrow); + #ifdef FEAT_MENU + dict_add_number(dict, "winbar", wp->w_winbar_height); + #endif + dict_add_number(dict, "width", wp->w_width); ++ dict_add_number(dict, "wincol", wp->w_wincol); + dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum); + + #ifdef FEAT_TERMINAL +*** ../vim-8.1.0183/src/testdir/test_bufwintabinfo.vim Sun Dec 10 21:02:56 2017 +--- src/testdir/test_bufwintabinfo.vim Sat Jul 14 21:34:20 2018 +*************** +*** 46,62 **** + let w2_id = win_getid() + tabnew | let w3_id = win_getid() + new | let w4_id = win_getid() +! new | let w5_id = win_getid() + call setwinvar(0, 'signal', 'green') + tabfirst + let winlist = getwininfo() + call assert_equal(5, len(winlist)) + call assert_equal(winbufnr(2), winlist[1].bufnr) + call assert_equal(winheight(2), winlist[1].height) + call assert_equal(1, winlist[2].winnr) + call assert_equal(2, winlist[3].tabnr) + call assert_equal('green', winlist[2].variables.signal) +- call assert_equal(winwidth(1), winlist[0].width) + call assert_equal(w4_id, winlist[3].winid) + let winfo = getwininfo(w5_id)[0] + call assert_equal(2, winfo.tabnr) +--- 46,79 ---- + let w2_id = win_getid() + tabnew | let w3_id = win_getid() + new | let w4_id = win_getid() +! vert new | let w5_id = win_getid() + call setwinvar(0, 'signal', 'green') + tabfirst + let winlist = getwininfo() + call assert_equal(5, len(winlist)) ++ call assert_equal(winwidth(1), winlist[0].width) ++ call assert_equal(0, winlist[0].wincol) ++ call assert_equal(1, winlist[0].winrow) " tabline adds one ++ + call assert_equal(winbufnr(2), winlist[1].bufnr) + call assert_equal(winheight(2), winlist[1].height) ++ call assert_equal(0, winlist[1].wincol) ++ call assert_equal(winheight(1) + 2, winlist[1].winrow) ++ + call assert_equal(1, winlist[2].winnr) ++ call assert_equal(1, winlist[2].winrow) ++ call assert_equal(0, winlist[2].wincol) ++ ++ call assert_equal(winlist[2].width + 1, winlist[3].wincol) ++ call assert_equal(0, winlist[4].wincol) ++ ++ call assert_equal(1, winlist[0].tabnr) ++ call assert_equal(1, winlist[1].tabnr) ++ call assert_equal(2, winlist[2].tabnr) + call assert_equal(2, winlist[3].tabnr) ++ call assert_equal(2, winlist[4].tabnr) ++ + call assert_equal('green', winlist[2].variables.signal) + call assert_equal(w4_id, winlist[3].winid) + let winfo = getwininfo(w5_id)[0] + call assert_equal(2, winfo.tabnr) +*** ../vim-8.1.0183/runtime/doc/eval.txt Sat Jun 23 14:21:38 2018 +--- runtime/doc/eval.txt Sat Jul 14 21:24:39 2018 +*************** +*** 4993,5000 **** +--- 4994,5003 ---- + variables a reference to the dictionary with + window-local variables + width window width ++ wincol leftmost screen column of the window + winid |window-ID| + winnr window number ++ winrow topmost screen column of the window + + To obtain all window-local variables use: > + gettabwinvar({tabnr}, {winnr}, '&') +*** ../vim-8.1.0183/src/version.c Sat Jul 14 20:49:39 2018 +--- src/version.c Sat Jul 14 21:17:54 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 184, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +246. You use up your free 1 Gbyte in two days. + + /// 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 /// diff --git a/data/vim/patches/8.1.0185 b/data/vim/patches/8.1.0185 new file mode 100644 index 000000000..7009a25d0 --- /dev/null +++ b/data/vim/patches/8.1.0185 @@ -0,0 +1,124 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0185 +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.0185 +Problem: Running tests writes lua.vim even though it is not used. +Solution: Stop writing lua.vim. +Files: src/testdir/test1.in, src/testdir/Make_dos.mak, + src/testdir/Make_ming.mak, src/testdir/Make_vms.mms, + src/testdir/Makefile + + +*** ../vim-8.1.0184/src/testdir/test1.in Sun Sep 22 14:52:43 2013 +--- src/testdir/test1.in Sat Jul 14 21:45:54 2018 +*************** +*** 15,21 **** + be set like small.vim above. mbyte.vim is sourced by tests that require the + +multi_byte feature. + Similar logic is applied to the +mzscheme feature, using mzscheme.vim. +- Similar logic is applied to the +lua feature, using lua.vim. + + STARTTEST + :" If columns or lines are too small, create wrongtermsize. +--- 15,20 ---- +*************** +*** 33,39 **** + qa! + :w! mbyte.vim + :w! mzscheme.vim +- :w! lua.vim + :" + :" If +multi_byte feature supported, make mbyte.vim empty. + :if has("multi_byte") | sp another | w! mbyte.vim | q | endif +--- 32,37 ---- +*************** +*** 41,49 **** + :" If +mzscheme feature supported, make mzscheme.vim empty. + :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif + :" +- :" If +lua feature supported, make lua.vim empty. +- :if has("lua") | sp another | w! lua.vim | q | endif +- :" + :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty. + :" Otherwise write small.vim to skip the test. + :if 1 | q! | endif +--- 39,44 ---- +*** ../vim-8.1.0184/src/testdir/Make_dos.mak Thu Nov 2 20:58:54 2017 +--- src/testdir/Make_dos.mak Sat Jul 14 21:46:31 2018 +*************** +*** 85,91 **** + -if exist tiny.vim del tiny.vim + -if exist mbyte.vim del mbyte.vim + -if exist mzscheme.vim del mzscheme.vim +- -if exist lua.vim del lua.vim + -if exist Xdir1 rd /s /q Xdir1 + -if exist Xfind rd /s /q Xfind + -if exist XfakeHOME rd /s /q XfakeHOME +--- 85,90 ---- +*** ../vim-8.1.0184/src/testdir/Make_ming.mak Mon Dec 11 22:41:51 2017 +--- src/testdir/Make_ming.mak Sat Jul 14 21:46:35 2018 +*************** +*** 75,81 **** + -@if exist tiny.vim $(DEL) tiny.vim + -@if exist mbyte.vim $(DEL) mbyte.vim + -@if exist mzscheme.vim $(DEL) mzscheme.vim +- -@if exist lua.vim $(DEL) lua.vim + -@if exist Xdir1 $(DELDIR) Xdir1 + -@if exist Xfind $(DELDIR) Xfind + -@if exist XfakeHOME $(DELDIR) XfakeHOME +--- 75,80 ---- +*** ../vim-8.1.0184/src/testdir/Make_vms.mms Sat Jun 30 21:50:16 2018 +--- src/testdir/Make_vms.mms Sat Jul 14 21:46:53 2018 +*************** +*** 208,213 **** + -@ if "''F$SEARCH("small.vim")'" .NES. "" then delete/noconfirm/nolog small.vim.* + -@ if "''F$SEARCH("mbyte.vim")'" .NES. "" then delete/noconfirm/nolog mbyte.vim.* + -@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.* +- -@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.* + -@ if "''F$SEARCH("viminfo.*")'" .NES. "" then delete/noconfirm/nolog viminfo.*.* + +--- 208,212 ---- +*** ../vim-8.1.0184/src/testdir/Makefile Sat May 12 16:42:01 2018 +--- src/testdir/Makefile Sat Jul 14 21:47:13 2018 +*************** +*** 51,57 **** + $(SCRIPTS) $(SCRIPTS_GUI) $(NEW_TESTS): $(SCRIPTS_FIRST) + + RM_ON_RUN = test.out X* viminfo +! RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok benchmark.out + RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in + + clean: +--- 51,57 ---- + $(SCRIPTS) $(SCRIPTS_GUI) $(NEW_TESTS): $(SCRIPTS_FIRST) + + RM_ON_RUN = test.out X* viminfo +! RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim test.ok benchmark.out + RUN_VIM = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPROG) -f $(GUI_FLAG) -u unix.vim $(NO_INITS) -s dotest.in + + clean: +*** ../vim-8.1.0184/src/version.c Sat Jul 14 21:41:38 2018 +--- src/version.c Sat Jul 14 21:47:47 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 185, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +247. You use www.switchboard.com instead of dialing 411 and 555-12-12 + for directory assistance. + + /// 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 /// diff --git a/data/vim/patches/8.1.0186 b/data/vim/patches/8.1.0186 new file mode 100644 index 000000000..c2c5353a5 --- /dev/null +++ b/data/vim/patches/8.1.0186 @@ -0,0 +1,69 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0186 +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.0186 +Problem: Test for getwininfo() fails in GUI. +Solution: Account for missing tabline. +Files: src/testdir/test_bufwintabinfo.vim + + +*** ../vim-8.1.0185/src/testdir/test_bufwintabinfo.vim Sat Jul 14 21:41:38 2018 +--- src/testdir/test_bufwintabinfo.vim Sat Jul 14 22:22:09 2018 +*************** +*** 53,67 **** + call assert_equal(5, len(winlist)) + call assert_equal(winwidth(1), winlist[0].width) + call assert_equal(0, winlist[0].wincol) +! call assert_equal(1, winlist[0].winrow) " tabline adds one + + call assert_equal(winbufnr(2), winlist[1].bufnr) + call assert_equal(winheight(2), winlist[1].height) + call assert_equal(0, winlist[1].wincol) +! call assert_equal(winheight(1) + 2, winlist[1].winrow) + + call assert_equal(1, winlist[2].winnr) +! call assert_equal(1, winlist[2].winrow) + call assert_equal(0, winlist[2].wincol) + + call assert_equal(winlist[2].width + 1, winlist[3].wincol) +--- 53,68 ---- + call assert_equal(5, len(winlist)) + call assert_equal(winwidth(1), winlist[0].width) + call assert_equal(0, winlist[0].wincol) +! let tablineheight = winlist[0].winrow == 1 ? 1 : 0 +! call assert_equal(tablineheight, winlist[0].winrow) " tabline adds one + + call assert_equal(winbufnr(2), winlist[1].bufnr) + call assert_equal(winheight(2), winlist[1].height) + call assert_equal(0, winlist[1].wincol) +! call assert_equal(tablineheight + winheight(1) + 1, winlist[1].winrow) + + call assert_equal(1, winlist[2].winnr) +! call assert_equal(tablineheight, winlist[2].winrow) + call assert_equal(0, winlist[2].wincol) + + call assert_equal(winlist[2].width + 1, winlist[3].wincol) +*** ../vim-8.1.0185/src/version.c Sat Jul 14 21:48:42 2018 +--- src/version.c Sat Jul 14 22:23:06 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 186, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +248. You sign your letters with your e-mail address instead of your name. + + /// 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 /// diff --git a/data/vim/patches/8.1.0187 b/data/vim/patches/8.1.0187 new file mode 100644 index 000000000..0403ade73 --- /dev/null +++ b/data/vim/patches/8.1.0187 @@ -0,0 +1,233 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0184 +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.0187 (after 8.1.0184) +Problem: getwininfo() and win_screenpos() return different numbers. +Solution: Add one to "wincol" and "winrow" from getwininfo(). +Files: src/evalfunc.c, src/testdir/test_bufwintabinfo.vim, + runtime/doc/eval.txt + + +*** ../vim-8.1.0186/src/evalfunc.c Sat Jul 14 21:41:38 2018 +--- src/evalfunc.c Sun Jul 15 16:51:34 2018 +*************** +*** 5648,5659 **** + dict_add_number(dict, "winnr", winnr); + dict_add_number(dict, "winid", wp->w_id); + dict_add_number(dict, "height", wp->w_height); +! dict_add_number(dict, "winrow", wp->w_winrow); + #ifdef FEAT_MENU + dict_add_number(dict, "winbar", wp->w_winbar_height); + #endif + dict_add_number(dict, "width", wp->w_width); +! dict_add_number(dict, "wincol", wp->w_wincol); + dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum); + + #ifdef FEAT_TERMINAL +--- 5648,5659 ---- + dict_add_number(dict, "winnr", winnr); + dict_add_number(dict, "winid", wp->w_id); + dict_add_number(dict, "height", wp->w_height); +! dict_add_number(dict, "winrow", wp->w_winrow + 1); + #ifdef FEAT_MENU + dict_add_number(dict, "winbar", wp->w_winbar_height); + #endif + dict_add_number(dict, "width", wp->w_width); +! dict_add_number(dict, "wincol", wp->w_wincol + 1); + dict_add_number(dict, "bufnr", wp->w_buffer->b_fnum); + + #ifdef FEAT_TERMINAL +*** ../vim-8.1.0186/src/testdir/test_bufwintabinfo.vim Sat Jul 14 22:23:44 2018 +--- src/testdir/test_bufwintabinfo.vim Sun Jul 15 16:57:49 2018 +*************** +*** 52,72 **** + let winlist = getwininfo() + call assert_equal(5, len(winlist)) + call assert_equal(winwidth(1), winlist[0].width) +! call assert_equal(0, winlist[0].wincol) +! let tablineheight = winlist[0].winrow == 1 ? 1 : 0 +! call assert_equal(tablineheight, winlist[0].winrow) " tabline adds one + + call assert_equal(winbufnr(2), winlist[1].bufnr) + call assert_equal(winheight(2), winlist[1].height) +! call assert_equal(0, winlist[1].wincol) +! call assert_equal(tablineheight + winheight(1) + 1, winlist[1].winrow) + + call assert_equal(1, winlist[2].winnr) +! call assert_equal(tablineheight, winlist[2].winrow) +! call assert_equal(0, winlist[2].wincol) + +! call assert_equal(winlist[2].width + 1, winlist[3].wincol) +! call assert_equal(0, winlist[4].wincol) + + call assert_equal(1, winlist[0].tabnr) + call assert_equal(1, winlist[1].tabnr) +--- 52,73 ---- + let winlist = getwininfo() + call assert_equal(5, len(winlist)) + call assert_equal(winwidth(1), winlist[0].width) +! call assert_equal(1, winlist[0].wincol) +! " tabline adds one row in terminal, not in GUI +! let tablineheight = winlist[0].winrow == 2 ? 1 : 0 +! call assert_equal(tablineheight + 1, winlist[0].winrow) + + call assert_equal(winbufnr(2), winlist[1].bufnr) + call assert_equal(winheight(2), winlist[1].height) +! call assert_equal(1, winlist[1].wincol) +! call assert_equal(tablineheight + winheight(1) + 2, winlist[1].winrow) + + call assert_equal(1, winlist[2].winnr) +! call assert_equal(tablineheight + 1, winlist[2].winrow) +! call assert_equal(1, winlist[2].wincol) + +! call assert_equal(winlist[2].width + 2, winlist[3].wincol) +! call assert_equal(1, winlist[4].wincol) + + call assert_equal(1, winlist[0].tabnr) + call assert_equal(1, winlist[1].tabnr) +*** ../vim-8.1.0186/runtime/doc/eval.txt Sat Jul 14 21:41:38 2018 +--- runtime/doc/eval.txt Sun Jul 15 16:54:29 2018 +*************** +*** 2196,2202 **** + any variable {varname} in tab {nr} or {def} + gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) + any {name} in {winnr} in tab page {tabnr} +! getwininfo([{winid}]) List list of windows + getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window + getwinposx() Number X coord in pixels of the Vim window + getwinposy() Number Y coord in pixels of the Vim window +--- 2196,2202 ---- + any variable {varname} in tab {nr} or {def} + gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) + any {name} in {winnr} in tab page {tabnr} +! getwininfo([{winid}]) List list of info about each window + getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window + getwinposx() Number X coord in pixels of the Vim window + getwinposy() Number Y coord in pixels of the Vim window +*************** +*** 4935,4940 **** +--- 4936,4976 ---- + :let list_is_on = gettabwinvar(1, 2, '&list') + :echo "myvar = " . gettabwinvar(3, 1, 'myvar') + < ++ getwininfo([{winid}]) *getwininfo()* ++ Returns information about windows as a List with Dictionaries. ++ ++ If {winid} is given Information about the window with that ID ++ is returned. If the window does not exist the result is an ++ empty list. ++ ++ Without {winid} information about all the windows in all the ++ tab pages is returned. ++ ++ Each List item is a Dictionary with the following entries: ++ bufnr number of buffer in the window ++ height window height (excluding winbar) ++ winbar 1 if the window has a toolbar, 0 ++ otherwise ++ loclist 1 if showing a location list ++ {only with the +quickfix feature} ++ quickfix 1 if quickfix or location list window ++ {only with the +quickfix feature} ++ terminal 1 if a terminal window ++ {only with the +terminal feature} ++ tabnr tab page number ++ variables a reference to the dictionary with ++ window-local variables ++ width window width ++ wincol leftmost screen column of the window, ++ col from |win_screenpos()| ++ winid |window-ID| ++ winnr window number ++ winrow topmost screen column of the window, ++ row from |win_screenpos()| ++ ++ To obtain all window-local variables use: > ++ gettabwinvar({tabnr}, {winnr}, '&') ++ + getwinpos([{timeout}]) *getwinpos()* + The result is a list with two numbers, the result of + getwinposx() and getwinposy() combined: +*************** +*** 4968,5006 **** + The result will be -1 if the information is not available. + The value can be used with `:winpos`. + +- getwininfo([{winid}]) *getwininfo()* +- Returns information about windows as a List with Dictionaries. +- +- If {winid} is given Information about the window with that ID +- is returned. If the window does not exist the result is an +- empty list. +- +- Without {winid} information about all the windows in all the +- tab pages is returned. +- +- Each List item is a Dictionary with the following entries: +- bufnr number of buffer in the window +- height window height (excluding winbar) +- winbar 1 if the window has a toolbar, 0 +- otherwise +- loclist 1 if showing a location list +- {only with the +quickfix feature} +- quickfix 1 if quickfix or location list window +- {only with the +quickfix feature} +- terminal 1 if a terminal window +- {only with the +terminal feature} +- tabnr tab page number +- variables a reference to the dictionary with +- window-local variables +- width window width +- wincol leftmost screen column of the window +- winid |window-ID| +- winnr window number +- winrow topmost screen column of the window +- +- To obtain all window-local variables use: > +- gettabwinvar({tabnr}, {winnr}, '&') +- + getwinvar({winnr}, {varname} [, {def}]) *getwinvar()* + Like |gettabwinvar()| for the current tabpage. + Examples: > +--- 5004,5009 ---- +*************** +*** 9047,9053 **** + win_screenpos({nr}) *win_screenpos()* + Return the screen position of window {nr} as a list with two + numbers: [row, col]. The first window always has position +! [1, 1]. + {nr} can be the window number or the |window-ID|. + Return [0, 0] if the window cannot be found in the current + tabpage. +--- 9051,9057 ---- + win_screenpos({nr}) *win_screenpos()* + Return the screen position of window {nr} as a list with two + numbers: [row, col]. The first window always has position +! [1, 1], unless there is a tabline, then it is [2, 1]. + {nr} can be the window number or the |window-ID|. + Return [0, 0] if the window cannot be found in the current + tabpage. +*** ../vim-8.1.0186/src/version.c Sat Jul 14 22:23:44 2018 +--- src/version.c Sun Jul 15 17:00:11 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 187, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +251. You've never seen your closest friends who usually live WAY too far away. + + /// 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 /// diff --git a/data/vim/patches/8.1.0188 b/data/vim/patches/8.1.0188 new file mode 100644 index 000000000..9c6023768 --- /dev/null +++ b/data/vim/patches/8.1.0188 @@ -0,0 +1,63 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0188 +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.0188 +Problem: No test for ":cscope add". +Solution: Add a test. (Dominique Pelle, closes #3212) +Files: src/testdir/test_cscope.vim + + +*** ../vim-8.1.0187/src/testdir/test_cscope.vim Thu Apr 5 19:04:00 2018 +--- src/testdir/test_cscope.vim Sun Jul 15 17:34:34 2018 +*************** +*** 254,260 **** +--- 254,278 ---- + + " CleanUp + call CscopeSetupOrClean(0) ++ endfunc ++ ++ " Test ":cs add {dir}" (add the {dir}/cscope.out database) ++ func Test_cscope_add_dir() ++ call mkdir('Xcscopedir', 'p') ++ call system('cscope -bk -fXcscopedir/cscope.out ../memfile_test.c') ++ cs add Xcscopedir ++ let a = execute('cscope show') ++ let lines = split(a, "\n", 1) ++ call assert_equal(3, len(lines)) ++ call assert_equal(' # pid database name prepend path', lines[0]) ++ call assert_equal('', lines[1]) ++ call assert_match('^ 0 \d\+.*Xcscopedir/cscope.out\s\+<none>$', lines[2]) ++ ++ cs kill -1 ++ call delete('Xcscopedir/cscope.out') ++ call assert_fails('cs add Xcscopedir', 'E563:') + ++ call delete('Xcscopedir', 'd') + endfunc + + func Test_cscopequickfix() +*** ../vim-8.1.0187/src/version.c Sun Jul 15 17:01:06 2018 +--- src/version.c Sun Jul 15 17:35:29 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 188, + /**/ + +-- +Emacs is a nice OS - but it lacks a good text editor. +That's why I am using Vim. --Anonymous + + /// 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 /// diff --git a/data/vim/patches/8.1.0189 b/data/vim/patches/8.1.0189 new file mode 100644 index 000000000..bb02fab77 --- /dev/null +++ b/data/vim/patches/8.1.0189 @@ -0,0 +1,57 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0189 +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.0189 +Problem: Function defined in sandbox not tested. +Solution: Add a text. +Files: src/testdir/test_functions.vim + + +*** ../vim-8.1.0188/src/testdir/test_functions.vim Tue Jun 19 19:46:01 2018 +--- src/testdir/test_functions.vim Tue Jul 10 19:30:01 2018 +*************** +*** 984,986 **** +--- 984,1002 ---- + call assert_fails("call libcall('Xdoesnotexist_', 'getenv', 'HOME')", 'E364:') + call assert_fails("call libcallnr('Xdoesnotexist_', 'strlen', 'abcd')", 'E364:') + endfunc ++ ++ sandbox function Fsandbox() ++ normal ix ++ endfunc ++ ++ func Test_func_sandbox() ++ sandbox let F = {-> 'hello'} ++ call assert_equal('hello', F()) ++ ++ sandbox let F = {-> execute("normal ix\<Esc>")} ++ call assert_fails('call F()', 'E48:') ++ unlet F ++ ++ call assert_fails('call Fsandbox()', 'E48:') ++ delfunc Fsandbox ++ endfunc +*** ../vim-8.1.0188/src/version.c Sun Jul 15 17:36:28 2018 +--- src/version.c Sun Jul 15 20:22:12 2018 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 189, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +252. You vote for foreign officials. + + /// 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 /// diff --git a/data/vim/patches/8.1.0190 b/data/vim/patches/8.1.0190 new file mode 100644 index 000000000..36f52ad9b --- /dev/null +++ b/data/vim/patches/8.1.0190 @@ -0,0 +1,269 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0190 +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.0190 +Problem: Perl refcounts are wrong. +Solution: Improve refcounting. Add a test. (Damien) +Files: src/if_perl.xs, src/testdir/test_perl.vim + + +*** ../vim-8.1.0189/src/if_perl.xs 2018-07-08 17:18:58.416462371 +0200 +--- src/if_perl.xs 2018-07-16 17:34:41.750473682 +0200 +*************** +*** 845,850 **** +--- 845,858 ---- + return sv_bless(rv, gv_stashpv("VIBUF", TRUE)); + } + ++ #if 0 ++ SV *__sv_save[1024]; ++ int __sv_save_ix; ++ # define D_Save_Sv(sv) do { if (__sv_save_ix < 1024) __sv_save[__sv_save_ix++] = (sv); } while (0) ++ #else ++ # define D_Save_Sv(sv) NOOP ++ #endif ++ + /* + * perl_win_free + * Remove all references to the window to be destroyed +*************** +*** 852,868 **** + void + perl_win_free(win_T *wp) + { +! if (wp->w_perl_private) +! sv_setiv((SV *)wp->w_perl_private, 0); +! return; + } + + void + perl_buf_free(buf_T *bp) + { +! if (bp->b_perl_private) +! sv_setiv((SV *)bp->b_perl_private, 0); +! return; + } + + #ifndef PROTO +--- 860,886 ---- + void + perl_win_free(win_T *wp) + { +! if (wp->w_perl_private && perl_interp != NULL) +! { +! SV *sv = (SV*)wp->w_perl_private; +! D_Save_Sv(sv); +! sv_setiv(sv, 0); +! SvREFCNT_dec(sv); +! } +! wp->w_perl_private = NULL; + } + + void + perl_buf_free(buf_T *bp) + { +! if (bp->b_perl_private && perl_interp != NULL) +! { +! SV *sv = (SV *)bp->b_perl_private; +! D_Save_Sv(sv); +! sv_setiv(sv, 0); +! SvREFCNT_dec(sv); +! } +! bp->b_perl_private = NULL; + } + + #ifndef PROTO +*************** +*** 885,896 **** + # endif + { + SV *rv; + if (iv == 0) + rv = newWINrv(newSV(0), curwin); + else + rv = newBUFrv(newSV(0), curbuf); +! sv_setsv(sv, rv); +! SvREFCNT_dec(SvRV(rv)); + return 0; + } + #endif /* !PROTO */ +--- 903,921 ---- + # endif + { + SV *rv; ++ + if (iv == 0) + rv = newWINrv(newSV(0), curwin); + else + rv = newBUFrv(newSV(0), curbuf); +! +! if (SvRV(sv) == SvRV(rv)) +! SvREFCNT_dec(SvRV(rv)); +! else /* XXX: Not sure if the `else` condition are right +! * Test_SvREFCNT() pass in all case. +! */ +! sv_setsv(sv, rv); +! + return 0; + } + #endif /* !PROTO */ +*************** +*** 1539,1545 **** + else + { + FOR_ALL_BUFFERS(vimbuf) +! XPUSHs(newBUFrv(newSV(0), vimbuf)); + } + } + else +--- 1564,1570 ---- + else + { + FOR_ALL_BUFFERS(vimbuf) +! XPUSHs(sv_2mortal(newBUFrv(newSV(0), vimbuf))); + } + } + else +*************** +*** 1564,1570 **** + { + vimbuf = buflist_findnr(b); + if (vimbuf) +! XPUSHs(newBUFrv(newSV(0), vimbuf)); + } + } + } +--- 1589,1595 ---- + { + vimbuf = buflist_findnr(b); + if (vimbuf) +! XPUSHs(sv_2mortal(newBUFrv(newSV(0), vimbuf))); + } + } + } +*************** +*** 1584,1590 **** + else + { + FOR_ALL_WINDOWS(vimwin) +! XPUSHs(newWINrv(newSV(0), vimwin)); + } + } + else +--- 1609,1615 ---- + else + { + FOR_ALL_WINDOWS(vimwin) +! XPUSHs(sv_2mortal(newWINrv(newSV(0), vimwin))); + } + } + else +*************** +*** 1594,1600 **** + w = (int) SvIV(ST(i)); + vimwin = win_find_nr(w); + if (vimwin) +! XPUSHs(newWINrv(newSV(0), vimwin)); + } + } + +--- 1619,1625 ---- + w = (int) SvIV(ST(i)); + vimwin = win_find_nr(w); + if (vimwin) +! XPUSHs(sv_2mortal(newWINrv(newSV(0), vimwin))); + } + } + +*** ../vim-8.1.0189/src/testdir/test_perl.vim 2017-03-18 19:45:55.000000000 +0100 +--- src/testdir/test_perl.vim 2018-07-16 17:34:41.754473657 +0200 +*************** +*** 219,238 **** + call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n")) + endfunc + +! func Test_SvREFCNT() + new t + perl <<--perl + my ($b, $w); +! $b = $curbuf for 0 .. 10; +! $w = $curwin for 0 .. 10; + VIM::DoCommand('bw! t'); + if (exists &Internals::SvREFCNT) { + my $cb = Internals::SvREFCNT($$b); + my $cw = Internals::SvREFCNT($$w); +! VIM::Eval("assert_equal(2, $cb)"); +! VIM::Eval("assert_equal(2, $cw)"); + } + VIM::Eval("assert_false($$b)"); + VIM::Eval("assert_false($$w)"); + --perl + endfunc +--- 219,260 ---- + call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n")) + endfunc + +! " Run first to get a clean namespace +! func Test_000_SvREFCNT() +! for i in range(10) +! exec 'new X'.i +! endfor + new t + perl <<--perl ++ #line 5 "Test_000_SvREFCNT()" + my ($b, $w); +! +! $b = $curbuf for 0 .. 100; +! $w = $curwin for 0 .. 100; +! () = VIM::Buffers for 0 .. 100; +! () = VIM::Windows for 0 .. 100; +! + VIM::DoCommand('bw! t'); + if (exists &Internals::SvREFCNT) { + my $cb = Internals::SvREFCNT($$b); + my $cw = Internals::SvREFCNT($$w); +! VIM::Eval("assert_equal(2, $cb, 'T1')"); +! VIM::Eval("assert_equal(2, $cw, 'T2')"); +! foreach ( VIM::Buffers, VIM::Windows ) { +! my $c = Internals::SvREFCNT($_); +! VIM::Eval("assert_equal(2, $c, 'T3')"); +! $c = Internals::SvREFCNT($$_); +! # Why only one ref? +! # Look wrong but work. Maybe not portable... +! VIM::Eval("assert_equal(1, $c, 'T4')"); +! } +! $cb = Internals::SvREFCNT($$curbuf); +! $cw = Internals::SvREFCNT($$curwin); +! VIM::Eval("assert_equal(3, $cb, 'T5')"); +! VIM::Eval("assert_equal(3, $cw, 'T6')"); + } + VIM::Eval("assert_false($$b)"); + VIM::Eval("assert_false($$w)"); + --perl ++ %bw! + endfunc +*** ../vim-8.1.0189/src/version.c 2018-07-15 20:26:37.418459878 +0200 +--- src/version.c 2018-07-16 17:37:41.017344049 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 190, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +255. You work for a newspaper and your editor asks you to write an + article about Internet addiction...in the "first person." + + /// 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 /// diff --git a/data/vim/patches/8.1.0191 b/data/vim/patches/8.1.0191 new file mode 100644 index 000000000..4bfe2a5ad --- /dev/null +++ b/data/vim/patches/8.1.0191 @@ -0,0 +1,53 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0191 +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.0191 (after 8.1.0190) +Problem: Perl test fails in 24 line terminal. +Solution: Create fewer windows. +Files: src/testdir/test_perl.vim + + +*** ../vim-8.1.0190/src/testdir/test_perl.vim 2018-07-16 17:45:16.998502685 +0200 +--- src/testdir/test_perl.vim 2018-07-16 18:05:22.631351923 +0200 +*************** +*** 221,227 **** + + " Run first to get a clean namespace + func Test_000_SvREFCNT() +! for i in range(10) + exec 'new X'.i + endfor + new t +--- 221,227 ---- + + " Run first to get a clean namespace + func Test_000_SvREFCNT() +! for i in range(8) + exec 'new X'.i + endfor + new t +*** ../vim-8.1.0190/src/version.c 2018-07-16 17:45:16.998502685 +0200 +--- src/version.c 2018-07-16 18:08:33.894241240 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 191, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +256. You are able to write down over 250 symptoms of being an internet + addict, even though they only asked for 101. + + /// 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 /// diff --git a/data/vim/patches/8.1.0192 b/data/vim/patches/8.1.0192 new file mode 100644 index 000000000..8dfbf381c --- /dev/null +++ b/data/vim/patches/8.1.0192 @@ -0,0 +1,4274 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0192 +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.0192 +Problem: Executing regexp recursively fails with a crash. +Solution: Move global variables into "rex". +Files: src/regexp.c, src/regexp.h, src/regexp_nfa.c + + +*** ../vim-8.1.0191/src/regexp.c 2018-06-23 15:09:02.351412460 +0200 +--- src/regexp.c 2018-07-17 05:32:30.971441868 +0200 +*************** +*** 344,350 **** + + #define MAX_LIMIT (32767L << 16L) + +- static int re_multi_type(int); + static int cstrncmp(char_u *s1, char_u *s2, int *n); + static char_u *cstrchr(char_u *, int); + +--- 344,349 ---- +*************** +*** 371,376 **** +--- 370,377 ---- + #endif + static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%["); + static char_u e_empty_sb[] = N_("E70: Empty %s%%[]"); ++ static char_u e_recursive[] = N_("E956: Cannot use pattern recursively"); ++ + #define NOT_MULTI 0 + #define MULTI_ONE 1 + #define MULTI_MULT 2 +*************** +*** 426,439 **** + static char_u REGEXP_INRANGE[] = "]^-n\\"; + static char_u REGEXP_ABBR[] = "nrtebdoxuU"; + +- static int backslash_trans(int c); +- static int get_char_class(char_u **pp); +- static int get_equi_class(char_u **pp); +- static void reg_equi_class(int c); +- static int get_coll_element(char_u **pp); +- static char_u *skip_anyof(char_u *p); +- static void init_class_tab(void); +- + /* + * Translate '\x' to its control character, except "\n", which is Magic. + */ +--- 427,432 ---- +*************** +*** 688,695 **** + * Forward declarations for vim_regcomp()'s friends. + */ + static void initchr(char_u *); +- static void save_parse_state(parse_state_T *ps); +- static void restore_parse_state(parse_state_T *ps); + static int getchr(void); + static void skipchr_keepstart(void); + static int peekchr(void); +--- 681,686 ---- +*************** +*** 1171,1177 **** + return 0; + } + +- static void get_cpo_flags(void); + static int reg_cpo_lit; /* 'cpoptions' contains 'l' flag */ + static int reg_cpo_bsl; /* 'cpoptions' contains '\' flag */ + +--- 1162,1167 ---- +*************** +*** 1322,1330 **** + return TRUE; + } + +- static regprog_T *bt_regcomp(char_u *expr, int re_flags); +- static void bt_regfree(regprog_T *prog); +- + /* + * bt_regcomp() - compile a regular expression into internal code for the + * traditional back track matcher. +--- 1312,1317 ---- +*************** +*** 1373,1378 **** +--- 1360,1366 ---- + r = (bt_regprog_T *)lalloc(sizeof(bt_regprog_T) + regsize, TRUE); + if (r == NULL) + return NULL; ++ r->re_in_use = FALSE; + + /* + * Second pass: emit code. +*************** +*** 1525,1533 **** + } + #endif + +! /* variables for parsing reginput */ +! static int at_start; /* True when on the first character */ +! static int prev_at_start; /* True when on the second character */ + + /* + * Parse regular expression, i.e. main body or parenthesized thing. +--- 1513,1521 ---- + } + #endif + +! // variables used for parsing +! static int at_start; // True when on the first character +! static int prev_at_start; // True when on the second character + + /* + * Parse regular expression, i.e. main body or parenthesized thing. +*************** +*** 3443,3460 **** + * Global work variables for vim_regexec(). + */ + +- /* The current match-position is remembered with these variables: */ +- static linenr_T reglnum; /* line number, relative to first line */ +- static char_u *regline; /* start of current line */ +- static char_u *reginput; /* current input, points into "regline" */ +- +- static int need_clear_subexpr; /* subexpressions still need to be +- * cleared */ +- #ifdef FEAT_SYN_HL +- static int need_clear_zsubexpr = FALSE; /* extmatch subexpressions +- * still need to be cleared */ +- #endif +- + /* + * Structure used to save the current input state, when it needs to be + * restored after trying a match. Used by reg_save() and reg_restore(). +--- 3431,3436 ---- +*************** +*** 3464,3471 **** + { + union + { +! char_u *ptr; /* reginput pointer, for single-line regexp */ +! lpos_T pos; /* reginput pos, for multi-line regexp */ + } rs_u; + int rs_len; + } regsave_T; +--- 3440,3447 ---- + { + union + { +! char_u *ptr; /* rex.input pointer, for single-line regexp */ +! lpos_T pos; /* rex.input pos, for multi-line regexp */ + } rs_u; + int rs_len; + } regsave_T; +*************** +*** 3564,3576 **** + linenr_T reg_maxline; + int reg_line_lbr; /* "\n" in string is line break */ + + /* Internal copy of 'ignorecase'. It is set at each call to vim_regexec(). + * Normally it gets the value of "rm_ic" or "rmm_ic", but when the pattern + * contains '\c' or '\C' the value is overruled. */ + int reg_ic; + + #ifdef FEAT_MBYTE +! /* Similar to rex.reg_ic, but only for 'combining' characters. Set with \Z + * flag in the regexp. Defaults to false, always. */ + int reg_icombine; + #endif +--- 3540,3563 ---- + linenr_T reg_maxline; + int reg_line_lbr; /* "\n" in string is line break */ + ++ // The current match-position is stord in these variables: ++ linenr_T lnum; // line number, relative to first line ++ char_u *line; // start of current line ++ char_u *input; // current input, points into "regline" ++ ++ int need_clear_subexpr; // subexpressions still need to be cleared ++ #ifdef FEAT_SYN_HL ++ int need_clear_zsubexpr; // extmatch subexpressions still need to be ++ // cleared ++ #endif ++ + /* Internal copy of 'ignorecase'. It is set at each call to vim_regexec(). + * Normally it gets the value of "rm_ic" or "rmm_ic", but when the pattern + * contains '\c' or '\C' the value is overruled. */ + int reg_ic; + + #ifdef FEAT_MBYTE +! /* Similar to "reg_ic", but only for 'combining' characters. Set with \Z + * flag in the regexp. Defaults to false, always. */ + int reg_icombine; + #endif +*************** +*** 3578,3583 **** +--- 3565,3586 ---- + /* Copy of "rmm_maxcol": maximum column to search for a match. Zero when + * there is no maximum. */ + colnr_T reg_maxcol; ++ ++ // State for the NFA engine regexec. ++ int nfa_has_zend; // NFA regexp \ze operator encountered. ++ int nfa_has_backref; // NFA regexp \1 .. \9 encountered. ++ int nfa_nsubexpr; // Number of sub expressions actually being used ++ // during execution. 1 if only the whole match ++ // (subexpr 0) is used. ++ // listid is global, so that it increases on recursive calls to ++ // nfa_regmatch(), which means we don't have to clear the lastlist field of ++ // all the states. ++ int nfa_listid; ++ int nfa_alt_listid; ++ ++ #ifdef FEAT_SYN_HL ++ int nfa_has_zsubexpr; // NFA regexp has \z( ), set zsubexpr. ++ #endif + } regexec_T; + + static regexec_T rex; +*************** +*** 3619,3625 **** + { + save_se_T sesave; + regsave_T regsave; +! } rs_un; /* room for saving reginput */ + short rs_no; /* submatch nr or BEHIND/NOBEHIND */ + } regitem_T; + +--- 3622,3628 ---- + { + save_se_T sesave; + regsave_T regsave; +! } rs_un; /* room for saving rex.input */ + short rs_no; /* submatch nr or BEHIND/NOBEHIND */ + } regitem_T; + +*************** +*** 3896,3903 **** + goto theend; + } + +! regline = line; +! reglnum = 0; + reg_toolong = FALSE; + + /* Simplest case: Anchored match need be tried only once. */ +--- 3899,3906 ---- + goto theend; + } + +! rex.line = line; +! rex.lnum = 0; + reg_toolong = FALSE; + + /* Simplest case: Anchored match need be tried only once. */ +*************** +*** 3907,3916 **** + + #ifdef FEAT_MBYTE + if (has_mbyte) +! c = (*mb_ptr2char)(regline + col); + else + #endif +! c = regline[col]; + if (prog->regstart == NUL + || prog->regstart == c + || (rex.reg_ic && (( +--- 3910,3919 ---- + + #ifdef FEAT_MBYTE + if (has_mbyte) +! c = (*mb_ptr2char)(rex.line + col); + else + #endif +! c = rex.line[col]; + if (prog->regstart == NUL + || prog->regstart == c + || (rex.reg_ic && (( +*************** +*** 3940,3954 **** + && !has_mbyte + #endif + ) +! s = vim_strbyte(regline + col, prog->regstart); + else +! s = cstrchr(regline + col, prog->regstart); + if (s == NULL) + { + retval = 0; + break; + } +! col = (int)(s - regline); + } + + /* Check for maximum column to try. */ +--- 3943,3957 ---- + && !has_mbyte + #endif + ) +! s = vim_strbyte(rex.line + col, prog->regstart); + else +! s = cstrchr(rex.line + col, prog->regstart); + if (s == NULL) + { + retval = 0; + break; + } +! col = (int)(s - rex.line); + } + + /* Check for maximum column to try. */ +*************** +*** 3963,3978 **** + break; + + /* if not currently on the first line, get it again */ +! if (reglnum != 0) + { +! reglnum = 0; +! regline = reg_getline((linenr_T)0); + } +! if (regline[col] == NUL) + break; + #ifdef FEAT_MBYTE + if (has_mbyte) +! col += (*mb_ptr2len)(regline + col); + else + #endif + ++col; +--- 3966,3981 ---- + break; + + /* if not currently on the first line, get it again */ +! if (rex.lnum != 0) + { +! rex.lnum = 0; +! rex.line = reg_getline((linenr_T)0); + } +! if (rex.line[col] == NUL) + break; + #ifdef FEAT_MBYTE + if (has_mbyte) +! col += (*mb_ptr2len)(rex.line + col); + else + #endif + ++col; +*************** +*** 4052,4058 **** + #endif + + /* +! * regtry - try match of "prog" with at regline["col"]. + * Returns 0 for failure, number of lines contained in the match otherwise. + */ + static long +--- 4055,4061 ---- + #endif + + /* +! * regtry - try match of "prog" with at rex.line["col"]. + * Returns 0 for failure, number of lines contained in the match otherwise. + */ + static long +*************** +*** 4062,4073 **** + proftime_T *tm, /* timeout limit or NULL */ + int *timed_out) /* flag set on timeout or NULL */ + { +! reginput = regline + col; +! need_clear_subexpr = TRUE; + #ifdef FEAT_SYN_HL +! /* Clear the external match subpointers if necessary. */ +! if (prog->reghasz == REX_SET) +! need_clear_zsubexpr = TRUE; + #endif + + if (regmatch(prog->program + 1, tm, timed_out) == 0) +--- 4065,4075 ---- + proftime_T *tm, /* timeout limit or NULL */ + int *timed_out) /* flag set on timeout or NULL */ + { +! rex.input = rex.line + col; +! rex.need_clear_subexpr = TRUE; + #ifdef FEAT_SYN_HL +! // Clear the external match subpointers if necessary. +! rex.need_clear_zsubexpr = (prog->reghasz == REX_SET); + #endif + + if (regmatch(prog->program + 1, tm, timed_out) == 0) +*************** +*** 4083,4101 **** + } + if (rex.reg_endpos[0].lnum < 0) + { +! rex.reg_endpos[0].lnum = reglnum; +! rex.reg_endpos[0].col = (int)(reginput - regline); + } + else + /* Use line number of "\ze". */ +! reglnum = rex.reg_endpos[0].lnum; + } + else + { + if (rex.reg_startp[0] == NULL) +! rex.reg_startp[0] = regline + col; + if (rex.reg_endp[0] == NULL) +! rex.reg_endp[0] = reginput; + } + #ifdef FEAT_SYN_HL + /* Package any found \z(...\) matches for export. Default is none. */ +--- 4085,4103 ---- + } + if (rex.reg_endpos[0].lnum < 0) + { +! rex.reg_endpos[0].lnum = rex.lnum; +! rex.reg_endpos[0].col = (int)(rex.input - rex.line); + } + else + /* Use line number of "\ze". */ +! rex.lnum = rex.reg_endpos[0].lnum; + } + else + { + if (rex.reg_startp[0] == NULL) +! rex.reg_startp[0] = rex.line + col; + if (rex.reg_endp[0] == NULL) +! rex.reg_endp[0] = rex.input; + } + #ifdef FEAT_SYN_HL + /* Package any found \z(...\) matches for export. Default is none. */ +*************** +*** 4131,4137 **** + } + } + #endif +! return 1 + reglnum; + } + + #ifdef FEAT_MBYTE +--- 4133,4139 ---- + } + } + #endif +! return 1 + rex.lnum; + } + + #ifdef FEAT_MBYTE +*************** +*** 4143,4151 **** + static int + reg_prev_class(void) + { +! if (reginput > regline) +! return mb_get_class_buf(reginput - 1 +! - (*mb_head_off)(regline, reginput - 1), rex.reg_buf); + return -1; + } + #endif +--- 4145,4153 ---- + static int + reg_prev_class(void) + { +! if (rex.input > rex.line) +! return mb_get_class_buf(rex.input - 1 +! - (*mb_head_off)(rex.line, rex.input - 1), rex.reg_buf); + return -1; + } + #endif +*************** +*** 4153,4159 **** + static int reg_match_visual(void); + + /* +! * Return TRUE if the current reginput position matches the Visual area. + */ + static int + reg_match_visual(void) +--- 4155,4161 ---- + static int reg_match_visual(void); + + /* +! * Return TRUE if the current rex.input position matches the Visual area. + */ + static int + reg_match_visual(void) +*************** +*** 4199,4211 **** + } + mode = curbuf->b_visual.vi_mode; + } +! lnum = reglnum + rex.reg_firstlnum; + if (lnum < top.lnum || lnum > bot.lnum) + return FALSE; + + if (mode == 'v') + { +! col = (colnr_T)(reginput - regline); + if ((lnum == top.lnum && col < top.col) + || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e'))) + return FALSE; +--- 4201,4213 ---- + } + mode = curbuf->b_visual.vi_mode; + } +! lnum = rex.lnum + rex.reg_firstlnum; + if (lnum < top.lnum || lnum > bot.lnum) + return FALSE; + + if (mode == 'v') + { +! col = (colnr_T)(rex.input - rex.line); + if ((lnum == top.lnum && col < top.col) + || (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e'))) + return FALSE; +*************** +*** 4220,4233 **** + end = end2; + if (top.col == MAXCOL || bot.col == MAXCOL) + end = MAXCOL; +! cols = win_linetabsize(wp, regline, (colnr_T)(reginput - regline)); + if (cols < start || cols > end - (*p_sel == 'e')) + return FALSE; + } + return TRUE; + } + +! #define ADVANCE_REGINPUT() MB_PTR_ADV(reginput) + + /* + * The arguments from BRACE_LIMITS are stored here. They are actually local +--- 4222,4235 ---- + end = end2; + if (top.col == MAXCOL || bot.col == MAXCOL) + end = MAXCOL; +! cols = win_linetabsize(wp, rex.line, (colnr_T)(rex.input - rex.line)); + if (cols < start || cols > end - (*p_sel == 'e')) + return FALSE; + } + return TRUE; + } + +! #define ADVANCE_REGINPUT() MB_PTR_ADV(rex.input) + + /* + * The arguments from BRACE_LIMITS are stored here. They are actually local +*************** +*** 4247,4255 **** + * (that don't need to know whether the rest of the match failed) by a nested + * loop. + * +! * Returns TRUE when there is a match. Leaves reginput and reglnum just after + * the last matched character. +! * Returns FALSE when there is no match. Leaves reginput and reglnum in an + * undefined state! + */ + static int +--- 4249,4257 ---- + * (that don't need to know whether the rest of the match failed) by a nested + * loop. + * +! * Returns TRUE when there is a match. Leaves rex.input and rex.lnum just after + * the last matched character. +! * Returns FALSE when there is no match. Leaves rex.input and rex.lnum in an + * undefined state! + */ + static int +*************** +*** 4349,4359 **** + op = OP(scan); + /* Check for character class with NL added. */ + if (!rex.reg_line_lbr && WITH_NL(op) && REG_MULTI +! && *reginput == NUL && reglnum <= rex.reg_maxline) + { + reg_nextline(); + } +! else if (rex.reg_line_lbr && WITH_NL(op) && *reginput == '\n') + { + ADVANCE_REGINPUT(); + } +--- 4351,4361 ---- + op = OP(scan); + /* Check for character class with NL added. */ + if (!rex.reg_line_lbr && WITH_NL(op) && REG_MULTI +! && *rex.input == NUL && rex.lnum <= rex.reg_maxline) + { + reg_nextline(); + } +! else if (rex.reg_line_lbr && WITH_NL(op) && *rex.input == '\n') + { + ADVANCE_REGINPUT(); + } +*************** +*** 4363,4376 **** + op -= ADD_NL; + #ifdef FEAT_MBYTE + if (has_mbyte) +! c = (*mb_ptr2char)(reginput); + else + #endif +! c = *reginput; + switch (op) + { + case BOL: +! if (reginput != regline) + status = RA_NOMATCH; + break; + +--- 4365,4378 ---- + op -= ADD_NL; + #ifdef FEAT_MBYTE + if (has_mbyte) +! c = (*mb_ptr2char)(rex.input); + else + #endif +! c = *rex.input; + switch (op) + { + case BOL: +! if (rex.input != rex.line) + status = RA_NOMATCH; + break; + +*************** +*** 4383,4395 **** + /* We're not at the beginning of the file when below the first + * line where we started, not at the start of the line or we + * didn't start at the first line of the buffer. */ +! if (reglnum != 0 || reginput != regline + || (REG_MULTI && rex.reg_firstlnum > 1)) + status = RA_NOMATCH; + break; + + case RE_EOF: +! if (reglnum != rex.reg_maxline || c != NUL) + status = RA_NOMATCH; + break; + +--- 4385,4397 ---- + /* We're not at the beginning of the file when below the first + * line where we started, not at the start of the line or we + * didn't start at the first line of the buffer. */ +! if (rex.lnum != 0 || rex.input != rex.line + || (REG_MULTI && rex.reg_firstlnum > 1)) + status = RA_NOMATCH; + break; + + case RE_EOF: +! if (rex.lnum != rex.reg_maxline || c != NUL) + status = RA_NOMATCH; + break; + +*************** +*** 4397,4405 **** + /* Check if the buffer is in a window and compare the + * rex.reg_win->w_cursor position to the match position. */ + if (rex.reg_win == NULL +! || (reglnum + rex.reg_firstlnum + != rex.reg_win->w_cursor.lnum) +! || ((colnr_T)(reginput - regline) + != rex.reg_win->w_cursor.col)) + status = RA_NOMATCH; + break; +--- 4399,4407 ---- + /* Check if the buffer is in a window and compare the + * rex.reg_win->w_cursor position to the match position. */ + if (rex.reg_win == NULL +! || (rex.lnum + rex.reg_firstlnum + != rex.reg_win->w_cursor.lnum) +! || ((colnr_T)(rex.input - rex.line) + != rex.reg_win->w_cursor.col)) + status = RA_NOMATCH; + break; +*************** +*** 4414,4426 **** + pos = getmark_buf(rex.reg_buf, mark, FALSE); + if (pos == NULL /* mark doesn't exist */ + || pos->lnum <= 0 /* mark isn't set in reg_buf */ +! || (pos->lnum == reglnum + rex.reg_firstlnum +! ? (pos->col == (colnr_T)(reginput - regline) + ? (cmp == '<' || cmp == '>') +! : (pos->col < (colnr_T)(reginput - regline) + ? cmp != '>' + : cmp != '<')) +! : (pos->lnum < reglnum + rex.reg_firstlnum + ? cmp != '>' + : cmp != '<'))) + status = RA_NOMATCH; +--- 4416,4428 ---- + pos = getmark_buf(rex.reg_buf, mark, FALSE); + if (pos == NULL /* mark doesn't exist */ + || pos->lnum <= 0 /* mark isn't set in reg_buf */ +! || (pos->lnum == rex.lnum + rex.reg_firstlnum +! ? (pos->col == (colnr_T)(rex.input - rex.line) + ? (cmp == '<' || cmp == '>') +! : (pos->col < (colnr_T)(rex.input - rex.line) + ? cmp != '>' + : cmp != '<')) +! : (pos->lnum < rex.lnum + rex.reg_firstlnum + ? cmp != '>' + : cmp != '<'))) + status = RA_NOMATCH; +*************** +*** 4433,4456 **** + break; + + case RE_LNUM: +! if (!REG_MULTI || !re_num_cmp((long_u)(reglnum + rex.reg_firstlnum), + scan)) + status = RA_NOMATCH; + break; + + case RE_COL: +! if (!re_num_cmp((long_u)(reginput - regline) + 1, scan)) + status = RA_NOMATCH; + break; + + case RE_VCOL: + if (!re_num_cmp((long_u)win_linetabsize( + rex.reg_win == NULL ? curwin : rex.reg_win, +! regline, (colnr_T)(reginput - regline)) + 1, scan)) + status = RA_NOMATCH; + break; + +! case BOW: /* \<word; reginput points to w */ + if (c == NUL) /* Can't match at end of line */ + status = RA_NOMATCH; + #ifdef FEAT_MBYTE +--- 4435,4458 ---- + break; + + case RE_LNUM: +! if (!REG_MULTI || !re_num_cmp((long_u)(rex.lnum + rex.reg_firstlnum), + scan)) + status = RA_NOMATCH; + break; + + case RE_COL: +! if (!re_num_cmp((long_u)(rex.input - rex.line) + 1, scan)) + status = RA_NOMATCH; + break; + + case RE_VCOL: + if (!re_num_cmp((long_u)win_linetabsize( + rex.reg_win == NULL ? curwin : rex.reg_win, +! rex.line, (colnr_T)(rex.input - rex.line)) + 1, scan)) + status = RA_NOMATCH; + break; + +! case BOW: /* \<word; rex.input points to w */ + if (c == NUL) /* Can't match at end of line */ + status = RA_NOMATCH; + #ifdef FEAT_MBYTE +*************** +*** 4459,4465 **** + int this_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(reginput, rex.reg_buf); + if (this_class <= 1) + status = RA_NOMATCH; /* not on a word at all */ + else if (reg_prev_class() == this_class) +--- 4461,4467 ---- + int this_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(rex.input, rex.reg_buf); + if (this_class <= 1) + status = RA_NOMATCH; /* not on a word at all */ + else if (reg_prev_class() == this_class) +*************** +*** 4468,4481 **** + #endif + else + { +! if (!vim_iswordc_buf(c, rex.reg_buf) || (reginput > regline +! && vim_iswordc_buf(reginput[-1], rex.reg_buf))) + status = RA_NOMATCH; + } + break; + +! case EOW: /* word\>; reginput points after d */ +! if (reginput == regline) /* Can't match at start of line */ + status = RA_NOMATCH; + #ifdef FEAT_MBYTE + else if (has_mbyte) +--- 4470,4483 ---- + #endif + else + { +! if (!vim_iswordc_buf(c, rex.reg_buf) || (rex.input > rex.line +! && vim_iswordc_buf(rex.input[-1], rex.reg_buf))) + status = RA_NOMATCH; + } + break; + +! case EOW: /* word\>; rex.input points after d */ +! if (rex.input == rex.line) /* Can't match at start of line */ + status = RA_NOMATCH; + #ifdef FEAT_MBYTE + else if (has_mbyte) +*************** +*** 4483,4489 **** + int this_class, prev_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(reginput, rex.reg_buf); + prev_class = reg_prev_class(); + if (this_class == prev_class + || prev_class == 0 || prev_class == 1) +--- 4485,4491 ---- + int this_class, prev_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(rex.input, rex.reg_buf); + prev_class = reg_prev_class(); + if (this_class == prev_class + || prev_class == 0 || prev_class == 1) +*************** +*** 4492,4499 **** + #endif + else + { +! if (!vim_iswordc_buf(reginput[-1], rex.reg_buf) +! || (reginput[0] != NUL + && vim_iswordc_buf(c, rex.reg_buf))) + status = RA_NOMATCH; + } +--- 4494,4501 ---- + #endif + else + { +! if (!vim_iswordc_buf(rex.input[-1], rex.reg_buf) +! || (rex.input[0] != NUL + && vim_iswordc_buf(c, rex.reg_buf))) + status = RA_NOMATCH; + } +*************** +*** 4515,4536 **** + break; + + case SIDENT: +! if (VIM_ISDIGIT(*reginput) || !vim_isIDc(c)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case KWORD: +! if (!vim_iswordp_buf(reginput, rex.reg_buf)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case SKWORD: +! if (VIM_ISDIGIT(*reginput) +! || !vim_iswordp_buf(reginput, rex.reg_buf)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); +--- 4517,4538 ---- + break; + + case SIDENT: +! if (VIM_ISDIGIT(*rex.input) || !vim_isIDc(c)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case KWORD: +! if (!vim_iswordp_buf(rex.input, rex.reg_buf)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case SKWORD: +! if (VIM_ISDIGIT(*rex.input) +! || !vim_iswordp_buf(rex.input, rex.reg_buf)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); +*************** +*** 4544,4564 **** + break; + + case SFNAME: +! if (VIM_ISDIGIT(*reginput) || !vim_isfilec(c)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case PRINT: +! if (!vim_isprintc(PTR2CHAR(reginput))) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case SPRINT: +! if (VIM_ISDIGIT(*reginput) || !vim_isprintc(PTR2CHAR(reginput))) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); +--- 4546,4566 ---- + break; + + case SFNAME: +! if (VIM_ISDIGIT(*rex.input) || !vim_isfilec(c)) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case PRINT: +! if (!vim_isprintc(PTR2CHAR(rex.input))) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); + break; + + case SPRINT: +! if (VIM_ISDIGIT(*rex.input) || !vim_isprintc(PTR2CHAR(rex.input))) + status = RA_NOMATCH; + else + ADVANCE_REGINPUT(); +*************** +*** 4697,4708 **** + + opnd = OPERAND(scan); + /* Inline the first byte, for speed. */ +! if (*opnd != *reginput + && (!rex.reg_ic || ( + #ifdef FEAT_MBYTE + !enc_utf8 && + #endif +! MB_TOLOWER(*opnd) != MB_TOLOWER(*reginput)))) + status = RA_NOMATCH; + else if (*opnd == NUL) + { +--- 4699,4710 ---- + + opnd = OPERAND(scan); + /* Inline the first byte, for speed. */ +! if (*opnd != *rex.input + && (!rex.reg_ic || ( + #ifdef FEAT_MBYTE + !enc_utf8 && + #endif +! MB_TOLOWER(*opnd) != MB_TOLOWER(*rex.input)))) + status = RA_NOMATCH; + else if (*opnd == NUL) + { +*************** +*** 4723,4729 **** + { + /* Need to match first byte again for multi-byte. */ + len = (int)STRLEN(opnd); +! if (cstrncmp(opnd, reginput, &len) != 0) + status = RA_NOMATCH; + } + #ifdef FEAT_MBYTE +--- 4725,4731 ---- + { + /* Need to match first byte again for multi-byte. */ + len = (int)STRLEN(opnd); +! if (cstrncmp(opnd, rex.input, &len) != 0) + status = RA_NOMATCH; + } + #ifdef FEAT_MBYTE +*************** +*** 4731,4737 **** + * follows (skips over all composing chars). */ + if (status != RA_NOMATCH + && enc_utf8 +! && UTF_COMPOSINGLIKE(reginput, reginput + len) + && !rex.reg_icombine + && OP(next) != RE_COMPOSING) + { +--- 4733,4739 ---- + * follows (skips over all composing chars). */ + if (status != RA_NOMATCH + && enc_utf8 +! && UTF_COMPOSINGLIKE(rex.input, rex.input + len) + && !rex.reg_icombine + && OP(next) != RE_COMPOSING) + { +*************** +*** 4742,4748 **** + } + #endif + if (status != RA_NOMATCH) +! reginput += len; + } + } + break; +--- 4744,4750 ---- + } + #endif + if (status != RA_NOMATCH) +! rex.input += len; + } + } + break; +*************** +*** 4780,4789 **** + /* When only a composing char is given match at any + * position where that composing char appears. */ + status = RA_NOMATCH; +! for (i = 0; reginput[i] != NUL; +! i += utf_ptr2len(reginput + i)) + { +! inpc = utf_ptr2char(reginput + i); + if (!utf_iscomposing(inpc)) + { + if (i > 0) +--- 4782,4791 ---- + /* When only a composing char is given match at any + * position where that composing char appears. */ + status = RA_NOMATCH; +! for (i = 0; rex.input[i] != NUL; +! i += utf_ptr2len(rex.input + i)) + { +! inpc = utf_ptr2char(rex.input + i); + if (!utf_iscomposing(inpc)) + { + if (i > 0) +*************** +*** 4792,4798 **** + else if (opndc == inpc) + { + /* Include all following composing chars. */ +! len = i + utfc_ptr2len(reginput + i); + status = RA_MATCH; + break; + } +--- 4794,4800 ---- + else if (opndc == inpc) + { + /* Include all following composing chars. */ +! len = i + utfc_ptr2len(rex.input + i); + status = RA_MATCH; + break; + } +*************** +*** 4800,4811 **** + } + else + for (i = 0; i < len; ++i) +! if (opnd[i] != reginput[i]) + { + status = RA_NOMATCH; + break; + } +! reginput += len; + } + else + status = RA_NOMATCH; +--- 4802,4813 ---- + } + else + for (i = 0; i < len; ++i) +! if (opnd[i] != rex.input[i]) + { + status = RA_NOMATCH; + break; + } +! rex.input += len; + } + else + status = RA_NOMATCH; +*************** +*** 4816,4823 **** + if (enc_utf8) + { + /* Skip composing characters. */ +! while (utf_iscomposing(utf_ptr2char(reginput))) +! MB_CPTR_ADV(reginput); + } + #endif + break; +--- 4818,4825 ---- + if (enc_utf8) + { + /* Skip composing characters. */ +! while (utf_iscomposing(utf_ptr2char(rex.input))) +! MB_CPTR_ADV(rex.input); + } + #endif + break; +*************** +*** 5003,5009 **** + /* Compare current input with back-ref in the same + * line. */ + len = (int)(rex.reg_endp[no] - rex.reg_startp[no]); +! if (cstrncmp(rex.reg_startp[no], reginput, &len) != 0) + status = RA_NOMATCH; + } + } +--- 5005,5011 ---- + /* Compare current input with back-ref in the same + * line. */ + len = (int)(rex.reg_endp[no] - rex.reg_startp[no]); +! if (cstrncmp(rex.reg_startp[no], rex.input, &len) != 0) + status = RA_NOMATCH; + } + } +*************** +*** 5017,5030 **** + } + else + { +! if (rex.reg_startpos[no].lnum == reglnum +! && rex.reg_endpos[no].lnum == reglnum) + { + /* Compare back-ref within the current line. */ + len = rex.reg_endpos[no].col + - rex.reg_startpos[no].col; +! if (cstrncmp(regline + rex.reg_startpos[no].col, +! reginput, &len) != 0) + status = RA_NOMATCH; + } + else +--- 5019,5032 ---- + } + else + { +! if (rex.reg_startpos[no].lnum == rex.lnum +! && rex.reg_endpos[no].lnum == rex.lnum) + { + /* Compare back-ref within the current line. */ + len = rex.reg_endpos[no].col + - rex.reg_startpos[no].col; +! if (cstrncmp(rex.line + rex.reg_startpos[no].col, +! rex.input, &len) != 0) + status = RA_NOMATCH; + } + else +*************** +*** 5045,5051 **** + } + + /* Matched the backref, skip over it. */ +! reginput += len; + } + break; + +--- 5047,5053 ---- + } + + /* Matched the backref, skip over it. */ +! rex.input += len; + } + break; + +*************** +*** 5069,5078 **** + { + len = (int)STRLEN(re_extmatch_in->matches[no]); + if (cstrncmp(re_extmatch_in->matches[no], +! reginput, &len) != 0) + status = RA_NOMATCH; + else +! reginput += len; + } + else + { +--- 5071,5080 ---- + { + len = (int)STRLEN(re_extmatch_in->matches[no]); + if (cstrncmp(re_extmatch_in->matches[no], +! rex.input, &len) != 0) + status = RA_NOMATCH; + else +! rex.input += len; + } + else + { +*************** +*** 5319,5334 **** + case BHPOS: + if (REG_MULTI) + { +! if (behind_pos.rs_u.pos.col != (colnr_T)(reginput - regline) +! || behind_pos.rs_u.pos.lnum != reglnum) + status = RA_NOMATCH; + } +! else if (behind_pos.rs_u.ptr != reginput) + status = RA_NOMATCH; + break; + + case NEWL: +! if ((c != NUL || !REG_MULTI || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + && (c != '\n' || !rex.reg_line_lbr)) + status = RA_NOMATCH; +--- 5321,5336 ---- + case BHPOS: + if (REG_MULTI) + { +! if (behind_pos.rs_u.pos.col != (colnr_T)(rex.input - rex.line) +! || behind_pos.rs_u.pos.lnum != rex.lnum) + status = RA_NOMATCH; + } +! else if (behind_pos.rs_u.ptr != rex.input) + status = RA_NOMATCH; + break; + + case NEWL: +! if ((c != NUL || !REG_MULTI || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + && (c != '\n' || !rex.reg_line_lbr)) + status = RA_NOMATCH; +*************** +*** 5562,5568 **** + if (limit > 0 + && ((rp->rs_un.regsave.rs_u.pos.lnum + < behind_pos.rs_u.pos.lnum +! ? (colnr_T)STRLEN(regline) + : behind_pos.rs_u.pos.col) + - rp->rs_un.regsave.rs_u.pos.col >= limit)) + no = FAIL; +--- 5564,5570 ---- + if (limit > 0 + && ((rp->rs_un.regsave.rs_u.pos.lnum + < behind_pos.rs_u.pos.lnum +! ? (colnr_T)STRLEN(rex.line) + : behind_pos.rs_u.pos.col) + - rp->rs_un.regsave.rs_u.pos.col >= limit)) + no = FAIL; +*************** +*** 5578,5584 **** + { + reg_restore(&rp->rs_un.regsave, &backpos); + rp->rs_un.regsave.rs_u.pos.col = +! (colnr_T)STRLEN(regline); + } + } + else +--- 5580,5586 ---- + { + reg_restore(&rp->rs_un.regsave, &backpos); + rp->rs_un.regsave.rs_u.pos.col = +! (colnr_T)STRLEN(rex.line); + } + } + else +*************** +*** 5600,5610 **** + } + else + { +! if (rp->rs_un.regsave.rs_u.ptr == regline) + no = FAIL; + else + { +! MB_PTR_BACK(regline, rp->rs_un.regsave.rs_u.ptr); + if (limit > 0 && (long)(behind_pos.rs_u.ptr + - rp->rs_un.regsave.rs_u.ptr) > limit) + no = FAIL; +--- 5602,5612 ---- + } + else + { +! if (rp->rs_un.regsave.rs_u.ptr == rex.line) + no = FAIL; + else + { +! MB_PTR_BACK(rex.line, rp->rs_un.regsave.rs_u.ptr); + if (limit > 0 && (long)(behind_pos.rs_u.ptr + - rp->rs_un.regsave.rs_u.ptr) > limit) + no = FAIL; +*************** +*** 5678,5697 **** + * didn't match -- back up one char. */ + if (--rst->count < rst->minval) + break; +! if (reginput == regline) + { + /* backup to last char of previous line */ +! --reglnum; +! regline = reg_getline(reglnum); + /* Just in case regrepeat() didn't count + * right. */ +! if (regline == NULL) + break; +! reginput = regline + STRLEN(regline); + fast_breakcheck(); + } + else +! MB_PTR_BACK(regline, reginput); + } + else + { +--- 5680,5699 ---- + * didn't match -- back up one char. */ + if (--rst->count < rst->minval) + break; +! if (rex.input == rex.line) + { + /* backup to last char of previous line */ +! --rex.lnum; +! rex.line = reg_getline(rex.lnum); + /* Just in case regrepeat() didn't count + * right. */ +! if (rex.line == NULL) + break; +! rex.input = rex.line + STRLEN(rex.line); + fast_breakcheck(); + } + else +! MB_PTR_BACK(rex.line, rex.input); + } + else + { +*************** +*** 5711,5718 **** + status = RA_NOMATCH; + + /* If it could match, try it. */ +! if (rst->nextb == NUL || *reginput == rst->nextb +! || *reginput == rst->nextb_ic) + { + reg_save(&rp->rs_un.regsave, &backpos); + scan = regnext(rp->rs_scan); +--- 5713,5720 ---- + status = RA_NOMATCH; + + /* If it could match, try it. */ +! if (rst->nextb == NUL || *rex.input == rst->nextb +! || *rex.input == rst->nextb_ic) + { + reg_save(&rp->rs_un.regsave, &backpos); + scan = regnext(rp->rs_scan); +*************** +*** 5807,5813 **** + + /* + * regrepeat - repeatedly match something simple, return how many. +! * Advances reginput (and reglnum) to just after the matched chars. + */ + static int + regrepeat( +--- 5809,5815 ---- + + /* + * regrepeat - repeatedly match something simple, return how many. +! * Advances rex.input (and rex.lnum) to just after the matched chars. + */ + static int + regrepeat( +*************** +*** 5820,5826 **** + int mask; + int testval = 0; + +! scan = reginput; /* Make local copy of reginput for speed. */ + opnd = OPERAND(p); + switch (OP(p)) + { +--- 5822,5828 ---- + int mask; + int testval = 0; + +! scan = rex.input; /* Make local copy of rex.input for speed. */ + opnd = OPERAND(p); + switch (OP(p)) + { +*************** +*** 5835,5846 **** + ++count; + MB_PTR_ADV(scan); + } +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr || count == maxcount) + break; + ++count; /* count the line-break */ + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 5837,5848 ---- + ++count; + MB_PTR_ADV(scan); + } +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr || count == maxcount) + break; + ++count; /* count the line-break */ + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 5860,5870 **** + } + else if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 5862,5872 ---- + } + else if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 5891,5901 **** + } + else if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 5893,5903 ---- + } + else if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 5921,5931 **** + } + else if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 5923,5933 ---- + } + else if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 5947,5957 **** + { + if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 5949,5959 ---- + { + if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 5979,5989 **** + #endif + if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 5981,5991 ---- + #endif + if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 6144,6154 **** + #endif + if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 6146,6156 ---- + #endif + if (*scan == NUL) + { +! if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline + || rex.reg_line_lbr) + break; + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 6174,6180 **** + + case NEWL: + while (count < maxcount +! && ((*scan == NUL && reglnum <= rex.reg_maxline + && !rex.reg_line_lbr && REG_MULTI) + || (*scan == '\n' && rex.reg_line_lbr))) + { +--- 6176,6182 ---- + + case NEWL: + while (count < maxcount +! && ((*scan == NUL && rex.lnum <= rex.reg_maxline + && !rex.reg_line_lbr && REG_MULTI) + || (*scan == '\n' && rex.reg_line_lbr))) + { +*************** +*** 6183,6189 **** + ADVANCE_REGINPUT(); + else + reg_nextline(); +! scan = reginput; + if (got_int) + break; + } +--- 6185,6191 ---- + ADVANCE_REGINPUT(); + else + reg_nextline(); +! scan = rex.input; + if (got_int) + break; + } +*************** +*** 6197,6203 **** + break; + } + +! reginput = scan; + + return (int)count; + } +--- 6199,6205 ---- + break; + } + +! rex.input = scan; + + return (int)count; + } +*************** +*** 6255,6261 **** + static void + cleanup_subexpr(void) + { +! if (need_clear_subexpr) + { + if (REG_MULTI) + { +--- 6257,6263 ---- + static void + cleanup_subexpr(void) + { +! if (rex.need_clear_subexpr) + { + if (REG_MULTI) + { +*************** +*** 6268,6274 **** + vim_memset(rex.reg_startp, 0, sizeof(char_u *) * NSUBEXP); + vim_memset(rex.reg_endp, 0, sizeof(char_u *) * NSUBEXP); + } +! need_clear_subexpr = FALSE; + } + } + +--- 6270,6276 ---- + vim_memset(rex.reg_startp, 0, sizeof(char_u *) * NSUBEXP); + vim_memset(rex.reg_endp, 0, sizeof(char_u *) * NSUBEXP); + } +! rex.need_clear_subexpr = FALSE; + } + } + +*************** +*** 6276,6282 **** + static void + cleanup_zsubexpr(void) + { +! if (need_clear_zsubexpr) + { + if (REG_MULTI) + { +--- 6278,6284 ---- + static void + cleanup_zsubexpr(void) + { +! if (rex.need_clear_zsubexpr) + { + if (REG_MULTI) + { +*************** +*** 6289,6295 **** + vim_memset(reg_startzp, 0, sizeof(char_u *) * NSUBEXP); + vim_memset(reg_endzp, 0, sizeof(char_u *) * NSUBEXP); + } +! need_clear_zsubexpr = FALSE; + } + } + #endif +--- 6291,6297 ---- + vim_memset(reg_startzp, 0, sizeof(char_u *) * NSUBEXP); + vim_memset(reg_endzp, 0, sizeof(char_u *) * NSUBEXP); + } +! rex.need_clear_zsubexpr = FALSE; + } + } + #endif +*************** +*** 6303,6312 **** + { + int i; + +! /* When "need_clear_subexpr" is set we don't need to save the values, only + * remember that this flag needs to be set again when restoring. */ +! bp->save_need_clear_subexpr = need_clear_subexpr; +! if (!need_clear_subexpr) + { + for (i = 0; i < NSUBEXP; ++i) + { +--- 6305,6314 ---- + { + int i; + +! /* When "rex.need_clear_subexpr" is set we don't need to save the values, only + * remember that this flag needs to be set again when restoring. */ +! bp->save_need_clear_subexpr = rex.need_clear_subexpr; +! if (!rex.need_clear_subexpr) + { + for (i = 0; i < NSUBEXP; ++i) + { +*************** +*** 6333,6340 **** + int i; + + /* Only need to restore saved values when they are not to be cleared. */ +! need_clear_subexpr = bp->save_need_clear_subexpr; +! if (!need_clear_subexpr) + { + for (i = 0; i < NSUBEXP; ++i) + { +--- 6335,6342 ---- + int i; + + /* Only need to restore saved values when they are not to be cleared. */ +! rex.need_clear_subexpr = bp->save_need_clear_subexpr; +! if (!rex.need_clear_subexpr) + { + for (i = 0; i < NSUBEXP; ++i) + { +*************** +*** 6353,6365 **** + } + + /* +! * Advance reglnum, regline and reginput to the next line. + */ + static void + reg_nextline(void) + { +! regline = reg_getline(++reglnum); +! reginput = regline; + fast_breakcheck(); + } + +--- 6355,6367 ---- + } + + /* +! * Advance rex.lnum, rex.line and rex.input to the next line. + */ + static void + reg_nextline(void) + { +! rex.line = reg_getline(++rex.lnum); +! rex.input = rex.line; + fast_breakcheck(); + } + +*************** +*** 6371,6381 **** + { + if (REG_MULTI) + { +! save->rs_u.pos.col = (colnr_T)(reginput - regline); +! save->rs_u.pos.lnum = reglnum; + } + else +! save->rs_u.ptr = reginput; + save->rs_len = gap->ga_len; + } + +--- 6373,6383 ---- + { + if (REG_MULTI) + { +! save->rs_u.pos.col = (colnr_T)(rex.input - rex.line); +! save->rs_u.pos.lnum = rex.lnum; + } + else +! save->rs_u.ptr = rex.input; + save->rs_len = gap->ga_len; + } + +*************** +*** 6387,6403 **** + { + if (REG_MULTI) + { +! if (reglnum != save->rs_u.pos.lnum) + { + /* only call reg_getline() when the line number changed to save + * a bit of time */ +! reglnum = save->rs_u.pos.lnum; +! regline = reg_getline(reglnum); + } +! reginput = regline + save->rs_u.pos.col; + } + else +! reginput = save->rs_u.ptr; + gap->ga_len = save->rs_len; + } + +--- 6389,6405 ---- + { + if (REG_MULTI) + { +! if (rex.lnum != save->rs_u.pos.lnum) + { + /* only call reg_getline() when the line number changed to save + * a bit of time */ +! rex.lnum = save->rs_u.pos.lnum; +! rex.line = reg_getline(rex.lnum); + } +! rex.input = rex.line + save->rs_u.pos.col; + } + else +! rex.input = save->rs_u.ptr; + gap->ga_len = save->rs_len; + } + +*************** +*** 6408,6416 **** + reg_save_equal(regsave_T *save) + { + if (REG_MULTI) +! return reglnum == save->rs_u.pos.lnum +! && reginput == regline + save->rs_u.pos.col; +! return reginput == save->rs_u.ptr; + } + + /* +--- 6410,6418 ---- + reg_save_equal(regsave_T *save) + { + if (REG_MULTI) +! return rex.lnum == save->rs_u.pos.lnum +! && rex.input == rex.line + save->rs_u.pos.col; +! return rex.input == save->rs_u.ptr; + } + + /* +*************** +*** 6424,6438 **** + save_se_multi(save_se_T *savep, lpos_T *posp) + { + savep->se_u.pos = *posp; +! posp->lnum = reglnum; +! posp->col = (colnr_T)(reginput - regline); + } + + static void + save_se_one(save_se_T *savep, char_u **pp) + { + savep->se_u.ptr = *pp; +! *pp = reginput; + } + + /* +--- 6426,6440 ---- + save_se_multi(save_se_T *savep, lpos_T *posp) + { + savep->se_u.pos = *posp; +! posp->lnum = rex.lnum; +! posp->col = (colnr_T)(rex.input - rex.line); + } + + static void + save_se_one(save_se_T *savep, char_u **pp) + { + savep->se_u.ptr = *pp; +! *pp = rex.input; + } + + /* +*************** +*** 6475,6483 **** + { + /* Since getting one line may invalidate the other, need to make copy. + * Slow! */ +! if (regline != reg_tofree) + { +! len = (int)STRLEN(regline); + if (reg_tofree == NULL || len >= (int)reg_tofreelen) + { + len += 50; /* get some extra */ +--- 6477,6485 ---- + { + /* Since getting one line may invalidate the other, need to make copy. + * Slow! */ +! if (rex.line != reg_tofree) + { +! len = (int)STRLEN(rex.line); + if (reg_tofree == NULL || len >= (int)reg_tofreelen) + { + len += 50; /* get some extra */ +*************** +*** 6487,6495 **** + return RA_FAIL; /* out of memory!*/ + reg_tofreelen = len; + } +! STRCPY(reg_tofree, regline); +! reginput = reg_tofree + (reginput - regline); +! regline = reg_tofree; + } + + /* Get the line to compare with. */ +--- 6489,6497 ---- + return RA_FAIL; /* out of memory!*/ + reg_tofreelen = len; + } +! STRCPY(reg_tofree, rex.line); +! rex.input = reg_tofree + (rex.input - rex.line); +! rex.line = reg_tofree; + } + + /* Get the line to compare with. */ +*************** +*** 6499,6511 **** + else + len = (int)STRLEN(p + ccol); + +! if (cstrncmp(p + ccol, reginput, &len) != 0) + return RA_NOMATCH; /* doesn't match */ + if (bytelen != NULL) + *bytelen += len; + if (clnum == end_lnum) + break; /* match and at end! */ +! if (reglnum >= rex.reg_maxline) + return RA_NOMATCH; /* text too short */ + + /* Advance to next line. */ +--- 6501,6513 ---- + else + len = (int)STRLEN(p + ccol); + +! if (cstrncmp(p + ccol, rex.input, &len) != 0) + return RA_NOMATCH; /* doesn't match */ + if (bytelen != NULL) + *bytelen += len; + if (clnum == end_lnum) + break; /* match and at end! */ +! if (rex.lnum >= rex.reg_maxline) + return RA_NOMATCH; /* text too short */ + + /* Advance to next line. */ +*************** +*** 6518,6524 **** + return RA_FAIL; + } + +! /* found a match! Note that regline may now point to a copy of the line, + * that should not matter. */ + return RA_MATCH; + } +--- 6520,6526 ---- + return RA_FAIL; + } + +! /* found a match! Note that rex.line may now point to a copy of the line, + * that should not matter. */ + return RA_MATCH; + } +*************** +*** 8144,8151 **** +--- 8146,8155 ---- + regexp_engine = AUTOMATIC_ENGINE; + } + } ++ #ifdef DEBUG + bt_regengine.expr = expr; + nfa_regengine.expr = expr; ++ #endif + + /* + * First try the NFA engine, unless backtracking was requested. +*************** +*** 8243,8252 **** + regexec_T rex_save; + int rex_in_use_save = rex_in_use; + + if (rex_in_use) +! /* Being called recursively, save the state. */ + rex_save = rex; + rex_in_use = TRUE; + rex.reg_startp = NULL; + rex.reg_endp = NULL; + rex.reg_startpos = NULL; +--- 8247,8265 ---- + regexec_T rex_save; + int rex_in_use_save = rex_in_use; + ++ // Cannot use the same prog recursively, it contains state. ++ if (rmp->regprog->re_in_use) ++ { ++ EMSG(_(e_recursive)); ++ return FALSE; ++ } ++ rmp->regprog->re_in_use = TRUE; ++ + if (rex_in_use) +! // Being called recursively, save the state. + rex_save = rex; + rex_in_use = TRUE; ++ + rex.reg_startp = NULL; + rex.reg_endp = NULL; + rex.reg_startpos = NULL; +*************** +*** 8281,8286 **** +--- 8294,8300 ---- + rex_in_use = rex_in_use_save; + if (rex_in_use) + rex = rex_save; ++ rmp->regprog->re_in_use = FALSE; + + return result > 0; + } +*************** +*** 8353,8358 **** +--- 8367,8380 ---- + regexec_T rex_save; + int rex_in_use_save = rex_in_use; + ++ // Cannot use the same prog recursively, it contains state. ++ if (rmp->regprog->re_in_use) ++ { ++ EMSG(_(e_recursive)); ++ return FALSE; ++ } ++ rmp->regprog->re_in_use = TRUE; ++ + if (rex_in_use) + /* Being called recursively, save the state. */ + rex_save = rex; +*************** +*** 8397,8402 **** +--- 8419,8425 ---- + rex_in_use = rex_in_use_save; + if (rex_in_use) + rex = rex_save; ++ rmp->regprog->re_in_use = FALSE; + + return result <= 0 ? 0 : result; + } +*** ../vim-8.1.0191/src/regexp.h 2017-06-17 17:52:18.000000000 +0200 +--- src/regexp.h 2018-07-17 05:08:49.564483204 +0200 +*************** +*** 50,57 **** + { + regengine_T *engine; + unsigned regflags; +! unsigned re_engine; /* automatic, backtracking or nfa engine */ +! unsigned re_flags; /* second argument for vim_regcomp() */ + } regprog_T; + + /* +--- 50,58 ---- + { + regengine_T *engine; + unsigned regflags; +! unsigned re_engine; // automatic, backtracking or nfa engine +! unsigned re_flags; // second argument for vim_regcomp() +! int re_in_use; // prog is being executed + } regprog_T; + + /* +*************** +*** 65,71 **** + regengine_T *engine; + unsigned regflags; + unsigned re_engine; +! unsigned re_flags; /* second argument for vim_regcomp() */ + + int regstart; + char_u reganch; +--- 66,73 ---- + regengine_T *engine; + unsigned regflags; + unsigned re_engine; +! unsigned re_flags; +! int re_in_use; + + int regstart; + char_u reganch; +*************** +*** 101,107 **** + regengine_T *engine; + unsigned regflags; + unsigned re_engine; +! unsigned re_flags; /* second argument for vim_regcomp() */ + + nfa_state_T *start; /* points into state[] */ + +--- 103,110 ---- + regengine_T *engine; + unsigned regflags; + unsigned re_engine; +! unsigned re_flags; +! int re_in_use; + + nfa_state_T *start; /* points into state[] */ + +*** ../vim-8.1.0191/src/regexp_nfa.c 2018-07-08 19:07:16.159415508 +0200 +--- src/regexp_nfa.c 2018-07-17 05:08:49.568483181 +0200 +*************** +*** 244,284 **** + static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c"); + static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld"); + +! /* re_flags passed to nfa_regcomp() */ +! static int nfa_re_flags; +! +! /* NFA regexp \ze operator encountered. */ +! static int nfa_has_zend; +! +! /* NFA regexp \1 .. \9 encountered. */ +! static int nfa_has_backref; +! +! #ifdef FEAT_SYN_HL +! /* NFA regexp has \z( ), set zsubexpr. */ +! static int nfa_has_zsubexpr; +! #endif +! +! /* Number of sub expressions actually being used during execution. 1 if only +! * the whole match (subexpr 0) is used. */ +! static int nfa_nsubexpr; +! +! static int *post_start; /* holds the postfix form of r.e. */ + static int *post_end; + static int *post_ptr; +! +! static int nstate; /* Number of states in the NFA. Also used when +! * executing. */ +! static int istate; /* Index in the state vector, used in alloc_state() */ + + /* If not NULL match must end at this position */ + static save_se_T *nfa_endp = NULL; + +- /* listid is global, so that it increases on recursive calls to +- * nfa_regmatch(), which means we don't have to clear the lastlist field of +- * all the states. */ +- static int nfa_listid; +- static int nfa_alt_listid; +- + /* 0 for first call to nfa_regmatch(), 1 for recursive call. */ + static int nfa_ll_index = 0; + +--- 244,260 ---- + static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c"); + static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld"); + +! // Variables only used in nfa_regcomp() and descendants. +! static int nfa_re_flags; // re_flags passed to nfa_regcomp() +! static int *post_start; // holds the postfix form of r.e. + static int *post_end; + static int *post_ptr; +! static int nstate; // Number of states in the NFA. +! static int istate; // Index in the state vector, used in alloc_state() + + /* If not NULL match must end at this position */ + static save_se_T *nfa_endp = NULL; + + /* 0 for first call to nfa_regmatch(), 1 for recursive call. */ + static int nfa_ll_index = 0; + +*************** +*** 326,333 **** + return FAIL; + post_ptr = post_start; + post_end = post_start + nstate_max; +! nfa_has_zend = FALSE; +! nfa_has_backref = FALSE; + + /* shared with BT engine */ + regcomp_start(expr, re_flags); +--- 302,309 ---- + return FAIL; + post_ptr = post_start; + post_end = post_start + nstate_max; +! rex.nfa_has_zend = FALSE; +! rex.nfa_has_backref = FALSE; + + /* shared with BT engine */ + regcomp_start(expr, re_flags); +*************** +*** 1422,1428 **** + if (!seen_endbrace(refnum + 1)) + return FAIL; + EMIT(NFA_BACKREF1 + refnum); +! nfa_has_backref = TRUE; + } + break; + +--- 1398,1404 ---- + if (!seen_endbrace(refnum + 1)) + return FAIL; + EMIT(NFA_BACKREF1 + refnum); +! rex.nfa_has_backref = TRUE; + } + break; + +*************** +*** 1437,1443 **** + break; + case 'e': + EMIT(NFA_ZEND); +! nfa_has_zend = TRUE; + if (re_mult_next("\\ze") == FAIL) + return FAIL; + break; +--- 1413,1419 ---- + break; + case 'e': + EMIT(NFA_ZEND); +! rex.nfa_has_zend = TRUE; + if (re_mult_next("\\ze") == FAIL) + return FAIL; + break; +*************** +*** 1455,1461 **** + if ((reg_do_extmatch & REX_USE) == 0) + EMSG_RET_FAIL(_(e_z1_not_allowed)); + EMIT(NFA_ZREF1 + (no_Magic(c) - '1')); +! /* No need to set nfa_has_backref, the sub-matches don't + * change when \z1 .. \z9 matches or not. */ + re_has_z = REX_USE; + break; +--- 1431,1437 ---- + if ((reg_do_extmatch & REX_USE) == 0) + EMSG_RET_FAIL(_(e_z1_not_allowed)); + EMIT(NFA_ZREF1 + (no_Magic(c) - '1')); +! /* No need to set rex.nfa_has_backref, the sub-matches don't + * change when \z1 .. \z9 matches or not. */ + re_has_z = REX_USE; + break; +*************** +*** 2920,2930 **** + if (df) + { + fprintf(df, "Error popping the stack!\n"); +! #ifdef DEBUG + fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr); +! #endif + fprintf(df, "Postfix form is: "); +! #ifdef DEBUG + for (p2 = postfix; p2 < end; p2++) + { + nfa_set_code(*p2); +--- 2896,2906 ---- + if (df) + { + fprintf(df, "Error popping the stack!\n"); +! # ifdef DEBUG + fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr); +! # endif + fprintf(df, "Postfix form is: "); +! # ifdef DEBUG + for (p2 = postfix; p2 < end; p2++) + { + nfa_set_code(*p2); +*************** +*** 2937,2943 **** + nfa_set_code(*p2); + fprintf(df, "%s, ", code); + } +! #else + for (p2 = postfix; p2 < end; p2++) + { + fprintf(df, "%d, ", *p2); +--- 2913,2919 ---- + nfa_set_code(*p2); + fprintf(df, "%s, ", code); + } +! # else + for (p2 = postfix; p2 < end; p2++) + { + fprintf(df, "%d, ", *p2); +*************** +*** 2947,2953 **** + { + fprintf(df, "%d, ", *p2); + } +! #endif + fprintf(df, "\n--------------------------\n"); + fclose(df); + } +--- 2923,2929 ---- + { + fprintf(df, "%d, ", *p2); + } +! # endif + fprintf(df, "\n--------------------------\n"); + fclose(df); + } +*************** +*** 3887,3893 **** + { + log_subexpr(&subs->norm); + # ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + log_subexpr(&subs->synt); + # endif + } +--- 3863,3869 ---- + { + log_subexpr(&subs->norm); + # ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + log_subexpr(&subs->synt); + # endif + } +*************** +*** 3927,3933 **** + else + { + sprintf(buf, " PIM col %d", REG_MULTI ? (int)pim->end.pos.col +! : (int)(pim->end.ptr - reginput)); + } + return buf; + } +--- 3903,3909 ---- + else + { + sprintf(buf, " PIM col %d", REG_MULTI ? (int)pim->end.pos.col +! : (int)(pim->end.ptr - rex.input)); + } + return buf; + } +*************** +*** 3955,3961 **** + to->state = from->state; + copy_sub(&to->subs.norm, &from->subs.norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub(&to->subs.synt, &from->subs.synt); + #endif + to->end = from->end; +--- 3931,3937 ---- + to->state = from->state; + copy_sub(&to->subs.norm, &from->subs.norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub(&to->subs.synt, &from->subs.synt); + #endif + to->end = from->end; +*************** +*** 3967,3975 **** + if (REG_MULTI) + /* Use 0xff to set lnum to -1 */ + vim_memset(sub->list.multi, 0xff, +! sizeof(struct multipos) * nfa_nsubexpr); + else +! vim_memset(sub->list.line, 0, sizeof(struct linepos) * nfa_nsubexpr); + sub->in_use = 0; + } + +--- 3943,3952 ---- + if (REG_MULTI) + /* Use 0xff to set lnum to -1 */ + vim_memset(sub->list.multi, 0xff, +! sizeof(struct multipos) * rex.nfa_nsubexpr); + else +! vim_memset(sub->list.line, 0, +! sizeof(struct linepos) * rex.nfa_nsubexpr); + sub->in_use = 0; + } + +*************** +*** 4022,4028 **** + static void + copy_ze_off(regsub_T *to, regsub_T *from) + { +! if (nfa_has_zend) + { + if (REG_MULTI) + { +--- 3999,4005 ---- + static void + copy_ze_off(regsub_T *to, regsub_T *from) + { +! if (rex.nfa_has_zend) + { + if (REG_MULTI) + { +*************** +*** 4073,4079 **** + != sub2->list.multi[i].start_col) + return FALSE; + +! if (nfa_has_backref) + { + if (i < sub1->in_use) + s1 = sub1->list.multi[i].end_lnum; +--- 4050,4056 ---- + != sub2->list.multi[i].start_col) + return FALSE; + +! if (rex.nfa_has_backref) + { + if (i < sub1->in_use) + s1 = sub1->list.multi[i].end_lnum; +*************** +*** 4105,4111 **** + sp2 = NULL; + if (sp1 != sp2) + return FALSE; +! if (nfa_has_backref) + { + if (i < sub1->in_use) + sp1 = sub1->list.line[i].end; +--- 4082,4088 ---- + sp2 = NULL; + if (sp1 != sp2) + return FALSE; +! if (rex.nfa_has_backref) + { + if (i < sub1->in_use) + sp1 = sub1->list.line[i].end; +*************** +*** 4139,4145 **** + else if (REG_MULTI) + col = sub->list.multi[0].start_col; + else +! col = (int)(sub->list.line[0].start - regline); + nfa_set_code(state->c); + fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)%s\n", + action, abs(state->id), lid, state->c, code, col, +--- 4116,4122 ---- + else if (REG_MULTI) + col = sub->list.multi[0].start_col; + else +! col = (int)(sub->list.line[0].start - rex.line); + nfa_set_code(state->c); + fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)%s\n", + action, abs(state->id), lid, state->c, code, col, +*************** +*** 4167,4173 **** + if (thread->state->id == state->id + && sub_equal(&thread->subs.norm, &subs->norm) + #ifdef FEAT_SYN_HL +! && (!nfa_has_zsubexpr + || sub_equal(&thread->subs.synt, &subs->synt)) + #endif + && pim_equal(&thread->pim, pim)) +--- 4144,4150 ---- + if (thread->state->id == state->id + && sub_equal(&thread->subs.norm, &subs->norm) + #ifdef FEAT_SYN_HL +! && (!rex.nfa_has_zsubexpr + || sub_equal(&thread->subs.synt, &subs->synt)) + #endif + && pim_equal(&thread->pim, pim)) +*************** +*** 4306,4312 **** + { + if (state->lastlist[nfa_ll_index] == l->id) + { +! if (!nfa_has_backref || has_state_with_pos(l, state, subs, NULL)) + return TRUE; + } + return FALSE; +--- 4283,4289 ---- + { + if (state->lastlist[nfa_ll_index] == l->id) + { +! if (!rex.nfa_has_backref || has_state_with_pos(l, state, subs, NULL)) + return TRUE; + } + return FALSE; +*************** +*** 4390,4400 **** + /* "^" won't match past end-of-line, don't bother trying. + * Except when at the end of the line, or when we are going to the + * next line for a look-behind match. */ +! if (reginput > regline +! && *reginput != NUL + && (nfa_endp == NULL + || !REG_MULTI +! || reglnum == nfa_endp->se_u.pos.lnum)) + goto skip_add; + /* FALLTHROUGH */ + +--- 4367,4377 ---- + /* "^" won't match past end-of-line, don't bother trying. + * Except when at the end of the line, or when we are going to the + * next line for a look-behind match. */ +! if (rex.input > rex.line +! && *rex.input != NUL + && (nfa_endp == NULL + || !REG_MULTI +! || rex.lnum == nfa_endp->se_u.pos.lnum)) + goto skip_add; + /* FALLTHROUGH */ + +*************** +*** 4432,4438 **** + * unless it is an MOPEN that is used for a backreference or + * when there is a PIM. For NFA_MATCH check the position, + * lower position is preferred. */ +! if (!nfa_has_backref && pim == NULL && !l->has_pim + && state->c != NFA_MATCH) + { + /* When called from addstate_here() do insert before +--- 4409,4415 ---- + * unless it is an MOPEN that is used for a backreference or + * when there is a PIM. For NFA_MATCH check the position, + * lower position is preferred. */ +! if (!rex.nfa_has_backref && pim == NULL && !l->has_pim + && state->c != NFA_MATCH) + { + /* When called from addstate_here() do insert before +*************** +*** 4477,4483 **** + * copy before it becomes invalid. */ + copy_sub(&temp_subs.norm, &subs->norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub(&temp_subs.synt, &subs->synt); + #endif + subs = &temp_subs; +--- 4454,4460 ---- + * copy before it becomes invalid. */ + copy_sub(&temp_subs.norm, &subs->norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub(&temp_subs.synt, &subs->synt); + #endif + subs = &temp_subs; +*************** +*** 4501,4507 **** + } + copy_sub(&thread->subs.norm, &subs->norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub(&thread->subs.synt, &subs->synt); + #endif + #ifdef ENABLE_LOG +--- 4478,4484 ---- + } + copy_sub(&thread->subs.norm, &subs->norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub(&thread->subs.synt, &subs->synt); + #endif + #ifdef ENABLE_LOG +*************** +*** 4597,4610 **** + } + if (off == -1) + { +! sub->list.multi[subidx].start_lnum = reglnum + 1; + sub->list.multi[subidx].start_col = 0; + } + else + { +! sub->list.multi[subidx].start_lnum = reglnum; + sub->list.multi[subidx].start_col = +! (colnr_T)(reginput - regline + off); + } + sub->list.multi[subidx].end_lnum = -1; + } +--- 4574,4587 ---- + } + if (off == -1) + { +! sub->list.multi[subidx].start_lnum = rex.lnum + 1; + sub->list.multi[subidx].start_col = 0; + } + else + { +! sub->list.multi[subidx].start_lnum = rex.lnum; + sub->list.multi[subidx].start_col = +! (colnr_T)(rex.input - rex.line + off); + } + sub->list.multi[subidx].end_lnum = -1; + } +*************** +*** 4625,4631 **** + } + sub->in_use = subidx + 1; + } +! sub->list.line[subidx].start = reginput + off; + } + + subs = addstate(l, state->out, subs, pim, off_arg); +--- 4602,4608 ---- + } + sub->in_use = subidx + 1; + } +! sub->list.line[subidx].start = rex.input + off; + } + + subs = addstate(l, state->out, subs, pim, off_arg); +*************** +*** 4649,4655 **** + break; + + case NFA_MCLOSE: +! if (nfa_has_zend && (REG_MULTI + ? subs->norm.list.multi[0].end_lnum >= 0 + : subs->norm.list.line[0].end != NULL)) + { +--- 4626,4632 ---- + break; + + case NFA_MCLOSE: +! if (rex.nfa_has_zend && (REG_MULTI + ? subs->norm.list.multi[0].end_lnum >= 0 + : subs->norm.list.line[0].end != NULL)) + { +*************** +*** 4708,4721 **** + save_multipos = sub->list.multi[subidx]; + if (off == -1) + { +! sub->list.multi[subidx].end_lnum = reglnum + 1; + sub->list.multi[subidx].end_col = 0; + } + else + { +! sub->list.multi[subidx].end_lnum = reglnum; + sub->list.multi[subidx].end_col = +! (colnr_T)(reginput - regline + off); + } + /* avoid compiler warnings */ + save_ptr = NULL; +--- 4685,4698 ---- + save_multipos = sub->list.multi[subidx]; + if (off == -1) + { +! sub->list.multi[subidx].end_lnum = rex.lnum + 1; + sub->list.multi[subidx].end_col = 0; + } + else + { +! sub->list.multi[subidx].end_lnum = rex.lnum; + sub->list.multi[subidx].end_col = +! (colnr_T)(rex.input - rex.line + off); + } + /* avoid compiler warnings */ + save_ptr = NULL; +*************** +*** 4723,4729 **** + else + { + save_ptr = sub->list.line[subidx].end; +! sub->list.line[subidx].end = reginput + off; + /* avoid compiler warnings */ + vim_memset(&save_multipos, 0, sizeof(save_multipos)); + } +--- 4700,4706 ---- + else + { + save_ptr = sub->list.line[subidx].end; +! sub->list.line[subidx].end = rex.input + off; + /* avoid compiler warnings */ + vim_memset(&save_multipos, 0, sizeof(save_multipos)); + } +*************** +*** 4929,4941 **** + if (sub->list.multi[subidx].start_lnum < 0 + || sub->list.multi[subidx].end_lnum < 0) + goto retempty; +! if (sub->list.multi[subidx].start_lnum == reglnum +! && sub->list.multi[subidx].end_lnum == reglnum) + { + len = sub->list.multi[subidx].end_col + - sub->list.multi[subidx].start_col; +! if (cstrncmp(regline + sub->list.multi[subidx].start_col, +! reginput, &len) == 0) + { + *bytelen = len; + return TRUE; +--- 4906,4918 ---- + if (sub->list.multi[subidx].start_lnum < 0 + || sub->list.multi[subidx].end_lnum < 0) + goto retempty; +! if (sub->list.multi[subidx].start_lnum == rex.lnum +! && sub->list.multi[subidx].end_lnum == rex.lnum) + { + len = sub->list.multi[subidx].end_col + - sub->list.multi[subidx].start_col; +! if (cstrncmp(rex.line + sub->list.multi[subidx].start_col, +! rex.input, &len) == 0) + { + *bytelen = len; + return TRUE; +*************** +*** 4958,4964 **** + || sub->list.line[subidx].end == NULL) + goto retempty; + len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start); +! if (cstrncmp(sub->list.line[subidx].start, reginput, &len) == 0) + { + *bytelen = len; + return TRUE; +--- 4935,4941 ---- + || sub->list.line[subidx].end == NULL) + goto retempty; + len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start); +! if (cstrncmp(sub->list.line[subidx].start, rex.input, &len) == 0) + { + *bytelen = len; + return TRUE; +*************** +*** 4989,4995 **** + } + + len = (int)STRLEN(re_extmatch_in->matches[subidx]); +! if (cstrncmp(re_extmatch_in->matches[subidx], reginput, &len) == 0) + { + *bytelen = len; + return TRUE; +--- 4966,4972 ---- + } + + len = (int)STRLEN(re_extmatch_in->matches[subidx]); +! if (cstrncmp(re_extmatch_in->matches[subidx], rex.input, &len) == 0) + { + *bytelen = len; + return TRUE; +*************** +*** 5061,5070 **** + int **listids, + int *listids_len) + { +! int save_reginput_col = (int)(reginput - regline); +! int save_reglnum = reglnum; + int save_nfa_match = nfa_match; +! int save_nfa_listid = nfa_listid; + save_se_T *save_nfa_endp = nfa_endp; + save_se_T endpos; + save_se_T *endposp = NULL; +--- 5038,5047 ---- + int **listids, + int *listids_len) + { +! int save_reginput_col = (int)(rex.input - rex.line); +! int save_reglnum = rex.lnum; + int save_nfa_match = nfa_match; +! int save_nfa_listid = rex.nfa_listid; + save_se_T *save_nfa_endp = nfa_endp; + save_se_T endpos; + save_se_T *endposp = NULL; +*************** +*** 5075,5083 **** + { + /* start at the position where the postponed match was */ + if (REG_MULTI) +! reginput = regline + pim->end.pos.col; + else +! reginput = pim->end.ptr; + } + + if (state->c == NFA_START_INVISIBLE_BEFORE +--- 5052,5060 ---- + { + /* start at the position where the postponed match was */ + if (REG_MULTI) +! rex.input = rex.line + pim->end.pos.col; + else +! rex.input = pim->end.ptr; + } + + if (state->c == NFA_START_INVISIBLE_BEFORE +*************** +*** 5092,5099 **** + { + if (pim == NULL) + { +! endpos.se_u.pos.col = (int)(reginput - regline); +! endpos.se_u.pos.lnum = reglnum; + } + else + endpos.se_u.pos = pim->end.pos; +--- 5069,5076 ---- + { + if (pim == NULL) + { +! endpos.se_u.pos.col = (int)(rex.input - rex.line); +! endpos.se_u.pos.lnum = rex.lnum; + } + else + endpos.se_u.pos = pim->end.pos; +*************** +*** 5101,5107 **** + else + { + if (pim == NULL) +! endpos.se_u.ptr = reginput; + else + endpos.se_u.ptr = pim->end.ptr; + } +--- 5078,5084 ---- + else + { + if (pim == NULL) +! endpos.se_u.ptr = rex.input; + else + endpos.se_u.ptr = pim->end.ptr; + } +*************** +*** 5114,5152 **** + { + if (REG_MULTI) + { +! regline = reg_getline(--reglnum); +! if (regline == NULL) + /* can't go before the first line */ +! regline = reg_getline(++reglnum); + } +! reginput = regline; + } + else + { +! if (REG_MULTI && (int)(reginput - regline) < state->val) + { + /* Not enough bytes in this line, go to end of + * previous line. */ +! regline = reg_getline(--reglnum); +! if (regline == NULL) + { + /* can't go before the first line */ +! regline = reg_getline(++reglnum); +! reginput = regline; + } + else +! reginput = regline + STRLEN(regline); + } +! if ((int)(reginput - regline) >= state->val) + { +! reginput -= state->val; + #ifdef FEAT_MBYTE + if (has_mbyte) +! reginput -= mb_head_off(regline, reginput); + #endif + } + else +! reginput = regline; + } + } + +--- 5091,5129 ---- + { + if (REG_MULTI) + { +! rex.line = reg_getline(--rex.lnum); +! if (rex.line == NULL) + /* can't go before the first line */ +! rex.line = reg_getline(++rex.lnum); + } +! rex.input = rex.line; + } + else + { +! if (REG_MULTI && (int)(rex.input - rex.line) < state->val) + { + /* Not enough bytes in this line, go to end of + * previous line. */ +! rex.line = reg_getline(--rex.lnum); +! if (rex.line == NULL) + { + /* can't go before the first line */ +! rex.line = reg_getline(++rex.lnum); +! rex.input = rex.line; + } + else +! rex.input = rex.line + STRLEN(rex.line); + } +! if ((int)(rex.input - rex.line) >= state->val) + { +! rex.input -= state->val; + #ifdef FEAT_MBYTE + if (has_mbyte) +! rex.input -= mb_head_off(rex.line, rex.input); + #endif + } + else +! rex.input = rex.line; + } + } + +*************** +*** 5161,5189 **** + { + /* Already calling nfa_regmatch() recursively. Save the lastlist[1] + * values and clear them. */ +! if (*listids == NULL || *listids_len < nstate) + { + vim_free(*listids); +! *listids = (int *)lalloc(sizeof(int) * nstate, TRUE); + if (*listids == NULL) + { + EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!")); + return 0; + } +! *listids_len = nstate; + } + nfa_save_listids(prog, *listids); + need_restore = TRUE; +! /* any value of nfa_listid will do */ + } + else + { + /* First recursive nfa_regmatch() call, switch to the second lastlist +! * entry. Make sure nfa_listid is different from a previous recursive +! * call, because some states may still have this ID. */ + ++nfa_ll_index; +! if (nfa_listid <= nfa_alt_listid) +! nfa_listid = nfa_alt_listid; + } + + /* Call nfa_regmatch() to check if the current concat matches at this +--- 5138,5166 ---- + { + /* Already calling nfa_regmatch() recursively. Save the lastlist[1] + * values and clear them. */ +! if (*listids == NULL || *listids_len < prog->nstate) + { + vim_free(*listids); +! *listids = (int *)lalloc(sizeof(int) * prog->nstate, TRUE); + if (*listids == NULL) + { + EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!")); + return 0; + } +! *listids_len = prog->nstate; + } + nfa_save_listids(prog, *listids); + need_restore = TRUE; +! /* any value of rex.nfa_listid will do */ + } + else + { + /* First recursive nfa_regmatch() call, switch to the second lastlist +! * entry. Make sure rex.nfa_listid is different from a previous +! * recursive call, because some states may still have this ID. */ + ++nfa_ll_index; +! if (rex.nfa_listid <= rex.nfa_alt_listid) +! rex.nfa_listid = rex.nfa_alt_listid; + } + + /* Call nfa_regmatch() to check if the current concat matches at this +*************** +*** 5196,5213 **** + else + { + --nfa_ll_index; +! nfa_alt_listid = nfa_listid; + } + + /* restore position in input text */ +! reglnum = save_reglnum; + if (REG_MULTI) +! regline = reg_getline(reglnum); +! reginput = regline + save_reginput_col; + if (result != NFA_TOO_EXPENSIVE) + { + nfa_match = save_nfa_match; +! nfa_listid = save_nfa_listid; + } + nfa_endp = save_nfa_endp; + +--- 5173,5190 ---- + else + { + --nfa_ll_index; +! rex.nfa_alt_listid = rex.nfa_listid; + } + + /* restore position in input text */ +! rex.lnum = save_reglnum; + if (REG_MULTI) +! rex.line = reg_getline(rex.lnum); +! rex.input = rex.line + save_reginput_col; + if (result != NFA_TOO_EXPENSIVE) + { + nfa_match = save_nfa_match; +! rex.nfa_listid = save_nfa_listid; + } + nfa_endp = save_nfa_endp; + +*************** +*** 5407,5418 **** + && !has_mbyte + #endif + ) +! s = vim_strbyte(regline + *colp, c); + else +! s = cstrchr(regline + *colp, c); + if (s == NULL) + return FAIL; +! *colp = (int)(s - regline); + return OK; + } + +--- 5384,5395 ---- + && !has_mbyte + #endif + ) +! s = vim_strbyte(rex.line + *colp, c); + else +! s = cstrchr(rex.line + *colp, c); + if (s == NULL) + return FAIL; +! *colp = (int)(s - rex.line); + return OK; + } + +*************** +*** 5436,5442 **** + for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1)) + { + c1 = PTR2CHAR(match_text + len1); +! c2 = PTR2CHAR(regline + col + len2); + if (c1 != c2 && (!rex.reg_ic || MB_TOLOWER(c1) != MB_TOLOWER(c2))) + { + match = FALSE; +--- 5413,5419 ---- + for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1)) + { + c1 = PTR2CHAR(match_text + len1); +! c2 = PTR2CHAR(rex.line + col + len2); + if (c1 != c2 && (!rex.reg_ic || MB_TOLOWER(c1) != MB_TOLOWER(c2))) + { + match = FALSE; +*************** +*** 5448,5469 **** + #ifdef FEAT_MBYTE + /* check that no composing char follows */ + && !(enc_utf8 +! && utf_iscomposing(PTR2CHAR(regline + col + len2))) + #endif + ) + { + cleanup_subexpr(); + if (REG_MULTI) + { +! rex.reg_startpos[0].lnum = reglnum; + rex.reg_startpos[0].col = col; +! rex.reg_endpos[0].lnum = reglnum; + rex.reg_endpos[0].col = col + len2; + } + else + { +! rex.reg_startp[0] = regline + col; +! rex.reg_endp[0] = regline + col + len2; + } + return 1L; + } +--- 5425,5446 ---- + #ifdef FEAT_MBYTE + /* check that no composing char follows */ + && !(enc_utf8 +! && utf_iscomposing(PTR2CHAR(rex.line + col + len2))) + #endif + ) + { + cleanup_subexpr(); + if (REG_MULTI) + { +! rex.reg_startpos[0].lnum = rex.lnum; + rex.reg_startpos[0].col = col; +! rex.reg_endpos[0].lnum = rex.lnum; + rex.reg_endpos[0].col = col + len2; + } + else + { +! rex.reg_startp[0] = rex.line + col; +! rex.reg_endp[0] = rex.line + col + len2; + } + return 1L; + } +*************** +*** 5493,5499 **** + /* + * Main matching routine. + * +! * Run NFA to determine whether it matches reginput. + * + * When "nfa_endp" is not NULL it is a required end-of-match position. + * +--- 5470,5476 ---- + /* + * Main matching routine. + * +! * Run NFA to determine whether it matches rex.input. + * + * When "nfa_endp" is not NULL it is a required end-of-match position. + * +*************** +*** 5549,5560 **** + nfa_match = FALSE; + + /* Allocate memory for the lists of nodes. */ +! size = (nstate + 1) * sizeof(nfa_thread_T); + + list[0].t = (nfa_thread_T *)lalloc(size, TRUE); +! list[0].len = nstate + 1; + list[1].t = (nfa_thread_T *)lalloc(size, TRUE); +! list[1].len = nstate + 1; + if (list[0].t == NULL || list[1].t == NULL) + goto theend; + +--- 5526,5537 ---- + nfa_match = FALSE; + + /* Allocate memory for the lists of nodes. */ +! size = (prog->nstate + 1) * sizeof(nfa_thread_T); + + list[0].t = (nfa_thread_T *)lalloc(size, TRUE); +! list[0].len = prog->nstate + 1; + list[1].t = (nfa_thread_T *)lalloc(size, TRUE); +! list[1].len = prog->nstate + 1; + if (list[0].t == NULL || list[1].t == NULL) + goto theend; + +*************** +*** 5584,5590 **** + #ifdef ENABLE_LOG + fprintf(log_fd, "(---) STARTSTATE first\n"); + #endif +! thislist->id = nfa_listid + 1; + + /* Inline optimized code for addstate(thislist, start, m, 0) if we know + * it's the first MOPEN. */ +--- 5561,5567 ---- + #ifdef ENABLE_LOG + fprintf(log_fd, "(---) STARTSTATE first\n"); + #endif +! thislist->id = rex.nfa_listid + 1; + + /* Inline optimized code for addstate(thislist, start, m, 0) if we know + * it's the first MOPEN. */ +*************** +*** 5592,5602 **** + { + if (REG_MULTI) + { +! m->norm.list.multi[0].start_lnum = reglnum; +! m->norm.list.multi[0].start_col = (colnr_T)(reginput - regline); + } + else +! m->norm.list.line[0].start = reginput; + m->norm.in_use = 1; + addstate(thislist, start->out, m, NULL, 0); + } +--- 5569,5579 ---- + { + if (REG_MULTI) + { +! m->norm.list.multi[0].start_lnum = rex.lnum; +! m->norm.list.multi[0].start_col = (colnr_T)(rex.input - rex.line); + } + else +! m->norm.list.line[0].start = rex.input; + m->norm.in_use = 1; + addstate(thislist, start->out, m, NULL, 0); + } +*************** +*** 5620,5632 **** + #ifdef FEAT_MBYTE + if (has_mbyte) + { +! curc = (*mb_ptr2char)(reginput); +! clen = (*mb_ptr2len)(reginput); + } + else + #endif + { +! curc = *reginput; + clen = 1; + } + if (curc == NUL) +--- 5597,5609 ---- + #ifdef FEAT_MBYTE + if (has_mbyte) + { +! curc = (*mb_ptr2char)(rex.input); +! clen = (*mb_ptr2len)(rex.input); + } + else + #endif + { +! curc = *rex.input; + clen = 1; + } + if (curc == NUL) +*************** +*** 5640,5648 **** + nextlist = &list[flag ^= 1]; + nextlist->n = 0; /* clear nextlist */ + nextlist->has_pim = FALSE; +! ++nfa_listid; + if (prog->re_engine == AUTOMATIC_ENGINE +! && (nfa_listid >= NFA_MAX_STATES + # ifdef FEAT_EVAL + || nfa_fail_for_testing + # endif +--- 5617,5625 ---- + nextlist = &list[flag ^= 1]; + nextlist->n = 0; /* clear nextlist */ + nextlist->has_pim = FALSE; +! ++rex.nfa_listid; + if (prog->re_engine == AUTOMATIC_ENGINE +! && (rex.nfa_listid >= NFA_MAX_STATES + # ifdef FEAT_EVAL + || nfa_fail_for_testing + # endif +*************** +*** 5653,5664 **** + goto theend; + } + +! thislist->id = nfa_listid; +! nextlist->id = nfa_listid + 1; + + #ifdef ENABLE_LOG + fprintf(log_fd, "------------------------------------------\n"); +! fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput); + fprintf(log_fd, ">>> Advanced one character... Current char is %c (code %d) \n", curc, (int)curc); + fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n); + { +--- 5630,5641 ---- + goto theend; + } + +! thislist->id = rex.nfa_listid; +! nextlist->id = rex.nfa_listid + 1; + + #ifdef ENABLE_LOG + fprintf(log_fd, "------------------------------------------\n"); +! fprintf(log_fd, ">>> Reginput is \"%s\"\n", rex.input); + fprintf(log_fd, ">>> Advanced one character... Current char is %c (code %d) \n", curc, (int)curc); + fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n); + { +*************** +*** 5710,5716 **** + else if (REG_MULTI) + col = t->subs.norm.list.multi[0].start_col; + else +! col = (int)(t->subs.norm.list.line[0].start - regline); + nfa_set_code(t->state->c); + fprintf(log_fd, "(%d) char %d %s (start col %d)%s... \n", + abs(t->state->id), (int)t->state->c, code, col, +--- 5687,5693 ---- + else if (REG_MULTI) + col = t->subs.norm.list.multi[0].start_col; + else +! col = (int)(t->subs.norm.list.line[0].start - rex.line); + nfa_set_code(t->state->c); + fprintf(log_fd, "(%d) char %d %s (start col %d)%s... \n", + abs(t->state->id), (int)t->state->c, code, col, +*************** +*** 5738,5744 **** + nfa_match = TRUE; + copy_sub(&submatch->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub(&submatch->synt, &t->subs.synt); + #endif + #ifdef ENABLE_LOG +--- 5715,5721 ---- + nfa_match = TRUE; + copy_sub(&submatch->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub(&submatch->synt, &t->subs.synt); + #endif + #ifdef ENABLE_LOG +*************** +*** 5746,5752 **** + #endif + /* Found the left-most longest match, do not look at any other + * states at this position. When the list of states is going +! * to be empty quit without advancing, so that "reginput" is + * correct. */ + if (nextlist->n == 0) + clen = 0; +--- 5723,5729 ---- + #endif + /* Found the left-most longest match, do not look at any other + * states at this position. When the list of states is going +! * to be empty quit without advancing, so that "rex.input" is + * correct. */ + if (nextlist->n == 0) + clen = 0; +*************** +*** 5772,5794 **** + { + if (REG_MULTI) + fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n", +! (int)reglnum, + (int)nfa_endp->se_u.pos.lnum, +! (int)(reginput - regline), + nfa_endp->se_u.pos.col); + else + fprintf(log_fd, "Current col: %d, endp col: %d\n", +! (int)(reginput - regline), +! (int)(nfa_endp->se_u.ptr - reginput)); + } + #endif + /* If "nfa_endp" is set it's only a match if it ends at + * "nfa_endp" */ + if (nfa_endp != NULL && (REG_MULTI +! ? (reglnum != nfa_endp->se_u.pos.lnum +! || (int)(reginput - regline) + != nfa_endp->se_u.pos.col) +! : reginput != nfa_endp->se_u.ptr)) + break; + + /* do not set submatches for \@! */ +--- 5749,5771 ---- + { + if (REG_MULTI) + fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n", +! (int)rex.lnum, + (int)nfa_endp->se_u.pos.lnum, +! (int)(rex.input - rex.line), + nfa_endp->se_u.pos.col); + else + fprintf(log_fd, "Current col: %d, endp col: %d\n", +! (int)(rex.input - rex.line), +! (int)(nfa_endp->se_u.ptr - rex.input)); + } + #endif + /* If "nfa_endp" is set it's only a match if it ends at + * "nfa_endp" */ + if (nfa_endp != NULL && (REG_MULTI +! ? (rex.lnum != nfa_endp->se_u.pos.lnum +! || (int)(rex.input - rex.line) + != nfa_endp->se_u.pos.col) +! : rex.input != nfa_endp->se_u.ptr)) + break; + + /* do not set submatches for \@! */ +*************** +*** 5796,5802 **** + { + copy_sub(&m->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub(&m->synt, &t->subs.synt); + #endif + } +--- 5773,5779 ---- + { + copy_sub(&m->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub(&m->synt, &t->subs.synt); + #endif + } +*************** +*** 5838,5844 **** + * of what happens on success below. */ + copy_sub_off(&m->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub_off(&m->synt, &t->subs.synt); + #endif + +--- 5815,5821 ---- + * of what happens on success below. */ + copy_sub_off(&m->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub_off(&m->synt, &t->subs.synt); + #endif + +*************** +*** 5866,5872 **** + /* Copy submatch info from the recursive call */ + copy_sub_off(&t->subs.norm, &m->norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub_off(&t->subs.synt, &m->synt); + #endif + /* If the pattern has \ze and it matched in the +--- 5843,5849 ---- + /* Copy submatch info from the recursive call */ + copy_sub_off(&t->subs.norm, &m->norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub_off(&t->subs.synt, &m->synt); + #endif + /* If the pattern has \ze and it matched in the +*************** +*** 5899,5909 **** + #endif + if (REG_MULTI) + { +! pim.end.pos.col = (int)(reginput - regline); +! pim.end.pos.lnum = reglnum; + } + else +! pim.end.ptr = reginput; + + /* t->state->out1 is the corresponding END_INVISIBLE + * node; Add its out to the current list (zero-width +--- 5876,5886 ---- + #endif + if (REG_MULTI) + { +! pim.end.pos.col = (int)(rex.input - rex.line); +! pim.end.pos.lnum = rex.lnum; + } + else +! pim.end.ptr = rex.input; + + /* t->state->out1 is the corresponding END_INVISIBLE + * node; Add its out to the current list (zero-width +*************** +*** 5959,5965 **** + * happens afterwards. */ + copy_sub_off(&m->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub_off(&m->synt, &t->subs.synt); + #endif + +--- 5936,5942 ---- + * happens afterwards. */ + copy_sub_off(&m->norm, &t->subs.norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub_off(&m->synt, &t->subs.synt); + #endif + +*************** +*** 5982,5988 **** + /* Copy submatch info from the recursive call */ + copy_sub_off(&t->subs.norm, &m->norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub_off(&t->subs.synt, &m->synt); + #endif + /* Now we need to skip over the matched text and then +--- 5959,5965 ---- + /* Copy submatch info from the recursive call */ + copy_sub_off(&t->subs.norm, &m->norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub_off(&t->subs.synt, &m->synt); + #endif + /* Now we need to skip over the matched text and then +*************** +*** 5990,5998 **** + if (REG_MULTI) + /* TODO: multi-line match */ + bytelen = m->norm.list.multi[0].end_col +! - (int)(reginput - regline); + else +! bytelen = (int)(m->norm.list.line[0].end - reginput); + + #ifdef ENABLE_LOG + fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen); +--- 5967,5975 ---- + if (REG_MULTI) + /* TODO: multi-line match */ + bytelen = m->norm.list.multi[0].end_col +! - (int)(rex.input - rex.line); + else +! bytelen = (int)(m->norm.list.line[0].end - rex.input); + + #ifdef ENABLE_LOG + fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen); +*************** +*** 6025,6031 **** + } + + case NFA_BOL: +! if (reginput == regline) + { + add_here = TRUE; + add_state = t->state->out; +--- 6002,6008 ---- + } + + case NFA_BOL: +! if (rex.input == rex.line) + { + add_here = TRUE; + add_state = t->state->out; +*************** +*** 6051,6057 **** + int this_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(reginput, rex.reg_buf); + if (this_class <= 1) + result = FALSE; + else if (reg_prev_class() == this_class) +--- 6028,6034 ---- + int this_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(rex.input, rex.reg_buf); + if (this_class <= 1) + result = FALSE; + else if (reg_prev_class() == this_class) +*************** +*** 6059,6066 **** + } + #endif + else if (!vim_iswordc_buf(curc, rex.reg_buf) +! || (reginput > regline +! && vim_iswordc_buf(reginput[-1], rex.reg_buf))) + result = FALSE; + if (result) + { +--- 6036,6043 ---- + } + #endif + else if (!vim_iswordc_buf(curc, rex.reg_buf) +! || (rex.input > rex.line +! && vim_iswordc_buf(rex.input[-1], rex.reg_buf))) + result = FALSE; + if (result) + { +*************** +*** 6071,6077 **** + + case NFA_EOW: + result = TRUE; +! if (reginput == regline) + result = FALSE; + #ifdef FEAT_MBYTE + else if (has_mbyte) +--- 6048,6054 ---- + + case NFA_EOW: + result = TRUE; +! if (rex.input == rex.line) + result = FALSE; + #ifdef FEAT_MBYTE + else if (has_mbyte) +*************** +*** 6079,6093 **** + int this_class, prev_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(reginput, rex.reg_buf); + prev_class = reg_prev_class(); + if (this_class == prev_class + || prev_class == 0 || prev_class == 1) + result = FALSE; + } + #endif +! else if (!vim_iswordc_buf(reginput[-1], rex.reg_buf) +! || (reginput[0] != NUL + && vim_iswordc_buf(curc, rex.reg_buf))) + result = FALSE; + if (result) +--- 6056,6070 ---- + int this_class, prev_class; + + /* Get class of current and previous char (if it exists). */ +! this_class = mb_get_class_buf(rex.input, rex.reg_buf); + prev_class = reg_prev_class(); + if (this_class == prev_class + || prev_class == 0 || prev_class == 1) + result = FALSE; + } + #endif +! else if (!vim_iswordc_buf(rex.input[-1], rex.reg_buf) +! || (rex.input[0] != NUL + && vim_iswordc_buf(curc, rex.reg_buf))) + result = FALSE; + if (result) +*************** +*** 6098,6104 **** + break; + + case NFA_BOF: +! if (reglnum == 0 && reginput == regline + && (!REG_MULTI || rex.reg_firstlnum == 1)) + { + add_here = TRUE; +--- 6075,6081 ---- + break; + + case NFA_BOF: +! if (rex.lnum == 0 && rex.input == rex.line + && (!REG_MULTI || rex.reg_firstlnum == 1)) + { + add_here = TRUE; +*************** +*** 6107,6113 **** + break; + + case NFA_EOF: +! if (reglnum == rex.reg_maxline && curc == NUL) + { + add_here = TRUE; + add_state = t->state->out; +--- 6084,6090 ---- + break; + + case NFA_EOF: +! if (rex.lnum == rex.reg_maxline && curc == NUL) + { + add_here = TRUE; + add_state = t->state->out; +*************** +*** 6159,6165 **** + * Get them into cchars[] first. */ + while (len < clen) + { +! mc = mb_ptr2char(reginput + len); + cchars[ccount++] = mc; + len += mb_char2len(mc); + if (ccount == MAX_MCO) +--- 6136,6142 ---- + * Get them into cchars[] first. */ + while (len < clen) + { +! mc = mb_ptr2char(rex.input + len); + cchars[ccount++] = mc; + len += mb_char2len(mc); + if (ccount == MAX_MCO) +*************** +*** 6194,6200 **** + + case NFA_NEWL: + if (curc == NUL && !rex.reg_line_lbr && REG_MULTI +! && reglnum <= rex.reg_maxline) + { + go_to_nextline = TRUE; + /* Pass -1 for the offset, which means taking the position +--- 6171,6177 ---- + + case NFA_NEWL: + if (curc == NUL && !rex.reg_line_lbr && REG_MULTI +! && rex.lnum <= rex.reg_maxline) + { + go_to_nextline = TRUE; + /* Pass -1 for the offset, which means taking the position +*************** +*** 6323,6335 **** + break; + + case NFA_KWORD: /* \k */ +! result = vim_iswordp_buf(reginput, rex.reg_buf); + ADD_STATE_IF_MATCH(t->state); + break; + + case NFA_SKWORD: /* \K */ + result = !VIM_ISDIGIT(curc) +! && vim_iswordp_buf(reginput, rex.reg_buf); + ADD_STATE_IF_MATCH(t->state); + break; + +--- 6300,6312 ---- + break; + + case NFA_KWORD: /* \k */ +! result = vim_iswordp_buf(rex.input, rex.reg_buf); + ADD_STATE_IF_MATCH(t->state); + break; + + case NFA_SKWORD: /* \K */ + result = !VIM_ISDIGIT(curc) +! && vim_iswordp_buf(rex.input, rex.reg_buf); + ADD_STATE_IF_MATCH(t->state); + break; + +*************** +*** 6344,6355 **** + break; + + case NFA_PRINT: /* \p */ +! result = vim_isprintc(PTR2CHAR(reginput)); + ADD_STATE_IF_MATCH(t->state); + break; + + case NFA_SPRINT: /* \P */ +! result = !VIM_ISDIGIT(curc) && vim_isprintc(PTR2CHAR(reginput)); + ADD_STATE_IF_MATCH(t->state); + break; + +--- 6321,6332 ---- + break; + + case NFA_PRINT: /* \p */ +! result = vim_isprintc(PTR2CHAR(rex.input)); + ADD_STATE_IF_MATCH(t->state); + break; + + case NFA_SPRINT: /* \P */ +! result = !VIM_ISDIGIT(curc) && vim_isprintc(PTR2CHAR(rex.input)); + ADD_STATE_IF_MATCH(t->state); + break; + +*************** +*** 6552,6558 **** + case NFA_LNUM_LT: + result = (REG_MULTI && + nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM, +! (long_u)(reglnum + rex.reg_firstlnum))); + if (result) + { + add_here = TRUE; +--- 6529,6535 ---- + case NFA_LNUM_LT: + result = (REG_MULTI && + nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM, +! (long_u)(rex.lnum + rex.reg_firstlnum))); + if (result) + { + add_here = TRUE; +*************** +*** 6564,6570 **** + case NFA_COL_GT: + case NFA_COL_LT: + result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL, +! (long_u)(reginput - regline) + 1); + if (result) + { + add_here = TRUE; +--- 6541,6547 ---- + case NFA_COL_GT: + case NFA_COL_LT: + result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL, +! (long_u)(rex.input - rex.line) + 1); + if (result) + { + add_here = TRUE; +*************** +*** 6577,6583 **** + case NFA_VCOL_LT: + { + int op = t->state->c - NFA_VCOL; +! colnr_T col = (colnr_T)(reginput - regline); + win_T *wp = rex.reg_win == NULL ? curwin : rex.reg_win; + + /* Bail out quickly when there can't be a match, avoid the +--- 6554,6560 ---- + case NFA_VCOL_LT: + { + int op = t->state->c - NFA_VCOL; +! colnr_T col = (colnr_T)(rex.input - rex.line); + win_T *wp = rex.reg_win == NULL ? curwin : rex.reg_win; + + /* Bail out quickly when there can't be a match, avoid the +*************** +*** 6601,6607 **** + } + if (!result) + result = nfa_re_num_cmp(t->state->val, op, +! (long_u)win_linetabsize(wp, regline, col) + 1); + if (result) + { + add_here = TRUE; +--- 6578,6584 ---- + } + if (!result) + result = nfa_re_num_cmp(t->state->val, op, +! (long_u)win_linetabsize(wp, rex.line, col) + 1); + if (result) + { + add_here = TRUE; +*************** +*** 6619,6631 **** + /* Compare the mark position to the match position. */ + result = (pos != NULL /* mark doesn't exist */ + && pos->lnum > 0 /* mark isn't set in reg_buf */ +! && (pos->lnum == reglnum + rex.reg_firstlnum +! ? (pos->col == (colnr_T)(reginput - regline) + ? t->state->c == NFA_MARK +! : (pos->col < (colnr_T)(reginput - regline) + ? t->state->c == NFA_MARK_GT + : t->state->c == NFA_MARK_LT)) +! : (pos->lnum < reglnum + rex.reg_firstlnum + ? t->state->c == NFA_MARK_GT + : t->state->c == NFA_MARK_LT))); + if (result) +--- 6596,6608 ---- + /* Compare the mark position to the match position. */ + result = (pos != NULL /* mark doesn't exist */ + && pos->lnum > 0 /* mark isn't set in reg_buf */ +! && (pos->lnum == rex.lnum + rex.reg_firstlnum +! ? (pos->col == (colnr_T)(rex.input - rex.line) + ? t->state->c == NFA_MARK +! : (pos->col < (colnr_T)(rex.input - rex.line) + ? t->state->c == NFA_MARK_GT + : t->state->c == NFA_MARK_LT)) +! : (pos->lnum < rex.lnum + rex.reg_firstlnum + ? t->state->c == NFA_MARK_GT + : t->state->c == NFA_MARK_LT))); + if (result) +*************** +*** 6638,6646 **** + + case NFA_CURSOR: + result = (rex.reg_win != NULL +! && (reglnum + rex.reg_firstlnum + == rex.reg_win->w_cursor.lnum) +! && ((colnr_T)(reginput - regline) + == rex.reg_win->w_cursor.col)); + if (result) + { +--- 6615,6623 ---- + + case NFA_CURSOR: + result = (rex.reg_win != NULL +! && (rex.lnum + rex.reg_firstlnum + == rex.reg_win->w_cursor.lnum) +! && ((colnr_T)(rex.input - rex.line) + == rex.reg_win->w_cursor.col)); + if (result) + { +*************** +*** 6701,6707 **** + /* If rex.reg_icombine is not set only skip over the character + * itself. When it is set skip over composing characters. */ + if (result && enc_utf8 && !rex.reg_icombine) +! clen = utf_ptr2len(reginput); + #endif + ADD_STATE_IF_MATCH(t->state); + break; +--- 6678,6684 ---- + /* If rex.reg_icombine is not set only skip over the character + * itself. When it is set skip over composing characters. */ + if (result && enc_utf8 && !rex.reg_icombine) +! clen = utf_ptr2len(rex.input); + #endif + ADD_STATE_IF_MATCH(t->state); + break; +*************** +*** 6746,6752 **** + /* Copy submatch info from the recursive call */ + copy_sub_off(&pim->subs.norm, &m->norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub_off(&pim->subs.synt, &m->synt); + #endif + } +--- 6723,6729 ---- + /* Copy submatch info from the recursive call */ + copy_sub_off(&pim->subs.norm, &m->norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub_off(&pim->subs.synt, &m->synt); + #endif + } +*************** +*** 6773,6779 **** + /* Copy submatch info from the recursive call */ + copy_sub_off(&t->subs.norm, &pim->subs.norm); + #ifdef FEAT_SYN_HL +! if (nfa_has_zsubexpr) + copy_sub_off(&t->subs.synt, &pim->subs.synt); + #endif + } +--- 6750,6756 ---- + /* Copy submatch info from the recursive call */ + copy_sub_off(&t->subs.norm, &pim->subs.norm); + #ifdef FEAT_SYN_HL +! if (rex.nfa_has_zsubexpr) + copy_sub_off(&t->subs.synt, &pim->subs.synt); + #endif + } +*************** +*** 6817,6833 **** + * Also don't start a match past the first line. */ + if (nfa_match == FALSE + && ((toplevel +! && reglnum == 0 + && clen != 0 + && (rex.reg_maxcol == 0 +! || (colnr_T)(reginput - regline) < rex.reg_maxcol)) + || (nfa_endp != NULL + && (REG_MULTI +! ? (reglnum < nfa_endp->se_u.pos.lnum +! || (reglnum == nfa_endp->se_u.pos.lnum +! && (int)(reginput - regline) + < nfa_endp->se_u.pos.col)) +! : reginput < nfa_endp->se_u.ptr)))) + { + #ifdef ENABLE_LOG + fprintf(log_fd, "(---) STARTSTATE\n"); +--- 6794,6810 ---- + * Also don't start a match past the first line. */ + if (nfa_match == FALSE + && ((toplevel +! && rex.lnum == 0 + && clen != 0 + && (rex.reg_maxcol == 0 +! || (colnr_T)(rex.input - rex.line) < rex.reg_maxcol)) + || (nfa_endp != NULL + && (REG_MULTI +! ? (rex.lnum < nfa_endp->se_u.pos.lnum +! || (rex.lnum == nfa_endp->se_u.pos.lnum +! && (int)(rex.input - rex.line) + < nfa_endp->se_u.pos.col)) +! : rex.input < nfa_endp->se_u.ptr)))) + { + #ifdef ENABLE_LOG + fprintf(log_fd, "(---) STARTSTATE\n"); +*************** +*** 6843,6849 **** + { + if (nextlist->n == 0) + { +! colnr_T col = (colnr_T)(reginput - regline) + clen; + + /* Nextlist is empty, we can skip ahead to the + * character that must appear at the start. */ +--- 6820,6826 ---- + { + if (nextlist->n == 0) + { +! colnr_T col = (colnr_T)(rex.input - rex.line) + clen; + + /* Nextlist is empty, we can skip ahead to the + * character that must appear at the start. */ +*************** +*** 6851,6865 **** + break; + #ifdef ENABLE_LOG + fprintf(log_fd, " Skipping ahead %d bytes to regstart\n", +! col - ((colnr_T)(reginput - regline) + clen)); + #endif +! reginput = regline + col - clen; + } + else + { + /* Checking if the required start character matches is + * cheaper than adding a state that won't match. */ +! c = PTR2CHAR(reginput + clen); + if (c != prog->regstart && (!rex.reg_ic + || MB_TOLOWER(c) != MB_TOLOWER(prog->regstart))) + { +--- 6828,6842 ---- + break; + #ifdef ENABLE_LOG + fprintf(log_fd, " Skipping ahead %d bytes to regstart\n", +! col - ((colnr_T)(rex.input - rex.line) + clen)); + #endif +! rex.input = rex.line + col - clen; + } + else + { + /* Checking if the required start character matches is + * cheaper than adding a state that won't match. */ +! c = PTR2CHAR(rex.input + clen); + if (c != prog->regstart && (!rex.reg_ic + || MB_TOLOWER(c) != MB_TOLOWER(prog->regstart))) + { +*************** +*** 6875,6883 **** + { + if (REG_MULTI) + m->norm.list.multi[0].start_col = +! (colnr_T)(reginput - regline) + clen; + else +! m->norm.list.line[0].start = reginput + clen; + addstate(nextlist, start->out, m, NULL, clen); + } + } +--- 6852,6860 ---- + { + if (REG_MULTI) + m->norm.list.multi[0].start_col = +! (colnr_T)(rex.input - rex.line) + clen; + else +! m->norm.list.line[0].start = rex.input + clen; + addstate(nextlist, start->out, m, NULL, clen); + } + } +*************** +*** 6900,6908 **** + /* Advance to the next character, or advance to the next line, or + * finish. */ + if (clen != 0) +! reginput += clen; + else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI +! && reglnum < nfa_endp->se_u.pos.lnum)) + reg_nextline(); + else + break; +--- 6877,6885 ---- + /* Advance to the next character, or advance to the next line, or + * finish. */ + if (clen != 0) +! rex.input += clen; + else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI +! && rex.lnum < nfa_endp->se_u.pos.lnum)) + reg_nextline(); + else + break; +*************** +*** 6942,6948 **** + } + + /* +! * Try match of "prog" with at regline["col"]. + * Returns <= 0 for failure, number of lines contained in the match otherwise. + */ + static long +--- 6919,6925 ---- + } + + /* +! * Try match of "prog" with at rex.line["col"]. + * Returns <= 0 for failure, number of lines contained in the match otherwise. + */ + static long +*************** +*** 6960,6966 **** + FILE *f; + #endif + +! reginput = regline + col; + #ifdef FEAT_RELTIME + nfa_time_limit = tm; + nfa_timed_out = timed_out; +--- 6937,6943 ---- + FILE *f; + #endif + +! rex.input = rex.line + col; + #ifdef FEAT_RELTIME + nfa_time_limit = tm; + nfa_timed_out = timed_out; +*************** +*** 6975,6981 **** + #ifdef DEBUG + fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr); + #endif +! fprintf(f, "\tInput text is \"%s\" \n", reginput); + fprintf(f, "\t=======================================================\n\n"); + nfa_print_state(f, start); + fprintf(f, "\n\n"); +--- 6952,6958 ---- + #ifdef DEBUG + fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr); + #endif +! fprintf(f, "\tInput text is \"%s\" \n", rex.input); + fprintf(f, "\t=======================================================\n\n"); + nfa_print_state(f, start); + fprintf(f, "\n\n"); +*************** +*** 7018,7029 **** + if (rex.reg_endpos[0].lnum < 0) + { + /* pattern has a \ze but it didn't match, use current end */ +! rex.reg_endpos[0].lnum = reglnum; +! rex.reg_endpos[0].col = (int)(reginput - regline); + } + else + /* Use line number of "\ze". */ +! reglnum = rex.reg_endpos[0].lnum; + } + else + { +--- 6995,7006 ---- + if (rex.reg_endpos[0].lnum < 0) + { + /* pattern has a \ze but it didn't match, use current end */ +! rex.reg_endpos[0].lnum = rex.lnum; +! rex.reg_endpos[0].col = (int)(rex.input - rex.line); + } + else + /* Use line number of "\ze". */ +! rex.lnum = rex.reg_endpos[0].lnum; + } + else + { +*************** +*** 7034,7042 **** + } + + if (rex.reg_startp[0] == NULL) +! rex.reg_startp[0] = regline + col; + if (rex.reg_endp[0] == NULL) +! rex.reg_endp[0] = reginput; + } + + #ifdef FEAT_SYN_HL +--- 7011,7019 ---- + } + + if (rex.reg_startp[0] == NULL) +! rex.reg_startp[0] = rex.line + col; + if (rex.reg_endp[0] == NULL) +! rex.reg_endp[0] = rex.input; + } + + #ifdef FEAT_SYN_HL +*************** +*** 7077,7083 **** + } + #endif + +! return 1 + reglnum; + } + + /* +--- 7054,7060 ---- + } + #endif + +! return 1 + rex.lnum; + } + + /* +*************** +*** 7131,7159 **** + rex.reg_icombine = TRUE; + #endif + +! regline = line; +! reglnum = 0; /* relative to line */ + +! nfa_has_zend = prog->has_zend; +! nfa_has_backref = prog->has_backref; +! nfa_nsubexpr = prog->nsubexp; +! nfa_listid = 1; +! nfa_alt_listid = 2; + nfa_regengine.expr = prog->pattern; + + if (prog->reganch && col > 0) + return 0L; + +! need_clear_subexpr = TRUE; + #ifdef FEAT_SYN_HL + /* Clear the external match subpointers if necessary. */ + if (prog->reghasz == REX_SET) + { +! nfa_has_zsubexpr = TRUE; +! need_clear_zsubexpr = TRUE; + } + else +! nfa_has_zsubexpr = FALSE; + #endif + + if (prog->regstart != NUL) +--- 7108,7141 ---- + rex.reg_icombine = TRUE; + #endif + +! rex.line = line; +! rex.lnum = 0; /* relative to line */ + +! rex.nfa_has_zend = prog->has_zend; +! rex.nfa_has_backref = prog->has_backref; +! rex.nfa_nsubexpr = prog->nsubexp; +! rex.nfa_listid = 1; +! rex.nfa_alt_listid = 2; +! #ifdef DEBUG + nfa_regengine.expr = prog->pattern; ++ #endif + + if (prog->reganch && col > 0) + return 0L; + +! rex.need_clear_subexpr = TRUE; + #ifdef FEAT_SYN_HL + /* Clear the external match subpointers if necessary. */ + if (prog->reghasz == REX_SET) + { +! rex.nfa_has_zsubexpr = TRUE; +! rex.need_clear_zsubexpr = TRUE; + } + else +! { +! rex.nfa_has_zsubexpr = FALSE; +! rex.need_clear_zsubexpr = FALSE; +! } + #endif + + if (prog->regstart != NUL) +*************** +*** 7177,7184 **** + if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol) + goto theend; + +! nstate = prog->nstate; +! for (i = 0; i < nstate; ++i) + { + prog->state[i].id = i; + prog->state[i].lastlist[0] = 0; +--- 7159,7168 ---- + if (rex.reg_maxcol > 0 && col >= rex.reg_maxcol) + goto theend; + +! // Set the "nstate" used by nfa_regcomp() to zero to trigger an error when +! // it's accidentally used during execution. +! nstate = 0; +! for (i = 0; i < prog->nstate; ++i) + { + prog->state[i].id = i; + prog->state[i].lastlist[0] = 0; +*************** +*** 7187,7193 **** +--- 7171,7179 ---- + + retval = nfa_regtry(prog, col, tm, timed_out); + ++ #ifdef DEBUG + nfa_regengine.expr = NULL; ++ #endif + + theend: + return retval; +*************** +*** 7207,7213 **** +--- 7193,7201 ---- + if (expr == NULL) + return NULL; + ++ #ifdef DEBUG + nfa_regengine.expr = expr; ++ #endif + nfa_re_flags = re_flags; + + init_class_tab(); +*************** +*** 7255,7260 **** +--- 7243,7249 ---- + if (prog == NULL) + goto fail; + state_ptr = prog->state; ++ prog->re_in_use = FALSE; + + /* + * PASS 2 +*************** +*** 7267,7274 **** + prog->regflags = regflags; + prog->engine = &nfa_regengine; + prog->nstate = nstate; +! prog->has_zend = nfa_has_zend; +! prog->has_backref = nfa_has_backref; + prog->nsubexp = regnpar; + + nfa_postprocess(prog); +--- 7256,7263 ---- + prog->regflags = regflags; + prog->engine = &nfa_regengine; + prog->nstate = nstate; +! prog->has_zend = rex.nfa_has_zend; +! prog->has_backref = rex.nfa_has_backref; + prog->nsubexp = regnpar; + + nfa_postprocess(prog); +*************** +*** 7286,7292 **** +--- 7275,7283 ---- + prog->reghasz = re_has_z; + #endif + prog->pattern = vim_strsave(expr); ++ #ifdef DEBUG + nfa_regengine.expr = NULL; ++ #endif + + out: + VIM_CLEAR(post_start); +*************** +*** 7299,7305 **** +--- 7290,7298 ---- + #ifdef ENABLE_LOG + nfa_postfix_dump(expr, FAIL); + #endif ++ #ifdef DEBUG + nfa_regengine.expr = NULL; ++ #endif + goto out; + } + +*** ../vim-8.1.0191/src/version.c 2018-07-16 18:08:56.326109917 +0200 +--- src/version.c 2018-07-17 05:10:12.956018803 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 192, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +262. Your computer has it's own phone line - but your daughter doesn't. + + /// 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 /// diff --git a/data/vim/patches/8.1.0193 b/data/vim/patches/8.1.0193 new file mode 100644 index 000000000..4cb55fb6f --- /dev/null +++ b/data/vim/patches/8.1.0193 @@ -0,0 +1,57 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0193 +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.0193 +Problem: Terminal debugger buttons don't always work. (Dominique Pelle) +Solution: Set 'cpo' to its default value. +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0192/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-06-23 14:36:13.778666585 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-17 05:50:55.632645723 +0200 +*************** +*** 56,61 **** +--- 56,64 ---- + finish + endif + ++ let s:keepcpo = &cpo ++ set cpo&vim ++ + " The command that starts debugging, e.g. ":Termdebug vim". + " To end type "quit" in the gdb window. + command -nargs=* -complete=file -bang Termdebug call s:StartDebug(<bang>0, <f-args>) +*************** +*** 943,945 **** +--- 946,951 ---- + endif + endfor + endfunc ++ ++ let &cpo = s:keepcpo ++ unlet s:keepcpo +*** ../vim-8.1.0192/src/version.c 2018-07-17 05:43:50.487214724 +0200 +--- src/version.c 2018-07-17 05:53:02.215885517 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 193, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +264. You turn to the teletext page "surfing report" and are surprised that it + is about sizes of waves and a weather forecast for seaside resorts. + + /// 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 /// diff --git a/data/vim/patches/8.1.0194 b/data/vim/patches/8.1.0194 new file mode 100644 index 000000000..36cb442fa --- /dev/null +++ b/data/vim/patches/8.1.0194 @@ -0,0 +1,104 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0194 +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.0194 +Problem: Possibly use of NULL pointer. (Coverity) +Solution: Reset the re_in_use flag earlier. +Files: src/regexp.c + + +*** ../vim-8.1.0193/src/regexp.c 2018-07-17 05:43:50.483214748 +0200 +--- src/regexp.c 2018-07-18 06:00:16.581305145 +0200 +*************** +*** 8266,8271 **** +--- 8266,8272 ---- + rex.reg_endpos = NULL; + + result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl); ++ rmp->regprog->re_in_use = FALSE; + + /* NFA engine aborted because it's very slow. */ + if (rmp->regprog->re_engine == AUTOMATIC_ENGINE +*************** +*** 8284,8290 **** +--- 8285,8295 ---- + #endif + rmp->regprog = vim_regcomp(pat, re_flags); + if (rmp->regprog != NULL) ++ { ++ rmp->regprog->re_in_use = TRUE; + result = rmp->regprog->engine->regexec_nl(rmp, line, col, nl); ++ rmp->regprog->re_in_use = FALSE; ++ } + vim_free(pat); + } + +*************** +*** 8294,8300 **** + rex_in_use = rex_in_use_save; + if (rex_in_use) + rex = rex_save; +- rmp->regprog->re_in_use = FALSE; + + return result > 0; + } +--- 8299,8304 ---- +*************** +*** 8382,8387 **** +--- 8386,8392 ---- + + result = rmp->regprog->engine->regexec_multi( + rmp, win, buf, lnum, col, tm, timed_out); ++ rmp->regprog->re_in_use = FALSE; + + /* NFA engine aborted because it's very slow. */ + if (rmp->regprog->re_engine == AUTOMATIC_ENGINE +*************** +*** 8409,8416 **** +--- 8414,8425 ---- + #endif + + if (rmp->regprog != NULL) ++ { ++ rmp->regprog->re_in_use = TRUE; + result = rmp->regprog->engine->regexec_multi( + rmp, win, buf, lnum, col, tm, timed_out); ++ rmp->regprog->re_in_use = FALSE; ++ } + vim_free(pat); + } + p_re = save_p_re; +*************** +*** 8419,8425 **** + rex_in_use = rex_in_use_save; + if (rex_in_use) + rex = rex_save; +- rmp->regprog->re_in_use = FALSE; + + return result <= 0 ? 0 : result; + } +--- 8428,8433 ---- +*** ../vim-8.1.0193/src/version.c 2018-07-17 05:55:07.031195486 +0200 +--- src/version.c 2018-07-18 06:01:05.753045215 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 194, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +267. You get an extra phone line so you can get phone calls. + + /// 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 /// diff --git a/data/vim/patches/8.1.0195 b/data/vim/patches/8.1.0195 new file mode 100644 index 000000000..4eeb253ed --- /dev/null +++ b/data/vim/patches/8.1.0195 @@ -0,0 +1,59 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0195 +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.0195 +Problem: Terminal debugger commands don't always work. (Dominique Pelle) +Solution: Set 'cpo' to its default value when defining commands. (Christian + Brabandt) +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0194/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-17 05:55:07.031195486 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 01:42:45.109411754 +0200 +*************** +*** 566,571 **** +--- 566,574 ---- + + " Install commands in the current window to control the debugger. + func s:InstallCommands() ++ let save_cpo = &cpo ++ set cpo&vim ++ + command Break call s:SetBreakpoint() + command Clear call s:ClearBreakpoint() + command Step call s:SendCommand('-exec-step') +*************** +*** 603,608 **** +--- 606,613 ---- + an 1.230 PopUp.Evaluate :Evaluate<CR> + endif + endif ++ ++ let &cpo = save_cpo + endfunc + + let s:winbar_winids = [] +*** ../vim-8.1.0194/src/version.c 2018-07-18 06:02:04.084736178 +0200 +--- src/version.c 2018-07-19 01:44:14.191196349 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 195, + /**/ + +-- +God made the integers; all else is the work of Man. + -- Kronecker + + /// 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 /// diff --git a/data/vim/patches/8.1.0196 b/data/vim/patches/8.1.0196 new file mode 100644 index 000000000..5ea32f3a2 --- /dev/null +++ b/data/vim/patches/8.1.0196 @@ -0,0 +1,56 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0196 +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.0196 +Problem: Terminal debugger error with .gdbinit file. +Solution: Check two lines for the "new ui" response. (hint from Hirohito + Higashi) +Files: runtime/pack/dist/opt/termdebug/plugin/termdebug.vim + + +*** ../vim-8.1.0195/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 02:54:56.593615126 +0200 +--- runtime/pack/dist/opt/termdebug/plugin/termdebug.vim 2018-07-19 04:00:32.045002542 +0200 +*************** +*** 200,206 **** + let response = '' + for lnum in range(1,200) + if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi ' +! let response = term_getline(s:gdbbuf, lnum + 1) + if response =~ 'Undefined command' + echoerr 'Sorry, your gdb is too old, gdb 7.12 is required' + exe 'bwipe! ' . s:ptybuf +--- 200,207 ---- + let response = '' + for lnum in range(1,200) + if term_getline(s:gdbbuf, lnum) =~ 'new-ui mi ' +! " response can be in the same line or the next line +! let response = term_getline(s:gdbbuf, lnum) . term_getline(s:gdbbuf, lnum + 1) + if response =~ 'Undefined command' + echoerr 'Sorry, your gdb is too old, gdb 7.12 is required' + exe 'bwipe! ' . s:ptybuf +*** ../vim-8.1.0195/src/version.c 2018-07-19 02:54:56.597615110 +0200 +--- src/version.c 2018-07-19 04:07:59.074400369 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 196, + /**/ + +-- +GALAHAD: Camelot ... +LAUNCELOT: Camelot ... +GAWAIN: It's only a model. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0197 b/data/vim/patches/8.1.0197 new file mode 100644 index 000000000..f8af4058c --- /dev/null +++ b/data/vim/patches/8.1.0197 @@ -0,0 +1,74 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0197 +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.0197 +Problem: Windows GUI: title for search/replace is wrong. +Solution: Remove remark about doubling backslash. (closes #3230) +Files: src/gui_win32.c + + +*** ../vim-8.1.0196/src/gui_w32.c 2018-06-28 12:05:07.085006926 +0200 +--- src/gui_w32.c 2018-07-20 04:55:11.444216436 +0200 +*************** +*** 2820,2827 **** + s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct); + } + +! set_window_title(s_findrep_hwnd, +! _("Find string (use '\\\\' to find a '\\')")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = TRUE; +--- 2820,2826 ---- + s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct); + } + +! set_window_title(s_findrep_hwnd, _("Find string")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = TRUE; +*************** +*** 2855,2862 **** + (LPFINDREPLACE) &s_findrep_struct); + } + +! set_window_title(s_findrep_hwnd, +! _("Find & Replace (use '\\\\' to find a '\\')")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = FALSE; +--- 2854,2860 ---- + (LPFINDREPLACE) &s_findrep_struct); + } + +! set_window_title(s_findrep_hwnd, _("Find & Replace")); + (void)SetFocus(s_findrep_hwnd); + + s_findrep_is_find = FALSE; +*** ../vim-8.1.0196/src/version.c 2018-07-19 04:13:30.332453051 +0200 +--- src/version.c 2018-07-20 05:00:43.838081685 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 197, + /**/ + +-- +MAN: You don't frighten us, English pig-dog! Go and boil your bottoms, + son of a silly person. I blow my nose on you, so-called Arthur-king, + you and your silly English K...kaniggets. + He puts hands to his ears and blows a raspberry. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0198 b/data/vim/patches/8.1.0198 new file mode 100644 index 000000000..0cac7b146 --- /dev/null +++ b/data/vim/patches/8.1.0198 @@ -0,0 +1,88 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0198 +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.0198 +Problem: There is no hint that syntax is disabled for 'redrawtime'. +Solution: Add a message. +Files: src/syntax.c + + +*** ../vim-8.1.0197/src/syntax.c 2018-06-23 14:21:38.459484976 +0200 +--- src/syntax.c 2018-07-20 19:54:46.527523073 +0200 +*************** +*** 3355,3362 **** + } + #endif + #ifdef FEAT_RELTIME +! if (timed_out) + syn_win->w_s->b_syn_slow = TRUE; + #endif + + if (r > 0) +--- 3355,3365 ---- + } + #endif + #ifdef FEAT_RELTIME +! if (timed_out && !syn_win->w_s->b_syn_slow) +! { + syn_win->w_s->b_syn_slow = TRUE; ++ MSG(_("'redrawtime' exceeded, syntax highlighting disabled")); ++ } + #endif + + if (r > 0) +*************** +*** 3575,3585 **** + if (*arg == NUL) + { + MSG_PUTS("\n"); +- MSG_PUTS(_("syntax iskeyword ")); + if (curwin->w_s->b_syn_isk != empty_option) + msg_outtrans(curwin->w_s->b_syn_isk); + else +! msg_outtrans((char_u *)"not set"); + } + else + { +--- 3578,3590 ---- + if (*arg == NUL) + { + MSG_PUTS("\n"); + if (curwin->w_s->b_syn_isk != empty_option) ++ { ++ MSG_PUTS(_("syntax iskeyword ")); + msg_outtrans(curwin->w_s->b_syn_isk); ++ } + else +! msg_outtrans((char_u *)_("syntax iskeyword not set")); + } + else + { +*** ../vim-8.1.0197/src/version.c 2018-07-20 05:03:10.565146691 +0200 +--- src/version.c 2018-07-20 19:49:51.905211855 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 198, + /**/ + +-- + A KNIGHT rides into shot and hacks him to the ground. He rides off. + We stay for a moment on the glade. A MIDDLE-AGED LADY in a C. & A. + twin-set emerges from the trees and looks in horror at the body of her + HUSBAND. +MRS HISTORIAN: FRANK! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0199 b/data/vim/patches/8.1.0199 new file mode 100644 index 000000000..643ae3ed7 --- /dev/null +++ b/data/vim/patches/8.1.0199 @@ -0,0 +1,48 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0199 +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.0199 +Problem: spellbadword() does not check for caps error. (Dominique Pelle) +Solution: Adjust capcol when advancing. +Files: src/evalfunc.c + + +*** ../vim-8.1.0198/src/evalfunc.c 2018-07-15 17:01:06.357425513 +0200 +--- src/evalfunc.c 2018-07-20 20:21:30.289814377 +0200 +*************** +*** 11639,11644 **** +--- 11639,11645 ---- + break; + } + str += len; ++ capcol -= len; + } + } + } +*** ../vim-8.1.0198/src/version.c 2018-07-20 19:56:06.006997358 +0200 +--- src/version.c 2018-07-20 20:27:36.763686510 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 199, + /**/ + +-- + Bravely bold Sir Robin, rode forth from Camelot, + He was not afraid to die, Oh Brave Sir Robin, + He was not at all afraid to be killed in nasty ways + Brave, brave, brave, brave Sir Robin. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0200 b/data/vim/patches/8.1.0200 new file mode 100644 index 000000000..e02ced27a --- /dev/null +++ b/data/vim/patches/8.1.0200 @@ -0,0 +1,93 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0200 +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.0200 +Problem: spellbadword() not tested. +Solution: Add a test. (Dominique Pelle, closes #3235) +Files: src/testdir/test_spell.vim + + +*** ../vim-8.1.0199/src/testdir/test_spell.vim 2017-12-21 20:24:51.000000000 +0100 +--- src/testdir/test_spell.vim 2018-07-20 23:33:17.188338957 +0200 +*************** +*** 68,73 **** +--- 68,114 ---- + bwipe! + endfunc + ++ " Test spellbadword() with argument ++ func Test_spellbadword() ++ set spell ++ ++ call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) ++ call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence')) ++ ++ set spelllang=en ++ call assert_equal(['', ''], spellbadword('centre')) ++ call assert_equal(['', ''], spellbadword('center')) ++ set spelllang=en_us ++ call assert_equal(['centre', 'local'], spellbadword('centre')) ++ call assert_equal(['', ''], spellbadword('center')) ++ set spelllang=en_gb ++ call assert_equal(['', ''], spellbadword('centre')) ++ call assert_equal(['center', 'local'], spellbadword('center')) ++ ++ " Create a small word list to test that spellbadword('...') ++ " can return ['...', 'rare']. ++ e Xwords ++ insert ++ foo ++ foobar/? ++ . ++ w! ++ mkspell! Xwords.spl Xwords ++ set spelllang=Xwords.spl ++ call assert_equal(['foobar', 'rare'], spellbadword('foo foobar')) ++ ++ " Typo should not be detected without the 'spell' option. ++ set spelllang=en_gb nospell ++ call assert_equal(['', ''], spellbadword('centre')) ++ call assert_equal(['', ''], spellbadword('My bycycle.')) ++ call assert_equal(['', ''], spellbadword('A sentence. another sentence')) ++ ++ call delete('Xwords.spl') ++ call delete('Xwords') ++ set spelllang& ++ set spell& ++ endfunc ++ + func Test_spellreall() + new + set spell +*** ../vim-8.1.0199/src/version.c 2018-07-20 20:28:44.855379332 +0200 +--- src/version.c 2018-07-20 23:34:21.732001781 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 200, + /**/ + +-- +The greatest lies of all time: + (1) The check is in the mail. + (2) We have a really challenging assignment for you. + (3) I love you. + (4) All bugs have been fixed. + (5) This won't hurt a bit. + (6) Honey, I just need to debug this program and be home in 5 minutes. + (7) I have just sent you an e-mail about that. + (8) Of course I'll respect you in the morning. + (9) I'm from the government, and I'm here to help you. + + /// 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 /// diff --git a/data/vim/patches/8.1.0201 b/data/vim/patches/8.1.0201 new file mode 100644 index 000000000..b978d9642 --- /dev/null +++ b/data/vim/patches/8.1.0201 @@ -0,0 +1,332 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0201 +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.0201 +Problem: Newer Python uses "importlib" instead of "imp". +Solution: Use "importlib" for newer Python versions. (closes #3163) +Files: src/if_py_both.h, src/testdir/test87.in + + +*** ../vim-8.1.0200/src/if_py_both.h 2018-07-08 17:18:58.420462346 +0200 +--- src/if_py_both.h 2018-07-22 04:05:36.131054785 +0200 +*************** +*** 88,95 **** +--- 88,99 ---- + static PyObject *vim_module; + static PyObject *vim_special_path_object; + ++ #if PY_VERSION_HEX >= 0x030700f0 ++ static PyObject *py_find_spec; ++ #else + static PyObject *py_find_module; + static PyObject *py_load_module; ++ #endif + + static PyObject *VimError; + +*************** +*** 539,544 **** +--- 543,549 ---- + return 0; + } + ++ #if PY_VERSION_HEX < 0x030700f0 + typedef struct + { + PyObject_HEAD +*************** +*** 567,572 **** +--- 572,578 ---- + {"load_module", (PyCFunction)LoaderLoadModule, METH_VARARGS, ""}, + { NULL, NULL, 0, NULL} + }; ++ #endif + + /* Check to see whether a Vim error has been reported, or a keyboard + * interrupt has been detected. +*************** +*** 1163,1168 **** +--- 1169,1205 ---- + return ret; + } + ++ #if PY_VERSION_HEX >= 0x030700f0 ++ static PyObject * ++ FinderFindSpec(PyObject *self, PyObject *args) ++ { ++ char *fullname; ++ PyObject *paths; ++ PyObject *target = Py_None; ++ PyObject *spec; ++ ++ if (!PyArg_ParseTuple(args, "s|O", &fullname, &target)) ++ return NULL; ++ ++ if (!(paths = Vim_GetPaths(self))) ++ return NULL; ++ ++ spec = PyObject_CallFunction(py_find_spec, "sNN", fullname, paths, target); ++ ++ Py_DECREF(paths); ++ ++ if (!spec) ++ { ++ if (PyErr_Occurred()) ++ return NULL; ++ ++ Py_INCREF(Py_None); ++ return Py_None; ++ } ++ ++ return spec; ++ } ++ #else + static PyObject * + call_load_module(char *name, int len, PyObject *find_module_result) + { +*************** +*** 1305,1310 **** +--- 1342,1348 ---- + + return (PyObject *) loader; + } ++ #endif + + static PyObject * + VimPathHook(PyObject *self UNUSED, PyObject *args) +*************** +*** 1336,1342 **** +--- 1374,1384 ---- + {"chdir", (PyCFunction)VimChdir, METH_VARARGS|METH_KEYWORDS, "Change directory"}, + {"fchdir", (PyCFunction)VimFchdir, METH_VARARGS|METH_KEYWORDS, "Change directory"}, + {"foreach_rtp", VimForeachRTP, METH_O, "Call given callable for each path in &rtp"}, ++ #if PY_VERSION_HEX >= 0x030700f0 ++ {"find_spec", FinderFindSpec, METH_VARARGS, "Internal use only, returns spec object for any input it receives"}, ++ #else + {"find_module", FinderFindModule, METH_VARARGS, "Internal use only, returns loader object for any input it receives"}, ++ #endif + {"path_hook", VimPathHook, METH_VARARGS, "Hook function to install in sys.path_hooks"}, + {"_get_paths", (PyCFunction)Vim_GetPaths, METH_NOARGS, "Get &rtp-based additions to sys.path"}, + { NULL, NULL, 0, NULL} +*************** +*** 6545,6550 **** +--- 6587,6593 ---- + OptionsType.tp_traverse = (traverseproc)OptionsTraverse; + OptionsType.tp_clear = (inquiry)OptionsClear; + ++ #if PY_VERSION_HEX < 0x030700f0 + vim_memset(&LoaderType, 0, sizeof(LoaderType)); + LoaderType.tp_name = "vim.Loader"; + LoaderType.tp_basicsize = sizeof(LoaderObject); +*************** +*** 6552,6557 **** +--- 6595,6601 ---- + LoaderType.tp_doc = "vim message object"; + LoaderType.tp_methods = LoaderMethods; + LoaderType.tp_dealloc = (destructor)LoaderDestructor; ++ #endif + + #if PY_MAJOR_VERSION >= 3 + vim_memset(&vimmodule, 0, sizeof(vimmodule)); +*************** +*** 6583,6589 **** +--- 6627,6635 ---- + PYTYPE_READY(FunctionType); + PYTYPE_READY(OptionsType); + PYTYPE_READY(OutputType); ++ #if PY_VERSION_HEX < 0x030700f0 + PYTYPE_READY(LoaderType); ++ #endif + return 0; + } + +*************** +*** 6707,6713 **** +--- 6753,6761 ---- + {"List", (PyObject *)&ListType}, + {"Function", (PyObject *)&FunctionType}, + {"Options", (PyObject *)&OptionsType}, ++ #if PY_VERSION_HEX < 0x030700f0 + {"_Loader", (PyObject *)&LoaderType}, ++ #endif + }; + + #define ADD_OBJECT(m, name, obj) \ +*************** +*** 6729,6734 **** +--- 6777,6786 ---- + PyObject *other_module; + PyObject *attr; + PyObject *imp; ++ #if PY_VERSION_HEX >= 0x030700f0 ++ PyObject *dict; ++ PyObject *cls; ++ #endif + + for (i = 0; i < (int)(sizeof(numeric_constants) + / sizeof(struct numeric_constant)); +*************** +*** 6801,6806 **** +--- 6853,6880 ---- + + ADD_OBJECT(m, "VIM_SPECIAL_PATH", vim_special_path_object); + ++ #if PY_VERSION_HEX >= 0x030700f0 ++ if (!(imp = PyImport_ImportModule("importlib.machinery"))) ++ return -1; ++ ++ dict = PyModule_GetDict(imp); ++ ++ if (!(cls = PyDict_GetItemString(dict, "PathFinder"))) ++ { ++ Py_DECREF(imp); ++ return -1; ++ } ++ ++ if (!(py_find_spec = PyObject_GetAttrString(cls, "find_spec"))) ++ { ++ Py_DECREF(imp); ++ return -1; ++ } ++ ++ Py_DECREF(imp); ++ ++ ADD_OBJECT(m, "_find_spec", py_find_spec); ++ #else + if (!(imp = PyImport_ImportModule("imp"))) + return -1; + +*************** +*** 6821,6826 **** +--- 6895,6901 ---- + + ADD_OBJECT(m, "_find_module", py_find_module); + ADD_OBJECT(m, "_load_module", py_load_module); ++ #endif + + return 0; + } +*** ../vim-8.1.0200/src/testdir/test87.in 2017-03-05 18:33:37.000000000 +0100 +--- src/testdir/test87.in 2018-07-22 04:05:36.131054785 +0200 +*************** +*** 219,224 **** +--- 219,225 ---- + import re + + py33_type_error_pattern = re.compile('^__call__\(\) takes (\d+) positional argument but (\d+) were given$') ++ py37_exception_repr = re.compile(r'([^\(\),])(\)+)$') + + def ee(expr, g=globals(), l=locals()): + cb = vim.current.buffer +*************** +*** 227,243 **** + exec(expr, g, l) + except Exception as e: + if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."): +! cb.append(expr + ':' + repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1])))) + elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0: +! cb.append(expr + ':' + repr((e.__class__, ImportError(str(e).replace("'", ''))))) + elif sys.version_info >= (3, 6) and e.__class__ is ModuleNotFoundError: + # Python 3.6 gives ModuleNotFoundError, change it to an ImportError +! cb.append(expr + ':' + repr((ImportError, ImportError(str(e).replace("'", ''))))) + elif sys.version_info >= (3, 3) and e.__class__ is TypeError: + m = py33_type_error_pattern.search(str(e)) + if m: + msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2)) +! cb.append(expr + ':' + repr((e.__class__, TypeError(msg)))) + else: + msg = repr((e.__class__, e)) + # Messages changed with Python 3.6, change new to old. +--- 228,244 ---- + exec(expr, g, l) + except Exception as e: + if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."): +! msg = repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1]))) + elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0: +! msg = repr((e.__class__, ImportError(str(e).replace("'", '')))) + elif sys.version_info >= (3, 6) and e.__class__ is ModuleNotFoundError: + # Python 3.6 gives ModuleNotFoundError, change it to an ImportError +! msg = repr((ImportError, ImportError(str(e).replace("'", '')))) + elif sys.version_info >= (3, 3) and e.__class__ is TypeError: + m = py33_type_error_pattern.search(str(e)) + if m: + msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2)) +! msg = repr((e.__class__, TypeError(msg))) + else: + msg = repr((e.__class__, e)) + # Messages changed with Python 3.6, change new to old. +*************** +*** 249,257 **** + oldmsg2 = '''"Can't convert 'int' object to str implicitly"''' + if msg.find(newmsg2) > -1: + msg = msg.replace(newmsg2, oldmsg2) +- cb.append(expr + ':' + msg) + elif sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte': +! cb.append(expr + ':' + repr((TypeError, TypeError('expected bytes with no null')))) + else: + msg = repr((e.__class__, e)) + # Some Python versions say can't, others cannot. +--- 250,257 ---- + oldmsg2 = '''"Can't convert 'int' object to str implicitly"''' + if msg.find(newmsg2) > -1: + msg = msg.replace(newmsg2, oldmsg2) + elif sys.version_info >= (3, 5) and e.__class__ is ValueError and str(e) == 'embedded null byte': +! msg = repr((TypeError, TypeError('expected bytes with no null'))) + else: + msg = repr((e.__class__, e)) + # Some Python versions say can't, others cannot. +*************** +*** 262,272 **** + msg = msg.replace('"cannot ', '\'cannot ') + if msg.find(' attributes"') > -1: + msg = msg.replace(' attributes"', ' attributes\'') +! cb.append(expr + ':' + msg) + else: + cb.append(expr + ':NOT FAILED') + except Exception as e: +! cb.append(expr + '::' + repr((e.__class__, e))) + EOF + :fun New(...) + : return ['NewStart']+a:000+['NewEnd'] +--- 262,277 ---- + msg = msg.replace('"cannot ', '\'cannot ') + if msg.find(' attributes"') > -1: + msg = msg.replace(' attributes"', ' attributes\'') +! if sys.version_info >= (3, 7): +! msg = py37_exception_repr.sub(r'\1,\2', msg) +! cb.append(expr + ':' + msg) + else: + cb.append(expr + ':NOT FAILED') + except Exception as e: +! msg = repr((e.__class__, e)) +! if sys.version_info >= (3, 7): +! msg = py37_exception_repr.sub(r'\1,\2', msg) +! cb.append(expr + '::' + msg) + EOF + :fun New(...) + : return ['NewStart']+a:000+['NewEnd'] +*** ../vim-8.1.0200/src/version.c 2018-07-20 23:36:21.171368602 +0200 +--- src/version.c 2018-07-22 04:24:39.197154869 +0200 +*************** +*** 791,792 **** +--- 791,794 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 201, + /**/ + +-- +FIRST HEAD: All right! All right! We'll kill him first and then have tea and + biscuits. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0202 b/data/vim/patches/8.1.0202 new file mode 100644 index 000000000..67523f7c4 --- /dev/null +++ b/data/vim/patches/8.1.0202 @@ -0,0 +1,72 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0202 +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.0202 +Problem: :version always shows +packages. (Takuya Fujiwara) +Solution: Add #ifdef (closes #3198) Also for has(). +Files: src/version.c, src/evalfunc.c + + +*** ../vim-8.1.0201/src/version.c 2018-07-22 04:30:16.372005905 +0200 +--- src/version.c 2018-07-22 05:03:36.372998336 +0200 +*************** +*** 493,499 **** +--- 493,503 ---- + "-ole", + # endif + #endif ++ #ifdef FEAT_EVAL + "+packages", ++ #else ++ "-packages", ++ #endif + #ifdef FEAT_PATH_EXTRA + "+path_extra", + #else +*** ../vim-8.1.0201/src/evalfunc.c 2018-07-20 20:28:44.851379341 +0200 +--- src/evalfunc.c 2018-07-22 05:04:06.032807050 +0200 +*************** +*** 6302,6308 **** +--- 6302,6310 ---- + #ifdef FEAT_OLE + "ole", + #endif ++ #ifdef FEAT_EVAL + "packages", ++ #endif + #ifdef FEAT_PATH_EXTRA + "path_extra", + #endif +*** ../vim-8.1.0201/src/version.c 2018-07-22 04:30:16.372005905 +0200 +--- src/version.c 2018-07-22 05:03:36.372998336 +0200 +*************** +*** 791,792 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 202, + /**/ + +-- + When danger reared its ugly head, + He bravely turned his tail and fled + Yes, Brave Sir Robin turned about + And gallantly he chickened out + Bravely taking to his feet + He beat a very brave retreat + Bravest of the brave Sir Robin + Petrified of being dead + Soiled his pants then brave Sir Robin + Turned away and fled. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0203 b/data/vim/patches/8.1.0203 new file mode 100644 index 000000000..5b07544a8 --- /dev/null +++ b/data/vim/patches/8.1.0203 @@ -0,0 +1,132 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0203 +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.0203 +Problem: Building with Perl 5.28 fails on Windows. +Solution: Define Perl_mg_get. (closes #3196) +Files: src/if_perl.xs + + +*** ../vim-8.1.0202/src/if_perl.xs 2018-07-16 17:45:16.998502685 +0200 +--- src/if_perl.xs 2018-07-22 06:13:58.852007931 +0200 +*************** +*** 199,204 **** +--- 199,207 ---- + # define Perl_gv_stashpv dll_Perl_gv_stashpv + # define Perl_markstack_grow dll_Perl_markstack_grow + # define Perl_mg_find dll_Perl_mg_find ++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 28) ++ # define Perl_mg_get dll_Perl_mg_get ++ # endif + # define Perl_newXS dll_Perl_newXS + # define Perl_newSV dll_Perl_newSV + # define Perl_newSViv dll_Perl_newSViv +*************** +*** 342,347 **** +--- 345,353 ---- + static void (*Perl_markstack_grow)(pTHX); + # endif + static MAGIC* (*Perl_mg_find)(pTHX_ SV*, int); ++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 28) ++ static int (*Perl_mg_get)(pTHX_ SV*); ++ # endif + static CV* (*Perl_newXS)(pTHX_ char*, XSUBADDR_t, char*); + static SV* (*Perl_newSV)(pTHX_ STRLEN); + static SV* (*Perl_newSViv)(pTHX_ IV); +*************** +*** 494,499 **** +--- 500,508 ---- + {"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv}, + {"Perl_markstack_grow", (PERL_PROC*)&Perl_markstack_grow}, + {"Perl_mg_find", (PERL_PROC*)&Perl_mg_find}, ++ # if (PERL_REVISION == 5) && (PERL_VERSION >= 28) ++ {"Perl_mg_get", (PERL_PROC*)&Perl_mg_get}, ++ # endif + {"Perl_newXS", (PERL_PROC*)&Perl_newXS}, + {"Perl_newSV", (PERL_PROC*)&Perl_newSV}, + {"Perl_newSViv", (PERL_PROC*)&Perl_newSViv}, +*************** +*** 862,869 **** + { + if (wp->w_perl_private && perl_interp != NULL) + { +! SV *sv = (SV*)wp->w_perl_private; +! D_Save_Sv(sv); + sv_setiv(sv, 0); + SvREFCNT_dec(sv); + } +--- 871,878 ---- + { + if (wp->w_perl_private && perl_interp != NULL) + { +! SV *sv = (SV*)wp->w_perl_private; +! D_Save_Sv(sv); + sv_setiv(sv, 0); + SvREFCNT_dec(sv); + } +*************** +*** 875,882 **** + { + if (bp->b_perl_private && perl_interp != NULL) + { +! SV *sv = (SV *)bp->b_perl_private; +! D_Save_Sv(sv); + sv_setiv(sv, 0); + SvREFCNT_dec(sv); + } +--- 884,891 ---- + { + if (bp->b_perl_private && perl_interp != NULL) + { +! SV *sv = (SV *)bp->b_perl_private; +! D_Save_Sv(sv); + sv_setiv(sv, 0); + SvREFCNT_dec(sv); + } +*************** +*** 911,919 **** + + if (SvRV(sv) == SvRV(rv)) + SvREFCNT_dec(SvRV(rv)); +! else /* XXX: Not sure if the `else` condition are right +! * Test_SvREFCNT() pass in all case. +! */ + sv_setsv(sv, rv); + + return 0; +--- 920,927 ---- + + if (SvRV(sv) == SvRV(rv)) + SvREFCNT_dec(SvRV(rv)); +! else // XXX: Not sure if the `else` condition are right +! // Test_SvREFCNT() pass in all case. + sv_setsv(sv, rv); + + return 0; +*** ../vim-8.1.0202/src/version.c 2018-07-22 05:08:06.827299787 +0200 +--- src/version.c 2018-07-22 06:40:39.675217593 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 203, + /**/ + +-- + GALAHAD turns back. We see from his POV the lovely ZOOT standing by him + smiling enchantingly and a number of equally delectable GIRLIES draped + around in the seductively poulticed room. They look at him smilingly and + wave. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0204 b/data/vim/patches/8.1.0204 new file mode 100644 index 000000000..1f7766673 --- /dev/null +++ b/data/vim/patches/8.1.0204 @@ -0,0 +1,58 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0204 +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.0204 +Problem: inputlist() is not tested. +Solution: Add a test. (Dominique Pelle, closes #3240) +Files: src/testdir/test_functions.vim + + +*** ../vim-8.1.0203/src/testdir/test_functions.vim 2018-07-15 20:24:25.827299588 +0200 +--- src/testdir/test_functions.vim 2018-07-22 19:33:58.235966937 +0200 +*************** +*** 810,815 **** +--- 810,826 ---- + bw! + endfunc + ++ func Test_inputlist() ++ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx') ++ call assert_equal(1, c) ++ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>2\<cr>", 'tx') ++ call assert_equal(2, c) ++ call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx') ++ call assert_equal(3, c) ++ ++ call assert_fails('call inputlist("")', 'E686:') ++ endfunc ++ + func Test_balloon_show() + if has('balloon_eval') + " This won't do anything but must not crash either. +*** ../vim-8.1.0203/src/version.c 2018-07-22 07:31:04.742472292 +0200 +--- src/version.c 2018-07-22 19:35:05.935590559 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 204, + /**/ + +-- +DINGO: Wicked wicked Zoot ... she is a bad person and she must pay the + penalty. And here in Castle Anthrax, we have but one punishment + ... you must tie her down on a bed ... and spank her. Come! +GIRLS: A spanking! A spanking! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0205 b/data/vim/patches/8.1.0205 new file mode 100644 index 000000000..f7f78afc2 --- /dev/null +++ b/data/vim/patches/8.1.0205 @@ -0,0 +1,226 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0205 +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.0205 +Problem: Invalid memory access with invalid modeline. +Solution: Pass pointer limit. Add a test. (closes #3241) +Files: src/Make_all.mak, src/testdir/test_alot.vim, + src/testdir/test_modeline.vim, src/option.c + + +*** ../vim-8.1.0204/src/Make_all.mak 2018-07-04 23:05:19.221931527 +0200 +--- src/Make_all.mak 2018-07-23 03:54:45.950888854 +0200 +*************** +*** 118,123 **** +--- 118,124 ---- + test_messages \ + test_mksession \ + test_mksession_utf8 \ ++ test_modeline \ + test_nested_function \ + test_netbeans \ + test_normal \ +*** ../vim-8.1.0204/src/testdir/test_alot.vim 2018-05-19 15:00:48.841017887 +0200 +--- src/testdir/test_alot.vim 2018-07-23 03:56:07.742401442 +0200 +*************** +*** 37,42 **** +--- 37,43 ---- + source test_match.vim + source test_menu.vim + source test_messages.vim ++ source test_modeline.vim + source test_partial.vim + source test_popup.vim + source test_put.vim +*** ../vim-8.1.0204/src/testdir/test_modeline.vim 2018-07-23 04:10:49.533248182 +0200 +--- src/testdir/test_modeline.vim 2018-07-23 04:02:57.055992973 +0200 +*************** +*** 0 **** +--- 1,8 ---- ++ " Tests for parsing the modeline. ++ ++ func Test_invalid() ++ " This was reading before allocated memory. ++ call writefile(['vi:0', 'nothing'], 'Xmodeline') ++ call assert_fails('split Xmodeline', 'E518:') ++ bwipe! ++ endfunc +*** ../vim-8.1.0204/src/option.c 2018-07-08 21:46:52.859037899 +0200 +--- src/option.c 2018-07-23 04:09:28.641716577 +0200 +*************** +*** 3316,3322 **** + static char_u *set_num_option(int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags); + static void check_redraw(long_u flags); + static int findoption(char_u *); +! static int find_key_option(char_u *); + static void showoptions(int all, int opt_flags); + static int optval_default(struct vimoption *, char_u *varp); + static void showoneopt(struct vimoption *, int opt_flags); +--- 3316,3322 ---- + static char_u *set_num_option(int opt_idx, char_u *varp, long value, char_u *errbuf, size_t errbuflen, int opt_flags); + static void check_redraw(long_u flags); + static int findoption(char_u *); +! static int find_key_option(char_u *arg_arg, int has_lt); + static void showoptions(int all, int opt_flags); + static int optval_default(struct vimoption *, char_u *varp); + static void showoneopt(struct vimoption *, int opt_flags); +*************** +*** 4492,4498 **** + opt_idx = findoption(arg + 1); + arg[len++] = '>'; /* restore '>' */ + if (opt_idx == -1) +! key = find_key_option(arg + 1); + } + else + { +--- 4492,4498 ---- + opt_idx = findoption(arg + 1); + arg[len++] = '>'; /* restore '>' */ + if (opt_idx == -1) +! key = find_key_option(arg + 1, TRUE); + } + else + { +*************** +*** 4510,4516 **** + opt_idx = findoption(arg); + arg[len] = nextchar; /* restore nextchar */ + if (opt_idx == -1) +! key = find_key_option(arg); + } + + /* remember character after option name */ +--- 4510,4516 ---- + opt_idx = findoption(arg); + arg[len] = nextchar; /* restore nextchar */ + if (opt_idx == -1) +! key = find_key_option(arg, FALSE); + } + + /* remember character after option name */ +*************** +*** 5362,5368 **** + string_to_key(char_u *arg, int multi_byte) + { + if (*arg == '<') +! return find_key_option(arg + 1); + if (*arg == '^') + return Ctrl_chr(arg[1]); + if (multi_byte) +--- 5362,5368 ---- + string_to_key(char_u *arg, int multi_byte) + { + if (*arg == '<') +! return find_key_option(arg + 1, TRUE); + if (*arg == '^') + return Ctrl_chr(arg[1]); + if (multi_byte) +*************** +*** 9541,9547 **** + int key; + + if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_' +! && (key = find_key_option(name)) != 0) + { + char_u key_name[2]; + char_u *p; +--- 9541,9547 ---- + int key; + + if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_' +! && (key = find_key_option(name, FALSE)) != 0) + { + char_u key_name[2]; + char_u *p; +*************** +*** 9831,9837 **** + int key; + + if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_' +! && (key = find_key_option(name)) != 0) + { + char_u key_name[2]; + +--- 9831,9837 ---- + int key; + + if (STRLEN(name) == 4 && name[0] == 't' && name[1] == '_' +! && (key = find_key_option(name, FALSE)) != 0) + { + char_u key_name[2]; + +*************** +*** 9952,9963 **** + + /* + * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number. + */ + static int +! find_key_option(char_u *arg) + { +! int key; + int modifiers; + + /* + * Don't use get_special_key_code() for t_xx, we don't want it to call +--- 9952,9966 ---- + + /* + * Translate a string like "t_xx", "<t_xx>" or "<S-Tab>" to a key number. ++ * When "has_lt" is true there is a '<' before "*arg_arg". ++ * Returns 0 when the key is not recognized. + */ + static int +! find_key_option(char_u *arg_arg, int has_lt) + { +! int key = 0; + int modifiers; ++ char_u *arg = arg_arg; + + /* + * Don't use get_special_key_code() for t_xx, we don't want it to call +*************** +*** 9965,9971 **** + */ + if (arg[0] == 't' && arg[1] == '_' && arg[2] && arg[3]) + key = TERMCAP2KEY(arg[2], arg[3]); +! else + { + --arg; /* put arg at the '<' */ + modifiers = 0; +--- 9968,9974 ---- + */ + if (arg[0] == 't' && arg[1] == '_' && arg[2] && arg[3]) + key = TERMCAP2KEY(arg[2], arg[3]); +! else if (has_lt) + { + --arg; /* put arg at the '<' */ + modifiers = 0; +*** ../vim-8.1.0204/src/version.c 2018-07-22 19:36:29.255125833 +0200 +--- src/version.c 2018-07-23 03:55:34.482599313 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 205, + /**/ + +-- +DINGO: You must spank her well and after you have spanked her you + may deal with her as you like and then ... spank me. +AMAZING: And spank me! +STUNNER: And me. +LOVELY: And me. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0206 b/data/vim/patches/8.1.0206 new file mode 100644 index 000000000..22faed481 --- /dev/null +++ b/data/vim/patches/8.1.0206 @@ -0,0 +1,80 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0206 +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.0206 (after 8.1.0205) +Problem: Duplicate test function name. +Solution: Rename both functions. +Files: src/testdir/test_modeline.vim, src/testdir/test_glob2regpat.vim + + +*** ../vim-8.1.0205/src/testdir/test_modeline.vim 2018-07-23 04:11:37.648969780 +0200 +--- src/testdir/test_modeline.vim 2018-07-23 04:27:46.940228868 +0200 +*************** +*** 1,6 **** + " Tests for parsing the modeline. + +! func Test_invalid() + " This was reading before allocated memory. + call writefile(['vi:0', 'nothing'], 'Xmodeline') + call assert_fails('split Xmodeline', 'E518:') +--- 1,6 ---- + " Tests for parsing the modeline. + +! func Test_modeline_invalid() + " This was reading before allocated memory. + call writefile(['vi:0', 'nothing'], 'Xmodeline') + call assert_fails('split Xmodeline', 'E518:') +*** ../vim-8.1.0205/src/testdir/test_glob2regpat.vim 2016-08-10 23:02:33.000000000 +0200 +--- src/testdir/test_glob2regpat.vim 2018-07-23 04:29:20.587735994 +0200 +*************** +*** 1,12 **** + " Test glob2regpat() + +! func Test_invalid() + call assert_fails('call glob2regpat(1.33)', 'E806:') + call assert_fails('call glob2regpat("}")', 'E219:') + call assert_fails('call glob2regpat("{")', 'E220:') + endfunc + +! func Test_valid() + call assert_equal('^foo\.', glob2regpat('foo.*')) + call assert_equal('^foo.$', glob2regpat('foo?')) + call assert_equal('\.vim$', glob2regpat('*.vim')) +--- 1,12 ---- + " Test glob2regpat() + +! func Test_glob2regpat_invalid() + call assert_fails('call glob2regpat(1.33)', 'E806:') + call assert_fails('call glob2regpat("}")', 'E219:') + call assert_fails('call glob2regpat("{")', 'E220:') + endfunc + +! func Test_glob2regpat_valid() + call assert_equal('^foo\.', glob2regpat('foo.*')) + call assert_equal('^foo.$', glob2regpat('foo?')) + call assert_equal('\.vim$', glob2regpat('*.vim')) +*** ../vim-8.1.0205/src/version.c 2018-07-23 04:11:37.652969757 +0200 +--- src/version.c 2018-07-23 04:49:06.929104402 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 206, + /**/ + +-- +GALAHAD: No. Look, I can tackle this lot single-handed! +GIRLS: Yes, yes, let him Tackle us single-handed! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// 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 /// diff --git a/data/vim/patches/8.1.0207 b/data/vim/patches/8.1.0207 new file mode 100644 index 000000000..e6736dbcd --- /dev/null +++ b/data/vim/patches/8.1.0207 @@ -0,0 +1,67 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0207 +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.0207 +Problem: Need many menu translation files to cover regions. +Solution: When there is no region match, try without. (Christian Brabandt) +Files: runtime/menu.vim + + +*** ../vim-8.1.0206/runtime/menu.vim 2018-05-17 12:39:14.000000000 +0200 +--- runtime/menu.vim 2018-07-23 05:07:00.697989266 +0200 +*************** +*** 56,61 **** +--- 56,68 ---- + let s:lang = substitute(s:lang, '\.[^.]*', "", "") + exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim" + ++ if !exists("did_menu_trans") && s:lang =~ '_' ++ " If the language includes a region try matching without that region. ++ " (e.g. find menu_de.vim if s:lang == de_DE). ++ let langonly = substitute(s:lang, '_.*', "", "") ++ exe "runtime! lang/menu_" . langonly . "[^a-z]*vim" ++ endif ++ + if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us' + " On windows locale names are complicated, try using $LANG, it might + " have been set by set_init_1(). But don't do this for "en" or "en_us". +*************** +*** 809,815 **** + let name = a:fname + if name == '' + if !exists("g:menutrans_no_file") +! let g:menutrans_no_file = "[No file]" + endif + let name = g:menutrans_no_file + else +--- 816,822 ---- + let name = a:fname + if name == '' + if !exists("g:menutrans_no_file") +! let g:menutrans_no_file = "[No Name]" + endif + let name = g:menutrans_no_file + else +*** ../vim-8.1.0206/src/version.c 2018-07-23 04:49:17.225024903 +0200 +--- src/version.c 2018-07-23 05:05:44.138454667 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 207, + /**/ + +-- + ### Hiroshima 45, Chernobyl 86, Windows 95 ### + + /// 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 /// diff --git a/data/vim/patches/8.1.0208 b/data/vim/patches/8.1.0208 new file mode 100644 index 000000000..1ad3c514b --- /dev/null +++ b/data/vim/patches/8.1.0208 @@ -0,0 +1,48 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0208 +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.0208 (after 8.1.0205) +Problem: File left behind after running individual test. +Solution: Delete the file. +Files: src/testdir/test_modeline.vim + + +*** ../vim-8.1.0207/src/testdir/test_modeline.vim 2018-07-23 04:49:17.225024903 +0200 +--- src/testdir/test_modeline.vim 2018-07-24 04:43:26.033462800 +0200 +*************** +*** 5,8 **** +--- 5,9 ---- + call writefile(['vi:0', 'nothing'], 'Xmodeline') + call assert_fails('split Xmodeline', 'E518:') + bwipe! ++ call delete('Xmodeline') + endfunc +*** ../vim-8.1.0207/src/version.c 2018-07-23 05:09:05.593235641 +0200 +--- src/version.c 2018-07-24 04:44:21.565053744 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 208, + /**/ + +-- +E M A C S +s e l o h +c t t n i +a a t f +p r t +e o + l + + /// 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 /// diff --git a/data/vim/patches/8.1.0209 b/data/vim/patches/8.1.0209 new file mode 100644 index 000000000..01f570da6 --- /dev/null +++ b/data/vim/patches/8.1.0209 @@ -0,0 +1,83 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0209 +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.0209 +Problem: Stderr output from Ruby messes up display. +Solution: Turn the stderr output into a Vim message. (Masataka Pocke + Kuwabara, closes #3238) +Files: src/if_ruby.c + + +*** ../vim-8.1.0208/src/if_ruby.c 2018-05-17 13:07:54.000000000 +0200 +--- src/if_ruby.c 2018-07-24 05:32:31.520411688 +0200 +*************** +*** 232,237 **** +--- 232,238 ---- + # define rb_define_singleton_method dll_rb_define_singleton_method + # define rb_define_virtual_variable dll_rb_define_virtual_variable + # define rb_stdout (*dll_rb_stdout) ++ # define rb_stderr (*dll_rb_stderr) + # define rb_eArgError (*dll_rb_eArgError) + # define rb_eIndexError (*dll_rb_eIndexError) + # define rb_eRuntimeError (*dll_rb_eRuntimeError) +*************** +*** 360,365 **** +--- 361,367 ---- + static void (*dll_rb_define_singleton_method) (VALUE,const char*,VALUE(*)(),int); + static void (*dll_rb_define_virtual_variable) (const char*,VALUE(*)(),void(*)()); + static VALUE *dll_rb_stdout; ++ static VALUE *dll_rb_stderr; + static VALUE *dll_rb_eArgError; + static VALUE *dll_rb_eIndexError; + static VALUE *dll_rb_eRuntimeError; +*************** +*** 553,558 **** +--- 555,561 ---- + {"rb_define_singleton_method", (RUBY_PROC*)&dll_rb_define_singleton_method}, + {"rb_define_virtual_variable", (RUBY_PROC*)&dll_rb_define_virtual_variable}, + {"rb_stdout", (RUBY_PROC*)&dll_rb_stdout}, ++ {"rb_stderr", (RUBY_PROC*)&dll_rb_stderr}, + {"rb_eArgError", (RUBY_PROC*)&dll_rb_eArgError}, + {"rb_eIndexError", (RUBY_PROC*)&dll_rb_eIndexError}, + {"rb_eRuntimeError", (RUBY_PROC*)&dll_rb_eRuntimeError}, +*************** +*** 1542,1552 **** +--- 1545,1559 ---- + { + #ifndef DYNAMIC_RUBY + RUBYEXTERN VALUE rb_stdout; ++ RUBYEXTERN VALUE rb_stderr; + #endif + + rb_stdout = rb_obj_alloc(rb_cObject); ++ rb_stderr = rb_obj_alloc(rb_cObject); + rb_define_singleton_method(rb_stdout, "write", vim_message, 1); + rb_define_singleton_method(rb_stdout, "flush", f_nop, 0); ++ rb_define_singleton_method(rb_stderr, "write", vim_message, 1); ++ rb_define_singleton_method(rb_stderr, "flush", f_nop, 0); + rb_define_global_function("p", f_p, -1); + } + +*** ../vim-8.1.0208/src/version.c 2018-07-24 04:51:15.698271642 +0200 +--- src/version.c 2018-07-24 05:33:59.439933605 +0200 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 209, + /**/ + +-- +Back up my hard drive? I can't find the reverse switch! + + /// 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 /// diff --git a/data/vim/patches/8.1.0210 b/data/vim/patches/8.1.0210 new file mode 100644 index 000000000..3c13732ed --- /dev/null +++ b/data/vim/patches/8.1.0210 @@ -0,0 +1,115 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0210 +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.0210 +Problem: Still a few K&R function declarations. +Solution: Use ANSI function declarations (Hirohito Higashi) +Files: src/eval.c, src/evalfunc.c, src/list.c + + +*** ../vim-8.1.0209/src/eval.c Sat Jul 14 17:24:57 2018 +--- src/eval.c Wed Jul 25 19:18:42 2018 +*************** +*** 9387,9394 **** + } + + char_u * +! typval_tostring(arg) +! typval_T *arg; + { + char_u *tofree; + char_u numbuf[NUMBUFLEN]; +--- 9387,9393 ---- + } + + char_u * +! typval_tostring(typval_T *arg) + { + char_u *tofree; + char_u numbuf[NUMBUFLEN]; +*** ../vim-8.1.0209/src/evalfunc.c Sun Jul 22 05:08:06 2018 +--- src/evalfunc.c Wed Jul 25 19:18:42 2018 +*************** +*** 2857,2865 **** + * "deletebufline()" function + */ + static void +! f_deletebufline(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + buf_T *buf; + linenr_T first, last; +--- 2857,2863 ---- + * "deletebufline()" function + */ + static void +! f_deletebufline(typval_T *argvars, typval_T *rettv) + { + buf_T *buf; + linenr_T first, last; +*************** +*** 10502,10510 **** + * "setbufline()" function + */ + static void +! f_setbufline(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + linenr_T lnum; + buf_T *buf; +--- 10500,10506 ---- + * "setbufline()" function + */ + static void +! f_setbufline(typval_T *argvars, typval_T *rettv) + { + linenr_T lnum; + buf_T *buf; +*** ../vim-8.1.0209/src/list.c Sat Feb 10 19:49:08 2018 +--- src/list.c Wed Jul 25 19:18:42 2018 +*************** +*** 479,487 **** + * Return FAIL when out of memory. + */ + int +! list_append_list(list1, list2) +! list_T *list1; +! list_T *list2; + { + listitem_T *li = listitem_alloc(); + +--- 479,485 ---- + * Return FAIL when out of memory. + */ + int +! list_append_list(list_T *list1, list_T *list2) + { + listitem_T *li = listitem_alloc(); + +*** ../vim-8.1.0209/src/version.c Tue Jul 24 05:41:25 2018 +--- src/version.c Wed Jul 25 19:49:06 2018 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 210, + /**/ + +-- +Even got a Datapoint 3600(?) with a DD50 connector instead of the +usual DB25... what a nightmare trying to figure out the pinout +for *that* with no spex... + + /// 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 /// diff --git a/data/vim/patches/8.1.0211 b/data/vim/patches/8.1.0211 new file mode 100644 index 000000000..3ce6e3644 --- /dev/null +++ b/data/vim/patches/8.1.0211 @@ -0,0 +1,228 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0211 +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.0211 +Problem: Expanding a file name "~" results in $HOME. (Aidan Shafran) +Solution: Change "~" to "./~" before expanding. (closes #3072) +Files: src/testdir/test_expand.vim, src/ex_docmd.c, src/eval.c, + src/proto/eval.pro, src/evalfunc.c, src/if_cscope.c, src/misc1.c + + +*** ../vim-8.1.0210/src/testdir/test_expand.vim Sun Jan 17 18:33:03 2016 +--- src/testdir/test_expand.vim Wed Jul 25 21:05:55 2018 +*************** +*** 39,41 **** +--- 39,49 ---- + call delete('Xdir ~ dir', 'd') + call assert_false(isdirectory('Xdir ~ dir')) + endfunc ++ ++ func Test_expand_tilde_filename() ++ split ~ ++ call assert_equal('~', expand('%')) ++ call assert_notequal(expand('%:p'), expand('~/')) ++ call assert_match('\~', expand('%:p')) ++ bwipe! ++ endfunc +*** ../vim-8.1.0210/src/ex_docmd.c Sat Jul 7 16:41:10 2018 +--- src/ex_docmd.c Wed Jul 25 21:03:33 2018 +*************** +*** 10654,10659 **** +--- 10654,10660 ---- + int resultlen; + buf_T *buf; + int valid = VALID_HEAD + VALID_PATH; /* assume valid result */ ++ int tilde_file = FALSE; + int spec_idx; + #ifdef FEAT_MODIFY_FNAME + int skip_mod = FALSE; +*************** +*** 10720,10726 **** +--- 10721,10730 ---- + valid = 0; /* Must have ":p:h" to be valid */ + } + else ++ { + result = curbuf->b_fname; ++ tilde_file = STRCMP(result, "~") == 0; ++ } + break; + + case SPEC_HASH: /* '#' or "#99": alternate file */ +*************** +*** 10784,10790 **** +--- 10788,10797 ---- + valid = 0; /* Must have ":p:h" to be valid */ + } + else ++ { + result = buf->b_fname; ++ tilde_file = STRCMP(result, "~") == 0; ++ } + } + break; + +*************** +*** 10877,10883 **** + #ifdef FEAT_MODIFY_FNAME + else if (!skip_mod) + { +! valid |= modify_fname(src, usedlen, &result, &resultbuf, + &resultlen); + if (result == NULL) + { +--- 10884,10890 ---- + #ifdef FEAT_MODIFY_FNAME + else if (!skip_mod) + { +! valid |= modify_fname(src, tilde_file, usedlen, &result, &resultbuf, + &resultlen); + if (result == NULL) + { +*** ../vim-8.1.0210/src/eval.c Wed Jul 25 19:49:41 2018 +--- src/eval.c Wed Jul 25 21:05:06 2018 +*************** +*** 9690,9700 **** + */ + int + modify_fname( +! char_u *src, /* string with modifiers */ +! int *usedlen, /* characters after src that are used */ +! char_u **fnamep, /* file name so far */ +! char_u **bufp, /* buffer for allocated file name or NULL */ +! int *fnamelen) /* length of fnamep */ + { + int valid = 0; + char_u *tail; +--- 9690,9701 ---- + */ + int + modify_fname( +! char_u *src, // string with modifiers +! int tilde_file, // "~" is a file name, not $HOME +! int *usedlen, // characters after src that are used +! char_u **fnamep, // file name so far +! char_u **bufp, // buffer for allocated file name or NULL +! int *fnamelen) // length of fnamep + { + int valid = 0; + char_u *tail; +*************** +*** 9724,9731 **** + || (*fnamep)[1] == '\\' + # endif + || (*fnamep)[1] == NUL) +- + #endif + ) + { + *fnamep = expand_env_save(*fnamep); +--- 9725,9732 ---- + || (*fnamep)[1] == '\\' + # endif + || (*fnamep)[1] == NUL) + #endif ++ && !(tilde_file && (*fnamep)[1] == NUL) + ) + { + *fnamep = expand_env_save(*fnamep); +*** ../vim-8.1.0210/src/proto/eval.pro Tue Jun 12 22:05:10 2018 +--- src/proto/eval.pro Wed Jul 25 21:03:50 2018 +*************** +*** 136,142 **** + int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int type_is, int ic); + char_u *typval_tostring(typval_T *arg); + int var_exists(char_u *var); +! int modify_fname(char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen); + char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr, char_u *flags); + void filter_map(typval_T *argvars, typval_T *rettv, int map); + /* vim: set ft=c : */ +--- 136,142 ---- + int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int type_is, int ic); + char_u *typval_tostring(typval_T *arg); + int var_exists(char_u *var); +! int modify_fname(char_u *src, int tilde_file, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen); + char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr, char_u *flags); + void filter_map(typval_T *argvars, typval_T *rettv, int map); + /* vim: set ft=c : */ +*** ../vim-8.1.0210/src/evalfunc.c Wed Jul 25 19:49:41 2018 +--- src/evalfunc.c Wed Jul 25 21:01:17 2018 +*************** +*** 3801,3807 **** + else + { + len = (int)STRLEN(fname); +! (void)modify_fname(mods, &usedlen, &fname, &fbuf, &len); + } + + rettv->v_type = VAR_STRING; +--- 3801,3807 ---- + else + { + len = (int)STRLEN(fname); +! (void)modify_fname(mods, FALSE, &usedlen, &fname, &fbuf, &len); + } + + rettv->v_type = VAR_STRING; +*** ../vim-8.1.0210/src/if_cscope.c Sun Mar 4 16:07:23 2018 +--- src/if_cscope.c Wed Jul 25 21:10:45 2018 +*************** +*** 519,525 **** + #ifdef FEAT_MODIFY_FNAME + len = (int)STRLEN(fname); + fbuf = (char_u *)fname; +! (void)modify_fname((char_u *)":p", &usedlen, + (char_u **)&fname, &fbuf, &len); + if (fname == NULL) + goto add_err; +--- 519,525 ---- + #ifdef FEAT_MODIFY_FNAME + len = (int)STRLEN(fname); + fbuf = (char_u *)fname; +! (void)modify_fname((char_u *)":p", FALSE, &usedlen, + (char_u **)&fname, &fbuf, &len); + if (fname == NULL) + goto add_err; +*** ../vim-8.1.0210/src/misc1.c Sat Jul 7 16:41:10 2018 +--- src/misc1.c Wed Jul 25 21:11:10 2018 +*************** +*** 4908,4914 **** + char_u *fbuf = NULL; + + flen = (int)STRLEN(homedir_env); +! (void)modify_fname((char_u *)":p", &usedlen, + &homedir_env, &fbuf, &flen); + flen = (int)STRLEN(homedir_env); + if (flen > 0 && vim_ispathsep(homedir_env[flen - 1])) +--- 4908,4914 ---- + char_u *fbuf = NULL; + + flen = (int)STRLEN(homedir_env); +! (void)modify_fname((char_u *)":p", FALSE, &usedlen, + &homedir_env, &fbuf, &flen); + flen = (int)STRLEN(homedir_env); + if (flen > 0 && vim_ispathsep(homedir_env[flen - 1])) +*** ../vim-8.1.0210/src/version.c Wed Jul 25 19:49:41 2018 +--- src/version.c Wed Jul 25 21:18:08 2018 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 211, + /**/ + +-- +You were lucky to have a LAKE! There were a hundred and sixty of +us living in a small shoebox in the middle of the road. + + /// 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 /// diff --git a/data/vim/patches/8.1.0212 b/data/vim/patches/8.1.0212 new file mode 100644 index 000000000..aed136ba9 --- /dev/null +++ b/data/vim/patches/8.1.0212 @@ -0,0 +1,253 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0212 +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.0212 +Problem: Preferred cursor column not set in interfaces. +Solution: Set w_set_curswant when setting the cursor. (David Hotham, + closes #3060) +Files: src/if_lua.c, src/if_mzsch.c, src/if_perl.xs, src/if_py_both.h, + src/if_ruby.c, src/if_tcl.c, src/testdir/test_lua.vim, + src/testdir/test_perl.vim, src/testdir/test_python2.vim, + src/testdir/test_python3.vim, src/testdir/test_ruby.vim, + src/testdir/test_tcl.vim + + +*** ../vim-8.1.0211/src/if_lua.c Sat Jul 14 20:49:39 2018 +--- src/if_lua.c Wed Jul 25 21:55:11 2018 +*************** +*** 1377,1382 **** +--- 1377,1383 ---- + luaV_checksandbox(L); + #endif + w->w_cursor.col = v - 1; ++ w->w_set_curswant = TRUE; + update_screen(VALID); + } + else if (strncmp(s, "width", 5) == 0) +*** ../vim-8.1.0211/src/if_mzsch.c Sun Oct 8 17:29:02 2017 +--- src/if_mzsch.c Wed Jul 25 21:55:11 2018 +*************** +*** 2132,2137 **** +--- 2132,2138 ---- + + win->win->w_cursor.lnum = lnum; + win->win->w_cursor.col = col; ++ win->win->w_set_curswant = TRUE; + update_screen(VALID); + + raise_if_error(); +*** ../vim-8.1.0211/src/if_perl.xs Sun Jul 22 07:31:04 2018 +--- src/if_perl.xs Wed Jul 25 21:55:11 2018 +*************** +*** 1691,1696 **** +--- 1691,1697 ---- + col = (int) SvIV(ST(2)); + win->w_cursor.lnum = lnum; + win->w_cursor.col = col; ++ win->w_set_curswant = TRUE; + check_cursor(); /* put cursor on an existing line */ + update_screen(NOT_VALID); + } +*** ../vim-8.1.0211/src/if_py_both.h Sun Jul 22 04:30:16 2018 +--- src/if_py_both.h Wed Jul 25 21:55:11 2018 +*************** +*** 3985,3990 **** +--- 3985,3991 ---- + + self->win->w_cursor.lnum = lnum; + self->win->w_cursor.col = col; ++ self->win->w_set_curswant = TRUE; + #ifdef FEAT_VIRTUALEDIT + self->win->w_cursor.coladd = 0; + #endif +*** ../vim-8.1.0211/src/if_ruby.c Tue Jul 24 05:41:25 2018 +--- src/if_ruby.c Wed Jul 25 21:55:11 2018 +*************** +*** 1517,1522 **** +--- 1517,1523 ---- + col = RARRAY_PTR(pos)[1]; + win->w_cursor.lnum = NUM2LONG(lnum); + win->w_cursor.col = NUM2UINT(col); ++ win->w_set_curswant = TRUE; + check_cursor(); /* put cursor on an existing line */ + update_screen(NOT_VALID); + return Qnil; +*** ../vim-8.1.0211/src/if_tcl.c Wed Jul 4 22:12:19 2018 +--- src/if_tcl.c Wed Jul 25 21:55:11 2018 +*************** +*** 1091,1096 **** +--- 1091,1097 ---- + /* TODO: should check column */ + win->w_cursor.lnum = val1; + win->w_cursor.col = col2vim(val2); ++ win->w_set_curswant = TRUE; + flags |= FL_UPDATE_SCREEN; + break; + +*** ../vim-8.1.0211/src/testdir/test_lua.vim Sat Jul 7 23:07:35 2018 +--- src/testdir/test_lua.vim Wed Jul 25 21:55:11 2018 +*************** +*** 555,557 **** +--- 555,574 ---- + call delete('Xlua_file') + bwipe! + endfunc ++ ++ func Test_set_cursor() ++ " Check that setting the cursor position works. ++ new ++ call setline(1, ['first line', 'second line']) ++ normal gg ++ lua << EOF ++ w = vim.window() ++ w.line = 1 ++ w.col = 5 ++ EOF ++ call assert_equal([1, 5], [line('.'), col('.')]) ++ ++ " Check that movement after setting cursor position keeps current column. ++ normal j ++ call assert_equal([2, 5], [line('.'), col('.')]) ++ endfunc +*** ../vim-8.1.0211/src/testdir/test_perl.vim Mon Jul 16 18:08:56 2018 +--- src/testdir/test_perl.vim Wed Jul 25 21:55:11 2018 +*************** +*** 258,260 **** +--- 258,273 ---- + --perl + %bw! + endfunc ++ ++ func Test_set_cursor() ++ " Check that setting the cursor position works. ++ new ++ call setline(1, ['first line', 'second line']) ++ normal gg ++ perldo $curwin->Cursor(1, 5) ++ call assert_equal([1, 6], [line('.'), col('.')]) ++ ++ " Check that movement after setting cursor position keeps current column. ++ normal j ++ call assert_equal([2, 6], [line('.'), col('.')]) ++ endfunc +*** ../vim-8.1.0211/src/testdir/test_python2.vim Sun Jan 29 21:20:44 2017 +--- src/testdir/test_python2.vim Wed Jul 25 21:55:11 2018 +*************** +*** 22,24 **** +--- 22,38 ---- + bwipe! + bwipe! + endfunc ++ ++ func Test_set_cursor() ++ " Check that setting the cursor position works. ++ py import vim ++ new ++ call setline(1, ['first line', 'second line']) ++ normal gg ++ pydo vim.current.window.cursor = (1, 5) ++ call assert_equal([1, 6], [line('.'), col('.')]) ++ ++ " Check that movement after setting cursor position keeps current column. ++ normal j ++ call assert_equal([2, 6], [line('.'), col('.')]) ++ endfunc +*** ../vim-8.1.0211/src/testdir/test_python3.vim Sun Jan 29 21:26:04 2017 +--- src/testdir/test_python3.vim Wed Jul 25 21:55:11 2018 +*************** +*** 1,4 **** +! " Test for python 2 commands. + " TODO: move tests from test88.in here. + + if !has('python3') +--- 1,4 ---- +! " Test for python 3 commands. + " TODO: move tests from test88.in here. + + if !has('python3') +*************** +*** 22,24 **** +--- 22,38 ---- + bwipe! + bwipe! + endfunc ++ ++ func Test_set_cursor() ++ " Check that setting the cursor position works. ++ py3 import vim ++ new ++ call setline(1, ['first line', 'second line']) ++ normal gg ++ py3do vim.current.window.cursor = (1, 5) ++ call assert_equal([1, 6], [line('.'), col('.')]) ++ ++ " Check that movement after setting cursor position keeps current column. ++ normal j ++ call assert_equal([2, 6], [line('.'), col('.')]) ++ endfunc +*** ../vim-8.1.0211/src/testdir/test_ruby.vim Wed Jan 31 20:11:21 2018 +--- src/testdir/test_ruby.vim Wed Jul 25 21:55:11 2018 +*************** +*** 57,59 **** +--- 57,72 ---- + call assert_fails('rubyfile ' . tempfile) + call delete(tempfile) + endfunc ++ ++ func Test_set_cursor() ++ " Check that setting the cursor position works. ++ new ++ call setline(1, ['first line', 'second line']) ++ normal gg ++ rubydo $curwin.cursor = [1, 5] ++ call assert_equal([1, 6], [line('.'), col('.')]) ++ ++ " Check that movement after setting cursor position keeps current column. ++ normal j ++ call assert_equal([2, 6], [line('.'), col('.')]) ++ endfunc +*** ../vim-8.1.0211/src/testdir/test_tcl.vim Sat Jul 7 22:41:57 2018 +--- src/testdir/test_tcl.vim Wed Jul 25 21:58:09 2018 +*************** +*** 665,667 **** +--- 665,680 ---- + + tcl unset bar + endfunc ++ ++ func Test_set_cursor() ++ " Check that setting the cursor position works. ++ new ++ call setline(1, ['first line', 'second line']) ++ normal gg ++ tcldo $::vim::current(window) cursor 1 5 ++ call assert_equal([1, 5], [line('.'), col('.')]) ++ ++ " Check that movement after setting cursor position keeps current column. ++ normal j ++ call assert_equal([2, 5], [line('.'), col('.')]) ++ endfunc +*** ../vim-8.1.0211/src/version.c Wed Jul 25 21:19:09 2018 +--- src/version.c Wed Jul 25 21:59:58 2018 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 212, + /**/ + +-- +Yah, well, we had to carve our electrons out of driftwood we'd +find. In the winter. Uphill. Both ways. + + /// 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 /// diff --git a/data/vim/patches/8.1.0213 b/data/vim/patches/8.1.0213 new file mode 100644 index 000000000..ce975306c --- /dev/null +++ b/data/vim/patches/8.1.0213 @@ -0,0 +1,197 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0213 +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.0213 +Problem: CTRL-W CR does not work properly in a quickfix window. +Solution: Split the window if needed. (Jason Franklin) +Files: src/normal.c, src/proto/quickfix.pro, src/quickfix.c, + src/testdir/test_quickfix.vim, src/window.c + + +*** ../vim-8.1.0212/src/normal.c Tue Jun 12 22:05:10 2018 +--- src/normal.c Wed Jul 25 22:14:24 2018 +*************** +*** 6202,6219 **** + cap->arg = FORWARD; + nv_page(cap); + } +- else + #if defined(FEAT_QUICKFIX) +! /* In a quickfix window a <CR> jumps to the error under the cursor. */ +! if (bt_quickfix(curbuf) && cap->cmdchar == CAR) +! { +! if (curwin->w_llist_ref == NULL) +! do_cmdline_cmd((char_u *)".cc"); /* quickfix window */ +! else +! do_cmdline_cmd((char_u *)".ll"); /* location list window */ +! } +! else + #endif + { + #ifdef FEAT_CMDWIN + /* In the cmdline window a <CR> executes the command. */ +--- 6202,6213 ---- + cap->arg = FORWARD; + nv_page(cap); + } + #if defined(FEAT_QUICKFIX) +! /* Quickfix window only: view the result under the cursor. */ +! else if (bt_quickfix(curbuf) && cap->cmdchar == CAR) +! qf_view_result(FALSE); + #endif ++ else + { + #ifdef FEAT_CMDWIN + /* In the cmdline window a <CR> executes the command. */ +*** ../vim-8.1.0212/src/proto/quickfix.pro Thu May 17 13:52:49 2018 +--- src/proto/quickfix.pro Wed Jul 25 22:14:24 2018 +*************** +*** 7,12 **** +--- 7,13 ---- + void qf_age(exarg_T *eap); + void qf_history(exarg_T *eap); + void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long amount_after); ++ void qf_view_result(int split); + void ex_cwindow(exarg_T *eap); + void ex_cclose(exarg_T *eap); + void ex_copen(exarg_T *eap); +*** ../vim-8.1.0212/src/quickfix.c Sun Jul 8 18:20:18 2018 +--- src/quickfix.c Wed Jul 25 22:35:13 2018 +*************** +*** 3490,3495 **** +--- 3490,3531 ---- + } + + /* ++ * When "split" is FALSE: Open the entry/result under the cursor. ++ * When "split" is TRUE: Open the entry/result under the cursor in a new window. ++ */ ++ void ++ qf_view_result(int split) ++ { ++ qf_info_T *qi = &ql_info; ++ ++ if (!bt_quickfix(curbuf)) ++ return; ++ ++ if (IS_LL_WINDOW(curwin)) ++ qi = GET_LOC_LIST(curwin); ++ ++ if (qi == NULL || qi->qf_lists[qi->qf_curlist].qf_count == 0) ++ { ++ EMSG(_(e_quickfix)); ++ return; ++ } ++ ++ if (split) ++ { ++ char_u cmd[32]; ++ ++ vim_snprintf((char *)cmd, sizeof(cmd), "split +%ld%s", ++ (long)curwin->w_cursor.lnum, ++ IS_LL_WINDOW(curwin) ? "ll" : "cc"); ++ if (do_cmdline_cmd(cmd) == OK) ++ do_cmdline_cmd((char_u *) "clearjumps"); ++ return; ++ } ++ ++ do_cmdline_cmd((char_u *)(IS_LL_WINDOW(curwin) ? ".ll" : ".cc")); ++ } ++ ++ /* + * ":cwindow": open the quickfix window if we have errors to display, + * close it if not. + * ":lwindow": open the location list window if we have locations to display, +*** ../vim-8.1.0212/src/testdir/test_quickfix.vim Sun Jul 8 16:01:04 2018 +--- src/testdir/test_quickfix.vim Wed Jul 25 22:14:24 2018 +*************** +*** 3504,3506 **** +--- 3504,3524 ---- + call assert_equal([' 1 abc:pat1: '], + \ split(execute('filter /pat1/ clist'), "\n")) + endfunc ++ ++ " Tests for the "CTRL-W <CR>" command. ++ func Xview_result_split_tests(cchar) ++ call s:setup_commands(a:cchar) ++ ++ " Test that "CTRL-W <CR>" in a qf/ll window fails with empty list. ++ call g:Xsetlist([]) ++ Xopen ++ let l:win_count = winnr('$') ++ call assert_fails('execute "normal! \<C-W>\<CR>"', 'E42') ++ call assert_equal(l:win_count, winnr('$')) ++ Xclose ++ endfunc ++ ++ func Test_view_result_split() ++ call Xview_result_split_tests('c') ++ call Xview_result_split_tests('l') ++ endfunc +*** ../vim-8.1.0212/src/window.c Sun Jun 17 16:23:29 2018 +--- src/window.c Wed Jul 25 22:14:24 2018 +*************** +*** 520,542 **** + break; + #endif + + case K_KENTER: + case CAR: +- #if defined(FEAT_QUICKFIX) +- /* +- * In a quickfix window a <CR> jumps to the error under the +- * cursor in a new window. +- */ + if (bt_quickfix(curbuf)) +! { +! sprintf((char *)cbuf, "split +%ld%s", +! (long)curwin->w_cursor.lnum, +! (curwin->w_llist_ref == NULL) ? "cc" : "ll"); +! do_cmdline_cmd(cbuf); +! } +! #endif + break; +! + + /* CTRL-W g extended commands */ + case 'g': +--- 520,533 ---- + break; + #endif + ++ /* Quickfix window only: view the result under the cursor in a new split. */ ++ #if defined(FEAT_QUICKFIX) + case K_KENTER: + case CAR: + if (bt_quickfix(curbuf)) +! qf_view_result(TRUE); + break; +! #endif + + /* CTRL-W g extended commands */ + case 'g': +*** ../vim-8.1.0212/src/version.c Wed Jul 25 22:02:32 2018 +--- src/version.c Wed Jul 25 22:23:40 2018 +*************** +*** 795,796 **** +--- 795,798 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 213, + /**/ + +-- +You got to work at a mill? Lucky! I got sent back to work in the +acid-mines for my daily crust of stale bread... which not even the +birds would eat. + + /// 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 /// |