diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491fd..00000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index 243a54fe..ba6c13ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/vim-*.tar.bz2 +vim-7.2-extra.tar.gz +vim-7.2-lang.tar.gz +vim-7.2.tar.bz2 diff --git a/7.2.001 b/7.2.001 new file mode 100644 index 00000000..3bcb7d09 --- /dev/null +++ b/7.2.001 @@ -0,0 +1,61 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.001 +Fcc: outbox +From: Bram Moolenaar +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/7.2.002 b/7.2.002 new file mode 100644 index 00000000..e1ee32cd --- /dev/null +++ b/7.2.002 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.002 +Fcc: outbox +From: Bram Moolenaar +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/7.2.003 b/7.2.003 new file mode 100644 index 00000000..626d81e5 --- /dev/null +++ b/7.2.003 @@ -0,0 +1,107 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.003 +Fcc: outbox +From: Bram Moolenaar +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/7.2.004 b/7.2.004 new file mode 100644 index 00000000..8e7ed3e9 --- /dev/null +++ b/7.2.004 @@ -0,0 +1,103 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.004 +Fcc: outbox +From: Bram Moolenaar +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/7.2.005 b/7.2.005 new file mode 100644 index 00000000..20cce85b --- /dev/null +++ b/7.2.005 @@ -0,0 +1,149 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.005 +Fcc: outbox +From: Bram Moolenaar +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/7.2.006 b/7.2.006 new file mode 100644 index 00000000..f22eeae5 --- /dev/null +++ b/7.2.006 @@ -0,0 +1,50 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.006 +Fcc: outbox +From: Bram Moolenaar +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 =~ '\' ++ 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/7.2.007 b/7.2.007 new file mode 100644 index 00000000..104b2678 --- /dev/null +++ b/7.2.007 @@ -0,0 +1,493 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.007 (extra) +Fcc: outbox +From: Bram Moolenaar +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 ++ 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 +! # 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 +! # 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, + # Sandor Kopanyi, + # +! # 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, + # Sandor Kopanyi, + # +! # 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 :!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 + :bwipe xx " here, autocommand shall be auto-deleted +--- 3,15 ---- + STARTTEST + :so small.vim + :e xx +! :if has("vms") +! : !del test.out.* +! : au BufLeave :!write sys$output "buffer-local autommand in %" > test.out +! :else +! : !rm -f test.out +! : au BufLeave :!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 + :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/7.2.008 b/7.2.008 new file mode 100644 index 00000000..d3fb58e5 --- /dev/null +++ b/7.2.008 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.008 +Fcc: outbox +From: Bram Moolenaar +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/7.2.009 b/7.2.009 new file mode 100644 index 00000000..fa891dcf --- /dev/null +++ b/7.2.009 @@ -0,0 +1,67 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.009 +Fcc: outbox +From: Bram Moolenaar +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/7.2.010 b/7.2.010 new file mode 100644 index 00000000..47315881 --- /dev/null +++ b/7.2.010 @@ -0,0 +1,206 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.010 +Fcc: outbox +From: Bram Moolenaar +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/7.2.011 b/7.2.011 new file mode 100644 index 00000000..928f8d63 --- /dev/null +++ b/7.2.011 @@ -0,0 +1,105 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.011 +Fcc: outbox +From: Bram Moolenaar +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/7.2.012 b/7.2.012 new file mode 100644 index 00000000..fa3ed247 --- /dev/null +++ b/7.2.012 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.012 +Fcc: outbox +From: Bram Moolenaar +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/7.2.013 b/7.2.013 new file mode 100644 index 00000000..2645f0a7 --- /dev/null +++ b/7.2.013 @@ -0,0 +1,135 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.013 +Fcc: outbox +From: Bram Moolenaar +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/7.2.014 b/7.2.014 new file mode 100644 index 00000000..a0379486 --- /dev/null +++ b/7.2.014 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.014 +Fcc: outbox +From: Bram Moolenaar +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/7.2.015 b/7.2.015 new file mode 100644 index 00000000..e03ac156 --- /dev/null +++ b/7.2.015 @@ -0,0 +1,82 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.015 +Fcc: outbox +From: Bram Moolenaar +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/7.2.016 b/7.2.016 new file mode 100644 index 00000000..03d5207f --- /dev/null +++ b/7.2.016 @@ -0,0 +1,166 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.016 +Fcc: outbox +From: Bram Moolenaar +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 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 + + /* +! * works like CTRL-P (unless 'wc' is ). + */ +! 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 works like +! * CTRL-P (unless 'wc' is ). + */ +! 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/7.2.017 b/7.2.017 new file mode 100644 index 00000000..99979a15 --- /dev/null +++ b/7.2.017 @@ -0,0 +1,162 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.017 +Fcc: outbox +From: Bram Moolenaar +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/7.2.018 b/7.2.018 new file mode 100644 index 00000000..b195f09d --- /dev/null +++ b/7.2.018 @@ -0,0 +1,45 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.018 +Fcc: outbox +From: Bram Moolenaar +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/7.2.019 b/7.2.019 new file mode 100644 index 00000000..4404bca4 --- /dev/null +++ b/7.2.019 @@ -0,0 +1,65 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.019 +Fcc: outbox +From: Bram Moolenaar +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/7.2.020 b/7.2.020 new file mode 100644 index 00000000..fb290407 --- /dev/null +++ b/7.2.020 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.020 +Fcc: outbox +From: Bram Moolenaar +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/7.2.021 b/7.2.021 new file mode 100644 index 00000000..fee0bd85 --- /dev/null +++ b/7.2.021 @@ -0,0 +1,147 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.021 +Fcc: outbox +From: Bram Moolenaar +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 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 \"\""); +*** ../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 . +--- 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 . +*************** +*** 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 on cmdline */ ++ EXTERN int autocmd_fname_full; /* autocmd_fname is full path */ + EXTERN int autocmd_bufnr INIT(= 0); /* fnum for on cmdline */ + EXTERN char_u *autocmd_match INIT(= NULL); /* name for 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/7.2.022 b/7.2.022 new file mode 100644 index 00000000..39277352 --- /dev/null +++ b/7.2.022 @@ -0,0 +1,140 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.022 (extra) +Fcc: outbox +From: Bram Moolenaar +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/7.2.023 b/7.2.023 new file mode 100644 index 00000000..0f6ad1e1 --- /dev/null +++ b/7.2.023 @@ -0,0 +1,65 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.023 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.023 +Problem: 'cursorcolumn' is in the wrong place in a closed fold when the + display is shifted left. (Gary Johnson) +Solution: Subtract w_skipcol or w_leftcol when needed. +Files: src/screen.c + + +*** ../vim-7.2.022/src/screen.c Thu Jul 24 20:29:09 2008 +--- src/screen.c Fri Sep 26 21:23:06 2008 +*************** +*** 2439,2447 **** + + #ifdef FEAT_SYN_HL + /* Show 'cursorcolumn' in the fold line. */ +! if (wp->w_p_cuc && (int)wp->w_virtcol + txtcol < W_WIDTH(wp)) +! ScreenAttrs[off + wp->w_virtcol + txtcol] = hl_combine_attr( +! ScreenAttrs[off + wp->w_virtcol + txtcol], hl_attr(HLF_CUC)); + #endif + + SCREEN_LINE(row + W_WINROW(wp), W_WINCOL(wp), (int)W_WIDTH(wp), +--- 2439,2455 ---- + + #ifdef FEAT_SYN_HL + /* Show 'cursorcolumn' in the fold line. */ +! if (wp->w_p_cuc) +! { +! txtcol += wp->w_virtcol; +! if (wp->w_p_wrap) +! txtcol -= wp->w_skipcol; +! else +! txtcol -= wp->w_leftcol; +! if (txtcol >= 0 && txtcol < W_WIDTH(wp)) +! ScreenAttrs[off + txtcol] = hl_combine_attr( +! ScreenAttrs[off + txtcol], hl_attr(HLF_CUC)); +! } + #endif + + SCREEN_LINE(row + W_WINROW(wp), W_WINCOL(wp), (int)W_WIDTH(wp), +*** ../vim-7.2.022/src/version.c Sat Sep 20 16:26:10 2008 +--- src/version.c Wed Oct 1 21:07:31 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 23, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +124. You begin conversations with, "Who is your internet service provider?" + + /// 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/7.2.024 b/7.2.024 new file mode 100644 index 00000000..033b0a26 --- /dev/null +++ b/7.2.024 @@ -0,0 +1,50 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.024 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.024 +Problem: It's possible to set 'history' to a negative value and that causes + an out-of-memory error. +Solution: Check that 'history' has a positive value. (Doug Kearns) +Files: src/option.c + + +*** ../vim-7.2.023/src/option.c Thu Jul 24 18:45:15 2008 +--- src/option.c Fri Sep 26 22:20:20 2008 +*************** +*** 7974,7979 **** +--- 7974,7984 ---- + else /* curwin->w_p_scr > curwin->w_height */ + curwin->w_p_scr = curwin->w_height; + } ++ if (p_hi < 0) ++ { ++ errmsg = e_positive; ++ p_hi = 0; ++ } + if (p_report < 0) + { + errmsg = e_positive; +*** ../vim-7.2.023/src/version.c Wed Oct 1 21:09:02 2008 +--- src/version.c Thu Oct 2 22:47:22 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 24, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +127. You bring your laptop and cellular phone to church. + + /// 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/7.2.025 b/7.2.025 new file mode 100644 index 00000000..dab2cc86 --- /dev/null +++ b/7.2.025 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.025 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.025 +Problem: When a CursorHold event invokes system() it is retriggered over + and over again. +Solution: Don't reset did_cursorhold when getting K_IGNORE. +Files: src/normal.c + + +*** ../vim-7.2.024/src/normal.c Sat Sep 6 16:44:06 2008 +--- src/normal.c Sat Sep 27 13:03:34 2008 +*************** +*** 1132,1138 **** + out_flush(); + #endif + #ifdef FEAT_AUTOCMD +! did_cursorhold = FALSE; + #endif + + State = NORMAL; +--- 1132,1139 ---- + out_flush(); + #endif + #ifdef FEAT_AUTOCMD +! if (ca.cmdchar != K_IGNORE) +! did_cursorhold = FALSE; + #endif + + State = NORMAL; +*** ../vim-7.2.024/src/version.c Thu Oct 2 22:48:01 2008 +--- src/version.c Thu Oct 2 22:54:41 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 25, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +128. You can access the Net -- via your portable and cellular phone. + + /// 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/7.2.026 b/7.2.026 new file mode 100644 index 00000000..ec8b1c7b --- /dev/null +++ b/7.2.026 @@ -0,0 +1,105 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.026 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.026 (after 7.2.010) +Problem: "K" doesn't use the length of the identifier but uses the rest of + the line. +Solution: Copy the desired number of characters first. +Files: src/normal.c + + +*** ../vim-7.2.025/src/normal.c Thu Oct 2 22:55:17 2008 +--- src/normal.c Sat Nov 1 13:41:03 2008 +*************** +*** 183,188 **** +--- 183,190 ---- + static void nv_cursorhold __ARGS((cmdarg_T *cap)); + #endif + ++ static char *e_noident = N_("E349: No identifier under cursor"); ++ + /* + * Function to be called for a Normal or Visual mode command. + * The argument is a cmdarg_T. +*************** +*** 3510,3516 **** + if (find_type & FIND_STRING) + EMSG(_("E348: No string under cursor")); + else +! EMSG(_("E349: No identifier under cursor")); + return 0; + } + ptr += col; +--- 3512,3518 ---- + if (find_type & FIND_STRING) + EMSG(_("E348: No string under cursor")); + else +! EMSG(_(e_noident)); + return 0; + } + ptr += col; +*************** +*** 5472,5479 **** + { + /* 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? */ +--- 5474,5490 ---- + { + /* An external command will probably use an argument starting + * with "-" as an option. To avoid trouble we skip the "-". */ +! while (*ptr == '-' && n > 0) +! { + ++ptr; ++ --n; ++ } ++ if (n == 0) ++ { ++ EMSG(_(e_noident)); /* found dashes only */ ++ vim_free(buf); ++ return; ++ } + + /* When a count is given, turn it into a range. Is this + * really what we want? */ +*************** +*** 5520,5526 **** +--- 5531,5539 ---- + if (cmdchar == 'K' && !kp_help) + { + /* Escape the argument properly for a shell command */ ++ ptr = vim_strnsave(ptr, n); + p = vim_strsave_shellescape(ptr, TRUE); ++ vim_free(ptr); + if (p == NULL) + { + vim_free(buf); +*** ../vim-7.2.025/src/version.c Thu Oct 2 22:55:17 2008 +--- src/version.c Sat Nov 1 13:50:53 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 26, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +161. You get up before the sun rises to check your e-mail, and you + find yourself in the very same chair long after the sun has set. + + /// 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/7.2.027 b/7.2.027 new file mode 100644 index 00000000..59d708d2 --- /dev/null +++ b/7.2.027 @@ -0,0 +1,98 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.027 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.027 +Problem: Can use cscope commands in the sandbox. +Solution: Disallow them, they might not be safe. +Files: src/ex_cmds.h + + +*** ../vim-7.2.026/src/ex_cmds.h Thu Sep 18 12:43:21 2008 +--- src/ex_cmds.h Thu Sep 18 22:18:14 2008 +*************** +*** 278,284 **** + EX(CMD_crewind, "crewind", ex_cc, + RANGE|NOTADR|COUNT|TRLBAR|BANG), + EX(CMD_cscope, "cscope", do_cscope, +! EXTRA|NOTRLCOM|SBOXOK|XFILE), + EX(CMD_cstag, "cstag", do_cstag, + BANG|TRLBAR|WORD1), + EX(CMD_cunmap, "cunmap", ex_unmap, +--- 278,284 ---- + EX(CMD_crewind, "crewind", ex_cc, + RANGE|NOTADR|COUNT|TRLBAR|BANG), + EX(CMD_cscope, "cscope", do_cscope, +! EXTRA|NOTRLCOM|XFILE), + EX(CMD_cstag, "cstag", do_cstag, + BANG|TRLBAR|WORD1), + EX(CMD_cunmap, "cunmap", ex_unmap, +*************** +*** 506,512 **** + EX(CMD_lclose, "lclose", ex_cclose, + RANGE|NOTADR|COUNT|TRLBAR), + EX(CMD_lcscope, "lcscope", do_cscope, +! EXTRA|NOTRLCOM|SBOXOK|XFILE), + EX(CMD_left, "left", ex_align, + TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY), + EX(CMD_leftabove, "leftabove", ex_wrongmodifier, +--- 506,512 ---- + EX(CMD_lclose, "lclose", ex_cclose, + RANGE|NOTADR|COUNT|TRLBAR), + EX(CMD_lcscope, "lcscope", do_cscope, +! EXTRA|NOTRLCOM|XFILE), + EX(CMD_left, "left", ex_align, + TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY), + EX(CMD_leftabove, "leftabove", ex_wrongmodifier, +*************** +*** 653,658 **** +--- 653,660 ---- + EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_open, "open", ex_open, + RANGE|EXTRA), ++ EX(CMD_oldfiles, "oldfiles", ex_oldfiles, ++ BANG|TRLBAR|SBOXOK|CMDWIN), + EX(CMD_omap, "omap", ex_map, + EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_omapclear, "omapclear", ex_mapclear, +*************** +*** 804,810 **** + EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, + WORD1|TRLBAR|CMDWIN), + EX(CMD_scscope, "scscope", do_scscope, +! EXTRA|NOTRLCOM|SBOXOK), + EX(CMD_set, "set", ex_set, + TRLBAR|EXTRA|CMDWIN|SBOXOK), + EX(CMD_setfiletype, "setfiletype", ex_setfiletype, +--- 806,812 ---- + EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, + WORD1|TRLBAR|CMDWIN), + EX(CMD_scscope, "scscope", do_scscope, +! EXTRA|NOTRLCOM), + EX(CMD_set, "set", ex_set, + TRLBAR|EXTRA|CMDWIN|SBOXOK), + EX(CMD_setfiletype, "setfiletype", ex_setfiletype, +*** ../vim-7.2.026/src/version.c Sat Nov 1 13:51:57 2008 +--- src/version.c Thu Nov 6 10:21:21 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 27, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.028 b/7.2.028 new file mode 100644 index 00000000..4f148e96 --- /dev/null +++ b/7.2.028 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.028 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.028 +Problem: Confusing error message for missing (). +Solution: Change "braces" to "parentheses". (Gary Johnson) +Files: src/eval.c + + +*** ../vim-7.2.027/src/eval.c Wed Sep 10 15:38:13 2008 +--- src/eval.c Tue Sep 30 21:43:38 2008 +*************** +*** 3287,3293 **** + + if (*startarg != '(') + { +! EMSG2(_("E107: Missing braces: %s"), eap->arg); + goto end; + } + +--- 3293,3299 ---- + + if (*startarg != '(') + { +! EMSG2(_("E107: Missing parentheses: %s"), eap->arg); + goto end; + } + +*** ../vim-7.2.027/src/version.c Thu Nov 6 10:23:03 2008 +--- src/version.c Thu Nov 6 11:02:51 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 28, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.029 b/7.2.029 new file mode 100644 index 00000000..56e847a7 --- /dev/null +++ b/7.2.029 @@ -0,0 +1,44 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.029 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.029 +Problem: No completion for ":doautoall". +Solution: Complete ":doautoall" like ":doautocmd". (Doug Kearns) +Files: src/ex_docmd.c + + +*** ../vim-7.2.028/src/ex_docmd.c Thu Sep 18 21:29:07 2008 +--- src/ex_docmd.c Mon Nov 3 21:21:17 2008 +*************** +*** 3609,3614 **** +--- 3610,3616 ---- + return set_context_in_autocmd(xp, arg, FALSE); + + case CMD_doautocmd: ++ case CMD_doautoall: + return set_context_in_autocmd(xp, arg, TRUE); + #endif + case CMD_set: +*** ../vim-7.2.028/src/version.c Thu Nov 6 11:04:50 2008 +--- src/version.c Thu Nov 6 17:14:58 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 29, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.030 b/7.2.030 new file mode 100644 index 00000000..310207ed --- /dev/null +++ b/7.2.030 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.030 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.030 (after 7.2.027) +Problem: Can't compile. +Solution: Remove prematurely added ex_oldfiles. +Files: src/ex_cmds.h + + +*** ../vim-7.2.029/src/ex_cmds.h Thu Nov 6 10:23:03 2008 +--- src/ex_cmds.h Thu Nov 6 20:45:07 2008 +*************** +*** 653,660 **** + EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_open, "open", ex_open, + RANGE|EXTRA), +- EX(CMD_oldfiles, "oldfiles", ex_oldfiles, +- BANG|TRLBAR|SBOXOK|CMDWIN), + EX(CMD_omap, "omap", ex_map, + EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_omapclear, "omapclear", ex_mapclear, +--- 653,658 ---- +*** ../vim-7.2.029/src/version.c Thu Nov 6 17:16:06 2008 +--- src/version.c Thu Nov 6 20:46:11 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 30, + /**/ + +-- +% cat /usr/include/sys/errno.h +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +[...] +#define EMACS 666 /* Too many macros */ +% + + /// 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/7.2.031 b/7.2.031 new file mode 100644 index 00000000..4b2bca70 --- /dev/null +++ b/7.2.031 @@ -0,0 +1,1281 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.031 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.031 +Problem: Information in the viminfo file about previously edited files is + not available to the user. There is no way to get a complete list + of files edited in previous Vim sessions. +Solution: Add v:oldfiles and fill it with the list of old file names when + first reading the viminfo file. Add the ":oldfiles" command, + ":browse oldfiles" and the "#<123" special file name. Increase + the default value for 'viminfo' from '20 to '100. +Files: runtime/doc/cmdline.txt, runtime/doc/eval.txt, + runtime/doc/starting.txt, runtime/doc/usr_21.txt, src/eval.c, + src/ex_cmds.c, src/ex_cmds.h, src/ex_docmd.c, src/feature.h, + src/fileio.c, src/main.c, src/mark.c, src/misc1.c, + src/proto/eval.pro, src/proto/ex_cmds.pro, src/proto/mark.pro, + src/option.c, src/structs.h, src/vim.h + + +*** ../vim-7.2.030/runtime/doc/cmdline.txt Sat Aug 9 19:36:46 2008 +--- runtime/doc/cmdline.txt Thu Sep 18 22:55:27 2008 +*************** +*** 1,4 **** +! *cmdline.txt* For Vim version 7.2. Last change: 2008 Jul 29 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *cmdline.txt* For Vim version 7.2. Last change: 2008 Sep 18 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 157,162 **** +--- 157,167 ---- + (doesn't work at the expression prompt; some + things such as changing the buffer or current + window are not allowed to avoid side effects) ++ When the result is a |List| the items are used ++ as lines. They can have line breaks inside ++ too. ++ When the result is a Float it's automatically ++ converted to a String. + See |registers| about registers. {not in Vi} + Implementation detail: When using the |expression| register + and invoking setcmdpos(), this sets the position before +*************** +*** 730,748 **** + In Ex commands, at places where a file name can be used, the following + characters have a special meaning. These can also be used in the expression + function expand() |expand()|. +! % is replaced with the current file name *:_%* +! # is replaced with the alternate file name *:_#* + #n (where n is a number) is replaced with the file name of +! buffer n. "#0" is the same as "#" +! ## is replaced with all names in the argument list *:_##* + concatenated, separated by spaces. Each space in a name + is preceded with a backslash. +! Note that these give the file name as it was typed. If an absolute path is +! needed (when using the file name from a different directory), you need to add +! ":p". See |filename-modifiers|. + Note that backslashes are inserted before spaces, so that the command will + correctly interpret the file name. But this doesn't happen for shell +! commands. For those you probably have to use quotes: > + :!ls "%" + :r !spell "%" + +--- 735,763 ---- + In Ex commands, at places where a file name can be used, the following + characters have a special meaning. These can also be used in the expression + function expand() |expand()|. +! % Is replaced with the current file name. *:_%* *c_%* +! # Is replaced with the alternate file name. *:_#* *c_#* + #n (where n is a number) is replaced with the file name of +! buffer n. "#0" is the same as "#". +! ## Is replaced with all names in the argument list *:_##* *c_##* + concatenated, separated by spaces. Each space in a name + is preceded with a backslash. +! # 0) is replaced with old *:_#<* *c_#<* +! file name n. See |:oldfiles| or |v:oldfiles| to get the +! number. *E809* +! {only when compiled with the +eval and +viminfo features} +! +! Note that these, except "# + :!ls "%" + :r !spell "%" + +*** ../vim-7.2.030/runtime/doc/eval.txt Sat Aug 9 19:36:47 2008 +--- runtime/doc/eval.txt Sun Nov 2 14:25:38 2008 +*************** +*** 1,4 **** +! *eval.txt* For Vim version 7.2. Last change: 2008 Aug 09 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *eval.txt* For Vim version 7.2. Last change: 2008 Nov 02 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 1484,1489 **** +--- 1484,1500 ---- + This is the screen column number, like with |virtcol()|. The + value is zero when there was no mouse button click. + ++ *v:oldfiles* *oldfiles-variable* ++ v:oldfiles List of file names that is loaded from the |viminfo| file on ++ startup. These are the files that Vim remembers marks for. ++ The length of the List is limited by the ' argument of the ++ 'viminfo' option (default is 100). ++ Also see |:oldfiles| and |c_#<|. ++ The List can be modified, but this has no effect on what is ++ stored in the |viminfo| file later. If you use values other ++ than String this will cause trouble. ++ {only when compiled with the +viminfo feature} ++ + *v:operator* *operator-variable* + v:operator The last operator given in Normal mode. This is a single + character except for commands starting with or , +*** ../vim-7.2.030/runtime/doc/starting.txt Sat Aug 9 19:36:52 2008 +--- runtime/doc/starting.txt Sun Nov 9 12:12:19 2008 +*************** +*** 1,4 **** +! *starting.txt* For Vim version 7.2. Last change: 2008 Jun 21 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *starting.txt* For Vim version 7.2. Last change: 2008 Nov 09 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 1337,1344 **** + *viminfo-read* + When Vim is started and the 'viminfo' option is non-empty, the contents of + the viminfo file are read and the info can be used in the appropriate places. +! The marks are not read in at startup (but file marks are). See +! |initialization| for how to set the 'viminfo' option upon startup. + + *viminfo-write* + When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo +--- 1335,1343 ---- + *viminfo-read* + When Vim is started and the 'viminfo' option is non-empty, the contents of + the viminfo file are read and the info can be used in the appropriate places. +! The |v:oldfiles| variable is filled. The marks are not read in at startup +! (but file marks are). See |initialization| for how to set the 'viminfo' +! option upon startup. + + *viminfo-write* + When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo +*************** +*** 1372,1377 **** +--- 1371,1378 ---- + that start with any string given with the "r" flag in 'viminfo'. This can be + used to avoid saving marks for files on removable media (for MS-DOS you would + use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:"). ++ The |v:oldfiles| variable is filled with the file names that the viminfo file ++ has marks for. + + *viminfo-file-marks* + Uppercase marks ('A to 'Z) are stored when writing the viminfo file. The +*************** +*** 1463,1470 **** + *:rv* *:rviminfo* *E195* + :rv[iminfo][!] [file] Read from viminfo file [file] (default: see above). + If [!] is given, then any information that is +! already set (registers, marks, etc.) will be +! overwritten. {not in Vi} + + *:wv* *:wviminfo* *E137* *E138* *E574* + :wv[iminfo][!] [file] Write to viminfo file [file] (default: see above). +--- 1464,1471 ---- + *:rv* *:rviminfo* *E195* + :rv[iminfo][!] [file] Read from viminfo file [file] (default: see above). + If [!] is given, then any information that is +! already set (registers, marks, |v:oldfiles|, etc.) +! will be overwritten {not in Vi} + + *:wv* *:wviminfo* *E137* *E138* *E574* + :wv[iminfo][!] [file] Write to viminfo file [file] (default: see above). +*************** +*** 1479,1482 **** +--- 1480,1499 ---- + the .viminfo file. + {not in Vi} + ++ *:ol* *:oldfiles* ++ :ol[dfiles] List the files that have marks stored in the viminfo ++ file. This list is read on startup and only changes ++ afterwards with ":rviminfo!". Also see |v:oldfiles|. ++ The number can be used with |c_#<|. ++ {not in Vi, only when compiled with the +eval feature} ++ ++ :bro[wse] ol[dfiles][!] ++ List file names as with |:oldfiles|, and then prompt ++ for a number. When the number is valid that file from ++ the list is edited. ++ If you get the |press-enter| prompt you can press "q" ++ and still get the prompt to enter a file number. ++ Use ! to abondon a modified buffer. |abandon| ++ {not when compiled with tiny or small features} ++ + vim:tw=78:ts=8:ft=help:norl: +*** ../vim-7.2.030/runtime/doc/usr_21.txt Sat Aug 9 19:36:53 2008 +--- runtime/doc/usr_21.txt Sun Nov 9 12:14:10 2008 +*************** +*** 1,4 **** +! *usr_21.txt* For Vim version 7.2. Last change: 2007 May 01 + + VIM USER MANUAL - by Bram Moolenaar + +--- 1,4 ---- +! *usr_21.txt* For Vim version 7.2. Last change: 2008 Nov 09 + + VIM USER MANUAL - by Bram Moolenaar + +*************** +*** 153,159 **** + to be lost. Each item can be remembered only once. + + +! GETTING BACK TO WHERE YOU WERE + + You are halfway editing a file and it's time to leave for holidays. You exit + Vim and go enjoy yourselves, forgetting all about your work. After a couple +--- 153,159 ---- + to be lost. Each item can be remembered only once. + + +! GETTING BACK TO WHERE YOU STOPPED VIM + + You are halfway editing a file and it's time to leave for holidays. You exit + Vim and go enjoy yourselves, forgetting all about your work. After a couple +*************** +*** 168,173 **** +--- 168,215 ---- + The |:marks| command is useful to find out where '0 to '9 will take you. + + ++ GETTING BACK TO SOME FILE ++ ++ If you want to go back to a file that you edited recently, but not when ++ exiting Vim, there is a slightly more complicated way. You can see a list of ++ files by typing the command: > ++ ++ :oldfiles ++ < 1: ~/.viminfo ~ ++ 2: ~/text/resume.txt ~ ++ 3: /tmp/draft ~ ++ ++ Now you would like to edit the second file, which is in the list preceded by ++ "2:". You type: > ++ ++ :e #<2 ++ ++ Instead of ":e" you can use any command that has a file name argument, the ++ "#<2" item works in the same place as "%" (current file name) and "#" ++ (alternate file name). So you can also split the window to edit the third ++ file: > ++ ++ :split #<3 ++ ++ That #<123 thing is a bit complicated when you just want to edit a file. ++ Fortunately there is a simpler way: > ++ ++ :browse oldfiles ++ < 1: ~/.viminfo ~ ++ 2: ~/text/resume.txt ~ ++ 3: /tmp/draft ~ ++ -- More -- ++ ++ You get the same list of files as with |:oldfiles|. If you want to edit ++ "resume.txt" first press "q" to stop the listing. You will get a prompt: ++ ++ Type number and (empty cancels): ~ ++ ++ Type "2" and press to edit the second file. ++ ++ More info at |:oldfiles|, |v:oldfiles| and |c_#<|. ++ ++ + MOVE INFO FROM ONE VIM TO ANOTHER + + You can use the ":wviminfo" and ":rviminfo" commands to save and restore the +*** ../vim-7.2.030/src/eval.c Thu Nov 6 11:04:50 2008 +--- src/eval.c Sun Nov 9 11:59:39 2008 +*************** +*** 348,353 **** +--- 348,354 ---- + {VV_NAME("mouse_col", VAR_NUMBER), 0}, + {VV_NAME("operator", VAR_STRING), VV_RO}, + {VV_NAME("searchforward", VAR_NUMBER), 0}, ++ {VV_NAME("oldfiles", VAR_LIST), 0}, + }; + + /* shorthand */ +*************** +*** 355,360 **** +--- 356,362 ---- + #define vv_nr vv_di.di_tv.vval.v_number + #define vv_float vv_di.di_tv.vval.v_float + #define vv_str vv_di.di_tv.vval.v_string ++ #define vv_list vv_di.di_tv.vval.v_list + #define vv_tv vv_di.di_tv + + /* +*************** +*** 426,432 **** + static long list_idx_of_item __ARGS((list_T *l, listitem_T *item)); + static void list_append __ARGS((list_T *l, listitem_T *item)); + static int list_append_tv __ARGS((list_T *l, typval_T *tv)); +- static int list_append_string __ARGS((list_T *l, char_u *str, int len)); + static int list_append_number __ARGS((list_T *l, varnumber_T n)); + static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item)); + static int list_extend __ARGS((list_T *l1, list_T *l2, listitem_T *bef)); +--- 428,433 ---- +*************** +*** 845,852 **** + p = &vimvars[i]; + if (p->vv_di.di_tv.v_type == VAR_STRING) + { +! vim_free(p->vv_di.di_tv.vval.v_string); +! p->vv_di.di_tv.vval.v_string = NULL; + } + } + hash_clear(&vimvarht); +--- 846,858 ---- + p = &vimvars[i]; + if (p->vv_di.di_tv.v_type == VAR_STRING) + { +! vim_free(p->vv_string); +! p->vv_string = NULL; +! } +! else if (p->vv_di.di_tv.v_type == VAR_LIST) +! { +! list_unref(p->vv_list); +! p->vv_list = NULL; + } + } + hash_clear(&vimvarht); +*************** +*** 6057,6062 **** +--- 6063,6087 ---- + } + + /* ++ * Get list item "l[idx - 1]" as a string. Returns NULL for failure. ++ */ ++ char_u * ++ list_find_str(l, idx) ++ list_T *l; ++ long idx; ++ { ++ listitem_T *li; ++ ++ li = list_find(l, idx - 1); ++ if (li == NULL) ++ { ++ EMSGN(_(e_listidx), idx); ++ return NULL; ++ } ++ return get_tv_string(&li->li_tv); ++ } ++ ++ /* + * Locate "item" list "l" and return its index. + * Returns -1 when "item" is not in the list. + */ +*************** +*** 6147,6153 **** + * When "len" >= 0 use "str[len]". + * Returns FAIL when out of memory. + */ +! static int + list_append_string(l, str, len) + list_T *l; + char_u *str; +--- 6172,6178 ---- + * When "len" >= 0 use "str[len]". + * Returns FAIL when out of memory. + */ +! int + list_append_string(l, str, len) + list_T *l; + char_u *str; +*************** +*** 6507,6512 **** +--- 6532,6540 ---- + set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID); + } + ++ /* v: vars */ ++ set_ref_in_ht(&vimvarht, copyID); ++ + /* + * 2. Go through the list of dicts and free items without the copyID. + */ +*************** +*** 6597,6603 **** + { + case VAR_DICT: + dd = tv->vval.v_dict; +! if (dd->dv_copyID != copyID) + { + /* Didn't see this dict yet. */ + dd->dv_copyID = copyID; +--- 6625,6631 ---- + { + case VAR_DICT: + dd = tv->vval.v_dict; +! if (dd != NULL && dd->dv_copyID != copyID) + { + /* Didn't see this dict yet. */ + dd->dv_copyID = copyID; +*************** +*** 6607,6613 **** + + case VAR_LIST: + ll = tv->vval.v_list; +! if (ll->lv_copyID != copyID) + { + /* Didn't see this list yet. */ + ll->lv_copyID = copyID; +--- 6635,6641 ---- + + case VAR_LIST: + ll = tv->vval.v_list; +! if (ll != NULL && ll->lv_copyID != copyID) + { + /* Didn't see this list yet. */ + ll->lv_copyID = copyID; +*************** +*** 18106,18111 **** +--- 18134,18150 ---- + } + + /* ++ * Get List v: variable value. Caller must take care of reference count when ++ * needed. ++ */ ++ list_T * ++ get_vim_var_list(idx) ++ int idx; ++ { ++ return vimvars[idx].vv_list; ++ } ++ ++ /* + * Set v:count, v:count1 and v:prevcount. + */ + void +*************** +*** 18141,18146 **** +--- 18180,18199 ---- + } + + /* ++ * Set List v: variable to "val". ++ */ ++ void ++ set_vim_var_list(idx, val) ++ int idx; ++ list_T *val; ++ { ++ list_unref(vimvars[idx].vv_list); ++ vimvars[idx].vv_list = val; ++ if (val != NULL) ++ ++val->lv_refcount; ++ } ++ ++ /* + * Set v:register if needed. + */ + void +*************** +*** 21900,21905 **** +--- 21953,22014 ---- + } + } + ++ /* ++ * List v:oldfiles in a nice way. ++ */ ++ /*ARGSUSED*/ ++ void ++ ex_oldfiles(eap) ++ exarg_T *eap; ++ { ++ list_T *l = vimvars[VV_OLDFILES].vv_list; ++ listitem_T *li; ++ int nr = 0; ++ ++ if (l == NULL) ++ msg((char_u *)_("No old files")); ++ else ++ { ++ msg_start(); ++ msg_scroll = TRUE; ++ for (li = l->lv_first; li != NULL && !got_int; li = li->li_next) ++ { ++ msg_outnum((long)++nr); ++ MSG_PUTS(": "); ++ msg_outtrans(get_tv_string(&li->li_tv)); ++ msg_putchar('\n'); ++ out_flush(); /* output one line at a time */ ++ ui_breakcheck(); ++ } ++ /* Assume "got_int" was set to truncate the listing. */ ++ got_int = FALSE; ++ ++ #ifdef FEAT_BROWSE_CMD ++ if (cmdmod.browse) ++ { ++ quit_more = FALSE; ++ nr = prompt_for_number(FALSE); ++ msg_starthere(); ++ if (nr > 0) ++ { ++ char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES), ++ (long)nr); ++ ++ if (p != NULL) ++ { ++ p = expand_env_save(p); ++ eap->arg = p; ++ eap->cmdidx = CMD_edit; ++ cmdmod.browse = FALSE; ++ do_exedit(eap, NULL); ++ vim_free(p); ++ } ++ } ++ } ++ #endif ++ } ++ } ++ + #endif /* FEAT_EVAL */ + + +*** ../vim-7.2.030/src/ex_cmds.c Sun Sep 14 21:40:26 2008 +--- src/ex_cmds.c Sun Sep 14 13:45:03 2008 +*************** +*** 24,30 **** + static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out)); + #ifdef FEAT_VIMINFO + static char_u *viminfo_filename __ARGS((char_u *)); +! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read)); + static int viminfo_encoding __ARGS((vir_T *virp)); + static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing)); + #endif +--- 24,30 ---- + static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out)); + #ifdef FEAT_VIMINFO + static char_u *viminfo_filename __ARGS((char_u *)); +! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags)); + static int viminfo_encoding __ARGS((vir_T *virp)); + static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing)); + #endif +*************** +*** 1676,1689 **** + + /* + * read_viminfo() -- Read the viminfo file. Registers etc. which are already +! * set are not over-written unless force is TRUE. -- webb + */ + int +! read_viminfo(file, want_info, want_marks, forceit) +! char_u *file; +! int want_info; +! int want_marks; +! int forceit; + { + FILE *fp; + char_u *fname; +--- 1676,1687 ---- + + /* + * read_viminfo() -- Read the viminfo file. Registers etc. which are already +! * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb + */ + int +! read_viminfo(file, flags) +! char_u *file; /* file name or NULL to use default name */ +! int flags; /* VIF_WANT_INFO et al. */ + { + FILE *fp; + char_u *fname; +*************** +*** 1691,1697 **** + if (no_viminfo()) + return FAIL; + +! fname = viminfo_filename(file); /* may set to default if NULL */ + if (fname == NULL) + return FAIL; + fp = mch_fopen((char *)fname, READBIN); +--- 1689,1695 ---- + if (no_viminfo()) + return FAIL; + +! fname = viminfo_filename(file); /* get file name in allocated buffer */ + if (fname == NULL) + return FAIL; + fp = mch_fopen((char *)fname, READBIN); +*************** +*** 1701,1708 **** + verbose_enter(); + smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"), + fname, +! want_info ? _(" info") : "", +! want_marks ? _(" marks") : "", + fp == NULL ? _(" FAILED") : ""); + verbose_leave(); + } +--- 1699,1707 ---- + verbose_enter(); + smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"), + fname, +! (flags & VIF_WANT_INFO) ? _(" info") : "", +! (flags & VIF_WANT_MARKS) ? _(" marks") : "", +! (flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "", + fp == NULL ? _(" FAILED") : ""); + verbose_leave(); + } +*************** +*** 1712,1721 **** + return FAIL; + + viminfo_errcnt = 0; +! do_viminfo(fp, NULL, want_info, want_marks, forceit); + + fclose(fp); +- + return OK; + } + +--- 1711,1719 ---- + return FAIL; + + viminfo_errcnt = 0; +! do_viminfo(fp, NULL, flags); + + fclose(fp); + return OK; + } + +*************** +*** 1968,1974 **** + } + + viminfo_errcnt = 0; +! do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE); + + fclose(fp_out); /* errors are ignored !? */ + if (fp_in != NULL) +--- 1966,1972 ---- + } + + viminfo_errcnt = 0; +! do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS)); + + fclose(fp_out); /* errors are ignored !? */ + if (fp_in != NULL) +*************** +*** 2041,2052 **** + * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo(). + */ + static void +! do_viminfo(fp_in, fp_out, want_info, want_marks, force_read) + FILE *fp_in; + FILE *fp_out; +! int want_info; +! int want_marks; +! int force_read; + { + int count = 0; + int eof = FALSE; +--- 2039,2048 ---- + * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo(). + */ + static void +! do_viminfo(fp_in, fp_out, flags) + FILE *fp_in; + FILE *fp_out; +! int flags; + { + int count = 0; + int eof = FALSE; +*************** +*** 2061,2068 **** + + if (fp_in != NULL) + { +! if (want_info) +! eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL); + else + /* Skip info, find start of marks */ + while (!(eof = viminfo_readline(&vir)) +--- 2057,2065 ---- + + if (fp_in != NULL) + { +! if (flags & VIF_WANT_INFO) +! eof = read_viminfo_up_to_marks(&vir, +! flags & VIF_FORCEIT, fp_out != NULL); + else + /* Skip info, find start of marks */ + while (!(eof = viminfo_readline(&vir)) +*************** +*** 2092,2099 **** + write_viminfo_bufferlist(fp_out); + count = write_viminfo_marks(fp_out); + } +! if (fp_in != NULL && want_marks) +! copy_viminfo_marks(&vir, fp_out, count, eof); + + vim_free(vir.vir_line); + #ifdef FEAT_MBYTE +--- 2089,2097 ---- + write_viminfo_bufferlist(fp_out); + count = write_viminfo_marks(fp_out); + } +! if (fp_in != NULL +! && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT))) +! copy_viminfo_marks(&vir, fp_out, count, eof, flags); + + vim_free(vir.vir_line); + #ifdef FEAT_MBYTE +*** ../vim-7.2.030/src/ex_cmds.h Thu Nov 6 20:47:00 2008 +--- src/ex_cmds.h Thu Sep 18 22:18:14 2008 +*************** +*** 653,658 **** +--- 653,660 ---- + EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_open, "open", ex_open, + RANGE|EXTRA), ++ EX(CMD_oldfiles, "oldfiles", ex_oldfiles, ++ BANG|TRLBAR|SBOXOK|CMDWIN), + EX(CMD_omap, "omap", ex_map, + EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_omapclear, "omapclear", ex_mapclear, +*** ../vim-7.2.030/src/ex_docmd.c Thu Nov 6 17:16:06 2008 +--- src/ex_docmd.c Mon Nov 3 21:21:17 2008 +*************** +*** 364,369 **** +--- 364,370 ---- + # define ex_function ex_ni + # define ex_delfunction ex_ni + # define ex_return ex_ni ++ # define ex_oldfiles ex_ni + #endif + static char_u *arg_all __ARGS((void)); + #ifdef FEAT_SESSION +*************** +*** 1770,1776 **** + } + if (checkforcmd(&ea.cmd, "browse", 3)) + { +! #ifdef FEAT_BROWSE + cmdmod.browse = TRUE; + #endif + continue; +--- 1771,1777 ---- + } + if (checkforcmd(&ea.cmd, "browse", 3)) + { +! #ifdef FEAT_BROWSE_CMD + cmdmod.browse = TRUE; + #endif + continue; +*************** +*** 9508,9531 **** + break; + } + s = src + 1; + i = (int)getdigits(&s); + *usedlen = (int)(s - src); /* length of what we expand */ + +! buf = buflist_findnr(i); +! if (buf == NULL) + { +! *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'"); + return NULL; + } +! if (lnump != NULL) +! *lnump = ECMD_LAST; +! if (buf->b_fname == NULL) + { +! result = (char_u *)""; +! valid = 0; /* Must have ":p:h" to be valid */ + } +- else +- result = buf->b_fname; + break; + + #ifdef FEAT_SEARCHPATH +--- 9509,9558 ---- + break; + } + s = src + 1; ++ if (*s == '<') /* "#<99" uses v:oldfiles */ ++ ++s; + i = (int)getdigits(&s); + *usedlen = (int)(s - src); /* length of what we expand */ + +! if (src[1] == '<') + { +! if (*usedlen < 2) +! { +! /* Should we give an error message for #b_fname == NULL) +! { +! result = (char_u *)""; +! valid = 0; /* Must have ":p:h" to be valid */ +! } +! else +! result = buf->b_fname; + } + break; + + #ifdef FEAT_SEARCHPATH +*************** +*** 10700,10706 **** + p_viminfo = (char_u *)"'100"; + if (eap->cmdidx == CMD_rviminfo) + { +! if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL) + EMSG(_("E195: Cannot open viminfo file for reading")); + } + else +--- 10727,10734 ---- + p_viminfo = (char_u *)"'100"; + if (eap->cmdidx == CMD_rviminfo) + { +! if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS +! | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL) + EMSG(_("E195: Cannot open viminfo file for reading")); + } + else +*** ../vim-7.2.030/src/feature.h Wed Aug 6 18:45:07 2008 +--- src/feature.h Fri Sep 19 19:14:22 2008 +*************** +*** 767,775 **** + + /* + * +browse ":browse" command. + */ +! #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)) +! # define FEAT_BROWSE + #endif + + /* +--- 767,779 ---- + + /* + * +browse ":browse" command. ++ * or just the ":browse" command modifier + */ +! #if defined(FEAT_NORMAL) +! # define FEAT_BROWSE_CMD +! # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) +! # define FEAT_BROWSE +! # endif + #endif + + /* +*** ../vim-7.2.030/src/fileio.c Thu Sep 18 21:29:07 2008 +--- src/fileio.c Mon Nov 3 21:21:47 2008 +*************** +*** 2711,2717 **** + { + if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0 + && curbuf->b_ffname != NULL) +! read_viminfo(NULL, FALSE, TRUE, FALSE); + + /* Always set b_marks_read; needed when 'viminfo' is changed to include + * the ' parameter after opening a buffer. */ +--- 2711,2717 ---- + { + if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0 + && curbuf->b_ffname != NULL) +! read_viminfo(NULL, VIF_WANT_MARKS); + + /* Always set b_marks_read; needed when 'viminfo' is changed to include + * the ' parameter after opening a buffer. */ +*************** +*** 9108,9114 **** + set_context_in_autocmd(xp, arg, doautocmd) + expand_T *xp; + char_u *arg; +! int doautocmd; /* TRUE for :doautocmd, FALSE for :autocmd */ + { + char_u *p; + int group; +--- 9109,9115 ---- + set_context_in_autocmd(xp, arg, doautocmd) + expand_T *xp; + char_u *arg; +! int doautocmd; /* TRUE for :doauto*, FALSE for :autocmd */ + { + char_u *p; + int group; +*** ../vim-7.2.030/src/main.c Thu Sep 18 20:55:19 2008 +--- src/main.c Sun Sep 14 13:26:10 2008 +*************** +*** 645,655 **** + + #ifdef FEAT_VIMINFO + /* +! * Read in registers, history etc, but not marks, from the viminfo file + */ + if (*p_viminfo != NUL) + { +! read_viminfo(NULL, TRUE, FALSE, FALSE); + TIME_MSG("reading viminfo"); + } + #endif +--- 645,656 ---- + + #ifdef FEAT_VIMINFO + /* +! * Read in registers, history etc, but not marks, from the viminfo file. +! * This is where v:oldfiles gets filled. + */ + if (*p_viminfo != NUL) + { +! read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES); + TIME_MSG("reading viminfo"); + } + #endif +*** ../vim-7.2.030/src/mark.c Sat Aug 9 19:37:29 2008 +--- src/mark.c Sun Sep 14 13:46:19 2008 +*************** +*** 1627,1641 **** + + /* + * Handle marks in the viminfo file: +! * fp_out == NULL read marks for current buffer only +! * fp_out != NULL copy marks for buffers not in buffer list + */ + void +! copy_viminfo_marks(virp, fp_out, count, eof) + vir_T *virp; + FILE *fp_out; + int count; + int eof; + { + char_u *line = virp->vir_line; + buf_T *buf; +--- 1627,1643 ---- + + /* + * Handle marks in the viminfo file: +! * fp_out != NULL: copy marks for buffers not in buffer list +! * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only +! * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles + */ + void +! copy_viminfo_marks(virp, fp_out, count, eof, flags) + vir_T *virp; + FILE *fp_out; + int count; + int eof; ++ int flags; + { + char_u *line = virp->vir_line; + buf_T *buf; +*************** +*** 1647,1656 **** +--- 1649,1671 ---- + char_u *p; + char_u *name_buf; + pos_T pos; ++ #ifdef FEAT_EVAL ++ list_T *list = NULL; ++ #endif + + if ((name_buf = alloc(LSIZE)) == NULL) + return; + *name_buf = NUL; ++ ++ #ifdef FEAT_EVAL ++ if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT))) ++ { ++ list = list_alloc(); ++ if (list != NULL) ++ set_vim_var_list(VV_OLDFILES, list); ++ } ++ #endif ++ + num_marked_files = get_viminfo_parameter('\''); + while (!eof && (count < num_marked_files || fp_out == NULL)) + { +*************** +*** 1681,1686 **** +--- 1696,1706 ---- + p++; + *p = NUL; + ++ #ifdef FEAT_EVAL ++ if (list != NULL) ++ list_append_string(list, str, -1); ++ #endif ++ + /* + * If fp_out == NULL, load marks for current buffer. + * If fp_out != NULL, copy marks for buffers not in buflist. +*************** +*** 1688,1694 **** + load_marks = copy_marks_out = FALSE; + if (fp_out == NULL) + { +! if (curbuf->b_ffname != NULL) + { + if (*name_buf == NUL) /* only need to do this once */ + home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE); +--- 1708,1714 ---- + load_marks = copy_marks_out = FALSE; + if (fp_out == NULL) + { +! if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL) + { + if (*name_buf == NUL) /* only need to do this once */ + home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE); +*** ../vim-7.2.030/src/misc1.c Wed Jun 25 00:24:52 2008 +--- src/misc1.c Sun Nov 9 11:47:00 2008 +*************** +*** 3245,3253 **** + + /* When using ":silent" assume that was entered. */ + if (mouse_used != NULL) +! MSG_PUTS(_("Type number or click with mouse ( cancels): ")); + else +! MSG_PUTS(_("Choice number ( cancels): ")); + + /* Set the state such that text can be selected/copied/pasted and we still + * get mouse events. */ +--- 3245,3253 ---- + + /* When using ":silent" assume that was entered. */ + if (mouse_used != NULL) +! MSG_PUTS(_("Type number and or click with mouse (empty cancels): ")); + else +! MSG_PUTS(_("Type number and (empty cancels): ")); + + /* Set the state such that text can be selected/copied/pasted and we still + * get mouse events. */ +*** ../vim-7.2.030/src/proto/eval.pro Sun Jan 6 20:06:30 2008 +--- src/proto/eval.pro Sun Nov 9 12:05:56 2008 +*************** +*** 17,23 **** + int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip)); + char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip)); + int skip_expr __ARGS((char_u **pp)); +! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist)); + char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox)); + int eval_to_number __ARGS((char_u *expr)); + list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr)); +--- 17,23 ---- + int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip)); + char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip)); + int skip_expr __ARGS((char_u **pp)); +! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert)); + char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox)); + int eval_to_number __ARGS((char_u *expr)); + list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr)); +*************** +*** 46,52 **** +--- 46,54 ---- + void list_unref __ARGS((list_T *l)); + void list_free __ARGS((list_T *l, int recurse)); + dictitem_T *dict_lookup __ARGS((hashitem_T *hi)); ++ char_u *list_find_str __ARGS((list_T *l, long idx)); + int list_append_dict __ARGS((list_T *list, dict_T *dict)); ++ int list_append_string __ARGS((list_T *l, char_u *str, int len)); + int garbage_collect __ARGS((void)); + dict_T *dict_alloc __ARGS((void)); + int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str)); +*************** +*** 58,65 **** +--- 60,69 ---- + void set_vim_var_nr __ARGS((int idx, long val)); + long get_vim_var_nr __ARGS((int idx)); + char_u *get_vim_var_str __ARGS((int idx)); ++ list_T *get_vim_var_list __ARGS((int idx)); + void set_vcount __ARGS((long count, long count1)); + void set_vim_var_string __ARGS((int idx, char_u *val, int len)); ++ void set_vim_var_list __ARGS((int idx, list_T *val)); + void set_reg_var __ARGS((int c)); + char_u *v_exception __ARGS((char_u *oldval)); + char_u *v_throwpoint __ARGS((char_u *oldval)); +*************** +*** 94,99 **** +--- 98,104 ---- + void write_viminfo_varlist __ARGS((FILE *fp)); + int store_session_globals __ARGS((FILE *fd)); + void last_set_msg __ARGS((scid_T scriptID)); ++ void ex_oldfiles __ARGS((exarg_T *eap)); + int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen)); + char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags)); + /* vim: set ft=c : */ +*** ../vim-7.2.030/src/proto/ex_cmds.pro Sat May 5 20:13:58 2007 +--- src/proto/ex_cmds.pro Sat Sep 13 17:27:21 2008 +*************** +*** 11,17 **** + char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp)); + void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname)); + int viminfo_error __ARGS((char *errnum, char *message, char_u *line)); +! int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit)); + void write_viminfo __ARGS((char_u *file, int forceit)); + int viminfo_readline __ARGS((vir_T *virp)); + char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert)); +--- 11,17 ---- + char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp)); + void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname)); + int viminfo_error __ARGS((char *errnum, char *message, char_u *line)); +! int read_viminfo __ARGS((char_u *file, int flags)); + void write_viminfo __ARGS((char_u *file, int forceit)); + int viminfo_readline __ARGS((vir_T *virp)); + char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert)); +*** ../vim-7.2.030/src/proto/mark.pro Sat May 5 19:29:37 2007 +--- src/proto/mark.pro Sat Sep 13 18:06:20 2008 +*************** +*** 26,30 **** + void write_viminfo_filemarks __ARGS((FILE *fp)); + int removable __ARGS((char_u *name)); + int write_viminfo_marks __ARGS((FILE *fp_out)); +! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof)); + /* vim: set ft=c : */ +--- 26,30 ---- + void write_viminfo_filemarks __ARGS((FILE *fp)); + int removable __ARGS((char_u *name)); + int write_viminfo_marks __ARGS((FILE *fp_out)); +! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags)); + /* vim: set ft=c : */ +*** ../vim-7.2.030/src/option.c Thu Oct 2 22:48:01 2008 +--- src/option.c Fri Sep 26 22:20:20 2008 +*************** +*** 2593,2605 **** + #ifdef FEAT_VIMINFO + (char_u *)&p_viminfo, PV_NONE, + #if defined(MSDOS) || defined(MSWIN) || defined(OS2) +! {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"} + #else + # ifdef AMIGA + {(char_u *)"", +! (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"} + # else +! {(char_u *)"", (char_u *)"'20,<50,s10,h"} + # endif + #endif + #else +--- 2593,2605 ---- + #ifdef FEAT_VIMINFO + (char_u *)&p_viminfo, PV_NONE, + #if defined(MSDOS) || defined(MSWIN) || defined(OS2) +! {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"} + #else + # ifdef AMIGA + {(char_u *)"", +! (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"} + # else +! {(char_u *)"", (char_u *)"'100,<50,s10,h"} + # endif + #endif + #else +*** ../vim-7.2.030/src/structs.h Thu Jul 31 22:04:27 2008 +--- src/structs.h Fri Sep 19 19:15:18 2008 +*************** +*** 459,465 **** + typedef struct + { + int hide; /* TRUE when ":hide" was used */ +! # ifdef FEAT_BROWSE + int browse; /* TRUE to invoke file dialog */ + # endif + # ifdef FEAT_WINDOWS +--- 459,465 ---- + typedef struct + { + int hide; /* TRUE when ":hide" was used */ +! # ifdef FEAT_BROWSE_CMD + int browse; /* TRUE to invoke file dialog */ + # endif + # ifdef FEAT_WINDOWS +*** ../vim-7.2.030/src/vim.h Sat Aug 9 19:37:40 2008 +--- src/vim.h Sat Sep 13 17:41:24 2008 +*************** +*** 1728,1734 **** + #define VV_MOUSE_COL 51 + #define VV_OP 52 + #define VV_SEARCHFORWARD 53 +! #define VV_LEN 54 /* number of v: vars */ + + #ifdef FEAT_CLIPBOARD + +--- 1728,1735 ---- + #define VV_MOUSE_COL 51 + #define VV_OP 52 + #define VV_SEARCHFORWARD 53 +! #define VV_OLDFILES 54 +! #define VV_LEN 55 /* number of v: vars */ + + #ifdef FEAT_CLIPBOARD + +*************** +*** 2054,2057 **** +--- 2055,2064 ---- + #define DOSO_VIMRC 1 /* loading vimrc file */ + #define DOSO_GVIMRC 2 /* loading gvimrc file */ + ++ /* flags for read_viminfo() and children */ ++ #define VIF_WANT_INFO 1 /* load non-mark info */ ++ #define VIF_WANT_MARKS 2 /* load file marks */ ++ #define VIF_FORCEIT 4 /* overwrite info already read */ ++ #define VIF_GET_OLDFILES 8 /* load v:oldfiles */ ++ + #endif /* VIM__H */ +*** ../vim-7.2.030/src/version.c Thu Nov 6 20:47:00 2008 +--- src/version.c Sun Nov 9 13:39:19 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 31, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +217. Your sex life has drastically improved...so what if it's only cyber-sex! + + /// 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/7.2.032 b/7.2.032 new file mode 100644 index 00000000..f4a0d9be --- /dev/null +++ b/7.2.032 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.032 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.032 (after 7.2.031) +Problem: Can't build with EXITFREE defined. (Dominique Pelle) +Solution: Change vv_string to vv_str. +Files: src/eval.c + + +*** ../vim-7.2.031/src/eval.c Sun Nov 9 13:43:25 2008 +--- src/eval.c Sun Nov 9 17:16:06 2008 +*************** +*** 846,853 **** + p = &vimvars[i]; + if (p->vv_di.di_tv.v_type == VAR_STRING) + { +! vim_free(p->vv_string); +! p->vv_string = NULL; + } + else if (p->vv_di.di_tv.v_type == VAR_LIST) + { +--- 846,853 ---- + p = &vimvars[i]; + if (p->vv_di.di_tv.v_type == VAR_STRING) + { +! vim_free(p->vv_str); +! p->vv_str = NULL; + } + else if (p->vv_di.di_tv.v_type == VAR_LIST) + { +*** ../vim-7.2.031/src/version.c Sun Nov 9 13:43:25 2008 +--- src/version.c Sun Nov 9 17:21:00 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 32, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +218. Your spouse hands you a gift wrapped magnet with your PC's name + on it and you accuse him or her of genocide. + + /// 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/7.2.033 b/7.2.033 new file mode 100644 index 00000000..d96a94b7 --- /dev/null +++ b/7.2.033 @@ -0,0 +1,78 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.033 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.033 +Problem: When detecting a little endian BOM "ucs-2le" is used, but the text + might be "utf-16le". +Solution: Default to "utf-16le", it also works for "ucs-2le". (Jia Yanwei) +Files: src/fileio.c, src/testdir/test42.ok + + +*** ../vim-7.2.032/src/fileio.c Sun Nov 9 13:43:25 2008 +--- src/fileio.c Mon Nov 3 21:21:47 2008 +*************** +*** 5550,5558 **** + name = "ucs-4le"; /* FF FE 00 00 */ + len = 4; + } +! else if (flags == FIO_ALL || flags == (FIO_UCS2 | FIO_ENDIAN_L)) + name = "ucs-2le"; /* FF FE */ +! else if (flags == (FIO_UTF16 | FIO_ENDIAN_L)) + name = "utf-16le"; /* FF FE */ + } + else if (p[0] == 0xfe && p[1] == 0xff +--- 5550,5559 ---- + name = "ucs-4le"; /* FF FE 00 00 */ + len = 4; + } +! else if (flags == (FIO_UCS2 | FIO_ENDIAN_L)) + name = "ucs-2le"; /* FF FE */ +! else if (flags == FIO_ALL || flags == (FIO_UTF16 | FIO_ENDIAN_L)) +! /* utf-16le is preferred, it also works for ucs-2le text */ + name = "utf-16le"; /* FF FE */ + } + else if (p[0] == 0xfe && p[1] == 0xff +*** ../vim-7.2.032/src/testdir/test42.ok Sat Mar 1 13:49:21 2008 +--- src/testdir/test42.ok Sat Nov 1 17:09:29 2008 +*************** +*** 20,26 **** + ucs-2 + + +! fileencoding=ucs-2le + bomb + ucs-2le + +--- 20,26 ---- + ucs-2 + + +! fileencoding=utf-16le + bomb + ucs-2le + +*** ../vim-7.2.032/src/version.c Sun Nov 9 17:21:10 2008 +--- src/version.c Tue Nov 11 21:54:14 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 33, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +234. You started college as a chemistry major, and walk out four years + later as an Internet provider. + + /// 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/7.2.034 b/7.2.034 new file mode 100644 index 00000000..957fb35d --- /dev/null +++ b/7.2.034 @@ -0,0 +1,81 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.034 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.034 +Problem: Memory leak in spell info when deleting buffer. +Solution: Free the memory. (Dominique Pelle) +Files: src/buffer.c + + +*** ../vim-7.2.033/src/buffer.c Mon Sep 1 17:32:40 2008 +--- src/buffer.c Wed Nov 12 11:21:49 2008 +*************** +*** 647,652 **** +--- 647,655 ---- + vim_free(buf->b_start_fenc); + buf->b_start_fenc = NULL; + #endif ++ #ifdef FEAT_SPELL ++ ga_clear(&buf->b_langp); ++ #endif + } + + /* +*************** +*** 1237,1243 **** + * "buf" if one exists */ + if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf)) + return OK; +! /* If 'switchbuf' contians "usetab": jump to first window in any tab + * page containing "buf" if one exists */ + if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf)) + return OK; +--- 1240,1246 ---- + * "buf" if one exists */ + if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf)) + return OK; +! /* If 'switchbuf' contains "usetab": jump to first window in any tab + * page containing "buf" if one exists */ + if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf)) + return OK; +*************** +*** 3964,3970 **** + width = vim_strsize(out); + if (maxwidth > 0 && width > maxwidth) + { +! /* Result is too long, must trunctate somewhere. */ + l = 0; + if (itemcnt == 0) + s = out; +--- 3967,3973 ---- + width = vim_strsize(out); + if (maxwidth > 0 && width > maxwidth) + { +! /* Result is too long, must truncate somewhere. */ + l = 0; + if (itemcnt == 0) + s = out; +*** ../vim-7.2.033/src/version.c Tue Nov 11 21:55:29 2008 +--- src/version.c Wed Nov 12 12:51:21 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 34, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +236. You start saving URL's in your digital watch. + + /// 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/7.2.035 b/7.2.035 new file mode 100644 index 00000000..e8c73915 --- /dev/null +++ b/7.2.035 @@ -0,0 +1,128 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.035 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.035 +Problem: Mismatches between alloc/malloc, free/vim_free, + realloc/vim_realloc. +Solution: Use the right function. (Dominique Pelle) +Files: src/gui_x11.c, src/mbyte.c, src/misc2.c, src/os_unix.c + + +*** ../vim-7.2.034/src/gui_x11.c Fri Jun 20 11:59:25 2008 +--- src/gui_x11.c Wed Nov 12 11:47:03 2008 +*************** +*** 2450,2456 **** + *colorPtr = colortable[closest]; + } + +! free(colortable); + return OK; + } + +--- 2450,2456 ---- + *colorPtr = colortable[closest]; + } + +! vim_free(colortable); + return OK; + } + +*** ../vim-7.2.034/src/mbyte.c Sat Sep 6 16:44:06 2008 +--- src/mbyte.c Wed Nov 12 11:24:14 2008 +*************** +*** 5384,5390 **** + draw_feedback = (char *)alloc(draw_data->chg_first + + text->length); + else +! draw_feedback = realloc(draw_feedback, + draw_data->chg_first + text->length); + if (draw_feedback != NULL) + { +--- 5384,5390 ---- + draw_feedback = (char *)alloc(draw_data->chg_first + + text->length); + else +! draw_feedback = vim_realloc(draw_feedback, + draw_data->chg_first + text->length); + if (draw_feedback != NULL) + { +*** ../vim-7.2.034/src/misc2.c Sat Sep 6 16:44:06 2008 +--- src/misc2.c Wed Nov 12 11:42:51 2008 +*************** +*** 873,879 **** + /* 3. check for available memory: call mch_avail_mem() */ + if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing) + { +! vim_free((char *)p); /* System is low... no go! */ + p = NULL; + } + else +--- 873,879 ---- + /* 3. check for available memory: call mch_avail_mem() */ + if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing) + { +! free((char *)p); /* System is low... no go! */ + p = NULL; + } + else +*** ../vim-7.2.034/src/os_unix.c Wed Aug 6 18:45:01 2008 +--- src/os_unix.c Wed Nov 12 11:55:33 2008 +*************** +*** 2905,2911 **** + * Ignore any errors. + */ + #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK) +! signal_stack = malloc(SIGSTKSZ); + init_signal_stack(); + #endif + } +--- 2905,2911 ---- + * Ignore any errors. + */ + #if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK) +! signal_stack = (char *)alloc(SIGSTKSZ); + init_signal_stack(); + #endif + } +*************** +*** 6814,6820 **** + if (xsmp_icefd != -1) + { + SmcCloseConnection(xsmp.smcconn, 0, NULL); +! vim_free(xsmp.clientid); + xsmp.clientid = NULL; + xsmp_icefd = -1; + } +--- 6815,6822 ---- + if (xsmp_icefd != -1) + { + SmcCloseConnection(xsmp.smcconn, 0, NULL); +! if (xsmp.clientid != NULL) +! free(xsmp.clientid); + xsmp.clientid = NULL; + xsmp_icefd = -1; + } +*** ../vim-7.2.034/src/version.c Wed Nov 12 12:51:38 2008 +--- src/version.c Wed Nov 12 13:05:40 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 35, + /**/ + +-- +You can tune a file system, but you can't tuna fish + -- man tunefs + + /// 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/7.2.036 b/7.2.036 new file mode 100644 index 00000000..4db2a26f --- /dev/null +++ b/7.2.036 @@ -0,0 +1,276 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.036 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.036 (extra) +Problem: Mismatches between alloc/malloc, free/vim_free, + realloc/vim_realloc. +Solution: Use the right function. (Dominique Pelle) +Files: src/gui_riscos.c, src/gui_w48.c, src/mbyte.c, src/os_vms.c, + src/os_w32exe.c, src/os_win16.c + + +*** ../vim-7.2.035/src/gui_riscos.c Thu May 10 19:33:26 2007 +--- src/gui_riscos.c Wed Nov 12 11:47:54 2008 +*************** +*** 695,701 **** + gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction) + int width; /* In OS units */ + int height; +! int min_width; /* Smallest permissable window size (ignored) */ + int min_height; + int base_width; /* Space for scroll bars, etc */ + int base_height; +--- 695,701 ---- + gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction) + int width; /* In OS units */ + int height; +! int min_width; /* Smallest permissible window size (ignored) */ + int min_height; + int base_width; /* Space for scroll bars, etc */ + int base_height; +*************** +*** 863,869 **** + if (strncmp(file, "ZapFont\015", 8) == 0) + return file; /* Loaded OK! */ + +! free(file); + return NULL; /* Not a valid font file */ + } + +--- 863,869 ---- + if (strncmp(file, "ZapFont\015", 8) == 0) + return file; /* Loaded OK! */ + +! vim_free(file); + return NULL; /* Not a valid font file */ + } + +*** ../vim-7.2.035/src/gui_w48.c Thu Jul 24 20:50:23 2008 +--- src/gui_w48.c Wed Nov 12 11:37:41 2008 +*************** +*** 3335,3341 **** + + /* + * Convert the string s to the proper format for a filter string by replacing +! * the \t and \n delimeters with \0. + * Returns the converted string in allocated memory. + * + * Keep in sync with convert_filterW() above! +--- 3335,3341 ---- + + /* + * Convert the string s to the proper format for a filter string by replacing +! * the \t and \n delimiters with \0. + * Returns the converted string in allocated memory. + * + * Keep in sync with convert_filterW() above! +*************** +*** 3674,3680 **** + * Use "prog" as the name of the program and "cmdline" as the arguments. + * Copy the arguments to allocated memory. + * Return the number of arguments (including program name). +! * Return pointers to the arguments in "argvp". + * Return pointer to buffer in "tofree". + * Returns zero when out of memory. + */ +--- 3674,3681 ---- + * Use "prog" as the name of the program and "cmdline" as the arguments. + * Copy the arguments to allocated memory. + * Return the number of arguments (including program name). +! * Return pointers to the arguments in "argvp". Memory is allocated with +! * malloc(), use free() instead of vim_free(). + * Return pointer to buffer in "tofree". + * Returns zero when out of memory. + */ +*************** +*** 3692,3697 **** +--- 3693,3700 ---- + char **argv = NULL; + int round; + ++ *tofree = NULL; ++ + #ifdef FEAT_MBYTE + /* Try using the Unicode version first, it takes care of conversion when + * 'encoding' is changed. */ +*************** +*** 3802,3816 **** + argv = (char **)malloc((argc + 1) * sizeof(char *)); + if (argv == NULL ) + { +! vim_free(newcmdline); + return 0; /* malloc error */ + } + pnew = newcmdline; + } + } + + done: +- + argv[argc] = NULL; /* NULL-terminated list */ + *argvp = argv; + return argc; +--- 3805,3819 ---- + argv = (char **)malloc((argc + 1) * sizeof(char *)); + if (argv == NULL ) + { +! free(newcmdline); + return 0; /* malloc error */ + } + pnew = newcmdline; ++ *tofree = newcmdline; + } + } + + done: + argv[argc] = NULL; /* NULL-terminated list */ + *argvp = argv; + return argc; +*** ../vim-7.2.035/src/os_vms.c Wed Aug 6 18:38:52 2008 +--- src/os_vms.c Wed Nov 12 11:42:12 2008 +*************** +*** 228,234 **** + else if ((sbuf = getenv((char *)lognam))) + { + lengte = strlen(sbuf) + 1; +! cp = (char_u *)malloc((size_t)lengte); + if (cp) + strcpy((char *)cp, sbuf); + return cp; +--- 228,234 ---- + else if ((sbuf = getenv((char *)lognam))) + { + lengte = strlen(sbuf) + 1; +! cp = (char_u *)alloc((size_t)lengte); + if (cp) + strcpy((char *)cp, sbuf); + return cp; +*************** +*** 381,387 **** + if (--vms_match_free == 0) { + /* add more space to store matches */ + vms_match_alloced += EXPL_ALLOC_INC; +! vms_fmatch = (char_u **)realloc(vms_fmatch, + sizeof(char **) * vms_match_alloced); + if (!vms_fmatch) + return 0; +--- 381,387 ---- + if (--vms_match_free == 0) { + /* add more space to store matches */ + vms_match_alloced += EXPL_ALLOC_INC; +! vms_fmatch = (char_u **)vim_realloc(vms_fmatch, + sizeof(char **) * vms_match_alloced); + if (!vms_fmatch) + return 0; +*************** +*** 460,466 **** + if (--files_free < 1) + { + files_alloced += EXPL_ALLOC_INC; +! *file = (char_u **)realloc(*file, + sizeof(char_u **) * files_alloced); + if (*file == NULL) + { +--- 460,466 ---- + if (--files_free < 1) + { + files_alloced += EXPL_ALLOC_INC; +! *file = (char_u **)vim_realloc(*file, + sizeof(char_u **) * files_alloced); + if (*file == NULL) + { +*************** +*** 614,627 **** + { + buflen = len + 128; + if (buf) +! buf = (char *)realloc(buf, buflen); + else +! buf = (char *)calloc(buflen, sizeof(char)); + } + + #ifdef DEBUG + char *tmpbuf = NULL; +! tmpbuf = (char *)calloc(buflen, sizeof(char)); + strcpy(tmpbuf, instring); + #endif + +--- 614,627 ---- + { + buflen = len + 128; + if (buf) +! buf = (char *)vim_realloc(buf, buflen); + else +! buf = (char *)alloc(buflen * sizeof(char)); + } + + #ifdef DEBUG + char *tmpbuf = NULL; +! tmpbuf = (char *)alloc(buflen * sizeof(char)); + strcpy(tmpbuf, instring); + #endif + +*** ../vim-7.2.035/src/os_w32exe.c Fri Jul 1 00:06:20 2005 +--- src/os_w32exe.c Wed Nov 12 11:45:43 2008 +*************** +*** 129,135 **** + errout: + #endif + free(argv); +! free(tofree); + #ifdef FEAT_MBYTE + free_cmd_argsW(); + #endif +--- 129,136 ---- + errout: + #endif + free(argv); +! if (tofree != NULL) +! free(tofree); + #ifdef FEAT_MBYTE + free_cmd_argsW(); + #endif +*** ../vim-7.2.035/src/os_win16.c Wed Jun 25 00:49:34 2008 +--- src/os_win16.c Wed Nov 12 11:45:53 2008 +*************** +*** 121,127 **** + pmain(argc, argv); + + free(argv); +! free(tofree); + + return 0; + } +--- 121,128 ---- + pmain(argc, argv); + + free(argv); +! if (tofree != NULL) +! free(tofree); + + return 0; + } +*** ../vim-7.2.035/src/version.c Wed Nov 12 13:07:48 2008 +--- src/version.c Wed Nov 12 13:28:51 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 36, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +239. You think "surfing" is something you do on dry land. + + /// 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/7.2.037 b/7.2.037 new file mode 100644 index 00000000..20a43983 --- /dev/null +++ b/7.2.037 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.037 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.037 +Problem: Double free with GTK 1 and compiled with EXITFREE. +Solution: Don't close display. (Dominique Pelle) +Files: src/os_unix.c + + +*** ../vim-7.2.036/src/os_unix.c Wed Nov 12 13:07:48 2008 +--- src/os_unix.c Wed Nov 12 11:55:33 2008 +*************** +*** 2936,2942 **** + } + # endif + # endif +! # ifdef FEAT_X11 + if (x11_display != NULL + # ifdef FEAT_XCLIPBOARD + && x11_display != xterm_dpy +--- 2936,2943 ---- + } + # endif + # endif +! /* Don't close the display for GTK 1, it is done in exit(). */ +! # if defined(FEAT_X11) && (!defined(FEAT_GUI_GTK) || defined(HAVE_GTK2)) + if (x11_display != NULL + # ifdef FEAT_XCLIPBOARD + && x11_display != xterm_dpy +*** ../vim-7.2.036/src/version.c Wed Nov 12 13:35:31 2008 +--- src/version.c Wed Nov 12 14:08:56 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 37, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.038 b/7.2.038 new file mode 100644 index 00000000..449821e8 --- /dev/null +++ b/7.2.038 @@ -0,0 +1,86 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.038 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.038 +Problem: Overlapping arguments to memcpy(). +Solution: Use mch_memmove(). (Dominique Pelle) +Files: src/if_xcmdsrv.c + + +*** ../vim-7.2.037/src/if_xcmdsrv.c Wed Aug 6 18:38:13 2008 +--- src/if_xcmdsrv.c Wed Nov 12 12:09:01 2008 +*************** +*** 736,742 **** + + serverReply.ga_len; + e.id = w; + ga_init2(&e.strings, 1, 100); +! memcpy(p, &e, sizeof(e)); + serverReply.ga_len++; + } + } +--- 736,742 ---- + + serverReply.ga_len; + e.id = w; + ga_init2(&e.strings, 1, 100); +! mch_memmove(p, &e, sizeof(e)); + serverReply.ga_len++; + } + } +*************** +*** 1018,1024 **** + p++; + count = numItems - (p - regProp); + if (count > 0) +! memcpy(entry, p, count); + XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING, + 8, PropModeReplace, regProp, + (int)(numItems - (p - entry))); +--- 1018,1024 ---- + p++; + count = numItems - (p - regProp); + if (count > 0) +! mch_memmove(entry, p, count); + XChangeProperty(dpy, RootWindow(dpy, 0), registryProperty, XA_STRING, + 8, PropModeReplace, regProp, + (int)(numItems - (p - entry))); +*************** +*** 1072,1078 **** + p++; + lastHalf = numItems - (p - regProp); + if (lastHalf > 0) +! memcpy(entry, p, lastHalf); + numItems = (entry - regProp) + lastHalf; + p = entry; + continue; +--- 1072,1078 ---- + p++; + lastHalf = numItems - (p - regProp); + if (lastHalf > 0) +! mch_memmove(entry, p, lastHalf); + numItems = (entry - regProp) + lastHalf; + p = entry; + continue; +*** ../vim-7.2.037/src/version.c Wed Nov 12 14:09:38 2008 +--- src/version.c Wed Nov 12 14:51:00 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 38, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +241. You try to look for Net Search even when you're in File Manager. + + /// 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/7.2.039 b/7.2.039 new file mode 100644 index 00000000..f9cb18eb --- /dev/null +++ b/7.2.039 @@ -0,0 +1,46 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.039 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.039 +Problem: Accessing freed memory on exit when EXITFREE is defined. +Solution: Call hash_init() on the v: hash table. +Files: src/eval.c + + +*** ../vim-7.2.038/src/eval.c Sun Nov 9 17:21:10 2008 +--- src/eval.c Wed Nov 12 12:15:14 2008 +*************** +*** 856,861 **** +--- 856,862 ---- + } + } + hash_clear(&vimvarht); ++ hash_init(&vimvarht); /* garbage_collect() will access it */ + hash_clear(&compat_hashtab); + + /* script-local variables */ +*** ../vim-7.2.038/src/version.c Wed Nov 12 14:52:11 2008 +--- src/version.c Wed Nov 12 15:09:39 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 39, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +242. You turn down a better-paying job because it doesn't come with + a free e-mail account. + + /// 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/7.2.040 b/7.2.040 new file mode 100644 index 00000000..76ea73af --- /dev/null +++ b/7.2.040 @@ -0,0 +1,64 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.040 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.040 +Problem: When using ":e ++ff=dos fname" and the file contains a NL without + a CR before it and 'ffs' contains "unix" then the fileformat + becomes unix. +Solution: Ignore 'ffs' when using the ++ff argument. (Ben Schmidt) + Also remove unreachable code. +Files: src/fileio.c + + +*** ../vim-7.2.039/src/fileio.c Tue Nov 11 21:55:29 2008 +--- src/fileio.c Wed Nov 12 13:19:42 2008 +*************** +*** 932,938 **** +--- 932,941 ---- + else + { + if (eap != NULL && eap->force_ff != 0) ++ { + fileformat = get_fileformat_force(curbuf, eap); ++ try_unix = try_dos = try_mac = FALSE; ++ } + else if (curbuf->b_p_bin) + fileformat = EOL_UNIX; /* binary: use Unix format */ + else if (*p_ffs == NUL) +*************** +*** 2341,2351 **** + STRCAT(IObuff, _("[CR missing]")); + c = TRUE; + } +- if (ff_error == EOL_MAC) +- { +- STRCAT(IObuff, _("[NL found]")); +- c = TRUE; +- } + if (split) + { + STRCAT(IObuff, _("[long lines split]")); +--- 2344,2349 ---- +*** ../vim-7.2.039/src/version.c Wed Nov 12 15:28:37 2008 +--- src/version.c Wed Nov 12 16:03:44 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 40, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.041 b/7.2.041 new file mode 100644 index 00000000..b562206c --- /dev/null +++ b/7.2.041 @@ -0,0 +1,729 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.041 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.041 +Problem: In diff mode, when using two tabs, each with two diffed buffers, + editing a buffer of the other tab messes up the diff. (Matt + Mzyzik) +Solution: Only copy options from a window where the buffer was edited that + doesn't have 'diff' set or is for the current tab page. + Also fix that window options for a buffer are stored with the + wrong window. +Files: src/buffer.c, src/ex_cmds.c, src/ex_cmds2.c, src/ex_docmd.c, + src/ex_getln.c, src/if_sniff.c, src/main.c, src/netbeans.c, + src/normal.c, src/popupmnu.c, src/proto/buffer.pro, + src/proto/ex_cmds.pro src/quickfix.c, src/window.c + + +*** ../vim-7.2.040/src/buffer.c Wed Nov 12 12:51:38 2008 +--- src/buffer.c Wed Nov 12 17:45:01 2008 +*************** +*** 33,39 **** + static char_u *fname_match __ARGS((regprog_T *prog, char_u *name)); + #endif + static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options)); +! static wininfo_T *find_wininfo __ARGS((buf_T *buf)); + #ifdef UNIX + static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st)); + static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp)); +--- 33,39 ---- + static char_u *fname_match __ARGS((regprog_T *prog, char_u *name)); + #endif + static void buflist_setfpos __ARGS((buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options)); +! static wininfo_T *find_wininfo __ARGS((buf_T *buf, int skip_diff_buffer)); + #ifdef UNIX + static buf_T *buflist_findname_stat __ARGS((char_u *ffname, struct stat *st)); + static int otherfile_buf __ARGS((buf_T *buf, char_u *ffname, struct stat *stp)); +*************** +*** 1093,1099 **** + #endif + setpcmark(); + retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, +! forceit ? ECMD_FORCEIT : 0); + + /* + * do_ecmd() may create a new buffer, then we have to delete +--- 1093,1099 ---- + #endif + setpcmark(); + retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, +! forceit ? ECMD_FORCEIT : 0, curwin); + + /* + * do_ecmd() may create a new buffer, then we have to delete +*************** +*** 1316,1322 **** + setpcmark(); + if (!cmdmod.keepalt) + curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */ +! buflist_altfpos(); /* remember curpos */ + + #ifdef FEAT_VISUAL + /* Don't restart Select mode after switching to another buffer. */ +--- 1316,1322 ---- + setpcmark(); + if (!cmdmod.keepalt) + curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */ +! buflist_altfpos(curwin); /* remember curpos */ + + #ifdef FEAT_VISUAL + /* Don't restart Select mode after switching to another buffer. */ +*************** +*** 2404,2425 **** + return; + } + + /* + * Find info for the current window in buffer "buf". + * If not found, return the info for the most recently used window. + * Returns NULL when there isn't any info. + */ + static wininfo_T * +! find_wininfo(buf) + buf_T *buf; + { + wininfo_T *wip; + + for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) +! if (wip->wi_win == curwin) + break; +! if (wip == NULL) /* if no fpos for curwin, use the first in the list */ +! wip = buf->b_wininfo; + return wip; + } + +--- 2404,2473 ---- + return; + } + ++ #ifdef FEAT_DIFF ++ static int wininfo_other_tab_diff __ARGS((wininfo_T *wip)); ++ ++ /* ++ * Return TRUE when "wip" has 'diff' set and the diff is only for another tab ++ * page. That's because a diff is local to a tab page. ++ */ ++ static int ++ wininfo_other_tab_diff(wip) ++ wininfo_T *wip; ++ { ++ win_T *wp; ++ ++ if (wip->wi_opt.wo_diff) ++ { ++ for (wp = firstwin; wp != NULL; wp = wp->w_next) ++ /* return FALSE when it's a window in the current tab page, thus ++ * the buffer was in diff mode here */ ++ if (wip->wi_win == wp) ++ return FALSE; ++ return TRUE; ++ } ++ return FALSE; ++ } ++ #endif ++ + /* + * Find info for the current window in buffer "buf". + * If not found, return the info for the most recently used window. ++ * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in ++ * another tab page. + * Returns NULL when there isn't any info. + */ ++ /*ARGSUSED*/ + static wininfo_T * +! find_wininfo(buf, skip_diff_buffer) + buf_T *buf; ++ int skip_diff_buffer; + { + wininfo_T *wip; + + for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) +! if (wip->wi_win == curwin +! #ifdef FEAT_DIFF +! && (!skip_diff_buffer || !wininfo_other_tab_diff(wip)) +! #endif +! ) + break; +! +! /* If no wininfo for curwin, use the first in the list (that doesn't have +! * 'diff' set and is in another tab page). */ +! if (wip == NULL) +! { +! #ifdef FEAT_DIFF +! if (skip_diff_buffer) +! { +! for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) +! if (!wininfo_other_tab_diff(wip)) +! break; +! } +! else +! #endif +! wip = buf->b_wininfo; +! } + return wip; + } + +*************** +*** 2440,2446 **** + clearFolding(curwin); + #endif + +! wip = find_wininfo(buf); + if (wip != NULL && wip->wi_optset) + { + copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt); +--- 2488,2494 ---- + clearFolding(curwin); + #endif + +! wip = find_wininfo(buf, TRUE); + if (wip != NULL && wip->wi_optset) + { + copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt); +*************** +*** 2472,2478 **** + wininfo_T *wip; + static pos_T no_position = {1, 0}; + +! wip = find_wininfo(buf); + if (wip != NULL) + return &(wip->wi_fpos); + else +--- 2520,2526 ---- + wininfo_T *wip; + static pos_T no_position = {1, 0}; + +! wip = find_wininfo(buf, FALSE); + if (wip != NULL) + return &(wip->wi_fpos); + else +*************** +*** 2793,2806 **** + #endif + + /* +! * Set alternate cursor position for current window. + * Also save the local window option values. + */ + void +! buflist_altfpos() + { +! buflist_setfpos(curbuf, curwin, curwin->w_cursor.lnum, +! curwin->w_cursor.col, TRUE); + } + + /* +--- 2841,2854 ---- + #endif + + /* +! * Set alternate cursor position for the current buffer and window "win". + * Also save the local window option values. + */ + void +! buflist_altfpos(win) +! win_T *win; + { +! buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE); + } + + /* +*************** +*** 4492,4498 **** + ECMD_ONE, + ((P_HID(curwin->w_buffer) + || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0) +! + ECMD_OLDBUF); + #ifdef FEAT_AUTOCMD + if (use_firstwin) + ++autocmd_no_leave; +--- 4540,4546 ---- + ECMD_ONE, + ((P_HID(curwin->w_buffer) + || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0) +! + ECMD_OLDBUF, curwin); + #ifdef FEAT_AUTOCMD + if (use_firstwin) + ++autocmd_no_leave; +*** ../vim-7.2.040/src/ex_cmds.c Sun Nov 9 13:43:25 2008 +--- src/ex_cmds.c Wed Nov 12 22:41:41 2008 +*************** +*** 3052,3058 **** + retval = 0; /* it's in the same file */ + } + else if (do_ecmd(fnum, ffname, sfname, NULL, lnum, +! (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0)) == OK) + retval = -1; /* opened another file */ + else + retval = 1; /* error encountered */ +--- 3052,3059 ---- + retval = 0; /* it's in the same file */ + } + else if (do_ecmd(fnum, ffname, sfname, NULL, lnum, +! (P_HID(curbuf) ? ECMD_HIDE : 0) + (forceit ? ECMD_FORCEIT : 0), +! curwin) == OK) + retval = -1; /* opened another file */ + else + retval = 1; /* error encountered */ +*************** +*** 3085,3101 **** + * ECMD_OLDBUF: use existing buffer if it exists + * ECMD_FORCEIT: ! used for Ex command + * ECMD_ADDBUF: don't edit, just add to buffer list + * + * return FAIL for failure, OK otherwise + */ + int +! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags) + int fnum; + char_u *ffname; + char_u *sfname; + exarg_T *eap; /* can be NULL! */ + linenr_T newlnum; + int flags; + { + int other_file; /* TRUE if editing another file */ + int oldbuf; /* TRUE if using existing buffer */ +--- 3086,3106 ---- + * ECMD_OLDBUF: use existing buffer if it exists + * ECMD_FORCEIT: ! used for Ex command + * ECMD_ADDBUF: don't edit, just add to buffer list ++ * oldwin: Should be "curwin" when editing a new buffer in the current ++ * window, NULL when splitting the window first. When not NULL info ++ * of the previous buffer for "oldwin" is stored. + * + * return FAIL for failure, OK otherwise + */ + int +! do_ecmd(fnum, ffname, sfname, eap, newlnum, flags, oldwin) + int fnum; + char_u *ffname; + char_u *sfname; + exarg_T *eap; /* can be NULL! */ + linenr_T newlnum; + int flags; ++ win_T *oldwin; + { + int other_file; /* TRUE if editing another file */ + int oldbuf; /* TRUE if using existing buffer */ +*************** +*** 3267,3273 **** + { + if (!cmdmod.keepalt) + curwin->w_alt_fnum = curbuf->b_fnum; +! buflist_altfpos(); + } + + if (fnum) +--- 3272,3279 ---- + { + if (!cmdmod.keepalt) + curwin->w_alt_fnum = curbuf->b_fnum; +! if (oldwin != NULL) +! buflist_altfpos(oldwin); + } + + if (fnum) +*************** +*** 3371,3377 **** + + /* close the link to the current buffer */ + u_sync(FALSE); +! close_buffer(curwin, curbuf, + (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD); + + #ifdef FEAT_AUTOCMD +--- 3377,3383 ---- + + /* close the link to the current buffer */ + u_sync(FALSE); +! close_buffer(oldwin, curbuf, + (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD); + + #ifdef FEAT_AUTOCMD +*************** +*** 5609,5615 **** + */ + alt_fnum = curbuf->b_fnum; + (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL, +! ECMD_HIDE + ECMD_SET_HELP); + if (!cmdmod.keepalt) + curwin->w_alt_fnum = alt_fnum; + empty_fnum = curbuf->b_fnum; +--- 5615,5627 ---- + */ + alt_fnum = curbuf->b_fnum; + (void)do_ecmd(0, NULL, NULL, NULL, ECMD_LASTL, +! ECMD_HIDE + ECMD_SET_HELP, +! #ifdef FEAT_WINDOWS +! NULL /* buffer is still open, don't store info */ +! #else +! curwin +! #endif +! ); + if (!cmdmod.keepalt) + curwin->w_alt_fnum = alt_fnum; + empty_fnum = curbuf->b_fnum; +*** ../vim-7.2.040/src/ex_cmds2.c Sun Sep 7 15:49:45 2008 +--- src/ex_cmds2.c Wed Nov 12 17:46:41 2008 +*************** +*** 2132,2139 **** + * argument index. */ + if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL, + eap, ECMD_LAST, +! (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) + +! (eap->forceit ? ECMD_FORCEIT : 0)) == FAIL) + curwin->w_arg_idx = old_arg_idx; + /* like Vi: set the mark where the cursor is in the file. */ + else if (eap->cmdidx != CMD_argdo) +--- 2132,2139 ---- + * argument index. */ + if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL, + eap, ECMD_LAST, +! (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0) +! + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL) + curwin->w_arg_idx = old_arg_idx; + /* like Vi: set the mark where the cursor is in the file. */ + else if (eap->cmdidx != CMD_argdo) +*** ../vim-7.2.040/src/ex_docmd.c Sun Nov 9 13:43:25 2008 +--- src/ex_docmd.c Wed Nov 12 18:04:22 2008 +*************** +*** 7488,7494 **** + /* ":new" or ":tabnew" without argument: edit an new empty buffer */ + setpcmark(); + (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE, +! ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0)); + } + else if ((eap->cmdidx != CMD_split + #ifdef FEAT_VERTSPLIT +--- 7488,7495 ---- + /* ":new" or ":tabnew" without argument: edit an new empty buffer */ + setpcmark(); + (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE, +! ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0), +! old_curwin == NULL ? curwin : NULL); + } + else if ((eap->cmdidx != CMD_split + #ifdef FEAT_VERTSPLIT +*************** +*** 7525,7531 **** + #ifdef FEAT_LISTCMDS + + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 ) + #endif +! ) == FAIL) + { + /* Editing the file failed. If the window was split, close it. */ + #ifdef FEAT_WINDOWS +--- 7526,7532 ---- + #ifdef FEAT_LISTCMDS + + (eap->cmdidx == CMD_badd ? ECMD_ADDBUF : 0 ) + #endif +! , old_curwin == NULL ? curwin : NULL) == FAIL) + { + /* Editing the file failed. If the window was split, close it. */ + #ifdef FEAT_WINDOWS +*** ../vim-7.2.040/src/ex_getln.c Sun Sep 14 14:41:44 2008 +--- src/ex_getln.c Wed Nov 12 18:06:25 2008 +*************** +*** 6051,6057 **** + cmdwin_type = '-'; + + /* Create the command-line buffer empty. */ +! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); + (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE); + set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); + set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); +--- 6051,6057 ---- + cmdwin_type = '-'; + + /* Create the command-line buffer empty. */ +! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL); + (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE); + set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); + set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); +*** ../vim-7.2.040/src/if_sniff.c Sat Aug 9 19:41:16 2008 +--- src/if_sniff.c Wed Nov 12 17:48:46 2008 +*************** +*** 1114,1120 **** + char *fname; + { + ++no_wait_return; +! do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF); + curbuf->b_sniff = TRUE; + --no_wait_return; /* [ex_docmd.c] */ + } +--- 1114,1121 ---- + char *fname; + { + ++no_wait_return; +! do_ecmd(0, (char_u *)fname, NULL, NULL, ECMD_ONE, ECMD_HIDE+ECMD_OLDBUF, +! curwin); + curbuf->b_sniff = TRUE; + --no_wait_return; /* [ex_docmd.c] */ + } +*** ../vim-7.2.040/src/main.c Sun Nov 9 13:43:25 2008 +--- src/main.c Wed Nov 12 17:49:06 2008 +*************** +*** 2588,2594 **** + # endif + (void)do_ecmd(0, arg_idx < GARGCOUNT + ? alist_name(&GARGLIST[arg_idx]) : NULL, +! NULL, NULL, ECMD_LASTL, ECMD_HIDE); + # ifdef HAS_SWAP_EXISTS_ACTION + if (swap_exists_did_quit) + { +--- 2588,2594 ---- + # endif + (void)do_ecmd(0, arg_idx < GARGCOUNT + ? alist_name(&GARGLIST[arg_idx]) : NULL, +! NULL, NULL, ECMD_LASTL, ECMD_HIDE, curwin); + # ifdef HAS_SWAP_EXISTS_ACTION + if (swap_exists_did_quit) + { +*** ../vim-7.2.040/src/netbeans.c Sun Jul 13 19:18:03 2008 +--- src/netbeans.c Wed Nov 12 17:49:40 2008 +*************** +*** 1795,1801 **** + buf->displayname = NULL; + + netbeansReadFile = 0; /* don't try to open disk file */ +! do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF); + netbeansReadFile = 1; + buf->bufp = curbuf; + maketitle(); +--- 1795,1801 ---- + buf->displayname = NULL; + + netbeansReadFile = 0; /* don't try to open disk file */ +! do_ecmd(0, NULL, 0, 0, ECMD_ONE, ECMD_HIDE + ECMD_OLDBUF, curwin); + netbeansReadFile = 1; + buf->bufp = curbuf; + maketitle(); +*************** +*** 1960,1966 **** + + netbeansReadFile = 0; /* don't try to open disk file */ + do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE, +! ECMD_HIDE + ECMD_OLDBUF); + netbeansReadFile = 1; + buf->bufp = curbuf; + maketitle(); +--- 1960,1966 ---- + + netbeansReadFile = 0; /* don't try to open disk file */ + do_ecmd(0, (char_u *)buf->displayname, 0, 0, ECMD_ONE, +! ECMD_HIDE + ECMD_OLDBUF, curwin); + netbeansReadFile = 1; + buf->bufp = curbuf; + maketitle(); +*************** +*** 1979,1985 **** + vim_free(buf->displayname); + buf->displayname = nb_unquote(args, NULL); + do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE, +! ECMD_HIDE + ECMD_OLDBUF); + buf->bufp = curbuf; + buf->initDone = TRUE; + doupdate = 1; +--- 1979,1985 ---- + vim_free(buf->displayname); + buf->displayname = nb_unquote(args, NULL); + do_ecmd(0, (char_u *)buf->displayname, NULL, NULL, ECMD_ONE, +! ECMD_HIDE + ECMD_OLDBUF, curwin); + buf->bufp = curbuf; + buf->initDone = TRUE; + doupdate = 1; +*** ../vim-7.2.040/src/normal.c Sat Nov 1 13:51:57 2008 +--- src/normal.c Wed Nov 12 17:49:50 2008 +*************** +*** 6050,6056 **** + autowrite(curbuf, FALSE); + setpcmark(); + (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST, +! P_HID(curbuf) ? ECMD_HIDE : 0); + if (cap->nchar == 'F' && lnum >= 0) + { + curwin->w_cursor.lnum = lnum; +--- 6050,6056 ---- + autowrite(curbuf, FALSE); + setpcmark(); + (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LAST, +! P_HID(curbuf) ? ECMD_HIDE : 0, curwin); + if (cap->nchar == 'F' && lnum >= 0) + { + curwin->w_cursor.lnum = lnum; +*** ../vim-7.2.040/src/popupmnu.c Sun Jul 13 19:33:51 2008 +--- src/popupmnu.c Wed Nov 12 18:08:07 2008 +*************** +*** 573,579 **** + { + /* Don't want to sync undo in the current buffer. */ + ++no_u_sync; +! res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0); + --no_u_sync; + if (res == OK) + { +--- 573,579 ---- + { + /* Don't want to sync undo in the current buffer. */ + ++no_u_sync; +! res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL); + --no_u_sync; + if (res == OK) + { +*** ../vim-7.2.040/src/proto/buffer.pro Sun May 6 13:57:53 2007 +--- src/proto/buffer.pro Wed Nov 12 17:43:39 2008 +*************** +*** 33,39 **** + char_u *getaltfname __ARGS((int errmsg)); + int buflist_add __ARGS((char_u *fname, int flags)); + void buflist_slash_adjust __ARGS((void)); +! void buflist_altfpos __ARGS((void)); + int otherfile __ARGS((char_u *ffname)); + void buf_setino __ARGS((buf_T *buf)); + void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); +--- 33,39 ---- + char_u *getaltfname __ARGS((int errmsg)); + int buflist_add __ARGS((char_u *fname, int flags)); + void buflist_slash_adjust __ARGS((void)); +! void buflist_altfpos __ARGS((win_T *win)); + int otherfile __ARGS((char_u *ffname)); + void buf_setino __ARGS((buf_T *buf)); + void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); +*** ../vim-7.2.040/src/proto/ex_cmds.pro Sun Nov 9 13:43:25 2008 +--- src/proto/ex_cmds.pro Wed Nov 12 17:44:27 2008 +*************** +*** 27,33 **** + void do_wqall __ARGS((exarg_T *eap)); + int not_writing __ARGS((void)); + int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit)); +! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags)); + void ex_append __ARGS((exarg_T *eap)); + void ex_change __ARGS((exarg_T *eap)); + void ex_z __ARGS((exarg_T *eap)); +--- 27,33 ---- + void do_wqall __ARGS((exarg_T *eap)); + int not_writing __ARGS((void)); + int getfile __ARGS((int fnum, char_u *ffname, char_u *sfname, int setpm, linenr_T lnum, int forceit)); +! int do_ecmd __ARGS((int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T newlnum, int flags, win_T *oldwin)); + void ex_append __ARGS((exarg_T *eap)); + void ex_change __ARGS((exarg_T *eap)); + void ex_z __ARGS((exarg_T *eap)); +*** ../vim-7.2.040/src/quickfix.c Thu Jul 24 18:44:59 2008 +--- src/quickfix.c Wed Nov 12 18:12:00 2008 +*************** +*** 1420,1425 **** +--- 1420,1426 ---- + win_T *win; + win_T *altwin; + #endif ++ win_T *oldwin = curwin; + int print_message = TRUE; + int len; + #ifdef FEAT_FOLDING +*************** +*** 1744,1750 **** + } + else + ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, +! ECMD_HIDE + ECMD_SET_HELP); + } + else + ok = buflist_getfile(qf_ptr->qf_fnum, +--- 1745,1752 ---- + } + else + ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1, +! ECMD_HIDE + ECMD_SET_HELP, +! oldwin == curwin ? curwin : NULL); + } + else + ok = buflist_getfile(qf_ptr->qf_fnum, +*************** +*** 2267,2272 **** +--- 2269,2275 ---- + win_T *win; + tabpage_T *prevtab = curtab; + buf_T *qf_buf; ++ win_T *oldwin = curwin; + + if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) + { +*************** +*** 2326,2339 **** + win->w_llist->qf_refcount++; + } + + if (qf_buf != NULL) + /* Use the existing quickfix buffer */ + (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, +! ECMD_HIDE + ECMD_OLDBUF); + else + { + /* Create a new quickfix buffer */ +! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); + /* switch off 'swapfile' */ + set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); + set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", +--- 2329,2344 ---- + win->w_llist->qf_refcount++; + } + ++ if (oldwin != curwin) ++ oldwin = NULL; /* don't store info when in another window */ + if (qf_buf != NULL) + /* Use the existing quickfix buffer */ + (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, +! ECMD_HIDE + ECMD_OLDBUF, oldwin); + else + { + /* Create a new quickfix buffer */ +! (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin); + /* switch off 'swapfile' */ + set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); + set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", +*** ../vim-7.2.040/src/window.c Wed Aug 6 18:32:11 2008 +--- src/window.c Wed Nov 12 18:12:37 2008 +*************** +*** 531,537 **** + # ifdef FEAT_SCROLLBIND + curwin->w_p_scb = FALSE; + # endif +! (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE); + if (nchar == 'F' && lnum >= 0) + { + curwin->w_cursor.lnum = lnum; +--- 531,538 ---- + # ifdef FEAT_SCROLLBIND + curwin->w_p_scb = FALSE; + # endif +! (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, +! ECMD_HIDE, NULL); + if (nchar == 'F' && lnum >= 0) + { + curwin->w_cursor.lnum = lnum; +*** ../vim-7.2.040/src/version.c Wed Nov 12 16:04:43 2008 +--- src/version.c Wed Nov 12 16:54:35 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 41, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +260. Co-workers have to E-mail you about the fire alarm to get + you out of the building. + + /// 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/7.2.042 b/7.2.042 new file mode 100644 index 00000000..cd2b5689 --- /dev/null +++ b/7.2.042 @@ -0,0 +1,166 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.042 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.042 +Problem: When using winrestview() in a BufWinEnter autocommand the window + is scrolled anyway. (Matt Zyzik) +Solution: Don't recompute topline when above 'scrolloff' from the bottom. + Don't always put the cursor halfway when entering a buffer. Add + "w_topline_was_set". +Files: src/buffer.c, src/move.c, src/structs.h + + +*** ../vim-7.2.041/src/buffer.c Sat Nov 15 14:10:23 2008 +--- src/buffer.c Sat Nov 15 14:58:52 2008 +*************** +*** 1401,1406 **** +--- 1401,1409 ---- + curwin->w_cursor.coladd = 0; + #endif + curwin->w_set_curswant = TRUE; ++ #ifdef FEAT_AUTOCMD ++ curwin->w_topline_was_set = FALSE; ++ #endif + + /* Make sure the buffer is loaded. */ + if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */ +*************** +*** 1440,1446 **** + maketitle(); + #endif + #ifdef FEAT_AUTOCMD +! if (curwin->w_topline == 1) /* when autocmds didn't change it */ + #endif + scroll_cursor_halfway(FALSE); /* redisplay at correct position */ + +--- 1443,1450 ---- + maketitle(); + #endif + #ifdef FEAT_AUTOCMD +! /* when autocmds didn't change it */ +! if (curwin->w_topline == 1 && !curwin->w_topline_was_set) + #endif + scroll_cursor_halfway(FALSE); /* redisplay at correct position */ + +*** ../vim-7.2.041/src/move.c Sun Jul 13 19:25:23 2008 +--- src/move.c Sat Nov 15 14:56:47 2008 +*************** +*** 280,297 **** + + if (curwin->w_botline <= curbuf->b_ml.ml_line_count) + { +! if (curwin->w_cursor.lnum < curwin->w_botline +! && ((long)curwin->w_cursor.lnum + >= (long)curwin->w_botline - p_so + #ifdef FEAT_FOLDING + || hasAnyFolding(curwin) + #endif + )) +! { + lineoff_T loff; + +! /* Cursor is above botline, check if there are 'scrolloff' +! * window lines below the cursor. If not, need to scroll. */ + n = curwin->w_empty_rows; + loff.lnum = curwin->w_cursor.lnum; + #ifdef FEAT_FOLDING +--- 280,299 ---- + + if (curwin->w_botline <= curbuf->b_ml.ml_line_count) + { +! if (curwin->w_cursor.lnum < curwin->w_botline) +! { +! if (((long)curwin->w_cursor.lnum + >= (long)curwin->w_botline - p_so + #ifdef FEAT_FOLDING + || hasAnyFolding(curwin) + #endif + )) +! { + lineoff_T loff; + +! /* Cursor is (a few lines) above botline, check if there are +! * 'scrolloff' window lines below the cursor. If not, need to +! * scroll. */ + n = curwin->w_empty_rows; + loff.lnum = curwin->w_cursor.lnum; + #ifdef FEAT_FOLDING +*************** +*** 317,322 **** +--- 319,328 ---- + if (n >= p_so) + /* sufficient context, no need to scroll */ + check_botline = FALSE; ++ } ++ else ++ /* sufficient context, no need to scroll */ ++ check_botline = FALSE; + } + if (check_botline) + { +*************** +*** 509,514 **** +--- 515,523 ---- + /* Approximate the value of w_botline */ + wp->w_botline += lnum - wp->w_topline; + wp->w_topline = lnum; ++ #ifdef FEAT_AUTOCMD ++ wp->w_topline_was_set = TRUE; ++ #endif + #ifdef FEAT_DIFF + wp->w_topfill = 0; + #endif +*** ../vim-7.2.041/src/structs.h Sun Nov 9 13:43:25 2008 +--- src/structs.h Sat Nov 15 14:56:42 2008 +*************** +*** 1784,1793 **** + #endif + + /* +! * The next three specify the offsets for displaying the buffer: + */ + linenr_T w_topline; /* buffer line number of the line at the + top of the window */ + #ifdef FEAT_DIFF + int w_topfill; /* number of filler lines above w_topline */ + int w_old_topfill; /* w_topfill at last redraw */ +--- 1784,1798 ---- + #endif + + /* +! * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for +! * displaying the buffer. + */ + linenr_T w_topline; /* buffer line number of the line at the + top of the window */ ++ #ifdef FEAT_AUTOCMD ++ char w_topline_was_set; /* flag set to TRUE when topline is set, ++ e.g. by winrestview() */ ++ #endif + #ifdef FEAT_DIFF + int w_topfill; /* number of filler lines above w_topline */ + int w_old_topfill; /* w_topfill at last redraw */ +*** ../vim-7.2.041/src/version.c Sat Nov 15 14:10:23 2008 +--- src/version.c Sat Nov 15 16:01:29 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 42, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +261. You find diskettes in your pockets when doing laundry. + + /// 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/7.2.043 b/7.2.043 new file mode 100644 index 00000000..5c522547 --- /dev/null +++ b/7.2.043 @@ -0,0 +1,78 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.043 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.043 +Problem: VMS: Too many characters are escaped in filename and shell + commands. +Solution: Escape fewer characters. (Zoltan Arpadffy) +Files: src/vim.h + + +*** ../vim-7.2.042/src/vim.h Sun Nov 9 13:43:25 2008 +--- src/vim.h Fri Nov 14 21:41:17 2008 +*************** +*** 341,348 **** + #ifdef BACKSLASH_IN_FILENAME + # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<") + #else +! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<") +! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&") + #endif + + #define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */ +--- 341,354 ---- + #ifdef BACKSLASH_IN_FILENAME + # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<") + #else +! # ifdef VMS +! /* VMS allows a lot of characters in the file name */ +! # define PATH_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'\"|!") +! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?{`\\%#'|!()&") +! # else +! # define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<") +! # define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&") +! # endif + #endif + + #define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */ +*************** +*** 370,376 **** + * Define __w64 as an empty token for everything but MSVC 7.x or later. + */ + # if !defined(_MSC_VER) || (_MSC_VER < 1300) +! # define __w64 + # endif + typedef unsigned long __w64 long_u; + typedef long __w64 long_i; +--- 376,382 ---- + * Define __w64 as an empty token for everything but MSVC 7.x or later. + */ + # if !defined(_MSC_VER) || (_MSC_VER < 1300) +! # define __w64 + # endif + typedef unsigned long __w64 long_u; + typedef long __w64 long_i; +*** ../vim-7.2.042/src/version.c Sat Nov 15 16:05:30 2008 +--- src/version.c Thu Nov 20 10:23:51 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 43, + /**/ + +-- +In his lifetime van Gogh painted 486 oil paintings. Oddly enough, 8975 +of them are to be found in the United States. + + /// 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/7.2.044 b/7.2.044 new file mode 100644 index 00000000..4cfe651e --- /dev/null +++ b/7.2.044 @@ -0,0 +1,161 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.044 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.044 +Problem: Crash because of STRCPY() being over protective of the destination + size. (Dominique Pelle) +Solution: Add -D_FORTIFY_SOURCE=1 to CFLAGS. Use an intermediate variable + for the pointer to avoid a warning. +Files: src/auto/configure, src/configure.in, src/eval.c + + +*** ../vim-7.2.043/src/auto/configure Thu Jul 24 17:20:50 2008 +--- src/auto/configure Sun Nov 16 17:08:44 2008 +*************** +*** 16819,16839 **** + LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" + fi + +- { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5 +- $as_echo_n "checking for GCC 3 or later... " >&6; } + DEPEND_CFLAGS_FILTER= + if test "$GCC" = yes; then + gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'` + if test "$gccmajor" -gt "2"; then + DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" +! fi +! fi +! if test "$DEPEND_CFLAGS_FILTER" = ""; then +! { $as_echo "$as_me:$LINENO: result: no" >&5 + $as_echo "no" >&6; } +! else +! { $as_echo "$as_me:$LINENO: result: yes" >&5 + $as_echo "yes" >&6; } + fi + + +--- 16819,16847 ---- + LDFLAGS="$LDFLAGS -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" + fi + + DEPEND_CFLAGS_FILTER= + if test "$GCC" = yes; then ++ { $as_echo "$as_me:$LINENO: checking for GCC 3 or later" >&5 ++ $as_echo_n "checking for GCC 3 or later... " >&6; } + gccmajor=`echo "$gccversion" | sed -e 's/^\([1-9]\)\..*$/\1/g'` + if test "$gccmajor" -gt "2"; then + DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" +! { $as_echo "$as_me:$LINENO: result: yes" >&5 +! $as_echo "yes" >&6; } +! else +! { $as_echo "$as_me:$LINENO: result: no" >&5 + $as_echo "no" >&6; } +! fi +! { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5 +! $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; } +! if test "$gccmajor" -gt "3"; then +! CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" +! { $as_echo "$as_me:$LINENO: result: yes" >&5 + $as_echo "yes" >&6; } ++ else ++ { $as_echo "$as_me:$LINENO: result: no" >&5 ++ $as_echo "no" >&6; } ++ fi + fi + + +*** ../vim-7.2.043/src/configure.in Thu Jul 24 17:20:31 2008 +--- src/configure.in Sun Nov 16 17:08:40 2008 +*************** +*** 3152,3169 **** + dnl But only when making dependencies, cproto and lint don't take "-isystem". + dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow + dnl the number before the version number. +- AC_MSG_CHECKING(for GCC 3 or later) + DEPEND_CFLAGS_FILTER= + if test "$GCC" = yes; then + gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'` + if test "$gccmajor" -gt "2"; then + DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" + fi +- fi +- if test "$DEPEND_CFLAGS_FILTER" = ""; then +- AC_MSG_RESULT(no) +- else +- AC_MSG_RESULT(yes) + fi + AC_SUBST(DEPEND_CFLAGS_FILTER) + +--- 3152,3176 ---- + dnl But only when making dependencies, cproto and lint don't take "-isystem". + dnl Mac gcc returns "powerpc-apple-darwin8-gcc-4.0.1 (GCC)...", need to allow + dnl the number before the version number. + DEPEND_CFLAGS_FILTER= + if test "$GCC" = yes; then ++ AC_MSG_CHECKING(for GCC 3 or later) + gccmajor=`echo "$gccversion" | sed -e 's/^\([[1-9]]\)\..*$/\1/g'` + if test "$gccmajor" -gt "2"; then + DEPEND_CFLAGS_FILTER="| sed 's+-I */+-isystem /+g'" ++ AC_MSG_RESULT(yes) ++ else ++ AC_MSG_RESULT(no) ++ fi ++ dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is ++ dnl declared as char x[1] but actually longer. Introduced in gcc 4.0. ++ AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1) ++ if test "$gccmajor" -gt "3"; then ++ CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" ++ AC_MSG_RESULT(yes) ++ else ++ AC_MSG_RESULT(no) + fi + fi + AC_SUBST(DEPEND_CFLAGS_FILTER) + +*** ../vim-7.2.043/src/eval.c Wed Nov 12 15:28:37 2008 +--- src/eval.c Sun Nov 16 20:46:28 2008 +*************** +*** 21150,21157 **** + init_var_dict(&fc.l_avars, &fc.l_avars_var); + add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0", + (varnumber_T)(argcount - fp->uf_args.ga_len)); + v = &fc.fixvar[fixvar_idx++].var; +! STRCPY(v->di_key, "000"); + v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; + hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v)); + v->di_tv.v_type = VAR_LIST; +--- 21150,21160 ---- + init_var_dict(&fc.l_avars, &fc.l_avars_var); + add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0", + (varnumber_T)(argcount - fp->uf_args.ga_len)); ++ /* Use "name" to avoid a warning from some compiler that checks the ++ * destination size. */ + v = &fc.fixvar[fixvar_idx++].var; +! name = v->di_key; +! STRCPY(name, "000"); + v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; + hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v)); + v->di_tv.v_type = VAR_LIST; +*** ../vim-7.2.043/src/version.c Thu Nov 20 10:26:19 2008 +--- src/version.c Thu Nov 20 10:34:31 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 44, + /**/ + +-- +Error:015 - Unable to exit Windows. Try the door. + + /// 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/7.2.045 b/7.2.045 new file mode 100644 index 00000000..cf37908d --- /dev/null +++ b/7.2.045 @@ -0,0 +1,67 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.045 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.045 +Problem: The Python interface has an empty entry in sys.path. +Solution: Filter out the empty entry. (idea from James Vega) +Files: src/if_python.c + + +*** ../vim-7.2.044/src/if_python.c Thu Jul 24 16:24:48 2008 +--- src/if_python.c Thu Nov 20 11:03:53 2008 +*************** +*** 531,536 **** +--- 531,542 ---- + if (PythonMod_Init()) + goto fail; + ++ /* Remove the element from sys.path that was added because of our ++ * argv[0] value in PythonMod_Init(). Previously we used an empty ++ * string, but dependinding on the OS we then get an empty entry or ++ * the current directory in sys.path. */ ++ PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)"); ++ + /* the first python thread is vim's, release the lock */ + Python_SaveThread(); + +*************** +*** 2345,2351 **** + { + PyObject *mod; + PyObject *dict; +! static char *(argv[2]) = {"", NULL}; + + /* Fixups... */ + BufferType.ob_type = &PyType_Type; +--- 2351,2358 ---- + { + PyObject *mod; + PyObject *dict; +! /* The special value is removed from sys.path in Python_Init(). */ +! static char *(argv[2]) = {"/must>not&exist/foo", NULL}; + + /* Fixups... */ + BufferType.ob_type = &PyType_Type; +*** ../vim-7.2.044/src/version.c Thu Nov 20 10:36:04 2008 +--- src/version.c Thu Nov 20 10:58:11 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 45, + /**/ + +-- +press CTRL-ALT-DEL for more information + + /// 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/7.2.046 b/7.2.046 new file mode 100644 index 00000000..335f814d --- /dev/null +++ b/7.2.046 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.046 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.046 +Problem: Wrong check for filling buffer with encoding. (Danek Duvall) +Solution: Remove pointers. (Dominique Pelle) +Files: src/mbyte.c + + +*** ../vim-7.2.045/src/mbyte.c Wed Nov 12 13:07:48 2008 +--- src/mbyte.c Wed Nov 19 21:44:50 2008 +*************** +*** 3131,3137 **** + else + s = p + 1; + } +! for (i = 0; s[i] != NUL && s + i < buf + sizeof(buf) - 1; ++i) + { + if (s[i] == '_' || s[i] == '-') + buf[i] = '-'; +--- 3131,3137 ---- + else + s = p + 1; + } +! for (i = 0; s[i] != NUL && i < sizeof(buf) - 1; ++i) + { + if (s[i] == '_' || s[i] == '-') + buf[i] = '-'; +*** ../vim-7.2.045/src/version.c Thu Nov 20 11:04:01 2008 +--- src/version.c Thu Nov 20 11:54:23 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 46, + /**/ + +-- + He was not in the least bit scared to be mashed into a pulp + Or to have his eyes gouged out and his elbows broken; + To have his kneecaps split and his body burned away + And his limbs all hacked and mangled, 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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.047 b/7.2.047 new file mode 100644 index 00000000..5826d2a9 --- /dev/null +++ b/7.2.047 @@ -0,0 +1,88 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.047 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.047 +Problem: Starting Vim with the -nb argument while it's not supported causes + the other side to hang. +Solution: When -nb is used while it's not supported exit Vim. (Xavier de + Gaye) +Files: src/main.c, src/vim.h + + +*** ../vim-7.2.046/src/main.c Sat Nov 15 14:10:23 2008 +--- src/main.c Thu Nov 20 14:09:27 2008 +*************** +*** 1510,1516 **** + early_arg_scan(parmp) + mparm_T *parmp; + { +! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) + int argc = parmp->argc; + char **argv = parmp->argv; + int i; +--- 1510,1517 ---- + early_arg_scan(parmp) + mparm_T *parmp; + { +! #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \ +! || !defined(FEAT_NETBEANS_INTG) + int argc = parmp->argc; + char **argv = parmp->argv; + int i; +*************** +*** 1582,1587 **** +--- 1583,1596 ---- + else if (STRICMP(argv[i], "--echo-wid") == 0) + echo_wid_arg = TRUE; + # endif ++ # ifndef FEAT_NETBEANS_INTG ++ else if (strncmp(argv[i], "-nb", (size_t)3) == 0) ++ { ++ mch_errmsg(_("'-nb' cannot be used: not enabled at compile time\n")); ++ mch_exit(2); ++ } ++ # endif ++ + } + #endif + } +*** ../vim-7.2.046/src/vim.h Thu Nov 20 10:26:19 2008 +--- src/vim.h Thu Nov 20 12:06:14 2008 +*************** +*** 1986,1991 **** +--- 1986,1994 ---- + # endif + #endif + ++ #ifndef FEAT_NETBEANS_INTG ++ # undef NBDEBUG ++ #endif + #ifdef NBDEBUG /* Netbeans debugging. */ + # include "nbdebug.h" + #else +*** ../vim-7.2.046/src/version.c Thu Nov 20 11:55:53 2008 +--- src/version.c Thu Nov 20 14:07:57 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 47, + /**/ + +-- +FIRST HEAD: Oh! quick! get the sword out I want to cut his head off. +THIRD HEAD: Oh, cut your own head off. +SECOND HEAD: Yes - do us all a favour. + "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/7.2.048 b/7.2.048 new file mode 100644 index 00000000..3975308b --- /dev/null +++ b/7.2.048 @@ -0,0 +1,160 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.048 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.048 +Problem: v:prevcount is changed too often. Counts are not multiplied when + setting v:count. +Solution: Set v:prevcount properly. Multiply counts. (idea by Ben Schmidt) +Files: src/eval.c, src/normal.c, src/proto/eval.pro + + +*** ../vim-7.2.047/src/eval.c Thu Nov 20 10:36:04 2008 +--- src/eval.c Thu Nov 20 15:53:47 2008 +*************** +*** 18146,18159 **** + } + + /* +! * Set v:count, v:count1 and v:prevcount. + */ + void +! set_vcount(count, count1) + long count; + long count1; + { +! vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr; + vimvars[VV_COUNT].vv_nr = count; + vimvars[VV_COUNT1].vv_nr = count1; + } +--- 18146,18162 ---- + } + + /* +! * Set v:count to "count" and v:count1 to "count1". +! * When "set_prevcount" is TRUE first set v:prevcount from v:count. + */ + void +! set_vcount(count, count1, set_prevcount) + long count; + long count1; ++ int set_prevcount; + { +! if (set_prevcount) +! vimvars[VV_PREVCOUNT].vv_nr = vimvars[VV_COUNT].vv_nr; + vimvars[VV_COUNT].vv_nr = count; + vimvars[VV_COUNT1].vv_nr = count1; + } +*** ../vim-7.2.047/src/normal.c Sat Nov 15 14:10:23 2008 +--- src/normal.c Thu Nov 20 16:04:44 2008 +*************** +*** 580,585 **** +--- 580,588 ---- + static int old_mapped_len = 0; + #endif + int idx; ++ #ifdef FEAT_EVAL ++ int set_prevcount = FALSE; ++ #endif + + vim_memset(&ca, 0, sizeof(ca)); /* also resets ca.retval */ + ca.oap = oap; +*************** +*** 615,621 **** +--- 618,629 ---- + /* When not finishing an operator and no register name typed, reset the + * count. */ + if (!finish_op && !oap->regname) ++ { + ca.opcount = 0; ++ #ifdef FEAT_EVAL ++ set_prevcount = TRUE; ++ #endif ++ } + + #ifdef FEAT_AUTOCMD + /* Restore counts from before receiving K_CURSORHOLD. This means after +*************** +*** 719,725 **** + * command, so that v:count can be used in an expression mapping + * right after the count. */ + if (toplevel && stuff_empty()) +! set_vcount(ca.count0, ca.count0 == 0 ? 1 : ca.count0); + #endif + if (ctrl_w) + { +--- 727,741 ---- + * command, so that v:count can be used in an expression mapping + * right after the count. */ + if (toplevel && stuff_empty()) +! { +! long count = ca.count0; +! +! /* multiply with ca.opcount the same way as below */ +! if (ca.opcount != 0) +! count = ca.opcount * (count == 0 ? 1 : count); +! set_vcount(count, count == 0 ? 1 : count, set_prevcount); +! set_prevcount = FALSE; /* only set v:prevcount once */ +! } + #endif + if (ctrl_w) + { +*************** +*** 806,812 **** + * Only set v:count when called from main() and not a stuffed command. + */ + if (toplevel && stuff_empty()) +! set_vcount(ca.count0, ca.count1); + #endif + + /* +--- 822,828 ---- + * Only set v:count when called from main() and not a stuffed command. + */ + if (toplevel && stuff_empty()) +! set_vcount(ca.count0, ca.count1, set_prevcount); + #endif + + /* +*** ../vim-7.2.047/src/proto/eval.pro Sun Nov 9 13:43:25 2008 +--- src/proto/eval.pro Thu Nov 20 15:53:54 2008 +*************** +*** 61,67 **** + long get_vim_var_nr __ARGS((int idx)); + char_u *get_vim_var_str __ARGS((int idx)); + list_T *get_vim_var_list __ARGS((int idx)); +! void set_vcount __ARGS((long count, long count1)); + void set_vim_var_string __ARGS((int idx, char_u *val, int len)); + void set_vim_var_list __ARGS((int idx, list_T *val)); + void set_reg_var __ARGS((int c)); +--- 61,67 ---- + long get_vim_var_nr __ARGS((int idx)); + char_u *get_vim_var_str __ARGS((int idx)); + list_T *get_vim_var_list __ARGS((int idx)); +! void set_vcount __ARGS((long count, long count1, int set_prevcount)); + void set_vim_var_string __ARGS((int idx, char_u *val, int len)); + void set_vim_var_list __ARGS((int idx, list_T *val)); + void set_reg_var __ARGS((int c)); +*** ../vim-7.2.047/src/version.c Thu Nov 20 14:11:47 2008 +--- src/version.c Thu Nov 20 16:08:19 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 48, + /**/ + +-- +Microsoft's definition of a boolean: TRUE, FALSE, MAYBE +"Embrace and extend"...? + + /// 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/7.2.049 b/7.2.049 new file mode 100644 index 00000000..0f6efa87 --- /dev/null +++ b/7.2.049 @@ -0,0 +1,1193 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.049 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.049 (extra) +Problem: Win32: the clipboard doesn't support UTF-16. +Solution: Change UCS-2 support to UTF-16 support. (Jia Yanwei) +Files: src/gui_w32.c, src/gui_w48.c, src/mbyte.c, src/misc1.c, + src/os_mswin.c, src/os_win32.c, src/proto/os_mswin.pro + + +*** ../vim-7.2.048/src/gui_w32.c Tue Jun 24 23:46:14 2008 +--- src/gui_w32.c Thu Nov 20 16:47:10 2008 +*************** +*** 992,998 **** + SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, + 0, 500); + +! tt_text = enc_to_ucs2(str, NULL); + lpdi->lpszText = tt_text; + /* can't show tooltip if failed */ + } +--- 992,998 ---- + SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, + 0, 500); + +! tt_text = enc_to_utf16(str, NULL); + lpdi->lpszText = tt_text; + /* can't show tooltip if failed */ + } +*************** +*** 1935,1941 **** + if (buf == NULL) + return NULL; + +! convbuf = ucs2_to_enc(buf, lenp); + pImmReleaseContext(hwnd, hIMC); + vim_free(buf); + return convbuf; +--- 1935,1941 ---- + if (buf == NULL) + return NULL; + +! convbuf = utf16_to_enc(buf, lenp); + pImmReleaseContext(hwnd, hIMC); + vim_free(buf); + return convbuf; +*************** +*** 2566,2572 **** + { + /* 'encoding' differs from active codepage: convert menu name + * and use wide function */ +! wn = enc_to_ucs2(menu->name, NULL); + if (wn != NULL) + { + MENUITEMINFOW infow; +--- 2566,2572 ---- + { + /* 'encoding' differs from active codepage: convert menu name + * and use wide function */ +! wn = enc_to_utf16(menu->name, NULL); + if (wn != NULL) + { + MENUITEMINFOW infow; +*************** +*** 2728,2734 **** + { + /* 'encoding' differs from active codepage: convert menu item name + * and use wide function */ +! wn = enc_to_ucs2(menu->name, NULL); + if (wn != NULL) + { + n = InsertMenuW(parent->submenu_id, (UINT)idx, +--- 2728,2734 ---- + { + /* 'encoding' differs from active codepage: convert menu item name + * and use wide function */ +! wn = enc_to_utf16(menu->name, NULL); + if (wn != NULL) + { + n = InsertMenuW(parent->submenu_id, (UINT)idx, +*************** +*** 3570,3576 **** + if (enc_codepage == 0 && (int)GetACP() != enc_codepage) + { + /* Not a codepage, use our own conversion function. */ +! wn = enc_to_ucs2(lpAnsiIn, NULL); + if (wn != NULL) + { + wcscpy(lpWCStr, wn); +--- 3570,3576 ---- + if (enc_codepage == 0 && (int)GetACP() != enc_codepage) + { + /* Not a codepage, use our own conversion function. */ +! wn = enc_to_utf16(lpAnsiIn, NULL); + if (wn != NULL) + { + wcscpy(lpWCStr, wn); +*** ../vim-7.2.048/src/gui_w48.c Wed Nov 12 13:35:31 2008 +--- src/gui_w48.c Thu Nov 20 16:42:32 2008 +*************** +*** 547,553 **** + else + { + len = 1; +! ws = ucs2_to_enc(wstring, &len); + if (ws == NULL) + len = 0; + else +--- 547,553 ---- + else + { + len = 1; +! ws = utf16_to_enc(wstring, &len); + if (ws == NULL) + len = 0; + else +*************** +*** 2128,2134 **** + { + /* 'encoding' differs from active codepage: convert text and use wide + * function */ +! wstr = enc_to_ucs2(str, &wlen); + if (wstr != NULL) + { + n = GetTextExtentPointW(hdc, wstr, wlen, &size); +--- 2128,2134 ---- + { + /* 'encoding' differs from active codepage: convert text and use wide + * function */ +! wstr = enc_to_utf16(str, &wlen); + if (wstr != NULL) + { + n = GetTextExtentPointW(hdc, wstr, wlen, &size); +*************** +*** 2252,2258 **** + { + /* 'encoding' differs from active codepage: convert menu name + * and use wide function */ +! wn = enc_to_ucs2(item_text, NULL); + if (wn != NULL) + { + MENUITEMINFOW infow; +--- 2252,2258 ---- + { + /* 'encoding' differs from active codepage: convert menu name + * and use wide function */ +! wn = enc_to_utf16(item_text, NULL); + if (wn != NULL) + { + MENUITEMINFOW infow; +*************** +*** 2422,2428 **** + if (use_unicode) + { + /* Need to go through Unicode. */ +! wstr = enc_to_ucs2(NameBuff, NULL); + if (wstr != NULL) + { + TCITEMW tiw; +--- 2422,2428 ---- + if (use_unicode) + { + /* Need to go through Unicode. */ +! wstr = enc_to_utf16(NameBuff, NULL); + if (wstr != NULL) + { + TCITEMW tiw; +*************** +*** 2521,2528 **** + WCHAR *wbuf; + int n; + +! /* Convert the title from 'encoding' to ucs2. */ +! wbuf = (WCHAR *)enc_to_ucs2((char_u *)title, NULL); + if (wbuf != NULL) + { + n = SetWindowTextW(hwnd, wbuf); +--- 2521,2528 ---- + WCHAR *wbuf; + int n; + +! /* Convert the title from 'encoding' to UTF-16. */ +! wbuf = (WCHAR *)enc_to_utf16((char_u *)title, NULL); + if (wbuf != NULL) + { + n = SetWindowTextW(hwnd, wbuf); +*************** +*** 3222,3228 **** + char_u *initdir, + char_u *filter) + { +! /* We always use the wide function. This means enc_to_ucs2() must work, + * otherwise it fails miserably! */ + OPENFILENAMEW fileStruct; + WCHAR fileBuf[MAXPATHL]; +--- 3222,3228 ---- + char_u *initdir, + char_u *filter) + { +! /* We always use the wide function. This means enc_to_utf16() must work, + * otherwise it fails miserably! */ + OPENFILENAMEW fileStruct; + WCHAR fileBuf[MAXPATHL]; +*************** +*** 3238,3244 **** + fileBuf[0] = NUL; + else + { +! wp = enc_to_ucs2(dflt, NULL); + if (wp == NULL) + fileBuf[0] = NUL; + else +--- 3238,3244 ---- + fileBuf[0] = NUL; + else + { +! wp = enc_to_utf16(dflt, NULL); + if (wp == NULL) + fileBuf[0] = NUL; + else +*************** +*** 3263,3273 **** + #endif + + if (title != NULL) +! titlep = enc_to_ucs2(title, NULL); + fileStruct.lpstrTitle = titlep; + + if (ext != NULL) +! extp = enc_to_ucs2(ext, NULL); + fileStruct.lpstrDefExt = extp; + + fileStruct.lpstrFile = fileBuf; +--- 3263,3273 ---- + #endif + + if (title != NULL) +! titlep = enc_to_utf16(title, NULL); + fileStruct.lpstrTitle = titlep; + + if (ext != NULL) +! extp = enc_to_utf16(ext, NULL); + fileStruct.lpstrDefExt = extp; + + fileStruct.lpstrFile = fileBuf; +*************** +*** 3278,3284 **** + if (initdir != NULL && *initdir != NUL) + { + /* Must have backslashes here, no matter what 'shellslash' says */ +! initdirp = enc_to_ucs2(initdir, NULL); + if (initdirp != NULL) + { + for (wp = initdirp; *wp != NUL; ++wp) +--- 3278,3284 ---- + if (initdir != NULL && *initdir != NUL) + { + /* Must have backslashes here, no matter what 'shellslash' says */ +! initdirp = enc_to_utf16(initdir, NULL); + if (initdirp != NULL) + { + for (wp = initdirp; *wp != NUL; ++wp) +*************** +*** 3318,3324 **** + vim_free(extp); + + /* Convert from UCS2 to 'encoding'. */ +! p = ucs2_to_enc(fileBuf, NULL); + if (p != NULL) + /* when out of memory we get garbage for non-ASCII chars */ + STRCPY(fileBuf, p); +--- 3318,3324 ---- + vim_free(extp); + + /* Convert from UCS2 to 'encoding'. */ +! p = utf16_to_enc(fileBuf, NULL); + if (p != NULL) + /* when out of memory we get garbage for non-ASCII chars */ + STRCPY(fileBuf, p); +*************** +*** 3518,3524 **** + { + #ifdef FEAT_MBYTE + if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0) +! fnames[i] = ucs2_to_enc(wszFile, NULL); + else + #endif + { +--- 3518,3524 ---- + { + #ifdef FEAT_MBYTE + if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0) +! fnames[i] = utf16_to_enc(wszFile, NULL); + else + #endif + { +*** ../vim-7.2.048/src/mbyte.c Thu Nov 20 11:55:53 2008 +--- src/mbyte.c Thu Nov 20 16:47:41 2008 +*************** +*** 6101,6107 **** + + /* 1. codepage/UTF-8 -> ucs-2. */ + if (vcp->vc_cpfrom == 0) +! tmp_len = utf8_to_ucs2(ptr, len, NULL, NULL); + else + tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0, + ptr, len, 0, 0); +--- 6101,6107 ---- + + /* 1. codepage/UTF-8 -> ucs-2. */ + if (vcp->vc_cpfrom == 0) +! tmp_len = utf8_to_utf16(ptr, len, NULL, NULL); + else + tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0, + ptr, len, 0, 0); +*************** +*** 6109,6121 **** + if (tmp == NULL) + break; + if (vcp->vc_cpfrom == 0) +! utf8_to_ucs2(ptr, len, tmp, unconvlenp); + else + MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len); + + /* 2. ucs-2 -> codepage/UTF-8. */ + if (vcp->vc_cpto == 0) +! retlen = ucs2_to_utf8(tmp, tmp_len, NULL); + else + retlen = WideCharToMultiByte(vcp->vc_cpto, 0, + tmp, tmp_len, 0, 0, 0, 0); +--- 6109,6121 ---- + if (tmp == NULL) + break; + if (vcp->vc_cpfrom == 0) +! utf8_to_utf16(ptr, len, tmp, unconvlenp); + else + MultiByteToWideChar(vcp->vc_cpfrom, 0, ptr, len, tmp, tmp_len); + + /* 2. ucs-2 -> codepage/UTF-8. */ + if (vcp->vc_cpto == 0) +! retlen = utf16_to_utf8(tmp, tmp_len, NULL); + else + retlen = WideCharToMultiByte(vcp->vc_cpto, 0, + tmp, tmp_len, 0, 0, 0, 0); +*************** +*** 6123,6129 **** + if (retval != NULL) + { + if (vcp->vc_cpto == 0) +! ucs2_to_utf8(tmp, tmp_len, retval); + else + WideCharToMultiByte(vcp->vc_cpto, 0, + tmp, tmp_len, retval, retlen, 0, 0); +--- 6123,6129 ---- + if (retval != NULL) + { + if (vcp->vc_cpto == 0) +! utf16_to_utf8(tmp, tmp_len, retval); + else + WideCharToMultiByte(vcp->vc_cpto, 0, + tmp, tmp_len, retval, retlen, 0, 0); +*** ../vim-7.2.048/src/misc1.c Sun Nov 9 13:43:25 2008 +--- src/misc1.c Thu Nov 20 16:42:59 2008 +*************** +*** 8728,8734 **** + /* The active codepage differs from 'encoding'. Attempt using the + * wide function. If it fails because it is not implemented fall back + * to the non-wide version (for Windows 98) */ +! wn = enc_to_ucs2(buf, NULL); + if (wn != NULL) + { + hFind = FindFirstFileW(wn, &wfb); +--- 8728,8734 ---- + /* The active codepage differs from 'encoding'. Attempt using the + * wide function. If it fails because it is not implemented fall back + * to the non-wide version (for Windows 98) */ +! wn = enc_to_utf16(buf, NULL); + if (wn != NULL) + { + hFind = FindFirstFileW(wn, &wfb); +*************** +*** 8756,8762 **** + #ifdef WIN3264 + # ifdef FEAT_MBYTE + if (wn != NULL) +! p = ucs2_to_enc(wfb.cFileName, NULL); /* p is allocated here */ + else + # endif + p = (char_u *)fb.cFileName; +--- 8756,8762 ---- + #ifdef WIN3264 + # ifdef FEAT_MBYTE + if (wn != NULL) +! p = utf16_to_enc(wfb.cFileName, NULL); /* p is allocated here */ + else + # endif + p = (char_u *)fb.cFileName; +*************** +*** 8830,8836 **** + if (wn != NULL) + { + vim_free(wn); +! wn = enc_to_ucs2(buf, NULL); + if (wn != NULL) + hFind = FindFirstFileW(wn, &wfb); + } +--- 8830,8836 ---- + if (wn != NULL) + { + vim_free(wn); +! wn = enc_to_utf16(buf, NULL); + if (wn != NULL) + hFind = FindFirstFileW(wn, &wfb); + } +*** ../vim-7.2.048/src/os_mswin.c Sat Aug 9 19:37:30 2008 +--- src/os_mswin.c Thu Nov 20 17:05:10 2008 +*************** +*** 309,315 **** + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { + /* Convert the title from 'encoding' to the active codepage. */ +! WCHAR *wp = enc_to_ucs2(title, NULL); + int n; + + if (wp != NULL) +--- 309,315 ---- + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { + /* Convert the title from 'encoding' to the active codepage. */ +! WCHAR *wp = enc_to_utf16(title, NULL); + int n; + + if (wp != NULL) +*************** +*** 406,415 **** + * - invoke _wfullpath() + * - convert the result from UCS2 to 'encoding'. + */ +! wname = enc_to_ucs2(fname, NULL); + if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL) + { +! cname = ucs2_to_enc((short_u *)wbuf, NULL); + if (cname != NULL) + { + vim_strncpy(buf, cname, len - 1); +--- 406,415 ---- + * - invoke _wfullpath() + * - convert the result from UCS2 to 'encoding'. + */ +! wname = enc_to_utf16(fname, NULL); + if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH - 1) != NULL) + { +! cname = utf16_to_enc((short_u *)wbuf, NULL); + if (cname != NULL) + { + vim_strncpy(buf, cname, len - 1); +*************** +*** 507,513 **** + # endif + ) + { +! WCHAR *wp = enc_to_ucs2(buf, NULL); + int n; + + if (wp != NULL) +--- 507,513 ---- + # endif + ) + { +! WCHAR *wp = enc_to_utf16(buf, NULL); + int n; + + if (wp != NULL) +*************** +*** 668,674 **** + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_ucs2(path, NULL); + int n; + + if (p != NULL) +--- 668,674 ---- + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_utf16(path, NULL); + int n; + + if (p != NULL) +*************** +*** 891,909 **** + + #if defined(FEAT_MBYTE) || defined(PROTO) + /* +! * Convert an UTF-8 string to UCS-2. + * "instr[inlen]" is the input. "inlen" is in bytes. +! * When "outstr" is NULL only return the number of UCS-2 words produced. + * Otherwise "outstr" must be a buffer of sufficient size. +! * Returns the number of UCS-2 words produced. + */ + int +! utf8_to_ucs2(char_u *instr, int inlen, short_u *outstr, int *unconvlenp) + { + int outlen = 0; + char_u *p = instr; + int todo = inlen; + int l; + + while (todo > 0) + { +--- 891,910 ---- + + #if defined(FEAT_MBYTE) || defined(PROTO) + /* +! * Convert an UTF-8 string to UTF-16. + * "instr[inlen]" is the input. "inlen" is in bytes. +! * When "outstr" is NULL only return the number of UTF-16 words produced. + * Otherwise "outstr" must be a buffer of sufficient size. +! * Returns the number of UTF-16 words produced. + */ + int +! utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp) + { + int outlen = 0; + char_u *p = instr; + int todo = inlen; + int l; ++ int ch; + + while (todo > 0) + { +*************** +*** 917,924 **** + break; + } + +! if (outstr != NULL) +! *outstr++ = utf_ptr2char(p); + ++outlen; + p += l; + todo -= l; +--- 918,936 ---- + break; + } + +! ch = utf_ptr2char(p); +! if (ch >= 0x10000) +! { +! /* non-BMP character, encoding with surrogate pairs */ +! ++outlen; +! if (outstr != NULL) +! { +! *outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10); +! *outstr++ = 0xDC00 | (ch & 0x3FF); +! } +! } +! else if (outstr != NULL) +! *outstr++ = ch; + ++outlen; + p += l; + todo -= l; +*************** +*** 928,956 **** + } + + /* +! * Convert an UCS-2 string to UTF-8. +! * The input is "instr[inlen]" with "inlen" in number of ucs-2 words. + * When "outstr" is NULL only return the required number of bytes. + * Otherwise "outstr" must be a buffer of sufficient size. + * Return the number of bytes produced. + */ + int +! ucs2_to_utf8(short_u *instr, int inlen, char_u *outstr) + { + int outlen = 0; + int todo = inlen; + short_u *p = instr; + int l; + + while (todo > 0) + { + if (outstr != NULL) + { +! l = utf_char2bytes(*p, outstr); + outstr += l; + } + else +! l = utf_char2len(*p); + ++p; + outlen += l; + --todo; +--- 940,981 ---- + } + + /* +! * Convert an UTF-16 string to UTF-8. +! * The input is "instr[inlen]" with "inlen" in number of UTF-16 words. + * When "outstr" is NULL only return the required number of bytes. + * Otherwise "outstr" must be a buffer of sufficient size. + * Return the number of bytes produced. + */ + int +! utf16_to_utf8(short_u *instr, int inlen, char_u *outstr) + { + int outlen = 0; + int todo = inlen; + short_u *p = instr; + int l; ++ int ch, ch2; + + while (todo > 0) + { ++ ch = *p; ++ if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1) ++ { ++ /* surrogate pairs handling */ ++ ch2 = p[1]; ++ if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) ++ { ++ ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000; ++ ++p; ++ --todo; ++ } ++ } + if (outstr != NULL) + { +! l = utf_char2bytes(ch, outstr); + outstr += l; + } + else +! l = utf_char2len(ch); + ++p; + outlen += l; + --todo; +*************** +*** 1079,1092 **** + */ + + /* +! * Convert "str" from 'encoding' to UCS-2. + * Input in "str" with length "*lenp". When "lenp" is NULL, use strlen(). + * Output is returned as an allocated string. "*lenp" is set to the length of + * the result. A trailing NUL is always added. + * Returns NULL when out of memory. + */ + short_u * +! enc_to_ucs2(char_u *str, int *lenp) + { + vimconv_T conv; + WCHAR *ret; +--- 1104,1117 ---- + */ + + /* +! * Convert "str" from 'encoding' to UTF-16. + * Input in "str" with length "*lenp". When "lenp" is NULL, use strlen(). + * Output is returned as an allocated string. "*lenp" is set to the length of + * the result. A trailing NUL is always added. + * Returns NULL when out of memory. + */ + short_u * +! enc_to_utf16(char_u *str, int *lenp) + { + vimconv_T conv; + WCHAR *ret; +*************** +*** 1102,1108 **** + + if (enc_codepage > 0) + { +! /* We can do any CP### -> UCS-2 in one pass, and we can do it + * without iconv() (convert_* may need iconv). */ + MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length); + } +--- 1127,1133 ---- + + if (enc_codepage > 0) + { +! /* We can do any CP### -> UTF-16 in one pass, and we can do it + * without iconv() (convert_* may need iconv). */ + MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length); + } +*************** +*** 1123,1133 **** + } + convert_setup(&conv, NULL, NULL); + +! length = utf8_to_ucs2(str, *lenp, NULL, NULL); + ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR))); + if (ret != NULL) + { +! utf8_to_ucs2(str, *lenp, (short_u *)ret, NULL); + ret[length] = 0; + } + +--- 1148,1158 ---- + } + convert_setup(&conv, NULL, NULL); + +! length = utf8_to_utf16(str, *lenp, NULL, NULL); + ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR))); + if (ret != NULL) + { +! utf8_to_utf16(str, *lenp, (short_u *)ret, NULL); + ret[length] = 0; + } + +*************** +*** 1139,1145 **** + } + + /* +! * Convert an UCS-2 string to 'encoding'. + * Input in "str" with length (counted in wide characters) "*lenp". When + * "lenp" is NULL, use wcslen(). + * Output is returned as an allocated string. If "*lenp" is not NULL it is +--- 1164,1170 ---- + } + + /* +! * Convert an UTF-16 string to 'encoding'. + * Input in "str" with length (counted in wide characters) "*lenp". When + * "lenp" is NULL, use wcslen(). + * Output is returned as an allocated string. If "*lenp" is not NULL it is +*************** +*** 1147,1153 **** + * Returns NULL when out of memory. + */ + char_u * +! ucs2_to_enc(short_u *str, int *lenp) + { + vimconv_T conv; + char_u *utf8_str = NULL, *enc_str = NULL; +--- 1172,1178 ---- + * Returns NULL when out of memory. + */ + char_u * +! utf16_to_enc(short_u *str, int *lenp) + { + vimconv_T conv; + char_u *utf8_str = NULL, *enc_str = NULL; +*************** +*** 1161,1167 **** + + if (enc_codepage > 0) + { +! /* We can do any UCS-2 -> CP### in one pass. */ + int length; + + WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp, +--- 1186,1192 ---- + + if (enc_codepage > 0) + { +! /* We can do any UTF-16 -> CP### in one pass. */ + int length; + + WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp, +*************** +*** 1171,1180 **** + } + + /* Avoid allocating zero bytes, it generates an error message. */ +! utf8_str = alloc(ucs2_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL)); + if (utf8_str != NULL) + { +! *lenp = ucs2_to_utf8(str, *lenp, utf8_str); + + /* We might be called before we have p_enc set up. */ + conv.vc_type = CONV_NONE; +--- 1196,1205 ---- + } + + /* Avoid allocating zero bytes, it generates an error message. */ +! utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL)); + if (utf8_str != NULL) + { +! *lenp = utf16_to_utf8(str, *lenp, utf8_str); + + /* We might be called before we have p_enc set up. */ + conv.vc_type = CONV_NONE; +*************** +*** 1308,1314 **** + if (hMemWstr[str_size] == NUL) + break; + } +! to_free = str = ucs2_to_enc((short_u *)hMemWstr, &str_size); + GlobalUnlock(hMemW); + } + } +--- 1333,1339 ---- + if (hMemWstr[str_size] == NUL) + break; + } +! to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size); + GlobalUnlock(hMemW); + } + } +*************** +*** 1340,1346 **** + + # if defined(FEAT_MBYTE) && defined(WIN3264) + /* The text is in the active codepage. Convert to 'encoding', +! * going through UCS-2. */ + acp_to_enc(str, str_size, &to_free, &maxlen); + if (to_free != NULL) + { +--- 1365,1371 ---- + + # if defined(FEAT_MBYTE) && defined(WIN3264) + /* The text is in the active codepage. Convert to 'encoding', +! * going through UTF-16. */ + acp_to_enc(str, str_size, &to_free, &maxlen); + if (to_free != NULL) + { +*************** +*** 1404,1410 **** + if (widestr != NULL) + { + ++*outlen; /* Include the 0 after the string */ +! *out = ucs2_to_enc((short_u *)widestr, outlen); + vim_free(widestr); + } + } +--- 1429,1435 ---- + if (widestr != NULL) + { + ++*outlen; /* Include the 0 after the string */ +! *out = utf16_to_enc((short_u *)widestr, outlen); + vim_free(widestr); + } + } +*************** +*** 1466,1474 **** + WCHAR *out; + int len = metadata.txtlen; + +! /* Convert the text to UCS-2. This is put on the clipboard as + * CF_UNICODETEXT. */ +! out = (WCHAR *)enc_to_ucs2(str, &len); + if (out != NULL) + { + WCHAR *lpszMemW; +--- 1491,1499 ---- + WCHAR *out; + int len = metadata.txtlen; + +! /* Convert the text to UTF-16. This is put on the clipboard as + * CF_UNICODETEXT. */ +! out = (WCHAR *)enc_to_utf16(str, &len); + if (out != NULL) + { + WCHAR *lpszMemW; +*************** +*** 1488,1494 **** + WideCharToMultiByte(GetACP(), 0, out, len, + str, metadata.txtlen, 0, 0); + +! /* Allocate memory for the UCS-2 text, add one NUL word to + * terminate the string. */ + hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, + (len + 1) * sizeof(WCHAR)); +--- 1513,1519 ---- + WideCharToMultiByte(GetACP(), 0, out, len, + str, metadata.txtlen, 0, 0); + +! /* Allocate memory for the UTF-16 text, add one NUL word to + * terminate the string. */ + hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, + (len + 1) * sizeof(WCHAR)); +*** ../vim-7.2.048/src/os_win32.c Thu Jul 24 20:50:30 2008 +--- src/os_win32.c Thu Nov 20 16:44:33 2008 +*************** +*** 1587,1593 **** + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_ucs2(name, NULL); + WCHAR fnamew[_MAX_PATH]; + WCHAR *dumw; + long n; +--- 1587,1593 ---- + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_utf16(name, NULL); + WCHAR fnamew[_MAX_PATH]; + WCHAR *dumw; + long n; +*************** +*** 2440,2446 **** + + if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0) + { +! char_u *p = ucs2_to_enc(wbuf, NULL); + + if (p != NULL) + { +--- 2440,2446 ---- + + if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0) + { +! char_u *p = utf16_to_enc(wbuf, NULL); + + if (p != NULL) + { +*************** +*** 2466,2472 **** + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_ucs2(name, NULL); + long n; + + if (p != NULL) +--- 2466,2472 ---- + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_utf16(name, NULL); + long n; + + if (p != NULL) +*************** +*** 2495,2501 **** + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_ucs2(name, NULL); + long n; + + if (p != NULL) +--- 2495,2501 ---- + #ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! WCHAR *p = enc_to_utf16(name, NULL); + long n; + + if (p != NULL) +*************** +*** 2522,2528 **** + WCHAR *p = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! p = enc_to_ucs2(name, NULL); + #endif + + #ifdef FEAT_MBYTE +--- 2522,2528 ---- + WCHAR *p = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! p = enc_to_utf16(name, NULL); + #endif + + #ifdef FEAT_MBYTE +*************** +*** 2590,2596 **** + WCHAR *wn = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! wn = enc_to_ucs2(fname, NULL); + if (wn != NULL) + { + hFile = CreateFileW(wn, /* file name */ +--- 2590,2596 ---- + WCHAR *wn = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! wn = enc_to_utf16(fname, NULL); + if (wn != NULL) + { + hFile = CreateFileW(wn, /* file name */ +*************** +*** 4239,4245 **** + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! wn = enc_to_ucs2(name, NULL); + if (wn != NULL) + { + SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL); +--- 4239,4245 ---- + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! wn = enc_to_utf16(name, NULL); + if (wn != NULL) + { + SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL); +*************** +*** 4382,4389 **** + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! wold = enc_to_ucs2((char_u *)pszOldFile, NULL); +! wnew = enc_to_ucs2((char_u *)pszNewFile, NULL); + if (wold != NULL && wnew != NULL) + retval = mch_wrename(wold, wnew); + vim_free(wold); +--- 4382,4389 ---- + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! wold = enc_to_utf16((char_u *)pszOldFile, NULL); +! wnew = enc_to_utf16((char_u *)pszNewFile, NULL); + if (wold != NULL && wnew != NULL) + retval = mch_wrename(wold, wnew); + vim_free(wold); +*************** +*** 4492,4498 **** + WCHAR *wn = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! wn = enc_to_ucs2(n, NULL); + #endif + + if (mch_isdir(n)) +--- 4492,4498 ---- + WCHAR *wn = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! wn = enc_to_utf16(n, NULL); + #endif + + if (mch_isdir(n)) +*************** +*** 4618,4624 **** + + #if defined(FEAT_MBYTE) || defined(PROTO) + /* +! * Version of open() that may use ucs2 file name. + */ + int + mch_open(char *name, int flags, int mode) +--- 4618,4624 ---- + + #if defined(FEAT_MBYTE) || defined(PROTO) + /* +! * Version of open() that may use UTF-16 file name. + */ + int + mch_open(char *name, int flags, int mode) +*************** +*** 4630,4636 **** + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! wn = enc_to_ucs2(name, NULL); + if (wn != NULL) + { + f = _wopen(wn, flags, mode); +--- 4630,4636 ---- + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { +! wn = enc_to_utf16(name, NULL); + if (wn != NULL) + { + f = _wopen(wn, flags, mode); +*************** +*** 4648,4654 **** + } + + /* +! * Version of fopen() that may use ucs2 file name. + */ + FILE * + mch_fopen(char *name, char *mode) +--- 4648,4654 ---- + } + + /* +! * Version of fopen() that may use UTF-16 file name. + */ + FILE * + mch_fopen(char *name, char *mode) +*************** +*** 4675,4682 **** + else if (newMode == 'b') + _set_fmode(_O_BINARY); + # endif +! wn = enc_to_ucs2(name, NULL); +! wm = enc_to_ucs2(mode, NULL); + if (wn != NULL && wm != NULL) + f = _wfopen(wn, wm); + vim_free(wn); +--- 4675,4682 ---- + else if (newMode == 'b') + _set_fmode(_O_BINARY); + # endif +! wn = enc_to_utf16(name, NULL); +! wm = enc_to_utf16(mode, NULL); + if (wn != NULL && wm != NULL) + f = _wfopen(wn, wm); + vim_free(wn); +*************** +*** 4776,4783 **** + int len; + + /* Convert the file names to wide characters. */ +! fromw = enc_to_ucs2(from, NULL); +! tow = enc_to_ucs2(to, NULL); + if (fromw != NULL && tow != NULL) + { + /* Open the file for reading. */ +--- 4776,4783 ---- + int len; + + /* Convert the file names to wide characters. */ +! fromw = enc_to_utf16(from, NULL); +! tow = enc_to_utf16(to, NULL); + if (fromw != NULL && tow != NULL) + { + /* Open the file for reading. */ +*************** +*** 5122,5128 **** + for (i = 0; i < used_file_count; ++i) + { + idx = used_file_indexes[i]; +! str = ucs2_to_enc(ArglistW[idx], NULL); + if (str != NULL) + { + #ifdef FEAT_DIFF +--- 5122,5128 ---- + for (i = 0; i < used_file_count; ++i) + { + idx = used_file_indexes[i]; +! str = utf16_to_enc(ArglistW[idx], NULL); + if (str != NULL) + { + #ifdef FEAT_DIFF +*** ../vim-7.2.048/src/proto/os_mswin.pro Sat May 5 19:07:50 2007 +--- src/proto/os_mswin.pro Thu Nov 20 16:41:00 2008 +*************** +*** 22,35 **** + int can_end_termcap_mode __ARGS((int give_msg)); + int mch_screenmode __ARGS((char_u *arg)); + int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result)); +! int utf8_to_ucs2 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp)); +! int ucs2_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr)); + void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen)); + void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef)); + int clip_mch_own_selection __ARGS((VimClipboard *cbd)); + void clip_mch_lose_selection __ARGS((VimClipboard *cbd)); +! short_u *enc_to_ucs2 __ARGS((char_u *str, int *lenp)); +! char_u *ucs2_to_enc __ARGS((short_u *str, int *lenp)); + void clip_mch_request_selection __ARGS((VimClipboard *cbd)); + void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen)); + void clip_mch_set_selection __ARGS((VimClipboard *cbd)); +--- 22,35 ---- + int can_end_termcap_mode __ARGS((int give_msg)); + int mch_screenmode __ARGS((char_u *arg)); + int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result)); +! int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp)); +! int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr)); + void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen)); + void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef)); + int clip_mch_own_selection __ARGS((VimClipboard *cbd)); + void clip_mch_lose_selection __ARGS((VimClipboard *cbd)); +! short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp)); +! char_u *utf16_to_enc __ARGS((short_u *str, int *lenp)); + void clip_mch_request_selection __ARGS((VimClipboard *cbd)); + void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen)); + void clip_mch_set_selection __ARGS((VimClipboard *cbd)); +*** ../vim-7.2.048/src/version.c Thu Nov 20 16:11:03 2008 +--- src/version.c Thu Nov 20 17:08:07 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 49, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.050 b/7.2.050 new file mode 100644 index 00000000..416d32b1 --- /dev/null +++ b/7.2.050 @@ -0,0 +1,316 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.050 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.050 +Problem: Warnings for not checking return value of fwrite(). (Chip Campbell) +Solution: Use the return value. +Files: src/spell.c + + +*** ../vim-7.2.049/src/spell.c Mon Aug 25 04:12:38 2008 +--- src/spell.c Thu Nov 20 17:28:01 2008 +*************** +*** 7926,7931 **** +--- 7926,7933 ---- + char_u *p; + int rr; + int retval = OK; ++ int fwv = 1; /* collect return value of fwrite() to avoid ++ warnings from picky compiler */ + + fd = mch_fopen((char *)fname, "w"); + if (fd == NULL) +*************** +*** 7936,7946 **** + + /*
: */ + /* */ +! if (fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd) != 1) +! { +! EMSG(_(e_write)); +! retval = FAIL; +! } + putc(VIMSPELLVERSION, fd); /* */ + + /* +--- 7938,7944 ---- + + /*
: */ + /* */ +! fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd); + putc(VIMSPELLVERSION, fd); /* */ + + /* +*************** +*** 7955,7961 **** + + i = (int)STRLEN(spin->si_info); + put_bytes(fd, (long_u)i, 4); /* */ +! fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* */ + } + + /* SN_REGION: ... +--- 7953,7959 ---- + + i = (int)STRLEN(spin->si_info); + put_bytes(fd, (long_u)i, 4); /* */ +! fwv &= fwrite(spin->si_info, (size_t)i, (size_t)1, fd); /* */ + } + + /* SN_REGION: ... +*************** +*** 7966,7972 **** + putc(SNF_REQUIRED, fd); /* */ + l = spin->si_region_count * 2; + put_bytes(fd, (long_u)l, 4); /* */ +! fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd); + /* ... */ + regionmask = (1 << spin->si_region_count) - 1; + } +--- 7964,7970 ---- + putc(SNF_REQUIRED, fd); /* */ + l = spin->si_region_count * 2; + put_bytes(fd, (long_u)l, 4); /* */ +! fwv &= fwrite(spin->si_region_name, (size_t)l, (size_t)1, fd); + /* ... */ + regionmask = (1 << spin->si_region_count) - 1; + } +*************** +*** 8016,8022 **** + } + + put_bytes(fd, (long_u)l, 2); /* */ +! fwrite(folchars, (size_t)l, (size_t)1, fd); /* */ + } + + /* SN_MIDWORD: */ +--- 8014,8020 ---- + } + + put_bytes(fd, (long_u)l, 2); /* */ +! fwv &= fwrite(folchars, (size_t)l, (size_t)1, fd); /* */ + } + + /* SN_MIDWORD: */ +*************** +*** 8027,8033 **** + + i = (int)STRLEN(spin->si_midword); + put_bytes(fd, (long_u)i, 4); /* */ +! fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); /* */ + } + + /* SN_PREFCOND: ... */ +--- 8025,8032 ---- + + i = (int)STRLEN(spin->si_midword); + put_bytes(fd, (long_u)i, 4); /* */ +! fwv &= fwrite(spin->si_midword, (size_t)i, (size_t)1, fd); +! /* */ + } + + /* SN_PREFCOND: ... */ +*************** +*** 8113,8119 **** + p = rr == 1 ? ftp->ft_from : ftp->ft_to; + l = (int)STRLEN(p); + putc(l, fd); +! fwrite(p, l, (size_t)1, fd); + } + } + +--- 8112,8118 ---- + p = rr == 1 ? ftp->ft_from : ftp->ft_to; + l = (int)STRLEN(p); + putc(l, fd); +! fwv &= fwrite(p, l, (size_t)1, fd); + } + } + +*************** +*** 8131,8141 **** + /* */ + + put_bytes(fd, (long_u)l, 2); /* */ +! fwrite(spin->si_sofofr, l, (size_t)1, fd); /* */ + + l = (int)STRLEN(spin->si_sofoto); + put_bytes(fd, (long_u)l, 2); /* */ +! fwrite(spin->si_sofoto, l, (size_t)1, fd); /* */ + } + + /* SN_WORDS: ... +--- 8130,8140 ---- + /* */ + + put_bytes(fd, (long_u)l, 2); /* */ +! fwv &= fwrite(spin->si_sofofr, l, (size_t)1, fd); /* */ + + l = (int)STRLEN(spin->si_sofoto); + put_bytes(fd, (long_u)l, 2); /* */ +! fwv &= fwrite(spin->si_sofoto, l, (size_t)1, fd); /* */ + } + + /* SN_WORDS: ... +*************** +*** 8160,8166 **** + l = (int)STRLEN(hi->hi_key) + 1; + len += l; + if (round == 2) /* */ +! fwrite(hi->hi_key, (size_t)l, (size_t)1, fd); + --todo; + } + if (round == 1) +--- 8159,8165 ---- + l = (int)STRLEN(hi->hi_key) + 1; + len += l; + if (round == 2) /* */ +! fwv &= fwrite(hi->hi_key, (size_t)l, (size_t)1, fd); + --todo; + } + if (round == 1) +*************** +*** 8176,8182 **** + putc(0, fd); /* */ + l = spin->si_map.ga_len; + put_bytes(fd, (long_u)l, 4); /* */ +! fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd); + /* */ + } + +--- 8175,8181 ---- + putc(0, fd); /* */ + l = spin->si_map.ga_len; + put_bytes(fd, (long_u)l, 4); /* */ +! fwv &= fwrite(spin->si_map.ga_data, (size_t)l, (size_t)1, fd); + /* */ + } + +*************** +*** 8232,8241 **** + { + p = ((char_u **)(spin->si_comppat.ga_data))[i]; + putc((int)STRLEN(p), fd); /* */ +! fwrite(p, (size_t)STRLEN(p), (size_t)1, fd);/* */ + } + /* */ +! fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags), + (size_t)1, fd); + } + +--- 8231,8241 ---- + { + p = ((char_u **)(spin->si_comppat.ga_data))[i]; + putc((int)STRLEN(p), fd); /* */ +! fwv &= fwrite(p, (size_t)STRLEN(p), (size_t)1, fd); +! /* */ + } + /* */ +! fwv &= fwrite(spin->si_compflags, (size_t)STRLEN(spin->si_compflags), + (size_t)1, fd); + } + +*************** +*** 8259,8265 **** + + l = (int)STRLEN(spin->si_syllable); + put_bytes(fd, (long_u)l, 4); /* */ +! fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); /* */ + } + + /* end of */ +--- 8259,8266 ---- + + l = (int)STRLEN(spin->si_syllable); + put_bytes(fd, (long_u)l, 4); /* */ +! fwv &= fwrite(spin->si_syllable, (size_t)l, (size_t)1, fd); +! /* */ + } + + /* end of */ +*************** +*** 8295,8307 **** + (void)put_node(fd, tree, 0, regionmask, round == 3); + } + +! /* Write another byte to check for errors. */ + if (putc(0, fd) == EOF) + retval = FAIL; + + if (fclose(fd) == EOF) + retval = FAIL; + + return retval; + } + +--- 8296,8313 ---- + (void)put_node(fd, tree, 0, regionmask, round == 3); + } + +! /* Write another byte to check for errors (file system full). */ + if (putc(0, fd) == EOF) + retval = FAIL; + + if (fclose(fd) == EOF) + retval = FAIL; + ++ if (fwv != 1) ++ retval = FAIL; ++ if (retval == FAIL) ++ EMSG(_(e_write)); ++ + return retval; + } + +*************** +*** 9890,9895 **** +--- 9896,9902 ---- + char_u *p; + int len; + int totlen; ++ int x = 1; /* collect return value of fwrite() */ + + if (fd != NULL) + put_bytes(fd, (long_u)gap->ga_len, 2); /* */ +*************** +*** 9906,9912 **** + if (fd != NULL) + { + fputc(len, fd); +! fwrite(p, (size_t)len, (size_t)1, fd); + } + totlen += len; + } +--- 9913,9919 ---- + if (fd != NULL) + { + fputc(len, fd); +! x &= fwrite(p, (size_t)len, (size_t)1, fd); + } + totlen += len; + } +*** ../vim-7.2.049/src/version.c Thu Nov 20 17:09:09 2008 +--- src/version.c Fri Nov 28 10:06:13 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 50, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.051 b/7.2.051 new file mode 100644 index 00000000..7c36dfe9 --- /dev/null +++ b/7.2.051 @@ -0,0 +1,411 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.051 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.051 +Problem: Can't avoid 'wildignore' and 'suffixes' for glob() and globpath(). +Solution: Add an extra argument to these functions. (Ingo Karkat) +Files: src/eval.c, src/ex_getln.c, src/proto/ex_getln.pro, + runtime/doc/eval.txt, runtime/doc/options.txt + + +*** ../vim-7.2.050/src/eval.c Thu Nov 20 16:11:03 2008 +--- src/eval.c Thu Nov 27 22:15:40 2008 +*************** +*** 7564,7571 **** + {"getwinposx", 0, 0, f_getwinposx}, + {"getwinposy", 0, 0, f_getwinposy}, + {"getwinvar", 2, 2, f_getwinvar}, +! {"glob", 1, 1, f_glob}, +! {"globpath", 2, 2, f_globpath}, + {"has", 1, 1, f_has}, + {"has_key", 2, 2, f_has_key}, + {"haslocaldir", 0, 0, f_haslocaldir}, +--- 7564,7571 ---- + {"getwinposx", 0, 0, f_getwinposx}, + {"getwinposy", 0, 0, f_getwinposy}, + {"getwinvar", 2, 2, f_getwinvar}, +! {"glob", 1, 2, f_glob}, +! {"globpath", 2, 3, f_globpath}, + {"has", 1, 1, f_has}, + {"has_key", 2, 2, f_has_key}, + {"haslocaldir", 0, 0, f_haslocaldir}, +*************** +*** 9557,9563 **** + else + { + /* When the optional second argument is non-zero, don't remove matches +! * for 'suffixes' and 'wildignore' */ + if (argvars[1].v_type != VAR_UNKNOWN + && get_tv_number_chk(&argvars[1], &error)) + flags |= WILD_KEEP_ALL; +--- 9557,9563 ---- + else + { + /* When the optional second argument is non-zero, don't remove matches +! * for 'wildignore' and don't put matches for 'suffixes' at the end. */ + if (argvars[1].v_type != VAR_UNKNOWN + && get_tv_number_chk(&argvars[1], &error)) + flags |= WILD_KEEP_ALL; +*************** +*** 11323,11335 **** + typval_T *argvars; + typval_T *rettv; + { + expand_T xpc; + +! ExpandInit(&xpc); +! xpc.xp_context = EXPAND_FILES; +! rettv->v_type = VAR_STRING; +! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), +! NULL, WILD_USE_NL|WILD_SILENT, WILD_ALL); + } + + /* +--- 11323,11347 ---- + typval_T *argvars; + typval_T *rettv; + { ++ int flags = WILD_SILENT|WILD_USE_NL; + expand_T xpc; ++ int error = FALSE; + +! /* When the optional second argument is non-zero, don't remove matches +! * for 'wildignore' and don't put matches for 'suffixes' at the end. */ +! if (argvars[1].v_type != VAR_UNKNOWN +! && get_tv_number_chk(&argvars[1], &error)) +! flags |= WILD_KEEP_ALL; +! rettv->v_type = VAR_STRING; +! if (!error) +! { +! ExpandInit(&xpc); +! xpc.xp_context = EXPAND_FILES; +! rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]), +! NULL, flags, WILD_ALL); +! } +! else +! rettv->vval.v_string = NULL; + } + + /* +*************** +*** 11340,11353 **** + typval_T *argvars; + typval_T *rettv; + { + char_u buf1[NUMBUFLEN]; + char_u *file = get_tv_string_buf_chk(&argvars[1], buf1); + + rettv->v_type = VAR_STRING; +! if (file == NULL) + rettv->vval.v_string = NULL; + else +! rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file); + } + + /* +--- 11352,11373 ---- + typval_T *argvars; + typval_T *rettv; + { ++ int flags = 0; + char_u buf1[NUMBUFLEN]; + char_u *file = get_tv_string_buf_chk(&argvars[1], buf1); ++ int error = FALSE; + ++ /* When the optional second argument is non-zero, don't remove matches ++ * for 'wildignore' and don't put matches for 'suffixes' at the end. */ ++ if (argvars[2].v_type != VAR_UNKNOWN ++ && get_tv_number_chk(&argvars[2], &error)) ++ flags |= WILD_KEEP_ALL; + rettv->v_type = VAR_STRING; +! if (file == NULL || error) + rettv->vval.v_string = NULL; + else +! rettv->vval.v_string = globpath(get_tv_string(&argvars[0]), file, +! flags); + } + + /* +*** ../vim-7.2.050/src/ex_getln.c Sat Nov 15 14:10:23 2008 +--- src/ex_getln.c Thu Nov 20 18:37:20 2008 +*************** +*** 2524,2530 **** + && 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. */ +--- 2524,2530 ---- + && ccline.xpc->xp_context != EXPAND_NOTHING + && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL) + { +! int i = (int)(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. */ +*************** +*** 4897,4903 **** + if (s == NULL) + return FAIL; + sprintf((char *)s, "%s/%s*.vim", dirname, pat); +! all = globpath(p_rtp, s); + vim_free(s); + if (all == NULL) + return FAIL; +--- 4897,4903 ---- + if (s == NULL) + return FAIL; + sprintf((char *)s, "%s/%s*.vim", dirname, pat); +! all = globpath(p_rtp, s, 0); + vim_free(s); + if (all == NULL) + return FAIL; +*************** +*** 4938,4946 **** + * newlines. Returns NULL for an error or no matches. + */ + char_u * +! globpath(path, file) + char_u *path; + char_u *file; + { + expand_T xpc; + char_u *buf; +--- 4938,4947 ---- + * newlines. Returns NULL for an error or no matches. + */ + char_u * +! globpath(path, file, expand_options) + char_u *path; + char_u *file; ++ int expand_options; + { + expand_T xpc; + char_u *buf; +*************** +*** 4969,4978 **** + { + add_pathsep(buf); + STRCAT(buf, file); +! if (ExpandFromContext(&xpc, buf, &num_p, &p, WILD_SILENT) != FAIL +! && num_p > 0) + { +! ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT); + for (len = 0, i = 0; i < num_p; ++i) + len += (int)STRLEN(p[i]) + 1; + +--- 4970,4979 ---- + { + add_pathsep(buf); + STRCAT(buf, file); +! if (ExpandFromContext(&xpc, buf, &num_p, &p, +! WILD_SILENT|expand_options) != FAIL && num_p > 0) + { +! ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options); + for (len = 0, i = 0; i < num_p; ++i) + len += (int)STRLEN(p[i]) + 1; + +*** ../vim-7.2.050/src/proto/ex_getln.pro Wed May 28 16:49:01 2008 +--- src/proto/ex_getln.pro Thu Nov 20 18:27:57 2008 +*************** +*** 31,37 **** + void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col)); + int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches)); + int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)))); +! char_u *globpath __ARGS((char_u *path, char_u *file)); + void init_history __ARGS((void)); + int get_histtype __ARGS((char_u *name)); + void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep)); +--- 31,37 ---- + void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col)); + int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches)); + int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)))); +! char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options)); + void init_history __ARGS((void)); + int get_histtype __ARGS((char_u *name)); + void add_to_history __ARGS((int histype, char_u *new_entry, int in_map, int sep)); +*** ../vim-7.2.050/runtime/doc/eval.txt Sun Nov 9 13:43:25 2008 +--- runtime/doc/eval.txt Thu Nov 27 22:17:13 2008 +*************** +*** 1,4 **** +! *eval.txt* For Vim version 7.2. Last change: 2008 Nov 02 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *eval.txt* For Vim version 7.2. Last change: 2008 Nov 27 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 1706,1712 **** + exists( {expr}) Number TRUE if {expr} exists + extend({expr1}, {expr2} [, {expr3}]) + List/Dict insert items of {expr2} into {expr1} +! expand( {expr}) String expand special keywords in {expr} + feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer + filereadable( {file}) Number TRUE if {file} is a readable file + filewritable( {file}) Number TRUE if {file} is a writable file +--- 1709,1715 ---- + exists( {expr}) Number TRUE if {expr} exists + extend({expr1}, {expr2} [, {expr3}]) + List/Dict insert items of {expr2} into {expr1} +! expand( {expr} [, {flag}]) String expand special keywords in {expr} + feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer + filereadable( {file}) Number TRUE if {file} is a readable file + filewritable( {file}) Number TRUE if {file} is a writable file +*************** +*** 1758,1765 **** + getwinposx() Number X coord in pixels of GUI Vim window + getwinposy() Number Y coord in pixels of GUI Vim window + getwinvar( {nr}, {varname}) any variable {varname} in window {nr} +! glob( {expr}) String expand file wildcards in {expr} +! globpath( {path}, {expr}) String do glob({expr}) for all dirs in {path} + has( {feature}) Number TRUE if feature {feature} supported + has_key( {dict}, {key}) Number TRUE if {dict} has entry {key} + haslocaldir() Number TRUE if current window executed |:lcd| +--- 1761,1769 ---- + getwinposx() Number X coord in pixels of GUI Vim window + getwinposy() Number Y coord in pixels of GUI Vim window + getwinvar( {nr}, {varname}) any variable {varname} in window {nr} +! glob( {expr} [, {flag}]) String expand file wildcards in {expr} +! globpath( {path}, {expr} [, {flag}]) +! String do glob({expr}) for all dirs in {path} + has( {feature}) Number TRUE if feature {feature} supported + has_key( {dict}, {key}) Number TRUE if {dict} has entry {key} + haslocaldir() Number TRUE if current window executed |:lcd| +*************** +*** 3286,3299 **** + :let list_is_on = getwinvar(2, '&list') + :echo "myvar = " . getwinvar(1, 'myvar') + < +! *glob()* +! glob({expr}) Expand the file wildcards in {expr}. See |wildcards| for the + use of special characters. + The result is a String. + When there are several matches, they are separated by + characters. +! The 'wildignore' option applies: Names matching one of the +! patterns in 'wildignore' will be skipped. + If the expansion fails, the result is an empty string. + A name for a non-existing file is not included. + +--- 3290,3305 ---- + :let list_is_on = getwinvar(2, '&list') + :echo "myvar = " . getwinvar(1, 'myvar') + < +! glob({expr} [, {flag}]) *glob()* +! Expand the file wildcards in {expr}. See |wildcards| for the + use of special characters. + The result is a String. + When there are several matches, they are separated by + characters. +! Unless the optional {flag} argument is given and is non-zero, +! the 'suffixes' and 'wildignore' options apply: Names matching +! one of the patterns in 'wildignore' will be skipped and +! 'suffixes' affect the ordering of matches. + If the expansion fails, the result is an empty string. + A name for a non-existing file is not included. + +*************** +*** 3307,3326 **** + See |expand()| for expanding special Vim variables. See + |system()| for getting the raw output of an external command. + +! globpath({path}, {expr}) *globpath()* + Perform glob() on all directories in {path} and concatenate + the results. Example: > + :echo globpath(&rtp, "syntax/c.vim") + < {path} is a comma-separated list of directory names. Each + directory name is prepended to {expr} and expanded like with +! glob(). A path separator is inserted when needed. + To add a comma inside a directory name escape it with a + backslash. Note that on MS-Windows a directory may have a + trailing backslash, remove it if you put a comma after it. + If the expansion fails for one of the directories, there is no + error message. +! The 'wildignore' option applies: Names matching one of the +! patterns in 'wildignore' will be skipped. + + The "**" item can be used to search in a directory tree. + For example, to find all "README.txt" files in the directories +--- 3313,3334 ---- + See |expand()| for expanding special Vim variables. See + |system()| for getting the raw output of an external command. + +! globpath({path}, {expr} [, {flag}]) *globpath()* + Perform glob() on all directories in {path} and concatenate + the results. Example: > + :echo globpath(&rtp, "syntax/c.vim") + < {path} is a comma-separated list of directory names. Each + directory name is prepended to {expr} and expanded like with +! |glob()|. A path separator is inserted when needed. + To add a comma inside a directory name escape it with a + backslash. Note that on MS-Windows a directory may have a + trailing backslash, remove it if you put a comma after it. + If the expansion fails for one of the directories, there is no + error message. +! Unless the optional {flag} argument is given and is non-zero, +! the 'suffixes' and 'wildignore' options apply: Names matching +! one of the patterns in 'wildignore' will be skipped and +! 'suffixes' affect the ordering of matches. + + The "**" item can be used to search in a directory tree. + For example, to find all "README.txt" files in the directories +*** ../vim-7.2.050/runtime/doc/options.txt Sat Aug 9 19:36:49 2008 +--- runtime/doc/options.txt Tue Nov 25 23:43:55 2008 +*************** +*** 1,4 **** +! *options.txt* For Vim version 7.2. Last change: 2008 Aug 06 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *options.txt* For Vim version 7.2. Last change: 2008 Nov 25 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 7472,7478 **** + {not available when compiled without the |+wildignore| + feature} + A list of file patterns. A file that matches with one of these +! patterns is ignored when completing file or directory names. + The pattern is used like with |:autocmd|, see |autocmd-patterns|. + Also see 'suffixes'. + Example: > +--- 7481,7489 ---- + {not available when compiled without the |+wildignore| + feature} + A list of file patterns. A file that matches with one of these +! patterns is ignored when completing file or directory names, and +! influences the result of |expand()|, |glob()| and |globpath()| unless +! a flag is passed to disable this. + The pattern is used like with |:autocmd|, see |autocmd-patterns|. + Also see 'suffixes'. + Example: > +*** ../vim-7.2.050/src/version.c Fri Nov 28 10:08:05 2008 +--- src/version.c Fri Nov 28 10:55:44 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 51, + /**/ + +-- +Not too long ago, unzipping in public was illegal... + + /// 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/7.2.052 b/7.2.052 new file mode 100644 index 00000000..eb331f34 --- /dev/null +++ b/7.2.052 @@ -0,0 +1,83 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.052 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.052 +Problem: synIDattr() doesn't support "sp" for special color. +Solution: Recognize "sp" and "sp#". (Matt Wozniski) +Files: runtime/doc/eval.txt, src/eval.c + + +*** ../vim-7.2.051/runtime/doc/eval.txt Fri Nov 28 10:59:57 2008 +--- runtime/doc/eval.txt Thu Nov 27 22:17:13 2008 +*************** +*** 5348,5357 **** + "fg" foreground color (GUI: color name used to set + the color, cterm: color number as a string, + term: empty string) +! "bg" background color (like "fg") + "fg#" like "fg", but for the GUI and the GUI is + running the name in "#RRGGBB" form + "bg#" like "fg#" for "bg" + "bold" "1" if bold + "italic" "1" if italic + "reverse" "1" if reverse +--- 5359,5370 ---- + "fg" foreground color (GUI: color name used to set + the color, cterm: color number as a string, + term: empty string) +! "bg" background color (as with "fg") +! "sp" special color (as with "fg") |highlight-guisp| + "fg#" like "fg", but for the GUI and the GUI is + running the name in "#RRGGBB" form + "bg#" like "fg#" for "bg" ++ "sp#" like "fg#" for "sp" + "bold" "1" if bold + "italic" "1" if italic + "reverse" "1" if reverse +*** ../vim-7.2.051/src/eval.c Fri Nov 28 10:59:57 2008 +--- src/eval.c Thu Nov 27 22:15:40 2008 +*************** +*** 16648,16655 **** + p = highlight_has_attr(id, HL_INVERSE, modec); + break; + +! case 's': /* standout */ +! p = highlight_has_attr(id, HL_STANDOUT, modec); + break; + + case 'u': +--- 16648,16658 ---- + p = highlight_has_attr(id, HL_INVERSE, modec); + break; + +! case 's': +! if (TOLOWER_ASC(what[1]) == 'p') /* sp[#] */ +! p = highlight_color(id, what, modec); +! else /* standout */ +! p = highlight_has_attr(id, HL_STANDOUT, modec); + break; + + case 'u': +*** ../vim-7.2.051/src/version.c Fri Nov 28 10:59:57 2008 +--- src/version.c Fri Nov 28 11:13:45 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 52, + /**/ + +-- +Not too long ago, a keyboard was something to make music with... + + /// 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/7.2.053 b/7.2.053 new file mode 100644 index 00000000..410d1666 --- /dev/null +++ b/7.2.053 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.053 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.053 +Problem: Crash when using WorkShop command ":ws foo". (Dominique Pelle) +Solution: Avoid using a NULL pointer. +Files: src/workshop.c + + +*** ../vim-7.2.052/src/workshop.c Tue Jun 24 23:34:50 2008 +--- src/workshop.c Thu Nov 27 22:31:27 2008 +*************** +*** 1121,1128 **** + ? (char *)curbuf->b_sfname : ""); + #endif + +! strcpy(ffname, (char *) curbuf->b_ffname); +! *filename = ffname; /* copy so nobody can change b_ffname */ + *curLine = curwin->w_cursor.lnum; + *curCol = curwin->w_cursor.col; + +--- 1121,1132 ---- + ? (char *)curbuf->b_sfname : ""); + #endif + +! if (curbuf->b_ffname == NULL) +! ffname[0] = NUL; +! else +! /* copy so nobody can change b_ffname */ +! strcpy(ffname, (char *) curbuf->b_ffname); +! *filename = ffname; + *curLine = curwin->w_cursor.lnum; + *curCol = curwin->w_cursor.col; + +*** ../vim-7.2.052/src/version.c Fri Nov 28 11:15:10 2008 +--- src/version.c Fri Nov 28 11:44:23 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 53, + /**/ + +-- +What the word 'politics' means: 'Poli' in Latin meaning 'many' and 'tics' +meaning 'bloodsucking creatures'. + + /// 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/7.2.054 b/7.2.054 new file mode 100644 index 00000000..98ce9e8f --- /dev/null +++ b/7.2.054 @@ -0,0 +1,68 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.054 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.054 +Problem: Compilation warnings for format in getchar.c. +Solution: Use fputs() instead of fprintf(). (Dominique Pelle) +Files: src/getchar.c + + +*** ../vim-7.2.053/src/getchar.c Tue Jul 22 18:58:23 2008 +--- src/getchar.c Thu Nov 27 22:38:24 2008 +*************** +*** 4702,4708 **** + return FAIL; + if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0) + return FAIL; +! if (fprintf(fd, cmd) < 0) + return FAIL; + if (buf != NULL && fputs(" ", fd) < 0) + return FAIL; +--- 4702,4708 ---- + return FAIL; + if (mp->m_noremap != REMAP_YES && fprintf(fd, "nore") < 0) + return FAIL; +! if (fputs(cmd, fd) < 0) + return FAIL; + if (buf != NULL && fputs(" ", fd) < 0) + return FAIL; +*************** +*** 4801,4807 **** + } + if (IS_SPECIAL(c) || modifiers) /* special key */ + { +! if (fprintf(fd, (char *)get_special_key_name(c, modifiers)) < 0) + return FAIL; + continue; + } +--- 4801,4807 ---- + } + if (IS_SPECIAL(c) || modifiers) /* special key */ + { +! if (fputs((char *)get_special_key_name(c, modifiers), fd) < 0) + return FAIL; + continue; + } +*** ../vim-7.2.053/src/version.c Fri Nov 28 11:47:14 2008 +--- src/version.c Fri Nov 28 12:02:48 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 54, + /**/ + +-- +Not too long ago, compress was something you did to garbage... + + /// 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/7.2.055 b/7.2.055 new file mode 100644 index 00000000..ffab9a26 --- /dev/null +++ b/7.2.055 @@ -0,0 +1,1271 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.055 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.055 +Problem: Various compiler warnings with strict checking. +Solution: Avoid the warnings by using return values and renaming. +Files: src/diff.c, src/eval.c, src/ex_cmds.c, src/ex_docmd.c, + src/fileio.c, src/fold.c, src/globals.h, src/gui.c, + src/gui_at_sb.c, src/gui_gtk_x11.c, src/gui_xmdlg.c, + src/gui_xmebw.c, src/main.c, src/mbyte.c, src/message.c, + src/netbeans.c, src/option.c, src/os_unix.c, src/spell.c, + src/ui.c, src/window.c + + +*** ../vim-7.2.054/src/diff.c Fri Jan 18 17:39:32 2008 +--- src/diff.c Fri Nov 28 17:23:35 2008 +*************** +*** 661,666 **** +--- 665,671 ---- + char_u *tmp_diff; + FILE *fd; + int ok; ++ int io_error = FALSE; + + /* Delete all diffblocks. */ + diff_clear(curtab); +*************** +*** 697,714 **** + { + ok = FALSE; + fd = mch_fopen((char *)tmp_orig, "w"); +! if (fd != NULL) + { +! fwrite("line1\n", (size_t)6, (size_t)1, fd); + fclose(fd); + fd = mch_fopen((char *)tmp_new, "w"); +! if (fd != NULL) + { +! fwrite("line2\n", (size_t)6, (size_t)1, fd); + fclose(fd); + diff_file(tmp_orig, tmp_new, tmp_diff); + fd = mch_fopen((char *)tmp_diff, "r"); +! if (fd != NULL) + { + char_u linebuf[LBUFLEN]; + +--- 702,727 ---- + { + ok = FALSE; + fd = mch_fopen((char *)tmp_orig, "w"); +! if (fd == NULL) +! io_error = TRUE; +! else + { +! if (fwrite("line1\n", (size_t)6, (size_t)1, fd) != 1) +! io_error = TRUE; + fclose(fd); + fd = mch_fopen((char *)tmp_new, "w"); +! if (fd == NULL) +! io_error = TRUE; +! else + { +! if (fwrite("line2\n", (size_t)6, (size_t)1, fd) != 1) +! io_error = TRUE; + fclose(fd); + diff_file(tmp_orig, tmp_new, tmp_diff); + fd = mch_fopen((char *)tmp_diff, "r"); +! if (fd == NULL) +! io_error = TRUE; +! else + { + char_u linebuf[LBUFLEN]; + +*************** +*** 761,766 **** +--- 774,781 ---- + } + if (!ok) + { ++ if (io_error) ++ EMSG(_("E810: Cannot read or write temp files")); + EMSG(_("E97: Cannot create diffs")); + diff_a_works = MAYBE; + #if defined(MSWIN) || defined(MSDOS) +*************** +*** 925,934 **** + { + # ifdef TEMPDIRNAMES + if (vim_tempdir != NULL) +! mch_chdir((char *)vim_tempdir); + else + # endif +! mch_chdir("/tmp"); + shorten_fnames(TRUE); + } + #endif +--- 940,949 ---- + { + # ifdef TEMPDIRNAMES + if (vim_tempdir != NULL) +! ignored = mch_chdir((char *)vim_tempdir); + else + # endif +! ignored = mch_chdir("/tmp"); + shorten_fnames(TRUE); + } + #endif +*** ../vim-7.2.054/src/eval.c Fri Nov 28 11:15:10 2008 +--- src/eval.c Fri Nov 28 12:23:13 2008 +*************** +*** 10641,10647 **** + # ifdef FEAT_WINDOWS + win_T *wp; + # endif +! int n = 1; + + if (row >= 0 && col >= 0) + { +--- 10641,10647 ---- + # ifdef FEAT_WINDOWS + win_T *wp; + # endif +! int winnr = 1; + + if (row >= 0 && col >= 0) + { +*************** +*** 10651,10659 **** + (void)mouse_comp_pos(win, &row, &col, &lnum); + # ifdef FEAT_WINDOWS + for (wp = firstwin; wp != win; wp = wp->w_next) +! ++n; + # endif +! vimvars[VV_MOUSE_WIN].vv_nr = n; + vimvars[VV_MOUSE_LNUM].vv_nr = lnum; + vimvars[VV_MOUSE_COL].vv_nr = col + 1; + } +--- 10651,10659 ---- + (void)mouse_comp_pos(win, &row, &col, &lnum); + # ifdef FEAT_WINDOWS + for (wp = firstwin; wp != win; wp = wp->w_next) +! ++winnr; + # endif +! vimvars[VV_MOUSE_WIN].vv_nr = winnr; + vimvars[VV_MOUSE_LNUM].vv_nr = lnum; + vimvars[VV_MOUSE_COL].vv_nr = col + 1; + } +*** ../vim-7.2.054/src/ex_cmds.c Sat Nov 15 14:10:23 2008 +--- src/ex_cmds.c Fri Nov 28 17:24:08 2008 +*************** +*** 1941,1947 **** + * root. + */ + if (fp_out != NULL) +! (void)fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid); + #endif + } + } +--- 1941,1947 ---- + * root. + */ + if (fp_out != NULL) +! ignored = fchown(fileno(fp_out), st_old.st_uid, st_old.st_gid); + #endif + } + } +*** ../vim-7.2.054/src/ex_docmd.c Sat Nov 15 14:10:23 2008 +--- src/ex_docmd.c Fri Nov 28 17:26:13 2008 +*************** +*** 8753,8760 **** + else if (*dirnow != NUL + && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) + { +! (void)mch_chdir((char *)globaldir); +! shorten_fnames(TRUE); + } + + failed |= (makeopens(fd, dirnow) == FAIL); +--- 8753,8760 ---- + else if (*dirnow != NUL + && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) + { +! if (mch_chdir((char *)globaldir) == OK) +! shorten_fnames(TRUE); + } + + failed |= (makeopens(fd, dirnow) == FAIL); +*** ../vim-7.2.054/src/fileio.c Wed Nov 12 16:04:43 2008 +--- src/fileio.c Fri Nov 28 17:35:54 2008 +*************** +*** 2214,2220 **** + { + /* Use stderr for stdin, makes shell commands work. */ + close(0); +! dup(2); + } + #endif + +--- 2214,2220 ---- + { + /* Use stderr for stdin, makes shell commands work. */ + close(0); +! ignored = dup(2); + } + #endif + +*************** +*** 3449,3455 **** + { + # ifdef UNIX + # ifdef HAVE_FCHOWN +! fchown(fd, st_old.st_uid, st_old.st_gid); + # endif + if (mch_stat((char *)IObuff, &st) < 0 + || st.st_uid != st_old.st_uid +--- 3449,3455 ---- + { + # ifdef UNIX + # ifdef HAVE_FCHOWN +! ignored = fchown(fd, st_old.st_uid, st_old.st_gid); + # endif + if (mch_stat((char *)IObuff, &st) < 0 + || st.st_uid != st_old.st_uid +*************** +*** 4365,4371 **** + || st.st_uid != st_old.st_uid + || st.st_gid != st_old.st_gid) + { +! fchown(fd, st_old.st_uid, st_old.st_gid); + if (perm >= 0) /* set permission again, may have changed */ + (void)mch_setperm(wfname, perm); + } +--- 4365,4371 ---- + || st.st_uid != st_old.st_uid + || st.st_gid != st_old.st_gid) + { +! ignored = fchown(fd, st_old.st_uid, st_old.st_gid); + if (perm >= 0) /* set permission again, may have changed */ + (void)mch_setperm(wfname, perm); + } +*************** +*** 6030,6038 **** + { + tbuf[FGETS_SIZE - 2] = NUL; + #ifdef USE_CR +! fgets_cr((char *)tbuf, FGETS_SIZE, fp); + #else +! fgets((char *)tbuf, FGETS_SIZE, fp); + #endif + } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n'); + } +--- 6030,6038 ---- + { + tbuf[FGETS_SIZE - 2] = NUL; + #ifdef USE_CR +! ignoredp = fgets_cr((char *)tbuf, FGETS_SIZE, fp); + #else +! ignoredp = fgets((char *)tbuf, FGETS_SIZE, fp); + #endif + } while (tbuf[FGETS_SIZE - 2] != NUL && tbuf[FGETS_SIZE - 2] != '\n'); + } +*** ../vim-7.2.054/src/fold.c Wed Aug 6 18:59:40 2008 +--- src/fold.c Fri Nov 28 12:24:16 2008 +*************** +*** 48,54 **** + static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp)); + static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum)); + static void checkupdate __ARGS((win_T *wp)); +! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int open)); + static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep)); + static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep)); + static void foldOpenNested __ARGS((fold_T *fpr)); +--- 48,54 ---- + static int foldFind __ARGS((garray_T *gap, linenr_T lnum, fold_T **fpp)); + static int foldLevelWin __ARGS((win_T *wp, linenr_T lnum)); + static void checkupdate __ARGS((win_T *wp)); +! static void setFoldRepeat __ARGS((linenr_T lnum, long count, int do_open)); + static linenr_T setManualFold __ARGS((linenr_T lnum, int opening, int recurse, int *donep)); + static linenr_T setManualFoldWin __ARGS((win_T *wp, linenr_T lnum, int opening, int recurse, int *donep)); + static void foldOpenNested __ARGS((fold_T *fpr)); +*************** +*** 1241,1250 **** + * Repeat "count" times. + */ + static void +! setFoldRepeat(lnum, count, open) + linenr_T lnum; + long count; +! int open; + { + int done; + long n; +--- 1241,1250 ---- + * Repeat "count" times. + */ + static void +! setFoldRepeat(lnum, count, do_open) + linenr_T lnum; + long count; +! int do_open; + { + int done; + long n; +*************** +*** 1252,1258 **** + for (n = 0; n < count; ++n) + { + done = DONE_NOTHING; +! (void)setManualFold(lnum, open, FALSE, &done); + if (!(done & DONE_ACTION)) + { + /* Only give an error message when no fold could be opened. */ +--- 1252,1258 ---- + for (n = 0; n < count; ++n) + { + done = DONE_NOTHING; +! (void)setManualFold(lnum, do_open, FALSE, &done); + if (!(done & DONE_ACTION)) + { + /* Only give an error message when no fold could be opened. */ +*** ../vim-7.2.054/src/globals.h Thu Sep 18 21:29:07 2008 +--- src/globals.h Fri Nov 28 17:35:50 2008 +*************** +*** 1549,1554 **** +--- 1549,1562 ---- + EXTERN time_t starttime; + + /* ++ * Some compilers warn for not using a return value, but in some situations we ++ * can't do anything useful with the value. Assign to this variable to avoid ++ * the warning. ++ */ ++ EXTERN int ignored; ++ EXTERN char *ignoredp; ++ ++ /* + * Optional Farsi support. Include it here, so EXTERN and INIT are defined. + */ + #ifdef FEAT_FKMAP +*** ../vim-7.2.054/src/gui.c Wed Aug 6 14:37:26 2008 +--- src/gui.c Fri Nov 28 18:48:31 2008 +*************** +*** 139,145 **** + /* The read returns when the child closes the pipe (or when + * the child dies for some reason). */ + close(pipefd[1]); +! (void)read(pipefd[0], &dummy, (size_t)1); + close(pipefd[0]); + } + +--- 139,145 ---- + /* The read returns when the child closes the pipe (or when + * the child dies for some reason). */ + close(pipefd[1]); +! ignored = (int)read(pipefd[0], &dummy, (size_t)1); + close(pipefd[0]); + } + +*** ../vim-7.2.054/src/gui_at_sb.c Sun Jun 13 21:37:13 2004 +--- src/gui_at_sb.c Fri Nov 28 12:19:19 2008 +*************** +*** 1078,1083 **** +--- 1078,1089 ---- + Cardinal *num_params; /* unused */ + { + ScrollbarWidget sbw = (ScrollbarWidget)w; ++ /* Use a union to avoid a warning for the weird conversion from float to ++ * XtPointer. Comes from Xaw/Scrollbar.c. */ ++ union { ++ XtPointer xtp; ++ float xtf; ++ } xtpf; + + if (LookAhead(w, event)) + return; +*************** +*** 1085,1091 **** + /* thumbProc is not pretty, but is necessary for backwards + compatibility on those architectures for which it work{s,ed}; + the intent is to pass a (truncated) float by value. */ +! XtCallCallbacks(w, XtNthumbProc, *(XtPointer*)&sbw->scrollbar.top); + XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top); + } + +--- 1091,1098 ---- + /* thumbProc is not pretty, but is necessary for backwards + compatibility on those architectures for which it work{s,ed}; + the intent is to pass a (truncated) float by value. */ +! xtpf.xtf = sbw->scrollbar.top; +! XtCallCallbacks(w, XtNthumbProc, xtpf.xtp); + XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top); + } + +*** ../vim-7.2.054/src/gui_gtk_x11.c Tue Jul 8 12:46:08 2008 +--- src/gui_gtk_x11.c Fri Nov 28 21:06:38 2008 +*************** +*** 4070,4083 **** + + if (mask & (XValue | YValue)) + { +! int w, h; +! gui_mch_get_screen_dimensions(&w, &h); +! h += p_ghr + get_menu_tool_height(); +! w += get_menu_tool_width(); + if (mask & XNegative) +! x += w - pixel_width; + if (mask & YNegative) +! y += h - pixel_height; + #ifdef HAVE_GTK2 + gtk_window_move(GTK_WINDOW(gui.mainwin), x, y); + #else +--- 4070,4083 ---- + + if (mask & (XValue | YValue)) + { +! int ww, hh; +! gui_mch_get_screen_dimensions(&ww, &hh); +! hh += p_ghr + get_menu_tool_height(); +! ww += get_menu_tool_width(); + if (mask & XNegative) +! x += ww - pixel_width; + if (mask & YNegative) +! y += hh - pixel_height; + #ifdef HAVE_GTK2 + gtk_window_move(GTK_WINDOW(gui.mainwin), x, y); + #else +*** ../vim-7.2.054/src/gui_xmdlg.c Tue Jun 24 23:39:32 2008 +--- src/gui_xmdlg.c Fri Nov 28 21:04:08 2008 +*************** +*** 369,378 **** + char buf[TEMP_BUF_SIZE]; + XmString items[MAX_ENTRIES_IN_LIST]; + int i; +! int index; + +! for (index = (int)ENCODING; index < (int)NONE; ++index) +! count[index] = 0; + + /* First we insert the wild char into every single list. */ + if (fix != ENCODING) +--- 369,378 ---- + char buf[TEMP_BUF_SIZE]; + XmString items[MAX_ENTRIES_IN_LIST]; + int i; +! int idx; + +! for (idx = (int)ENCODING; idx < (int)NONE; ++idx) +! count[idx] = 0; + + /* First we insert the wild char into every single list. */ + if (fix != ENCODING) +*************** +*** 503,516 **** + /* + * Now loop trough the remaining lists and set them up. + */ +! for (index = (int)NAME; index < (int)NONE; ++index) + { + Widget w; + +! if (fix == (enum ListSpecifier)index) + continue; + +! switch ((enum ListSpecifier)index) + { + case NAME: + w = data->list[NAME]; +--- 503,516 ---- + /* + * Now loop trough the remaining lists and set them up. + */ +! for (idx = (int)NAME; idx < (int)NONE; ++idx) + { + Widget w; + +! if (fix == (enum ListSpecifier)idx) + continue; + +! switch ((enum ListSpecifier)idx) + { + case NAME: + w = data->list[NAME]; +*************** +*** 525,545 **** + w = (Widget)0; /* for lint */ + } + +! for (i = 0; i < count[index]; ++i) + { +! items[i] = XmStringCreateLocalized(list[index][i]); +! XtFree(list[index][i]); + } + XmListDeleteAllItems(w); +! XmListAddItems(w, items, count[index], 1); +! if (data->sel[index]) + { + XmStringFree(items[0]); +! items[0] = XmStringCreateLocalized(data->sel[index]); + XmListSelectItem(w, items[0], False); + XmListSetBottomItem(w, items[0]); + } +! for (i = 0; i < count[index]; ++i) + XmStringFree(items[i]); + } + } +--- 525,545 ---- + w = (Widget)0; /* for lint */ + } + +! for (i = 0; i < count[idx]; ++i) + { +! items[i] = XmStringCreateLocalized(list[idx][i]); +! XtFree(list[idx][i]); + } + XmListDeleteAllItems(w); +! XmListAddItems(w, items, count[idx], 1); +! if (data->sel[idx]) + { + XmStringFree(items[0]); +! items[0] = XmStringCreateLocalized(data->sel[idx]); + XmListSelectItem(w, items[0], False); + XmListSetBottomItem(w, items[0]); + } +! for (i = 0; i < count[idx]; ++i) + XmStringFree(items[i]); + } + } +*************** +*** 695,708 **** + int n; + XmString str; + Arg args[4]; +! char *msg = _("no specific match"); + + n = 0; +! str = XmStringCreateLocalized(msg); + XtSetArg(args[n], XmNlabelString, str); ++n; + XtSetValues(data->sample, args, n); + apply_fontlist(data->sample); +! XmTextSetString(data->name, msg); + XmStringFree(str); + + return False; +--- 695,708 ---- + int n; + XmString str; + Arg args[4]; +! char *nomatch_msg = _("no specific match"); + + n = 0; +! str = XmStringCreateLocalized(nomatch_msg); + XtSetArg(args[n], XmNlabelString, str); ++n; + XtSetValues(data->sample, args, n); + apply_fontlist(data->sample); +! XmTextSetString(data->name, nomatch_msg); + XmStringFree(str); + + return False; +*************** +*** 886,906 **** + { + int i; + int max; +! int index = 0; + int size; +! char str[128]; + + for (i = 0, max = 0; i < data->num; i++) + { +! get_part(fn(data, i), 7, str); +! size = atoi(str); + if ((size > max) && (size < MAX_DISPLAY_SIZE)) + { +! index = i; + max = size; + } + } +! strcpy(big_font, fn(data, index)); + } + data->old = XLoadQueryFont(XtDisplay(parent), big_font); + data->old_list = gui_motif_create_fontlist(data->old); +--- 886,906 ---- + { + int i; + int max; +! int idx = 0; + int size; +! char buf[128]; + + for (i = 0, max = 0; i < data->num; i++) + { +! get_part(fn(data, i), 7, buf); +! size = atoi(buf); + if ((size > max) && (size < MAX_DISPLAY_SIZE)) + { +! idx = i; + max = size; + } + } +! strcpy(big_font, fn(data, idx)); + } + data->old = XLoadQueryFont(XtDisplay(parent), big_font); + data->old_list = gui_motif_create_fontlist(data->old); +*************** +*** 1217,1244 **** + + if (i != 0) + { +! char name[TEMP_BUF_SIZE]; +! char style[TEMP_BUF_SIZE]; +! char size[TEMP_BUF_SIZE]; +! char encoding[TEMP_BUF_SIZE]; + char *found; + + found = names[0]; + +! name_part(found, name); +! style_part(found, style); +! size_part(found, size, data->in_pixels); +! encoding_part(found, encoding); +! +! if (strlen(name) > 0 +! && strlen(style) > 0 +! && strlen(size) > 0 +! && strlen(encoding) > 0) + { +! data->sel[NAME] = XtNewString(name); +! data->sel[STYLE] = XtNewString(style); +! data->sel[SIZE] = XtNewString(size); +! data->sel[ENCODING] = XtNewString(encoding); + data->font_name = XtNewString(names[0]); + display_sample(data); + XmTextSetString(data->name, data->font_name); +--- 1217,1244 ---- + + if (i != 0) + { +! char namebuf[TEMP_BUF_SIZE]; +! char stylebuf[TEMP_BUF_SIZE]; +! char sizebuf[TEMP_BUF_SIZE]; +! char encodingbuf[TEMP_BUF_SIZE]; + char *found; + + found = names[0]; + +! name_part(found, namebuf); +! style_part(found, stylebuf); +! size_part(found, sizebuf, data->in_pixels); +! encoding_part(found, encodingbuf); +! +! if (strlen(namebuf) > 0 +! && strlen(stylebuf) > 0 +! && strlen(sizebuf) > 0 +! && strlen(encodingbuf) > 0) + { +! data->sel[NAME] = XtNewString(namebuf); +! data->sel[STYLE] = XtNewString(stylebuf); +! data->sel[SIZE] = XtNewString(sizebuf); +! data->sel[ENCODING] = XtNewString(encodingbuf); + data->font_name = XtNewString(names[0]); + display_sample(data); + XmTextSetString(data->name, data->font_name); +*** ../vim-7.2.054/src/gui_xmebw.c Thu Nov 8 20:48:14 2007 +--- src/gui_xmebw.c Fri Nov 28 18:58:53 2008 +*************** +*** 1256,1262 **** + } + else + { +! int adjust = 0; + + #if !defined(LESSTIF_VERSION) && (XmVersion > 1002) + /* +--- 1256,1262 ---- + } + else + { +! adjust = 0; + + #if !defined(LESSTIF_VERSION) && (XmVersion > 1002) + /* +*************** +*** 1268,1279 **** + { + case XmEXTERNAL_HIGHLIGHT: + adjust = (eb->primitive.highlight_thickness - +! (eb->pushbutton.default_button_shadow_thickness ? +! Xm3D_ENHANCE_PIXEL : 0)); + break; + + case XmINTERNAL_HIGHLIGHT: +- adjust = 0; + break; + + default: +--- 1268,1278 ---- + { + case XmEXTERNAL_HIGHLIGHT: + adjust = (eb->primitive.highlight_thickness - +! (eb->pushbutton.default_button_shadow_thickness +! ? Xm3D_ENHANCE_PIXEL : 0)); + break; + + case XmINTERNAL_HIGHLIGHT: + break; + + default: +*** ../vim-7.2.054/src/main.c Thu Nov 20 14:11:47 2008 +--- src/main.c Fri Nov 28 18:32:48 2008 +*************** +*** 2372,2378 **** + * Is there any other system that cannot do this? + */ + close(0); +! dup(2); + #endif + } + +--- 2372,2378 ---- + * Is there any other system that cannot do this? + */ + close(0); +! ignored = dup(2); + #endif + } + +*** ../vim-7.2.054/src/mbyte.c Thu Nov 20 17:09:09 2008 +--- src/mbyte.c Fri Nov 28 18:44:05 2008 +*************** +*** 717,723 **** + * where mblen() returns 0 for invalid character. + * Therefore, following condition includes 0. + */ +! (void)mblen(NULL, 0); /* First reset the state. */ + if (mblen(buf, (size_t)1) <= 0) + n = 2; + else +--- 717,723 ---- + * where mblen() returns 0 for invalid character. + * Therefore, following condition includes 0. + */ +! ignored = mblen(NULL, 0); /* First reset the state. */ + if (mblen(buf, (size_t)1) <= 0) + n = 2; + else +*************** +*** 5278,5284 **** + + /*ARGSUSED*/ + static void +! preedit_start_cbproc(XIC xic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("xim_decide_input_style()\n"); +--- 5278,5284 ---- + + /*ARGSUSED*/ + static void +! preedit_start_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("xim_decide_input_style()\n"); +*************** +*** 5312,5318 **** + + /*ARGSUSED*/ + static void +! preedit_draw_cbproc(XIC xic, XPointer client_data, XPointer call_data) + { + XIMPreeditDrawCallbackStruct *draw_data; + XIMText *text; +--- 5312,5318 ---- + + /*ARGSUSED*/ + static void +! preedit_draw_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + XIMPreeditDrawCallbackStruct *draw_data; + XIMText *text; +*************** +*** 5453,5459 **** + + /*ARGSUSED*/ + static void +! preedit_caret_cbproc(XIC xic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("preedit_caret_cbproc()\n"); +--- 5453,5459 ---- + + /*ARGSUSED*/ + static void +! preedit_caret_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("preedit_caret_cbproc()\n"); +*************** +*** 5462,5468 **** + + /*ARGSUSED*/ + static void +! preedit_done_cbproc(XIC xic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("preedit_done_cbproc()\n"); +--- 5462,5468 ---- + + /*ARGSUSED*/ + static void +! preedit_done_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("preedit_done_cbproc()\n"); +*** ../vim-7.2.054/src/message.c Sun Jul 13 19:18:44 2008 +--- src/message.c Fri Nov 28 12:26:56 2008 +*************** +*** 4585,4645 **** + if (remove_trailing_zeroes) + { + int i; +! char *p; + + /* Using %g or %G: remove superfluous zeroes. */ + if (fmt_spec == 'f') +! p = tmp + str_arg_l - 1; + else + { +! p = (char *)vim_strchr((char_u *)tmp, + fmt_spec == 'e' ? 'e' : 'E'); +! if (p != NULL) + { + /* Remove superfluous '+' and leading + * zeroes from the exponent. */ +! if (p[1] == '+') + { + /* Change "1.0e+07" to "1.0e07" */ +! STRMOVE(p + 1, p + 2); + --str_arg_l; + } +! i = (p[1] == '-') ? 2 : 1; +! while (p[i] == '0') + { + /* Change "1.0e07" to "1.0e7" */ +! STRMOVE(p + i, p + i + 1); + --str_arg_l; + } +! --p; + } + } + +! if (p != NULL && !precision_specified) + /* Remove trailing zeroes, but keep the one + * just after a dot. */ +! while (p > tmp + 2 && *p == '0' && p[-1] != '.') + { +! STRMOVE(p, p + 1); +! --p; + --str_arg_l; + } + } + else + { +! char *p; + + /* Be consistent: some printf("%e") use 1.0e+12 + * and some 1.0e+012. Remove one zero in the last + * case. */ +! p = (char *)vim_strchr((char_u *)tmp, + fmt_spec == 'e' ? 'e' : 'E'); +! if (p != NULL && (p[1] == '+' || p[1] == '-') +! && p[2] == '0' +! && vim_isdigit(p[3]) +! && vim_isdigit(p[4])) + { +! STRMOVE(p + 2, p + 3); + --str_arg_l; + } + } +--- 4585,4646 ---- + if (remove_trailing_zeroes) + { + int i; +! char *tp; + + /* Using %g or %G: remove superfluous zeroes. */ + if (fmt_spec == 'f') +! tp = tmp + str_arg_l - 1; + else + { +! tp = (char *)vim_strchr((char_u *)tmp, + fmt_spec == 'e' ? 'e' : 'E'); +! if (tp != NULL) + { + /* Remove superfluous '+' and leading + * zeroes from the exponent. */ +! if (tp[1] == '+') + { + /* Change "1.0e+07" to "1.0e07" */ +! STRMOVE(tp + 1, tp + 2); + --str_arg_l; + } +! i = (tp[1] == '-') ? 2 : 1; +! while (tp[i] == '0') + { + /* Change "1.0e07" to "1.0e7" */ +! STRMOVE(tp + i, tp + i + 1); + --str_arg_l; + } +! --tp; + } + } + +! if (tp != NULL && !precision_specified) + /* Remove trailing zeroes, but keep the one + * just after a dot. */ +! while (tp > tmp + 2 && *tp == '0' +! && tp[-1] != '.') + { +! STRMOVE(tp, tp + 1); +! --tp; + --str_arg_l; + } + } + else + { +! char *tp; + + /* Be consistent: some printf("%e") use 1.0e+12 + * and some 1.0e+012. Remove one zero in the last + * case. */ +! tp = (char *)vim_strchr((char_u *)tmp, + fmt_spec == 'e' ? 'e' : 'E'); +! if (tp != NULL && (tp[1] == '+' || tp[1] == '-') +! && tp[2] == '0' +! && vim_isdigit(tp[3]) +! && vim_isdigit(tp[4])) + { +! STRMOVE(tp + 2, tp + 3); + --str_arg_l; + } + } +*** ../vim-7.2.054/src/netbeans.c Sat Nov 15 14:10:23 2008 +--- src/netbeans.c Fri Nov 28 18:51:43 2008 +*************** +*** 1043,1049 **** + nbdebug(("EVT: %s", buf)); + /* nb_send(buf, "netbeans_end"); avoid "write failed" messages */ + if (sd >= 0) +! sock_write(sd, buf, (int)STRLEN(buf)); /* ignore errors */ + } + } + +--- 1043,1049 ---- + nbdebug(("EVT: %s", buf)); + /* nb_send(buf, "netbeans_end"); avoid "write failed" messages */ + if (sd >= 0) +! ignored = sock_write(sd, buf, (int)STRLEN(buf)); + } + } + +*************** +*** 2277,2285 **** + int serNum; + int localTypeNum; + int typeNum; +- # ifdef NBDEBUG +- int len; +- # endif + pos_T *pos; + + if (buf == NULL || buf->bufp == NULL) +--- 2277,2282 ---- +*************** +*** 2303,2315 **** + pos = get_off_or_lnum(buf->bufp, &args); + + cp = (char *)args; +! # ifdef NBDEBUG +! len = +! # endif +! strtol(cp, &cp, 10); + args = (char_u *)cp; + # ifdef NBDEBUG +! if (len != -1) + { + nbdebug((" partial line annotation -- Not Yet Implemented!\n")); + } +--- 2300,2309 ---- + pos = get_off_or_lnum(buf->bufp, &args); + + cp = (char *)args; +! ignored = (int)strtol(cp, &cp, 10); + args = (char_u *)cp; + # ifdef NBDEBUG +! if (ignored != -1) + { + nbdebug((" partial line annotation -- Not Yet Implemented!\n")); + } +*** ../vim-7.2.054/src/option.c Sun Nov 9 13:43:25 2008 +--- src/option.c Fri Nov 28 12:27:34 2008 +*************** +*** 8232,8244 **** + { + if (number == 0 && string != NULL) + { +! int index; + + /* Either we are given a string or we are setting option + * to zero. */ +! for (index = 0; string[index] == '0'; ++index) + ; +! if (string[index] != NUL || index == 0) + { + /* There's another character after zeros or the string + * is empty. In both cases, we are trying to set a +--- 8232,8244 ---- + { + if (number == 0 && string != NULL) + { +! int idx; + + /* Either we are given a string or we are setting option + * to zero. */ +! for (idx = 0; string[idx] == '0'; ++idx) + ; +! if (string[idx] != NUL || idx == 0) + { + /* There's another character after zeros or the string + * is empty. In both cases, we are trying to set a +*** ../vim-7.2.054/src/os_unix.c Wed Nov 12 14:09:38 2008 +--- src/os_unix.c Fri Nov 28 18:39:55 2008 +*************** +*** 315,326 **** + {-1, "Unknown!", FALSE} + }; + + void + mch_write(s, len) + char_u *s; + int len; + { +! write(1, (char *)s, len); + if (p_wd) /* Unix is too fast, slow down a bit more */ + RealWaitForChar(read_cmd_fd, p_wd, NULL); + } +--- 315,329 ---- + {-1, "Unknown!", FALSE} + }; + ++ /* ++ * Write s[len] to the screen. ++ */ + void + mch_write(s, len) + char_u *s; + int len; + { +! ignored = (int)write(1, (char *)s, len); + if (p_wd) /* Unix is too fast, slow down a bit more */ + RealWaitForChar(read_cmd_fd, p_wd, NULL); + } +*************** +*** 3927,3935 **** + */ + if (fd >= 0) + { +! dup(fd); /* To replace stdin (file descriptor 0) */ +! dup(fd); /* To replace stdout (file descriptor 1) */ +! dup(fd); /* To replace stderr (file descriptor 2) */ + + /* Don't need this now that we've duplicated it */ + close(fd); +--- 3930,3938 ---- + */ + if (fd >= 0) + { +! ignored = dup(fd); /* To replace stdin (fd 0) */ +! ignored = dup(fd); /* To replace stdout (fd 1) */ +! ignored = dup(fd); /* To replace stderr (fd 2) */ + + /* Don't need this now that we've duplicated it */ + close(fd); +*************** +*** 3997,4009 **** + + /* set up stdin/stdout/stderr for the child */ + close(0); +! dup(pty_slave_fd); + close(1); +! dup(pty_slave_fd); + if (gui.in_use) + { + close(2); +! dup(pty_slave_fd); + } + + close(pty_slave_fd); /* has been dupped, close it now */ +--- 4000,4012 ---- + + /* set up stdin/stdout/stderr for the child */ + close(0); +! ignored = dup(pty_slave_fd); + close(1); +! ignored = dup(pty_slave_fd); + if (gui.in_use) + { + close(2); +! ignored = dup(pty_slave_fd); + } + + close(pty_slave_fd); /* has been dupped, close it now */ +*************** +*** 4014,4026 **** + /* set up stdin for the child */ + close(fd_toshell[1]); + close(0); +! dup(fd_toshell[0]); + close(fd_toshell[0]); + + /* set up stdout for the child */ + close(fd_fromshell[0]); + close(1); +! dup(fd_fromshell[1]); + close(fd_fromshell[1]); + + # ifdef FEAT_GUI +--- 4017,4029 ---- + /* set up stdin for the child */ + close(fd_toshell[1]); + close(0); +! ignored = dup(fd_toshell[0]); + close(fd_toshell[0]); + + /* set up stdout for the child */ + close(fd_fromshell[0]); + close(1); +! ignored = dup(fd_fromshell[1]); + close(fd_fromshell[1]); + + # ifdef FEAT_GUI +*************** +*** 4028,4034 **** + { + /* set up stderr for the child */ + close(2); +! dup(1); + } + # endif + } +--- 4031,4037 ---- + { + /* set up stderr for the child */ + close(2); +! ignored = dup(1); + } + # endif + } +*************** +*** 4159,4165 **** + && (lnum != + curbuf->b_ml.ml_line_count + || curbuf->b_p_eol))) +! write(toshell_fd, "\n", (size_t)1); + ++lnum; + if (lnum > curbuf->b_op_end.lnum) + { +--- 4162,4169 ---- + && (lnum != + curbuf->b_ml.ml_line_count + || curbuf->b_p_eol))) +! ignored = write(toshell_fd, "\n", +! (size_t)1); + ++lnum; + if (lnum > curbuf->b_op_end.lnum) + { +*** ../vim-7.2.054/src/spell.c Fri Nov 28 10:08:05 2008 +--- src/spell.c Fri Nov 28 12:28:24 2008 +*************** +*** 4950,4956 **** + static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd)); + static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname)); + static void clear_node __ARGS((wordnode_T *node)); +! static int put_node __ARGS((FILE *fd, wordnode_T *node, int index, int regionmask, int prefixtree)); + static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname)); + static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang)); + static int sug_maketable __ARGS((spellinfo_T *spin)); +--- 4950,4956 ---- + static void put_sugtime __ARGS((spellinfo_T *spin, FILE *fd)); + static int write_vim_spell __ARGS((spellinfo_T *spin, char_u *fname)); + static void clear_node __ARGS((wordnode_T *node)); +! static int put_node __ARGS((FILE *fd, wordnode_T *node, int idx, int regionmask, int prefixtree)); + static void spell_make_sugfile __ARGS((spellinfo_T *spin, char_u *wfname)); + static int sug_filltree __ARGS((spellinfo_T *spin, slang_T *slang)); + static int sug_maketable __ARGS((spellinfo_T *spin)); +*** ../vim-7.2.054/src/ui.c Sun Sep 14 15:57:54 2008 +--- src/ui.c Fri Nov 28 19:04:36 2008 +*************** +*** 1820,1826 **** + #ifdef HAVE_DUP + /* Use stderr for stdin, also works for shell commands. */ + close(0); +! dup(2); + #else + read_cmd_fd = 2; /* read from stderr instead of stdin */ + #endif +--- 1820,1826 ---- + #ifdef HAVE_DUP + /* Use stderr for stdin, also works for shell commands. */ + close(0); +! ignored = dup(2); + #else + read_cmd_fd = 2; /* read from stderr instead of stdin */ + #endif +*** ../vim-7.2.054/src/window.c Sat Nov 15 14:10:23 2008 +--- src/window.c Fri Nov 28 18:46:45 2008 +*************** +*** 4029,4042 **** + if (mch_dirname(cwd, MAXPATHL) == OK) + globaldir = vim_strsave(cwd); + } +! mch_chdir((char *)curwin->w_localdir); +! shorten_fnames(TRUE); + } + else if (globaldir != NULL) + { + /* Window doesn't have a local directory and we are not in the global + * directory: Change to the global directory. */ +! mch_chdir((char *)globaldir); + vim_free(globaldir); + globaldir = NULL; + shorten_fnames(TRUE); +--- 4029,4042 ---- + if (mch_dirname(cwd, MAXPATHL) == OK) + globaldir = vim_strsave(cwd); + } +! if (mch_chdir((char *)curwin->w_localdir) == 0) +! shorten_fnames(TRUE); + } + else if (globaldir != NULL) + { + /* Window doesn't have a local directory and we are not in the global + * directory: Change to the global directory. */ +! ignored = mch_chdir((char *)globaldir); + vim_free(globaldir); + globaldir = NULL; + shorten_fnames(TRUE); +*** ../vim-7.2.054/src/version.c Fri Nov 28 12:05:07 2008 +--- src/version.c Fri Nov 28 21:12:42 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 55, + /**/ + +-- +PRINCE: He's come to rescue me, father. +LAUNCELOT: (embarrassed) Well, let's not jump to conclusions ... + "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/7.2.056 b/7.2.056 new file mode 100644 index 00000000..9e23f3da --- /dev/null +++ b/7.2.056 @@ -0,0 +1,57 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.056 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.056 (after 7.2.050) +Problem: Tests 58 and 59 fail. +Solution: Don't invoke fwrite() with a zero length. (Dominique Pelle) +Files: src/spell.c + + +*** ../vim-7.2.055/src/spell.c Fri Nov 28 21:26:50 2008 +--- src/spell.c Sat Nov 29 19:58:21 2008 +*************** +*** 8112,8118 **** + p = rr == 1 ? ftp->ft_from : ftp->ft_to; + l = (int)STRLEN(p); + putc(l, fd); +! fwv &= fwrite(p, l, (size_t)1, fd); + } + } + +--- 8218,8225 ---- + p = rr == 1 ? ftp->ft_from : ftp->ft_to; + l = (int)STRLEN(p); + putc(l, fd); +! if (l > 0) +! fwv &= fwrite(p, l, (size_t)1, fd); + } + } + +*** ../vim-7.2.055/src/version.c Fri Nov 28 21:26:50 2008 +--- src/version.c Sat Nov 29 20:10:05 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 56, + /**/ + +-- +GUARD #1: Where'd you get the coconut? +ARTHUR: We found them. +GUARD #1: Found them? In Mercea? The coconut's tropical! +ARTHUR: What do you mean? +GUARD #1: Well, this is a temperate zone. + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.057 b/7.2.057 new file mode 100644 index 00000000..37549121 --- /dev/null +++ b/7.2.057 @@ -0,0 +1,111 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.057 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.057 (after 7.2.056) +Problem: Combination of int and size_t may not work. +Solution: Use size_t for variable. +Files: src/spell.c + + +*** ../vim-7.2.056/src/spell.c Sat Nov 29 20:10:59 2008 +--- src/spell.c Sat Nov 29 20:15:43 2008 +*************** +*** 7926,7932 **** + char_u *p; + int rr; + int retval = OK; +! int fwv = 1; /* collect return value of fwrite() to avoid + warnings from picky compiler */ + + fd = mch_fopen((char *)fname, "w"); +--- 8028,8034 ---- + char_u *p; + int rr; + int retval = OK; +! size_t fwv = 1; /* collect return value of fwrite() to avoid + warnings from picky compiler */ + + fd = mch_fopen((char *)fname, "w"); +*************** +*** 7939,7944 **** +--- 8041,8050 ---- + /*
: */ + /* */ + fwv &= fwrite(VIMSPELLMAGIC, VIMSPELLMAGICL, (size_t)1, fd); ++ if (fwv != (size_t)1) ++ /* Catch first write error, don't try writing more. */ ++ goto theend; ++ + putc(VIMSPELLVERSION, fd); /* */ + + /* +*************** +*** 8300,8310 **** + /* Write another byte to check for errors (file system full). */ + if (putc(0, fd) == EOF) + retval = FAIL; +! + if (fclose(fd) == EOF) + retval = FAIL; + +! if (fwv != 1) + retval = FAIL; + if (retval == FAIL) + EMSG(_(e_write)); +--- 8406,8416 ---- + /* Write another byte to check for errors (file system full). */ + if (putc(0, fd) == EOF) + retval = FAIL; +! theend: + if (fclose(fd) == EOF) + retval = FAIL; + +! if (fwv != (size_t)1) + retval = FAIL; + if (retval == FAIL) + EMSG(_(e_write)); +*************** +*** 9897,9903 **** + char_u *p; + int len; + int totlen; +! int x = 1; /* collect return value of fwrite() */ + + if (fd != NULL) + put_bytes(fd, (long_u)gap->ga_len, 2); /* */ +--- 10003,10009 ---- + char_u *p; + int len; + int totlen; +! size_t x = 1; /* collect return value of fwrite() */ + + if (fd != NULL) + put_bytes(fd, (long_u)gap->ga_len, 2); /* */ +*** ../vim-7.2.056/src/version.c Sat Nov 29 20:10:59 2008 +--- src/version.c Sat Nov 29 20:13:46 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 57, + /**/ + +-- +GUARD #1: What -- a swallow carrying a coconut? +ARTHUR: It could grip it by the husk! +GUARD #1: It's not a question of where he grips it! It's a simple question + of weight ratios! A five ounce bird could not carry a 1 pound + coconut. + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.058 b/7.2.058 new file mode 100644 index 00000000..95de243f --- /dev/null +++ b/7.2.058 @@ -0,0 +1,83 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.058 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.058 +Problem: Can't add a patch name to the ":version" output. +Solution: Add the extra_patches array. +Files: src/version.c + + +*** ../vim-7.2.057/src/version.c Sat Nov 29 20:18:44 2008 +--- src/version.c Sun Nov 30 12:12:31 2008 +*************** +*** 794,799 **** +--- 796,814 ---- + 0 + }; + ++ /* ++ * Place to put a short description when adding a feature with a patch. ++ * Keep it short, e.g.,: "relative numbers", "persistent undo". ++ * Also add a comment marker to separate the lines. ++ * See the official Vim patches for the diff format: It must use a context of ++ * one line only. Use "diff -C2". ++ */ ++ static char *(extra_patches[]) = ++ { /* Add your patch description below this line */ ++ /**/ ++ NULL ++ }; ++ + int + highest_patch() + { +*************** +*** 939,944 **** +--- 954,972 ---- + } + } + ++ /* Print the list of extra patch descriptions if there is at least one. */ ++ if (extra_patches[0] != NULL) ++ { ++ MSG_PUTS(_("\nExtra patches: ")); ++ s = ""; ++ for (i = 0; extra_patches[i] != NULL; ++i) ++ { ++ MSG_PUTS(s); ++ s = ", "; ++ MSG_PUTS(extra_patches[i]); ++ } ++ } ++ + #ifdef MODIFIED_BY + MSG_PUTS("\n"); + MSG_PUTS(_("Modified by ")); +*** ../vim-7.2.057/src/version.c Sat Nov 29 20:18:44 2008 +--- src/version.c Sun Nov 30 12:12:31 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 58, + /**/ + +-- +ARTHUR: Well, it doesn't matter. Will you go and tell your master that + Arthur from the Court of Camelot is here. +GUARD #1: Listen, in order to maintain air-speed velocity, a swallow + needs to beat its wings 43 times every second, right? +ARTHUR: Please! + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.059 b/7.2.059 new file mode 100644 index 00000000..0012ad6d --- /dev/null +++ b/7.2.059 @@ -0,0 +1,70 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.059 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.059 +Problem: Diff display is not always updated. +Solution: Update the display more often. +Files: src/diff.c + + +*** ../vim-7.2.058/src/diff.c Fri Nov 28 21:26:50 2008 +--- src/diff.c Fri Nov 28 17:23:35 2008 +*************** +*** 73,78 **** +--- 73,80 ---- + { + tp->tp_diffbuf[i] = NULL; + tp->tp_diff_invalid = TRUE; ++ if (tp == curtab) ++ diff_redraw(TRUE); + } + } + } +*************** +*** 102,107 **** +--- 104,110 ---- + { + curtab->tp_diffbuf[i] = NULL; + curtab->tp_diff_invalid = TRUE; ++ diff_redraw(TRUE); + } + } + } +*************** +*** 131,136 **** +--- 134,140 ---- + { + curtab->tp_diffbuf[i] = buf; + curtab->tp_diff_invalid = TRUE; ++ diff_redraw(TRUE); + return; + } + +*** ../vim-7.2.058/src/version.c Sun Nov 30 12:14:35 2008 +--- src/version.c Sun Nov 30 15:13:18 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 59, + /**/ + +-- +GUARD #2: Wait a minute -- supposing two swallows carried it together? +GUARD #1: No, they'd have to have it on a line. +GUARD #2: Well, simple! They'd just use a standard creeper! +GUARD #1: What, held under the dorsal guiding feathers? +GUARD #2: Well, why not? + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.060 b/7.2.060 new file mode 100644 index 00000000..ec6e6b78 --- /dev/null +++ b/7.2.060 @@ -0,0 +1,1102 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.060 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.060 +Problem: When a spell files has many compound rules it may take a very long + time making the list of suggestions. Displaying also can be slow + when there are misspelled words. + Can't parse some Hunspell .aff files. +Solution: Check if a compounding can possibly work before trying a + combination, if the compound rules don't contain wildcards. + Implement using CHECKCOMPOUNDPATTERN. + Ignore COMPOUNDRULES. Ignore a comment after most items. + Accept ONLYINCOMPOUND as an alias for NEEDCOMPOUND. + Accept FORBIDDENWORD as an alias for BAD. +Files: runtime/doc/spell.txt, src/spell.c + + +*** ../vim-7.2.059/runtime/doc/spell.txt Sat Aug 9 19:36:52 2008 +--- runtime/doc/spell.txt Sun Nov 30 16:30:02 2008 +*************** +*** 1,4 **** +! *spell.txt* For Vim version 7.2. Last change: 2008 Jun 21 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *spell.txt* For Vim version 7.2. Last change: 2008 Nov 30 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 831,838 **** + + # comment line ~ + +! With some items it's also possible to put a comment after it, but this isn't +! supported in general. + + + ENCODING *spell-SET* +--- 831,841 ---- + + # comment line ~ + +! Items with a fixed number of arguments can be followed by a comment. But only +! if none of the arguments can contain white space. The comment must start with +! a "#" character. Example: +! +! KEEPCASE = # fix case for words with this flag ~ + + + ENCODING *spell-SET* +*************** +*** 965,970 **** +--- 968,976 ---- + + Note: When using utf-8 only characters up to 65000 may be used for flags. + ++ Note: even when using "num" or "long" the number of flags available to ++ compounding and prefixes is limited to about 250. ++ + + AFFIXES + *spell-PFX* *spell-SFX* +*************** +*** 1178,1183 **** +--- 1185,1193 ---- + The flag also applies to the word with affixes, thus this can be used to mark + a whole bunch of related words as bad. + ++ *spell-FORBIDDENWORD* ++ FORBIDDENWORD can be used just like BAD. For compatibility with Hunspell. ++ + *spell-NEEDAFFIX* + The NEEDAFFIX flag is used to require that a word is used with an affix. The + word itself is not a good word (unless there is an empty affix). Example: +*************** +*** 1268,1273 **** +--- 1278,1287 ---- + + NEEDCOMPOUND & ~ + ++ *spell-ONLYINCOMPOUND* ++ The ONLYINCOMPOUND does exactly the same as NEEDCOMPOUND. Supported for ++ compatiblity with Hunspell. ++ + *spell-COMPOUNDMIN* + The minimal character length of a word used for compounding is specified with + COMPOUNDMIN. Example: +*************** +*** 1328,1333 **** +--- 1342,1361 ---- + rules. Can also be used for an affix to count the affix as a compounding + word. + ++ *spell-CHECKCOMPOUNDPATTERN* ++ CHECKCOMPOUNDPATTERN is used to define patterns that, when matching at the ++ position where two words are compounded together forbids the compound. ++ For example: ++ CHECKCOMPOUNDPATTERN o e ~ ++ ++ This forbids compounding if the first word ends in "o" and the second word ++ starts with "e". ++ ++ The arguments must be plain text, no patterns are actually supported, despite ++ the item name. Case is always ignored. ++ ++ The Hunspell feature to use three arguments and flags is not supported. ++ + *spell-SYLLABLE* + The SYLLABLE item defines characters or character sequences that are used to + count the number of syllables in a word. Example: +*************** +*** 1496,1501 **** +--- 1524,1533 ---- + ACCENT (Hunspell) *spell-ACCENT* + Use MAP instead. |spell-MAP| + ++ BREAK (Hunspell) *spell-BREAK* ++ Define break points. Unclear how it works exactly. ++ Not supported. ++ + CHECKCOMPOUNDCASE (Hunspell) *spell-CHECKCOMPOUNDCASE* + Disallow uppercase letters at compound word boundaries. + Not supported. +*************** +*** 1512,1520 **** + Forbid three identical characters when compounding. Not + supported. + +- CHECKCOMPOUNDPATTERN (Hunspell) *spell-CHECKCOMPOUNDPATTERN* +- Forbid compounding when patterns match. Not supported. +- + COMPLEXPREFIXES (Hunspell) *spell-COMPLEXPREFIXES* + Enables using two prefixes. Not supported. + +--- 1544,1549 ---- +*************** +*** 1536,1548 **** + COMPOUNDMIDDLE (Hunspell) *spell-COMPOUNDMIDDLE* + Use COMPOUNDRULE instead. |spell-COMPOUNDRULE| + + COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE* + Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE| + |spell-COMPOUNDSYLMAX| + +! FORBIDDENWORD (Hunspell) *spell-FORBIDDENWORD* +! Use BAD instead. |spell-BAD| +! + LANG (Hunspell) *spell-LANG* + This specifies language-specific behavior. This actually + moves part of the language knowledge into the program, +--- 1565,1582 ---- + COMPOUNDMIDDLE (Hunspell) *spell-COMPOUNDMIDDLE* + Use COMPOUNDRULE instead. |spell-COMPOUNDRULE| + ++ COMPOUNDRULES (Hunspell) *spell-COMPOUNDRULES* ++ Number of COMPOUNDRULE lines following. Ignored, but the ++ argument must be a number. ++ + COMPOUNDSYLLABLE (Hunspell) *spell-COMPOUNDSYLLABLE* + Use SYLLABLE and COMPOUNDSYLMAX instead. |spell-SYLLABLE| + |spell-COMPOUNDSYLMAX| + +! KEY (Hunspell) *spell-KEY* +! Define characters that are close together on the keyboard. +! Used to give better suggestions. Not supported. +! + LANG (Hunspell) *spell-LANG* + This specifies language-specific behavior. This actually + moves part of the language knowledge into the program, +*************** +*** 1553,1562 **** + Only needed for morphological analysis. + + MAXNGRAMSUGS (Hunspell) *spell-MAXNGRAMSUGS* +! Not supported. +! +! ONLYINCOMPOUND (Hunspell) *spell-ONLYINCOMPOUND* +! Use NEEDCOMPOUND instead. |spell-NEEDCOMPOUND| + + PSEUDOROOT (Hunspell) *spell-PSEUDOROOT* + Use NEEDAFFIX instead. |spell-NEEDAFFIX| +--- 1587,1593 ---- + Only needed for morphological analysis. + + MAXNGRAMSUGS (Hunspell) *spell-MAXNGRAMSUGS* +! Set number of n-gram suggestions. Not supported. + + PSEUDOROOT (Hunspell) *spell-PSEUDOROOT* + Use NEEDAFFIX instead. |spell-NEEDAFFIX| +*** ../vim-7.2.059/src/spell.c Sat Nov 29 20:18:44 2008 +--- src/spell.c Sun Nov 30 20:59:13 2008 +*************** +*** 469,474 **** +--- 469,475 ---- + garray_T sl_comppat; /* CHECKCOMPOUNDPATTERN items */ + regprog_T *sl_compprog; /* COMPOUNDRULE turned into a regexp progrm + * (NULL when no compounding) */ ++ char_u *sl_comprules; /* all COMPOUNDRULE concatenated (or NULL) */ + char_u *sl_compstartflags; /* flags for first compound word */ + char_u *sl_compallflags; /* all flags for compound words */ + char_u sl_nobreak; /* When TRUE: no spaces between words */ +*************** +*** 839,845 **** +--- 840,849 ---- + static void slang_clear __ARGS((slang_T *lp)); + static void slang_clear_sug __ARGS((slang_T *lp)); + static void find_word __ARGS((matchinf_T *mip, int mode)); ++ static int match_checkcompoundpattern __ARGS((char_u *ptr, int wlen, garray_T *gap)); + static int can_compound __ARGS((slang_T *slang, char_u *word, char_u *flags)); ++ static int can_be_compound __ARGS((trystate_T *sp, slang_T *slang, char_u *compflags, int flag)); ++ static int match_compoundrule __ARGS((slang_T *slang, char_u *compflags)); + static int valid_word_prefix __ARGS((int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req)); + static void find_prefix __ARGS((matchinf_T *mip, int mode)); + static int fold_more __ARGS((matchinf_T *mip)); +*************** +*** 1519,1524 **** +--- 1523,1533 ---- + ((unsigned)flags >> 24))) + continue; + ++ /* If there is a match with a CHECKCOMPOUNDPATTERN rule ++ * discard the compound word. */ ++ if (match_checkcompoundpattern(ptr, wlen, &slang->sl_comppat)) ++ continue; ++ + if (mode == FIND_COMPOUND) + { + int capflags; +*************** +*** 1577,1582 **** +--- 1586,1596 ---- + if (!can_compound(slang, fword, mip->mi_compflags)) + continue; + } ++ else if (slang->sl_comprules != NULL ++ && !match_compoundrule(slang, mip->mi_compflags)) ++ /* The compound flags collected so far do not match any ++ * COMPOUNDRULE, discard the compounded word. */ ++ continue; + } + + /* Check NEEDCOMPOUND: can't use word without compounding. */ +*************** +*** 1727,1732 **** +--- 1741,1779 ---- + } + + /* ++ * Return TRUE if there is a match between the word ptr[wlen] and ++ * CHECKCOMPOUNDPATTERN rules, assuming that we will concatenate with another ++ * word. ++ * A match means that the first part of CHECKCOMPOUNDPATTERN matches at the ++ * end of ptr[wlen] and the second part matches after it. ++ */ ++ static int ++ match_checkcompoundpattern(ptr, wlen, gap) ++ char_u *ptr; ++ int wlen; ++ garray_T *gap; /* &sl_comppat */ ++ { ++ int i; ++ char_u *p; ++ int len; ++ ++ for (i = 0; i + 1 < gap->ga_len; i += 2) ++ { ++ p = ((char_u **)gap->ga_data)[i + 1]; ++ if (STRNCMP(ptr + wlen, p, STRLEN(p)) == 0) ++ { ++ /* Second part matches at start of following compound word, now ++ * check if first part matches at end of previous word. */ ++ p = ((char_u **)gap->ga_data)[i]; ++ len = STRLEN(p); ++ if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0) ++ return TRUE; ++ } ++ } ++ return FALSE; ++ } ++ ++ /* + * Return TRUE if "flags" is a valid sequence of compound flags and "word" + * does not have too many syllables. + */ +*************** +*** 1773,1778 **** +--- 1820,1917 ---- + } + + /* ++ * Return TRUE when the sequence of flags in "compflags" plus "flag" can ++ * possibly form a valid compounded word. This also checks the COMPOUNDRULE ++ * lines if they don't contain wildcards. ++ */ ++ static int ++ can_be_compound(sp, slang, compflags, flag) ++ trystate_T *sp; ++ slang_T *slang; ++ char_u *compflags; ++ int flag; ++ { ++ /* If the flag doesn't appear in sl_compstartflags or sl_compallflags ++ * then it can't possibly compound. */ ++ if (!byte_in_str(sp->ts_complen == sp->ts_compsplit ++ ? slang->sl_compstartflags : slang->sl_compallflags, flag)) ++ return FALSE; ++ ++ /* If there are no wildcards, we can check if the flags collected so far ++ * possibly can form a match with COMPOUNDRULE patterns. This only ++ * makes sense when we have two or more words. */ ++ if (slang->sl_comprules != NULL && sp->ts_complen > sp->ts_compsplit) ++ { ++ int v; ++ ++ compflags[sp->ts_complen] = flag; ++ compflags[sp->ts_complen + 1] = NUL; ++ v = match_compoundrule(slang, compflags + sp->ts_compsplit); ++ compflags[sp->ts_complen] = NUL; ++ return v; ++ } ++ ++ return TRUE; ++ } ++ ++ ++ /* ++ * Return TRUE if the compound flags in compflags[] match the start of any ++ * compound rule. This is used to stop trying a compound if the flags ++ * collected so far can't possibly match any compound rule. ++ * Caller must check that slang->sl_comprules is not NULL. ++ */ ++ static int ++ match_compoundrule(slang, compflags) ++ slang_T *slang; ++ char_u *compflags; ++ { ++ char_u *p; ++ int i; ++ int c; ++ ++ /* loop over all the COMPOUNDRULE entries */ ++ for (p = slang->sl_comprules; *p != NUL; ++p) ++ { ++ /* loop over the flags in the compound word we have made, match ++ * them against the current rule entry */ ++ for (i = 0; ; ++i) ++ { ++ c = compflags[i]; ++ if (c == NUL) ++ /* found a rule that matches for the flags we have so far */ ++ return TRUE; ++ if (*p == '/' || *p == NUL) ++ break; /* end of rule, it's too short */ ++ if (*p == '[') ++ { ++ int match = FALSE; ++ ++ /* compare against all the flags in [] */ ++ ++p; ++ while (*p != ']' && *p != NUL) ++ if (*p++ == c) ++ match = TRUE; ++ if (!match) ++ break; /* none matches */ ++ } ++ else if (*p != c) ++ break; /* flag of word doesn't match flag in pattern */ ++ ++p; ++ } ++ ++ /* Skip to the next "/", where the next pattern starts. */ ++ p = vim_strchr(p, '/'); ++ if (p == NULL) ++ break; ++ } ++ ++ /* Checked all the rules and none of them match the flags, so there ++ * can't possibly be a compound starting with these flags. */ ++ return FALSE; ++ } ++ ++ /* + * Return non-zero if the prefix indicated by "arridx" matches with the prefix + * ID in "flags" for the word "word". + * The WF_RAREPFX flag is included in the return value for a rare prefix. +*************** +*** 2513,2521 **** +--- 2652,2662 ---- + lp->sl_midword = NULL; + + vim_free(lp->sl_compprog); ++ vim_free(lp->sl_comprules); + vim_free(lp->sl_compstartflags); + vim_free(lp->sl_compallflags); + lp->sl_compprog = NULL; ++ lp->sl_comprules = NULL; + lp->sl_compstartflags = NULL; + lp->sl_compallflags = NULL; + +*************** +*** 3460,3465 **** +--- 3601,3607 ---- + char_u *pp; + char_u *cp; + char_u *ap; ++ char_u *crp; + int cnt; + garray_T *gap; + +*************** +*** 3545,3550 **** +--- 3687,3698 ---- + slang->sl_compallflags = ap; + *ap = NUL; + ++ /* And a list of all patterns in their original form, for checking whether ++ * compounding may work in match_compoundrule(). This is freed when we ++ * encounter a wildcard, the check doesn't work then. */ ++ crp = alloc(todo + 1); ++ slang->sl_comprules = crp; ++ + pp = pat; + *pp++ = '^'; + *pp++ = '\\'; +*************** +*** 3587,3592 **** +--- 3735,3754 ---- + atstart = 0; + } + } ++ ++ /* Copy flag to "sl_comprules", unless we run into a wildcard. */ ++ if (crp != NULL) ++ { ++ if (c == '+' || c == '*') ++ { ++ vim_free(slang->sl_comprules); ++ slang->sl_comprules = NULL; ++ crp = NULL; ++ } ++ else ++ *crp++ = c; ++ } ++ + if (c == '/') /* slash separates two items */ + { + *pp++ = '\\'; +*************** +*** 3611,3616 **** +--- 3773,3781 ---- + *pp++ = '$'; + *pp = NUL; + ++ if (crp != NULL) ++ *crp = NUL; ++ + slang->sl_compprog = vim_regcomp(pat, RE_MAGIC + RE_STRING + RE_STRICT); + vim_free(pat); + if (slang->sl_compprog == NULL) +*************** +*** 4915,4920 **** +--- 5080,5086 ---- + } spellinfo_T; + + static afffile_T *spell_read_aff __ARGS((spellinfo_T *spin, char_u *fname)); ++ static int is_aff_rule __ARGS((char_u **items, int itemcnt, char *rulename, int mincount)); + static void aff_process_flags __ARGS((afffile_T *affile, affentry_T *entry)); + static int spell_info_item __ARGS((char_u *s)); + static unsigned affitem2flag __ARGS((int flagtype, char_u *item, char_u *fname, int lnum)); +*************** +*** 5223,5230 **** + /* Handle non-empty lines. */ + if (itemcnt > 0) + { +! if (STRCMP(items[0], "SET") == 0 && itemcnt == 2 +! && aff->af_enc == NULL) + { + #ifdef FEAT_MBYTE + /* Setup for conversion from "ENC" to 'encoding'. */ +--- 5389,5395 ---- + /* Handle non-empty lines. */ + if (itemcnt > 0) + { +! if (is_aff_rule(items, itemcnt, "SET", 2) && aff->af_enc == NULL) + { + #ifdef FEAT_MBYTE + /* Setup for conversion from "ENC" to 'encoding'. */ +*************** +*** 5239,5245 **** + smsg((char_u *)_("Conversion in %s not supported"), fname); + #endif + } +! else if (STRCMP(items[0], "FLAG") == 0 && itemcnt == 2 + && aff->af_flagtype == AFT_CHAR) + { + if (STRCMP(items[1], "long") == 0) +--- 5404,5410 ---- + smsg((char_u *)_("Conversion in %s not supported"), fname); + #endif + } +! else if (is_aff_rule(items, itemcnt, "FLAG", 2) + && aff->af_flagtype == AFT_CHAR) + { + if (STRCMP(items[1], "long") == 0) +*************** +*** 5284,5352 **** + spin->si_info = p; + } + } +! else if (STRCMP(items[0], "MIDWORD") == 0 && itemcnt == 2 + && midword == NULL) + { + midword = getroom_save(spin, items[1]); + } +! else if (STRCMP(items[0], "TRY") == 0 && itemcnt == 2) + { + /* ignored, we look in the tree for what chars may appear */ + } + /* TODO: remove "RAR" later */ +! else if ((STRCMP(items[0], "RAR") == 0 +! || STRCMP(items[0], "RARE") == 0) && itemcnt == 2 +! && aff->af_rare == 0) + { + aff->af_rare = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } + /* TODO: remove "KEP" later */ +! else if ((STRCMP(items[0], "KEP") == 0 +! || STRCMP(items[0], "KEEPCASE") == 0) && itemcnt == 2 + && aff->af_keepcase == 0) + { + aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "BAD") == 0 && itemcnt == 2 +! && aff->af_bad == 0) + { + aff->af_bad = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "NEEDAFFIX") == 0 && itemcnt == 2 + && aff->af_needaffix == 0) + { + aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "CIRCUMFIX") == 0 && itemcnt == 2 + && aff->af_circumfix == 0) + { + aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "NOSUGGEST") == 0 && itemcnt == 2 + && aff->af_nosuggest == 0) + { + aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "NEEDCOMPOUND") == 0 && itemcnt == 2 + && aff->af_needcomp == 0) + { + aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "COMPOUNDROOT") == 0 && itemcnt == 2 + && aff->af_comproot == 0) + { + aff->af_comproot = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (STRCMP(items[0], "COMPOUNDFORBIDFLAG") == 0 +! && itemcnt == 2 && aff->af_compforbid == 0) + { + aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); +--- 5449,5519 ---- + spin->si_info = p; + } + } +! else if (is_aff_rule(items, itemcnt, "MIDWORD", 2) + && midword == NULL) + { + midword = getroom_save(spin, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "TRY", 2)) + { + /* ignored, we look in the tree for what chars may appear */ + } + /* TODO: remove "RAR" later */ +! else if ((is_aff_rule(items, itemcnt, "RAR", 2) +! || is_aff_rule(items, itemcnt, "RARE", 2)) +! && aff->af_rare == 0) + { + aff->af_rare = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } + /* TODO: remove "KEP" later */ +! else if ((is_aff_rule(items, itemcnt, "KEP", 2) +! || is_aff_rule(items, itemcnt, "KEEPCASE", 2)) + && aff->af_keepcase == 0) + { + aff->af_keepcase = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if ((is_aff_rule(items, itemcnt, "BAD", 2) +! || is_aff_rule(items, itemcnt, "FORBIDDENWORD", 2)) +! && aff->af_bad == 0) + { + aff->af_bad = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "NEEDAFFIX", 2) + && aff->af_needaffix == 0) + { + aff->af_needaffix = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "CIRCUMFIX", 2) + && aff->af_circumfix == 0) + { + aff->af_circumfix = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "NOSUGGEST", 2) + && aff->af_nosuggest == 0) + { + aff->af_nosuggest = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if ((is_aff_rule(items, itemcnt, "NEEDCOMPOUND", 2) +! || is_aff_rule(items, itemcnt, "ONLYINCOMPOUND", 2)) + && aff->af_needcomp == 0) + { + aff->af_needcomp = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDROOT", 2) + && aff->af_comproot == 0) + { + aff->af_comproot = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDFORBIDFLAG", 2) +! && aff->af_compforbid == 0) + { + aff->af_compforbid = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); +*************** +*** 5354,5361 **** + smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"), + fname, lnum); + } +! else if (STRCMP(items[0], "COMPOUNDPERMITFLAG") == 0 +! && itemcnt == 2 && aff->af_comppermit == 0) + { + aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); +--- 5521,5528 ---- + smsg((char_u *)_("Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"), + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDPERMITFLAG", 2) +! && aff->af_comppermit == 0) + { + aff->af_comppermit = affitem2flag(aff->af_flagtype, items[1], + fname, lnum); +*************** +*** 5363,5369 **** + smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"), + fname, lnum); + } +! else if (STRCMP(items[0], "COMPOUNDFLAG") == 0 && itemcnt == 2 + && compflags == NULL) + { + /* Turn flag "c" into COMPOUNDRULE compatible string "c+", +--- 5530,5536 ---- + smsg((char_u *)_("Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"), + fname, lnum); + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDFLAG", 2) + && compflags == NULL) + { + /* Turn flag "c" into COMPOUNDRULE compatible string "c+", +*************** +*** 5376,5382 **** + compflags = p; + } + } +! else if (STRCMP(items[0], "COMPOUNDRULE") == 0 && itemcnt == 2) + { + /* Concatenate this string to previously defined ones, using a + * slash to separate them. */ +--- 5543,5557 ---- + compflags = p; + } + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDRULES", 2)) +! { +! /* We don't use the count, but do check that it's a number and +! * not COMPOUNDRULE mistyped. */ +! if (atoi((char *)items[1]) == 0) +! smsg((char_u *)_("Wrong COMPOUNDRULES value in %s line %d: %s"), +! fname, lnum, items[1]); +! } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2)) + { + /* Concatenate this string to previously defined ones, using a + * slash to separate them. */ +*************** +*** 5395,5401 **** + compflags = p; + } + } +! else if (STRCMP(items[0], "COMPOUNDWORDMAX") == 0 && itemcnt == 2 + && compmax == 0) + { + compmax = atoi((char *)items[1]); +--- 5570,5576 ---- + compflags = p; + } + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2) + && compmax == 0) + { + compmax = atoi((char *)items[1]); +*************** +*** 5403,5409 **** + smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (STRCMP(items[0], "COMPOUNDMIN") == 0 && itemcnt == 2 + && compminlen == 0) + { + compminlen = atoi((char *)items[1]); +--- 5578,5584 ---- + smsg((char_u *)_("Wrong COMPOUNDWORDMAX value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDMIN", 2) + && compminlen == 0) + { + compminlen = atoi((char *)items[1]); +*************** +*** 5411,5417 **** + smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (STRCMP(items[0], "COMPOUNDSYLMAX") == 0 && itemcnt == 2 + && compsylmax == 0) + { + compsylmax = atoi((char *)items[1]); +--- 5586,5592 ---- + smsg((char_u *)_("Wrong COMPOUNDMIN value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "COMPOUNDSYLMAX", 2) + && compsylmax == 0) + { + compsylmax = atoi((char *)items[1]); +*************** +*** 5419,5450 **** + smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (STRCMP(items[0], "CHECKCOMPOUNDDUP") == 0 && itemcnt == 1) + { + compoptions |= COMP_CHECKDUP; + } +! else if (STRCMP(items[0], "CHECKCOMPOUNDREP") == 0 && itemcnt == 1) + { + compoptions |= COMP_CHECKREP; + } +! else if (STRCMP(items[0], "CHECKCOMPOUNDCASE") == 0 && itemcnt == 1) + { + compoptions |= COMP_CHECKCASE; + } +! else if (STRCMP(items[0], "CHECKCOMPOUNDTRIPLE") == 0 +! && itemcnt == 1) + { + compoptions |= COMP_CHECKTRIPLE; + } +! else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0 +! && itemcnt == 2) + { + if (atoi((char *)items[1]) == 0) + smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (STRCMP(items[0], "CHECKCOMPOUNDPATTERN") == 0 +! && itemcnt == 3) + { + garray_T *gap = &spin->si_comppat; + int i; +--- 5594,5622 ---- + smsg((char_u *)_("Wrong COMPOUNDSYLMAX value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDDUP", 1)) + { + compoptions |= COMP_CHECKDUP; + } +! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDREP", 1)) + { + compoptions |= COMP_CHECKREP; + } +! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDCASE", 1)) + { + compoptions |= COMP_CHECKCASE; + } +! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDTRIPLE", 1)) + { + compoptions |= COMP_CHECKTRIPLE; + } +! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 2)) + { + if (atoi((char *)items[1]) == 0) + smsg((char_u *)_("Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"), + fname, lnum, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "CHECKCOMPOUNDPATTERN", 3)) + { + garray_T *gap = &spin->si_comppat; + int i; +*************** +*** 5463,5486 **** + = getroom_save(spin, items[2]); + } + } +! else if (STRCMP(items[0], "SYLLABLE") == 0 && itemcnt == 2 + && syllable == NULL) + { + syllable = getroom_save(spin, items[1]); + } +! else if (STRCMP(items[0], "NOBREAK") == 0 && itemcnt == 1) + { + spin->si_nobreak = TRUE; + } +! else if (STRCMP(items[0], "NOSPLITSUGS") == 0 && itemcnt == 1) + { + spin->si_nosplitsugs = TRUE; + } +! else if (STRCMP(items[0], "NOSUGFILE") == 0 && itemcnt == 1) + { + spin->si_nosugfile = TRUE; + } +! else if (STRCMP(items[0], "PFXPOSTPONE") == 0 && itemcnt == 1) + { + aff->af_pfxpostpone = TRUE; + } +--- 5635,5658 ---- + = getroom_save(spin, items[2]); + } + } +! else if (is_aff_rule(items, itemcnt, "SYLLABLE", 2) + && syllable == NULL) + { + syllable = getroom_save(spin, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "NOBREAK", 1)) + { + spin->si_nobreak = TRUE; + } +! else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1)) + { + spin->si_nosplitsugs = TRUE; + } +! else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1)) + { + spin->si_nosugfile = TRUE; + } +! else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1)) + { + aff->af_pfxpostpone = TRUE; + } +*************** +*** 5771,5794 **** + } + } + } +! else if (STRCMP(items[0], "FOL") == 0 && itemcnt == 2 +! && fol == NULL) + { + fol = vim_strsave(items[1]); + } +! else if (STRCMP(items[0], "LOW") == 0 && itemcnt == 2 +! && low == NULL) + { + low = vim_strsave(items[1]); + } +! else if (STRCMP(items[0], "UPP") == 0 && itemcnt == 2 +! && upp == NULL) + { + upp = vim_strsave(items[1]); + } +! else if ((STRCMP(items[0], "REP") == 0 +! || STRCMP(items[0], "REPSAL") == 0) +! && itemcnt == 2) + { + /* Ignore REP/REPSAL count */; + if (!isdigit(*items[1])) +--- 5943,5962 ---- + } + } + } +! else if (is_aff_rule(items, itemcnt, "FOL", 2) && fol == NULL) + { + fol = vim_strsave(items[1]); + } +! else if (is_aff_rule(items, itemcnt, "LOW", 2) && low == NULL) + { + low = vim_strsave(items[1]); + } +! else if (is_aff_rule(items, itemcnt, "UPP", 2) && upp == NULL) + { + upp = vim_strsave(items[1]); + } +! else if (is_aff_rule(items, itemcnt, "REP", 2) +! || is_aff_rule(items, itemcnt, "REPSAL", 2)) + { + /* Ignore REP/REPSAL count */; + if (!isdigit(*items[1])) +*************** +*** 5819,5825 **** + : &spin->si_rep, items[1], items[2]); + } + } +! else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2) + { + /* MAP item or count */ + if (!found_map) +--- 5987,5993 ---- + : &spin->si_rep, items[1], items[2]); + } + } +! else if (is_aff_rule(items, itemcnt, "MAP", 2)) + { + /* MAP item or count */ + if (!found_map) +*************** +*** 5856,5864 **** + ga_append(&spin->si_map, '/'); + } + } +! /* Accept "SAL from to" and "SAL from to # comment". */ +! else if (STRCMP(items[0], "SAL") == 0 +! && (itemcnt == 3 || (itemcnt > 3 && items[3][0] == '#'))) + { + if (do_sal) + { +--- 6024,6031 ---- + ga_append(&spin->si_map, '/'); + } + } +! /* Accept "SAL from to" and "SAL from to #comment". */ +! else if (is_aff_rule(items, itemcnt, "SAL", 3)) + { + if (do_sal) + { +*************** +*** 5877,5888 **** + : items[2]); + } + } +! else if (STRCMP(items[0], "SOFOFROM") == 0 && itemcnt == 2 + && sofofrom == NULL) + { + sofofrom = getroom_save(spin, items[1]); + } +! else if (STRCMP(items[0], "SOFOTO") == 0 && itemcnt == 2 + && sofoto == NULL) + { + sofoto = getroom_save(spin, items[1]); +--- 6044,6055 ---- + : items[2]); + } + } +! else if (is_aff_rule(items, itemcnt, "SOFOFROM", 2) + && sofofrom == NULL) + { + sofofrom = getroom_save(spin, items[1]); + } +! else if (is_aff_rule(items, itemcnt, "SOFOTO", 2) + && sofoto == NULL) + { + sofoto = getroom_save(spin, items[1]); +*************** +*** 6017,6022 **** +--- 6184,6205 ---- + } + + /* ++ * Return TRUE when items[0] equals "rulename", there are "mincount" items or ++ * a comment is following after item "mincount". ++ */ ++ static int ++ is_aff_rule(items, itemcnt, rulename, mincount) ++ char_u **items; ++ int itemcnt; ++ char *rulename; ++ int mincount; ++ { ++ return (STRCMP(items[0], rulename) == 0 ++ && (itemcnt == mincount ++ || (itemcnt > mincount && items[mincount][0] == '#'))); ++ } ++ ++ /* + * For affix "entry" move COMPOUNDFORBIDFLAG and COMPOUNDPERMITFLAG from + * ae_flags to ae_comppermit and ae_compforbid. + */ +*************** +*** 11492,11506 **** + vim_strncpy(preword + sp->ts_prewordlen, + tword + sp->ts_splitoff, + sp->ts_twordlen - sp->ts_splitoff); +! p = preword; +! while (*skiptowhite(p) != NUL) +! p = skipwhite(skiptowhite(p)); +! if (fword_ends && !can_compound(slang, p, +! compflags + sp->ts_compsplit)) +! /* Compound is not allowed. But it may still be +! * possible if we add another (short) word. */ + compound_ok = FALSE; + + /* Get pointer to last char of previous word. */ + p = preword + sp->ts_prewordlen; + mb_ptr_back(preword, p); +--- 11675,11698 ---- + vim_strncpy(preword + sp->ts_prewordlen, + tword + sp->ts_splitoff, + sp->ts_twordlen - sp->ts_splitoff); +! +! /* Verify CHECKCOMPOUNDPATTERN rules. */ +! if (match_checkcompoundpattern(preword, sp->ts_prewordlen, +! &slang->sl_comppat)) + compound_ok = FALSE; + ++ if (compound_ok) ++ { ++ p = preword; ++ while (*skiptowhite(p) != NUL) ++ p = skipwhite(skiptowhite(p)); ++ if (fword_ends && !can_compound(slang, p, ++ compflags + sp->ts_compsplit)) ++ /* Compound is not allowed. But it may still be ++ * possible if we add another (short) word. */ ++ compound_ok = FALSE; ++ } ++ + /* Get pointer to last char of previous word. */ + p = preword + sp->ts_prewordlen; + mb_ptr_back(preword, p); +*************** +*** 11697,11706 **** + && (slang->sl_compsylmax < MAXWLEN + || sp->ts_complen + 1 - sp->ts_compsplit + < slang->sl_compmax) +! && (byte_in_str(sp->ts_complen == sp->ts_compsplit +! ? slang->sl_compstartflags +! : slang->sl_compallflags, +! ((unsigned)flags >> 24)))) + { + try_compound = TRUE; + compflags[sp->ts_complen] = ((unsigned)flags >> 24); +--- 11889,11897 ---- + && (slang->sl_compsylmax < MAXWLEN + || sp->ts_complen + 1 - sp->ts_compsplit + < slang->sl_compmax) +! && (can_be_compound(sp, slang, +! compflags, ((unsigned)flags >> 24)))) +! + { + try_compound = TRUE; + compflags[sp->ts_complen] = ((unsigned)flags >> 24); +*** ../vim-7.2.059/src/version.c Sun Nov 30 15:15:56 2008 +--- src/version.c Sun Nov 30 21:09:23 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 60, + /**/ + +-- +DEAD PERSON: I'm getting better! +CUSTOMER: No, you're not -- you'll be stone dead in a moment. +MORTICIAN: Oh, I can't take him like that -- it's against regulations. + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.061 b/7.2.061 new file mode 100644 index 00000000..787aa66a --- /dev/null +++ b/7.2.061 @@ -0,0 +1,56 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.061 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.061 +Problem: Can't create a funcref for an autoload function without loading + the script first. (Marc Weber) +Solution: Accept autoload functions that don't exist yet in function(). +Files: src/eval.c + + +*** ../vim-7.2.060/src/eval.c Fri Nov 28 21:26:50 2008 +--- src/eval.c Sat Nov 29 12:28:51 2008 +*************** +*** 10339,10345 **** + s = get_tv_string(&argvars[0]); + if (s == NULL || *s == NUL || VIM_ISDIGIT(*s)) + EMSG2(_(e_invarg2), s); +! else if (!function_exists(s)) + EMSG2(_("E700: Unknown function: %s"), s); + else + { +--- 10339,10346 ---- + s = get_tv_string(&argvars[0]); + if (s == NULL || *s == NUL || VIM_ISDIGIT(*s)) + EMSG2(_(e_invarg2), s); +! /* Don't check an autoload name for existence here. */ +! else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s)) + EMSG2(_("E700: Unknown function: %s"), s); + else + { +*** ../vim-7.2.060/src/version.c Sun Nov 30 21:11:54 2008 +--- src/version.c Wed Dec 3 09:49:07 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 61, + /**/ + +-- +There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU, +Linux, etc, and those who know COBOL. It gets very difficult for me at +parties, not knowing which group to socialise with :-) + Sitaram Chamarty + + /// 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/7.2.062 b/7.2.062 new file mode 100644 index 00000000..6b4b8909 --- /dev/null +++ b/7.2.062 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.062 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.062 +Problem: "[Scratch]" is not translated. +Solution: Mark the string for translation. (Dominique Pelle) +Files: src/buffer.c + + +*** ../vim-7.2.061/src/buffer.c Sat Nov 15 16:05:30 2008 +--- src/buffer.c Tue Dec 2 21:51:02 2008 +*************** +*** 5118,5124 **** + { + if (buf->b_sfname != NULL) + return (char *)buf->b_sfname; +! return "[Scratch]"; + } + #endif + if (buf->b_fname == NULL) +--- 5118,5124 ---- + { + if (buf->b_sfname != NULL) + return (char *)buf->b_sfname; +! return _("[Scratch]"); + } + #endif + if (buf->b_fname == NULL) +*** ../vim-7.2.061/src/version.c Wed Dec 3 09:51:19 2008 +--- src/version.c Wed Dec 3 11:20:30 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 62, + /**/ + +-- +DENNIS: Listen -- strange women lying in ponds distributing swords is no + basis for a system of government. Supreme executive power derives + from a mandate from the masses, not from some farcical aquatic + ceremony. + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.063 b/7.2.063 new file mode 100644 index 00000000..f9515546 --- /dev/null +++ b/7.2.063 @@ -0,0 +1,103 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.063 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.063 +Problem: Warning for NULL argument of Perl_sys_init3(). +Solution: Use Perl_sys_init() instead. (partly by Dominique Pelle) +Files: src/if_perl.xs + + +*** ../vim-7.2.062/src/if_perl.xs Mon Sep 1 17:56:05 2008 +--- src/if_perl.xs Wed Dec 3 12:44:38 2008 +*************** +*** 166,172 **** + # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr + # define boot_DynaLoader dll_boot_DynaLoader + +! # define Perl_sys_init3 dll_Perl_sys_init3 + # define Perl_sys_term dll_Perl_sys_term + # define Perl_ISv_ptr dll_Perl_ISv_ptr + # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr +--- 166,172 ---- + # define Perl_Isv_yes_ptr dll_Perl_Isv_yes_ptr + # define boot_DynaLoader dll_boot_DynaLoader + +! # define Perl_sys_init dll_Perl_sys_init + # define Perl_sys_term dll_Perl_sys_term + # define Perl_ISv_ptr dll_Perl_ISv_ptr + # define Perl_Istack_max_ptr dll_Perl_Istack_max_ptr +*************** +*** 272,278 **** + + #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*); + static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*); +--- 272,278 ---- + + #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) + static void (*Perl_sv_free2)(pTHX_ SV*); +! static void (*Perl_sys_init)(int* argc, char*** argv); + static void (*Perl_sys_term)(void); + static SV** (*Perl_ISv_ptr)(register PerlInterpreter*); + static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*); +*************** +*** 372,378 **** + {"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}, + {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr}, +--- 372,378 ---- + {"Perl_Tna_ptr", (PERL_PROC*)&Perl_Tna_ptr}, + #else + {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2}, +! {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init}, + {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term}, + {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr}, + {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr}, +*************** +*** 460,466 **** + static char *argv[] = { "", "-e", "" }; + + #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) +! Perl_sys_init3(&argc, (char***)&argv, NULL); + #endif + perl_interp = perl_alloc(); + perl_construct(perl_interp); +--- 460,466 ---- + static char *argv[] = { "", "-e", "" }; + + #if (PERL_REVISION == 5) && (PERL_VERSION >= 10) +! Perl_sys_init(&argc, (char***)&argv); + #endif + perl_interp = perl_alloc(); + perl_construct(perl_interp); +*** ../vim-7.2.062/src/version.c Wed Dec 3 11:21:20 2008 +--- src/version.c Wed Dec 3 12:42:50 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 63, + /**/ + +-- +Windows +M!uqoms + + /// 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/7.2.064 b/7.2.064 new file mode 100644 index 00000000..48ca877e --- /dev/null +++ b/7.2.064 @@ -0,0 +1,66 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.064 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.064 +Problem: Screen update bug when repeating "~" on a Visual block and the + last line doesn't change. +Solution: Keep track of changes for all lines. (Moritz Orbach) +Files: src/ops.c + + +*** ../vim-7.2.063/src/ops.c Tue Jun 24 23:59:55 2008 +--- src/ops.c Wed Dec 3 13:12:06 2008 +*************** +*** 2209,2220 **** + { + for (; pos.lnum <= oap->end.lnum; ++pos.lnum) + { + block_prep(oap, &bd, pos.lnum, FALSE); + pos.col = bd.textcol; +! did_change = swapchars(oap->op_type, &pos, bd.textlen); + + # ifdef FEAT_NETBEANS_INTG +! if (usingNetbeans && did_change) + { + char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE); + +--- 2209,2223 ---- + { + for (; pos.lnum <= oap->end.lnum; ++pos.lnum) + { ++ int one_change; ++ + block_prep(oap, &bd, pos.lnum, FALSE); + pos.col = bd.textcol; +! one_change = swapchars(oap->op_type, &pos, bd.textlen); +! did_change |= one_change; + + # ifdef FEAT_NETBEANS_INTG +! if (usingNetbeans && one_change) + { + char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE); + +*** ../vim-7.2.063/src/version.c Wed Dec 3 13:18:16 2008 +--- src/version.c Wed Dec 3 13:14:46 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 64, + /**/ + +-- +Q: How many hardware engineers does it take to change a lightbulb? +A: None. We'll fix it in software. + + /// 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/7.2.065 b/7.2.065 new file mode 100644 index 00000000..d2cac841 --- /dev/null +++ b/7.2.065 @@ -0,0 +1,177 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.065 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.065 +Problem: GTK GUI: the cursor disappears when doing ":vsp" and the Vim + window is maximized. (Dominique Pelle, Denis Smolyar) +Solution: Don't change "Columns" back to an old value at a wrong moment. + Do change "Rows" when it should not be a problem. +Files: src/gui.c + + +*** ../vim-7.2.064/src/gui.c Fri Nov 28 21:26:50 2008 +--- src/gui.c Wed Dec 3 18:01:21 2008 +*************** +*** 3241,3247 **** + i = Rows; + gui_update_tabline(); + Rows = i; +! need_set_size = RESIZE_VERT; + if (using_tabline) + fix_size = TRUE; + if (!gui_use_tabline()) +--- 3241,3247 ---- + i = Rows; + gui_update_tabline(); + Rows = i; +! need_set_size |= RESIZE_VERT; + if (using_tabline) + fix_size = TRUE; + if (!gui_use_tabline()) +*************** +*** 3275,3283 **** + if (gui.which_scrollbars[i] != prev_which_scrollbars[i]) + { + if (i == SBAR_BOTTOM) +! need_set_size = RESIZE_VERT; + else +! need_set_size = RESIZE_HOR; + if (gui.which_scrollbars[i]) + fix_size = TRUE; + } +--- 3275,3283 ---- + if (gui.which_scrollbars[i] != prev_which_scrollbars[i]) + { + if (i == SBAR_BOTTOM) +! need_set_size |= RESIZE_VERT; + else +! need_set_size |= RESIZE_HOR; + if (gui.which_scrollbars[i]) + fix_size = TRUE; + } +*************** +*** 3297,3303 **** + gui_mch_enable_menu(gui.menu_is_active); + Rows = i; + prev_menu_is_active = gui.menu_is_active; +! need_set_size = RESIZE_VERT; + if (gui.menu_is_active) + fix_size = TRUE; + } +--- 3297,3303 ---- + gui_mch_enable_menu(gui.menu_is_active); + Rows = i; + prev_menu_is_active = gui.menu_is_active; +! need_set_size |= RESIZE_VERT; + if (gui.menu_is_active) + fix_size = TRUE; + } +*************** +*** 3308,3314 **** + { + gui_mch_show_toolbar(using_toolbar); + prev_toolbar = using_toolbar; +! need_set_size = RESIZE_VERT; + if (using_toolbar) + fix_size = TRUE; + } +--- 3308,3314 ---- + { + gui_mch_show_toolbar(using_toolbar); + prev_toolbar = using_toolbar; +! need_set_size |= RESIZE_VERT; + if (using_toolbar) + fix_size = TRUE; + } +*************** +*** 3318,3324 **** + { + gui_mch_enable_footer(using_footer); + prev_footer = using_footer; +! need_set_size = RESIZE_VERT; + if (using_footer) + fix_size = TRUE; + } +--- 3318,3324 ---- + { + gui_mch_enable_footer(using_footer); + prev_footer = using_footer; +! need_set_size |= RESIZE_VERT; + if (using_footer) + fix_size = TRUE; + } +*************** +*** 3330,3339 **** + prev_tearoff = using_tearoff; + } + #endif +! if (need_set_size) + { + #ifdef FEAT_GUI_GTK +! long c = Columns; + #endif + /* Adjust the size of the window to make the text area keep the + * same size and to avoid that part of our window is off-screen +--- 3330,3340 ---- + prev_tearoff = using_tearoff; + } + #endif +! if (need_set_size != 0) + { + #ifdef FEAT_GUI_GTK +! long prev_Columns = Columns; +! long prev_Rows = Rows; + #endif + /* Adjust the size of the window to make the text area keep the + * same size and to avoid that part of our window is off-screen +*************** +*** 3349,3359 **** + * If you remove this, please test this command for resizing + * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q". + * Don't do this while starting up though. +! * And don't change Rows, it may have be reduced intentionally +! * when adding menu/toolbar/tabline. */ +! if (!gui.starting) + (void)char_avail(); +! Columns = c; + #endif + } + #ifdef FEAT_WINDOWS +--- 3350,3363 ---- + * If you remove this, please test this command for resizing + * effects (with optional left scrollbar): ":vsp|q|vsp|q|vsp|q". + * Don't do this while starting up though. +! * Don't change Rows when adding menu/toolbar/tabline. +! * Don't change Columns when adding vertical toolbar. */ +! if (!gui.starting && need_set_size != (RESIZE_VERT | RESIZE_HOR)) + (void)char_avail(); +! if ((need_set_size & RESIZE_VERT) == 0) +! Rows = prev_Rows; +! if ((need_set_size & RESIZE_HOR) == 0) +! Columns = prev_Columns; + #endif + } + #ifdef FEAT_WINDOWS +*** ../vim-7.2.064/src/version.c Wed Dec 3 13:38:00 2008 +--- src/version.c Wed Dec 3 18:47:11 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 65, + /**/ + +-- +Seen on the back of a biker's vest: If you can read this, my wife fell off. + + /// 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/7.2.066 b/7.2.066 new file mode 100644 index 00000000..a5991d42 --- /dev/null +++ b/7.2.066 @@ -0,0 +1,70 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.066 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.066 +Problem: It's not easy to see whether 'encoding' is a multi-byte encoding. +Solution: Add has('multi_byte_encoding'). +Files: runtime/doc/eval.txt, src/eval.c + + +*** ../vim-7.2.065/runtime/doc/eval.txt Fri Nov 28 11:15:10 2008 +--- runtime/doc/eval.txt Tue Dec 9 10:55:59 2008 +*************** +*** 5841,5847 **** + mouse_pterm Compiled with support for qnx pterm mouse. + mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) + mouse_xterm Compiled with support for xterm mouse. +! multi_byte Compiled with support for editing Korean et al. + multi_byte_ime Compiled with support for IME input method. + multi_lang Compiled with support for multiple languages. + mzscheme Compiled with MzScheme interface |mzscheme|. +--- 5852,5859 ---- + mouse_pterm Compiled with support for qnx pterm mouse. + mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) + mouse_xterm Compiled with support for xterm mouse. +! multi_byte Compiled with support for 'encoding' +! multi_byte_encoding 'encoding' is set to a multi-byte encoding. + multi_byte_ime Compiled with support for IME input method. + multi_lang Compiled with support for multiple languages. + mzscheme Compiled with MzScheme interface |mzscheme|. +*** ../vim-7.2.065/src/eval.c Wed Dec 3 09:51:19 2008 +--- src/eval.c Wed Dec 3 14:29:09 2008 +*************** +*** 11842,11847 **** +--- 11842,11851 ---- + n = has_patch(atoi((char *)name + 5)); + else if (STRICMP(name, "vim_starting") == 0) + n = (starting != 0); ++ #ifdef FEAT_MBYTE ++ else if (STRICMP(name, "multi_byte_encoding") == 0) ++ n = has_mbyte; ++ #endif + #if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32) + else if (STRICMP(name, "balloon_multiline") == 0) + n = multiline_balloon_available(); +*** ../vim-7.2.065/src/version.c Wed Dec 3 18:50:09 2008 +--- src/version.c Tue Dec 9 10:48:49 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 66, + /**/ + +-- +ARTHUR: Listen, old crone! Unless you tell us where we can buy a shrubbery, + my friend and I will ... we will say "Ni!" +CRONE: Do your worst! + "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/7.2.067 b/7.2.067 new file mode 100644 index 00000000..079a0530 --- /dev/null +++ b/7.2.067 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.067 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.067 +Problem: Session file can't load extra file when the path contains special + characters. +Solution: Escape the file name. (Lech Lorens) +Files: src/ex_docmd.c + + +*** ../vim-7.2.066/src/ex_docmd.c Fri Nov 28 21:26:50 2008 +--- src/ex_docmd.c Fri Dec 5 21:34:11 2008 +*************** +*** 10106,10112 **** + */ + if (put_line(fd, "let s:sx = expand(\":p:r\").\"x.vim\"") == FAIL + || put_line(fd, "if file_readable(s:sx)") == FAIL +! || put_line(fd, " exe \"source \" . s:sx") == FAIL + || put_line(fd, "endif") == FAIL) + return FAIL; + +--- 10106,10112 ---- + */ + if (put_line(fd, "let s:sx = expand(\":p:r\").\"x.vim\"") == FAIL + || put_line(fd, "if file_readable(s:sx)") == FAIL +! || put_line(fd, " exe \"source \" . fnameescape(s:sx)") == FAIL + || put_line(fd, "endif") == FAIL) + return FAIL; + +*** ../vim-7.2.066/src/version.c Tue Dec 9 10:56:50 2008 +--- src/version.c Tue Dec 9 11:16:27 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 67, + /**/ + +-- +Life is a gift, living is an art. (Bram Moolenaar) + + /// 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/7.2.068 b/7.2.068 new file mode 100644 index 00000000..508bac12 --- /dev/null +++ b/7.2.068 @@ -0,0 +1,101 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.068 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.068 +Problem: Emacs tags file lines can be too long, resulting in an error + message. (James Vega) +Solution: Ignore lines with errors if they are too long. +Files: src/tag.c + + +*** ../vim-7.2.067/src/tag.c Fri Jul 18 11:26:12 2008 +--- src/tag.c Sat Dec 6 13:54:33 2008 +*************** +*** 2725,2731 **** +--- 2725,2748 ---- + */ + p_7f = vim_strchr(lbuf, 0x7f); + if (p_7f == NULL) ++ { ++ etag_fail: ++ if (vim_strchr(lbuf, '\n') == NULL) ++ { ++ /* Truncated line. Ignore it. */ ++ if (p_verbose >= 5) ++ { ++ verbose_enter(); ++ MSG(_("Ignoring long line in tags file")); ++ verbose_leave(); ++ } ++ tagp->command = lbuf; ++ tagp->tagname = lbuf; ++ tagp->tagname_end = lbuf; ++ return OK; ++ } + return FAIL; ++ } + + /* Find ^A. If not found the line number is after the 0x7f */ + p = vim_strchr(p_7f, Ctrl_A); +*************** +*** 2735,2741 **** + ++p; + + if (!VIM_ISDIGIT(*p)) /* check for start of line number */ +! return FAIL; + tagp->command = p; + + +--- 2752,2758 ---- + ++p; + + if (!VIM_ISDIGIT(*p)) /* check for start of line number */ +! goto etag_fail; + tagp->command = p; + + +*************** +*** 2749,2755 **** + /* find end of tagname */ + for (p = p_7f - 1; !vim_iswordc(*p); --p) + if (p == lbuf) +! return FAIL; + tagp->tagname_end = p + 1; + while (p >= lbuf && vim_iswordc(*p)) + --p; +--- 2766,2772 ---- + /* find end of tagname */ + for (p = p_7f - 1; !vim_iswordc(*p); --p) + if (p == lbuf) +! goto etag_fail; + tagp->tagname_end = p + 1; + while (p >= lbuf && vim_iswordc(*p)) + --p; +*** ../vim-7.2.067/src/version.c Tue Dec 9 11:17:23 2008 +--- src/version.c Tue Dec 9 12:05:41 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 68, + /**/ + +-- +Q: What do you call a fish without an eye? +A: fsh! +Q: What do you call a deer with no eyes? +A: no eye deer. +Q: What do you call a deer with no eyes and no legs? +A: still no eye deer. + + /// 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/7.2.069 b/7.2.069 new file mode 100644 index 00000000..7714fae9 --- /dev/null +++ b/7.2.069 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.069 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.069 (after 7.2.060) +Problem: Compiler warning for storing size_t in int. +Solution: Add type cast. +Files: src/spell.c + + +*** ../vim-7.2.068/src/spell.c Sun Nov 30 21:11:54 2008 +--- src/spell.c Tue Dec 9 22:19:04 2008 +*************** +*** 1765,1771 **** + /* Second part matches at start of following compound word, now + * check if first part matches at end of previous word. */ + p = ((char_u **)gap->ga_data)[i]; +! len = STRLEN(p); + if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0) + return TRUE; + } +--- 1765,1771 ---- + /* Second part matches at start of following compound word, now + * check if first part matches at end of previous word. */ + p = ((char_u **)gap->ga_data)[i]; +! len = (int)STRLEN(p); + if (len <= wlen && STRNCMP(ptr + wlen - len, p, len) == 0) + return TRUE; + } +*** ../vim-7.2.068/src/version.c Tue Dec 9 12:12:31 2008 +--- src/version.c Tue Dec 9 22:21:15 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 69, + /**/ + +-- +The war between Emacs and Vi is over. Vi has won with 3 to 1. + http://www.ssc.com/lg/issue30/raymond.html + + /// 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/7.2.070 b/7.2.070 new file mode 100644 index 00000000..9a7edc78 --- /dev/null +++ b/7.2.070 @@ -0,0 +1,566 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.070 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.070 +Problem: Crash when a function returns a:000. (Matt Wozkiski) +Solution: Don't put the function struct on the stack, allocate it. Free it + only when nothing in it is used. +Files: src/eval.c + + +*** ../vim-7.2.069/src/eval.c Tue Dec 9 10:56:50 2008 +--- src/eval.c Wed Dec 17 21:32:26 2008 +*************** +*** 32,37 **** +--- 32,40 ---- + + #define DICT_MAXNEST 100 /* maximum nesting of lists and dicts */ + ++ #define DO_NOT_FREE_CNT 99999 /* refcount for dict or list that should not ++ be freed. */ ++ + /* + * In a hashtab item "hi_key" points to "di_key" in a dictitem. + * This avoids adding a pointer to the hashtab item. +*************** +*** 789,794 **** +--- 792,799 ---- + static void func_unref __ARGS((char_u *name)); + static void func_ref __ARGS((char_u *name)); + static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict)); ++ static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ; ++ static void free_funccal __ARGS((funccall_T *fc, int free_val)); + static void add_nr_var __ARGS((dict_T *dp, dictitem_T *v, char *name, varnumber_T nr)); + static win_T *find_win_by_nr __ARGS((typval_T *vp, tabpage_T *tp)); + static void getwinvar __ARGS((typval_T *argvars, typval_T *rettv, int off)); +*************** +*** 923,928 **** +--- 928,937 ---- + /* pointer to funccal for currently active function */ + funccall_T *current_funccal = NULL; + ++ /* pointer to list of previously used funccal, still around because some ++ * item in it is still being used. */ ++ funccall_T *previous_funccal = NULL; ++ + /* + * Return TRUE when a function was ended by a ":return" command. + */ +*************** +*** 6490,6496 **** + buf_T *buf; + win_T *wp; + int i; +! funccall_T *fc; + int did_free = FALSE; + #ifdef FEAT_WINDOWS + tabpage_T *tp; +--- 6499,6505 ---- + buf_T *buf; + win_T *wp; + int i; +! funccall_T *fc, **pfc; + int did_free = FALSE; + #ifdef FEAT_WINDOWS + tabpage_T *tp; +*************** +*** 6574,6579 **** +--- 6583,6602 ---- + else + ll = ll->lv_used_next; + ++ /* check if any funccal can be freed now */ ++ for (pfc = &previous_funccal; *pfc != NULL; ) ++ { ++ if (can_free_funccal(*pfc, copyID)) ++ { ++ fc = *pfc; ++ *pfc = fc->caller; ++ free_funccal(fc, TRUE); ++ did_free = TRUE; ++ } ++ else ++ pfc = &(*pfc)->caller; ++ } ++ + return did_free; + } + +*************** +*** 18962,18968 **** + dictitem_T *dict_var; + { + hash_init(&dict->dv_hashtab); +! dict->dv_refcount = 99999; + dict_var->di_tv.vval.v_dict = dict; + dict_var->di_tv.v_type = VAR_DICT; + dict_var->di_tv.v_lock = VAR_FIXED; +--- 18985,18991 ---- + dictitem_T *dict_var; + { + hash_init(&dict->dv_hashtab); +! dict->dv_refcount = DO_NOT_FREE_CNT; + dict_var->di_tv.vval.v_dict = dict; + dict_var->di_tv.v_type = VAR_DICT; + dict_var->di_tv.v_lock = VAR_FIXED; +*************** +*** 19299,19304 **** +--- 19322,19329 ---- + * Copy the values from typval_T "from" to typval_T "to". + * When needed allocates string or increases reference count. + * Does not make a copy of a list or dict but copies the reference! ++ * It is OK for "from" and "to" to point to the same item. This is used to ++ * make a copy later. + */ + static void + copy_tv(from, to) +*************** +*** 21111,21117 **** + char_u *save_sourcing_name; + linenr_T save_sourcing_lnum; + scid_T save_current_SID; +! funccall_T fc; + int save_did_emsg; + static int depth = 0; + dictitem_T *v; +--- 21136,21142 ---- + char_u *save_sourcing_name; + linenr_T save_sourcing_lnum; + scid_T save_current_SID; +! funccall_T *fc; + int save_did_emsg; + static int depth = 0; + dictitem_T *v; +*************** +*** 21137,21172 **** + + line_breakcheck(); /* check for CTRL-C hit */ + +! fc.caller = current_funccal; +! current_funccal = &fc; +! fc.func = fp; +! fc.rettv = rettv; + rettv->vval.v_number = 0; +! fc.linenr = 0; +! fc.returned = FALSE; +! fc.level = ex_nesting_level; + /* Check if this function has a breakpoint. */ +! fc.breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0); +! fc.dbg_tick = debug_tick; + + /* +! * Note about using fc.fixvar[]: This is an array of FIXVAR_CNT variables + * with names up to VAR_SHORT_LEN long. This avoids having to alloc/free + * each argument variable and saves a lot of time. + */ + /* + * Init l: variables. + */ +! init_var_dict(&fc.l_vars, &fc.l_vars_var); + if (selfdict != NULL) + { + /* Set l:self to "selfdict". Use "name" to avoid a warning from + * some compiler that checks the destination size. */ +! v = &fc.fixvar[fixvar_idx++].var; + name = v->di_key; + STRCPY(name, "self"); + v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX; +! hash_add(&fc.l_vars.dv_hashtab, DI2HIKEY(v)); + v->di_tv.v_type = VAR_DICT; + v->di_tv.v_lock = 0; + v->di_tv.vval.v_dict = selfdict; +--- 21162,21198 ---- + + line_breakcheck(); /* check for CTRL-C hit */ + +! fc = (funccall_T *)alloc(sizeof(funccall_T)); +! fc->caller = current_funccal; +! current_funccal = fc; +! fc->func = fp; +! fc->rettv = rettv; + rettv->vval.v_number = 0; +! fc->linenr = 0; +! fc->returned = FALSE; +! fc->level = ex_nesting_level; + /* Check if this function has a breakpoint. */ +! fc->breakpoint = dbg_find_breakpoint(FALSE, fp->uf_name, (linenr_T)0); +! fc->dbg_tick = debug_tick; + + /* +! * Note about using fc->fixvar[]: This is an array of FIXVAR_CNT variables + * with names up to VAR_SHORT_LEN long. This avoids having to alloc/free + * each argument variable and saves a lot of time. + */ + /* + * Init l: variables. + */ +! init_var_dict(&fc->l_vars, &fc->l_vars_var); + if (selfdict != NULL) + { + /* Set l:self to "selfdict". Use "name" to avoid a warning from + * some compiler that checks the destination size. */ +! v = &fc->fixvar[fixvar_idx++].var; + name = v->di_key; + STRCPY(name, "self"); + v->di_flags = DI_FLAGS_RO + DI_FLAGS_FIX; +! hash_add(&fc->l_vars.dv_hashtab, DI2HIKEY(v)); + v->di_tv.v_type = VAR_DICT; + v->di_tv.v_lock = 0; + v->di_tv.vval.v_dict = selfdict; +*************** +*** 21178,21208 **** + * Set a:0 to "argcount". + * Set a:000 to a list with room for the "..." arguments. + */ +! init_var_dict(&fc.l_avars, &fc.l_avars_var); +! add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "0", + (varnumber_T)(argcount - fp->uf_args.ga_len)); + /* Use "name" to avoid a warning from some compiler that checks the + * destination size. */ +! v = &fc.fixvar[fixvar_idx++].var; + name = v->di_key; + STRCPY(name, "000"); + v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; +! hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v)); + v->di_tv.v_type = VAR_LIST; + v->di_tv.v_lock = VAR_FIXED; +! v->di_tv.vval.v_list = &fc.l_varlist; +! vim_memset(&fc.l_varlist, 0, sizeof(list_T)); +! fc.l_varlist.lv_refcount = 99999; +! fc.l_varlist.lv_lock = VAR_FIXED; + + /* + * Set a:firstline to "firstline" and a:lastline to "lastline". + * Set a:name to named arguments. + * Set a:N to the "..." arguments. + */ +! add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "firstline", + (varnumber_T)firstline); +! add_nr_var(&fc.l_avars, &fc.fixvar[fixvar_idx++].var, "lastline", + (varnumber_T)lastline); + for (i = 0; i < argcount; ++i) + { +--- 21204,21234 ---- + * Set a:0 to "argcount". + * Set a:000 to a list with room for the "..." arguments. + */ +! init_var_dict(&fc->l_avars, &fc->l_avars_var); +! add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0", + (varnumber_T)(argcount - fp->uf_args.ga_len)); + /* Use "name" to avoid a warning from some compiler that checks the + * destination size. */ +! v = &fc->fixvar[fixvar_idx++].var; + name = v->di_key; + STRCPY(name, "000"); + v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; +! hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); + v->di_tv.v_type = VAR_LIST; + v->di_tv.v_lock = VAR_FIXED; +! v->di_tv.vval.v_list = &fc->l_varlist; +! vim_memset(&fc->l_varlist, 0, sizeof(list_T)); +! fc->l_varlist.lv_refcount = DO_NOT_FREE_CNT; +! fc->l_varlist.lv_lock = VAR_FIXED; + + /* + * Set a:firstline to "firstline" and a:lastline to "lastline". + * Set a:name to named arguments. + * Set a:N to the "..." arguments. + */ +! add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "firstline", + (varnumber_T)firstline); +! add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "lastline", + (varnumber_T)lastline); + for (i = 0; i < argcount; ++i) + { +*************** +*** 21218,21224 **** + } + if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN) + { +! v = &fc.fixvar[fixvar_idx++].var; + v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; + } + else +--- 21244,21250 ---- + } + if (fixvar_idx < FIXVAR_CNT && STRLEN(name) <= VAR_SHORT_LEN) + { +! v = &fc->fixvar[fixvar_idx++].var; + v->di_flags = DI_FLAGS_RO | DI_FLAGS_FIX; + } + else +*************** +*** 21230,21236 **** + v->di_flags = DI_FLAGS_RO; + } + STRCPY(v->di_key, name); +! hash_add(&fc.l_avars.dv_hashtab, DI2HIKEY(v)); + + /* Note: the values are copied directly to avoid alloc/free. + * "argvars" must have VAR_FIXED for v_lock. */ +--- 21256,21262 ---- + v->di_flags = DI_FLAGS_RO; + } + STRCPY(v->di_key, name); +! hash_add(&fc->l_avars.dv_hashtab, DI2HIKEY(v)); + + /* Note: the values are copied directly to avoid alloc/free. + * "argvars" must have VAR_FIXED for v_lock. */ +*************** +*** 21239,21247 **** + + if (ai >= 0 && ai < MAX_FUNC_ARGS) + { +! list_append(&fc.l_varlist, &fc.l_listitems[ai]); +! fc.l_listitems[ai].li_tv = argvars[i]; +! fc.l_listitems[ai].li_tv.v_lock = VAR_FIXED; + } + } + +--- 21265,21273 ---- + + if (ai >= 0 && ai < MAX_FUNC_ARGS) + { +! list_append(&fc->l_varlist, &fc->l_listitems[ai]); +! fc->l_listitems[ai].li_tv = argvars[i]; +! fc->l_listitems[ai].li_tv.v_lock = VAR_FIXED; + } + } + +*************** +*** 21306,21312 **** + 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); +--- 21332,21338 ---- + 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); +*************** +*** 21322,21328 **** + did_emsg = FALSE; + + /* call do_cmdline() to execute the lines */ +! do_cmdline(NULL, get_func_line, (void *)&fc, + DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); + + --RedrawingDisabled; +--- 21348,21354 ---- + did_emsg = FALSE; + + /* call do_cmdline() to execute the lines */ +! do_cmdline(NULL, get_func_line, (void *)fc, + DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT); + + --RedrawingDisabled; +*************** +*** 21337,21352 **** + + #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); + } + } + #endif +--- 21363,21378 ---- + + #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); + } + } + #endif +*************** +*** 21359,21367 **** + + if (aborting()) + smsg((char_u *)_("%s aborted"), sourcing_name); +! else if (fc.rettv->v_type == VAR_NUMBER) + smsg((char_u *)_("%s returning #%ld"), sourcing_name, +! (long)fc.rettv->vval.v_number); + else + { + char_u buf[MSG_BUF_LEN]; +--- 21385,21393 ---- + + if (aborting()) + smsg((char_u *)_("%s aborted"), sourcing_name); +! else if (fc->rettv->v_type == VAR_NUMBER) + smsg((char_u *)_("%s returning #%ld"), sourcing_name, +! (long)fc->rettv->vval.v_number); + else + { + char_u buf[MSG_BUF_LEN]; +*************** +*** 21372,21378 **** + /* The value may be very long. Skip the middle part, so that we + * have some idea how it starts and ends. smsg() would always + * truncate it at the end. */ +! s = tv2string(fc.rettv, &tofree, numbuf2, 0); + if (s != NULL) + { + trunc_string(s, buf, MSG_BUF_CLEN); +--- 21398,21404 ---- + /* The value may be very long. Skip the middle part, so that we + * have some idea how it starts and ends. smsg() would always + * truncate it at the end. */ +! s = tv2string(fc->rettv, &tofree, numbuf2, 0); + if (s != NULL) + { + trunc_string(s, buf, MSG_BUF_CLEN); +*************** +*** 21408,21421 **** + } + + did_emsg |= save_did_emsg; +! current_funccal = fc.caller; + +! /* The a: variables typevals were not allocated, only free the allocated +! * variables. */ +! vars_clear_ext(&fc.l_avars.dv_hashtab, FALSE); + +! vars_clear(&fc.l_vars.dv_hashtab); /* free all l: variables */ +! --depth; + } + + /* +--- 21434,21517 ---- + } + + did_emsg |= save_did_emsg; +! current_funccal = fc->caller; +! --depth; + +! /* if the a:000 list and the a: dict are not referenced we can free the +! * funccall_T and what's in it. */ +! if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT +! && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT +! && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT) +! { +! free_funccal(fc, FALSE); +! } +! else +! { +! hashitem_T *hi; +! listitem_T *li; +! int todo; + +! /* "fc" is still in use. This can happen when returning "a:000" or +! * assigning "l:" to a global variable. +! * Link "fc" in the list for garbage collection later. */ +! fc->caller = previous_funccal; +! previous_funccal = fc; +! +! /* Make a copy of the a: variables, since we didn't do that above. */ +! todo = (int)fc->l_avars.dv_hashtab.ht_used; +! for (hi = fc->l_avars.dv_hashtab.ht_array; todo > 0; ++hi) +! { +! if (!HASHITEM_EMPTY(hi)) +! { +! --todo; +! v = HI2DI(hi); +! copy_tv(&v->di_tv, &v->di_tv); +! } +! } +! +! /* Make a copy of the a:000 items, since we didn't do that above. */ +! for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next) +! copy_tv(&li->li_tv, &li->li_tv); +! } +! } +! +! /* +! * Return TRUE if items in "fc" do not have "copyID". That means they are not +! * referenced from anywyere. +! */ +! static int +! can_free_funccal(fc, copyID) +! funccall_T *fc; +! int copyID; +! { +! return (fc->l_varlist.lv_copyID != copyID +! && fc->l_vars.dv_copyID != copyID +! && fc->l_avars.dv_copyID != copyID); +! } +! +! /* +! * Free "fc" and what it contains. +! */ +! static void +! free_funccal(fc, free_val) +! funccall_T *fc; +! int free_val; /* a: vars were allocated */ +! { +! listitem_T *li; +! +! /* The a: variables typevals may not have been allocated, only free the +! * allocated variables. */ +! vars_clear_ext(&fc->l_avars.dv_hashtab, free_val); +! +! /* free all l: variables */ +! vars_clear(&fc->l_vars.dv_hashtab); +! +! /* Free the a:000 variables if they were allocated. */ +! if (free_val) +! for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next) +! clear_tv(&li->li_tv); +! +! vim_free(fc); + } + + /* +*** ../vim-7.2.069/src/version.c Tue Dec 9 22:34:02 2008 +--- src/version.c Sun Dec 21 12:47:07 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 70, + /**/ + +-- +Close your shells, or I'll kill -9 you +Tomorrow I'll quota you +Remember the disks'll always be full +And then while I'm away +I'll write ~ everyday +And I'll send-pr all my buggings to you. + [ CVS log "Beatles style" for FreeBSD ports/INDEX, Satoshi Asami ] + + /// 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/7.2.071 b/7.2.071 new file mode 100644 index 00000000..0a1e5137 --- /dev/null +++ b/7.2.071 @@ -0,0 +1,81 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.071 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.071 (extra) +Problem: Win32: Handling netbeans events while Vim is busy updating the + screen may cause a crash. +Solution: Like with GTK, only handle netbeans messages in the main loop. + (Xavier de Gaye) +Files: src/gui_w48.c, src/netbeans.c + + +*** ../vim-7.2.070/src/gui_w48.c Thu Nov 20 17:09:09 2008 +--- src/gui_w48.c Thu Dec 11 23:47:18 2008 +*************** +*** 1937,1942 **** +--- 1937,1947 ---- + s_need_activate = FALSE; + } + ++ #ifdef FEAT_NETBEANS_INTG ++ /* Process the queued netbeans messages. */ ++ netbeans_parse_messages(); ++ #endif ++ + /* + * Don't use gui_mch_update() because then we will spin-lock until a + * char arrives, instead we use GetMessage() to hang until an +*** ../vim-7.2.070/src/netbeans.c Fri Nov 28 21:26:50 2008 +--- src/netbeans.c Sun Nov 30 12:07:00 2008 +*************** +*** 769,779 **** + return; /* don't try to parse it */ + } + +! #ifdef FEAT_GUI_GTK + if (gtk_main_level() > 0) + gtk_main_quit(); + #else +! /* Parse the messages, but avoid recursion. */ + if (level == 1) + netbeans_parse_messages(); + +--- 769,782 ---- + return; /* don't try to parse it */ + } + +! #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32) +! /* Let the main loop handle messages. */ +! # ifdef FEAT_GUI_GTK + if (gtk_main_level() > 0) + gtk_main_quit(); ++ # endif + #else +! /* Parse the messages now, but avoid recursion. */ + if (level == 1) + netbeans_parse_messages(); + +*** ../vim-7.2.070/src/version.c Sun Dec 21 13:02:47 2008 +--- src/version.c Wed Dec 24 12:18:59 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 71, + /**/ + +-- +No children may attend school with their breath smelling of "wild onions." + [real standing law in West Virginia, United States of America] + + /// 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/7.2.072 b/7.2.072 new file mode 100644 index 00000000..1dffd918 --- /dev/null +++ b/7.2.072 @@ -0,0 +1,56 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.072 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.072 (extra) +Problem: Compiler warning in Sniff code. +Solution: Use return value of pipe(). (Dominique Pelle) +Files: src/if_sniff.c + +NOTE: Patch was adjusted to avoid problems with CVS interference. + +*** ../vim-7.2.071/src/if_sniff.c Sat Nov 15 14:11:10 2008 +--- src/if_sniff.c Sat Dec 6 14:01:57 2008 +*************** +*** 716,723 **** + #else /* UNIX Version of the Code */ + int ToSniffEmacs[2], FromSniffEmacs[2]; + +! pipe(ToSniffEmacs); +! pipe(FromSniffEmacs); + + /* fork */ + if ((sniffemacs_pid=fork()) == 0) +--- 714,723 ---- + #else /* UNIX Version of the Code */ + int ToSniffEmacs[2], FromSniffEmacs[2]; + +! if (pipe(ToSniffEmacs) != 0) +! return 1; +! if (pipe(FromSniffEmacs) != 0) +! return 1; + + /* fork */ + if ((sniffemacs_pid=fork()) == 0) +*** ../vim-7.2.071/src/version.c Wed Dec 24 12:20:10 2008 +--- src/version.c Wed Dec 24 12:42:13 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 72, + /**/ + +-- +SIGIRO -- irony detected (iron core dumped) + + /// 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/7.2.073 b/7.2.073 new file mode 100644 index 00000000..16f1297d --- /dev/null +++ b/7.2.073 @@ -0,0 +1,135 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.073 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.073 +Problem: ":set " has the same output as ":set ". (Matt + Wozniski) +Solution: Don't translate "x" keys to its alternative for ":set". +Files: src/misc2.c, src/option.c, src/proto/misc2.pro + + +*** ../vim-7.2.072/src/misc2.c Wed Nov 12 13:07:48 2008 +--- src/misc2.c Sun Dec 14 12:28:47 2008 +*************** +*** 2561,2567 **** + int key; + int dlen = 0; + +! key = find_special_key(srcp, &modifiers, keycode); + if (key == 0) + return 0; + +--- 2561,2567 ---- + int key; + int dlen = 0; + +! key = find_special_key(srcp, &modifiers, keycode, FALSE); + if (key == 0) + return 0; + +*************** +*** 2597,2606 **** + * returns 0 if there is no match. + */ + int +! find_special_key(srcp, modp, keycode) + char_u **srcp; + int *modp; +! int keycode; /* prefer key code, e.g. K_DEL instead of DEL */ + { + char_u *last_dash; + char_u *end_of_name; +--- 2597,2607 ---- + * returns 0 if there is no match. + */ + int +! find_special_key(srcp, modp, keycode, keep_x_key) + char_u **srcp; + int *modp; +! int keycode; /* prefer key code, e.g. K_DEL instead of DEL */ +! int keep_x_key; /* don't translate xHome to Home key */ + { + char_u *last_dash; + char_u *end_of_name; +*************** +*** 2668,2674 **** + else + { + key = get_special_key_code(last_dash + 1); +! key = handle_x_keys(key); + } + + /* +--- 2669,2676 ---- + else + { + key = get_special_key_code(last_dash + 1); +! if (!keep_x_key) +! key = handle_x_keys(key); + } + + /* +*** ../vim-7.2.072/src/option.c Fri Nov 28 21:26:50 2008 +--- src/option.c Sun Dec 14 12:28:56 2008 +*************** +*** 8328,8334 **** + { + --arg; /* put arg at the '<' */ + modifiers = 0; +! key = find_special_key(&arg, &modifiers, TRUE); + if (modifiers) /* can't handle modifiers here */ + key = 0; + } +--- 8328,8334 ---- + { + --arg; /* put arg at the '<' */ + modifiers = 0; +! key = find_special_key(&arg, &modifiers, TRUE, TRUE); + if (modifiers) /* can't handle modifiers here */ + key = 0; + } +*** ../vim-7.2.072/src/proto/misc2.pro Thu Jul 24 20:29:37 2008 +--- src/proto/misc2.pro Sun Dec 14 12:29:05 2008 +*************** +*** 59,65 **** + int handle_x_keys __ARGS((int key)); + char_u *get_special_key_name __ARGS((int c, int modifiers)); + int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode)); +! int find_special_key __ARGS((char_u **srcp, int *modp, int keycode)); + int extract_modifiers __ARGS((int key, int *modp)); + int find_special_key_in_table __ARGS((int c)); + int get_special_key_code __ARGS((char_u *name)); +--- 59,65 ---- + int handle_x_keys __ARGS((int key)); + char_u *get_special_key_name __ARGS((int c, int modifiers)); + int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode)); +! int find_special_key __ARGS((char_u **srcp, int *modp, int keycode, int keep_x_key)); + int extract_modifiers __ARGS((int key, int *modp)); + int find_special_key_in_table __ARGS((int c)); + int get_special_key_code __ARGS((char_u *name)); +*** ../vim-7.2.072/src/version.c Wed Dec 24 12:43:15 2008 +--- src/version.c Wed Dec 24 12:51:26 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 73, + /**/ + + +-- +ARTHUR: If you do not open these doors, we will take this castle by force ... + [A bucket of slops land on ARTHUR. He tries to retain his dignity.] + "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/7.2.074 b/7.2.074 new file mode 100644 index 00000000..6000fca5 --- /dev/null +++ b/7.2.074 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.074 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.074 (extra, after 7.2.073) +Problem: ":set " has the same output as ":set ". (Matt + Wozniski) +Solution: Don't translate "x" keys to its alternative for ":set". +Files: src/gui_mac.c + + +*** ../vim-7.2.073/src/gui_mac.c Sat Aug 9 19:37:28 2008 +--- src/gui_mac.c Sun Dec 14 12:28:26 2008 +*************** +*** 4966,4972 **** + char_u *p_actext; + + p_actext = menu->actext; +! key = find_special_key(&p_actext, &modifiers, /*keycode=*/0); + if (*p_actext != 0) + key = 0; /* error: trailing text */ + /* find_special_key() returns a keycode with as many of the +--- 4966,4972 ---- + char_u *p_actext; + + p_actext = menu->actext; +! key = find_special_key(&p_actext, &modifiers, FALSE, FALSE); + if (*p_actext != 0) + key = 0; /* error: trailing text */ + /* find_special_key() returns a keycode with as many of the +*** ../vim-7.2.073/src/version.c Wed Dec 24 12:53:33 2008 +--- src/version.c Wed Dec 24 12:55:42 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 74, + /**/ + +-- + Another bucket of what can only be described as human ordure hits ARTHUR. +ARTHUR: ... Right! (to the KNIGHTS) That settles it! + "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/7.2.075 b/7.2.075 new file mode 100644 index 00000000..4bec708a --- /dev/null +++ b/7.2.075 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.075 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.075 (after 7.2.058) +Problem: Explanation about making a diff for extra_patches is unclear. +Solution: Adjust comment. +Files: src/version.c + + +*** ../vim-7.2.074/src/version.c Wed Dec 24 13:04:41 2008 +--- src/version.c Wed Dec 24 13:07:47 2008 +*************** +*** 833,839 **** + * Keep it short, e.g.,: "relative numbers", "persistent undo". + * Also add a comment marker to separate the lines. + * See the official Vim patches for the diff format: It must use a context of +! * one line only. Use "diff -C2". + */ + static char *(extra_patches[]) = + { /* Add your patch description below this line */ +--- 835,841 ---- + * Keep it short, e.g.,: "relative numbers", "persistent undo". + * Also add a comment marker to separate the lines. + * See the official Vim patches for the diff format: It must use a context of +! * one line only. Create it by hand or use "diff -C2" and edit the patch. + */ + static char *(extra_patches[]) = + { /* Add your patch description below this line */ +*** ../vim-7.2.074/src/version.c Wed Dec 24 13:04:41 2008 +--- src/version.c Wed Dec 24 13:07:47 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 75, + /**/ + +-- +BEDEVERE: Stand by for attack!! + [CUT TO enormous army forming up. Trebuchets, rows of PIKEMEN, siege + towers, pennants flying, shouts of "Stand by for attack!" Traditional + army build-up shots. The shouts echo across the ranks of the army. + We see various groups reacting, and stirring themselves in readiness.] +ARTHUR: Who are they? +BEDEVERE: Oh, just some friends! + "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/7.2.076 b/7.2.076 new file mode 100644 index 00000000..5166bbab --- /dev/null +++ b/7.2.076 @@ -0,0 +1,86 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.076 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.076 +Problem: rename(from, to) deletes the file if "from" and "to" are not equal + but still refer to the same file. E.g., on a FAT32 filesystem + under Unix. +Solution: Go through another file name. +Files: src/fileio.c + + +*** ../vim-7.2.075/src/fileio.c Fri Nov 28 21:26:50 2008 +--- src/fileio.c Tue Dec 30 16:04:44 2008 +*************** +*** 6119,6124 **** +--- 6119,6165 ---- + if (mch_stat((char *)from, &st) < 0) + return -1; + ++ #ifdef UNIX ++ { ++ struct stat st_to; ++ char tempname[MAXPATHL + 1]; ++ ++ /* It's possible for the source and destination to be the same file. ++ * This happens when "from" and "to" differ in case and are on a FAT32 ++ * filesystem. In that case go through a temp file name. */ ++ if (mch_stat((char *)to, &st_to) >= 0 ++ && st.st_dev == st_to.st_dev ++ && st.st_ino == st_to.st_ino) ++ { ++ /* Find a name that doesn't exist and is in the same directory. ++ * Move "from" to "tempname" and then to "to". */ ++ if (STRLEN(from) >= MAXPATHL - 5) ++ return -1; ++ STRCPY(tempname, from); ++ for (n = 123; n < 99999; ++n) ++ { ++ sprintf(gettail(tempname), "%d", n); ++ if (mch_stat(tempname, &st_to) < 0) ++ { ++ if (mch_rename((char *)from, tempname) == 0) ++ { ++ if (mch_rename(tempname, (char *)to) == 0) ++ return 0; ++ /* Strange, the second step failed. Try moving the ++ * file back and return failure. */ ++ mch_rename(tempname, (char *)from); ++ return -1; ++ } ++ /* If it fails for one temp name it will most likely fail ++ * for any temp name, give up. */ ++ return -1; ++ } ++ } ++ return -1; ++ } ++ } ++ #endif ++ + /* + * Delete the "to" file, this is required on some systems to make the + * mch_rename() work, on other systems it makes sure that we don't have +*** ../vim-7.2.075/src/version.c Wed Dec 24 14:24:41 2008 +--- src/version.c Tue Dec 30 16:09:51 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 76, + /**/ + +-- +FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing. + + /// 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/7.2.077 b/7.2.077 new file mode 100644 index 00000000..396444c3 --- /dev/null +++ b/7.2.077 @@ -0,0 +1,164 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.077 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.077 (after 7.2.076) +Problem: rename(from, to) doesn't work if "from" and "to" differ only in + case on a system that ignores case in file names. +Solution: Go through another file name. +Files: src/fileio.c + + +*** ../vim-7.2.076/src/fileio.c Tue Dec 30 16:15:16 2008 +--- src/fileio.c Wed Dec 31 14:59:59 2008 +*************** +*** 6106,6117 **** + #ifdef HAVE_ACL + vim_acl_T acl; /* ACL from original file */ + #endif + + /* +! * When the names are identical, there is nothing to do. + */ + if (fnamecmp(from, to) == 0) +! return 0; + + /* + * Fail if the "from" file doesn't exist. Avoids that "to" is deleted. +--- 6106,6129 ---- + #ifdef HAVE_ACL + vim_acl_T acl; /* ACL from original file */ + #endif ++ #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME) ++ int use_tmp_file = FALSE; ++ #endif + + /* +! * When the names are identical, there is nothing to do. When they refer +! * to the same file (ignoring case and slash/backslash differences) but +! * the file name differs we need to go through a temp file. + */ + if (fnamecmp(from, to) == 0) +! { +! #ifdef CASE_INSENSITIVE_FILENAME +! if (STRCMP(gettail(from), gettail(to)) != 0) +! use_tmp_file = TRUE; +! else +! #endif +! return 0; +! } + + /* + * Fail if the "from" file doesn't exist. Avoids that "to" is deleted. +*************** +*** 6122,6128 **** + #ifdef UNIX + { + struct stat st_to; +- char tempname[MAXPATHL + 1]; + + /* It's possible for the source and destination to be the same file. + * This happens when "from" and "to" differ in case and are on a FAT32 +--- 6134,6139 ---- +*************** +*** 6130,6162 **** + if (mch_stat((char *)to, &st_to) >= 0 + && st.st_dev == st_to.st_dev + && st.st_ino == st_to.st_ino) + { +! /* Find a name that doesn't exist and is in the same directory. +! * Move "from" to "tempname" and then to "to". */ +! if (STRLEN(from) >= MAXPATHL - 5) +! return -1; +! STRCPY(tempname, from); +! for (n = 123; n < 99999; ++n) + { +! sprintf(gettail(tempname), "%d", n); +! if (mch_stat(tempname, &st_to) < 0) + { +! if (mch_rename((char *)from, tempname) == 0) +! { +! if (mch_rename(tempname, (char *)to) == 0) +! return 0; +! /* Strange, the second step failed. Try moving the +! * file back and return failure. */ +! mch_rename(tempname, (char *)from); +! return -1; +! } +! /* If it fails for one temp name it will most likely fail +! * for any temp name, give up. */ + return -1; + } + } +- return -1; + } + } + #endif + +--- 6141,6182 ---- + if (mch_stat((char *)to, &st_to) >= 0 + && st.st_dev == st_to.st_dev + && st.st_ino == st_to.st_ino) ++ use_tmp_file = TRUE; ++ } ++ #endif ++ ++ #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME) ++ if (use_tmp_file) ++ { ++ char tempname[MAXPATHL + 1]; ++ ++ /* ++ * Find a name that doesn't exist and is in the same directory. ++ * Rename "from" to "tempname" and then rename "tempname" to "to". ++ */ ++ if (STRLEN(from) >= MAXPATHL - 5) ++ return -1; ++ STRCPY(tempname, from); ++ for (n = 123; n < 99999; ++n) + { +! sprintf((char *)gettail((char_u *)tempname), "%d", n); +! if (mch_stat(tempname, &st) < 0) + { +! if (mch_rename((char *)from, tempname) == 0) + { +! if (mch_rename(tempname, (char *)to) == 0) +! return 0; +! /* Strange, the second step failed. Try moving the +! * file back and return failure. */ +! mch_rename(tempname, (char *)from); + return -1; + } ++ /* If it fails for one temp name it will most likely fail ++ * for any temp name, give up. */ ++ return -1; + } + } ++ return -1; + } + #endif + +*** ../vim-7.2.076/src/version.c Tue Dec 30 16:15:16 2008 +--- src/version.c Wed Dec 31 16:19:29 2008 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 77, + /**/ + +-- +We apologise again for the fault in the subtitles. Those responsible for +sacking the people who have just been sacked have been sacked. + "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/7.2.078 b/7.2.078 new file mode 100644 index 00000000..0e127bc4 --- /dev/null +++ b/7.2.078 @@ -0,0 +1,120 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.078 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.078 +Problem: When deleting a fold that is specified with markers the cursor + position may be wrong. Folds may not be displayed properly after + a delete. Wrong fold may be deleted. +Solution: Fix the problems. (mostly by Lech Lorens) +Files: src/fold.c + + +*** ../vim-7.2.077/src/fold.c Fri Nov 28 21:26:50 2008 +--- src/fold.c Tue Jan 6 14:53:26 2009 +*************** +*** 740,746 **** + garray_T *found_ga; + fold_T *found_fp = NULL; + linenr_T found_off = 0; +! int use_level = FALSE; + int maybe_small = FALSE; + int level = 0; + linenr_T lnum = start; +--- 740,746 ---- + garray_T *found_ga; + fold_T *found_fp = NULL; + linenr_T found_off = 0; +! int use_level; + int maybe_small = FALSE; + int level = 0; + linenr_T lnum = start; +*************** +*** 757,762 **** +--- 757,763 ---- + gap = &curwin->w_folds; + found_ga = NULL; + lnum_off = 0; ++ use_level = FALSE; + for (;;) + { + if (!foldFind(gap, lnum - lnum_off, &fp)) +*************** +*** 783,802 **** + else + { + lnum = found_fp->fd_top + found_fp->fd_len + found_off; +- did_one = TRUE; + + if (foldmethodIsManual(curwin)) + deleteFoldEntry(found_ga, + (int)(found_fp - (fold_T *)found_ga->ga_data), recursive); + else + { +! if (found_fp->fd_top + found_off < first_lnum) +! first_lnum = found_fp->fd_top; +! if (lnum > last_lnum) + last_lnum = lnum; +! parseMarker(curwin); + deleteFoldMarkers(found_fp, recursive, found_off); + } + + /* redraw window */ + changed_window_setting(); +--- 784,804 ---- + else + { + lnum = found_fp->fd_top + found_fp->fd_len + found_off; + + if (foldmethodIsManual(curwin)) + deleteFoldEntry(found_ga, + (int)(found_fp - (fold_T *)found_ga->ga_data), recursive); + else + { +! if (first_lnum > found_fp->fd_top + found_off) +! first_lnum = found_fp->fd_top + found_off; +! if (last_lnum < lnum) + last_lnum = lnum; +! if (!did_one) +! parseMarker(curwin); + deleteFoldMarkers(found_fp, recursive, found_off); + } ++ did_one = TRUE; + + /* redraw window */ + changed_window_setting(); +*************** +*** 811,816 **** +--- 813,822 ---- + redraw_curbuf_later(INVERTED); + #endif + } ++ else ++ /* Deleting markers may make cursor column invalid. */ ++ check_cursor_col(); ++ + if (last_lnum > 0) + changed_lines(first_lnum, (colnr_T)0, last_lnum, 0L); + } +*** ../vim-7.2.077/src/version.c Wed Dec 31 16:20:54 2008 +--- src/version.c Tue Jan 6 15:00:36 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 78, + /**/ + +-- +Looking at Perl through Lisp glasses, Perl looks atrocious. + + /// 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/7.2.079 b/7.2.079 new file mode 100644 index 00000000..60da797d --- /dev/null +++ b/7.2.079 @@ -0,0 +1,229 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.079 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.079 +Problem: "killed" netbeans events are not handled correctly. +Solution: A "killed" netbeans event is sent when the buffer is deleted or + wiped out (in this case, the netbeans annotations in this buffer + have been removed). A user can still remove a sign with the + command ":sign unplace" and this does not trigger a "killed" + event. (Xavier de Gaye) +Files: runtime/doc/netbeans.txt, src/buffer.c, src/globals.h, + src/netbeans.c, src/proto/netbeans.pro + + +*** ../vim-7.2.078/runtime/doc/netbeans.txt Sat Aug 9 19:36:49 2008 +--- runtime/doc/netbeans.txt Tue Jan 6 15:23:39 2009 +*************** +*** 1,4 **** +! *netbeans.txt* For Vim version 7.2. Last change: 2008 Jun 28 + + + VIM REFERENCE MANUAL by Gordon Prieur et al. +--- 1,4 ---- +! *netbeans.txt* For Vim version 7.2. Last change: 2009 Jan 06 + + + VIM REFERENCE MANUAL by Gordon Prieur et al. +*************** +*** 722,729 **** + of the cursor. + New in version 2.1. + +! killed A file was closed by the user. Only for files that have been +! assigned a number by the IDE. + + newDotAndMark off off + Reports the position of the cursor being at "off" bytes into +--- 722,731 ---- + of the cursor. + New in version 2.1. + +! killed A file was deleted or wiped out by the user and the buffer +! annotations have been removed. The bufID number for this +! buffer has become invalid. Only for files that have been +! assigned a bufID number by the IDE. + + newDotAndMark off off + Reports the position of the cursor being at "off" bytes into +*** ../vim-7.2.078/src/buffer.c Wed Dec 3 11:21:20 2008 +--- src/buffer.c Tue Jan 6 15:23:02 2009 +*************** +*** 437,446 **** + return; + #endif + +- #ifdef FEAT_NETBEANS_INTG +- if (usingNetbeans) +- netbeans_file_closed(buf); +- #endif + /* Change directories when the 'acd' option is set. */ + DO_AUTOCHDIR + +--- 437,442 ---- +*************** +*** 639,644 **** +--- 635,644 ---- + #ifdef FEAT_SIGNS + buf_delete_signs(buf); /* delete any signs */ + #endif ++ #ifdef FEAT_NETBEANS_INTG ++ if (usingNetbeans) ++ netbeans_file_killed(buf); ++ #endif + #ifdef FEAT_LOCALMAP + map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE); /* clear local mappings */ + map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE); /* clear local abbrevs */ +*************** +*** 815,823 **** + int bnr; /* buffer number */ + char_u *p; + +- #ifdef FEAT_NETBEANS_INTG +- netbeansCloseFile = 1; +- #endif + if (addr_count == 0) + { + (void)do_buffer(command, DOBUF_CURRENT, FORWARD, 0, forceit); +--- 815,820 ---- +*************** +*** 912,920 **** + } + } + +- #ifdef FEAT_NETBEANS_INTG +- netbeansCloseFile = 0; +- #endif + + return errormsg; + } +--- 909,914 ---- +*** ../vim-7.2.078/src/globals.h Fri Nov 28 21:26:50 2008 +--- src/globals.h Tue Jan 6 15:23:02 2009 +*************** +*** 1340,1346 **** + + #ifdef FEAT_NETBEANS_INTG + EXTERN char *netbeansArg INIT(= NULL); /* the -nb[:host:port:passwd] arg */ +- EXTERN int netbeansCloseFile INIT(= 0); /* send killed if != 0 */ + EXTERN int netbeansFireChanges INIT(= 1); /* send buffer changes if != 0 */ + EXTERN int netbeansForcedQuit INIT(= 0);/* don't write modified files */ + EXTERN int netbeansReadFile INIT(= 1); /* OK to read from disk if != 0 */ +--- 1340,1345 ---- +*** ../vim-7.2.078/src/netbeans.c Wed Dec 24 12:20:10 2008 +--- src/netbeans.c Tue Jan 6 15:23:02 2009 +*************** +*** 2921,2964 **** + } + + /* +! * Tell netbeans a file was closed. + */ + void +! netbeans_file_closed(buf_T *bufp) + { + int bufno = nb_getbufno(bufp); + nbbuf_T *nbbuf = nb_get_buf(bufno); + char buffer[2*MAXPATHL]; + +! if (!haveConnection || bufno < 0) + return; + +! if (!netbeansCloseFile) +! { +! nbdebug(("Ignoring file_closed for %s. File was closed from IDE\n", +! bufp->b_ffname)); +! return; +! } +! +! nbdebug(("netbeans_file_closed:\n")); +! nbdebug((" Closing bufno: %d", bufno)); +! if (curbuf != NULL && curbuf != bufp) +! { +! nbdebug((" Curbuf bufno: %d\n", nb_getbufno(curbuf))); +! } +! else if (curbuf == bufp) +! { +! nbdebug((" curbuf == bufp\n")); +! } +! +! if (bufno <= 0) +! return; + + sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno); + + nbdebug(("EVT: %s", buffer)); + +! nb_send(buffer, "netbeans_file_closed"); + + if (nbbuf != NULL) + nbbuf->bufp = NULL; +--- 2921,2946 ---- + } + + /* +! * Tell netbeans that a file was deleted or wiped out. + */ + void +! netbeans_file_killed(buf_T *bufp) + { + int bufno = nb_getbufno(bufp); + nbbuf_T *nbbuf = nb_get_buf(bufno); + char buffer[2*MAXPATHL]; + +! if (!haveConnection || bufno == -1) + return; + +! nbdebug(("netbeans_file_killed:\n")); +! nbdebug((" Killing bufno: %d", bufno)); + + sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno); + + nbdebug(("EVT: %s", buffer)); + +! nb_send(buffer, "netbeans_file_killed"); + + if (nbbuf != NULL) + nbbuf->bufp = NULL; +*** ../vim-7.2.078/src/proto/netbeans.pro Tue Jun 24 23:25:53 2008 +--- src/proto/netbeans.pro Tue Jan 6 15:23:02 2009 +*************** +*** 11,17 **** + void netbeans_frame_moved __ARGS((int new_x, int new_y)); + void netbeans_file_activated __ARGS((buf_T *bufp)); + void netbeans_file_opened __ARGS((buf_T *bufp)); +! void netbeans_file_closed __ARGS((buf_T *bufp)); + void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen)); + void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len)); + void netbeans_unmodified __ARGS((buf_T *bufp)); +--- 11,17 ---- + void netbeans_frame_moved __ARGS((int new_x, int new_y)); + void netbeans_file_activated __ARGS((buf_T *bufp)); + void netbeans_file_opened __ARGS((buf_T *bufp)); +! void netbeans_file_killed __ARGS((buf_T *bufp)); + void netbeans_inserted __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, char_u *txt, int newlen)); + void netbeans_removed __ARGS((buf_T *bufp, linenr_T linenr, colnr_T col, long len)); + void netbeans_unmodified __ARGS((buf_T *bufp)); +*** ../vim-7.2.078/src/version.c Tue Jan 6 15:01:58 2009 +--- src/version.c Tue Jan 6 16:11:11 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 79, + /**/ + +-- +Friends? I have lots of friends! In fact, I have every episode ever made. + + /// 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/7.2.080 b/7.2.080 new file mode 100644 index 00000000..399f9e1c --- /dev/null +++ b/7.2.080 @@ -0,0 +1,365 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.080 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.080 +Problem: When typing a composing character just after starting completion + may access memory before its allocation point. (Dominique Pelle) +Solution: Don't delete before the completion start column. Add extra checks + for the offset not being negative. +Files: src/edit.c + + +*** ../vim-7.2.079/src/edit.c Wed Aug 6 18:56:55 2008 +--- src/edit.c Tue Jan 13 12:05:57 2009 +*************** +*** 147,152 **** +--- 147,153 ---- + static int ins_compl_bs __ARGS((void)); + static void ins_compl_new_leader __ARGS((void)); + static void ins_compl_addleader __ARGS((int c)); ++ static int ins_compl_len __ARGS((void)); + static void ins_compl_restart __ARGS((void)); + static void ins_compl_set_original_text __ARGS((char_u *str)); + static void ins_compl_addfrommatch __ARGS((void)); +*************** +*** 197,203 **** + static void mb_replace_pop_ins __ARGS((int cc)); + #endif + static void replace_flush __ARGS((void)); +! static void replace_do_bs __ARGS((void)); + #ifdef FEAT_CINDENT + static int cindent_on __ARGS((void)); + #endif +--- 198,205 ---- + static void mb_replace_pop_ins __ARGS((int cc)); + #endif + static void replace_flush __ARGS((void)); +! static void replace_do_bs __ARGS((int limit_col)); +! static int del_char_after_col __ARGS((int limit_col)); + #ifdef FEAT_CINDENT + static int cindent_on __ARGS((void)); + #endif +*************** +*** 1933,1938 **** +--- 1935,1942 ---- + /* + * Backspace the cursor until the given column. Handles REPLACE and VREPLACE + * modes correctly. May also be used when not in insert mode at all. ++ * Will attempt not to go before "col" even when there is a composing ++ * character. + */ + void + backspace_until_column(col) +*************** +*** 1942,1954 **** + { + curwin->w_cursor.col--; + if (State & REPLACE_FLAG) +! replace_do_bs(); +! else +! (void)del_char(FALSE); + } + } + #endif + + #if defined(FEAT_INS_EXPAND) || defined(PROTO) + /* + * CTRL-X pressed in Insert mode. +--- 1946,1994 ---- + { + curwin->w_cursor.col--; + if (State & REPLACE_FLAG) +! replace_do_bs(col); +! else if (!del_char_after_col(col)) +! break; + } + } + #endif + ++ /* ++ * Like del_char(), but make sure not to go before column "limit_col". ++ * Only matters when there are composing characters. ++ * Return TRUE when something was deleted. ++ */ ++ static int ++ del_char_after_col(limit_col) ++ int limit_col; ++ { ++ #ifdef FEAT_MBYTE ++ if (enc_utf8 && limit_col >= 0) ++ { ++ int ecol = curwin->w_cursor.col + 1; ++ ++ /* Make sure the cursor is at the start of a character, but ++ * skip forward again when going too far back because of a ++ * composing character. */ ++ mb_adjust_cursor(); ++ while (curwin->w_cursor.col < limit_col) ++ { ++ int l = utf_ptr2len(ml_get_cursor()); ++ ++ if (l == 0) /* end of line */ ++ break; ++ curwin->w_cursor.col += l; ++ } ++ if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol) ++ return FALSE; ++ del_bytes((long)(ecol - curwin->w_cursor.col), FALSE, TRUE); ++ } ++ else ++ #endif ++ (void)del_char(FALSE); ++ return TRUE; ++ } ++ + #if defined(FEAT_INS_EXPAND) || defined(PROTO) + /* + * CTRL-X pressed in Insert mode. +*************** +*** 2418,2424 **** + { + had_match = (curwin->w_cursor.col > compl_col); + ins_compl_delete(); +! ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); + ins_redraw(FALSE); + + /* When the match isn't there (to avoid matching itself) remove it +--- 2458,2464 ---- + { + had_match = (curwin->w_cursor.col > compl_col); + ins_compl_delete(); +! ins_bytes(compl_leader + ins_compl_len()); + ins_redraw(FALSE); + + /* When the match isn't there (to avoid matching itself) remove it +*************** +*** 2470,2476 **** + *p = NUL; + had_match = (curwin->w_cursor.col > compl_col); + ins_compl_delete(); +! ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); + ins_redraw(FALSE); + + /* When the match isn't there (to avoid matching itself) remove it +--- 2510,2516 ---- + *p = NUL; + had_match = (curwin->w_cursor.col > compl_col); + ins_compl_delete(); +! ins_bytes(compl_leader + ins_compl_len()); + ins_redraw(FALSE); + + /* When the match isn't there (to avoid matching itself) remove it +*************** +*** 3209,3215 **** + { + ins_compl_del_pum(); + ins_compl_delete(); +! ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); + compl_used_match = FALSE; + + if (compl_started) +--- 3249,3255 ---- + { + ins_compl_del_pum(); + ins_compl_delete(); +! ins_bytes(compl_leader + ins_compl_len()); + compl_used_match = FALSE; + + if (compl_started) +*************** +*** 3264,3269 **** +--- 3304,3323 ---- + } + + /* ++ * Return the length of the completion, from the completion start column to ++ * the cursor column. Making sure it never goes below zero. ++ */ ++ static int ++ ins_compl_len() ++ { ++ int off = curwin->w_cursor.col - compl_col; ++ ++ if (off < 0) ++ return 0; ++ return off; ++ } ++ ++ /* + * Append one character to the match leader. May reduce the number of + * matches. + */ +*************** +*** 3621,3630 **** + { + ins_compl_delete(); + if (compl_leader != NULL) +! ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); + else if (compl_first_match != NULL) +! ins_bytes(compl_orig_text +! + curwin->w_cursor.col - compl_col); + retval = TRUE; + } + +--- 3675,3683 ---- + { + ins_compl_delete(); + if (compl_leader != NULL) +! ins_bytes(compl_leader + ins_compl_len()); + else if (compl_first_match != NULL) +! ins_bytes(compl_orig_text + ins_compl_len()); + retval = TRUE; + } + +*************** +*** 4256,4262 **** + static void + ins_compl_insert() + { +! ins_bytes(compl_shown_match->cp_str + curwin->w_cursor.col - compl_col); + if (compl_shown_match->cp_flags & ORIGINAL_TEXT) + compl_used_match = FALSE; + else +--- 4309,4315 ---- + static void + ins_compl_insert() + { +! ins_bytes(compl_shown_match->cp_str + ins_compl_len()); + if (compl_shown_match->cp_flags & ORIGINAL_TEXT) + compl_used_match = FALSE; + else +*************** +*** 4425,4431 **** + if (!compl_get_longest || compl_used_match) + ins_compl_insert(); + else +! ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); + } + else + compl_used_match = FALSE; +--- 4478,4484 ---- + if (!compl_get_longest || compl_used_match) + ins_compl_insert(); + else +! ins_bytes(compl_leader + ins_compl_len()); + } + else + compl_used_match = FALSE; +*************** +*** 7123,7131 **** + * cc == 0: character was inserted, delete it + * cc > 0: character was replaced, put cc (first byte of original char) back + * and check for more characters to be put back + */ + static void +! replace_do_bs() + { + int cc; + #ifdef FEAT_VREPLACE +--- 7176,7187 ---- + * cc == 0: character was inserted, delete it + * cc > 0: character was replaced, put cc (first byte of original char) back + * and check for more characters to be put back ++ * When "limit_col" is >= 0, don't delete before this column. Matters when ++ * using composing characters, use del_char_after_col() instead of del_char(). + */ + static void +! replace_do_bs(limit_col) +! int limit_col; + { + int cc; + #ifdef FEAT_VREPLACE +*************** +*** 7153,7159 **** + #ifdef FEAT_MBYTE + if (has_mbyte) + { +! del_char(FALSE); + # ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) + orig_len = (int)STRLEN(ml_get_cursor()); +--- 7209,7215 ---- + #ifdef FEAT_MBYTE + if (has_mbyte) + { +! (void)del_char_after_col(limit_col); + # ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) + orig_len = (int)STRLEN(ml_get_cursor()); +*************** +*** 7203,7209 **** + changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); + } + else if (cc == 0) +! (void)del_char(FALSE); + } + + #ifdef FEAT_CINDENT +--- 7259,7265 ---- + changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); + } + else if (cc == 0) +! (void)del_char_after_col(limit_col); + } + + #ifdef FEAT_CINDENT +*************** +*** 8239,8245 **** + * Replace mode */ + if (curwin->w_cursor.lnum != Insstart.lnum + || curwin->w_cursor.col >= Insstart.col) +! replace_do_bs(); + } + else + (void)del_char(FALSE); +--- 8295,8301 ---- + * Replace mode */ + if (curwin->w_cursor.lnum != Insstart.lnum + || curwin->w_cursor.col >= Insstart.col) +! replace_do_bs(-1); + } + else + (void)del_char(FALSE); +*************** +*** 8556,8562 **** + break; + } + if (State & REPLACE_FLAG) +! replace_do_bs(); + else + { + #ifdef FEAT_MBYTE +--- 8612,8618 ---- + break; + } + if (State & REPLACE_FLAG) +! replace_do_bs(-1); + else + { + #ifdef FEAT_MBYTE +*** ../vim-7.2.079/src/version.c Tue Jan 6 16:13:42 2009 +--- src/version.c Tue Jan 13 12:25:29 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 80, + /**/ + +-- +At some point in the project somebody will start whining about the need to +determine the project "requirements". This involves interviewing people who +don't know what they want but, curiously, know exactly when they need it. + (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/7.2.081 b/7.2.081 new file mode 100644 index 00000000..9f1259d7 --- /dev/null +++ b/7.2.081 @@ -0,0 +1,60 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.081 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.081 +Problem: Compiler warning for floating point overflow on VAX. +Solution: For VAX use a smaller number. (Zoltan Arpadffy) +Files: src/message.c + + +*** ../vim-7.2.080/src/message.c Fri Nov 28 21:26:50 2008 +--- src/message.c Tue Jan 13 16:19:07 2009 +*************** +*** 4556,4562 **** + remove_trailing_zeroes = TRUE; + } + +! if (fmt_spec == 'f' && abs_f > 1.0e307) + { + /* Avoid a buffer overflow */ + strcpy(tmp, "inf"); +--- 4556,4568 ---- + remove_trailing_zeroes = TRUE; + } + +! if (fmt_spec == 'f' && +! #ifdef VAX +! abs_f > 1.0e38 +! #else +! abs_f > 1.0e307 +! #endif +! ) + { + /* Avoid a buffer overflow */ + strcpy(tmp, "inf"); +*** ../vim-7.2.080/src/version.c Tue Jan 13 12:29:03 2009 +--- src/version.c Tue Jan 13 16:19:52 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 81, + /**/ + +-- +Sometimes you can protect millions of dollars in your budget simply by buying +a bag of cookies, dropping it on the budget anylyst's desk, and saying +something deeply personal such as "How was your weekend, big guy?" + (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/7.2.082 b/7.2.082 new file mode 100644 index 00000000..c6bf703c --- /dev/null +++ b/7.2.082 @@ -0,0 +1,77 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.082 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.082 +Problem: When 'ff' is "mac" then "ga" on a ^J shows 0x0d instead of 0x0a. + (Andy Wokula) +Solution: Use NL for this situation. (Lech Lorens) +Files: src/ex_cmds.c + + +*** ../vim-7.2.081/src/ex_cmds.c Fri Nov 28 21:26:50 2008 +--- src/ex_cmds.c Tue Jan 13 16:51:32 2009 +*************** +*** 49,54 **** +--- 49,55 ---- + exarg_T *eap; + { + int c; ++ int cval; + char buf1[20]; + char buf2[20]; + char_u buf3[7]; +*************** +*** 75,80 **** +--- 76,85 ---- + { + if (c == NL) /* NUL is stored as NL */ + c = NUL; ++ if (c == CAR && get_fileformat(curbuf) == EOL_MAC) ++ cval = NL; /* NL is stored as CR */ ++ else ++ cval = c; + if (vim_isprintc_strict(c) && (c < ' ' + #ifndef EBCDIC + || c > '~' +*************** +*** 94,100 **** + buf2[0] = NUL; + vim_snprintf((char *)IObuff, IOSIZE, + _("<%s>%s%s %d, Hex %02x, Octal %03o"), +! transchar(c), buf1, buf2, c, c, c); + #ifdef FEAT_MBYTE + if (enc_utf8) + c = cc[ci++]; +--- 99,105 ---- + buf2[0] = NUL; + vim_snprintf((char *)IObuff, IOSIZE, + _("<%s>%s%s %d, Hex %02x, Octal %03o"), +! transchar(c), buf1, buf2, cval, cval, cval); + #ifdef FEAT_MBYTE + if (enc_utf8) + c = cc[ci++]; +*** ../vim-7.2.081/src/version.c Tue Jan 13 16:37:31 2009 +--- src/version.c Tue Jan 13 16:53:39 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 82, + /**/ + +-- +The budget process was invented by an alien race of sadistic beings who +resemble large cats. + (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/7.2.083 b/7.2.083 new file mode 100644 index 00000000..5406ebc6 --- /dev/null +++ b/7.2.083 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.083 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.083 +Problem: ":tag" does not return to the right tag entry from the tag stack. +Solution: Don't change the current match when there is no argument. + (Erik Falor) +Files: src/tag.c + + +*** ../vim-7.2.082/src/tag.c Tue Dec 9 12:12:31 2008 +--- src/tag.c Tue Jan 13 17:14:59 2009 +*************** +*** 515,521 **** + * If a count is supplied to the ":tag " command, then + * jump to count'th matching tag. + */ +! if (type == DT_TAG && count > 0) + cur_match = count - 1; + + if (type == DT_SELECT || type == DT_JUMP +--- 515,521 ---- + * If a count is supplied to the ":tag " command, then + * jump to count'th matching tag. + */ +! if (type == DT_TAG && *tag != NUL && count > 0) + cur_match = count - 1; + + if (type == DT_SELECT || type == DT_JUMP +*** ../vim-7.2.082/src/version.c Tue Jan 13 16:57:09 2009 +--- src/version.c Tue Jan 13 17:16:42 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 83, + /**/ + +-- +Engineers will go without food and hygiene for days to solve a problem. +(Other times just because they forgot.) + (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/7.2.084 b/7.2.084 new file mode 100644 index 00000000..4c912ca7 --- /dev/null +++ b/7.2.084 @@ -0,0 +1,144 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.084 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.084 +Problem: Recursive structures are not handled properly in Python + vim.eval(). +Solution: Keep track of references in a better way. (Yukihiro Nakadaira) +Files: src/if_python.c + + +*** ../vim-7.2.083/src/if_python.c Thu Nov 20 11:04:01 2008 +--- src/if_python.c Tue Jan 13 18:08:06 2009 +*************** +*** 1151,1164 **** + + /* Check if we run into a recursive loop. The item must be in lookupDict + * then and we can use it again. */ +! sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, (long_u)our_tv); +! result = PyDict_GetItemString(lookupDict, ptrBuf); +! if (result != NULL) +! Py_INCREF(result); +! else if (our_tv->v_type == VAR_STRING) + { + result = Py_BuildValue("s", our_tv->vval.v_string); +- PyDict_SetItemString(lookupDict, ptrBuf, result); + } + else if (our_tv->v_type == VAR_NUMBER) + { +--- 1151,1173 ---- + + /* Check if we run into a recursive loop. The item must be in lookupDict + * then and we can use it again. */ +! if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL) +! || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL)) +! { +! sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, +! our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list +! : (long_u)our_tv->vval.v_dict); +! result = PyDict_GetItemString(lookupDict, ptrBuf); +! if (result != NULL) +! { +! Py_INCREF(result); +! return result; +! } +! } +! +! if (our_tv->v_type == VAR_STRING) + { + result = Py_BuildValue("s", our_tv->vval.v_string); + } + else if (our_tv->v_type == VAR_NUMBER) + { +*************** +*** 1167,1173 **** + /* For backwards compatibility numbers are stored as strings. */ + sprintf(buf, "%ld", (long)our_tv->vval.v_number); + result = Py_BuildValue("s", buf); +- PyDict_SetItemString(lookupDict, ptrBuf, result); + } + # ifdef FEAT_FLOAT + else if (our_tv->v_type == VAR_FLOAT) +--- 1176,1181 ---- +*************** +*** 1176,1182 **** + + sprintf(buf, "%f", our_tv->vval.v_float); + result = Py_BuildValue("s", buf); +- PyDict_SetItemString(lookupDict, ptrBuf, result); + } + # endif + else if (our_tv->v_type == VAR_LIST) +--- 1184,1189 ---- +*************** +*** 1185,1194 **** + listitem_T *curr; + + result = PyList_New(0); +- PyDict_SetItemString(lookupDict, ptrBuf, result); + + if (list != NULL) + { + for (curr = list->lv_first; curr != NULL; curr = curr->li_next) + { + newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict); +--- 1192,1202 ---- + listitem_T *curr; + + result = PyList_New(0); + + if (list != NULL) + { ++ PyDict_SetItemString(lookupDict, ptrBuf, result); ++ + for (curr = list->lv_first; curr != NULL; curr = curr->li_next) + { + newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict); +*************** +*** 1200,1206 **** + else if (our_tv->v_type == VAR_DICT) + { + result = PyDict_New(); +- PyDict_SetItemString(lookupDict, ptrBuf, result); + + if (our_tv->vval.v_dict != NULL) + { +--- 1208,1213 ---- +*************** +*** 1209,1214 **** +--- 1216,1223 ---- + hashitem_T *hi; + dictitem_T *di; + ++ PyDict_SetItemString(lookupDict, ptrBuf, result); ++ + for (hi = ht->ht_array; todo > 0; ++hi) + { + if (!HASHITEM_EMPTY(hi)) +*** ../vim-7.2.083/src/version.c Tue Jan 13 17:27:18 2009 +--- src/version.c Tue Jan 13 17:54:14 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 84, + /**/ + +-- +Article in the first Free Software Magazine: "Bram Moolenaar studied electrical +engineering at the Technical University of Delft and graduated in 1985 on a +multi-processor Unix architecture." +Response by "dimator": Could the school not afford a proper stage for the +ceremony? + + /// 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/7.2.085 b/7.2.085 new file mode 100644 index 00000000..f9828fa1 --- /dev/null +++ b/7.2.085 @@ -0,0 +1,62 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.085 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.085 +Problem: ":set =b" does not work when 'encoding' is utf-8. +Solution: Put the character in the input buffer as valid utf-8. + (partly by Matt Wosniski) +Files: src/term.c + + +*** ../vim-7.2.084/src/term.c Tue Jul 29 12:22:12 2008 +--- src/term.c Thu Jan 22 18:18:29 2009 +*************** +*** 4920,4926 **** + key_name[0] = KEY2TERMCAP0(key); + key_name[1] = KEY2TERMCAP1(key); + if (key_name[0] == KS_KEY) +! string[new_slen++] = key_name[1]; /* from ":set =xx" */ + else + { + string[new_slen++] = K_SPECIAL; +--- 4920,4934 ---- + key_name[0] = KEY2TERMCAP0(key); + key_name[1] = KEY2TERMCAP1(key); + if (key_name[0] == KS_KEY) +! { +! /* from ":set =xx" */ +! #ifdef FEAT_MBYTE +! if (has_mbyte) +! new_slen += (*mb_char2bytes)(key_name[1], string + new_slen); +! else +! #endif +! string[new_slen++] = key_name[1]; +! } + else + { + string[new_slen++] = K_SPECIAL; +*** ../vim-7.2.084/src/version.c Tue Jan 13 18:10:21 2009 +--- src/version.c Thu Jan 22 18:31:50 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 85, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +20. When looking at a pageful of someone else's links, you notice all of them + are already highlighted in purple. + + /// 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/7.2.086 b/7.2.086 new file mode 100644 index 00000000..f55efbb2 --- /dev/null +++ b/7.2.086 @@ -0,0 +1,98 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.086 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.086 +Problem: Using ":diffget 1" in buffer 1 corrupts the text. +Solution: Don't do anything when source and destination of ":diffget" or + ":diffput" is the same buffer. (Dominique Pelle) +Files: src/diff.c + + +*** ../vim-7.2.085/src/diff.c Sun Nov 30 15:15:56 2008 +--- src/diff.c Wed Jan 14 20:40:25 2009 +*************** +*** 8,14 **** + */ + + /* +! * diff.c: code for diff'ing two or three buffers. + */ + + #include "vim.h" +--- 8,14 ---- + */ + + /* +! * diff.c: code for diff'ing two, three or four buffers. + */ + + #include "vim.h" +*************** +*** 116,122 **** + * Add a buffer to make diffs for. + * Call this when a new buffer is being edited in the current window where + * 'diff' is set. +! * Marks the current buffer as being part of the diff and requireing updating. + * This must be done before any autocmd, because a command may use info + * about the screen contents. + */ +--- 116,122 ---- + * Add a buffer to make diffs for. + * Call this when a new buffer is being edited in the current window where + * 'diff' is set. +! * Marks the current buffer as being part of the diff and requiring updating. + * This must be done before any autocmd, because a command may use info + * about the screen contents. + */ +*************** +*** 929,935 **** + goto theend; + + #ifdef UNIX +! /* Temporaraly chdir to /tmp, to avoid patching files in the current + * directory when the patch file contains more than one patch. When we + * have our own temp dir use that instead, it will be cleaned up when we + * exit (any .rej files created). Don't change directory if we can't +--- 929,935 ---- + goto theend; + + #ifdef UNIX +! /* Temporarily chdir to /tmp, to avoid patching files in the current + * directory when the patch file contains more than one patch. When we + * have our own temp dir use that instead, it will be cleaned up when we + * exit (any .rej files created). Don't change directory if we can't +*************** +*** 2129,2134 **** +--- 2129,2136 ---- + EMSG2(_("E102: Can't find buffer \"%s\""), eap->arg); + return; + } ++ if (buf == curbuf) ++ return; /* nothing to do */ + idx_other = diff_buf_idx(buf); + if (idx_other == DB_COUNT) + { +*** ../vim-7.2.085/src/version.c Thu Jan 22 18:32:55 2009 +--- src/version.c Thu Jan 22 20:46:54 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 86, + /**/ + +-- +Shift happens. + -- Doppler + + /// 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/7.2.087 b/7.2.087 new file mode 100644 index 00000000..942acca2 --- /dev/null +++ b/7.2.087 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.087 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.087 +Problem: Adding URL to 'path' doesn't work to edit a file. +Solution: Skip simplify_filename() for URLs. (Matt Wosniski) +Files: src/misc2.c + + +*** ../vim-7.2.086/src/misc2.c Wed Dec 24 12:53:33 2008 +--- src/misc2.c Sun Jan 18 12:26:20 2009 +*************** +*** 4696,4702 **** + stackp->ffs_filearray_cur = i + 1; + ff_push(search_ctx, stackp); + +! simplify_filename(file_path); + if (mch_dirname(ff_expand_buffer, MAXPATHL) + == OK) + { +--- 4696,4703 ---- + stackp->ffs_filearray_cur = i + 1; + ff_push(search_ctx, stackp); + +! if (!path_with_url(file_path)) +! simplify_filename(file_path); + if (mch_dirname(ff_expand_buffer, MAXPATHL) + == OK) + { +*** ../vim-7.2.086/src/version.c Thu Jan 22 20:48:07 2009 +--- src/version.c Thu Jan 22 21:30:36 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 87, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +21. Your dog has its own home page. + + /// 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/7.2.088 b/7.2.088 new file mode 100644 index 00000000..1cb98511 --- /dev/null +++ b/7.2.088 @@ -0,0 +1,99 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.088 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.088 (extra) +Problem: OpenClipboard() may fail when another application is using the + clipboard. +Solution: Retry OpenClipboard() a few times. (Jianrong Yu) +Files: src/os_mswin.c + + +*** ../vim-7.2.087/src/os_mswin.c Thu Nov 20 17:09:09 2008 +--- src/os_mswin.c Thu Jan 22 18:38:12 2009 +*************** +*** 1224,1229 **** +--- 1224,1248 ---- + #endif /* FEAT_MBYTE */ + + /* ++ * Wait for another process to Close the Clipboard. ++ * Returns TRUE for success. ++ */ ++ int ++ vim_open_clipboard() ++ { ++ int delay = 10; ++ ++ while (!OpenClipboard(NULL)) ++ { ++ if (delay > 500) ++ return FALSE; /* waited too long, give up */ ++ Sleep(delay); ++ delay *= 2; /* wait for 10, 20, 40, 80, etc. msec */ ++ } ++ return TRUE; ++ } ++ ++ /* + * Get the current selection and put it in the clipboard register. + * + * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility. +*************** +*** 1254,1260 **** + * Don't pass GetActiveWindow() as an argument to OpenClipboard() because + * then we can't paste back into the same window for some reason - webb. + */ +! if (!OpenClipboard(NULL)) + return; + + /* Check for vim's own clipboard format first. This only gets the type of +--- 1273,1279 ---- + * Don't pass GetActiveWindow() as an argument to OpenClipboard() because + * then we can't paste back into the same window for some reason - webb. + */ +! if (!vim_open_clipboard()) + return; + + /* Check for vim's own clipboard format first. This only gets the type of +*************** +*** 1562,1568 **** + * because then we can't paste back into the same window for some + * reason - webb. + */ +! if (OpenClipboard(NULL)) + { + if (EmptyClipboard()) + { +--- 1581,1587 ---- + * because then we can't paste back into the same window for some + * reason - webb. + */ +! if (vim_open_clipboard()) + { + if (EmptyClipboard()) + { +*** ../vim-7.2.087/src/version.c Thu Jan 22 21:31:24 2009 +--- src/version.c Thu Jan 22 21:47:52 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 88, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +22. You've already visited all the links at Yahoo and you're halfway through + Lycos. + + /// 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/7.2.089 b/7.2.089 new file mode 100644 index 00000000..74276c6d --- /dev/null +++ b/7.2.089 @@ -0,0 +1,91 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.089 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.089 (extra) +Problem: Win32: crash when using Ultramon buttons. +Solution: Don't use a WM_OLE message of zero size. (Ray Megal) +Files: src/if_ole.cpp, src/gui_w48.c + + +*** ../vim-7.2.088/src/if_ole.cpp Sun Mar 16 14:53:11 2008 +--- src/if_ole.cpp Mon Jan 19 21:16:33 2009 +*************** +*** 353,361 **** + } + + /* Pass the string to the main input loop. The memory will be freed when +! * the message is processed. + */ +! PostMessage(NULL, WM_OLE, 0, (LPARAM)str); + + return S_OK; + } +--- 353,365 ---- + } + + /* Pass the string to the main input loop. The memory will be freed when +! * the message is processed. Except for an empty message, we don't need +! * to post it then. + */ +! if (*str == NUL) +! vim_free(str); +! else +! PostMessage(NULL, WM_OLE, 0, (LPARAM)str); + + return S_OK; + } +*** ../vim-7.2.088/src/gui_w48.c Wed Dec 24 12:20:10 2008 +--- src/gui_w48.c Mon Jan 19 21:19:30 2009 +*************** +*** 1663,1670 **** + if (msg.message == WM_OLE) + { + char_u *str = (char_u *)msg.lParam; +! add_to_input_buf(str, (int)STRLEN(str)); +! vim_free(str); + return; + } + #endif +--- 1663,1679 ---- + if (msg.message == WM_OLE) + { + char_u *str = (char_u *)msg.lParam; +! if (str == NULL || *str == NUL) +! { +! /* Message can't be ours, forward it. Fixes problem with Ultramon +! * 3.0.4 */ +! DispatchMessage(&msg); +! } +! else +! { +! add_to_input_buf(str, (int)STRLEN(str)); +! vim_free(str); /* was allocated in CVim::SendKeys() */ +! } + return; + } + #endif +*** ../vim-7.2.088/src/version.c Thu Jan 22 21:49:21 2009 +--- src/version.c Wed Jan 28 14:16:01 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 89, + /**/ + + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.090 b/7.2.090 new file mode 100644 index 00000000..59dd7acf --- /dev/null +++ b/7.2.090 @@ -0,0 +1,130 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.090 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.090 +Problem: User command containing 0x80 in multi-byte character does not work + properly. (Yasuhiro Matsumoto) +Solution: Undo replacement of K_SPECIAL and CSI characters when executing + the command. +Files: src/ex_docmd.c + + +*** ../vim-7.2.089/src/ex_docmd.c Tue Dec 9 11:17:23 2008 +--- src/ex_docmd.c Wed Jan 28 15:34:19 2009 +*************** +*** 5482,5487 **** +--- 5482,5490 ---- + return OK; + } + ++ /* ++ * ":command ..." ++ */ + static void + ex_command(eap) + exarg_T *eap; +*************** +*** 5914,5919 **** +--- 5917,5923 ---- + + char_u *start; + char_u *end; ++ char_u *ksp; + size_t len, totlen; + + size_t split_len = 0; +*************** +*** 5930,5945 **** + + /* + * Replace <> in the command by the arguments. + */ + buf = NULL; + for (;;) + { +! p = cmd->uc_rep; +! q = buf; + totlen = 0; +! while ((start = vim_strchr(p, '<')) != NULL +! && (end = vim_strchr(start + 1, '>')) != NULL) + { + /* Include the '>' */ + ++end; + +--- 5934,5984 ---- + + /* + * Replace <> in the command by the arguments. ++ * First round: "buf" is NULL, compute length, allocate "buf". ++ * Second round: copy result into "buf". + */ + buf = NULL; + for (;;) + { +! p = cmd->uc_rep; /* source */ +! q = buf; /* destinateion */ + totlen = 0; +! +! for (;;) + { ++ start = vim_strchr(p, '<'); ++ if (start != NULL) ++ end = vim_strchr(start + 1, '>'); ++ if (buf != NULL) ++ { ++ ksp = vim_strchr(p, K_SPECIAL); ++ if (ksp != NULL && (start == NULL || ksp < start || end == NULL) ++ && ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER) ++ # ifdef FEAT_GUI ++ || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI) ++ # endif ++ )) ++ { ++ /* K_SPECIAL han been put in the buffer as K_SPECIAL ++ * KS_SPECIAL KE_FILLER, like for mappings, but ++ * do_cmdline() doesn't handle that, so convert it back. ++ * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */ ++ len = ksp - p; ++ if (len > 0) ++ { ++ mch_memmove(q, p, len); ++ q += len; ++ } ++ *q++ = ksp[1] == KS_SPECIAL ? K_SPECIAL : CSI; ++ p = ksp + 3; ++ continue; ++ } ++ } ++ ++ /* break if there no is found */ ++ if (start == NULL || end == NULL) ++ break; ++ + /* Include the '>' */ + ++end; + +*** ../vim-7.2.089/src/version.c Wed Jan 28 14:17:21 2009 +--- src/version.c Wed Jan 28 15:37:40 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 90, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +17. When the money comes out the ATM, scream "I won!, I won! 3rd + time this week!!!!!" + + /// 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/7.2.091 b/7.2.091 new file mode 100644 index 00000000..766a155e --- /dev/null +++ b/7.2.091 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.091 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.091 +Problem: ":cs help" output is not aligned for some languages. +Solution: Compute character size instead of byte size. (Dominique Pelle) +Files: src/if_cscope.c + + +*** ../vim-7.2.090/src/if_cscope.c Mon Aug 25 04:35:13 2008 +--- src/if_cscope.c Thu Jan 22 18:44:46 2009 +*************** +*** 1177,1184 **** + (void)MSG_PUTS(_("cscope commands:\n")); + while (cmdp->name != NULL) + { +! (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" +--- 1177,1192 ---- + (void)MSG_PUTS(_("cscope commands:\n")); + while (cmdp->name != NULL) + { +! char *help = _(cmdp->help); +! int space_cnt = 30 - vim_strsize((char_u *)help); +! +! /* Use %*s rather than %30s to ensure proper alignment in utf-8 */ +! if (space_cnt < 0) +! space_cnt = 0; +! (void)smsg((char_u *)_("%-5s: %s%*s (Usage: %s)"), +! cmdp->name, +! help, space_cnt, " ", +! cmdp->usage); + if (strcmp(cmdp->name, "find") == 0) + MSG_PUTS(_("\n" + " c: Find functions calling this function\n" +*** ../vim-7.2.090/src/version.c Wed Jan 28 15:42:07 2009 +--- src/version.c Wed Jan 28 16:02:25 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 91, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +18. When leaving the zoo, start running towards the parking lot, + yelling "run for your lives, they're loose!!" + + /// 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/7.2.092 b/7.2.092 new file mode 100644 index 00000000..633903ee --- /dev/null +++ b/7.2.092 @@ -0,0 +1,164 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.092 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.092 +Problem: Some error messages are not translated. +Solution: Add _() around the messages. (Dominique Pelle) +Files: src/eval.c + + +*** ../vim-7.2.091/src/eval.c Sun Dec 21 13:02:47 2008 +--- src/eval.c Sat Jan 24 12:22:47 2009 +*************** +*** 7918,7926 **** + else if (!aborting()) + { + if (argcount == MAX_FUNC_ARGS) +! emsg_funcname("E740: Too many arguments for function %s", name); + else +! emsg_funcname("E116: Invalid arguments for function %s", name); + } + + while (--argcount >= 0) +--- 7918,7926 ---- + else if (!aborting()) + { + if (argcount == MAX_FUNC_ARGS) +! emsg_funcname(N_("E740: Too many arguments for function %s"), name); + else +! emsg_funcname(N_("E116: Invalid arguments for function %s"), name); + } + + while (--argcount >= 0) +*************** +*** 8153,8158 **** +--- 8153,8159 ---- + + /* + * Give an error message with a function name. Handle things. ++ * "ermsg" is to be passed without translation, use N_() instead of _(). + */ + static void + emsg_funcname(ermsg, name) +*************** +*** 19867,19873 **** + } + } + else +! emsg_funcname("E123: Undefined function: %s", name); + } + goto ret_free; + } +--- 19868,19874 ---- + } + } + else +! emsg_funcname(N_("E123: Undefined function: %s"), name); + } + goto ret_free; + } +*************** +*** 19911,19917 **** + : eval_isnamec(arg[j]))) + ++j; + if (arg[j] != NUL) +! emsg_funcname(_(e_invarg2), arg); + } + } + +--- 19912,19918 ---- + : eval_isnamec(arg[j]))) + ++j; + if (arg[j] != NUL) +! emsg_funcname(e_invarg2, arg); + } + } + +*************** +*** 20183,20189 **** + v = find_var(name, &ht); + if (v != NULL && v->di_tv.v_type == VAR_FUNC) + { +! emsg_funcname("E707: Function name conflicts with variable: %s", + name); + goto erret; + } +--- 20184,20190 ---- + v = find_var(name, &ht); + if (v != NULL && v->di_tv.v_type == VAR_FUNC) + { +! emsg_funcname(N_("E707: Function name conflicts with variable: %s"), + name); + goto erret; + } +*************** +*** 20198,20204 **** + } + if (fp->uf_calls > 0) + { +! emsg_funcname("E127: Cannot redefine function %s: It is in use", + name); + goto erret; + } +--- 20199,20205 ---- + } + if (fp->uf_calls > 0) + { +! emsg_funcname(N_("E127: Cannot redefine function %s: It is in use"), + name); + goto erret; + } +*************** +*** 21477,21483 **** + + /* + * Return TRUE if items in "fc" do not have "copyID". That means they are not +! * referenced from anywyere. + */ + static int + can_free_funccal(fc, copyID) +--- 21478,21484 ---- + + /* + * Return TRUE if items in "fc" do not have "copyID". That means they are not +! * referenced from anywhere. + */ + static int + can_free_funccal(fc, copyID) +*** ../vim-7.2.091/src/version.c Wed Jan 28 16:03:51 2009 +--- src/version.c Wed Jan 28 19:05:47 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 92, + /**/ + + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.093 b/7.2.093 new file mode 100644 index 00000000..b0f44909 --- /dev/null +++ b/7.2.093 @@ -0,0 +1,234 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.093 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.093 (extra) +Problem: Win32: inputdialog() and find/replace dialogs can't handle + multi-byte text. +Solution: Use the wide version of dialog functions when available. (Yanwei + Jia) +Files: src/gui_w32.c, src/gui_w48.c + + +*** ../vim-7.2.092/src/gui_w32.c Thu Nov 20 17:09:09 2008 +--- src/gui_w32.c Wed Jan 28 21:15:29 2009 +*************** +*** 1582,1587 **** +--- 1582,1598 ---- + s_findrep_struct.lpstrReplaceWith[0] = NUL; + s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE; + s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE; ++ # if defined(FEAT_MBYTE) && defined(WIN3264) ++ s_findrep_struct_w.lStructSize = sizeof(s_findrep_struct_w); ++ s_findrep_struct_w.lpstrFindWhat = ++ (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR)); ++ s_findrep_struct_w.lpstrFindWhat[0] = NUL; ++ s_findrep_struct_w.lpstrReplaceWith = ++ (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR)); ++ s_findrep_struct_w.lpstrReplaceWith[0] = NUL; ++ s_findrep_struct_w.wFindWhatLen = MSWIN_FR_BUFSIZE; ++ s_findrep_struct_w.wReplaceWithLen = MSWIN_FR_BUFSIZE; ++ # endif + #endif + + theend: +*************** +*** 2938,2945 **** + + /* If the edit box exists, copy the string. */ + if (s_textfield != NULL) +! GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2, + s_textfield, IOSIZE); + + /* + * Need to check for IDOK because if the user just hits Return to +--- 2949,2975 ---- + + /* If the edit box exists, copy the string. */ + if (s_textfield != NULL) +! { +! # if defined(FEAT_MBYTE) && defined(WIN3264) +! /* If the OS is Windows NT, and 'encoding' differs from active +! * codepage: use wide function and convert text. */ +! if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT +! && enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! { +! WCHAR *wp = (WCHAR *)alloc(IOSIZE * sizeof(WCHAR)); +! char_u *p; +! +! GetDlgItemTextW(hwnd, DLG_NONBUTTON_CONTROL + 2, wp, IOSIZE); +! p = utf16_to_enc(wp, NULL); +! vim_strncpy(s_textfield, p, IOSIZE); +! vim_free(p); +! vim_free(wp); +! } +! else +! # endif +! GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2, + s_textfield, IOSIZE); ++ } + + /* + * Need to check for IDOK because if the user just hits Return to +*** ../vim-7.2.092/src/gui_w48.c Wed Jan 28 14:17:21 2009 +--- src/gui_w48.c Wed Jan 28 21:10:26 2009 +*************** +*** 153,158 **** +--- 153,161 ---- + #ifdef MSWIN_FIND_REPLACE + static UINT s_findrep_msg = 0; /* set in gui_w[16/32].c */ + static FINDREPLACE s_findrep_struct; ++ # if defined(FEAT_MBYTE) && defined(WIN3264) ++ static FINDREPLACEW s_findrep_struct_w; ++ # endif + static HWND s_findrep_hwnd = NULL; + static int s_findrep_is_find; /* TRUE for find dialog, FALSE + for find/replace dialog */ +*************** +*** 884,889 **** +--- 887,931 ---- + #endif + + #ifdef MSWIN_FIND_REPLACE ++ # if defined(FEAT_MBYTE) && defined(WIN3264) ++ /* ++ * copy useful data from structure LPFINDREPLACE to structure LPFINDREPLACEW ++ */ ++ static void ++ findrep_atow(LPFINDREPLACEW lpfrw, LPFINDREPLACE lpfr) ++ { ++ WCHAR *wp; ++ ++ lpfrw->hwndOwner = lpfr->hwndOwner; ++ lpfrw->Flags = lpfr->Flags; ++ ++ wp = enc_to_utf16(lpfr->lpstrFindWhat, NULL); ++ wcsncpy(lpfrw->lpstrFindWhat, wp, lpfrw->wFindWhatLen - 1); ++ vim_free(wp); ++ ++ /* the field "lpstrReplaceWith" doesn't need to be copied */ ++ } ++ ++ /* ++ * copy useful data from structure LPFINDREPLACEW to structure LPFINDREPLACE ++ */ ++ static void ++ findrep_wtoa(LPFINDREPLACE lpfr, LPFINDREPLACEW lpfrw) ++ { ++ char_u *p; ++ ++ lpfr->Flags = lpfrw->Flags; ++ ++ p = utf16_to_enc(lpfrw->lpstrFindWhat, NULL); ++ vim_strncpy(lpfr->lpstrFindWhat, p, lpfr->wFindWhatLen - 1); ++ vim_free(p); ++ ++ p = utf16_to_enc(lpfrw->lpstrReplaceWith, NULL); ++ vim_strncpy(lpfr->lpstrReplaceWith, p, lpfr->wReplaceWithLen - 1); ++ vim_free(p); ++ } ++ # endif ++ + /* + * Handle a Find/Replace window message. + */ +*************** +*** 893,898 **** +--- 935,950 ---- + int flags = 0; + int down; + ++ # if defined(FEAT_MBYTE) && defined(WIN3264) ++ /* If the OS is Windows NT, and 'encoding' differs from active codepage: ++ * convert text from wide string. */ ++ if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT ++ && enc_codepage >= 0 && (int)GetACP() != enc_codepage) ++ { ++ findrep_wtoa(&s_findrep_struct, &s_findrep_struct_w); ++ } ++ # endif ++ + if (s_findrep_struct.Flags & FR_DIALOGTERM) + /* Give main window the focus back. */ + (void)SetFocus(s_hwnd); +*************** +*** 2562,2568 **** + if (!IsWindow(s_findrep_hwnd)) + { + initialise_findrep(eap->arg); +! s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct); + } + + set_window_title(s_findrep_hwnd, +--- 2614,2632 ---- + if (!IsWindow(s_findrep_hwnd)) + { + initialise_findrep(eap->arg); +! # if defined(FEAT_MBYTE) && defined(WIN3264) +! /* If the OS is Windows NT, and 'encoding' differs from active +! * codepage: convert text and use wide function. */ +! if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT +! && enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! { +! findrep_atow(&s_findrep_struct_w, &s_findrep_struct); +! s_findrep_hwnd = FindTextW( +! (LPFINDREPLACEW) &s_findrep_struct_w); +! } +! else +! # endif +! s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct); + } + + set_window_title(s_findrep_hwnd, +*************** +*** 2587,2593 **** + if (!IsWindow(s_findrep_hwnd)) + { + initialise_findrep(eap->arg); +! s_findrep_hwnd = ReplaceText((LPFINDREPLACE) &s_findrep_struct); + } + + set_window_title(s_findrep_hwnd, +--- 2651,2668 ---- + if (!IsWindow(s_findrep_hwnd)) + { + initialise_findrep(eap->arg); +! # if defined(FEAT_MBYTE) && defined(WIN3264) +! if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT +! && enc_codepage >= 0 && (int)GetACP() != enc_codepage) +! { +! findrep_atow(&s_findrep_struct_w, &s_findrep_struct); +! s_findrep_hwnd = ReplaceTextW( +! (LPFINDREPLACEW) &s_findrep_struct_w); +! } +! else +! # endif +! s_findrep_hwnd = ReplaceText( +! (LPFINDREPLACE) &s_findrep_struct); + } + + set_window_title(s_findrep_hwnd, +*** ../vim-7.2.092/src/version.c Wed Jan 28 19:08:31 2009 +--- src/version.c Wed Jan 28 21:19:56 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 93, + /**/ + +-- +I'm not familiar with this proof, but I'm aware of a significant +following of toddlers who believe that peanut butter is the solution +to all of life's problems... -- Tim Hammerquist + + /// 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/7.2.094 b/7.2.094 new file mode 100644 index 00000000..bc79fa56 --- /dev/null +++ b/7.2.094 @@ -0,0 +1,112 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.094 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.094 +Problem: Compiler warning for signed/unsigned compare. +Solution: Add type cast. Also fix a few typos. +Files: src/edit.c + + +*** ../vim-7.2.093/src/edit.c Tue Jan 13 12:29:03 2009 +--- src/edit.c Wed Jan 28 21:13:51 2009 +*************** +*** 1958,1963 **** +--- 1958,1964 ---- + * Only matters when there are composing characters. + * Return TRUE when something was deleted. + */ ++ /*ARGSUSED*/ + static int + del_char_after_col(limit_col) + int limit_col; +*************** +*** 1971,1977 **** + * skip forward again when going too far back because of a + * composing character. */ + mb_adjust_cursor(); +! while (curwin->w_cursor.col < limit_col) + { + int l = utf_ptr2len(ml_get_cursor()); + +--- 1972,1978 ---- + * skip forward again when going too far back because of a + * composing character. */ + mb_adjust_cursor(); +! while (curwin->w_cursor.col < (colnr_T)limit_col) + { + int l = utf_ptr2len(ml_get_cursor()); + +*************** +*** 4240,4246 **** + } + + /* check if compl_curr_match has changed, (e.g. other type of +! * expansion added somenthing) */ + if (type != 0 && compl_curr_match != old_match) + found_new_match = OK; + +--- 4241,4247 ---- + } + + /* check if compl_curr_match has changed, (e.g. other type of +! * expansion added something) */ + if (type != 0 && compl_curr_match != old_match) + found_new_match = OK; + +*************** +*** 4741,4747 **** + } + compl_length = curwin->w_cursor.col - (int)compl_col; + /* IObuff is used to add a "word from the next line" would we +! * have enough space? just being paranoic */ + #define MIN_SPACE 75 + if (compl_length > (IOSIZE - MIN_SPACE)) + { +--- 4742,4748 ---- + } + compl_length = curwin->w_cursor.col - (int)compl_col; + /* IObuff is used to add a "word from the next line" would we +! * have enough space? just being paranoid */ + #define MIN_SPACE 75 + if (compl_length > (IOSIZE - MIN_SPACE)) + { +*************** +*** 8206,8212 **** + /* + * If the cursor is on an indent, ^T/^D insert/delete one + * shiftwidth. Otherwise ^T/^D behave like a "<<" or ">>". +! * Always round the indent to 'shiftwith', this is compatible + * with vi. But vi only supports ^T and ^D after an + * autoindent, we support it everywhere. + */ +--- 8207,8213 ---- + /* + * If the cursor is on an indent, ^T/^D insert/delete one + * shiftwidth. Otherwise ^T/^D behave like a "<<" or ">>". +! * Always round the indent to 'shiftwidth', this is compatible + * with vi. But vi only supports ^T and ^D after an + * autoindent, we support it everywhere. + */ +*** ../vim-7.2.093/src/version.c Wed Jan 28 21:22:20 2009 +--- src/version.c Wed Feb 4 11:17:02 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 94, + /**/ + +-- +Despite the cost of living, have you noticed how it remains so popular? + + /// 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/7.2.095 b/7.2.095 new file mode 100644 index 00000000..c69cadb3 --- /dev/null +++ b/7.2.095 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.095 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.095 +Problem: With Visual selection, "r" and then CTRL-C Visual mode is stopped + but the highlighting is not removed. +Solution: Call reset_VIsual(). +Files: src/normal.c + + +*** ../vim-7.2.094/src/normal.c Thu Nov 20 16:11:03 2008 +--- src/normal.c Fri Jan 30 20:37:01 2009 +*************** +*** 6783,6788 **** +--- 6783,6790 ---- + /* Visual mode "r" */ + if (VIsual_active) + { ++ if (got_int) ++ reset_VIsual(); + nv_operator(cap); + return; + } +*************** +*** 7839,7845 **** + else + i = curwin->w_leftcol; + /* Go to the middle of the screen line. When 'number' is on and lines +! * are wrapping the middle can be more to the left.*/ + if (cap->nchar == 'm') + i += (W_WIDTH(curwin) - curwin_col_off() + + ((curwin->w_p_wrap && i > 0) +--- 7841,7847 ---- + else + i = curwin->w_leftcol; + /* Go to the middle of the screen line. When 'number' is on and lines +! * are wrapping the middle can be more to the left. */ + if (cap->nchar == 'm') + i += (W_WIDTH(curwin) - curwin_col_off() + + ((curwin->w_p_wrap && i > 0) +*** ../vim-7.2.094/src/version.c Wed Feb 4 11:19:40 2009 +--- src/version.c Wed Feb 4 11:43:28 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 95, + /**/ + +-- +Nothing is fool-proof to a sufficiently talented fool. + + /// 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/7.2.096 b/7.2.096 new file mode 100644 index 00000000..e286ca9c --- /dev/null +++ b/7.2.096 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.096 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.096 +Problem: After ":number" the "Press Enter" message may be on the wrong + screen, if switching screens for shell commands. +Solution: Reset info_message. (James Vega) +Files: src/ex_cmds.c + + +*** ../vim-7.2.095/src/ex_cmds.c Tue Jan 13 16:57:09 2009 +--- src/ex_cmds.c Fri Jan 30 21:01:54 2009 +*************** +*** 2417,2424 **** + cursor_on(); /* msg_start() switches it off */ + out_flush(); + silent_mode = save_silent; +- info_message = FALSE; + } + } + + /* +--- 2417,2424 ---- + cursor_on(); /* msg_start() switches it off */ + out_flush(); + silent_mode = save_silent; + } ++ info_message = FALSE; + } + + /* +*** ../vim-7.2.095/src/version.c Wed Feb 4 11:45:28 2009 +--- src/version.c Wed Feb 4 13:12:55 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 96, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.097 b/7.2.097 new file mode 100644 index 00000000..ac72d5d9 --- /dev/null +++ b/7.2.097 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.097 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.097 +Problem: "!xterm&" doesn't work when 'shell' is "bash". +Solution: Ignore SIGHUP after calling setsid(). (Simon Schubert) +Files: src/os_unix.c + + +*** ../vim-7.2.096/src/os_unix.c Fri Nov 28 21:26:50 2008 +--- src/os_unix.c Wed Feb 4 12:09:55 2009 +*************** +*** 3950,3956 **** +--- 3950,3966 ---- + * children can be kill()ed. Don't do this when using pipes, + * because stdin is not a tty, we would lose /dev/tty. */ + if (p_stmp) ++ { + (void)setsid(); ++ # if defined(SIGHUP) ++ /* When doing "!xterm&" and 'shell' is bash: the shell ++ * will exit and send SIGHUP to all processes in its ++ * group, killing the just started process. Ignore SIGHUP ++ * to avoid that. (suggested by Simon Schubert) ++ */ ++ signal(SIGHUP, SIG_IGN); ++ # endif ++ } + # endif + # ifdef FEAT_GUI + if (pty_slave_fd >= 0) +*** ../vim-7.2.096/src/version.c Wed Feb 4 13:13:42 2009 +--- src/version.c Wed Feb 4 14:16:37 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 97, + /**/ + +-- +It was recently discovered that research causes cancer in rats. + + /// 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/7.2.098 b/7.2.098 new file mode 100644 index 00000000..eed0a65d --- /dev/null +++ b/7.2.098 @@ -0,0 +1,69 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.098 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.098 +Problem: Warning for signed/unsigned pointer. +Solution: Add type cast. +Files: src/eval.c + + +*** ../vim-7.2.097/src/eval.c Wed Jan 28 19:08:31 2009 +--- src/eval.c Wed Feb 4 13:09:01 2009 +*************** +*** 3928,3934 **** + + /* + * Handle top level expression: +! * expr1 ? expr0 : expr0 + * + * "arg" must point to the first non-white of the expression. + * "arg" is advanced to the next non-white after the recognized expression. +--- 3928,3934 ---- + + /* + * Handle top level expression: +! * expr2 ? expr1 : expr1 + * + * "arg" must point to the first non-white of the expression. + * "arg" is advanced to the next non-white after the recognized expression. +*************** +*** 19912,19918 **** + : eval_isnamec(arg[j]))) + ++j; + if (arg[j] != NUL) +! emsg_funcname(e_invarg2, arg); + } + } + +--- 19912,19918 ---- + : eval_isnamec(arg[j]))) + ++j; + if (arg[j] != NUL) +! emsg_funcname((char *)e_invarg2, arg); + } + } + +*** ../vim-7.2.097/src/version.c Wed Feb 4 14:18:44 2009 +--- src/version.c Wed Feb 4 16:24:06 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 98, + /**/ + +-- +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/7.2.099 b/7.2.099 new file mode 100644 index 00000000..6f5dae5d --- /dev/null +++ b/7.2.099 @@ -0,0 +1,127 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.099 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.099 +Problem: Changing GUI options causes an unnecessary redraw when the GUI + isn't active. +Solution: Avoid the redraw. (Lech Lorens) +Files: src/option.c + + +*** ../vim-7.2.098/src/option.c Wed Dec 24 12:53:33 2008 +--- src/option.c Wed Feb 4 16:59:56 2009 +*************** +*** 5407,5412 **** +--- 5407,5416 ---- + int did_chartab = FALSE; + char_u **gvarp; + long_u free_oldval = (options[opt_idx].flags & P_ALLOCED); ++ #ifdef FEAT_GUI ++ /* set when changing an option that only requires a redraw in the GUI */ ++ int redraw_gui_only = FALSE; ++ #endif + + /* Get the global option to compare with, otherwise we would have to check + * two values for all local options. */ +*************** +*** 6055,6060 **** +--- 6059,6065 ---- + errmsg = (char_u *)N_("E596: Invalid font(s)"); + } + } ++ redraw_gui_only = TRUE; + } + # ifdef FEAT_XFONTSET + else if (varp == &p_guifontset) +*************** +*** 6063,6068 **** +--- 6068,6074 ---- + errmsg = (char_u *)N_("E597: can't select fontset"); + else if (gui.in_use && gui_init_font(p_guifontset, TRUE) != OK) + errmsg = (char_u *)N_("E598: Invalid fontset"); ++ redraw_gui_only = TRUE; + } + # endif + # ifdef FEAT_MBYTE +*************** +*** 6072,6077 **** +--- 6078,6084 ---- + errmsg = (char_u *)N_("E533: can't select wide font"); + else if (gui_get_wide_font() == FAIL) + errmsg = (char_u *)N_("E534: Invalid wide font"); ++ redraw_gui_only = TRUE; + } + # endif + #endif +*************** +*** 6133,6145 **** +--- 6140,6163 ---- + #ifdef FEAT_GUI + /* 'guioptions' */ + else if (varp == &p_go) ++ { + gui_init_which_components(oldval); ++ redraw_gui_only = TRUE; ++ } + #endif + + #if defined(FEAT_GUI_TABLINE) + /* 'guitablabel' */ + else if (varp == &p_gtl) ++ { + redraw_tabline = TRUE; ++ redraw_gui_only = TRUE; ++ } ++ /* 'guitabtooltip' */ ++ else if (varp == &p_gtt) ++ { ++ redraw_gui_only = TRUE; ++ } + #endif + + #if defined(FEAT_MOUSE_TTY) && (defined(UNIX) || defined(VMS)) +*************** +*** 6717,6723 **** + + if (curwin->w_curswant != MAXCOL) + curwin->w_set_curswant = TRUE; /* in case 'showbreak' changed */ +! check_redraw(options[opt_idx].flags); + + return errmsg; + } +--- 6735,6745 ---- + + if (curwin->w_curswant != MAXCOL) + curwin->w_set_curswant = TRUE; /* in case 'showbreak' changed */ +! #ifdef FEAT_GUI +! /* check redraw when it's not a GUI option or the GUI is active. */ +! if (!redraw_gui_only || gui.in_use) +! #endif +! check_redraw(options[opt_idx].flags); + + return errmsg; + } +*** ../vim-7.2.098/src/version.c Wed Feb 4 16:25:53 2009 +--- src/version.c Wed Feb 4 17:24:11 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 99, + /**/ + +-- +I started out with nothing, and I still have most of it. + -- Michael Davis -- "Tonight Show" + + /// 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/7.2.100 b/7.2.100 new file mode 100644 index 00000000..0099edb1 --- /dev/null +++ b/7.2.100 @@ -0,0 +1,132 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.100 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.100 +Problem: When using ":source" on a FIFO or something else that can't rewind + the first three bytes are skipped. +Solution: Instead of rewinding read the first line and detect a BOM in that. + (mostly by James Vega) +Files: src/ex_cmds2.c + + +*** ../vim-7.2.099/src/ex_cmds2.c Sat Nov 15 14:10:23 2008 +--- src/ex_cmds2.c Wed Feb 4 16:05:51 2009 +*************** +*** 2842,2847 **** +--- 2842,2848 ---- + linenr_T save_sourcing_lnum; + char_u *p; + char_u *fname_exp; ++ char_u *firstline = NULL; + int retval = FAIL; + #ifdef FEAT_EVAL + scid_T save_current_SID; +*************** +*** 2992,3014 **** + + cookie.level = ex_nesting_level; + #endif +- #ifdef FEAT_MBYTE +- cookie.conv.vc_type = CONV_NONE; /* no conversion */ +- +- /* Try reading the first few bytes to check for a UTF-8 BOM. */ +- { +- char_u buf[3]; +- +- if (fread((char *)buf, sizeof(char_u), (size_t)3, cookie.fp) +- == (size_t)3 +- && buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf) +- /* Found BOM, setup conversion and skip over it. */ +- convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); +- else +- /* No BOM found, rewind. */ +- fseek(cookie.fp, 0L, SEEK_SET); +- } +- #endif + + /* + * Keep the sourcing name/lnum, for recursive calls. +--- 2993,2998 ---- +*************** +*** 3018,3023 **** +--- 3002,3026 ---- + save_sourcing_lnum = sourcing_lnum; + sourcing_lnum = 0; + ++ #ifdef FEAT_MBYTE ++ cookie.conv.vc_type = CONV_NONE; /* no conversion */ ++ ++ /* Read the first line so we can check for a UTF-8 BOM. */ ++ firstline = getsourceline(0, (void *)&cookie, 0); ++ if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef ++ && firstline[1] == 0xbb && firstline[2] == 0xbf) ++ { ++ /* Found BOM; setup conversion, skip over BOM and recode the line. */ ++ convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); ++ p = string_convert(&cookie.conv, firstline + 3, NULL); ++ if (p != NULL) ++ { ++ vim_free(firstline); ++ firstline = p; ++ } ++ } ++ #endif ++ + #ifdef STARTUPTIME + time_push(&tv_rel, &tv_start); + #endif +*************** +*** 3111,3119 **** + /* + * Call do_cmdline, which will call getsourceline() to get the lines. + */ +! do_cmdline(NULL, getsourceline, (void *)&cookie, + DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); +- + retval = OK; + + #ifdef FEAT_PROFILE +--- 3114,3121 ---- + /* + * Call do_cmdline, which will call getsourceline() to get the lines. + */ +! do_cmdline(firstline, getsourceline, (void *)&cookie, + DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); + retval = OK; + + #ifdef FEAT_PROFILE +*************** +*** 3171,3176 **** +--- 3173,3179 ---- + #endif + fclose(cookie.fp); + vim_free(cookie.nextline); ++ vim_free(firstline); + #ifdef FEAT_MBYTE + convert_setup(&cookie.conv, NULL, NULL); + #endif +*** ../vim-7.2.099/src/version.c Wed Feb 4 17:27:50 2009 +--- src/version.c Wed Feb 4 17:48:47 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 100, + /**/ + +-- +Well, you come from nothing, you go back to nothing... What have you +lost? Nothing! + -- Monty Python: The life of Brian + + /// 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/7.2.101 b/7.2.101 new file mode 100644 index 00000000..e3526ca8 --- /dev/null +++ b/7.2.101 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.101 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.101 (extra) +Problem: MSVC version not recognized. +Solution: Add the version number to the list. (Zhong Zhang) +Files: src/Make_mvc.mak + + +*** ../vim-7.2.100/src/Make_mvc.mak Thu Jul 24 20:49:58 2008 +--- src/Make_mvc.mak Wed Feb 4 18:32:47 2009 +*************** +*** 354,359 **** +--- 354,362 ---- + !if "$(_NMAKE_VER)" == "9.00.21022.08" + MSVCVER = 9.0 + !endif ++ !if "$(_NMAKE_VER)" == "9.00.30729.01" ++ MSVCVER = 9.0 ++ !endif + !endif + + # Abort bulding VIM if version of VC is unrecognised. +*** ../vim-7.2.100/src/version.c Wed Feb 4 17:49:46 2009 +--- src/version.c Wed Feb 4 18:34:12 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 101, + /**/ + +-- +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/7.2.102 b/7.2.102 new file mode 100644 index 00000000..316c32bd --- /dev/null +++ b/7.2.102 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.102 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.102 (after 7.2.100) +Problem: When 'encoding' is "utf-8" a BOM at the start of a Vim script is + not removed. (Tony Mechelynck) +Solution: When no conversion is taking place make a copy of the line without + the BOM. +Files: src/ex_cmds2.c + + +*** ../vim-7.2.101/src/ex_cmds2.c Wed Feb 4 17:49:46 2009 +--- src/ex_cmds2.c Thu Feb 5 20:41:56 2009 +*************** +*** 3013,3018 **** +--- 3013,3020 ---- + /* Found BOM; setup conversion, skip over BOM and recode the line. */ + convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc); + p = string_convert(&cookie.conv, firstline + 3, NULL); ++ if (p == NULL) ++ p = vim_strsave(firstline + 3); + if (p != NULL) + { + vim_free(firstline); +*** ../vim-7.2.101/src/version.c Wed Feb 4 18:34:54 2009 +--- src/version.c Thu Feb 5 20:44:55 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 102, + /**/ + +-- +CVS sux, men don't like commitment + + /// 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/7.2.103 b/7.2.103 new file mode 100644 index 00000000..25a513a7 --- /dev/null +++ b/7.2.103 @@ -0,0 +1,216 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.103 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.103 +Problem: When 'bomb' is changed the window title is updated to show/hide a + "+", but the tab page label isn't. (Patrick Texier) +Solution: Set "redraw_tabline" in most places where "need_maketitle" is set. + (partly by Lech Lorens) +Files: src/option.c + + +*** ../vim-7.2.102/src/option.c Wed Feb 4 17:27:50 2009 +--- src/option.c Wed Feb 4 17:40:02 2009 +*************** +*** 5268,5273 **** +--- 5268,5288 ---- + } + #endif + ++ #ifdef FEAT_TITLE ++ static void redraw_titles __ARGS((void)); ++ ++ /* ++ * Redraw the window title and/or tab page text later. ++ */ ++ static void redraw_titles() ++ { ++ need_maketitle = TRUE; ++ # ifdef FEAT_WINDOWS ++ redraw_tabline = TRUE; ++ # endif ++ } ++ #endif ++ + /* + * Set a string option to a new value (without checking the effect). + * The string is copied into allocated memory. +*************** +*** 5672,5678 **** + { + # ifdef FEAT_TITLE + /* May show a "+" in the title now. */ +! need_maketitle = TRUE; + # endif + /* Add 'fileencoding' to the swap file. */ + ml_setflags(curbuf); +--- 5687,5693 ---- + { + # ifdef FEAT_TITLE + /* May show a "+" in the title now. */ +! redraw_titles(); + # endif + /* Add 'fileencoding' to the swap file. */ + ml_setflags(curbuf); +*************** +*** 5691,5697 **** + { + errmsg = mb_init(); + # ifdef FEAT_TITLE +! need_maketitle = TRUE; + # endif + } + } +--- 5706,5712 ---- + { + errmsg = mb_init(); + # ifdef FEAT_TITLE +! redraw_titles(); + # endif + } + } +*************** +*** 5800,5806 **** + else + curbuf->b_p_tx = FALSE; + #ifdef FEAT_TITLE +! need_maketitle = TRUE; + #endif + /* update flag in swap file */ + ml_setflags(curbuf); +--- 5815,5821 ---- + else + curbuf->b_p_tx = FALSE; + #ifdef FEAT_TITLE +! redraw_titles(); + #endif + /* update flag in swap file */ + ml_setflags(curbuf); +*************** +*** 7127,7148 **** + curbuf->b_did_warn = FALSE; + + #ifdef FEAT_TITLE +! need_maketitle = TRUE; + #endif + } + + #ifdef FEAT_TITLE + /* when 'modifiable' is changed, redraw the window title */ + else if ((int *)varp == &curbuf->b_p_ma) +! need_maketitle = TRUE; + /* when 'endofline' is changed, redraw the window title */ + else if ((int *)varp == &curbuf->b_p_eol) +! need_maketitle = TRUE; +! #ifdef FEAT_MBYTE +! /* when 'bomb' is changed, redraw the window title */ + else if ((int *)varp == &curbuf->b_p_bomb) +! need_maketitle = TRUE; +! #endif + #endif + + /* when 'bin' is set also set some other options */ +--- 7142,7169 ---- + curbuf->b_did_warn = FALSE; + + #ifdef FEAT_TITLE +! redraw_titles(); + #endif + } + + #ifdef FEAT_TITLE + /* when 'modifiable' is changed, redraw the window title */ + else if ((int *)varp == &curbuf->b_p_ma) +! { +! redraw_titles(); +! } + /* when 'endofline' is changed, redraw the window title */ + else if ((int *)varp == &curbuf->b_p_eol) +! { +! redraw_titles(); +! } +! # ifdef FEAT_MBYTE +! /* when 'bomb' is changed, redraw the window title and tab page text */ + else if ((int *)varp == &curbuf->b_p_bomb) +! { +! redraw_titles(); +! } +! # endif + #endif + + /* when 'bin' is set also set some other options */ +*************** +*** 7150,7156 **** + { + set_options_bin(old_value, curbuf->b_p_bin, opt_flags); + #ifdef FEAT_TITLE +! need_maketitle = TRUE; + #endif + } + +--- 7171,7177 ---- + { + set_options_bin(old_value, curbuf->b_p_bin, opt_flags); + #ifdef FEAT_TITLE +! redraw_titles(); + #endif + } + +*************** +*** 7301,7307 **** + if (!value) + save_file_ff(curbuf); /* Buffer is unchanged */ + #ifdef FEAT_TITLE +! need_maketitle = TRUE; + #endif + #ifdef FEAT_AUTOCMD + modified_was_set = value; +--- 7322,7328 ---- + if (!value) + save_file_ff(curbuf); /* Buffer is unchanged */ + #ifdef FEAT_TITLE +! redraw_titles(); + #endif + #ifdef FEAT_AUTOCMD + modified_was_set = value; +*************** +*** 7736,7742 **** + newFoldLevel(); + } + +! /* 'foldminlevel' */ + else if (pp == &curwin->w_p_fml) + { + foldUpdateAll(curwin); +--- 7757,7763 ---- + newFoldLevel(); + } + +! /* 'foldminlines' */ + else if (pp == &curwin->w_p_fml) + { + foldUpdateAll(curwin); +*** ../vim-7.2.102/src/version.c Thu Feb 5 20:47:14 2009 +--- src/version.c Wed Feb 11 11:32:20 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 103, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +73. You give your dog used motherboards instead of bones + + /// 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/7.2.104 b/7.2.104 new file mode 100644 index 00000000..51c0e097 --- /dev/null +++ b/7.2.104 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.104 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.104 +Problem: When using ":saveas bar.c" the tab label isn't updated right away. +Solution: Set redraw_tabline. (Francois Ingelrest) +Files: src/ex_cmds.c + + +*** ../vim-7.2.103/src/ex_cmds.c Wed Feb 4 13:13:42 2009 +--- src/ex_cmds.c Wed Feb 11 15:58:06 2009 +*************** +*** 2707,2713 **** +--- 2707,2718 ---- + if (eap->cmdidx == CMD_saveas) + { + if (retval == OK) ++ { + curbuf->b_p_ro = FALSE; ++ #ifdef FEAT_WINDOWS ++ redraw_tabline = TRUE; ++ #endif ++ } + /* Change directories when the 'acd' option is set. */ + DO_AUTOCHDIR + } +*** ../vim-7.2.103/src/version.c Wed Feb 11 11:34:24 2009 +--- src/version.c Wed Feb 11 16:02:19 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 104, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.105 b/7.2.105 new file mode 100644 index 00000000..486ffb3f --- /dev/null +++ b/7.2.105 @@ -0,0 +1,72 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.105 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.105 +Problem: Modeline setting for 'foldmethod' overrules diff options. (Ingo + Karkat) +Solution: Don't set 'foldmethod' and 'wrap' from a modeline when 'diff' is + on. +Files: src/option.c + + +*** ../vim-7.2.104/src/option.c Wed Feb 11 11:34:24 2009 +--- src/option.c Wed Feb 11 16:29:56 2009 +*************** +*** 4119,4129 **** + && options[opt_idx].var == VAR_WIN) + goto skip; + +! /* Disallow changing some options from modelines */ +! if ((opt_flags & OPT_MODELINE) && (flags & P_SECURE)) + { +! errmsg = (char_u *)_("E520: Not allowed in a modeline"); +! goto skip; + } + + #ifdef HAVE_SANDBOX +--- 4119,4139 ---- + && options[opt_idx].var == VAR_WIN) + goto skip; + +! /* Disallow changing some options from modelines. */ +! if (opt_flags & OPT_MODELINE) + { +! if (flags & P_SECURE) +! { +! errmsg = (char_u *)_("E520: Not allowed in a modeline"); +! goto skip; +! } +! /* In diff mode some options are overruled. This avoids that +! * 'foldmethod' becomes "marker" instead of "diff" and that +! * "wrap" gets set. */ +! if (curwin->w_p_diff +! && (options[opt_idx].indir == PV_FDM +! || options[opt_idx].indir == PV_WRAP)) +! goto skip; + } + + #ifdef HAVE_SANDBOX +*** ../vim-7.2.104/src/version.c Wed Feb 11 16:02:29 2009 +--- src/version.c Wed Feb 11 16:40:35 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 105, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.106 b/7.2.106 new file mode 100644 index 00000000..2c547973 --- /dev/null +++ b/7.2.106 @@ -0,0 +1,103 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.106 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.106 +Problem: Endless loop when using "]s" in HTML when there are no + misspellings. (Ingo Karkat) +Solution: Break the search loop. Also fix pointer alignment for systems + with pointers larger than int. +Files: src/spell.c + + +*** ../vim-7.2.105/src/spell.c Tue Dec 9 22:34:02 2008 +--- src/spell.c Wed Feb 11 17:54:50 2009 +*************** +*** 2376,2382 **** + + /* If we are back at the starting line and there is no match then + * give up. */ +! if (lnum == wp->w_cursor.lnum && !found_one) + break; + + /* Skip the characters at the start of the next line that were +--- 2376,2382 ---- + + /* If we are back at the starting line and there is no match then + * give up. */ +! if (lnum == wp->w_cursor.lnum && (!found_one || wrapped)) + break; + + /* Skip the characters at the start of the next line that were +*************** +*** 4956,4968 **** + * Structure that is used to store the items in the word tree. This avoids + * the need to keep track of each allocated thing, everything is freed all at + * once after ":mkspell" is done. + */ + #define SBLOCKSIZE 16000 /* size of sb_data */ + typedef struct sblock_S sblock_T; + struct sblock_S + { +- sblock_T *sb_next; /* next block in list */ + int sb_used; /* nr of bytes already in use */ + char_u sb_data[1]; /* data, actually longer */ + }; + +--- 4956,4971 ---- + * Structure that is used to store the items in the word tree. This avoids + * the need to keep track of each allocated thing, everything is freed all at + * once after ":mkspell" is done. ++ * Note: "sb_next" must be just before "sb_data" to make sure the alignment of ++ * "sb_data" is correct for systems where pointers must be aligned on ++ * pointer-size boundaries and sizeof(pointer) > sizeof(int) (e.g., Sparc). + */ + #define SBLOCKSIZE 16000 /* size of sb_data */ + typedef struct sblock_S sblock_T; + struct sblock_S + { + int sb_used; /* nr of bytes already in use */ ++ sblock_T *sb_next; /* next block in list */ + char_u sb_data[1]; /* data, actually longer */ + }; + +*************** +*** 15011,15017 **** + + case 0: + /* +! * Lenghts are equal, thus changes must result in same length: An + * insert is only possible in combination with a delete. + * 1: check if for identical strings + */ +--- 15014,15020 ---- + + case 0: + /* +! * Lengths are equal, thus changes must result in same length: An + * insert is only possible in combination with a delete. + * 1: check if for identical strings + */ +*** ../vim-7.2.105/src/version.c Wed Feb 11 16:45:56 2009 +--- src/version.c Wed Feb 11 17:56:34 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 106, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.107 b/7.2.107 new file mode 100644 index 00000000..95673754 --- /dev/null +++ b/7.2.107 @@ -0,0 +1,56 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.107 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.107 +Problem: When using a GUI dialog and ":echo" commands the messages are + deleted after the dialog. (Vicent Birebent) +Solution: Don't call msg_end_prompt() since there was no prompt. +Files: src/message.c + + +*** ../vim-7.2.106/src/message.c Tue Jan 13 16:37:31 2009 +--- src/message.c Wed Feb 11 18:38:14 2009 +*************** +*** 3309,3315 **** + { + c = gui_mch_dialog(type, title, message, buttons, dfltbutton, + textfield); +! msg_end_prompt(); + + /* Flush output to avoid that further messages and redrawing is done + * in the wrong order. */ +--- 3309,3318 ---- + { + c = gui_mch_dialog(type, title, message, buttons, dfltbutton, + textfield); +! /* avoid a hit-enter prompt without clearing the cmdline */ +! need_wait_return = FALSE; +! emsg_on_display = FALSE; +! cmdline_row = msg_row; + + /* Flush output to avoid that further messages and redrawing is done + * in the wrong order. */ +*** ../vim-7.2.106/src/version.c Wed Feb 11 17:57:43 2009 +--- src/version.c Wed Feb 11 18:46:12 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 107, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +79. All of your most erotic dreams have a scrollbar at the right side. + + /// 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/7.2.108 b/7.2.108 new file mode 100644 index 00000000..5164b83c --- /dev/null +++ b/7.2.108 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.108 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.108 (after 7.2.105) +Problem: Can't build without the diff feature. +Solution: Add #ifdef. +Files: src/option.c + + +*** ../vim-7.2.107/src/option.c Wed Feb 11 16:45:56 2009 +--- src/option.c Wed Feb 11 22:21:16 2009 +*************** +*** 4127,4132 **** +--- 4127,4133 ---- + errmsg = (char_u *)_("E520: Not allowed in a modeline"); + goto skip; + } ++ #ifdef FEAT_DIFF + /* In diff mode some options are overruled. This avoids that + * 'foldmethod' becomes "marker" instead of "diff" and that + * "wrap" gets set. */ +*************** +*** 4134,4139 **** +--- 4135,4141 ---- + && (options[opt_idx].indir == PV_FDM + || options[opt_idx].indir == PV_WRAP)) + goto skip; ++ #endif + } + + #ifdef HAVE_SANDBOX +*** ../vim-7.2.107/src/version.c Wed Feb 11 18:46:48 2009 +--- src/version.c Wed Feb 11 22:46:40 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 108, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +80. At parties, you introduce your spouse as your "service provider." + + /// 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/7.2.109 b/7.2.109 new file mode 100644 index 00000000..8c3866cf --- /dev/null +++ b/7.2.109 @@ -0,0 +1,423 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.109 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.109 +Problem: 'langmap' does not work for multi-byte characters. +Solution: Add a list of mapped multi-byte characters. (based on work by + Konstantin Korikov, Agathoklis Hatzimanikas) +Files: runtime/doc/options.txt, src/edit.c, src/getchar.c, src/macros.h, + src/normal.c, src/option.c, src/proto/option.pro, src/window.c + + +*** ../vim-7.2.108/runtime/doc/options.txt Fri Nov 28 10:59:57 2008 +--- runtime/doc/options.txt Wed Feb 11 18:59:34 2009 +*************** +*** 4175,4183 **** + be able to execute Normal mode commands. + This is the opposite of the 'keymap' option, where characters are + mapped in Insert mode. +- This only works for 8-bit characters. The value of 'langmap' may be +- specified with multi-byte characters (e.g., UTF-8), but only the lower +- 8 bits of each character will be used. + + Example (for Greek, in UTF-8): *greek* > + :set langmap=ΑA,Î’B,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ÎN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,Î¥Y,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,Ï€p,qq,Ïr,σs,Ï„t,θu,ωv,Ï‚w,χx,Ï…y,ζz +--- 4188,4193 ---- +*** ../vim-7.2.108/src/edit.c Wed Feb 4 11:19:40 2009 +--- src/edit.c Sat Feb 21 19:54:03 2009 +*************** +*** 7703,7711 **** + */ + ++no_mapping; + regname = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(regname, TRUE); +- #endif + if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P) + { + /* Get a third key for literal register insertion */ +--- 7703,7709 ---- +*************** +*** 7714,7722 **** + add_to_showcmd_c(literally); + #endif + regname = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(regname, TRUE); +- #endif + } + --no_mapping; + +--- 7712,7718 ---- +*** ../vim-7.2.108/src/macros.h Wed Aug 15 20:41:07 2007 +--- src/macros.h Sat Feb 21 19:55:38 2009 +*************** +*** 127,141 **** + #ifdef FEAT_LANGMAP + /* + * Adjust chars in a language according to 'langmap' option. +! * NOTE that there is NO overhead if 'langmap' is not set; but even +! * when set we only have to do 2 ifs and an array lookup. + * Don't apply 'langmap' if the character comes from the Stuff buffer. + * The do-while is just to ignore a ';' after the macro. + */ +! # define LANGMAP_ADJUST(c, condition) do { \ +! if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \ +! c = langmap_mapchar[c]; \ + } while (0) + #endif + + /* +--- 127,157 ---- + #ifdef FEAT_LANGMAP + /* + * Adjust chars in a language according to 'langmap' option. +! * NOTE that there is no noticeable overhead if 'langmap' is not set. +! * When set the overhead for characters < 256 is small. + * Don't apply 'langmap' if the character comes from the Stuff buffer. + * The do-while is just to ignore a ';' after the macro. + */ +! # ifdef FEAT_MBYTE +! # define LANGMAP_ADJUST(c, condition) \ +! do { \ +! if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0) \ +! { \ +! if ((c) < 256) \ +! c = langmap_mapchar[c]; \ +! else \ +! c = langmap_adjust_mb(c); \ +! } \ + } while (0) ++ # else ++ # define LANGMAP_ADJUST(c, condition) \ ++ do { \ ++ if (*p_langmap && (condition) && !KeyStuffed && (c) >= 0 && (c) < 256) \ ++ c = langmap_mapchar[c]; \ ++ } while (0) ++ # endif ++ #else ++ # define LANGMAP_ADJUST(c, condition) /* nop */ + #endif + + /* +*** ../vim-7.2.108/src/normal.c Wed Feb 4 11:45:28 2009 +--- src/normal.c Sat Feb 21 19:55:17 2009 +*************** +*** 651,660 **** + * Get the command character from the user. + */ + c = safe_vgetc(); +- +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); +- #endif + + #ifdef FEAT_VISUAL + /* +--- 651,657 ---- +*************** +*** 744,752 **** + } + ++no_zero_mapping; /* don't map zero here */ + c = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); +- #endif + --no_zero_mapping; + if (ctrl_w) + { +--- 741,747 ---- +*************** +*** 769,777 **** + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but keys */ + c = plain_vgetc(); /* get next character */ +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(c, TRUE); +- #endif + --no_mapping; + --allow_keys; + #ifdef FEAT_CMDL_INFO +--- 764,770 ---- +*************** +*** 959,967 **** + * "gr", "g'" and "g`". + */ + ca.nchar = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(ca.nchar, TRUE); +- #endif + #ifdef FEAT_CMDL_INFO + need_flushbuf |= add_to_showcmd(ca.nchar); + #endif +--- 952,958 ---- +*************** +*** 1062,1071 **** + } + #endif + +- #ifdef FEAT_LANGMAP + /* adjust chars > 127, except after "tTfFr" commands */ + LANGMAP_ADJUST(*cp, !lang); +- #endif + #ifdef FEAT_RIGHTLEFT + /* adjust Hebrew mapped char */ + if (p_hkmap && lang && KeyTyped) +--- 1053,1060 ---- +*************** +*** 4630,4638 **** + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but allow key codes */ + nchar = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(nchar, TRUE); +- #endif + --no_mapping; + --allow_keys; + #ifdef FEAT_CMDL_INFO +--- 4619,4625 ---- +*************** +*** 4988,4996 **** + ++no_mapping; + ++allow_keys; /* no mapping for nchar, but allow key codes */ + nchar = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(nchar, TRUE); +- #endif + --no_mapping; + --allow_keys; + #ifdef FEAT_CMDL_INFO +--- 4975,4981 ---- +*** ../vim-7.2.108/src/option.c Wed Feb 11 22:47:32 2009 +--- src/option.c Sat Feb 21 19:46:13 2009 +*************** +*** 10153,10177 **** + + #ifdef FEAT_LANGMAP + /* +! * Any character has an equivalent character. This is used for keyboards that +! * have a special language mode that sends characters above 128 (although +! * other characters can be translated too). + */ + + /* +! * char_u langmap_mapchar[256]; +! * Normally maps each of the 128 upper chars to an <128 ascii char; used to +! * "translate" native lang chars in normal mode or some cases of +! * insert mode without having to tediously switch lang mode back&forth. + */ + + static void + langmap_init() + { + int i; + +! for (i = 0; i < 256; i++) /* we init with a-one-to one map */ +! langmap_mapchar[i] = i; + } + + /* +--- 10153,10262 ---- + + #ifdef FEAT_LANGMAP + /* +! * Any character has an equivalent 'langmap' character. This is used for +! * keyboards that have a special language mode that sends characters above +! * 128 (although other characters can be translated too). The "to" field is a +! * Vim command character. This avoids having to switch the keyboard back to +! * ASCII mode when leaving Insert mode. +! * +! * langmap_mapchar[] maps any of 256 chars to an ASCII char used for Vim +! * commands. +! * When FEAT_MBYTE is defined langmap_mapga.ga_data is a sorted table of +! * langmap_entry_T. This does the same as langmap_mapchar[] for characters >= +! * 256. +! */ +! # ifdef FEAT_MBYTE +! /* +! * With multi-byte support use growarray for 'langmap' chars >= 256 + */ ++ typedef struct ++ { ++ int from; ++ int to; ++ } langmap_entry_T; ++ ++ static garray_T langmap_mapga; ++ static void langmap_set_entry __ARGS((int from, int to)); ++ ++ /* ++ * Search for an entry in "langmap_mapga" for "from". If found set the "to" ++ * field. If not found insert a new entry at the appropriate location. ++ */ ++ static void ++ langmap_set_entry(from, to) ++ int from; ++ int to; ++ { ++ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data); ++ int a = 0; ++ int b = langmap_mapga.ga_len; ++ ++ /* Do a binary search for an existing entry. */ ++ while (a != b) ++ { ++ int i = (a + b) / 2; ++ int d = entries[i].from - from; ++ ++ if (d == 0) ++ { ++ entries[i].to = to; ++ return; ++ } ++ if (d < 0) ++ a = i + 1; ++ else ++ b = i; ++ } ++ ++ if (ga_grow(&langmap_mapga, 1) != OK) ++ return; /* out of memory */ ++ ++ /* insert new entry at position "a" */ ++ entries = (langmap_entry_T *)(langmap_mapga.ga_data) + a; ++ mch_memmove(entries + 1, entries, ++ (langmap_mapga.ga_len - a) * sizeof(langmap_entry_T)); ++ ++langmap_mapga.ga_len; ++ entries[0].from = from; ++ entries[0].to = to; ++ } + + /* +! * Apply 'langmap' to multi-byte character "c" and return the result. + */ ++ int ++ langmap_adjust_mb(c) ++ int c; ++ { ++ langmap_entry_T *entries = (langmap_entry_T *)(langmap_mapga.ga_data); ++ int a = 0; ++ int b = langmap_mapga.ga_len; ++ ++ while (a != b) ++ { ++ int i = (a + b) / 2; ++ int d = entries[i].from - c; ++ ++ if (d == 0) ++ return entries[i].to; /* found matching entry */ ++ if (d < 0) ++ a = i + 1; ++ else ++ b = i; ++ } ++ return c; /* no entry found, return "c" unmodified */ ++ } ++ # endif + + static void + langmap_init() + { + int i; + +! for (i = 0; i < 256; i++) +! langmap_mapchar[i] = i; /* we init with a one-to-one map */ +! # ifdef FEAT_MBYTE +! ga_init2(&langmap_mapga, sizeof(langmap_entry_T), 8); +! # endif + } + + /* +*************** +*** 10185,10191 **** + char_u *p2; + int from, to; + +! langmap_init(); /* back to one-to-one map first */ + + for (p = p_langmap; p[0] != NUL; ) + { +--- 10270,10279 ---- + char_u *p2; + int from, to; + +! #ifdef FEAT_MBYTE +! ga_clear(&langmap_mapga); /* clear the previous map first */ +! #endif +! langmap_init(); /* back to one-to-one map */ + + for (p = p_langmap; p[0] != NUL; ) + { +*************** +*** 10235,10241 **** + transchar(from)); + return; + } +! langmap_mapchar[from & 255] = to; + + /* Advance to next pair */ + mb_ptr_adv(p); +--- 10323,10335 ---- + transchar(from)); + return; + } +! +! #ifdef FEAT_MBYTE +! if (from >= 256) +! langmap_set_entry(from, to); +! else +! #endif +! langmap_mapchar[from & 255] = to; + + /* Advance to next pair */ + mb_ptr_adv(p); +*** ../vim-7.2.108/src/proto/option.pro Sat May 5 19:28:04 2007 +--- src/proto/option.pro Wed Feb 11 21:21:05 2009 +*************** +*** 44,49 **** +--- 44,50 ---- + void set_context_in_set_cmd __ARGS((expand_T *xp, char_u *arg, int opt_flags)); + int ExpandSettings __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file)); + int ExpandOldSetting __ARGS((int *num_file, char_u ***file)); ++ int langmap_adjust_mb __ARGS((int c)); + int has_format_option __ARGS((int x)); + int shortmess __ARGS((int x)); + void vimrc_found __ARGS((char_u *fname, char_u *envname)); +*** ../vim-7.2.108/src/window.c Fri Nov 28 21:26:50 2008 +--- src/window.c Sat Feb 21 19:55:25 2009 +*************** +*** 594,602 **** + ++allow_keys; /* no mapping for xchar, but allow key codes */ + if (xchar == NUL) + xchar = plain_vgetc(); +- #ifdef FEAT_LANGMAP + LANGMAP_ADJUST(xchar, TRUE); +- #endif + --no_mapping; + --allow_keys; + #ifdef FEAT_CMDL_INFO +--- 594,600 ---- +*** ../vim-7.2.108/src/version.c Wed Feb 11 22:47:32 2009 +--- src/version.c Sat Feb 21 19:34:28 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 109, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.110 b/7.2.110 new file mode 100644 index 00000000..4594e78c --- /dev/null +++ b/7.2.110 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.110 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.110 +Problem: Compiler warning for unused variable. +Solution: Init the variable. +Files: src/ex_docmd.c + + +*** ../vim-7.2.109/src/ex_docmd.c Wed Jan 28 15:42:07 2009 +--- src/ex_docmd.c Tue Feb 17 03:47:13 2009 +*************** +*** 5916,5922 **** + char_u *q; + + char_u *start; +! char_u *end; + char_u *ksp; + size_t len, totlen; + +--- 5916,5922 ---- + char_u *q; + + char_u *start; +! char_u *end = NULL; + char_u *ksp; + size_t len, totlen; + +*** ../vim-7.2.109/src/version.c Sat Feb 21 20:27:00 2009 +--- src/version.c Sat Feb 21 20:35:50 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 110, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.111 b/7.2.111 new file mode 100644 index 00000000..acc0be42 --- /dev/null +++ b/7.2.111 @@ -0,0 +1,88 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.111 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.111 +Problem: When using Visual block mode with 'cursorcolumn' it's unclear what + is selected. +Solution: Don't use 'cursorcolumn' highlighting inside the Visual selection. + (idea by Dominique Pelle) +Files: src/screen.c + + +*** ../vim-7.2.110/src/screen.c Wed Oct 1 21:09:02 2008 +--- src/screen.c Sat Feb 21 21:04:19 2009 +*************** +*** 2596,2601 **** +--- 2596,2602 ---- + int noinvcur = FALSE; /* don't invert the cursor */ + #ifdef FEAT_VISUAL + pos_T *top, *bot; ++ int lnum_in_visual_area = FALSE; + #endif + pos_T pos; + long v; +*************** +*** 2792,2800 **** + top = &VIsual; + bot = &curwin->w_cursor; + } + if (VIsual_mode == Ctrl_V) /* block mode */ + { +! if (lnum >= top->lnum && lnum <= bot->lnum) + { + fromcol = wp->w_old_cursor_fcol; + tocol = wp->w_old_cursor_lcol; +--- 2793,2802 ---- + top = &VIsual; + bot = &curwin->w_cursor; + } ++ lnum_in_visual_area = (lnum >= top->lnum && lnum <= bot->lnum); + if (VIsual_mode == Ctrl_V) /* block mode */ + { +! if (lnum_in_visual_area) + { + fromcol = wp->w_old_cursor_fcol; + tocol = wp->w_old_cursor_lcol; +*************** +*** 4557,4563 **** + * highlight the cursor position itself. */ + if (wp->w_p_cuc && vcol == (long)wp->w_virtcol + && lnum != wp->w_cursor.lnum +! && draw_state == WL_LINE) + { + vcol_save_attr = char_attr; + char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC)); +--- 4560,4567 ---- + * highlight the cursor position itself. */ + if (wp->w_p_cuc && vcol == (long)wp->w_virtcol + && lnum != wp->w_cursor.lnum +! && draw_state == WL_LINE +! && !lnum_in_visual_area) + { + vcol_save_attr = char_attr; + char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC)); +*** ../vim-7.2.110/src/version.c Sat Feb 21 20:36:30 2009 +--- src/version.c Sat Feb 21 21:08:14 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 111, + /**/ + +-- +Contrary to popular belief, Unix is user friendly. +It just happens to be selective about who it makes friends with. + -- Dave Parnas + + /// 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/7.2.112 b/7.2.112 new file mode 100644 index 00000000..6611999e --- /dev/null +++ b/7.2.112 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.112 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.112 +Problem: Cursor invisible in Visual mode when 'number' is set and cursor in + first column. (Matti Niemenmaa, Renato Alves) +Solution: Check that vcol_prev is smaller than vcol. +Files: src/screen.c + + +*** ../vim-7.2.111/src/screen.c Sat Feb 21 21:10:24 2009 +--- src/screen.c Sat Feb 21 21:04:19 2009 +*************** +*** 3422,3427 **** +--- 3422,3428 ---- + && (*mb_ptr2cells)(ptr) > 1) + #endif + || ((int)vcol_prev == fromcol_prev ++ && vcol_prev < vcol /* not at margin */ + && vcol < tocol)) + area_attr = attr; /* start highlighting */ + else if (area_attr != 0 +*** ../vim-7.2.111/src/version.c Sat Feb 21 21:10:24 2009 +--- src/version.c Sat Feb 21 21:20:51 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 112, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +102. When filling out your driver's license application, you give + your IP address. + + /// 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/7.2.113 b/7.2.113 new file mode 100644 index 00000000..f0e4ebf3 --- /dev/null +++ b/7.2.113 @@ -0,0 +1,99 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.113 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.113 +Problem: Crash for substitute() call using submatch(1) while there is no + such submatch. (Yukihiro Nakadaira) +Solution: Also check the start of the submatch is set, it can be NULL when + an attempted match didn't work out. +Files: src/regexp.c + + +*** ../vim-7.2.112/src/regexp.c Fri Aug 8 13:45:31 2008 +--- src/regexp.c Sat Feb 21 21:46:49 2009 +*************** +*** 4532,4538 **** + cleanup_subexpr(); + if (!REG_MULTI) /* Single-line regexp */ + { +! if (reg_endp[no] == NULL) + { + /* Backref was not set: Match an empty string. */ + len = 0; +--- 4532,4538 ---- + cleanup_subexpr(); + if (!REG_MULTI) /* Single-line regexp */ + { +! if (reg_startp[no] == NULL || reg_endp[no] == NULL) + { + /* Backref was not set: Match an empty string. */ + len = 0; +*************** +*** 4548,4554 **** + } + else /* Multi-line regexp */ + { +! if (reg_endpos[no].lnum < 0) + { + /* Backref was not set: Match an empty string. */ + len = 0; +--- 4548,4554 ---- + } + else /* Multi-line regexp */ + { +! if (reg_startpos[no].lnum < 0 || reg_endpos[no].lnum < 0) + { + /* Backref was not set: Match an empty string. */ + len = 0; +*************** +*** 7279,7291 **** + } + else + { +! if (submatch_match->endp[no] == NULL) + retval = NULL; + else +- { +- s = submatch_match->startp[no]; + retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s)); +- } + } + + return retval; +--- 7279,7289 ---- + } + else + { +! s = submatch_match->startp[no]; +! if (s == NULL || submatch_match->endp[no] == NULL) + retval = NULL; + else + retval = vim_strnsave(s, (int)(submatch_match->endp[no] - s)); + } + + return retval; +*** ../vim-7.2.112/src/version.c Sat Feb 21 21:22:44 2009 +--- src/version.c Sat Feb 21 22:01:56 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 113, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +103. When you find yourself in the "Computer" section of Barnes & Noble + enjoying yourself. + + /// 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/7.2.114 b/7.2.114 new file mode 100644 index 00000000..9742b52d --- /dev/null +++ b/7.2.114 @@ -0,0 +1,86 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.114 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.114 +Problem: Using wrong printf format. +Solution: Use "%ld" instead of "%d". (Dominique Pelle) +Files: src/netbeans.c + + +*** ../vim-7.2.113/src/netbeans.c Tue Jan 6 16:13:42 2009 +--- src/netbeans.c Tue Feb 17 03:21:33 2009 +*************** +*** 1924,1930 **** + vim_free(path); + if (bufp == NULL) + { +! nbdebug((" File %s not found in setBufferNumber\n", args)); + EMSG2("E642: File %s not found in setBufferNumber", args); + return FAIL; + } +--- 1924,1930 ---- + vim_free(path); + if (bufp == NULL) + { +! nbdebug((" File %s not found in setBufferNumber\n", args)); + EMSG2("E642: File %s not found in setBufferNumber", args); + return FAIL; + } +*************** +*** 2318,2324 **** + } + if (pos) + { +! coloncmd(":sign place %d line=%d name=%d buffer=%d", + serNum, pos->lnum, typeNum, buf->bufp->b_fnum); + if (typeNum == curPCtype) + coloncmd(":sign jump %d buffer=%d", serNum, +--- 2318,2324 ---- + } + if (pos) + { +! coloncmd(":sign place %d line=%ld name=%d buffer=%d", + serNum, pos->lnum, typeNum, buf->bufp->b_fnum); + if (typeNum == curPCtype) + coloncmd(":sign jump %d buffer=%d", serNum, +*************** +*** 2422,2428 **** + GUARDED) == 0) + { + coloncmd( +! ":sign place %d line=%d name=%d buffer=%d", + guardId++, lnum, GUARDED, + buf->bufp->b_fnum); + } +--- 2422,2428 ---- + GUARDED) == 0) + { + coloncmd( +! ":sign place %d line=%ld name=%d buffer=%d", + guardId++, lnum, GUARDED, + buf->bufp->b_fnum); + } +*** ../vim-7.2.113/src/version.c Sat Feb 21 22:03:06 2009 +--- src/version.c Sat Feb 21 22:11:21 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 114, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.115 b/7.2.115 new file mode 100644 index 00000000..b51a1f50 --- /dev/null +++ b/7.2.115 @@ -0,0 +1,133 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.115 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.115 +Problem: Some debugging code is never used. +Solution: Remove nbtrace() and nbprt(). (Dominique Pelle) +Files: src/nbdebug.c, src/nbdebug.h + +*** ../vim-7.2.114/src/nbdebug.c Tue Jun 24 23:54:30 2008 +--- src/nbdebug.c Tue Feb 17 03:26:07 2009 +*************** +*** 33,39 **** + u_int nb_dlevel = 0; /* nb_debug verbosity level */ + + void nbdb(char *, ...); +- void nbtrace(char *, ...); + + static int lookup(char *); + #ifdef USE_NB_ERRORHANDLER +--- 33,38 ---- +*************** +*** 100,124 **** + } /* end nbdebug_log_init */ + + +- +- +- void +- nbtrace( +- char *fmt, +- ...) +- { +- va_list ap; +- +- if (nb_debug!= NULL && (nb_dlevel & (NB_TRACE | NB_TRACE_VERBOSE))) { +- va_start(ap, fmt); +- vfprintf(nb_debug, fmt, ap); +- va_end(ap); +- fflush(nb_debug); +- } +- +- } /* end nbtrace */ +- +- + void + nbdbg( + char *fmt, +--- 99,104 ---- +*************** +*** 136,158 **** + } /* end nbdbg */ + + +- void +- nbprt( +- char *fmt, +- ...) +- { +- va_list ap; +- +- if (nb_debug != NULL && nb_dlevel & NB_PRINT) { +- va_start(ap, fmt); +- vfprintf(nb_debug, fmt, ap); +- va_end(ap); +- fflush(nb_debug); +- } +- +- } /* end nbprt */ +- +- + static int + lookup( + char *file) +--- 116,121 ---- +*** ../vim-7.2.114/src/nbdebug.h Wed Jun 25 00:47:21 2008 +--- src/nbdebug.h Tue Feb 17 03:26:38 2009 +*************** +*** 43,50 **** + + + void nbdbg(char *, ...); +- void nbprt(char *, ...); +- void nbtrace(char *, ...); + + void nbdebug_wait __ARGS((u_int wait_flags, char *wait_var, u_int wait_secs)); + void nbdebug_log_init __ARGS((char *log_var, char *level_var)); +--- 43,48 ---- +*************** +*** 70,88 **** + { + } + +- void +- nbprt( +- char *fmt, +- ...) +- { +- } +- +- void +- nbtrace( +- char *fmt, +- ...) +- { +- } +- + #endif /* NBDEBUG */ + #endif /* NBDEBUG_H */ +--- 68,72 ---- +*** ../vim-7.2.114/src/version.c Sat Feb 21 22:12:43 2009 +--- src/version.c Sat Feb 21 22:28:21 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 115, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +105. When someone asks you for your address, you tell them your URL. + + /// 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/7.2.116 b/7.2.116 new file mode 100644 index 00000000..edd2bd14 --- /dev/null +++ b/7.2.116 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.116 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.116 +Problem: Not all memory is freed when EXITFREE is defined. +Solution: Free allocated memory on exit. (Dominique Pelle) +Files: src/ex_docmd.c, src/gui_gtk_x11.c, src/misc2.c, src/search.c, + src/tag.c + + +*** ../vim-7.2.115/src/tag.c Tue Jan 13 17:27:18 2009 +--- src/tag.c Tue Feb 17 03:43:32 2009 +*************** +*** 2542,2547 **** +--- 2542,2556 ---- + { + ga_clear_strings(&tag_fnames); + do_tag(NULL, DT_FREE, 0, 0, 0); ++ tag_freematch(); ++ ++ # if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) ++ if (ptag_entry.tagname) ++ { ++ vim_free(ptag_entry.tagname); ++ ptag_entry.tagname = NULL; ++ } ++ # endif + } + #endif + +*** ../vim-7.2.115/src/version.c Sat Feb 21 22:29:12 2009 +--- src/version.c Sat Feb 21 22:56:14 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 116, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +106. When told to "go to your room" you inform your parents that you + can't...because you were kicked out and banned. + + /// 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/7.2.117 b/7.2.117 new file mode 100644 index 00000000..4c4e66a0 --- /dev/null +++ b/7.2.117 @@ -0,0 +1,107 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.117 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.117 +Problem: Location list incorrectly labelled "Quickfix List". +Solution: Break out of both loops for finding window for location list + buffer. (Lech Lorens) +Files: src/buffer.c, src/quickfix.c, src/screen.c + + +*** ../vim-7.2.116/src/buffer.c Tue Jan 6 16:13:42 2009 +--- src/buffer.c Tue Feb 17 04:00:51 2009 +*************** +*** 5098,5104 **** + */ + FOR_ALL_TAB_WINDOWS(tp, win) + if (win->w_buffer == buf) +! break; + if (win != NULL && win->w_llist_ref != NULL) + return _("[Location List]"); + else +--- 5098,5105 ---- + */ + FOR_ALL_TAB_WINDOWS(tp, win) + if (win->w_buffer == buf) +! goto win_found; +! win_found: + if (win != NULL && win->w_llist_ref != NULL) + return _("[Location List]"); + else +*** ../vim-7.2.116/src/quickfix.c Sat Nov 15 14:10:23 2008 +--- src/quickfix.c Sat Feb 21 22:54:25 2009 +*************** +*** 1610,1619 **** + { + goto_tabpage_win(tp, wp); + usable_win = 1; +! break; + } + } + } + + /* + * If there is only one window and it is the quickfix window, create a +--- 1612,1622 ---- + { + goto_tabpage_win(tp, wp); + usable_win = 1; +! goto win_found; + } + } + } ++ win_found: + + /* + * If there is only one window and it is the quickfix window, create a +*** ../vim-7.2.116/src/screen.c Sat Feb 21 21:22:44 2009 +--- src/screen.c Sat Feb 21 21:04:19 2009 +*************** +*** 7452,7461 **** + { + outofmem = TRUE; + #ifdef FEAT_WINDOWS +! break; + #endif + } + } + + #ifdef FEAT_MBYTE + for (i = 0; i < p_mco; ++i) +--- 7452,7464 ---- + { + outofmem = TRUE; + #ifdef FEAT_WINDOWS +! goto give_up; + #endif + } + } ++ #ifdef FEAT_WINDOWS ++ give_up: ++ #endif + + #ifdef FEAT_MBYTE + for (i = 0; i < p_mco; ++i) +*** ../vim-7.2.116/src/version.c Sat Feb 21 22:57:10 2009 +--- src/version.c Sat Feb 21 23:58:24 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 117, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.118 b/7.2.118 new file mode 100644 index 00000000..73b6cbbb --- /dev/null +++ b/7.2.118 @@ -0,0 +1,78 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.118 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.118 +Problem: at the more prompt only does half a page. +Solution: Make go up a whole page. Also make 'f' go a page + forward, but not quit the more prompt. (Markus Heidelberg) +Files: src/message.c + + +*** ../vim-7.2.117/src/message.c Wed Feb 11 18:46:48 2009 +--- src/message.c Fri Feb 20 05:20:15 2009 +*************** +*** 976,982 **** + } + } + else if (msg_scrolled > Rows - 2 +! && (c == 'j' || c == K_DOWN || c == 'd')) + c = K_IGNORE; + } + } while ((had_got_int && c == Ctrl_C) +--- 976,982 ---- + } + } + else if (msg_scrolled > Rows - 2 +! && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f')) + c = K_IGNORE; + } + } while ((had_got_int && c == Ctrl_C) +*************** +*** 2504,2510 **** + break; + + case 'u': /* Up half a page */ +- case K_PAGEUP: + scroll = -(Rows / 2); + break; + +--- 2504,2509 ---- +*************** +*** 2513,2522 **** +--- 2512,2523 ---- + break; + + case 'b': /* one page back */ ++ case K_PAGEUP: + scroll = -(Rows - 1); + break; + + case ' ': /* one extra page */ ++ case 'f': + case K_PAGEDOWN: + case K_LEFTMOUSE: + scroll = Rows - 1; +*** ../vim-7.2.117/src/version.c Sun Feb 22 00:01:42 2009 +--- src/version.c Sun Feb 22 00:57:16 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 118, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.119 b/7.2.119 new file mode 100644 index 00000000..f31f2e66 --- /dev/null +++ b/7.2.119 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.119 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.119 +Problem: Status line is redrawn too often. +Solution: Check ScreeenLinesUC[] properly. (Yukihiro Nakadaira) +Files: src/screen.c + + +*** ../vim-7.2.118/src/screen.c Sun Feb 22 00:01:42 2009 +--- src/screen.c Sun Feb 22 01:07:38 2009 +*************** +*** 6362,6368 **** + && c == 0x8e + && ScreenLines2[off] != ptr[1]) + || (enc_utf8 +! && (ScreenLinesUC[off] != (u8char_T)u8c + || screen_comp_differs(off, u8cc))) + #endif + || ScreenAttrs[off] != attr +--- 6362,6368 ---- + && c == 0x8e + && ScreenLines2[off] != ptr[1]) + || (enc_utf8 +! && (ScreenLinesUC[off] != (u8char_T)(c >= 0x80 ? u8c : 0) + || screen_comp_differs(off, u8cc))) + #endif + || ScreenAttrs[off] != attr +*** ../vim-7.2.118/src/version.c Sun Feb 22 00:58:03 2009 +--- src/version.c Sun Feb 22 01:09:54 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 119, + /**/ + +-- +In a world without walls and borders, who needs windows and gates? + + /// 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/7.2.120 b/7.2.120 new file mode 100644 index 00000000..cf687f3e --- /dev/null +++ b/7.2.120 @@ -0,0 +1,277 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.120 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.120 +Problem: When opening the quickfix window or splitting the window and + setting the location list, the location list is copied and then + deleted, which is inefficient. +Solution: Don't copy the location list when not needed. (Lech Lorens) +Files: src/quickfix.c, src/vim.h, src/window.c + + +*** ../vim-7.2.119/src/quickfix.c Sun Feb 22 00:01:42 2009 +--- src/quickfix.c Sat Feb 21 22:54:25 2009 +*************** +*** 1419,1424 **** +--- 1419,1425 ---- + int opened_window = FALSE; + win_T *win; + win_T *altwin; ++ int flags; + #endif + win_T *oldwin = curwin; + int print_message = TRUE; +*************** +*** 1531,1537 **** + if (qf_ptr->qf_type == 1 && (!curwin->w_buffer->b_help || cmdmod.tab != 0)) + { + win_T *wp; +- int n; + + if (cmdmod.tab != 0) + wp = NULL; +--- 1532,1537 ---- +*************** +*** 1547,1559 **** + * Split off help window; put it at far top if no position + * specified, the current window is vertically split and narrow. + */ +! n = WSP_HELP; + # ifdef FEAT_VERTSPLIT + if (cmdmod.split == 0 && curwin->w_width != Columns + && curwin->w_width < 80) +! n |= WSP_TOP; + # endif +! if (win_split(0, n) == FAIL) + goto theend; + opened_window = TRUE; /* close it when fail */ + +--- 1547,1562 ---- + * Split off help window; put it at far top if no position + * specified, the current window is vertically split and narrow. + */ +! flags = WSP_HELP; + # ifdef FEAT_VERTSPLIT + if (cmdmod.split == 0 && curwin->w_width != Columns + && curwin->w_width < 80) +! flags |= WSP_TOP; + # endif +! if (qi != &ql_info) +! flags |= WSP_NEWLOC; /* don't copy the location list */ +! +! if (win_split(0, flags) == FAIL) + goto theend; + opened_window = TRUE; /* close it when fail */ + +*************** +*** 1563,1569 **** + if (qi != &ql_info) /* not a quickfix list */ + { + /* The new window should use the supplied location list */ +- qf_free_all(curwin); + curwin->w_llist = qi; + qi->qf_refcount++; + } +--- 1566,1571 ---- +*************** +*** 1624,1630 **** + { + ll_ref = curwin->w_llist_ref; + +! if (win_split(0, WSP_ABOVE) == FAIL) + goto failed; /* not enough room for window */ + opened_window = TRUE; /* close it when fail */ + p_swb = empty_option; /* don't split again */ +--- 1626,1635 ---- + { + ll_ref = curwin->w_llist_ref; + +! flags = WSP_ABOVE; +! if (ll_ref != NULL) +! flags |= WSP_NEWLOC; +! if (win_split(0, flags) == FAIL) + goto failed; /* not enough room for window */ + opened_window = TRUE; /* close it when fail */ + p_swb = empty_option; /* don't split again */ +*************** +*** 1636,1642 **** + { + /* The new window should use the location list from the + * location list window */ +- qf_free_all(curwin); + curwin->w_llist = ll_ref; + ll_ref->qf_refcount++; + } +--- 1641,1646 ---- +*************** +*** 2311,2325 **** + if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow) + /* Create the new window at the very bottom. */ + win_goto(lastwin); +! if (win_split(height, WSP_BELOW) == FAIL) + return; /* not enough room for window */ + #ifdef FEAT_SCROLLBIND + curwin->w_p_scb = FALSE; + #endif + +- /* Remove the location list for the quickfix window */ +- qf_free_all(curwin); +- + if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) + { + /* +--- 2315,2326 ---- + if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow) + /* Create the new window at the very bottom. */ + win_goto(lastwin); +! if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL) + return; /* not enough room for window */ + #ifdef FEAT_SCROLLBIND + curwin->w_p_scb = FALSE; + #endif + + if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) + { + /* +*** ../vim-7.2.119/src/vim.h Thu Nov 20 14:11:47 2008 +--- src/vim.h Sat Feb 21 22:53:03 2009 +*************** +*** 1057,1062 **** +--- 1057,1063 ---- + #define WSP_HELP 16 /* creating the help window */ + #define WSP_BELOW 32 /* put new window below/right */ + #define WSP_ABOVE 64 /* put new window above/left */ ++ #define WSP_NEWLOC 128 /* don't copy location list */ + + /* + * arguments for gui_set_shellsize() +*** ../vim-7.2.119/src/window.c Sat Feb 21 20:27:00 2009 +--- src/window.c Sat Feb 21 23:56:41 2009 +*************** +*** 12,18 **** + static int path_is_url __ARGS((char_u *p)); + #if defined(FEAT_WINDOWS) || defined(PROTO) + static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir)); +! static void win_init __ARGS((win_T *newp, win_T *oldp)); + static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col)); + static void frame_setheight __ARGS((frame_T *curfrp, int height)); + #ifdef FEAT_VERTSPLIT +--- 12,18 ---- + static int path_is_url __ARGS((char_u *p)); + #if defined(FEAT_WINDOWS) || defined(PROTO) + static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir)); +! static void win_init __ARGS((win_T *newp, win_T *oldp, int flags)); + static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col)); + static void frame_setheight __ARGS((frame_T *curfrp, int height)); + #ifdef FEAT_VERTSPLIT +*************** +*** 911,917 **** + return FAIL; + + /* make the contents of the new window the same as the current one */ +! win_init(wp, curwin); + } + + /* +--- 911,917 ---- + return FAIL; + + /* make the contents of the new window the same as the current one */ +! win_init(wp, curwin, flags); + } + + /* +*************** +*** 1160,1170 **** + * Initialize window "newp" from window "oldp". + * Used when splitting a window and when creating a new tab page. + * The windows will both edit the same buffer. + */ + static void +! win_init(newp, oldp) + win_T *newp; + win_T *oldp; + { + int i; + +--- 1160,1174 ---- + * Initialize window "newp" from window "oldp". + * Used when splitting a window and when creating a new tab page. + * The windows will both edit the same buffer. ++ * WSP_NEWLOC may be specified in flags to prevent the location list from ++ * being copied. + */ ++ /*ARGSUSED*/ + static void +! win_init(newp, oldp, flags) + win_T *newp; + win_T *oldp; ++ int flags; + { + int i; + +*************** +*** 1189,1195 **** + copy_jumplist(oldp, newp); + #endif + #ifdef FEAT_QUICKFIX +! copy_loclist(oldp, newp); + #endif + if (oldp->w_localdir != NULL) + newp->w_localdir = vim_strsave(oldp->w_localdir); +--- 1193,1206 ---- + copy_jumplist(oldp, newp); + #endif + #ifdef FEAT_QUICKFIX +! if (flags & WSP_NEWLOC) +! { +! /* Don't copy the location list. */ +! newp->w_llist = NULL; +! newp->w_llist_ref = NULL; +! } +! else +! copy_loclist(oldp, newp); + #endif + if (oldp->w_localdir != NULL) + newp->w_localdir = vim_strsave(oldp->w_localdir); +*************** +*** 3219,3225 **** + else + { + /* First window in new tab page, initialize it from "oldwin". */ +! win_init(curwin, oldwin); + + # ifdef FEAT_SCROLLBIND + /* We don't want scroll-binding in the first window. */ +--- 3230,3236 ---- + else + { + /* First window in new tab page, initialize it from "oldwin". */ +! win_init(curwin, oldwin, 0); + + # ifdef FEAT_SCROLLBIND + /* We don't want scroll-binding in the first window. */ +*** ../vim-7.2.119/src/version.c Sun Feb 22 01:13:45 2009 +--- src/version.c Sun Feb 22 02:32:14 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 120, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.121 b/7.2.121 new file mode 100644 index 00000000..ea5306f7 --- /dev/null +++ b/7.2.121 @@ -0,0 +1,180 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.121 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.121 +Problem: In gvim "!grep a *.c" spews out a lot of text that can't be + stopped with CTRL-C. +Solution: When looping to read and show text, do check for typed characters + every two seconds. +Files: src/os_unix.c + + +*** ../vim-7.2.120/src/os_unix.c Wed Feb 4 14:18:44 2009 +--- src/os_unix.c Sun Feb 22 00:54:05 2009 +*************** +*** 4092,4097 **** +--- 4092,4100 ---- + int fromshell_fd; + garray_T ga; + int noread_cnt; ++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) ++ struct timeval start_tv; ++ # endif + + # ifdef FEAT_GUI + if (pty_master_fd >= 0) +*************** +*** 4201,4207 **** + ga_init2(&ga, 1, BUFLEN); + + noread_cnt = 0; +! + for (;;) + { + /* +--- 4204,4212 ---- + ga_init2(&ga, 1, BUFLEN); + + noread_cnt = 0; +! # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) +! gettimeofday(&start_tv, NULL); +! # endif + for (;;) + { + /* +*************** +*** 4214,4238 **** + * that a typed password is echoed for ssh or gpg command. + * Don't get characters when the child has already + * finished (wait_pid == 0). +- * Don't get extra characters when we already have one. + * Don't read characters unless we didn't get output for a +! * while, avoids that ":r !ls" eats typeahead. + */ + len = 0; + if (!(options & SHELL_EXPAND) + && ((options & + (SHELL_READ|SHELL_WRITE|SHELL_COOKED)) + != (SHELL_READ|SHELL_WRITE|SHELL_COOKED) +! #ifdef FEAT_GUI + || gui.in_use +! #endif + ) + && wait_pid == 0 +! && (ta_len > 0 +! || (noread_cnt > 4 +! && (len = ui_inchar(ta_buf, +! BUFLEN, 10L, 0)) > 0))) + { + /* + * For pipes: + * Check for CTRL-C: send interrupt signal to child. +--- 4219,4252 ---- + * that a typed password is echoed for ssh or gpg command. + * Don't get characters when the child has already + * finished (wait_pid == 0). + * Don't read characters unless we didn't get output for a +! * while (noread_cnt > 4), avoids that ":r !ls" eats +! * typeahead. + */ + len = 0; + if (!(options & SHELL_EXPAND) + && ((options & + (SHELL_READ|SHELL_WRITE|SHELL_COOKED)) + != (SHELL_READ|SHELL_WRITE|SHELL_COOKED) +! # ifdef FEAT_GUI + || gui.in_use +! # endif + ) + && wait_pid == 0 +! && (ta_len > 0 || noread_cnt > 4)) + { ++ if (ta_len == 0) ++ { ++ /* Get extra characters when we don't have any. ++ * Reset the counter and timer. */ ++ noread_cnt = 0; ++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) ++ gettimeofday(&start_tv, NULL); ++ # endif ++ len = ui_inchar(ta_buf, BUFLEN, 10L, 0); ++ } ++ if (ta_len > 0 || len > 0) ++ { + /* + * For pipes: + * Check for CTRL-C: send interrupt signal to child. +*************** +*** 4334,4342 **** + { + ta_len -= len; + mch_memmove(ta_buf, ta_buf + len, ta_len); +- noread_cnt = 0; + } + } + } + + if (got_int) +--- 4348,4356 ---- + { + ta_len -= len; + mch_memmove(ta_buf, ta_buf + len, ta_len); + } + } ++ } + } + + if (got_int) +*************** +*** 4444,4449 **** +--- 4458,4482 ---- + out_flush(); + if (got_int) + break; ++ ++ # if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H) ++ { ++ struct timeval now_tv; ++ long msec; ++ ++ /* Avoid that we keep looping here without ++ * checking for a CTRL-C for a long time. Don't ++ * break out too often to avoid losing typeahead. */ ++ gettimeofday(&now_tv, NULL); ++ msec = (now_tv.tv_sec - start_tv.tv_sec) * 1000L ++ + (now_tv.tv_usec - start_tv.tv_usec) / 1000L; ++ if (msec > 2000) ++ { ++ noread_cnt = 5; ++ break; ++ } ++ } ++ # endif + } + + /* If we already detected the child has finished break the +*** ../vim-7.2.120/src/version.c Sun Feb 22 02:36:36 2009 +--- src/version.c Sun Feb 22 02:48:03 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 121, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +111. You and your friends get together regularly on IRC, even though + all of you live in the same city. + + /// 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/7.2.122 b/7.2.122 new file mode 100644 index 00000000..18f69898 --- /dev/null +++ b/7.2.122 @@ -0,0 +1,80 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.122 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.122 +Problem: Invalid memory access when the VimResized autocommand changes + 'columns' and/or 'lines'. +Solution: After VimResized check for changed values. (Dominique Pelle) +Files: src/screen.c + + +*** ../vim-7.2.121/src/screen.c Sun Feb 22 01:13:45 2009 +--- src/screen.c Sun Feb 22 01:07:38 2009 +*************** +*** 7368,7374 **** +--- 7368,7378 ---- + #endif + static int entered = FALSE; /* avoid recursiveness */ + static int done_outofmem_msg = FALSE; /* did outofmem message */ ++ #ifdef FEAT_AUTOCMD ++ int retry_count = 0; + ++ retry: ++ #endif + /* + * Allocation of the screen buffers is done only when the size changes and + * when Rows and Columns have been set and we have started doing full +*************** +*** 7643,7650 **** + --RedrawingDisabled; + + #ifdef FEAT_AUTOCMD +! if (starting == 0) + apply_autocmds(EVENT_VIMRESIZED, NULL, NULL, FALSE, curbuf); + #endif + } + +--- 7647,7663 ---- + --RedrawingDisabled; + + #ifdef FEAT_AUTOCMD +! /* +! * Do not apply autocommands more than 3 times to avoid an endless loop +! * in case applying autocommands always changes Rows or Columns. +! */ +! if (starting == 0 && ++retry_count <= 3) +! { + apply_autocmds(EVENT_VIMRESIZED, NULL, NULL, FALSE, curbuf); ++ /* In rare cases, autocommands may have altered Rows or Columns, ++ * jump back to check if we need to allocate the screen again. */ ++ goto retry; ++ } + #endif + } + +*** ../vim-7.2.121/src/version.c Sun Feb 22 02:51:37 2009 +--- src/version.c Sun Feb 22 21:11:14 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 122, + /**/ + +-- +FIXME and XXX are two common keywords used to mark broken or incomplete code +not only since XXX as a sex reference would grab everbodys attention but +simply due to the fact that Vim would highlight these words. + -- Hendrik Scholz + + /// 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/7.2.123 b/7.2.123 new file mode 100644 index 00000000..4cf9b810 --- /dev/null +++ b/7.2.123 @@ -0,0 +1,50 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.123 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.123 +Problem: Typing 'q' at more prompt for ":map" output still displays another + line, causing another more prompt. (Markus Heidelberg) +Solution: Quit listing maps when 'q' typed. +Files: src/getchar.c + + +*** ../vim-7.2.122/src/getchar.c Fri Nov 28 12:05:07 2008 +--- src/getchar.c Sun Feb 22 23:10:45 2009 +*************** +*** 3816,3822 **** +--- 3816,3826 ---- + int len = 1; + + if (msg_didout || msg_silent != 0) ++ { + msg_putchar('\n'); ++ if (got_int) /* 'q' typed at MORE prompt */ ++ return; ++ } + if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE) + msg_putchar('!'); /* :map! */ + else if (mp->m_mode & INSERT) +*** ../vim-7.2.122/src/version.c Sun Feb 22 21:12:22 2009 +--- src/version.c Sun Feb 22 23:16:29 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 123, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +120. You ask a friend, "What's that big shiny thing?" He says, "It's the sun." + + /// 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/7.2.124 b/7.2.124 new file mode 100644 index 00000000..eca6bec1 --- /dev/null +++ b/7.2.124 @@ -0,0 +1,122 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.124 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.124 +Problem: Typing 'q' at more prompt for ":tselect" output still displays + more lines, causing another more prompt. (Markus Heidelberg) +Solution: Quit listing tags when 'q' typed. +Files: src/tag.c + + +*** ../vim-7.2.123/src/tag.c Sat Feb 21 22:57:10 2009 +--- src/tag.c Mon Feb 23 00:07:24 2009 +*************** +*** 618,624 **** + taglen_advance(taglen); + MSG_PUTS_ATTR(_("file\n"), hl_attr(HLF_T)); + +! for (i = 0; i < num_matches; ++i) + { + parse_match(matches[i], &tagp); + if (!new_tag && ( +--- 618,624 ---- + taglen_advance(taglen); + MSG_PUTS_ATTR(_("file\n"), hl_attr(HLF_T)); + +! for (i = 0; i < num_matches && !got_int; ++i) + { + parse_match(matches[i], &tagp); + if (!new_tag && ( +*************** +*** 655,660 **** +--- 655,662 ---- + } + if (msg_col > 0) + msg_putchar('\n'); ++ if (got_int) ++ break; + msg_advance(15); + + /* print any extra fields */ +*************** +*** 689,694 **** +--- 691,698 ---- + if (msg_col + ptr2cells(p) >= Columns) + { + msg_putchar('\n'); ++ if (got_int) ++ break; + msg_advance(15); + } + p = msg_outtrans_one(p, attr); +*************** +*** 704,709 **** +--- 708,715 ---- + if (msg_col > 15) + { + msg_putchar('\n'); ++ if (got_int) ++ break; + msg_advance(15); + } + } +*************** +*** 734,739 **** +--- 740,747 ---- + { + if (msg_col + (*p == TAB ? 1 : ptr2cells(p)) > Columns) + msg_putchar('\n'); ++ if (got_int) ++ break; + msg_advance(15); + + /* skip backslash used for escaping command char */ +*************** +*** 760,771 **** + if (msg_col) + msg_putchar('\n'); + ui_breakcheck(); +- if (got_int) +- { +- got_int = FALSE; /* only stop the listing */ +- break; +- } + } + ask_for_selection = TRUE; + } + #if defined(FEAT_QUICKFIX) && defined(FEAT_EVAL) +--- 768,776 ---- + if (msg_col) + msg_putchar('\n'); + ui_breakcheck(); + } ++ if (got_int) ++ got_int = FALSE; /* only stop the listing */ + ask_for_selection = TRUE; + } + #if defined(FEAT_QUICKFIX) && defined(FEAT_EVAL) +*** ../vim-7.2.123/src/version.c Sun Feb 22 23:42:08 2009 +--- src/version.c Mon Feb 23 00:51:57 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 124, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +123. You ask the car dealer to install an extra cigarette lighter + on your new car to power your notebook. + + /// 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/7.2.125 b/7.2.125 new file mode 100644 index 00000000..460bdea5 --- /dev/null +++ b/7.2.125 @@ -0,0 +1,161 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.125 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.125 +Problem: Leaking memory when reading XPM bitmap for a sign. +Solution: Don't allocate the memory twice. (Dominique Pelle) +Files: src/gui_x11.c + + +*** ../vim-7.2.124/src/gui_x11.c Wed Nov 12 13:07:48 2008 +--- src/gui_x11.c Sun Feb 22 21:58:19 2009 +*************** +*** 1587,1592 **** +--- 1587,1594 ---- + XtCloseDisplay(gui.dpy); + gui.dpy = NULL; + vimShell = (Widget)0; ++ vim_free(gui_argv); ++ gui_argv = NULL; + } + + /* +*************** +*** 1761,1766 **** +--- 1763,1770 ---- + * says that this isn't needed when exiting, so just skip it. */ + XtCloseDisplay(gui.dpy); + #endif ++ vim_free(gui_argv); ++ gui_argv = NULL; + } + + /* +*************** +*** 3439,3485 **** + char_u *signfile; + { + XpmAttributes attrs; +! XImage *sign; + int status; + + /* + * Setup the color substitution table. + */ +- sign = NULL; + if (signfile[0] != NUL && signfile[0] != '-') + { +! sign = (XImage *)alloc(sizeof(XImage)); +! if (sign != NULL) + { +! XpmColorSymbol color[5] = +! { +! {"none", NULL, 0}, +! {"iconColor1", NULL, 0}, +! {"bottomShadowColor", NULL, 0}, +! {"topShadowColor", NULL, 0}, +! {"selectColor", NULL, 0} +! }; +! attrs.valuemask = XpmColorSymbols; +! attrs.numsymbols = 2; +! attrs.colorsymbols = color; +! attrs.colorsymbols[0].pixel = gui.back_pixel; +! attrs.colorsymbols[1].pixel = gui.norm_pixel; +! status = XpmReadFileToImage(gui.dpy, (char *)signfile, + &sign, NULL, &attrs); +! +! if (status == 0) +! { +! /* Sign width is fixed at two columns now. +! if (sign->width > gui.sign_width) +! gui.sign_width = sign->width + 8; */ +! } +! else +! { +! vim_free(sign); +! sign = NULL; +! EMSG(_(e_signdata)); +! } + } + } + + return (void *)sign; +--- 3443,3479 ---- + char_u *signfile; + { + XpmAttributes attrs; +! XImage *sign = NULL; + int status; + + /* + * Setup the color substitution table. + */ + if (signfile[0] != NUL && signfile[0] != '-') + { +! XpmColorSymbol color[5] = + { +! {"none", NULL, 0}, +! {"iconColor1", NULL, 0}, +! {"bottomShadowColor", NULL, 0}, +! {"topShadowColor", NULL, 0}, +! {"selectColor", NULL, 0} +! }; +! attrs.valuemask = XpmColorSymbols; +! attrs.numsymbols = 2; +! attrs.colorsymbols = color; +! attrs.colorsymbols[0].pixel = gui.back_pixel; +! attrs.colorsymbols[1].pixel = gui.norm_pixel; +! status = XpmReadFileToImage(gui.dpy, (char *)signfile, + &sign, NULL, &attrs); +! if (status == 0) +! { +! /* Sign width is fixed at two columns now. +! if (sign->width > gui.sign_width) +! gui.sign_width = sign->width + 8; */ + } ++ else ++ EMSG(_(e_signdata)); + } + + return (void *)sign; +*************** +*** 3489,3496 **** + gui_mch_destroy_sign(sign) + void *sign; + { +! XFree(((XImage *)sign)->data); +! vim_free(sign); + } + #endif + +--- 3483,3489 ---- + gui_mch_destroy_sign(sign) + void *sign; + { +! XDestroyImage((XImage*)sign); + } + #endif + +*** ../vim-7.2.124/src/version.c Mon Feb 23 00:53:35 2009 +--- src/version.c Tue Feb 24 04:09:33 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 125, + /**/ + +-- +I have a watch cat! Just break in and she'll watch. + + /// 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/7.2.126 b/7.2.126 new file mode 100644 index 00000000..fe2dd657 --- /dev/null +++ b/7.2.126 @@ -0,0 +1,174 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.126 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.126 +Problem: When EXITFREE is defined signs are not freed. +Solution: Free all signs on exit. Also free keymaps. (Dominique Pelle) +Files: src/misc2.c, src/ex_cmds.c, src/proto/ex_cmds.pro + + +*** ../vim-7.2.125/src/misc2.c Thu Jan 22 21:31:24 2009 +--- src/misc2.c Sun Feb 22 22:04:53 2009 +*************** +*** 1010,1015 **** +--- 1010,1018 ---- + # if defined(FEAT_PROFILE) + do_cmdline_cmd((char_u *)"profdel *"); + # endif ++ # if defined(FEAT_KEYMAP) ++ do_cmdline_cmd((char_u *)"set keymap="); ++ #endif + + # ifdef FEAT_TITLE + free_titles(); +*************** +*** 1034,1039 **** +--- 1037,1045 ---- + free_regexp_stuff(); + free_tag_stuff(); + free_cd_dir(); ++ # ifdef FEAT_SIGNS ++ free_signs(); ++ # endif + # ifdef FEAT_EVAL + set_expr_line(NULL); + # endif +*** ../vim-7.2.125/src/ex_cmds.c Wed Feb 11 16:02:29 2009 +--- src/ex_cmds.c Sun Feb 22 22:07:08 2009 +*************** +*** 6541,6546 **** +--- 6541,6547 ---- + static int last_sign_typenr = MAX_TYPENR; /* is decremented */ + + static void sign_list_defined __ARGS((sign_T *sp)); ++ static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev)); + + /* + * ":sign" command +*************** +*** 6749,6772 **** + /* ":sign list {name}" */ + sign_list_defined(sp); + else +- { + /* ":sign undefine {name}" */ +! vim_free(sp->sn_name); +! vim_free(sp->sn_icon); +! #ifdef FEAT_SIGN_ICONS +! if (sp->sn_image != NULL) +! { +! out_flush(); +! gui_mch_destroy_sign(sp->sn_image); +! } +! #endif +! vim_free(sp->sn_text); +! if (sp_prev == NULL) +! first_sign = sp->sn_next; +! else +! sp_prev->sn_next = sp->sn_next; +! vim_free(sp); +! } + } + } + else +--- 6750,6757 ---- + /* ":sign list {name}" */ + sign_list_defined(sp); + else + /* ":sign undefine {name}" */ +! sign_undefine(sp, sp_prev); + } + } + else +*************** +*** 7015,7020 **** +--- 7000,7030 ---- + } + + /* ++ * Undefine a sign and free its memory. ++ */ ++ static void ++ sign_undefine(sp, sp_prev) ++ sign_T *sp; ++ sign_T *sp_prev; ++ { ++ vim_free(sp->sn_name); ++ vim_free(sp->sn_icon); ++ #ifdef FEAT_SIGN_ICONS ++ if (sp->sn_image != NULL) ++ { ++ out_flush(); ++ gui_mch_destroy_sign(sp->sn_image); ++ } ++ #endif ++ vim_free(sp->sn_text); ++ if (sp_prev == NULL) ++ first_sign = sp->sn_next; ++ else ++ sp_prev->sn_next = sp->sn_next; ++ vim_free(sp); ++ } ++ ++ /* + * Get highlighting attribute for sign "typenr". + * If "line" is TRUE: line highl, if FALSE: text highl. + */ +*************** +*** 7088,7093 **** +--- 7098,7115 ---- + return (char_u *)_("[Deleted]"); + } + ++ #if defined(EXITFREE) || defined(PROTO) ++ /* ++ * Undefine/free all signs. ++ */ ++ void ++ free_signs() ++ { ++ while (first_sign != NULL) ++ sign_undefine(first_sign, NULL); ++ } ++ #endif ++ + #endif + + #if defined(FEAT_GUI) || defined(FEAT_CLIENTSERVER) || defined(PROTO) +*** ../vim-7.2.125/src/proto/ex_cmds.pro Sat Nov 15 14:10:23 2008 +--- src/proto/ex_cmds.pro Sun Feb 22 22:04:53 2009 +*************** +*** 40,45 **** +--- 40,46 ---- + int read_viminfo_sub_string __ARGS((vir_T *virp, int force)); + void write_viminfo_sub_string __ARGS((FILE *fp)); + void free_old_sub __ARGS((void)); ++ void free_signs __ARGS((void)); + int prepare_tagpreview __ARGS((int undo_sync)); + void ex_help __ARGS((exarg_T *eap)); + char_u *check_help_lang __ARGS((char_u *arg)); +*** ../vim-7.2.125/src/version.c Tue Feb 24 04:11:07 2009 +--- src/version.c Tue Feb 24 04:24:46 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 126, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.127 b/7.2.127 new file mode 100644 index 00000000..662fe0fa --- /dev/null +++ b/7.2.127 @@ -0,0 +1,59 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.127 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.127 +Problem: When listing mappings and a wrapping line causes the more prompt, + after typing 'q' there can be another more prompt. (Markus + Heidelberg) +Solution: Set "lines_left" to allow more lines to be displayed. +Files: src/message.c + + +*** ../vim-7.2.126/src/message.c Sun Feb 22 00:58:03 2009 +--- src/message.c Mon Feb 23 04:17:39 2009 +*************** +*** 2553,2559 **** + { + /* Jump to the choices of the dialog. */ + retval = TRUE; +- lines_left = Rows - 1; + } + else + #endif +--- 2553,2558 ---- +*************** +*** 2561,2566 **** +--- 2560,2568 ---- + got_int = TRUE; + quit_more = TRUE; + } ++ /* When there is some more output (wrapping line) display that ++ * without another prompt. */ ++ lines_left = Rows - 1; + break; + + #ifdef FEAT_CLIPBOARD +*** ../vim-7.2.126/src/version.c Tue Feb 24 04:28:40 2009 +--- src/version.c Tue Feb 24 04:35:38 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 127, + /**/ + +-- +The difference between theory and practice, is that in theory, there +is no difference between theory and practice. + + /// 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/7.2.128 b/7.2.128 new file mode 100644 index 00000000..0c17f185 --- /dev/null +++ b/7.2.128 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.128 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.128 (after 7.2.055) +Problem: Using ":lcd" makes session files not work. +Solution: Compare return value of mch_chdir() properly. (Andreas Bernauer) +Files: src/ex_docmd.c + + +*** ../vim-7.2.127/src/ex_docmd.c Sat Feb 21 20:36:30 2009 +--- src/ex_docmd.c Sun Mar 1 02:39:38 2009 +*************** +*** 8792,8798 **** + else if (*dirnow != NUL + && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) + { +! if (mch_chdir((char *)globaldir) == OK) + shorten_fnames(TRUE); + } + +--- 8799,8805 ---- + else if (*dirnow != NUL + && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) + { +! if (mch_chdir((char *)globaldir) == 0) + shorten_fnames(TRUE); + } + +*** ../vim-7.2.127/src/version.c Tue Feb 24 04:36:50 2009 +--- src/version.c Sun Mar 1 02:42:47 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 128, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.129 b/7.2.129 new file mode 100644 index 00000000..ca756cfa --- /dev/null +++ b/7.2.129 @@ -0,0 +1,73 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.129 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.129 +Problem: When opening a command window from input() it uses the search + history. +Solution: Use get_cmdline_type(). (James Vega) +Files: src/ex_getln.c + + +*** ../vim-7.2.128/src/ex_getln.c Fri Nov 28 10:59:57 2008 +--- src/ex_getln.c Mon Mar 2 00:53:39 2009 +*************** +*** 6047,6055 **** + # endif + return K_IGNORE; + } +! cmdwin_type = ccline.cmdfirstc; +! if (cmdwin_type == NUL) +! cmdwin_type = '-'; + + /* Create the command-line buffer empty. */ + (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL); +--- 6062,6068 ---- + # endif + return K_IGNORE; + } +! cmdwin_type = get_cmdline_type(); + + /* Create the command-line buffer empty. */ + (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL); +*************** +*** 6073,6079 **** + /* Showing the prompt may have set need_wait_return, reset it. */ + need_wait_return = FALSE; + +! histtype = hist_char2type(ccline.cmdfirstc); + if (histtype == HIST_CMD || histtype == HIST_DEBUG) + { + if (p_wc == TAB) +--- 6086,6092 ---- + /* Showing the prompt may have set need_wait_return, reset it. */ + need_wait_return = FALSE; + +! histtype = hist_char2type(cmdwin_type); + if (histtype == HIST_CMD || histtype == HIST_DEBUG) + { + if (p_wc == TAB) +*** ../vim-7.2.128/src/version.c Sun Mar 1 02:43:50 2009 +--- src/version.c Mon Mar 2 02:10:11 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 129, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +146. You experience ACTUAL physical withdrawal symptoms when away + from your 'puter and the net. + + /// 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/7.2.130 b/7.2.130 new file mode 100644 index 00000000..8d654682 --- /dev/null +++ b/7.2.130 @@ -0,0 +1,413 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.130 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.130 +Problem: Vim may haing until CTRL-C is typed when using CTRL-Z. +Solution: Avoid using pause(). Also use "volatile" for variables used in + signal functions. (Dominique Pelle) +Files: src/auto/configure, src/configure.in, src/config.h.in, + src/globals.h, src/os_unix.c + + +*** ../vim-7.2.129/src/auto/configure Thu Nov 20 10:36:04 2008 +--- src/auto/configure Mon Mar 2 02:36:52 2009 +*************** +*** 11565,11570 **** +--- 11565,11631 ---- + + fi + ++ { $as_echo "$as_me:$LINENO: checking for working volatile" >&5 ++ $as_echo_n "checking for working volatile... " >&6; } ++ if test "${ac_cv_c_volatile+set}" = set; then ++ $as_echo_n "(cached) " >&6 ++ else ++ cat >conftest.$ac_ext <<_ACEOF ++ /* confdefs.h. */ ++ _ACEOF ++ cat confdefs.h >>conftest.$ac_ext ++ cat >>conftest.$ac_ext <<_ACEOF ++ /* end confdefs.h. */ ++ ++ int ++ main () ++ { ++ ++ volatile int x; ++ int * volatile y = (int *) 0; ++ return !x && !y; ++ ; ++ return 0; ++ } ++ _ACEOF ++ rm -f conftest.$ac_objext ++ if { (ac_try="$ac_compile" ++ case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++ esac ++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++ $as_echo "$ac_try_echo") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_volatile=yes ++ else ++ $as_echo "$as_me: failed program was:" >&5 ++ sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_cv_c_volatile=no ++ fi ++ ++ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ fi ++ { $as_echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 ++ $as_echo "$ac_cv_c_volatile" >&6; } ++ if test $ac_cv_c_volatile = no; then ++ ++ cat >>confdefs.h <<\_ACEOF ++ #define volatile /**/ ++ _ACEOF ++ ++ fi ++ + { $as_echo "$as_me:$LINENO: checking for mode_t" >&5 + $as_echo_n "checking for mode_t... " >&6; } + if test "${ac_cv_type_mode_t+set}" = set; then +*** ../vim-7.2.129/src/configure.in Thu Nov 20 10:36:04 2008 +--- src/configure.in Sun Feb 22 21:47:44 2009 +*************** +*** 2148,2153 **** +--- 2148,2154 ---- + dnl Checks for typedefs, structures, and compiler characteristics. + AC_PROG_GCC_TRADITIONAL + AC_C_CONST ++ AC_C_VOLATILE + AC_TYPE_MODE_T + AC_TYPE_OFF_T + AC_TYPE_PID_T +*** ../vim-7.2.129/src/config.h.in Tue Jun 24 23:47:46 2008 +--- src/config.h.in Mon Feb 23 00:13:17 2009 +*************** +*** 50,55 **** +--- 50,58 ---- + /* Define to empty if the keyword does not work. */ + #undef const + ++ /* Define to empty if the keyword does not work. */ ++ #undef volatile ++ + /* Define to `int' if doesn't define. */ + #undef mode_t + +*** ../vim-7.2.129/src/globals.h Tue Jan 6 16:13:42 2009 +--- src/globals.h Mon Mar 2 02:40:16 2009 +*************** +*** 482,489 **** + /* + * While executing external commands or in Ex mode, should not insert GUI + * events in the input buffer: Set hold_gui_events to non-zero. + */ +! EXTERN int hold_gui_events INIT(= 0); + + /* + * When resizing the shell is postponed, remember the new size, and call +--- 482,491 ---- + /* + * While executing external commands or in Ex mode, should not insert GUI + * events in the input buffer: Set hold_gui_events to non-zero. ++ * ++ * volatile because it is used in signal handler sig_sysmouse(). + */ +! EXTERN volatile int hold_gui_events INIT(= 0); + + /* + * When resizing the shell is postponed, remember the new size, and call +*************** +*** 597,603 **** + EXTERN int really_exiting INIT(= FALSE); + /* TRUE when we are sure to exit, e.g., after + * a deadly signal */ +! EXTERN int full_screen INIT(= FALSE); + /* TRUE when doing full-screen output + * otherwise only writing some messages */ + +--- 599,606 ---- + EXTERN int really_exiting INIT(= FALSE); + /* TRUE when we are sure to exit, e.g., after + * a deadly signal */ +! /* volatile because it is used in signal handler deathtrap(). */ +! EXTERN volatile int full_screen INIT(= FALSE); + /* TRUE when doing full-screen output + * otherwise only writing some messages */ + +*************** +*** 739,748 **** + */ + EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */ + # ifdef SIGHASARG +! EXTERN int lc_signal; /* catched signal number, 0 when no was signal +! catched; used for mch_libcall() */ + # endif +! EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */ + #endif + + #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT) +--- 747,758 ---- + */ + EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */ + # ifdef SIGHASARG +! /* volatile because it is used in signal handlers. */ +! EXTERN volatile int lc_signal; /* caught signal number, 0 when no was signal +! caught; used for mch_libcall() */ + # endif +! /* volatile because it is used in signal handler deathtrap(). */ +! EXTERN volatile int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */ + #endif + + #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT) +*************** +*** 986,992 **** + EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */ + EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */ + +! EXTERN int got_int INIT(= FALSE); /* set to TRUE when interrupt + signal occurred */ + #ifdef USE_TERM_CONSOLE + EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */ +--- 996,1003 ---- + EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */ + EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */ + +! /* volatile because it is used in signal handler catch_sigint(). */ +! EXTERN volatile int got_int INIT(= FALSE); /* set to TRUE when interrupt + signal occurred */ + #ifdef USE_TERM_CONSOLE + EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */ +*** ../vim-7.2.129/src/os_unix.c Sun Feb 22 02:51:37 2009 +--- src/os_unix.c Mon Mar 2 01:05:50 2009 +*************** +*** 181,187 **** + && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK) + # define SET_SIG_ALARM + static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG); +! static int sig_alarm_called; + #endif + static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG); + +--- 181,188 ---- + && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK) + # define SET_SIG_ALARM + static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG); +! /* volatile because it is used in signal handler sig_alarm(). */ +! static volatile int sig_alarm_called; + #endif + static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG); + +*************** +*** 201,213 **** + # define SIG_ERR ((RETSIGTYPE (*)())-1) + #endif + +! static int do_resize = FALSE; + #ifndef __EMX__ + static char_u *extra_shell_arg = NULL; + static int show_shell_mess = TRUE; + #endif +! static int deadly_signal = 0; /* The signal we caught */ +! static int in_mch_delay = FALSE; /* sleeping in mch_delay() */ + + static int curr_tmode = TMODE_COOK; /* contains current terminal mode */ + +--- 202,217 ---- + # define SIG_ERR ((RETSIGTYPE (*)())-1) + #endif + +! /* volatile because it is used in signal handler sig_winch(). */ +! static volatile int do_resize = FALSE; + #ifndef __EMX__ + static char_u *extra_shell_arg = NULL; + static int show_shell_mess = TRUE; + #endif +! /* volatile because it is used in signal handler deathtrap(). */ +! static volatile int deadly_signal = 0; /* The signal we caught */ +! /* volatile because it is used in signal handler deathtrap(). */ +! static volatile int in_mch_delay = FALSE; /* sleeping in mch_delay() */ + + static int curr_tmode = TMODE_COOK; /* contains current terminal mode */ + +*************** +*** 802,808 **** + #endif + + /* +! * We need correct potatotypes for a signal function, otherwise mean compilers + * will barf when the second argument to signal() is ``wrong''. + * Let me try it with a few tricky defines from my own osdef.h (jw). + */ +--- 806,812 ---- + #endif + + /* +! * We need correct prototypes for a signal function, otherwise mean compilers + * will barf when the second argument to signal() is ``wrong''. + * Let me try it with a few tricky defines from my own osdef.h (jw). + */ +*************** +*** 1068,1080 **** + SIGRETURN; + } + +! #ifdef _REENTRANT + /* + * On Solaris with multi-threading, suspending might not work immediately. + * Catch the SIGCONT signal, which will be used as an indication whether the + * suspending has been done or not. + */ +! static int sigcont_received; + static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG); + + /* +--- 1072,1089 ---- + SIGRETURN; + } + +! #if defined(_REENTRANT) && defined(SIGCONT) + /* + * On Solaris with multi-threading, suspending might not work immediately. + * Catch the SIGCONT signal, which will be used as an indication whether the + * suspending has been done or not. ++ * ++ * On Linux, signal is not always handled immediately either. ++ * See https://bugs.launchpad.net/bugs/291373 ++ * ++ * volatile because it is used in in signal handler sigcont_handler(). + */ +! static volatile int sigcont_received; + static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG); + + /* +*************** +*** 1118,1132 **** + } + # endif + +! # ifdef _REENTRANT + sigcont_received = FALSE; + # endif + kill(0, SIGTSTP); /* send ourselves a STOP signal */ +! # ifdef _REENTRANT +! /* When we didn't suspend immediately in the kill(), do it now. Happens +! * on multi-threaded Solaris. */ +! if (!sigcont_received) +! pause(); + # endif + + # ifdef FEAT_TITLE +--- 1127,1154 ---- + } + # endif + +! # if defined(_REENTRANT) && defined(SIGCONT) + sigcont_received = FALSE; + # endif + kill(0, SIGTSTP); /* send ourselves a STOP signal */ +! # if defined(_REENTRANT) && defined(SIGCONT) +! /* +! * Wait for the SIGCONT signal to be handled. It generally happens +! * immediately, but somehow not all the time. Do not call pause() +! * because there would be race condition which would hang Vim if +! * signal happened in between the test of sigcont_received and the +! * call to pause(). If signal is not yet received, call sleep(0) +! * to just yield CPU. Signal should then be received. If somehow +! * it's still not received, sleep 1, 2, 3 ms. Don't bother waiting +! * further if signal is not received after 1+2+3+4 ms (not expected +! * to happen). +! */ +! { +! long wait; +! for (wait = 0; !sigcont_received && wait <= 3L; wait++) +! /* Loop is not entered most of the time */ +! mch_delay(wait, FALSE); +! } + # endif + + # ifdef FEAT_TITLE +*************** +*** 1175,1181 **** + #ifdef SIGTSTP + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); + #endif +! #ifdef _REENTRANT + signal(SIGCONT, sigcont_handler); + #endif + +--- 1197,1203 ---- + #ifdef SIGTSTP + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); + #endif +! #if defined(_REENTRANT) && defined(SIGCONT) + signal(SIGCONT, sigcont_handler); + #endif + +*************** +*** 1234,1240 **** + reset_signals() + { + catch_signals(SIG_DFL, SIG_DFL); +! #ifdef _REENTRANT + /* SIGCONT isn't in the list, because its default action is ignore */ + signal(SIGCONT, SIG_DFL); + #endif +--- 1256,1262 ---- + reset_signals() + { + catch_signals(SIG_DFL, SIG_DFL); +! #if defined(_REENTRANT) && defined(SIGCONT) + /* SIGCONT isn't in the list, because its default action is ignore */ + signal(SIGCONT, SIG_DFL); + #endif +*************** +*** 5899,5905 **** +--- 5921,5929 ---- + * we are going to suspend or starting an external process + * so we shouldn't have problem with this + */ ++ # ifdef SIGTSTP + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); ++ # endif + return 1; /* succeed */ + } + if (gpm_fd == -2) +*** ../vim-7.2.129/src/version.c Mon Mar 2 02:11:09 2009 +--- src/version.c Mon Mar 2 02:36:00 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 130, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +148. You find it easier to dial-up the National Weather Service + Weather/your_town/now.html than to simply look out the window. + + /// 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/7.2.131 b/7.2.131 new file mode 100644 index 00000000..fec2b5e1 --- /dev/null +++ b/7.2.131 @@ -0,0 +1,83 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.131 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.131 +Problem: When 'keymap' is cleared may still use the cursor highlighting for + when it's enabled. +Solution: Reset 'iminsert' and 'imsearch'. (partly by Dominique Pelle) + Also avoid ":setlocal" for these options have a global effect. +Files: src/option.c + + +*** ../vim-7.2.130/src/option.c Sat Feb 21 20:27:00 2009 +--- src/option.c Wed Mar 4 04:09:51 2009 +*************** +*** 5797,5810 **** + /* load or unload key mapping tables */ + errmsg = keymap_init(); + +! /* When successfully installed a new keymap switch on using it. */ +! if (*curbuf->b_p_keymap != NUL && errmsg == NULL) + { +! curbuf->b_p_iminsert = B_IMODE_LMAP; +! if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT) +! curbuf->b_p_imsearch = B_IMODE_LMAP; +! set_iminsert_global(); +! set_imsearch_global(); + # ifdef FEAT_WINDOWS + status_redraw_curbuf(); + # endif +--- 5797,5824 ---- + /* load or unload key mapping tables */ + errmsg = keymap_init(); + +! if (errmsg == NULL) + { +! if (*curbuf->b_p_keymap != NUL) +! { +! /* Installed a new keymap, switch on using it. */ +! curbuf->b_p_iminsert = B_IMODE_LMAP; +! if (curbuf->b_p_imsearch != B_IMODE_USE_INSERT) +! curbuf->b_p_imsearch = B_IMODE_LMAP; +! } +! else +! { +! /* Cleared the keymap, may reset 'iminsert' and 'imsearch'. */ +! if (curbuf->b_p_iminsert == B_IMODE_LMAP) +! curbuf->b_p_iminsert = B_IMODE_NONE; +! if (curbuf->b_p_imsearch == B_IMODE_LMAP) +! curbuf->b_p_imsearch = B_IMODE_USE_INSERT; +! } +! if ((opt_flags & OPT_LOCAL) == 0) +! { +! set_iminsert_global(); +! set_imsearch_global(); +! } + # ifdef FEAT_WINDOWS + status_redraw_curbuf(); + # endif +*** ../vim-7.2.130/src/version.c Mon Mar 2 02:44:54 2009 +--- src/version.c Wed Mar 4 04:10:32 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 131, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +157. You fum through a magazine, you first check to see if it has a web + address. + + /// 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/7.2.132 b/7.2.132 new file mode 100644 index 00000000..69e19ee4 --- /dev/null +++ b/7.2.132 @@ -0,0 +1,268 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.132 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.132 +Problem: When changing directory during a SwapExists autocmd freed memory + may be accessed. (Dominique Pelle) +Solution: Add the allbuf_lock flag. +Files: src/ex_getln.c, src/globals.h, src/fileio.c, + src/proto/ex_getln.pro + + +*** ../vim-7.2.131/src/ex_getln.c Mon Mar 2 02:11:09 2009 +--- src/ex_getln.c Mon Mar 2 00:53:39 2009 +*************** +*** 2000,2007 **** + + #if defined(FEAT_AUTOCMD) || defined(PROTO) + /* +! * Check if "curbuf_lock" is set and return TRUE when it is and give an error +! * message. + */ + int + curbuf_locked() +--- 2000,2007 ---- + + #if defined(FEAT_AUTOCMD) || defined(PROTO) + /* +! * Check if "curbuf_lock" or "allbuf_lock" is set and return TRUE when it is +! * and give an error message. + */ + int + curbuf_locked() +*************** +*** 2011,2016 **** +--- 2011,2031 ---- + EMSG(_("E788: Not allowed to edit another buffer now")); + return TRUE; + } ++ return allbuf_locked(); ++ } ++ ++ /* ++ * Check if "allbuf_lock" is set and return TRUE when it is and give an error ++ * message. ++ */ ++ int ++ allbuf_locked() ++ { ++ if (allbuf_lock > 0) ++ { ++ EMSG(_("E811: Not allowed to change buffer information now")); ++ return TRUE; ++ } + return FALSE; + } + #endif +*** ../vim-7.2.131/src/globals.h Mon Mar 2 02:44:54 2009 +--- src/globals.h Mon Mar 2 02:40:16 2009 +*************** +*** 619,624 **** +--- 619,629 ---- + EXTERN int curbuf_lock INIT(= 0); + /* non-zero when the current buffer can't be + * changed. Used for FileChangedRO. */ ++ EXTERN int allbuf_lock INIT(= 0); ++ /* non-zero when no buffer name can be ++ * changed, no buffer can be deleted and ++ * current directory can't be changed. ++ * Used for SwapExists et al. */ + #endif + #ifdef FEAT_EVAL + # define HAVE_SANDBOX +*** ../vim-7.2.131/src/fileio.c Wed Dec 31 16:20:54 2008 +--- src/fileio.c Sun Mar 1 23:37:10 2009 +*************** +*** 69,75 **** + static int au_find_group __ARGS((char_u *name)); + + # define AUGROUP_DEFAULT -1 /* default autocmd group */ +! # define AUGROUP_ERROR -2 /* errornouse autocmd group */ + # define AUGROUP_ALL -3 /* all autocmd groups */ + #endif + +--- 69,75 ---- + static int au_find_group __ARGS((char_u *name)); + + # define AUGROUP_DEFAULT -1 /* default autocmd group */ +! # define AUGROUP_ERROR -2 /* erroneous autocmd group */ + # define AUGROUP_ALL -3 /* all autocmd groups */ + #endif + +*************** +*** 144,150 **** + # endif + #endif + static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf)); +! + + void + filemess(buf, name, s, attr) +--- 144,152 ---- + # endif + #endif + static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf)); +! #ifdef FEAT_AUTOCMD +! static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name"); +! #endif + + void + filemess(buf, name, s, attr) +*************** +*** 295,300 **** +--- 297,315 ---- + int conv_restlen = 0; /* nr of bytes in conv_rest[] */ + #endif + ++ #ifdef FEAT_AUTOCMD ++ /* Remember the initial values of curbuf, curbuf->b_ffname and ++ * curbuf->b_fname to detect whether they are altered as a result of ++ * executing nasty autocommands. Also check if "fname" and "sfname" ++ * point to one of these values. */ ++ buf_T *old_curbuf = curbuf; ++ char_u *old_b_ffname = curbuf->b_ffname; ++ char_u *old_b_fname = curbuf->b_fname; ++ int using_b_ffname = (fname == curbuf->b_ffname) ++ || (sfname == curbuf->b_ffname); ++ int using_b_fname = (fname == curbuf->b_fname) ++ || (sfname == curbuf->b_fname); ++ #endif + write_no_eol_lnum = 0; /* in case it was set by the previous read */ + + /* +*************** +*** 589,595 **** +--- 604,624 ---- + #ifdef FEAT_QUICKFIX + if (!bt_dontwrite(curbuf)) + #endif ++ { + check_need_swap(newfile); ++ #ifdef FEAT_AUTOCMD ++ /* SwapExists autocommand may mess things up */ ++ if (curbuf != old_curbuf ++ || (using_b_ffname ++ && (old_b_ffname != curbuf->b_ffname)) ++ || (using_b_fname ++ && (old_b_fname != curbuf->b_fname))) ++ { ++ EMSG(_(e_auchangedbuf)); ++ return FAIL; ++ } ++ #endif ++ } + if (dir_of_file_exists(fname)) + filemess(curbuf, sfname, (char_u *)_("[New File]"), 0); + else +*************** +*** 668,673 **** +--- 697,713 ---- + #endif + { + check_need_swap(newfile); ++ #ifdef FEAT_AUTOCMD ++ if (!read_stdin && (curbuf != old_curbuf ++ || (using_b_ffname && (old_b_ffname != curbuf->b_ffname)) ++ || (using_b_fname && (old_b_fname != curbuf->b_fname)))) ++ { ++ EMSG(_(e_auchangedbuf)); ++ if (!read_buffer) ++ close(fd); ++ return FAIL; ++ } ++ #endif + #ifdef UNIX + /* Set swap file protection bits after creating it. */ + if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL) +*************** +*** 698,704 **** + { + int m = msg_scroll; + int n = msg_scrolled; +- buf_T *old_curbuf = curbuf; + + /* + * The file must be closed again, the autocommands may want to change +--- 738,743 ---- +*************** +*** 740,747 **** +--- 779,791 ---- + /* + * Don't allow the autocommands to change the current buffer. + * Try to re-open the file. ++ * ++ * Don't allow the autocommands to change the buffer name either ++ * (cd for example) if it invalidates fname or sfname. + */ + if (!read_stdin && (curbuf != old_curbuf ++ || (using_b_ffname && (old_b_ffname != curbuf->b_ffname)) ++ || (using_b_fname && (old_b_fname != curbuf->b_fname)) + || (fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0)) < 0)) + { + --no_wait_return; +*************** +*** 6320,6326 **** + + if (!stuff_empty() || global_busy || !typebuf_typed() + #ifdef FEAT_AUTOCMD +! || autocmd_busy || curbuf_lock > 0 + #endif + ) + need_check_timestamps = TRUE; /* check later */ +--- 6364,6370 ---- + + if (!stuff_empty() || global_busy || !typebuf_typed() + #ifdef FEAT_AUTOCMD +! || autocmd_busy || curbuf_lock > 0 || allbuf_lock > 0 + #endif + ) + need_check_timestamps = TRUE; /* check later */ +*************** +*** 6522,6529 **** +--- 6566,6575 ---- + set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1); + set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1); + # endif ++ ++allbuf_lock; + n = apply_autocmds(EVENT_FILECHANGEDSHELL, + buf->b_fname, buf->b_fname, FALSE, buf); ++ --allbuf_lock; + busy = FALSE; + if (n) + { +*** ../vim-7.2.131/src/proto/ex_getln.pro Fri Nov 28 10:59:57 2008 +--- src/proto/ex_getln.pro Sun Mar 1 00:27:12 2009 +*************** +*** 4,9 **** +--- 4,10 ---- + int text_locked __ARGS((void)); + void text_locked_msg __ARGS((void)); + int curbuf_locked __ARGS((void)); ++ int allbuf_locked __ARGS((void)); + char_u *getexline __ARGS((int c, void *dummy, int indent)); + char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent)); + int cmdline_overstrike __ARGS((void)); +*** ../vim-7.2.131/src/version.c Wed Mar 4 04:11:56 2009 +--- src/version.c Thu Mar 5 03:08:54 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 132, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +168. You have your own domain name. + + /// 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/7.2.133 b/7.2.133 new file mode 100644 index 00000000..ffb19d71 --- /dev/null +++ b/7.2.133 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.133 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.133 +Problem: ":diffoff!" changes settings in windows not in diff mode. +Solution: Only change settings in other windows when 'diff' is set, always + do it for the current window. (Lech Lorens) +Files: src/diff.c + + +*** ../vim-7.2.132/src/diff.c Thu Jan 22 20:48:07 2009 +--- src/diff.c Fri Mar 6 04:17:41 2009 +*************** +*** 1153,1159 **** + + for (wp = firstwin; wp != NULL; wp = wp->w_next) + { +! if (wp == curwin || eap->forceit) + { + /* Set 'diff', 'scrollbind' off and 'wrap' on. */ + wp->w_p_diff = FALSE; +--- 1153,1159 ---- + + for (wp = firstwin; wp != NULL; wp = wp->w_next) + { +! if (wp == curwin || (eap->forceit && wp->w_p_diff)) + { + /* Set 'diff', 'scrollbind' off and 'wrap' on. */ + wp->w_p_diff = FALSE; +*** ../vim-7.2.132/src/version.c Thu Mar 5 03:13:51 2009 +--- src/version.c Wed Mar 11 12:45:10 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 133, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.134 b/7.2.134 new file mode 100644 index 00000000..fee2789a --- /dev/null +++ b/7.2.134 @@ -0,0 +1,68 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.134 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.134 +Problem: Warning for discarding "const" from pointer. +Solution: Don't pass const pointer to mch_memmove(). +Files: src/fileio.c + + +*** ../vim-7.2.133/src/fileio.c Thu Mar 5 03:13:51 2009 +--- src/fileio.c Wed Mar 11 12:59:35 2009 +*************** +*** 5288,5300 **** + /* Convert with iconv(). */ + if (ip->bw_restlen > 0) + { + /* Need to concatenate the remainder of the previous call and + * the bytes of the current call. Use the end of the + * conversion buffer for this. */ + fromlen = len + ip->bw_restlen; +! from = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen; +! mch_memmove((void *)from, ip->bw_rest, (size_t)ip->bw_restlen); +! mch_memmove((void *)(from + ip->bw_restlen), buf, (size_t)len); + tolen = ip->bw_conv_buflen - fromlen; + } + else +--- 5288,5303 ---- + /* Convert with iconv(). */ + if (ip->bw_restlen > 0) + { ++ char *fp; ++ + /* Need to concatenate the remainder of the previous call and + * the bytes of the current call. Use the end of the + * conversion buffer for this. */ + fromlen = len + ip->bw_restlen; +! fp = (char *)ip->bw_conv_buf + ip->bw_conv_buflen - fromlen; +! mch_memmove(fp, ip->bw_rest, (size_t)ip->bw_restlen); +! mch_memmove(fp + ip->bw_restlen, buf, (size_t)len); +! from = fp; + tolen = ip->bw_conv_buflen - fromlen; + } + else +*** ../vim-7.2.133/src/version.c Wed Mar 11 12:45:44 2009 +--- src/version.c Wed Mar 11 13:08:25 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 134, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +193. You ask your girlfriend to drive home so you can sit back with + your PDA and download the information to your laptop + + /// 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/7.2.135 b/7.2.135 new file mode 100644 index 00000000..a58e6bb2 --- /dev/null +++ b/7.2.135 @@ -0,0 +1,85 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.135 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.135 +Problem: Memory leak when redefining user command with complete argument. +Solution: Free the old complete argument. (Dominique Pelle) +Files: src/ex_docmd.c + + +*** ../vim-7.2.134/src/ex_docmd.c Sun Mar 1 02:43:50 2009 +--- src/ex_docmd.c Wed Mar 11 11:13:31 2009 +*************** +*** 5124,5130 **** + } + + vim_free(cmd->uc_rep); +! cmd->uc_rep = 0; + break; + } + +--- 5124,5134 ---- + } + + vim_free(cmd->uc_rep); +! cmd->uc_rep = NULL; +! #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL) +! vim_free(cmd->uc_compl_arg); +! cmd->uc_compl_arg = NULL; +! #endif + break; + } + +*************** +*** 5941,5947 **** + for (;;) + { + p = cmd->uc_rep; /* source */ +! q = buf; /* destinateion */ + totlen = 0; + + for (;;) +--- 5945,5951 ---- + for (;;) + { + p = cmd->uc_rep; /* source */ +! q = buf; /* destination */ + totlen = 0; + + for (;;) +*************** +*** 7846,7851 **** +--- 7850,7858 ---- + { + vim_free(prev_dir); + prev_dir = NULL; ++ ++ vim_free(globaldir); ++ globaldir = NULL; + } + #endif + +*** ../vim-7.2.134/src/version.c Wed Mar 11 13:09:30 2009 +--- src/version.c Wed Mar 11 15:06:23 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 135, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +194. Your business cards contain your e-mail and home page address. + + /// 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/7.2.136 b/7.2.136 new file mode 100644 index 00000000..b0045eb9 --- /dev/null +++ b/7.2.136 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.136 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.136 (after 7.2.132) +Problem: ":cd" is still possible in a SwapExists autocmd. +Solution: Check the allbuf_lock flag in ex_cd(). +Files: src/ex_docmd.c + + +*** ../vim-7.2.135/src/ex_docmd.c Wed Mar 11 15:09:07 2009 +--- src/ex_docmd.c Wed Mar 11 11:13:31 2009 +*************** +*** 7875,7880 **** +--- 7875,7884 ---- + else + #endif + { ++ #ifdef FEAT_AUTOCMD ++ if (allbuf_locked()) ++ return; ++ #endif + if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged() + && !eap->forceit) + { +*** ../vim-7.2.135/src/version.c Wed Mar 11 15:09:07 2009 +--- src/version.c Wed Mar 11 15:35:36 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 136, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.137 b/7.2.137 new file mode 100644 index 00000000..706b046b --- /dev/null +++ b/7.2.137 @@ -0,0 +1,343 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.137 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Note: The special characters in the patch may cause problems. + +Patch 7.2.137 +Problem: When 'virtualedit' is set, a left shift of a blockwise selection + that starts and ends inside a tab shifts too much. (Helmut + Stiegler) +Solution: Redo the block left shift code. (Lech Lorens) +Files: src/ops.c, src/testdir/Makefile, src/testdir/test66.in, + src/testdir/test66.ok + + +*** ../vim-7.2.136/src/ops.c Wed Dec 3 13:38:00 2008 +--- src/ops.c Thu Mar 5 04:47:09 2009 +*************** +*** 72,82 **** + */ + struct block_def + { +! int startspaces; /* 'extra' cols of first char */ +! int endspaces; /* 'extra' cols of first char */ + int textlen; /* chars in block */ +! char_u *textstart; /* pointer to 1st char in block */ +! colnr_T textcol; /* cols of chars (at least part.) in block */ + colnr_T start_vcol; /* start col of 1st char wholly inside block */ + colnr_T end_vcol; /* start col of 1st char wholly after block */ + #ifdef FEAT_VISUALEXTRA +--- 72,82 ---- + */ + struct block_def + { +! int startspaces; /* 'extra' cols before first char */ +! int endspaces; /* 'extra' cols after last char */ + int textlen; /* chars in block */ +! char_u *textstart; /* pointer to 1st char (partially) in block */ +! colnr_T textcol; /* index of chars (partially) in block */ + colnr_T start_vcol; /* start col of 1st char wholly inside block */ + colnr_T end_vcol; /* start col of 1st char wholly after block */ + #ifdef FEAT_VISUALEXTRA +*************** +*** 382,396 **** + { + int left = (oap->op_type == OP_LSHIFT); + int oldstate = State; +! int total, split; +! char_u *newp, *oldp, *midp, *ptr; + int oldcol = curwin->w_cursor.col; + int p_sw = (int)curbuf->b_p_sw; + int p_ts = (int)curbuf->b_p_ts; + struct block_def bd; +- int internal = 0; + int incr; +! colnr_T vcol, col = 0, ws_vcol; + int i = 0, j = 0; + int len; + +--- 382,395 ---- + { + int left = (oap->op_type == OP_LSHIFT); + int oldstate = State; +! int total; +! char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; + int p_sw = (int)curbuf->b_p_sw; + int p_ts = (int)curbuf->b_p_ts; + struct block_def bd; + int incr; +! colnr_T ws_vcol; + int i = 0, j = 0; + int len; + +*************** +*** 456,522 **** + } + else /* left */ + { +! vcol = oap->start_vcol; +! /* walk vcol past ws to be removed */ +! for (midp = oldp + bd.textcol; +! vcol < (oap->start_vcol + total) && vim_iswhite(*midp); ) +! { +! incr = lbr_chartabsize_adv(&midp, (colnr_T)vcol); +! vcol += incr; +! } +! /* internal is the block-internal ws replacing a split TAB */ +! if (vcol > (oap->start_vcol + total)) +! { +! /* we have to split the TAB *(midp-1) */ +! internal = vcol - (oap->start_vcol + total); +! } +! /* if 'expandtab' is not set, use TABs */ + +! split = bd.startspaces + internal; +! if (split > 0) +! { +! if (!curbuf->b_p_et) +! { +! for (ptr = oldp, col = 0; ptr < oldp+bd.textcol; ) +! col += lbr_chartabsize_adv(&ptr, (colnr_T)col); + +! /* col+1 now equals the start col of the first char of the +! * block (may be < oap.start_vcol if we're splitting a TAB) */ +! i = ((col % p_ts) + split) / p_ts; /* number of tabs */ +! } +! if (i) +! j = ((col % p_ts) + split) % p_ts; /* number of spp */ +! else +! j = split; +! } + +! newp = alloc_check(bd.textcol + i + j + (unsigned)STRLEN(midp) + 1); +! if (newp == NULL) +! return; +! vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + STRLEN(midp) + 1)); + +! /* copy first part we want to keep */ +! mch_memmove(newp, oldp, (size_t)bd.textcol); +! /* Now copy any TABS and spp to ensure correct alignment! */ +! while (vim_iswhite(*midp)) + { +! if (*midp == TAB) +! i++; +! else /*space */ +! j++; +! midp++; + } +! /* We might have an extra TAB worth of spp now! */ +! if (j / p_ts && !curbuf->b_p_et) + { +! i++; +! j -= p_ts; + } +- copy_chars(newp + bd.textcol, (size_t)i, TAB); +- copy_spaces(newp + bd.textcol + i, (size_t)j); + +! /* the end */ +! STRMOVE(newp + STRLEN(newp), midp); + } + /* replace the line */ + ml_replace(curwin->w_cursor.lnum, newp, FALSE); +--- 455,543 ---- + } + else /* left */ + { +! colnr_T destination_col; /* column to which text in block will +! be shifted */ +! char_u *verbatim_copy_end; /* end of the part of the line which is +! copied verbatim */ +! colnr_T verbatim_copy_width;/* the (displayed) width of this part +! of line */ +! unsigned fill; /* nr of spaces that replace a TAB */ +! unsigned new_line_len; /* the length of the line after the +! block shift */ +! size_t block_space_width; +! size_t shift_amount; +! char_u *non_white = bd.textstart; +! colnr_T non_white_col; + +! /* +! * Firstly, let's find the first non-whitespace character that is +! * displayed after the block's start column and the character's column +! * number. Also, let's calculate the width of all the whitespace +! * characters that are displayed in the block and precede the searched +! * non-whitespace character. +! */ + +! /* If "bd.startspaces" is set, "bd.textstart" points to the character, +! * the part of which is displayed at the block's beginning. Let's start +! * searching from the next character. */ +! if (bd.startspaces) +! mb_ptr_adv(non_white); + +! /* The character's column is in "bd.start_vcol". */ +! non_white_col = bd.start_vcol; + +! while (vim_iswhite(*non_white)) + { +! incr = lbr_chartabsize_adv(&non_white, non_white_col); +! non_white_col += incr; + } +! +! block_space_width = non_white_col - oap->start_vcol; +! /* We will shift by "total" or "block_space_width", whichever is less. +! */ +! shift_amount = (block_space_width < total? block_space_width: total); +! +! /* The column to which we will shift the text. */ +! destination_col = non_white_col - shift_amount; +! +! /* Now let's find out how much of the beginning of the line we can +! * reuse without modification. */ +! verbatim_copy_end = bd.textstart; +! verbatim_copy_width = bd.start_vcol; +! +! /* If "bd.startspaces" is set, "bd.textstart" points to the character +! * preceding the block. We have to subtract its width to obtain its +! * column number. */ +! if (bd.startspaces) +! verbatim_copy_width -= bd.start_char_vcols; +! while (verbatim_copy_width < destination_col) + { +! incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width); +! if (verbatim_copy_width + incr > destination_col) +! break; +! verbatim_copy_width += incr; +! mb_ptr_adv(verbatim_copy_end); + } + +! /* If "destination_col" is different from the width of the initial +! * part of the line that will be copied, it means we encountered a tab +! * character, which we will have to partly replace with spaces. */ +! fill = destination_col - verbatim_copy_width; +! +! /* The replacement line will consist of: +! * - the beginning of the original line up to "verbatim_copy_end", +! * - "fill" number of spaces, +! * - the rest of the line, pointed to by non_white. */ +! new_line_len = (unsigned)(verbatim_copy_end - oldp) +! + fill +! + (unsigned)STRLEN(non_white) + 1; +! +! newp = alloc_check(new_line_len); +! if (newp == NULL) +! return; +! mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp)); +! copy_spaces(newp + (verbatim_copy_end - oldp), (size_t)fill); +! STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white); + } + /* replace the line */ + ml_replace(curwin->w_cursor.lnum, newp, FALSE); +*************** +*** 4851,4857 **** + * - textlen includes the first/last char to be (partly) deleted + * - start/endspaces is the number of columns that are taken by the + * first/last deleted char minus the number of columns that have to be +! * deleted. for yank and tilde: + * - textlen includes the first/last char to be wholly yanked + * - start/endspaces is the number of columns of the first/last yanked char + * that are to be yanked. +--- 4872,4879 ---- + * - textlen includes the first/last char to be (partly) deleted + * - start/endspaces is the number of columns that are taken by the + * first/last deleted char minus the number of columns that have to be +! * deleted. +! * for yank and tilde: + * - textlen includes the first/last char to be wholly yanked + * - start/endspaces is the number of columns of the first/last yanked char + * that are to be yanked. +*** ../vim-7.2.136/src/testdir/Makefile Wed Sep 10 18:25:18 2008 +--- src/testdir/Makefile Thu Mar 5 04:53:58 2009 +*************** +*** 20,26 **** + test48.out test49.out test51.out test52.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 + + SCRIPTS_GUI = test16.out + +--- 20,26 ---- + test48.out test49.out test51.out test52.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 test66.out + + SCRIPTS_GUI = test16.out + +*** ../vim-7.2.136/src/testdir/test66.in Wed Mar 11 16:24:44 2009 +--- src/testdir/test66.in Wed Mar 11 11:52:57 2009 +*************** +*** 0 **** +--- 1,25 ---- ++ ++ Test for visual block shift and tab characters. ++ ++ STARTTEST ++ :so small.vim ++ /^abcdefgh ++ 4jI j<<11|D ++ 7|a  ++ 7|a  ++ 7|a 4k13|4j< ++ :$-4,$w! test.out ++ :$-4,$s/\s\+//g ++ 4kI j<< ++ 7|a  ++ 7|a  ++ 7|a 4k13|4j3< ++ :$-4,$w >> test.out ++ :qa! ++ ENDTEST ++ ++ abcdefghijklmnopqrstuvwxyz ++ abcdefghijklmnopqrstuvwxyz ++ abcdefghijklmnopqrstuvwxyz ++ abcdefghijklmnopqrstuvwxyz ++ abcdefghijklmnopqrstuvwxyz +*** ../vim-7.2.136/src/testdir/test66.ok Wed Mar 11 16:24:44 2009 +--- src/testdir/test66.ok Thu Mar 5 04:39:36 2009 +*************** +*** 0 **** +--- 1,10 ---- ++ abcdefghijklmnopqrstuvwxyz ++ abcdefghij ++ abc defghijklmnopqrstuvwxyz ++ abc defghijklmnopqrstuvwxyz ++ abc defghijklmnopqrstuvwxyz ++ abcdefghijklmnopqrstuvwxyz ++ abcdefghij ++ abc defghijklmnopqrstuvwxyz ++ abc defghijklmnopqrstuvwxyz ++ abc defghijklmnopqrstuvwxyz +*** ../vim-7.2.136/src/version.c Wed Mar 11 15:36:01 2009 +--- src/version.c Wed Mar 11 16:23:07 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 137, + /**/ + +-- +% cat /usr/include/sys/errno.h +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +[...] +#define EMACS 666 /* Too many macros */ +% + + /// 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/7.2.138 b/7.2.138 new file mode 100644 index 00000000..faa7e7a6 --- /dev/null +++ b/7.2.138 @@ -0,0 +1,160 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.138 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.138 (extra part of 7.2.137) +Problem: See 7.2.137. +Solution: See 7.2.137. +Files: src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak, + src/testdir/Make_ming.mak, src/testdir/Make_os2.mak, + src/testdir/Make_vms.mms + + +*** ../vim-7.2.137/src/testdir/Make_amiga.mak Tue Jun 24 23:46:42 2008 +--- src/testdir/Make_amiga.mak Thu Mar 5 04:49:38 2009 +*************** +*** 25,31 **** + test43.out test44.out test45.out test46.out test47.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 + + .SUFFIXES: .in .out + +--- 25,32 ---- + test43.out test44.out test45.out test46.out test47.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 \ +! test66.out + + .SUFFIXES: .in .out + +*************** +*** 110,112 **** +--- 111,114 ---- + test63.out: test63.in + test64.out: test64.in + test65.out: test65.in ++ test66.out: test66.in +*** ../vim-7.2.137/src/testdir/Make_dos.mak Tue Jun 24 23:39:51 2008 +--- src/testdir/Make_dos.mak Thu Mar 5 04:52:47 2009 +*************** +*** 26,32 **** + 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 + +--- 26,32 ---- + 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 test66.out + + SCRIPTS32 = test50.out + +*** ../vim-7.2.137/src/testdir/Make_ming.mak Sat Sep 20 16:26:10 2008 +--- src/testdir/Make_ming.mak Thu Mar 5 04:53:16 2009 +*************** +*** 45,51 **** + 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 + +--- 45,51 ---- + 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 test66.out + + SCRIPTS32 = test50.out + +*** ../vim-7.2.137/src/testdir/Make_os2.mak Tue Jun 24 22:37:41 2008 +--- src/testdir/Make_os2.mak Thu Mar 5 04:53:31 2009 +*************** +*** 25,31 **** + test43.out test44.out test45.out test46.out test47.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 + + .SUFFIXES: .in .out + +--- 25,32 ---- + test43.out test44.out test45.out test46.out test47.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 \ +! test66.out + + .SUFFIXES: .in .out + +*** ../vim-7.2.137/src/testdir/Make_vms.mms Mon Sep 1 16:50:09 2008 +--- src/testdir/Make_vms.mms Thu Mar 5 04:53:42 2009 +*************** +*** 4,10 **** + # Authors: Zoltan Arpadffy, + # Sandor Kopanyi, + # +! # 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. +--- 4,10 ---- + # Authors: Zoltan Arpadffy, + # Sandor Kopanyi, + # +! # Last change: 2009 Mar 05 + # + # 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. +*************** +*** 68,74 **** + 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 + SCRIPT_GUI = test16.out +--- 68,75 ---- + 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 \ +! test66.out + + .IFDEF WANT_GUI + SCRIPT_GUI = test16.out +*** ../vim-7.2.137/src/version.c Wed Mar 11 16:26:01 2009 +--- src/version.c Wed Mar 11 16:35:06 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 138, + /**/ + +-- +Some of the well know MS-Windows errors: + ESLEEP Operator fell asleep + ENOERR No error yet + EDOLLAR OS too expensive + EWINDOWS MS-Windows loaded, system in danger + + /// 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/7.2.139 b/7.2.139 new file mode 100644 index 00000000..3366acb7 --- /dev/null +++ b/7.2.139 @@ -0,0 +1,79 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.139 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.139 +Problem: Crash when 'virtualedit' is "all". (James Vega) +Solution: Avoid overflow when column is MAXCOL. (Dominique Pelle) +Files: src/misc2.c + + +*** ../vim-7.2.138/src/misc2.c Tue Feb 24 04:28:40 2009 +--- src/misc2.c Wed Mar 11 16:45:05 2009 +*************** +*** 496,502 **** + { + colnr_T len; + #ifdef FEAT_VIRTUALEDIT +! colnr_T oldcol = curwin->w_cursor.col + curwin->w_cursor.coladd; + #endif + + len = (colnr_T)STRLEN(ml_get_curline()); +--- 496,503 ---- + { + colnr_T len; + #ifdef FEAT_VIRTUALEDIT +! colnr_T oldcol = curwin->w_cursor.col; +! colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd; + #endif + + len = (colnr_T)STRLEN(ml_get_curline()); +*************** +*** 535,541 **** + if (oldcol == MAXCOL) + curwin->w_cursor.coladd = 0; + else if (ve_flags == VE_ALL) +! curwin->w_cursor.coladd = oldcol - curwin->w_cursor.col; + #endif + } + +--- 536,548 ---- + if (oldcol == MAXCOL) + curwin->w_cursor.coladd = 0; + else if (ve_flags == VE_ALL) +! { +! if (oldcoladd > curwin->w_cursor.col) +! curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col; +! else +! /* avoid weird number when there is a miscalculation or overflow */ +! curwin->w_cursor.coladd = 0; +! } + #endif + } + +*** ../vim-7.2.138/src/version.c Wed Mar 11 16:36:04 2009 +--- src/version.c Wed Mar 11 17:26:50 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 139, + /**/ + +-- +Some of the well know MS-Windows errors: + EHUH Unexpected error + EUSER User error, not our fault! + EGOD Horrible problem, god knows what has happened + EERR Errornous error: nothing wrong + + /// 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/7.2.140 b/7.2.140 new file mode 100644 index 00000000..98c12796 --- /dev/null +++ b/7.2.140 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.140 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.140 +Problem: Diff highlighting isn't displayed before the Visual area if it + starts at the cursor position. (Markus Heidelberg) +Solution: Also check fromcol_prev. +Files: src/screen.c + + +*** ../vim-7.2.139/src/screen.c Sun Feb 22 21:12:22 2009 +--- src/screen.c Wed Mar 11 13:59:24 2009 +*************** +*** 3555,3561 **** + /* Use line_attr when not in the Visual or 'incsearch' area + * (area_attr may be 0 when "noinvcur" is set). */ + else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL) +! || (vcol < fromcol || vcol >= tocol))) + char_attr = line_attr; + #endif + else +--- 3555,3562 ---- + /* Use line_attr when not in the Visual or 'incsearch' area + * (area_attr may be 0 when "noinvcur" is set). */ + else if (line_attr != 0 && ((fromcol == -10 && tocol == MAXCOL) +! || vcol < fromcol || vcol_prev < fromcol_prev +! || vcol >= tocol)) + char_attr = line_attr; + #endif + else +*** ../vim-7.2.139/src/version.c Wed Mar 11 17:27:46 2009 +--- src/version.c Wed Mar 11 17:42:19 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 140, + /**/ + +-- +Some of the well know MS-Windows errors: + EMEMORY Memory error caused by..., eh... + ELICENSE Your license has expired, give us more money! + EMOUSE Mouse moved, reinstall Windows + EILLEGAL Illegal error, you are not allowed to see this + EVIRUS Undetectable virus found + + /// 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/7.2.141 b/7.2.141 new file mode 100644 index 00000000..395d210d --- /dev/null +++ b/7.2.141 @@ -0,0 +1,239 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.141 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.141 +Problem: When redrawing a character for bold spill this causes the next + character to be redrawn as well. +Solution: Only redraw one extra character. (Yukihiro Nakadaira) +Files: src/screen.c + + +*** ../vim-7.2.140/src/screen.c Wed Mar 11 17:44:38 2009 +--- src/screen.c Wed Mar 11 13:59:24 2009 +*************** +*** 5132,5139 **** + #endif + + #if defined(FEAT_GUI) || defined(UNIX) +! /* The bold trick makes a single row of pixels appear in the next +! * character. When a bold character is removed, the next + * character should be redrawn too. This happens for our own GUI + * and for some xterms. */ + if ( +--- 5132,5139 ---- + #endif + + #if defined(FEAT_GUI) || defined(UNIX) +! /* The bold trick makes a single column of pixels appear in the +! * next character. When a bold character is removed, the next + * character should be redrawn too. This happens for our own GUI + * and for some xterms. */ + if ( +*************** +*** 6276,6284 **** +--- 6276,6290 ---- + int pcc[MAX_MCO]; + # endif + #endif ++ #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) ++ int force_redraw_this; ++ int force_redraw_next = FALSE; ++ #endif ++ int need_redraw; + + if (ScreenLines == NULL || row >= screen_Rows) /* safety check */ + return; ++ off = LineOffset[row] + col; + + #ifdef FEAT_MBYTE + /* When drawing over the right halve of a double-wide char clear out the +*************** +*** 6288,6297 **** + && !gui.in_use + # endif + && mb_fix_col(col, row) != col) +! screen_puts_len((char_u *)" ", 1, row, col - 1, 0); + #endif + +- off = LineOffset[row] + col; + #ifdef FEAT_MBYTE + max_off = LineOffset[row] + screen_Columns; + #endif +--- 6294,6314 ---- + && !gui.in_use + # endif + && mb_fix_col(col, row) != col) +! { +! ScreenLines[off - 1] = ' '; +! ScreenAttrs[off - 1] = 0; +! if (enc_utf8) +! { +! ScreenLinesUC[off - 1] = 0; +! ScreenLinesC[0][off - 1] = 0; +! } +! /* redraw the previous cell, make it empty */ +! screen_char(off - 1, row, col - 1); +! /* force the cell at "col" to be redrawn */ +! force_redraw_next = TRUE; +! } + #endif + + #ifdef FEAT_MBYTE + max_off = LineOffset[row] + screen_Columns; + #endif +*************** +*** 6355,6361 **** + } + #endif + +! if (ScreenLines[off] != c + #ifdef FEAT_MBYTE + || (mbyte_cells == 2 + && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0)) +--- 6372,6383 ---- + } + #endif + +! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) +! force_redraw_this = force_redraw_next; +! force_redraw_next = FALSE; +! #endif +! +! need_redraw = ScreenLines[off] != c + #ifdef FEAT_MBYTE + || (mbyte_cells == 2 + && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0)) +*************** +*** 6367,6386 **** + || screen_comp_differs(off, u8cc))) + #endif + || ScreenAttrs[off] != attr +! || exmode_active + ) + { + #if defined(FEAT_GUI) || defined(UNIX) + /* The bold trick makes a single row of pixels appear in the next + * character. When a bold character is removed, the next + * character should be redrawn too. This happens for our own GUI +! * and for some xterms. +! * Force the redraw by setting the attribute to a different value +! * than "attr", the contents of ScreenLines[] may be needed by +! * mb_off2cells() further on. +! * Don't do this for the last drawn character, because the next +! * character may not be redrawn. */ +! if ( + # ifdef FEAT_GUI + gui.in_use + # endif +--- 6389,6408 ---- + || screen_comp_differs(off, u8cc))) + #endif + || ScreenAttrs[off] != attr +! || exmode_active; +! +! if (need_redraw +! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) +! || force_redraw_this +! #endif + ) + { + #if defined(FEAT_GUI) || defined(UNIX) + /* The bold trick makes a single row of pixels appear in the next + * character. When a bold character is removed, the next + * character should be redrawn too. This happens for our own GUI +! * and for some xterms. */ +! if (need_redraw && ScreenLines[off] != ' ' && ( + # ifdef FEAT_GUI + gui.in_use + # endif +*************** +*** 6390,6412 **** + # ifdef UNIX + term_is_xterm + # endif +! ) + { +! int n; + +! n = ScreenAttrs[off]; +! # ifdef FEAT_MBYTE +! if (col + mbyte_cells < screen_Columns +! && (n > HL_ALL || (n & HL_BOLD)) +! && (len < 0 ? ptr[mbyte_blen] != NUL +! : ptr + mbyte_blen < text + len)) +! ScreenAttrs[off + mbyte_cells] = attr + 1; +! # else +! if (col + 1 < screen_Columns +! && (n > HL_ALL || (n & HL_BOLD)) +! && (len < 0 ? ptr[1] != NUL : ptr + 1 < text + len)) +! ScreenLines[off + 1] = 0; +! # endif + } + #endif + #ifdef FEAT_MBYTE +--- 6412,6425 ---- + # ifdef UNIX + term_is_xterm + # endif +! )) + { +! int n = ScreenAttrs[off]; + +! if (n > HL_ALL) +! n = syn_attr2attr(n); +! if (n & HL_BOLD) +! force_redraw_next = TRUE; + } + #endif + #ifdef FEAT_MBYTE +*************** +*** 6493,6498 **** +--- 6506,6525 ---- + ++ptr; + } + } ++ ++ #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) ++ /* If we detected the next character needs to be redrawn, but the text ++ * doesn't extend up to there, update the character here. */ ++ if (force_redraw_next && col < screen_Columns) ++ { ++ # ifdef FEAT_MBYTE ++ if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1) ++ screen_char_2(off, row, col); ++ else ++ # endif ++ screen_char(off, row, col); ++ } ++ #endif + } + + #ifdef FEAT_SEARCH_EXTRA +*** ../vim-7.2.140/src/version.c Wed Mar 11 17:44:38 2009 +--- src/version.c Wed Mar 11 17:55:22 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 141, + /**/ + +-- +Some of the well know 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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.142 b/7.2.142 new file mode 100644 index 00000000..adfaab61 --- /dev/null +++ b/7.2.142 @@ -0,0 +1,61 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.142 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.142 +Problem: Motif and Athena balloons don't use tooltip colors. +Solution: Set the colors. (Matt Wozniski) +Files: src/gui_beval.c + + +*** ../vim-7.2.141/src/gui_beval.c Thu May 10 21:29:20 2007 +--- src/gui_beval.c Wed Mar 11 15:20:36 2009 +*************** +*** 1291,1296 **** +--- 1291,1313 ---- + XtNy, ty, + NULL); + #endif ++ /* Set tooltip colors */ ++ { ++ Arg args[2]; ++ ++ #ifdef FEAT_GUI_MOTIF ++ args[0].name = XmNbackground; ++ args[0].value = gui.tooltip_bg_pixel; ++ args[1].name = XmNforeground; ++ args[1].value = gui.tooltip_fg_pixel; ++ #else /* Athena */ ++ args[0].name = XtNbackground; ++ args[0].value = gui.tooltip_bg_pixel; ++ args[1].name = XtNforeground; ++ args[1].value = gui.tooltip_fg_pixel; ++ #endif ++ XtSetValues(beval->balloonLabel, &args[0], XtNumber(args)); ++ } + + XtPopup(beval->balloonShell, XtGrabNone); + +*** ../vim-7.2.141/src/version.c Wed Mar 11 17:57:05 2009 +--- src/version.c Wed Mar 18 12:20:01 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 142, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +233. You start dreaming about web pages...in html. + + /// 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/7.2.143 b/7.2.143 new file mode 100644 index 00000000..905f1599 --- /dev/null +++ b/7.2.143 @@ -0,0 +1,234 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.143 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.143 +Problem: No command line completion for ":cscope" command. +Solution: Add the completion for ":cscope". (Dominique Pelle) +Files: src/ex_docmd.c, src/ex_getln.c, src/if_cscope.c, + src/proto/if_cscope.pro, src/vim.h + + +*** ../vim-7.2.142/src/ex_docmd.c Wed Mar 11 15:36:01 2009 +--- src/ex_docmd.c Wed Mar 11 15:45:04 2009 +*************** +*** 3683,3688 **** +--- 3683,3693 ---- + case CMD_highlight: + set_context_in_highlight_cmd(xp, arg); + break; ++ #ifdef FEAT_CSCOPE ++ case CMD_cscope: ++ set_context_in_cscope_cmd(xp, arg); ++ break; ++ #endif + #ifdef FEAT_LISTCMDS + case CMD_bdelete: + case CMD_bwipeout: +*************** +*** 5187,5192 **** +--- 5192,5200 ---- + {EXPAND_AUGROUP, "augroup"}, + {EXPAND_BUFFERS, "buffer"}, + {EXPAND_COMMANDS, "command"}, ++ #if defined(FEAT_CSCOPE) ++ {EXPAND_CSCOPE, "cscope"}, ++ #endif + #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL) + {EXPAND_USER_DEFINED, "custom"}, + {EXPAND_USER_LIST, "customlist"}, +*** ../vim-7.2.142/src/ex_getln.c Thu Mar 5 03:13:51 2009 +--- src/ex_getln.c Wed Mar 11 15:45:04 2009 +*************** +*** 4518,4523 **** +--- 4518,4526 ---- + {EXPAND_EVENTS, get_event_name, TRUE}, + {EXPAND_AUGROUP, get_augroup_name, TRUE}, + #endif ++ #ifdef FEAT_CSCOPE ++ {EXPAND_CSCOPE, get_cscope_name, TRUE}, ++ #endif + #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ + && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)) + {EXPAND_LANGUAGE, get_lang_arg, TRUE}, +*** ../vim-7.2.142/src/if_cscope.c Wed Jan 28 16:03:51 2009 +--- src/if_cscope.c Wed Mar 11 15:56:07 2009 +*************** +*** 93,104 **** + (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage); + } + + /* + * PRIVATE: do_cscope_general + * +! * find the command, print help if invalid, and the then call the +! * corresponding command function, +! * called from do_cscope and do_scscope + */ + static void + do_cscope_general(eap, make_split) +--- 93,209 ---- + (void)EMSG2(_("E560: Usage: cs[cope] %s"), cs_cmds[(int)x].usage); + } + ++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO) ++ ++ static enum ++ { ++ EXP_CSCOPE_SUBCMD, /* expand ":cscope" sub-commands */ ++ EXP_CSCOPE_FIND, /* expand ":cscope find" arguments */ ++ EXP_CSCOPE_KILL /* expand ":cscope kill" arguments */ ++ } expand_what; ++ ++ /* ++ * Function given to ExpandGeneric() to obtain the cscope command ++ * expansion. ++ */ ++ /*ARGSUSED*/ ++ char_u * ++ get_cscope_name(xp, idx) ++ expand_T *xp; ++ int idx; ++ { ++ switch (expand_what) ++ { ++ case EXP_CSCOPE_SUBCMD: ++ /* Complete with sub-commands of ":cscope": ++ * add, find, help, kill, reset, show */ ++ return (char_u *)cs_cmds[idx].name; ++ case EXP_CSCOPE_FIND: ++ { ++ const char *query_type[] = ++ { ++ "c", "d", "e", "f", "g", "i", "s", "t", NULL ++ }; ++ ++ /* Complete with query type of ":cscope find {query_type}". ++ * {query_type} can be letters (c, d, ... t) or numbers (0, 1, ++ * ..., 8) but only complete with letters, since numbers are ++ * redundant. */ ++ return (char_u *)query_type[idx]; ++ } ++ case EXP_CSCOPE_KILL: ++ { ++ int i; ++ int current_idx = 0; ++ static char_u connection[2]; ++ ++ /* ":cscope kill" accepts connection numbers or partial names of ++ * the pathname of the cscope database as argument. Only complete ++ * with connection numbers. -1 can also be used to kill all ++ * connections. */ ++ for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) ++ { ++ if (csinfo[i].fname == NULL) ++ continue; ++ if (current_idx++ == idx) ++ { ++ /* Connection number fits in one character since ++ * CSCOPE_MAX_CONNECTIONS is < 10 */ ++ connection[0] = i + '0'; ++ connection[1] = NUL; ++ return connection; ++ } ++ } ++ return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL; ++ } ++ default: ++ return NULL; ++ } ++ } ++ ++ /* ++ * Handle command line completion for :cscope command. ++ */ ++ void ++ set_context_in_cscope_cmd(xp, arg) ++ expand_T *xp; ++ char_u *arg; ++ { ++ char_u *p; ++ ++ /* Default: expand subcommands */ ++ xp->xp_context = EXPAND_CSCOPE; ++ expand_what = EXP_CSCOPE_SUBCMD; ++ xp->xp_pattern = arg; ++ ++ /* (part of) subcommand already typed */ ++ if (*arg != NUL) ++ { ++ p = skiptowhite(arg); ++ if (*p != NUL) /* past first word */ ++ { ++ xp->xp_pattern = skipwhite(p); ++ if (*skiptowhite(xp->xp_pattern) != NUL) ++ xp->xp_context = EXPAND_NOTHING; ++ else if (STRNICMP(arg, "add", p - arg) == 0) ++ xp->xp_context = EXPAND_FILES; ++ else if (STRNICMP(arg, "kill", p - arg) == 0) ++ expand_what = EXP_CSCOPE_KILL; ++ else if (STRNICMP(arg, "find", p - arg) == 0) ++ expand_what = EXP_CSCOPE_FIND; ++ else ++ xp->xp_context = EXPAND_NOTHING; ++ } ++ } ++ } ++ ++ #endif /* FEAT_CMDL_COMPL */ ++ + /* + * PRIVATE: do_cscope_general + * +! * Find the command, print help if invalid, and then call the corresponding +! * command function. + */ + static void + do_cscope_general(eap, make_split) +*** ../vim-7.2.142/src/proto/if_cscope.pro Thu Sep 6 17:38:21 2007 +--- src/proto/if_cscope.pro Wed Mar 11 15:57:03 2009 +*************** +*** 1,4 **** +--- 1,6 ---- + /* if_cscope.c */ ++ char_u *get_cscope_name __ARGS((expand_T *xp, int idx)); ++ void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg)); + void do_cscope __ARGS((exarg_T *eap)); + void do_scscope __ARGS((exarg_T *eap)); + void do_cstag __ARGS((exarg_T *eap)); +*** ../vim-7.2.142/src/vim.h Sun Feb 22 02:36:36 2009 +--- src/vim.h Wed Mar 11 15:45:04 2009 +*************** +*** 708,713 **** +--- 708,714 ---- + #define EXPAND_USER_DEFINED 30 + #define EXPAND_USER_LIST 31 + #define EXPAND_SHELLCMD 32 ++ #define EXPAND_CSCOPE 33 + + /* Values for exmode_active (0 is no exmode) */ + #define EXMODE_NORMAL 1 +*** ../vim-7.2.142/src/version.c Wed Mar 18 12:20:35 2009 +--- src/version.c Wed Mar 18 12:48:08 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 143, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +234. You started college as a chemistry major, and walk out four years + later as an Internet provider. + + /// 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/7.2.144 b/7.2.144 new file mode 100644 index 00000000..3a219bd4 --- /dev/null +++ b/7.2.144 @@ -0,0 +1,78 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.144 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.144 +Problem: When 't_Co' is set to the value it already had the color scheme is + reloaded anyway. +Solution: Only load the colorscheme when the t_Co value changes. (Dominique + Pelle) +Files: src/option.c + + +*** ../vim-7.2.143/src/option.c Wed Mar 4 04:11:56 2009 +--- src/option.c Wed Mar 18 12:00:28 2009 +*************** +*** 6022,6036 **** + /* ":set t_Co=0" and ":set t_Co=1" do ":set t_Co=" */ + if (varp == &T_CCO) + { +! t_colors = atoi((char *)T_CCO); +! if (t_colors <= 1) + { +! if (new_value_alloced) +! vim_free(T_CCO); +! T_CCO = empty_option; + } +- /* We now have a different color setup, initialize it again. */ +- init_highlight(TRUE, FALSE); + } + ttest(FALSE); + if (varp == &T_ME) +--- 6022,6044 ---- + /* ":set t_Co=0" and ":set t_Co=1" do ":set t_Co=" */ + if (varp == &T_CCO) + { +! int colors = atoi((char *)T_CCO); +! +! /* Only reinitialize colors if t_Co value has really changed to +! * avoid expensive reload of colorscheme if t_Co is set to the +! * same value multiple times. */ +! if (colors != t_colors) + { +! t_colors = colors; +! if (t_colors <= 1) +! { +! if (new_value_alloced) +! vim_free(T_CCO); +! T_CCO = empty_option; +! } +! /* We now have a different color setup, initialize it again. */ +! init_highlight(TRUE, FALSE); + } + } + ttest(FALSE); + if (varp == &T_ME) +*** ../vim-7.2.143/src/version.c Wed Mar 18 12:50:58 2009 +--- src/version.c Wed Mar 18 14:16:48 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 144, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +235. You start naming your kids Pascal, COBOL, Algol and Fortran. + + /// 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/7.2.145 b/7.2.145 new file mode 100644 index 00000000..0f328170 --- /dev/null +++ b/7.2.145 @@ -0,0 +1,125 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.145 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.145 +Problem: White space in ":cscope find" is not ignored. +Solution: Ignore the white space, but not when the leading white space is + useful for the argument. +Files: runtime/doc/if_cscop.txt, src/if_cscope.c + + +*** ../vim-7.2.144/runtime/doc/if_cscop.txt Sat Aug 9 19:36:48 2008 +--- runtime/doc/if_cscop.txt Wed Mar 18 14:30:09 2009 +*************** +*** 1,4 **** +! *if_cscop.txt* For Vim version 7.2. Last change: 2005 Mar 29 + + + VIM REFERENCE MANUAL by Andy Kahn +--- 1,4 ---- +! *if_cscop.txt* For Vim version 7.2. Last change: 2009 Mar 18 + + + VIM REFERENCE MANUAL by Andy Kahn +*************** +*** 131,141 **** + 7 or f: Find this file + 8 or i: Find files #including this file + + EXAMPLES > + :cscope find c vim_free +! :cscope find 3 vim_free + < +! These two examples perform the same query. > + + :cscope find 0 DEFAULT_TERM + < +--- 131,152 ---- + 7 or f: Find this file + 8 or i: Find files #including this file + ++ For all types, except 4 and 6, leading white space for {name} is ++ removed. For 4 and 6 there is exactly one space between {querytype} ++ and {name}. Further white space is included in {name}. ++ + EXAMPLES > + :cscope find c vim_free +! :cscope find 3 vim_free +! < +! These two examples perform the same query: functions calling +! "vim_free". > +! +! :cscope find t initOnce +! :cscope find t initOnce + < +! The first one searches for the text "initOnce", the second one for +! " initOnce". > + + :cscope find 0 DEFAULT_TERM + < +*** ../vim-7.2.144/src/if_cscope.c Wed Mar 18 12:50:58 2009 +--- src/if_cscope.c Wed Mar 18 13:23:53 2009 +*************** +*** 764,769 **** +--- 764,770 ---- + { + char *cmd; + short search; ++ char *pat; + + switch (csoption[0]) + { +*************** +*** 797,806 **** + return NULL; + } + +! if ((cmd = (char *)alloc((unsigned)(strlen(pattern) + 2))) == NULL) + return NULL; + +! (void)sprintf(cmd, "%d%s", search, pattern); + + return cmd; + } /* cs_create_cmd */ +--- 798,814 ---- + return NULL; + } + +! /* Skip white space before the patter, except for text and pattern search, +! * they may want to use the leading white space. */ +! pat = pattern; +! if (search != 4 && search != 6) +! while vim_iswhite(*pat) +! ++pat; +! +! if ((cmd = (char *)alloc((unsigned)(strlen(pat) + 2))) == NULL) + return NULL; + +! (void)sprintf(cmd, "%d%s", search, pat); + + return cmd; + } /* cs_create_cmd */ +*** ../vim-7.2.144/src/version.c Wed Mar 18 14:19:28 2009 +--- src/version.c Wed Mar 18 14:28:46 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 145, + /**/ + +-- +Google is kind of like Dr. Who's Tardis; it's weirder on the +inside than on the outside... + + /// 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/7.2.146 b/7.2.146 new file mode 100644 index 00000000..96852fbe --- /dev/null +++ b/7.2.146 @@ -0,0 +1,110 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.146 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.146 +Problem: v:warningmsg isn't used for all warnings. +Solution: Set v:warningmsg for relevant warnings. (Ingo Karkat) +Files: src/fileio.c, src/misc1.c, src/option.c + + +*** ../vim-7.2.145/src/fileio.c Wed Mar 11 13:09:30 2009 +--- src/fileio.c Wed Mar 18 15:03:46 2009 +*************** +*** 6647,6652 **** +--- 6647,6657 ---- + tbuf = alloc((unsigned)(STRLEN(path) + STRLEN(mesg) + + STRLEN(mesg2) + 2)); + sprintf((char *)tbuf, mesg, path); ++ #ifdef FEAT_EVAL ++ /* Set warningmsg here, before the unimportant and output-specific ++ * mesg2 has been appended. */ ++ set_vim_var_string(VV_WARNINGMSG, tbuf, -1); ++ #endif + #if defined(FEAT_CON_DIALOG) || defined(FEAT_GUI_DIALOG) + if (can_reload) + { +*** ../vim-7.2.145/src/misc1.c Thu Nov 20 17:09:09 2008 +--- src/misc1.c Wed Mar 18 15:06:59 2009 +*************** +*** 2955,2960 **** +--- 2955,2962 ---- + int col; /* column for message; non-zero when in insert + mode and 'showmode' is on */ + { ++ static char *w_readonly = N_("W10: Warning: Changing a readonly file"); ++ + if (curbuf->b_did_warn == FALSE + && curbufIsChanged() == 0 + #ifdef FEAT_AUTOCMD +*************** +*** 2977,2984 **** + if (msg_row == Rows - 1) + msg_col = col; + msg_source(hl_attr(HLF_W)); +! MSG_PUTS_ATTR(_("W10: Warning: Changing a readonly file"), +! hl_attr(HLF_W) | MSG_HIST); + msg_clr_eos(); + (void)msg_end(); + if (msg_silent == 0 && !silent_mode) +--- 2979,2988 ---- + if (msg_row == Rows - 1) + msg_col = col; + msg_source(hl_attr(HLF_W)); +! MSG_PUTS_ATTR(_(w_readonly), hl_attr(HLF_W) | MSG_HIST); +! #ifdef FEAT_EVAL +! set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_readonly), -1); +! #endif + msg_clr_eos(); + (void)msg_end(); + if (msg_silent == 0 && !silent_mode) +*** ../vim-7.2.145/src/option.c Wed Mar 18 14:19:28 2009 +--- src/option.c Wed Mar 18 15:06:11 2009 +*************** +*** 7563,7571 **** + * set. */ + if (STRCMP(p_enc, "utf-8") != 0) + { + msg_source(hl_attr(HLF_W)); +! MSG_ATTR(_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'"), +! hl_attr(HLF_W)); + } + + # ifdef FEAT_MBYTE +--- 7563,7575 ---- + * set. */ + if (STRCMP(p_enc, "utf-8") != 0) + { ++ static char *w_arabic = N_("W17: Arabic requires UTF-8, do ':set encoding=utf-8'"); ++ + msg_source(hl_attr(HLF_W)); +! MSG_ATTR(_(w_arabic), hl_attr(HLF_W)); +! #ifdef FEAT_EVAL +! set_vim_var_string(VV_WARNINGMSG, (char_u *)_(w_arabic), -1); +! #endif + } + + # ifdef FEAT_MBYTE +*** ../vim-7.2.145/src/version.c Wed Mar 18 14:30:46 2009 +--- src/version.c Wed Mar 18 15:38:27 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 146, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +238. You think faxes are old-fashioned. + + /// 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/7.2.147 b/7.2.147 new file mode 100644 index 00000000..82a43eea --- /dev/null +++ b/7.2.147 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.147 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.147 +Problem: When compiled as small version and 'number' is on the cursor is + displayed in the wrong position after a tab. (James Vega) +Solution: Don't increment vcol when still displaying the line number. +Files: src/screen.c + + +*** ../vim-7.2.146/src/screen.c Wed Mar 11 17:57:05 2009 +--- src/screen.c Wed Mar 18 16:18:00 2009 +*************** +*** 4665,4671 **** + --n_skip; + + /* Only advance the "vcol" when after the 'number' column. */ +! if (draw_state >= WL_SBR + #ifdef FEAT_DIFF + && filler_todo <= 0 + #endif +--- 4665,4671 ---- + --n_skip; + + /* Only advance the "vcol" when after the 'number' column. */ +! if (draw_state > WL_NR + #ifdef FEAT_DIFF + && filler_todo <= 0 + #endif +*** ../vim-7.2.146/src/version.c Wed Mar 18 15:40:03 2009 +--- src/version.c Wed Mar 18 16:26:00 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 147, + /**/ + +-- +You can tune a file system, but you can't tuna fish + -- man tunefs + + /// 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/7.2.148 b/7.2.148 new file mode 100644 index 00000000..32504997 --- /dev/null +++ b/7.2.148 @@ -0,0 +1,145 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.148 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.148 +Problem: When searching for "$" while 'hlsearch' is set, highlighting the + character after the line does not work in the cursor column. + Also highlighting for Visual mode after the line end when this + isn't needed. (Markus Heidelberg) +Solution: Only compare the cursor column in the cursor line. Only highlight + for Visual selection after the last character when it's needed to + see where the Visual selection ends. +Files: src/screen.c + + +*** ../vim-7.2.147/src/screen.c Wed Mar 18 16:26:31 2009 +--- src/screen.c Wed Mar 18 17:24:56 2009 +*************** +*** 2889,2896 **** + } + else + tocol = MAXCOL; +! if (fromcol == tocol) /* do at least one character */ +! tocol = fromcol + 1; /* happens when past end of line */ + area_highlighting = TRUE; + attr = hl_attr(HLF_I); + } +--- 2889,2897 ---- + } + else + tocol = MAXCOL; +! /* do at least one character; happens when past end of line */ +! if (fromcol == tocol) +! tocol = fromcol + 1; + area_highlighting = TRUE; + attr = hl_attr(HLF_I); + } +*************** +*** 4118,4123 **** +--- 4119,4125 ---- + # endif + (col < W_WIDTH(wp))) + && !(noinvcur ++ && lnum == wp->w_cursor.lnum + && (colnr_T)vcol == wp->w_virtcol))) + && lcs_eol_one >= 0) + { +*************** +*** 4259,4265 **** + * preedit_changed and commit. Thus Vim can't set "im_is_active", use + * im_is_preediting() here. */ + if (xic != NULL +! && lnum == curwin->w_cursor.lnum + && (State & INSERT) + && !p_imdisable + && im_is_preediting() +--- 4261,4267 ---- + * preedit_changed and commit. Thus Vim can't set "im_is_active", use + * im_is_preediting() here. */ + if (xic != NULL +! && lnum == wp->w_cursor.lnum + && (State & INSERT) + && !p_imdisable + && im_is_preediting() +*************** +*** 4268,4274 **** + colnr_T tcol; + + if (preedit_end_col == MAXCOL) +! getvcol(curwin, &(curwin->w_cursor), &tcol, NULL, NULL); + else + tcol = preedit_end_col; + if ((long)preedit_start_col <= vcol && vcol < (long)tcol) +--- 4270,4276 ---- + colnr_T tcol; + + if (preedit_end_col == MAXCOL) +! getvcol(curwin, &(wp->w_cursor), &tcol, NULL, NULL); + else + tcol = preedit_end_col; + if ((long)preedit_start_col <= vcol && vcol < (long)tcol) +*************** +*** 4365,4371 **** + } + #endif + if (lcs_eol == lcs_eol_one +! && ((area_attr != 0 && vcol == fromcol && c == NUL) + #ifdef FEAT_SEARCH_EXTRA + /* highlight 'hlsearch' match at end of line */ + || (prevcol_hl_flag == TRUE +--- 4367,4379 ---- + } + #endif + if (lcs_eol == lcs_eol_one +! && ((area_attr != 0 && vcol == fromcol +! #ifdef FEAT_VISUAL +! && (VIsual_mode != Ctrl_V +! || lnum == VIsual.lnum +! || lnum == curwin->w_cursor.lnum) +! #endif +! && c == NUL) + #ifdef FEAT_SEARCH_EXTRA + /* highlight 'hlsearch' match at end of line */ + || (prevcol_hl_flag == TRUE +*************** +*** 4459,4465 **** + if (c == NUL) + { + #ifdef FEAT_SYN_HL +! if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol) + { + /* highlight last char after line */ + --col; +--- 4467,4474 ---- + if (c == NUL) + { + #ifdef FEAT_SYN_HL +! if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol +! && lnum == wp->w_cursor.lnum) + { + /* highlight last char after line */ + --col; +*** ../vim-7.2.147/src/version.c Wed Mar 18 16:26:31 2009 +--- src/version.c Wed Mar 18 19:05:37 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 148, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +239. You think "surfing" is something you do on dry land. + + /// 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/7.2.149 b/7.2.149 new file mode 100644 index 00000000..7b51a571 --- /dev/null +++ b/7.2.149 @@ -0,0 +1,672 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.149 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.149 +Problem: Using return value of function that doesn't return a value results + in reading uninitialized memory. +Solution: Set the default to return zero. Make cursor() return -1 on + failure. Let complete() return an empty string in case of an + error. (partly by Dominique Pelle) +Files: runtime/doc/eval.txt, src/eval.c + + +*** ../vim-7.2.148/runtime/doc/eval.txt Tue Dec 9 10:56:50 2008 +--- runtime/doc/eval.txt Sun Mar 22 14:28:49 2009 +*************** +*** 2414,2419 **** +--- 2419,2425 ---- + When 'virtualedit' is used {off} specifies the offset in + screen columns from the start of the character. E.g., a + position within a or after the last character. ++ Returns 0 when the position could be set, -1 otherwise. + + + deepcopy({expr}[, {noref}]) *deepcopy()* *E698* +*************** +*** 4516,4521 **** +--- 4526,4532 ---- + should also work to move files across file systems. The + result is a Number, which is 0 if the file was renamed + successfully, and non-zero when the renaming failed. ++ NOTE: If {to} exists it is overwritten without warning. + This function is not available in the |sandbox|. + + repeat({expr}, {count}) *repeat()* +*** ../vim-7.2.148/src/eval.c Wed Feb 4 16:25:53 2009 +--- src/eval.c Sun Mar 22 20:45:18 2009 +*************** +*** 1285,1291 **** +--- 1285,1293 ---- + typval_T tv; + char_u *retval; + garray_T ga; ++ #ifdef FEAT_FLOAT + char_u numbuf[NUMBUFLEN]; ++ #endif + + if (eval0(arg, &tv, nextcmd, TRUE) == FAIL) + retval = NULL; +*************** +*** 8018,8024 **** + /* execute the function if no errors detected and executing */ + if (evaluate && error == ERROR_NONE) + { +! rettv->v_type = VAR_NUMBER; /* default is number rettv */ + error = ERROR_UNKNOWN; + + if (!builtin_function(fname)) +--- 8020,8027 ---- + /* execute the function if no errors detected and executing */ + if (evaluate && error == ERROR_NONE) + { +! rettv->v_type = VAR_NUMBER; /* default rettv is number zero */ +! rettv->vval.v_number = 0; + error = ERROR_UNKNOWN; + + if (!builtin_function(fname)) +*************** +*** 8268,8274 **** + return; + li = l->lv_first; + } +- rettv->vval.v_number = 0; /* Default: Success */ + for (;;) + { + if (l == NULL) +--- 8271,8276 ---- +*************** +*** 8728,8734 **** + int dummy; + dict_T *selfdict = NULL; + +- rettv->vval.v_number = 0; + if (argvars[1].v_type != VAR_LIST) + { + EMSG(_(e_listreq)); +--- 8730,8735 ---- +*************** +*** 9036,9048 **** + if (buttons == NULL || *buttons == NUL) + buttons = (char_u *)_("&Ok"); + +! if (error) +! rettv->vval.v_number = 0; +! else + rettv->vval.v_number = do_dialog(type, NULL, message, buttons, + def, NULL); +- #else +- rettv->vval.v_number = 0; + #endif + } + +--- 9037,9045 ---- + if (buttons == NULL || *buttons == NUL) + buttons = (char_u *)_("&Ok"); + +! if (!error) + rettv->vval.v_number = do_dialog(type, NULL, message, buttons, + def, NULL); + #endif + } + +*************** +*** 9181,9195 **** + } + + rettv->vval.v_number = cs_connection(num, dbpath, prepend); +- #else +- rettv->vval.v_number = 0; + #endif + } + + /* + * "cursor(lnum, col)" function + * +! * Moves the cursor to the specified line and column + */ + /*ARGSUSED*/ + static void +--- 9178,9191 ---- + } + + rettv->vval.v_number = cs_connection(num, dbpath, prepend); + #endif + } + + /* + * "cursor(lnum, col)" function + * +! * Moves the cursor to the specified line and column. +! * Returns 0 when the position could be set, -1 otherwise. + */ + /*ARGSUSED*/ + static void +*************** +*** 9202,9207 **** +--- 9198,9204 ---- + long coladd = 0; + #endif + ++ rettv->vval.v_number = -1; + if (argvars[1].v_type == VAR_UNKNOWN) + { + pos_T pos; +*************** +*** 9246,9251 **** +--- 9243,9249 ---- + #endif + + curwin->w_set_curswant = TRUE; ++ rettv->vval.v_number = 0; + } + + /* +*************** +*** 9291,9298 **** + { + #ifdef FEAT_AUTOCMD + rettv->vval.v_number = did_filetype; +- #else +- rettv->vval.v_number = 0; + #endif + } + +--- 9289,9294 ---- +*************** +*** 9605,9611 **** + typval_T *argvars; + typval_T *rettv; + { +- rettv->vval.v_number = 0; + if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST) + { + list_T *l1, *l2; +--- 9601,9606 ---- +*************** +*** 9733,9739 **** + if (check_secure()) + return; + +- rettv->vval.v_number = 0; + keys = get_tv_string(&argvars[0]); + if (*keys != NUL) + { +--- 9728,9733 ---- +*************** +*** 9901,9907 **** + char_u *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()"; + int save_did_emsg; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type == VAR_LIST) + { + if ((l = argvars[0].vval.v_list) == NULL +--- 9895,9900 ---- +*************** +*** 10084,10091 **** + else + rettv->vval.v_number = (varnumber_T)f; + } +- else +- rettv->vval.v_number = 0; + } + + /* +--- 10077,10082 ---- +*************** +*** 10219,10227 **** + lnum = get_tv_lnum(argvars); + if (lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count) + rettv->vval.v_number = foldLevel(lnum); +- else + #endif +- rettv->vval.v_number = 0; + } + + /* +--- 10210,10216 ---- +*************** +*** 10337,10343 **** + typval_T *argvars; + typval_T *rettv; + { +- rettv->vval.v_number = 0; + #ifdef FEAT_GUI + if (gui.in_use) + gui_mch_set_foreground(); +--- 10326,10331 ---- +*************** +*** 10359,10365 **** + { + char_u *s; + +- rettv->vval.v_number = 0; + s = get_tv_string(&argvars[0]); + if (s == NULL || *s == NUL || VIM_ISDIGIT(*s)) + EMSG2(_(e_invarg2), s); +--- 10347,10352 ---- +*************** +*** 10429,10437 **** + + if (tv == NULL) + { +! if (argvars[2].v_type == VAR_UNKNOWN) +! rettv->vval.v_number = 0; +! else + copy_tv(&argvars[2], rettv); + } + else +--- 10416,10422 ---- + + if (tv == NULL) + { +! if (argvars[2].v_type != VAR_UNKNOWN) + copy_tv(&argvars[2], rettv); + } + else +*************** +*** 10456,10468 **** + { + char_u *p; + +! if (retlist) +! { +! if (rettv_list_alloc(rettv) == FAIL) +! return; +! } +! else +! rettv->vval.v_number = 0; + + if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0) + return; +--- 10441,10448 ---- + { + char_u *p; + +! if (retlist && rettv_list_alloc(rettv) == FAIL) +! return; + + if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0) + return; +*************** +*** 11009,11016 **** + dict_T *dict; + matchitem_T *cur = curwin->w_match_head; + +- rettv->vval.v_number = 0; +- + if (rettv_list_alloc(rettv) == OK) + { + while (cur != NULL) +--- 10989,10994 ---- +*************** +*** 11089,11095 **** + win_T *wp; + #endif + +- rettv->vval.v_number = 0; + #ifdef FEAT_QUICKFIX + if (rettv_list_alloc(rettv) == OK) + { +--- 11067,11072 ---- +*************** +*** 11935,11941 **** + typval_T *argvars; + typval_T *rettv; + { +- rettv->vval.v_number = 0; + if (argvars[0].v_type != VAR_DICT) + { + EMSG(_(e_dictreq)); +--- 11912,11917 ---- +*************** +*** 12052,12059 **** + n = del_history_entry(get_histtype(str), + get_tv_string_buf(&argvars[1], buf)); + rettv->vval.v_number = n; +- #else +- rettv->vval.v_number = 0; + #endif + } + +--- 12028,12033 ---- +*************** +*** 12415,12421 **** + int selected; + int mouse_used; + +- rettv->vval.v_number = 0; + #ifdef NO_CONSOLE_INPUT + /* While starting up, there is no place to enter text. */ + if (no_console_input()) +--- 12389,12394 ---- +*************** +*** 12464,12470 **** + --ga_userinput.ga_len; + restore_typeahead((tasave_T *)(ga_userinput.ga_data) + + ga_userinput.ga_len); +! rettv->vval.v_number = 0; /* OK */ + } + else if (p_verbose > 1) + { +--- 12437,12443 ---- + --ga_userinput.ga_len; + restore_typeahead((tasave_T *)(ga_userinput.ga_data) + + ga_userinput.ga_len); +! /* default return is zero == OK */ + } + else if (p_verbose > 1) + { +*************** +*** 12488,12494 **** + save_typeahead((tasave_T *)(ga_userinput.ga_data) + + ga_userinput.ga_len); + ++ga_userinput.ga_len; +! rettv->vval.v_number = 0; /* OK */ + } + else + rettv->vval.v_number = 1; /* Failed */ +--- 12461,12467 ---- + save_typeahead((tasave_T *)(ga_userinput.ga_data) + + ga_userinput.ga_len); + ++ga_userinput.ga_len; +! /* default return is zero == OK */ + } + else + rettv->vval.v_number = 1; /* Failed */ +*************** +*** 12522,12528 **** + list_T *l; + int error = FALSE; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type != VAR_LIST) + EMSG2(_(e_listarg), "insert()"); + else if ((l = argvars[0].vval.v_list) != NULL +--- 12495,12500 ---- +*************** +*** 12641,12647 **** + dict_T *d; + int todo; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type != VAR_DICT) + { + EMSG(_(e_dictreq)); +--- 12613,12618 ---- +*************** +*** 12729,12735 **** + garray_T ga; + char_u *sep; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type != VAR_LIST) + { + EMSG(_(e_listreq)); +--- 12700,12705 ---- +*************** +*** 12827,12835 **** + #endif + + rettv->v_type = type; +! if (type == VAR_NUMBER) +! rettv->vval.v_number = 0; +! else + rettv->vval.v_string = NULL; + + if (check_restricted() || check_secure()) +--- 12797,12803 ---- + #endif + + rettv->v_type = type; +! if (type != VAR_NUMBER) + rettv->vval.v_string = NULL; + + if (check_restricted() || check_secure()) +*************** +*** 13770,13776 **** + typval_T *argvars; + typval_T *rettv; + { +- rettv->vval.v_number = 0; + #ifdef FEAT_INS_EXPAND + if (pum_visible()) + rettv->vval.v_number = 1; +--- 13738,13743 ---- +*************** +*** 13804,13810 **** + stride = get_tv_number_chk(&argvars[2], &error); + } + +- rettv->vval.v_number = 0; + if (error) + return; /* type error; errmsg already given */ + if (stride == 0) +--- 13771,13776 ---- +*************** +*** 14193,14199 **** + typval_T *argvars; + typval_T *rettv; + { +- rettv->vval.v_number = 0; + #ifdef FEAT_CLIENTSERVER + # ifdef WIN32 + /* On Win32 it's done in this application. */ +--- 14159,14164 ---- +*************** +*** 14249,14255 **** + rettv->vval.v_number = (s != NULL); + } + # else +- rettv->vval.v_number = 0; + if (check_connection() == FAIL) + return; + +--- 14214,14219 ---- +*************** +*** 14338,14344 **** + dict_T *d; + dictitem_T *di; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type == VAR_DICT) + { + if (argvars[2].v_type != VAR_UNKNOWN) +--- 14302,14307 ---- +*************** +*** 14696,14702 **** + list_T *l; + listitem_T *li, *ni; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type != VAR_LIST) + EMSG2(_(e_listarg), "reverse()"); + else if ((l = argvars[0].vval.v_list) != NULL +--- 14659,14664 ---- +*************** +*** 15048,15055 **** + int lnum = 0; + int col = 0; + +- rettv->vval.v_number = 0; +- + if (rettv_list_alloc(rettv) == FAIL) + return; + +--- 15010,15015 ---- +*************** +*** 15236,15243 **** + int n; + int flags = 0; + +- rettv->vval.v_number = 0; +- + if (rettv_list_alloc(rettv) == FAIL) + return; + +--- 15196,15201 ---- +*************** +*** 15323,15330 **** + typval_T *varp; + char_u nbuf[NUMBUFLEN]; + +- rettv->vval.v_number = 0; +- + if (check_restricted() || check_secure()) + return; + (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ +--- 15281,15286 ---- +*************** +*** 15404,15410 **** + else + line = get_tv_string_chk(&argvars[1]); + +! rettv->vval.v_number = 0; /* OK */ + for (;;) + { + if (l != NULL) +--- 15360,15366 ---- + else + line = get_tv_string_chk(&argvars[1]); + +! /* default result is zero == OK */ + for (;;) + { + if (l != NULL) +*************** +*** 15717,15722 **** +--- 15673,15679 ---- + /* + * "setwinvar()" and "settabwinvar()" functions + */ ++ /*ARGSUSED*/ + static void + setwinvar(argvars, rettv, off) + typval_T *argvars; +*************** +*** 15733,15740 **** + char_u nbuf[NUMBUFLEN]; + tabpage_T *tp; + +- rettv->vval.v_number = 0; +- + if (check_restricted() || check_secure()) + return; + +--- 15690,15695 ---- +*************** +*** 15947,15953 **** + long len; + long i; + +- rettv->vval.v_number = 0; + if (argvars[0].v_type != VAR_LIST) + EMSG2(_(e_listarg), "sort()"); + else +--- 15902,15907 ---- +*************** +*** 16870,16878 **** + typval_T *argvars; + typval_T *rettv; + { +! #ifndef FEAT_WINDOWS +! rettv->vval.v_number = 0; +! #else + tabpage_T *tp; + win_T *wp = NULL; + +--- 16824,16830 ---- + typval_T *argvars; + typval_T *rettv; + { +! #ifdef FEAT_WINDOWS + tabpage_T *tp; + win_T *wp = NULL; + +*************** +*** 16884,16902 **** + if (tp != NULL) + wp = (tp == curtab) ? firstwin : tp->tp_firstwin; + } +! if (wp == NULL) +! rettv->vval.v_number = 0; +! else + { +! if (rettv_list_alloc(rettv) == FAIL) +! rettv->vval.v_number = 0; +! else +! { +! for (; wp != NULL; wp = wp->w_next) +! if (list_append_number(rettv->vval.v_list, + wp->w_buffer->b_fnum) == FAIL) +! break; +! } + } + #endif + } +--- 16836,16847 ---- + if (tp != NULL) + wp = (tp == curtab) ? firstwin : tp->tp_firstwin; + } +! if (wp != NULL && rettv_list_alloc(rettv) != FAIL) + { +! for (; wp != NULL; wp = wp->w_next) +! if (list_append_number(rettv->vval.v_list, + wp->w_buffer->b_fnum) == FAIL) +! break; + } + #endif + } +*************** +*** 17024,17033 **** + int first; + + if (rettv_list_alloc(rettv) == FAIL) +- { +- rettv->vval.v_number = 0; + return; +- } + + for (first = TRUE; ; first = FALSE) + if (get_tagfname(&tn, first, fname) == FAIL +--- 16969,16975 ---- +*************** +*** 17401,17408 **** + /* A non-zero number or non-empty string argument: reset mode. */ + if (non_zero_arg(&argvars[0])) + curbuf->b_visual_mode_eval = NUL; +- #else +- rettv->vval.v_number = 0; /* return anything, it won't work anyway */ + #endif + } + +--- 17343,17348 ---- +*** ../vim-7.2.148/src/version.c Wed Mar 18 19:07:09 2009 +--- src/version.c Wed Apr 22 12:44:05 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 149, + /**/ + + +-- +WOMAN: Well, 'ow did you become king then? +ARTHUR: The Lady of the Lake, [angels sing] her arm clad in the purest + shimmering samite, held aloft Excalibur from the bosom of the water + signifying by Divine Providence that I, Arthur, was to carry + Excalibur. [singing stops] That is why I am your king! + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.150 b/7.2.150 new file mode 100644 index 00000000..f2b1174e --- /dev/null +++ b/7.2.150 @@ -0,0 +1,1325 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.150 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Note: I haven't tested this myself, since I don't have a compiler that +works for this code. + +Patch 7.2.150 (extra) +Problem: Can't use tab pages from VisVim. +Solution: Add tab page support to VisVim. (Adam Slater) +Files: src/VisVim/Commands.cpp, src/VisVim/Resource.h, + src/VisVim/VisVim.rc + + +*** ../vim-7.2.149/src/VisVim/Commands.cpp Thu May 10 20:45:34 2007 +--- src/VisVim/Commands.cpp Mon Mar 2 00:52:15 2009 +*************** +*** 20,39 **** + + static BOOL g_bEnableVim = TRUE; // Vim enabled + static BOOL g_bDevStudioEditor = FALSE; // Open file in Dev Studio editor simultaneously + static int g_ChangeDir = CD_NONE; // CD after file open? + +! static void VimSetEnableState (BOOL bEnableState); +! static BOOL VimOpenFile (BSTR& FileName, long LineNr); +! static DISPID VimGetDispatchId (COleAutomationControl& VimOle, char* Method); +! static void VimErrDiag (COleAutomationControl& VimOle); +! static void VimChangeDir (COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName); +! static void DebugMsg (char* Msg, char* Arg = NULL); + + + ///////////////////////////////////////////////////////////////////////////// + // CCommands + +! CCommands::CCommands () + { + // m_pApplication == NULL; M$ Code generation bug!!! + m_pApplication = NULL; +--- 20,40 ---- + + static BOOL g_bEnableVim = TRUE; // Vim enabled + static BOOL g_bDevStudioEditor = FALSE; // Open file in Dev Studio editor simultaneously ++ static BOOL g_bNewTabs = FALSE; + static int g_ChangeDir = CD_NONE; // CD after file open? + +! static void VimSetEnableState(BOOL bEnableState); +! static BOOL VimOpenFile(BSTR& FileName, long LineNr); +! static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method); +! static void VimErrDiag(COleAutomationControl& VimOle); +! static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName); +! static void DebugMsg(char* Msg, char* Arg = NULL); + + + ///////////////////////////////////////////////////////////////////////////// + // CCommands + +! CCommands::CCommands() + { + // m_pApplication == NULL; M$ Code generation bug!!! + m_pApplication = NULL; +*************** +*** 41,57 **** + m_pDebuggerEventsObj = NULL; + } + +! CCommands::~CCommands () + { +! ASSERT (m_pApplication != NULL); + if (m_pApplication) + { +! m_pApplication->Release (); + m_pApplication = NULL; + } + } + +! void CCommands::SetApplicationObject (IApplication * pApplication) + { + // This function assumes pApplication has already been AddRef'd + // for us, which CDSAddIn did in it's QueryInterface call +--- 42,58 ---- + m_pDebuggerEventsObj = NULL; + } + +! CCommands::~CCommands() + { +! ASSERT(m_pApplication != NULL); + if (m_pApplication) + { +! m_pApplication->Release(); + m_pApplication = NULL; + } + } + +! void CCommands::SetApplicationObject(IApplication * pApplication) + { + // This function assumes pApplication has already been AddRef'd + // for us, which CDSAddIn did in it's QueryInterface call +*************** +*** 61,115 **** + return; + + // Create Application event handlers +! XApplicationEventsObj::CreateInstance (&m_pApplicationEventsObj); + if (! m_pApplicationEventsObj) + { +! ReportInternalError ("XApplicationEventsObj::CreateInstance"); + return; + } +! m_pApplicationEventsObj->AddRef (); +! m_pApplicationEventsObj->Connect (m_pApplication); + m_pApplicationEventsObj->m_pCommands = this; + + #ifdef NEVER + // Create Debugger event handler + CComPtr < IDispatch > pDebugger; +! if (SUCCEEDED (m_pApplication->get_Debugger (&pDebugger)) + && pDebugger != NULL) + { +! XDebuggerEventsObj::CreateInstance (&m_pDebuggerEventsObj); +! m_pDebuggerEventsObj->AddRef (); +! m_pDebuggerEventsObj->Connect (pDebugger); + m_pDebuggerEventsObj->m_pCommands = this; + } + #endif + + // Get settings from registry HKEY_CURRENT_USER\Software\Vim\VisVim +! HKEY hAppKey = GetAppKey ("Vim"); + if (hAppKey) + { +! HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim"); + if (hSectionKey) + { +! g_bEnableVim = GetRegistryInt (hSectionKey, "EnableVim", + g_bEnableVim); +! g_bDevStudioEditor = GetRegistryInt(hSectionKey,"DevStudioEditor", +! g_bDevStudioEditor); +! g_ChangeDir = GetRegistryInt (hSectionKey, "ChangeDir", + g_ChangeDir); +! RegCloseKey (hSectionKey); + } +! RegCloseKey (hAppKey); + } + } + +! void CCommands::UnadviseFromEvents () + { +! ASSERT (m_pApplicationEventsObj != NULL); + if (m_pApplicationEventsObj) + { +! m_pApplicationEventsObj->Disconnect (m_pApplication); +! m_pApplicationEventsObj->Release (); + m_pApplicationEventsObj = NULL; + } + +--- 62,118 ---- + return; + + // Create Application event handlers +! XApplicationEventsObj::CreateInstance(&m_pApplicationEventsObj); + if (! m_pApplicationEventsObj) + { +! ReportInternalError("XApplicationEventsObj::CreateInstance"); + return; + } +! m_pApplicationEventsObj->AddRef(); +! m_pApplicationEventsObj->Connect(m_pApplication); + m_pApplicationEventsObj->m_pCommands = this; + + #ifdef NEVER + // Create Debugger event handler + CComPtr < IDispatch > pDebugger; +! if (SUCCEEDED(m_pApplication->get_Debugger(&pDebugger)) + && pDebugger != NULL) + { +! XDebuggerEventsObj::CreateInstance(&m_pDebuggerEventsObj); +! m_pDebuggerEventsObj->AddRef(); +! m_pDebuggerEventsObj->Connect(pDebugger); + m_pDebuggerEventsObj->m_pCommands = this; + } + #endif + + // Get settings from registry HKEY_CURRENT_USER\Software\Vim\VisVim +! HKEY hAppKey = GetAppKey("Vim"); + if (hAppKey) + { +! HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim"); + if (hSectionKey) + { +! g_bEnableVim = GetRegistryInt(hSectionKey, "EnableVim", + g_bEnableVim); +! g_bDevStudioEditor = GetRegistryInt(hSectionKey, +! "DevStudioEditor", g_bDevStudioEditor); +! g_bNewTabs = GetRegistryInt(hSectionKey, "NewTabs", +! g_bNewTabs); +! g_ChangeDir = GetRegistryInt(hSectionKey, "ChangeDir", + g_ChangeDir); +! RegCloseKey(hSectionKey); + } +! RegCloseKey(hAppKey); + } + } + +! void CCommands::UnadviseFromEvents() + { +! ASSERT(m_pApplicationEventsObj != NULL); + if (m_pApplicationEventsObj) + { +! m_pApplicationEventsObj->Disconnect(m_pApplication); +! m_pApplicationEventsObj->Release(); + m_pApplicationEventsObj = NULL; + } + +*************** +*** 121,130 **** + // unadvise from its events (thus the VERIFY_OK below--see + // stdafx.h). + CComPtr < IDispatch > pDebugger; +! VERIFY_OK (m_pApplication->get_Debugger (&pDebugger)); +! ASSERT (pDebugger != NULL); +! m_pDebuggerEventsObj->Disconnect (pDebugger); +! m_pDebuggerEventsObj->Release (); + m_pDebuggerEventsObj = NULL; + } + #endif +--- 124,133 ---- + // unadvise from its events (thus the VERIFY_OK below--see + // stdafx.h). + CComPtr < IDispatch > pDebugger; +! VERIFY_OK(m_pApplication->get_Debugger(&pDebugger)); +! ASSERT(pDebugger != NULL); +! m_pDebuggerEventsObj->Disconnect(pDebugger); +! m_pDebuggerEventsObj->Release(); + m_pDebuggerEventsObj = NULL; + } + #endif +*************** +*** 136,156 **** + + // Application events + +! HRESULT CCommands::XApplicationEvents::BeforeBuildStart () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::BuildFinish (long nNumErrors, long nNumWarnings) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +--- 139,159 ---- + + // Application events + +! HRESULT CCommands::XApplicationEvents::BeforeBuildStart() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::BuildFinish(long nNumErrors, long nNumWarnings) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::BeforeApplicationShutDown() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +*************** +*** 158,166 **** + // is done. + // Vim gets called from here. + // +! HRESULT CCommands::XApplicationEvents::DocumentOpen (IDispatch * theDocument) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + + if (! g_bEnableVim) + // Vim not enabled or empty command line entered +--- 161,169 ---- + // is done. + // Vim gets called from here. + // +! HRESULT CCommands::XApplicationEvents::DocumentOpen(IDispatch * theDocument) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + + if (! g_bEnableVim) + // Vim not enabled or empty command line entered +*************** +*** 169,175 **** + // First get the current file name and line number + + // Get the document object +! CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (theDocument); + if (! pDoc) + return S_OK; + +--- 172,178 ---- + // First get the current file name and line number + + // Get the document object +! CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument); + if (! pDoc) + return S_OK; + +*************** +*** 177,202 **** + long LineNr = -1; + + // Get the document name +! if (FAILED (pDoc->get_FullName (&FileName))) + return S_OK; + + LPDISPATCH pDispSel; + + // Get a selection object dispatch pointer +! if (SUCCEEDED (pDoc->get_Selection (&pDispSel))) + { + // Get the selection object +! CComQIPtr < ITextSelection, &IID_ITextSelection > pSel (pDispSel); + + if (pSel) + // Get the selection line number +! pSel->get_CurrentLine (&LineNr); + +! pDispSel->Release (); + } + + // Open the file in Vim and position to the current line +! if (VimOpenFile (FileName, LineNr)) + { + if (! g_bDevStudioEditor) + { +--- 180,205 ---- + long LineNr = -1; + + // Get the document name +! if (FAILED(pDoc->get_FullName(&FileName))) + return S_OK; + + LPDISPATCH pDispSel; + + // Get a selection object dispatch pointer +! if (SUCCEEDED(pDoc->get_Selection(&pDispSel))) + { + // Get the selection object +! CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel); + + if (pSel) + // Get the selection line number +! pSel->get_CurrentLine(&LineNr); + +! pDispSel->Release(); + } + + // Open the file in Vim and position to the current line +! if (VimOpenFile(FileName, LineNr)) + { + if (! g_bDevStudioEditor) + { +*************** +*** 204,233 **** + CComVariant vSaveChanges = dsSaveChangesPrompt; + DsSaveStatus Saved; + +! pDoc->Close (vSaveChanges, &Saved); + } + } + + // We're done here +! SysFreeString (FileName); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::BeforeDocumentClose (IDispatch * theDocument) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::DocumentSave (IDispatch * theDocument) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::NewDocument (IDispatch * theDocument) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + + if (! g_bEnableVim) + // Vim not enabled or empty command line entered +--- 207,236 ---- + CComVariant vSaveChanges = dsSaveChangesPrompt; + DsSaveStatus Saved; + +! pDoc->Close(vSaveChanges, &Saved); + } + } + + // We're done here +! SysFreeString(FileName); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::BeforeDocumentClose(IDispatch * theDocument) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::DocumentSave(IDispatch * theDocument) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::NewDocument(IDispatch * theDocument) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + + if (! g_bEnableVim) + // Vim not enabled or empty command line entered +*************** +*** 235,253 **** + + // First get the current file name and line number + +! CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (theDocument); + if (! pDoc) + return S_OK; + + BSTR FileName; + HRESULT hr; + +! hr = pDoc->get_FullName (&FileName); +! if (FAILED (hr)) + return S_OK; + + // Open the file in Vim and position to the current line +! if (VimOpenFile (FileName, 0)) + { + if (! g_bDevStudioEditor) + { +--- 238,256 ---- + + // First get the current file name and line number + +! CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(theDocument); + if (! pDoc) + return S_OK; + + BSTR FileName; + HRESULT hr; + +! hr = pDoc->get_FullName(&FileName); +! if (FAILED(hr)) + return S_OK; + + // Open the file in Vim and position to the current line +! if (VimOpenFile(FileName, 0)) + { + if (! g_bDevStudioEditor) + { +*************** +*** 255,303 **** + CComVariant vSaveChanges = dsSaveChangesPrompt; + DsSaveStatus Saved; + +! pDoc->Close (vSaveChanges, &Saved); + } + } + +! SysFreeString (FileName); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WindowActivate (IDispatch * theWindow) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WindowDeactivate (IDispatch * theWindow) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WorkspaceOpen () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WorkspaceClose () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::NewWorkspace () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + + // Debugger event + +! HRESULT CCommands::XDebuggerEvents::BreakpointHit (IDispatch * pBreakpoint) + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + return S_OK; + } + +--- 258,306 ---- + CComVariant vSaveChanges = dsSaveChangesPrompt; + DsSaveStatus Saved; + +! pDoc->Close(vSaveChanges, &Saved); + } + } + +! SysFreeString(FileName); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WindowActivate(IDispatch * theWindow) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WindowDeactivate(IDispatch * theWindow) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WorkspaceOpen() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::WorkspaceClose() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +! HRESULT CCommands::XApplicationEvents::NewWorkspace() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + + // Debugger event + +! HRESULT CCommands::XDebuggerEvents::BreakpointHit(IDispatch * pBreakpoint) + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + return S_OK; + } + +*************** +*** 308,324 **** + class CMainDialog : public CDialog + { + public: +! CMainDialog (CWnd * pParent = NULL); // Standard constructor + + //{{AFX_DATA(CMainDialog) + enum { IDD = IDD_ADDINMAIN }; + int m_ChangeDir; + BOOL m_bDevStudioEditor; + //}}AFX_DATA + + //{{AFX_VIRTUAL(CMainDialog) + protected: +! virtual void DoDataExchange (CDataExchange * pDX); // DDX/DDV support + //}}AFX_VIRTUAL + + protected: +--- 311,328 ---- + class CMainDialog : public CDialog + { + public: +! CMainDialog(CWnd * pParent = NULL); // Standard constructor + + //{{AFX_DATA(CMainDialog) + enum { IDD = IDD_ADDINMAIN }; + int m_ChangeDir; + BOOL m_bDevStudioEditor; ++ BOOL m_bNewTabs; + //}}AFX_DATA + + //{{AFX_VIRTUAL(CMainDialog) + protected: +! virtual void DoDataExchange(CDataExchange * pDX); // DDX/DDV support + //}}AFX_VIRTUAL + + protected: +*************** +*** 326,425 **** + afx_msg void OnEnable(); + afx_msg void OnDisable(); + //}}AFX_MSG +! DECLARE_MESSAGE_MAP () + }; + +! CMainDialog::CMainDialog (CWnd * pParent /* =NULL */ ) +! : CDialog (CMainDialog::IDD, pParent) + { + //{{AFX_DATA_INIT(CMainDialog) + m_ChangeDir = -1; + m_bDevStudioEditor = FALSE; + //}}AFX_DATA_INIT + } + +! void CMainDialog::DoDataExchange (CDataExchange * pDX) + { +! CDialog::DoDataExchange (pDX); + //{{AFX_DATA_MAP(CMainDialog) + DDX_Radio(pDX, IDC_CD_SOURCE_PATH, m_ChangeDir); +! DDX_Check (pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor); + //}}AFX_DATA_MAP + } + +! BEGIN_MESSAGE_MAP (CMainDialog, CDialog) + //{{AFX_MSG_MAP(CMainDialog) + //}}AFX_MSG_MAP +! END_MESSAGE_MAP () + + + ///////////////////////////////////////////////////////////////////////////// + // CCommands methods + +! STDMETHODIMP CCommands::VisVimDialog () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + + // Use m_pApplication to access the Developer Studio Application + // object, + // and VERIFY_OK to see error strings in DEBUG builds of your add-in + // (see stdafx.h) + +! VERIFY_OK (m_pApplication->EnableModeless (VARIANT_FALSE)); + + CMainDialog Dlg; + + Dlg.m_bDevStudioEditor = g_bDevStudioEditor; + Dlg.m_ChangeDir = g_ChangeDir; +! if (Dlg.DoModal () == IDOK) + { + g_bDevStudioEditor = Dlg.m_bDevStudioEditor; + g_ChangeDir = Dlg.m_ChangeDir; + + // Save settings to registry HKEY_CURRENT_USER\Software\Vim\VisVim +! HKEY hAppKey = GetAppKey ("Vim"); + if (hAppKey) + { +! HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim"); + if (hSectionKey) + { +! WriteRegistryInt (hSectionKey, "DevStudioEditor", + g_bDevStudioEditor); +! WriteRegistryInt (hSectionKey, "ChangeDir", g_ChangeDir); +! RegCloseKey (hSectionKey); + } +! RegCloseKey (hAppKey); + } + } + +! VERIFY_OK (m_pApplication->EnableModeless (VARIANT_TRUE)); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimEnable () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); +! VimSetEnableState (true); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimDisable () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); +! VimSetEnableState (false); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimToggle () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); +! VimSetEnableState (! g_bEnableVim); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimLoad () + { +! AFX_MANAGE_STATE (AfxGetStaticModuleState ()); + + // Use m_pApplication to access the Developer Studio Application object, + // and VERIFY_OK to see error strings in DEBUG builds of your add-in +--- 330,435 ---- + afx_msg void OnEnable(); + afx_msg void OnDisable(); + //}}AFX_MSG +! DECLARE_MESSAGE_MAP() + }; + +! CMainDialog::CMainDialog(CWnd * pParent /* =NULL */ ) +! : CDialog(CMainDialog::IDD, pParent) + { + //{{AFX_DATA_INIT(CMainDialog) + m_ChangeDir = -1; + m_bDevStudioEditor = FALSE; ++ m_bNewTabs = FALSE; + //}}AFX_DATA_INIT + } + +! void CMainDialog::DoDataExchange(CDataExchange * pDX) + { +! CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CMainDialog) + DDX_Radio(pDX, IDC_CD_SOURCE_PATH, m_ChangeDir); +! DDX_Check(pDX, IDC_DEVSTUDIO_EDITOR, m_bDevStudioEditor); +! DDX_Check(pDX, IDC_NEW_TABS, m_bNewTabs); + //}}AFX_DATA_MAP + } + +! BEGIN_MESSAGE_MAP(CMainDialog, CDialog) + //{{AFX_MSG_MAP(CMainDialog) + //}}AFX_MSG_MAP +! END_MESSAGE_MAP() + + + ///////////////////////////////////////////////////////////////////////////// + // CCommands methods + +! STDMETHODIMP CCommands::VisVimDialog() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + + // Use m_pApplication to access the Developer Studio Application + // object, + // and VERIFY_OK to see error strings in DEBUG builds of your add-in + // (see stdafx.h) + +! VERIFY_OK(m_pApplication->EnableModeless(VARIANT_FALSE)); + + CMainDialog Dlg; + + Dlg.m_bDevStudioEditor = g_bDevStudioEditor; ++ Dlg.m_bNewTabs = g_bNewTabs; + Dlg.m_ChangeDir = g_ChangeDir; +! if (Dlg.DoModal() == IDOK) + { + g_bDevStudioEditor = Dlg.m_bDevStudioEditor; ++ g_bNewTabs = Dlg.m_bNewTabs; + g_ChangeDir = Dlg.m_ChangeDir; + + // Save settings to registry HKEY_CURRENT_USER\Software\Vim\VisVim +! HKEY hAppKey = GetAppKey("Vim"); + if (hAppKey) + { +! HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim"); + if (hSectionKey) + { +! WriteRegistryInt(hSectionKey, "DevStudioEditor", + g_bDevStudioEditor); +! WriteRegistryInt(hSectionKey, "NewTabs", +! g_bNewTabs); +! WriteRegistryInt(hSectionKey, "ChangeDir", g_ChangeDir); +! RegCloseKey(hSectionKey); + } +! RegCloseKey(hAppKey); + } + } + +! VERIFY_OK(m_pApplication->EnableModeless(VARIANT_TRUE)); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimEnable() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); +! VimSetEnableState(true); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimDisable() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); +! VimSetEnableState(false); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimToggle() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); +! VimSetEnableState(! g_bEnableVim); + return S_OK; + } + +! STDMETHODIMP CCommands::VisVimLoad() + { +! AFX_MANAGE_STATE(AfxGetStaticModuleState()); + + // Use m_pApplication to access the Developer Studio Application object, + // and VERIFY_OK to see error strings in DEBUG builds of your add-in +*************** +*** 430,436 **** + CComPtr < IDispatch > pDispDoc, pDispSel; + + // Get a document object dispatch pointer +! VERIFY_OK (m_pApplication->get_ActiveDocument (&pDispDoc)); + if (! pDispDoc) + return S_OK; + +--- 440,446 ---- + CComPtr < IDispatch > pDispDoc, pDispSel; + + // Get a document object dispatch pointer +! VERIFY_OK(m_pApplication->get_ActiveDocument(&pDispDoc)); + if (! pDispDoc) + return S_OK; + +*************** +*** 438,467 **** + long LineNr = -1; + + // Get the document object +! CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc (pDispDoc); + + if (! pDoc) + return S_OK; + + // Get the document name +! if (FAILED (pDoc->get_FullName (&FileName))) + return S_OK; + + // Get a selection object dispatch pointer +! if (SUCCEEDED (pDoc->get_Selection (&pDispSel))) + { + // Get the selection object +! CComQIPtr < ITextSelection, &IID_ITextSelection > pSel (pDispSel); + + if (pSel) + // Get the selection line number +! pSel->get_CurrentLine (&LineNr); + } + + // Open the file in Vim +! VimOpenFile (FileName, LineNr); + +! SysFreeString (FileName); + return S_OK; + } + +--- 448,477 ---- + long LineNr = -1; + + // Get the document object +! CComQIPtr < ITextDocument, &IID_ITextDocument > pDoc(pDispDoc); + + if (! pDoc) + return S_OK; + + // Get the document name +! if (FAILED(pDoc->get_FullName(&FileName))) + return S_OK; + + // Get a selection object dispatch pointer +! if (SUCCEEDED(pDoc->get_Selection(&pDispSel))) + { + // Get the selection object +! CComQIPtr < ITextSelection, &IID_ITextSelection > pSel(pDispSel); + + if (pSel) + // Get the selection line number +! pSel->get_CurrentLine(&LineNr); + } + + // Open the file in Vim +! VimOpenFile(FileName, LineNr); + +! SysFreeString(FileName); + return S_OK; + } + +*************** +*** 472,487 **** + + // Set the enable state and save to registry + // +! static void VimSetEnableState (BOOL bEnableState) + { + g_bEnableVim = bEnableState; +! HKEY hAppKey = GetAppKey ("Vim"); + if (hAppKey) + { +! HKEY hSectionKey = GetSectionKey (hAppKey, "VisVim"); + if (hSectionKey) +! WriteRegistryInt (hSectionKey, "EnableVim", g_bEnableVim); +! RegCloseKey (hAppKey); + } + } + +--- 482,497 ---- + + // Set the enable state and save to registry + // +! static void VimSetEnableState(BOOL bEnableState) + { + g_bEnableVim = bEnableState; +! HKEY hAppKey = GetAppKey("Vim"); + if (hAppKey) + { +! HKEY hSectionKey = GetSectionKey(hAppKey, "VisVim"); + if (hSectionKey) +! WriteRegistryInt(hSectionKey, "EnableVim", g_bEnableVim); +! RegCloseKey(hAppKey); + } + } + +*************** +*** 490,496 **** + // letter. + // 'LineNr' must contain a valid line number or 0, e. g. for a new file + // +! static BOOL VimOpenFile (BSTR& FileName, long LineNr) + { + + // OLE automation object for com. with Vim +--- 500,506 ---- + // letter. + // 'LineNr' must contain a valid line number or 0, e. g. for a new file + // +! static BOOL VimOpenFile(BSTR& FileName, long LineNr) + { + + // OLE automation object for com. with Vim +*************** +*** 507,513 **** + // Get a dispatch id for the SendKeys method of Vim; + // enables connection to Vim if necessary + DISPID DispatchId; +! DispatchId = VimGetDispatchId (VimOle, "SendKeys"); + if (! DispatchId) + // OLE error, can't obtain dispatch id + goto OleError; +--- 517,523 ---- + // Get a dispatch id for the SendKeys method of Vim; + // enables connection to Vim if necessary + DISPID DispatchId; +! DispatchId = VimGetDispatchId(VimOle, "SendKeys"); + if (! DispatchId) + // OLE error, can't obtain dispatch id + goto OleError; +*************** +*** 525,544 **** + #ifdef SINGLE_WINDOW + // Update the current file in Vim if it has been modified. + // Disabled, because it could write the file when you don't want to. +! sprintf (VimCmd + 2, ":up\n"); + #endif +! if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf))) + goto OleError; + + // Change Vim working directory to where the file is if desired + if (g_ChangeDir != CD_NONE) +! VimChangeDir (VimOle, DispatchId, FileName); + + // Make Vim open the file. + // In the filename convert all \ to /, put a \ before a space. +! sprintf(VimCmd, ":drop "); + sprintf(FileNameTmp, "%S", (char *)FileName); +- s = VimCmd + 6; + for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4; + ++p) + if (*p == '\\') +--- 535,562 ---- + #ifdef SINGLE_WINDOW + // Update the current file in Vim if it has been modified. + // Disabled, because it could write the file when you don't want to. +! sprintf(VimCmd + 2, ":up\n"); + #endif +! if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf))) + goto OleError; + + // Change Vim working directory to where the file is if desired + if (g_ChangeDir != CD_NONE) +! VimChangeDir(VimOle, DispatchId, FileName); + + // Make Vim open the file. + // In the filename convert all \ to /, put a \ before a space. +! if (g_bNewTabs) +! { +! sprintf(VimCmd, ":tab drop "); +! s = VimCmd + 11; +! } +! else +! { +! sprintf(VimCmd, ":drop "); +! s = VimCmd + 6; +! } + sprintf(FileNameTmp, "%S", (char *)FileName); + for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4; + ++p) + if (*p == '\\') +*************** +*** 552,571 **** + *s++ = '\n'; + *s = '\0'; + +! if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf))) + goto OleError; + + if (LineNr > 0) + { + // Goto line +! sprintf (VimCmd, ":%d\n", LineNr); +! if (! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf))) + goto OleError; + } + + // Make Vim come to the foreground +! if (! VimOle.Method ("SetForeground")) +! VimOle.ErrDiag (); + + // We're done + return true; +--- 570,589 ---- + *s++ = '\n'; + *s = '\0'; + +! if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf))) + goto OleError; + + if (LineNr > 0) + { + // Goto line +! sprintf(VimCmd, ":%d\n", LineNr); +! if (! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf))) + goto OleError; + } + + // Make Vim come to the foreground +! if (! VimOle.Method("SetForeground")) +! VimOle.ErrDiag(); + + // We're done + return true; +*************** +*** 573,579 **** + OleError: + // There was an OLE error + // Check if it's the "unknown class string" error +! VimErrDiag (VimOle); + return false; + } + +--- 591,597 ---- + OleError: + // There was an OLE error + // Check if it's the "unknown class string" error +! VimErrDiag(VimOle); + return false; + } + +*************** +*** 581,598 **** + // Create the Vim OLE object if necessary + // Returns a valid dispatch id or null on error + // +! static DISPID VimGetDispatchId (COleAutomationControl& VimOle, char* Method) + { + // Initialize Vim OLE connection if not already done +! if (! VimOle.IsCreated ()) + { +! if (! VimOle.CreateObject ("Vim.Application")) + return NULL; + } + + // Get the dispatch id for the SendKeys method. + // By doing this, we are checking if Vim is still there... +! DISPID DispatchId = VimOle.GetDispatchId ("SendKeys"); + if (! DispatchId) + { + // We can't get a dispatch id. +--- 599,616 ---- + // Create the Vim OLE object if necessary + // Returns a valid dispatch id or null on error + // +! static DISPID VimGetDispatchId(COleAutomationControl& VimOle, char* Method) + { + // Initialize Vim OLE connection if not already done +! if (! VimOle.IsCreated()) + { +! if (! VimOle.CreateObject("Vim.Application")) + return NULL; + } + + // Get the dispatch id for the SendKeys method. + // By doing this, we are checking if Vim is still there... +! DISPID DispatchId = VimOle.GetDispatchId("SendKeys"); + if (! DispatchId) + { + // We can't get a dispatch id. +*************** +*** 604,615 **** + // should not be kept long enough to allow the user to terminate Vim + // to avoid memory corruption (why the heck is there no system garbage + // collection for those damned OLE memory chunks???). +! VimOle.DeleteObject (); +! if (! VimOle.CreateObject ("Vim.Application")) + // If this create fails, it's time for an error msg + return NULL; + +! if (! (DispatchId = VimOle.GetDispatchId ("SendKeys"))) + // There is something wrong... + return NULL; + } +--- 622,633 ---- + // should not be kept long enough to allow the user to terminate Vim + // to avoid memory corruption (why the heck is there no system garbage + // collection for those damned OLE memory chunks???). +! VimOle.DeleteObject(); +! if (! VimOle.CreateObject("Vim.Application")) + // If this create fails, it's time for an error msg + return NULL; + +! if (! (DispatchId = VimOle.GetDispatchId("SendKeys"))) + // There is something wrong... + return NULL; + } +*************** +*** 620,639 **** + // Output an error message for an OLE error + // Check on the classstring error, which probably means Vim wasn't registered. + // +! static void VimErrDiag (COleAutomationControl& VimOle) + { +! SCODE sc = GetScode (VimOle.GetResult ()); + if (sc == CO_E_CLASSSTRING) + { + char Buf[256]; +! sprintf (Buf, "There is no registered OLE automation server named " + "\"Vim.Application\".\n" + "Use the OLE-enabled version of Vim with VisVim and " + "make sure to register Vim by running \"vim -register\"."); +! MessageBox (NULL, Buf, "OLE Error", MB_OK); + } + else +! VimOle.ErrDiag (); + } + + // Change directory to the directory the file 'FileName' is in or it's parent +--- 638,657 ---- + // Output an error message for an OLE error + // Check on the classstring error, which probably means Vim wasn't registered. + // +! static void VimErrDiag(COleAutomationControl& VimOle) + { +! SCODE sc = GetScode(VimOle.GetResult()); + if (sc == CO_E_CLASSSTRING) + { + char Buf[256]; +! sprintf(Buf, "There is no registered OLE automation server named " + "\"Vim.Application\".\n" + "Use the OLE-enabled version of Vim with VisVim and " + "make sure to register Vim by running \"vim -register\"."); +! MessageBox(NULL, Buf, "OLE Error", MB_OK); + } + else +! VimOle.ErrDiag(); + } + + // Change directory to the directory the file 'FileName' is in or it's parent +*************** +*** 644,650 **** + // CD_SOURCE_PATH + // CD_SOURCE_PARENT + // +! static void VimChangeDir (COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName) + { + // Do a :cd first + +--- 662,668 ---- + // CD_SOURCE_PATH + // CD_SOURCE_PARENT + // +! static void VimChangeDir(COleAutomationControl& VimOle, DISPID DispatchId, BSTR& FileName) + { + // Do a :cd first + +*************** +*** 655,661 **** + char DirUnix[_MAX_DIR * 2]; + char *s, *t; + +! _splitpath (StrFileName, Drive, Dir, NULL, NULL); + + // Convert to Unix path name format, escape spaces. + t = DirUnix; +--- 673,679 ---- + char DirUnix[_MAX_DIR * 2]; + char *s, *t; + +! _splitpath(StrFileName, Drive, Dir, NULL, NULL); + + // Convert to Unix path name format, escape spaces. + t = DirUnix; +*************** +*** 676,694 **** + OLECHAR Buf[MAX_OLE_STR]; + char VimCmd[MAX_OLE_STR]; + +! sprintf (VimCmd, ":cd %s%s%s\n", Drive, DirUnix, + g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : ""); +! VimOle.Method (DispatchId, "s", TO_OLE_STR_BUF (VimCmd, Buf)); + } + + #ifdef _DEBUG + // Print out a debug message + // +! static void DebugMsg (char* Msg, char* Arg) + { + char Buf[400]; +! sprintf (Buf, Msg, Arg); +! AfxMessageBox (Buf); + } + #endif +- +--- 694,711 ---- + OLECHAR Buf[MAX_OLE_STR]; + char VimCmd[MAX_OLE_STR]; + +! sprintf(VimCmd, ":cd %s%s%s\n", Drive, DirUnix, + g_ChangeDir == CD_SOURCE_PARENT && DirUnix[1] ? ".." : ""); +! VimOle.Method(DispatchId, "s", TO_OLE_STR_BUF(VimCmd, Buf)); + } + + #ifdef _DEBUG + // Print out a debug message + // +! static void DebugMsg(char* Msg, char* Arg) + { + char Buf[400]; +! sprintf(Buf, Msg, Arg); +! AfxMessageBox(Buf); + } + #endif +*** ../vim-7.2.149/src/VisVim/Resource.h Sun Jun 13 19:17:32 2004 +--- src/VisVim/Resource.h Mon Mar 2 00:39:21 2009 +*************** +*** 16,21 **** +--- 16,22 ---- + #define IDC_CD_SOURCE_PATH 1001 + #define IDC_CD_SOURCE_PARENT 1002 + #define IDC_CD_NONE 1003 ++ #define IDC_NEW_TABS 1004 + + // Next default values for new objects + // +*** ../vim-7.2.149/src/VisVim/VisVim.rc Sun Jun 13 19:38:03 2004 +--- src/VisVim/VisVim.rc Mon Mar 2 00:40:19 2009 +*************** +*** 122,127 **** +--- 122,130 ---- + CONTROL "&Open file in DevStudio editor simultaneously", + IDC_DEVSTUDIO_EDITOR,"Button",BS_AUTOCHECKBOX | WS_GROUP | + WS_TABSTOP,7,7,153,10 ++ CONTROL "Open files in new tabs", ++ IDC_NEW_TABS,"Button",BS_AUTOCHECKBOX | WS_GROUP | ++ WS_TABSTOP,7,21,153,10 + GROUPBOX "Current directory",IDC_STATIC,7,35,164,58,WS_GROUP + CONTROL "Set to &source file path",IDC_CD_SOURCE_PATH,"Button", + BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,17,49,85,10 +*** ../vim-7.2.149/src/version.c Wed Apr 22 12:53:31 2009 +--- src/version.c Wed Apr 22 13:04:32 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 150, + /**/ + +-- +A poem: read aloud: + +<> !*''# Waka waka bang splat tick tick hash, +^"`$$- Caret quote back-tick dollar dollar dash, +!*=@$_ Bang splat equal at dollar under-score, +%*<> ~#4 Percent splat waka waka tilde number four, +&[]../ Ampersand bracket bracket dot dot slash, +|{,,SYSTEM HALTED Vertical-bar curly-bracket comma comma CRASH. + +Fred Bremmer and Steve Kroese (Calvin College & Seminary of Grand Rapids, MI.) + + /// 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/7.2.151 b/7.2.151 new file mode 100644 index 00000000..214b7609 --- /dev/null +++ b/7.2.151 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.151 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.151 +Problem: ":hist a" doesn't work like ":hist all" as the docs suggest. +Solution: Make ":hist a" and ":hist al" work. (Dominique Pelle) +Files: src/ex_getln.c + + +*** ../vim-7.2.150/src/ex_getln.c Wed Mar 18 12:50:58 2009 +--- src/ex_getln.c Sun Apr 12 13:36:06 2009 +*************** +*** 5686,5692 **** + histype1 = get_histtype(arg); + if (histype1 == -1) + { +! if (STRICMP(arg, "all") == 0) + { + histype1 = 0; + histype2 = HIST_COUNT-1; +--- 5686,5692 ---- + histype1 = get_histtype(arg); + if (histype1 == -1) + { +! if (STRNICMP(arg, "all", STRLEN(arg)) == 0) + { + histype1 = 0; + histype2 = HIST_COUNT-1; +*** ../vim-7.2.150/src/version.c Wed Apr 22 13:06:11 2009 +--- src/version.c Wed Apr 22 13:49:41 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 151, + /**/ + +-- +I'm sure that I asked CBuilder to do a "full" install. Looks like I got +a "fool" install, instead. Charles E Campbell, Jr, PhD + + + /// 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/7.2.152 b/7.2.152 new file mode 100644 index 00000000..107a0a4b --- /dev/null +++ b/7.2.152 @@ -0,0 +1,104 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.152 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.152 +Problem: When using "silent echo x" inside ":redir" a next echo may start + halfway the line. (Tony Mechelynck, Dennis Benzinger) +Solution: Reset msg_col after redirecting silently. +Files: src/ex_docmd.c, src/message.c, src/proto/message.pro + + +*** ../vim-7.2.151/src/ex_docmd.c Wed Mar 18 12:50:58 2009 +--- src/ex_docmd.c Wed Apr 22 11:57:49 2009 +*************** +*** 2699,2704 **** +--- 2699,2709 ---- + /* Restore msg_scroll, it's set by file I/O commands, even when no + * message is actually displayed. */ + msg_scroll = save_msg_scroll; ++ ++ /* "silent reg" or "silent echo x" inside "redir" leaves msg_col ++ * somewhere in the line. Put it back in the first column. */ ++ if (redirecting()) ++ msg_col = 0; + } + + #ifdef HAVE_SANDBOX +*** ../vim-7.2.151/src/message.c Tue Feb 24 04:36:50 2009 +--- src/message.c Sun Apr 12 14:08:25 2009 +*************** +*** 3023,3033 **** + if (*p_vfile != NUL) + verbose_write(s, maxlen); + +! if (redir_fd != NULL +! #ifdef FEAT_EVAL +! || redir_reg || redir_vname +! #endif +! ) + { + /* If the string doesn't start with CR or NL, go to msg_col */ + if (*s != '\n' && *s != '\r') +--- 3023,3029 ---- + if (*p_vfile != NUL) + verbose_write(s, maxlen); + +! if (redirecting()) + { + /* If the string doesn't start with CR or NL, go to msg_col */ + if (*s != '\n' && *s != '\r') +*************** +*** 3074,3079 **** +--- 3070,3085 ---- + } + } + ++ int ++ redirecting() ++ { ++ return redir_fd != NULL ++ #ifdef FEAT_EVAL ++ || redir_reg || redir_vname ++ #endif ++ ; ++ } ++ + /* + * Before giving verbose message. + * Must always be called paired with verbose_leave()! +*** ../vim-7.2.151/src/proto/message.pro Sat May 5 19:35:34 2007 +--- src/proto/message.pro Sun Apr 12 14:08:50 2009 +*************** +*** 54,59 **** +--- 54,60 ---- + void msg_clr_cmdline __ARGS((void)); + int msg_end __ARGS((void)); + void msg_check __ARGS((void)); ++ int redirecting __ARGS((void)); + void verbose_enter __ARGS((void)); + void verbose_leave __ARGS((void)); + void verbose_enter_scroll __ARGS((void)); +*** ../vim-7.2.151/src/version.c Wed Apr 22 13:50:14 2009 +--- src/version.c Wed Apr 22 14:40:22 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 152, + /**/ + +-- +Q: How does a UNIX Guru pick up a girl? +A: look; grep; which; eval; nice; uname; talk; date; + + /// 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/7.2.153 b/7.2.153 new file mode 100644 index 00000000..79b2a077 --- /dev/null +++ b/7.2.153 @@ -0,0 +1,97 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.153 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.153 +Problem: Memory leak for ":recover empty_dir/". +Solution: Free files[] when it becomes empty. (Dominique Pelle) +Files: src/memline.c + + +*** ../vim-7.2.152/src/memline.c Sun Jul 13 19:40:43 2008 +--- src/memline.c Wed Apr 22 11:48:35 2009 +*************** +*** 1554,1563 **** + for (i = 0; i < num_files; ++i) + if (fullpathcmp(p, files[i], TRUE) & FPC_SAME) + { + vim_free(files[i]); +! --num_files; +! for ( ; i < num_files; ++i) +! files[i] = files[i + 1]; + } + } + if (nr > 0) +--- 1554,1568 ---- + for (i = 0; i < num_files; ++i) + if (fullpathcmp(p, files[i], TRUE) & FPC_SAME) + { ++ /* Remove the name from files[i]. Move further entries ++ * down. When the array becomes empty free it here, since ++ * FreeWild() won't be called below. */ + vim_free(files[i]); +! if (--num_files == 0) +! vim_free(files); +! else +! for ( ; i < num_files; ++i) +! files[i] = files[i + 1]; + } + } + if (nr > 0) +*************** +*** 3522,3528 **** + if (errno == EINVAL || errno == ENOENT) + { + /* Found non-symlink or not existing file, stop here. +! * When at the first level use the unmodifed name, skip the + * call to vim_FullName(). */ + if (depth == 1) + return FAIL; +--- 3527,3533 ---- + if (errno == EINVAL || errno == ENOENT) + { + /* Found non-symlink or not existing file, stop here. +! * When at the first level use the unmodified name, skip the + * call to vim_FullName(). */ + if (depth == 1) + return FAIL; +*************** +*** 4560,4566 **** + buf->b_ml.ml_chunksize + curix, + (buf->b_ml.ml_usedchunks - curix) * + sizeof(chunksize_T)); +! /* Compute length of first half of lines in the splitted chunk */ + size = 0; + linecnt = 0; + while (curline < buf->b_ml.ml_line_count +--- 4568,4574 ---- + buf->b_ml.ml_chunksize + curix, + (buf->b_ml.ml_usedchunks - curix) * + sizeof(chunksize_T)); +! /* Compute length of first half of lines in the split chunk */ + size = 0; + linecnt = 0; + while (curline < buf->b_ml.ml_line_count +*** ../vim-7.2.152/src/version.c Wed Apr 22 14:42:26 2009 +--- src/version.c Wed Apr 22 15:34:18 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 153, + /**/ + +-- +Windows +M!uqoms + + /// 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/7.2.154 b/7.2.154 new file mode 100644 index 00000000..73289032 --- /dev/null +++ b/7.2.154 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.154 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.154 (after 7.2.132) +Problem: ":cd" is still possible in a SwapExists autocmd. +Solution: Set allbuf_lock in do_swapexists(). +Files: src/memline.c + + +*** ../vim-7.2.153/src/memline.c Wed Apr 22 15:37:12 2009 +--- src/memline.c Wed Apr 22 15:54:48 2009 +*************** +*** 3771,3778 **** + set_vim_var_string(VV_SWAPCHOICE, NULL, -1); + + /* Trigger SwapExists autocommands with set to the file being +! * edited. */ + apply_autocmds(EVENT_SWAPEXISTS, buf->b_fname, NULL, FALSE, NULL); + + set_vim_var_string(VV_SWAPNAME, NULL, -1); + +--- 3771,3780 ---- + set_vim_var_string(VV_SWAPCHOICE, NULL, -1); + + /* Trigger SwapExists autocommands with set to the file being +! * edited. Disallow changing directory here. */ +! ++allbuf_lock; + apply_autocmds(EVENT_SWAPEXISTS, buf->b_fname, NULL, FALSE, NULL); ++ --allbuf_lock; + + set_vim_var_string(VV_SWAPNAME, NULL, -1); + +*************** +*** 3798,3803 **** +--- 3800,3806 ---- + * + * Note: If BASENAMELEN is not correct, you will get error messages for + * not being able to open the swapfile ++ * Note: May trigger SwapExists autocmd, pointers may change! + */ + static char_u * + findswapname(buf, dirp, old_fname) +*** ../vim-7.2.153/src/version.c Wed Apr 22 15:37:12 2009 +--- src/version.c Wed Apr 22 15:55:48 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 154, + /**/ + +-- +ARTHUR: Be quiet! +DENNIS: Well you can't expect to wield supreme executive power just 'cause + some watery tart threw a sword at you! +ARTHUR: Shut up! +DENNIS: I mean, if I went around sayin' I was an empereror just because some + moistened bint had lobbed a scimitar at me they'd put me away! + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.155 b/7.2.155 new file mode 100644 index 00000000..00b294df --- /dev/null +++ b/7.2.155 @@ -0,0 +1,45 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.155 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.155 +Problem: Memory leak in ":function /pat". +Solution: Free the memory. (Dominique Pelle) +Files: src/eval.c + + +*** ../vim-7.2.154/src/eval.c Wed Apr 22 12:53:31 2009 +--- src/eval.c Wed Apr 22 16:04:34 2009 +*************** +*** 19720,19725 **** +--- 19720,19726 ---- + list_func_head(fp, FALSE); + } + } ++ vim_free(regmatch.regprog); + } + } + if (*p == '/') +*** ../vim-7.2.154/src/version.c Wed Apr 22 15:56:27 2009 +--- src/version.c Wed Apr 22 16:07:27 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 155, + /**/ + +-- +Q: How many hardware engineers does it take to change a lightbulb? +A: None. We'll fix it in software. + + /// 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/7.2.156 b/7.2.156 new file mode 100644 index 00000000..59bb2e9e --- /dev/null +++ b/7.2.156 @@ -0,0 +1,181 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.156 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.156 (after 7.2.143) +Problem: No completion for :scscope and :lcscope commands. +Solution: Implement the completion. (Dominique Pelle) +Files: src/if_cscope.c, src/ex_docmd.c, src/proto/if_cscope.pro + + +*** ../vim-7.2.155/src/if_cscope.c Wed Mar 18 14:30:46 2009 +--- src/if_cscope.c Wed Apr 22 11:57:49 2009 +*************** +*** 98,103 **** +--- 98,104 ---- + static enum + { + EXP_CSCOPE_SUBCMD, /* expand ":cscope" sub-commands */ ++ EXP_SCSCOPE_SUBCMD, /* expand ":scscope" sub-commands */ + EXP_CSCOPE_FIND, /* expand ":cscope find" arguments */ + EXP_CSCOPE_KILL /* expand ":cscope kill" arguments */ + } expand_what; +*************** +*** 112,123 **** +--- 113,135 ---- + expand_T *xp; + int idx; + { ++ int current_idx; ++ int i; ++ + switch (expand_what) + { + case EXP_CSCOPE_SUBCMD: + /* Complete with sub-commands of ":cscope": + * add, find, help, kill, reset, show */ + return (char_u *)cs_cmds[idx].name; ++ case EXP_SCSCOPE_SUBCMD: ++ /* Complete with sub-commands of ":scscope": same sub-commands as ++ * ":cscope" but skip commands which don't support split windows */ ++ for (i = 0, current_idx = 0; cs_cmds[i].name != NULL; i++) ++ if (cs_cmds[i].cansplit) ++ if (current_idx++ == idx) ++ break; ++ return (char_u *)cs_cmds[i].name; + case EXP_CSCOPE_FIND: + { + const char *query_type[] = +*************** +*** 133,147 **** + } + case EXP_CSCOPE_KILL: + { +- int i; +- int current_idx = 0; + static char_u connection[2]; + + /* ":cscope kill" accepts connection numbers or partial names of + * the pathname of the cscope database as argument. Only complete + * with connection numbers. -1 can also be used to kill all + * connections. */ +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname == NULL) + continue; +--- 145,157 ---- + } + case EXP_CSCOPE_KILL: + { + static char_u connection[2]; + + /* ":cscope kill" accepts connection numbers or partial names of + * the pathname of the cscope database as argument. Only complete + * with connection numbers. -1 can also be used to kill all + * connections. */ +! for (i = 0, current_idx = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname == NULL) + continue; +*************** +*** 165,180 **** + * Handle command line completion for :cscope command. + */ + void +! set_context_in_cscope_cmd(xp, arg) + expand_T *xp; + char_u *arg; + { + char_u *p; + + /* Default: expand subcommands */ + xp->xp_context = EXPAND_CSCOPE; +- expand_what = EXP_CSCOPE_SUBCMD; + xp->xp_pattern = arg; + + /* (part of) subcommand already typed */ + if (*arg != NUL) +--- 175,192 ---- + * Handle command line completion for :cscope command. + */ + void +! set_context_in_cscope_cmd(xp, arg, cmdidx) + expand_T *xp; + char_u *arg; ++ cmdidx_T cmdidx; + { + char_u *p; + + /* Default: expand subcommands */ + xp->xp_context = EXPAND_CSCOPE; + xp->xp_pattern = arg; ++ expand_what = (cmdidx == CMD_scscope) ++ ? EXP_SCSCOPE_SUBCMD : EXP_CSCOPE_SUBCMD; + + /* (part of) subcommand already typed */ + if (*arg != NUL) +*** ../vim-7.2.155/src/ex_docmd.c Wed Apr 22 14:42:26 2009 +--- src/ex_docmd.c Wed Apr 22 11:57:49 2009 +*************** +*** 3690,3696 **** + break; + #ifdef FEAT_CSCOPE + case CMD_cscope: +! set_context_in_cscope_cmd(xp, arg); + break; + #endif + #ifdef FEAT_LISTCMDS +--- 3690,3698 ---- + break; + #ifdef FEAT_CSCOPE + case CMD_cscope: +! case CMD_lcscope: +! case CMD_scscope: +! set_context_in_cscope_cmd(xp, arg, ea.cmdidx); + break; + #endif + #ifdef FEAT_LISTCMDS +*** ../vim-7.2.155/src/proto/if_cscope.pro Wed Mar 18 12:50:58 2009 +--- src/proto/if_cscope.pro Wed Apr 22 11:57:49 2009 +*************** +*** 1,6 **** + /* if_cscope.c */ + char_u *get_cscope_name __ARGS((expand_T *xp, int idx)); +! void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg)); + void do_cscope __ARGS((exarg_T *eap)); + void do_scscope __ARGS((exarg_T *eap)); + void do_cstag __ARGS((exarg_T *eap)); +--- 1,6 ---- + /* if_cscope.c */ + char_u *get_cscope_name __ARGS((expand_T *xp, int idx)); +! void set_context_in_cscope_cmd __ARGS((expand_T *xp, char_u *arg, cmdidx_T cmdidx)); + void do_cscope __ARGS((exarg_T *eap)); + void do_scscope __ARGS((exarg_T *eap)); + void do_cstag __ARGS((exarg_T *eap)); +*** ../vim-7.2.155/src/version.c Wed Apr 22 16:07:57 2009 +--- src/version.c Wed Apr 22 16:21:43 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 156, + /**/ + +-- +ARTHUR: Shut up! Will you shut up! +DENNIS: Ah, now we see the violence inherent in the system. +ARTHUR: Shut up! +DENNIS: Oh! Come and see the violence inherent in the system! + HELP! HELP! I'm being repressed! + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.157 b/7.2.157 new file mode 100644 index 00000000..23843145 --- /dev/null +++ b/7.2.157 @@ -0,0 +1,144 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.157 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.157 +Problem: Illegal memory access when searching in path. +Solution: Avoid looking at a byte after end of a string. (Dominique Pelle) +Files: src/search.c + + +*** ../vim-7.2.156/src/search.c Fri Jul 18 12:05:58 2008 +--- src/search.c Wed Apr 22 12:26:19 2009 +*************** +*** 2327,2334 **** + for (col = pos.col; check_prevcol(linep, col, '\\', &col);) + bslcnt++; + } +! /* Only accept a match when 'M' is in 'cpo' or when ecaping is +! * what we expect. */ + if (cpo_bsl || (bslcnt & 1) == match_escaped) + { + if (c == initc) +--- 2336,2343 ---- + for (col = pos.col; check_prevcol(linep, col, '\\', &col);) + bslcnt++; + } +! /* Only accept a match when 'M' is in 'cpo' or when escaping +! * is what we expect. */ + if (cpo_bsl || (bslcnt & 1) == match_escaped) + { + if (c == initc) +*************** +*** 4663,4669 **** + msg_putchar('\n'); /* cursor below last one */ + if (!got_int) /* don't display if 'q' + typed at "--more--" +! mesage */ + { + msg_home_replace_hl(new_fname); + MSG_PUTS(_(" (includes previously listed match)")); +--- 4672,4678 ---- + msg_putchar('\n'); /* cursor below last one */ + if (!got_int) /* don't display if 'q' + typed at "--more--" +! message */ + { + msg_home_replace_hl(new_fname); + MSG_PUTS(_(" (includes previously listed match)")); +*************** +*** 4975,4981 **** + || IObuff[i-2] == '!')))) + IObuff[i++] = ' '; + } +! /* copy as much as posible of the new word */ + if (p - aux >= IOSIZE - i) + p = aux + IOSIZE - i - 1; + STRNCPY(IObuff + i, aux, p - aux); +--- 4984,4990 ---- + || IObuff[i-2] == '!')))) + IObuff[i++] = ' '; + } +! /* copy as much as possible of the new word */ + if (p - aux >= IOSIZE - i) + p = aux + IOSIZE - i - 1; + STRNCPY(IObuff + i, aux, p - aux); +*************** +*** 5010,5016 **** + if (did_show) + msg_putchar('\n'); /* cursor below last one */ + if (!got_int) /* don't display if 'q' typed +! at "--more--" mesage */ + msg_home_replace_hl(curr_fname); + prev_fname = curr_fname; + } +--- 5019,5025 ---- + if (did_show) + msg_putchar('\n'); /* cursor below last one */ + if (!got_int) /* don't display if 'q' typed +! at "--more--" message */ + msg_home_replace_hl(curr_fname); + prev_fname = curr_fname; + } +*************** +*** 5092,5098 **** + } + if (action != ACTION_SHOW) + { +! curwin->w_cursor.col = (colnr_T) (startp - line); + curwin->w_set_curswant = TRUE; + } + +--- 5101,5107 ---- + } + if (action != ACTION_SHOW) + { +! curwin->w_cursor.col = (colnr_T)(startp - line); + curwin->w_set_curswant = TRUE; + } + +*************** +*** 5119,5125 **** + && action == ACTION_EXPAND + && !(compl_cont_status & CONT_SOL) + #endif +! && *(p = startp + 1)) + goto search_line; + } + line_breakcheck(); +--- 5128,5135 ---- + && action == ACTION_EXPAND + && !(compl_cont_status & CONT_SOL) + #endif +! && *startp != NUL +! && *(p = startp + 1) != NUL) + goto search_line; + } + line_breakcheck(); +*** ../vim-7.2.156/src/version.c Wed Apr 22 16:22:44 2009 +--- src/version.c Wed Apr 22 16:39:59 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 157, + /**/ + + +-- +ARTHUR: Bloody peasant! +DENNIS: Oh, what a give away. Did you hear that, did you hear that, eh? + That's what I'm on about -- did you see him repressing me, you saw it + didn't you? + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.158 b/7.2.158 new file mode 100644 index 00000000..87daf24d --- /dev/null +++ b/7.2.158 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.158 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.158 +Problem: Warnings from VisualC compiler. +Solution: Add type casts. (George Reilly) +Files: src/ops.c + + +*** ../vim-7.2.157/src/ops.c Wed Mar 11 16:26:01 2009 +--- src/ops.c Wed Apr 22 13:01:46 2009 +*************** +*** 495,504 **** + block_space_width = non_white_col - oap->start_vcol; + /* We will shift by "total" or "block_space_width", whichever is less. + */ +! shift_amount = (block_space_width < total? block_space_width: total); + + /* The column to which we will shift the text. */ +! destination_col = non_white_col - shift_amount; + + /* Now let's find out how much of the beginning of the line we can + * reuse without modification. */ +--- 495,505 ---- + block_space_width = non_white_col - oap->start_vcol; + /* We will shift by "total" or "block_space_width", whichever is less. + */ +! shift_amount = (block_space_width < (size_t)total +! ? block_space_width : (size_t)total); + + /* The column to which we will shift the text. */ +! destination_col = (colnr_T)(non_white_col - shift_amount); + + /* Now let's find out how much of the beginning of the line we can + * reuse without modification. */ +*** ../vim-7.2.157/src/version.c Wed Apr 22 16:42:24 2009 +--- src/version.c Wed Apr 22 17:42:19 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 158, + /**/ + +-- +ARTHUR: What? +BLACK KNIGHT: None shall pass. +ARTHUR: I have no quarrel with you, good Sir knight, but I must cross + this bridge. +BLACK KNIGHT: Then you shall die. + The Quest for the Holy Grail (Monty Python) + + /// 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/7.2.159 b/7.2.159 new file mode 100644 index 00000000..8d496ad8 --- /dev/null +++ b/7.2.159 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.159 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.159 +Problem: When $x_includes ends up being "NONE" configure fails. +Solution: Check for $x_includes not to be "NONE" (Rainer) +Files: src/auto/configure, src/configure.in + + +*** ../vim-7.2.158/src/auto/configure Mon Mar 2 02:44:54 2009 +--- src/auto/configure Wed Apr 22 14:37:24 2009 +*************** +*** 15519,15525 **** + if test "$enable_multibyte" = "yes"; then + cflags_save=$CFLAGS + ldflags_save=$LDFLAGS +! if test -n "$x_includes" ; then + CFLAGS="$CFLAGS -I$x_includes" + LDFLAGS="$X_LIBS $LDFLAGS -lX11" + { $as_echo "$as_me:$LINENO: checking whether X_LOCALE needed" >&5 +--- 15519,15525 ---- + if test "$enable_multibyte" = "yes"; then + cflags_save=$CFLAGS + ldflags_save=$LDFLAGS +! if test "x$x_includes" != "xNONE" ; then + CFLAGS="$CFLAGS -I$x_includes" + LDFLAGS="$X_LIBS $LDFLAGS -lX11" + { $as_echo "$as_me:$LINENO: checking whether X_LOCALE needed" >&5 +*** ../vim-7.2.158/src/configure.in Mon Mar 2 02:44:54 2009 +--- src/configure.in Wed Apr 22 14:35:57 2009 +*************** +*** 2952,2958 **** + if test "$enable_multibyte" = "yes"; then + cflags_save=$CFLAGS + ldflags_save=$LDFLAGS +! if test -n "$x_includes" ; then + CFLAGS="$CFLAGS -I$x_includes" + LDFLAGS="$X_LIBS $LDFLAGS -lX11" + AC_MSG_CHECKING(whether X_LOCALE needed) +--- 2952,2958 ---- + if test "$enable_multibyte" = "yes"; then + cflags_save=$CFLAGS + ldflags_save=$LDFLAGS +! if test "x$x_includes" != "xNONE" ; then + CFLAGS="$CFLAGS -I$x_includes" + LDFLAGS="$X_LIBS $LDFLAGS -lX11" + AC_MSG_CHECKING(whether X_LOCALE needed) +*** ../vim-7.2.158/src/version.c Wed Apr 22 17:42:53 2009 +--- src/version.c Wed Apr 22 17:49:50 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 159, + /**/ + +-- +"Hegel was right when he said that we learn from history that man can +never learn anything from history." (George Bernard Shaw) + + /// 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/7.2.160 b/7.2.160 new file mode 100644 index 00000000..9ef197d4 --- /dev/null +++ b/7.2.160 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.160 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.160 +Problem: Search pattern not freed on exit when 'rightleft' set. +Solution: Free mr_pattern_alloced. +Files: src/search.c + + +*** ../vim-7.2.159/src/search.c Wed Apr 22 16:42:24 2009 +--- src/search.c Wed Apr 22 12:26:19 2009 +*************** +*** 345,350 **** +--- 345,359 ---- + { + vim_free(spats[0].pat); + vim_free(spats[1].pat); ++ ++ # ifdef FEAT_RIGHTLEFT ++ if (mr_pattern_alloced) ++ { ++ vim_free(mr_pattern); ++ mr_pattern_alloced = FALSE; ++ mr_pattern = NULL; ++ } ++ # endif + } + #endif + +*** ../vim-7.2.159/src/version.c Wed Apr 22 17:50:53 2009 +--- src/version.c Wed Apr 22 18:42:25 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 160, + /**/ + +-- + f y cn rd ths thn y cn hv grt jb n cmptr prgrmmng + + /// 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/7.2.161 b/7.2.161 new file mode 100644 index 00000000..576a03da --- /dev/null +++ b/7.2.161 @@ -0,0 +1,205 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.161 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.161 +Problem: Folds messed up in other tab page. (Vlad Irnov) +Solution: Instead of going over all windows in current tab page go over all + windows in all tab pages. Also free memory for location lists in + other tab pages when exiting. (Lech Lorens) +Files: src/fileio.c, src/mark.c, src/misc1.c, src/misc2.c + + +*** ../vim-7.2.160/src/fileio.c Wed Mar 18 15:40:03 2009 +--- src/fileio.c Wed Apr 22 15:46:35 2009 +*************** +*** 6846,6855 **** + #endif + #ifdef FEAT_FOLDING + { +! win_T *wp; + + /* Update folds unless they are defined manually. */ +! FOR_ALL_WINDOWS(wp) + if (wp->w_buffer == curwin->w_buffer + && !foldmethodIsManual(wp)) + foldUpdateAll(wp); +--- 6846,6856 ---- + #endif + #ifdef FEAT_FOLDING + { +! win_T *wp; +! tabpage_T *tp; + + /* Update folds unless they are defined manually. */ +! FOR_ALL_TAB_WINDOWS(tp, wp) + if (wp->w_buffer == curwin->w_buffer + && !foldmethodIsManual(wp)) + foldUpdateAll(wp); +*** ../vim-7.2.160/src/mark.c Sun Nov 9 13:43:25 2008 +--- src/mark.c Wed Apr 22 17:32:29 2009 +*************** +*** 1023,1028 **** +--- 1023,1031 ---- + int fnum = curbuf->b_fnum; + linenr_T *lp; + win_T *win; ++ #ifdef FEAT_WINDOWS ++ tabpage_T *tab; ++ #endif + + if (line2 < line1 && amount_after == 0L) /* nothing to do */ + return; +*************** +*** 1064,1070 **** + /* quickfix marks */ + qf_mark_adjust(NULL, line1, line2, amount, amount_after); + /* location lists */ +! FOR_ALL_WINDOWS(win) + qf_mark_adjust(win, line1, line2, amount, amount_after); + #endif + +--- 1067,1073 ---- + /* quickfix marks */ + qf_mark_adjust(NULL, line1, line2, amount, amount_after); + /* location lists */ +! FOR_ALL_TAB_WINDOWS(tab, win) + qf_mark_adjust(win, line1, line2, amount, amount_after); + #endif + +*************** +*** 1086,1092 **** + /* + * Adjust items in all windows related to the current buffer. + */ +! FOR_ALL_WINDOWS(win) + { + #ifdef FEAT_JUMPLIST + if (!cmdmod.lockmarks) +--- 1089,1095 ---- + /* + * Adjust items in all windows related to the current buffer. + */ +! FOR_ALL_TAB_WINDOWS(tab, win) + { + #ifdef FEAT_JUMPLIST + if (!cmdmod.lockmarks) +*** ../vim-7.2.160/src/misc1.c Wed Mar 18 15:40:03 2009 +--- src/misc1.c Wed Apr 22 17:32:46 2009 +*************** +*** 2717,2722 **** +--- 2717,2725 ---- + long xtra; + { + win_T *wp; ++ #ifdef FEAT_WINDOWS ++ tabpage_T *tp; ++ #endif + int i; + #ifdef FEAT_JUMPLIST + int cols; +*************** +*** 2769,2775 **** + curbuf->b_changelistlen = JUMPLISTSIZE - 1; + mch_memmove(curbuf->b_changelist, curbuf->b_changelist + 1, + sizeof(pos_T) * (JUMPLISTSIZE - 1)); +! FOR_ALL_WINDOWS(wp) + { + /* Correct position in changelist for other windows on + * this buffer. */ +--- 2772,2778 ---- + curbuf->b_changelistlen = JUMPLISTSIZE - 1; + mch_memmove(curbuf->b_changelist, curbuf->b_changelist + 1, + sizeof(pos_T) * (JUMPLISTSIZE - 1)); +! FOR_ALL_TAB_WINDOWS(tp, wp) + { + /* Correct position in changelist for other windows on + * this buffer. */ +*************** +*** 2777,2783 **** + --wp->w_changelistidx; + } + } +! FOR_ALL_WINDOWS(wp) + { + /* For other windows, if the position in the changelist is + * at the end it stays at the end. */ +--- 2780,2786 ---- + --wp->w_changelistidx; + } + } +! FOR_ALL_TAB_WINDOWS(tp, wp) + { + /* For other windows, if the position in the changelist is + * at the end it stays at the end. */ +*************** +*** 2796,2802 **** + #endif + } + +! FOR_ALL_WINDOWS(wp) + { + if (wp->w_buffer == curbuf) + { +--- 2799,2805 ---- + #endif + } + +! FOR_ALL_TAB_WINDOWS(tp, wp) + { + if (wp->w_buffer == curbuf) + { +*** ../vim-7.2.160/src/misc2.c Wed Mar 11 17:27:46 2009 +--- src/misc2.c Wed Apr 22 15:46:35 2009 +*************** +*** 1075,1085 **** + + #ifdef FEAT_QUICKFIX + { +! win_T *win; + + qf_free_all(NULL); + /* Free all location lists */ +! FOR_ALL_WINDOWS(win) + qf_free_all(win); + } + #endif +--- 1075,1086 ---- + + #ifdef FEAT_QUICKFIX + { +! win_T *win; +! tabpage_T *tab; + + qf_free_all(NULL); + /* Free all location lists */ +! FOR_ALL_TAB_WINDOWS(tab, win) + qf_free_all(win); + } + #endif +*** ../vim-7.2.160/src/version.c Wed Apr 22 18:43:06 2009 +--- src/version.c Wed Apr 29 10:59:01 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 161, + /**/ + +-- +CONCORDE: Quickly, sir, come this way! +LAUNCELOT: No! It's not right for my idiom. I must escape more ... more ... +CONCORDE: Dramatically, sir? +LAUNCELOT: Dramatically. + "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/7.2.162 b/7.2.162 new file mode 100644 index 00000000..f04d6e1b --- /dev/null +++ b/7.2.162 @@ -0,0 +1,75 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.162 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.162 +Problem: The quickfix window may get wrong filetype. +Solution: Do not detect the filetype for the quickfix window. (Lech Lorens) +Files: src/quickfix.c + + +*** ../vim-7.2.161/src/quickfix.c Sun Feb 22 02:36:36 2009 +--- src/quickfix.c Wed Apr 22 17:34:57 2009 +*************** +*** 2346,2352 **** + set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", + OPT_LOCAL); + set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL); +! set_option_value((char_u *)"diff", 0L, NULL, OPT_LOCAL); + } + + /* Only set the height when still in the same tab page and there is no +--- 2346,2358 ---- + set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", + OPT_LOCAL); + set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL); +! #ifdef FEAT_DIFF +! curwin->w_p_diff = FALSE; +! #endif +! #ifdef FEAT_FOLDING +! set_option_value((char_u *)"fdm", 0L, (char_u *)"manual", +! OPT_LOCAL); +! #endif + } + + /* Only set the height when still in the same tab page and there is no +*************** +*** 2607,2616 **** +--- 2613,2624 ---- + curbuf->b_p_ma = FALSE; + + #ifdef FEAT_AUTOCMD ++ keep_filetype = TRUE; /* don't detect 'filetype' */ + apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL, + FALSE, curbuf); + apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL, + FALSE, curbuf); ++ keep_filetype = FALSE; + #endif + + /* make sure it will be redrawn */ +*** ../vim-7.2.161/src/version.c Wed Apr 29 11:00:09 2009 +--- src/version.c Wed Apr 29 11:49:09 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 162, + /**/ + +-- +Yesterday is history. +Tomorrow is a mystery. +Today is a gift. +That's why it is called 'present'. + + /// 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/7.2.163 b/7.2.163 new file mode 100644 index 00000000..6db9f098 --- /dev/null +++ b/7.2.163 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.163 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.163 +Problem: The command line window may get folding. +Solution: Default to no/manual folding. (Lech Lorens) +Files: src/ex_getln.c + + +*** ../vim-7.2.162/src/ex_getln.c Wed Apr 22 13:50:14 2009 +--- src/ex_getln.c Wed Apr 22 16:12:54 2009 +*************** +*** 6073,6078 **** +--- 6073,6081 ---- + set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL); + set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); + curbuf->b_p_ma = TRUE; ++ #ifdef FEAT_FOLDING ++ curwin->w_p_fen = FALSE; ++ #endif + # ifdef FEAT_RIGHTLEFT + curwin->w_p_rl = cmdmsg_rl; + cmdmsg_rl = FALSE; +*** ../vim-7.2.162/src/version.c Wed Apr 29 11:49:57 2009 +--- src/version.c Wed Apr 29 12:02:56 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 163, + /**/ + +-- + [SIR LAUNCELOT runs back up the stairs, grabs a rope + of the wall and swings out over the heads of the CROWD in a + swashbuckling manner towards a large window. He stops just short + of the window and is left swing pathetically back and forth.] +LAUNCELOT: Excuse me ... could somebody give me a push ... + "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/7.2.164 b/7.2.164 new file mode 100644 index 00000000..f10bd210 --- /dev/null +++ b/7.2.164 @@ -0,0 +1,139 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.164 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.164 +Problem: When 'showbreak' is set the size of the Visual block may be + reported wrong. (Eduardo Daudt Flach) +Solution: Temporarily make 'sbr' empty. +Files: src/normal.c, src/ops.c + + +*** ../vim-7.2.163/src/normal.c Sat Feb 21 20:27:00 2009 +--- src/normal.c Wed Apr 22 18:30:20 2009 +*************** +*** 3709,3721 **** + #ifdef FEAT_VISUAL + if (VIsual_active && !char_avail()) + { +! int i = lt(VIsual, curwin->w_cursor); + long lines; + colnr_T leftcol, rightcol; + linenr_T top, bot; + + /* Show the size of the Visual area. */ +! if (i) + { + top = VIsual.lnum; + bot = curwin->w_cursor.lnum; +--- 3709,3721 ---- + #ifdef FEAT_VISUAL + if (VIsual_active && !char_avail()) + { +! int cursor_bot = lt(VIsual, curwin->w_cursor); + long lines; + colnr_T leftcol, rightcol; + linenr_T top, bot; + + /* Show the size of the Visual area. */ +! if (cursor_bot) + { + top = VIsual.lnum; + bot = curwin->w_cursor.lnum; +*************** +*** 3734,3747 **** + + if (VIsual_mode == Ctrl_V) + { + getvcols(curwin, &curwin->w_cursor, &VIsual, &leftcol, &rightcol); + sprintf((char *)showcmd_buf, "%ldx%ld", lines, + (long)(rightcol - leftcol + 1)); + } + else if (VIsual_mode == 'V' || VIsual.lnum != curwin->w_cursor.lnum) + sprintf((char *)showcmd_buf, "%ld", lines); + else +! sprintf((char *)showcmd_buf, "%ld", (long)(i + ? curwin->w_cursor.col - VIsual.col + : VIsual.col - curwin->w_cursor.col) + (*p_sel != 'e')); + showcmd_buf[SHOWCMD_COLS] = NUL; /* truncate */ +--- 3734,3756 ---- + + if (VIsual_mode == Ctrl_V) + { ++ #ifdef FEAT_LINEBREAK ++ char_u *saved_sbr = p_sbr; ++ ++ /* Make 'sbr' empty for a moment to get the correct size. */ ++ p_sbr = empty_option; ++ #endif + getvcols(curwin, &curwin->w_cursor, &VIsual, &leftcol, &rightcol); ++ #ifdef FEAT_LINEBREAK ++ p_sbr = saved_sbr; ++ #endif + sprintf((char *)showcmd_buf, "%ldx%ld", lines, + (long)(rightcol - leftcol + 1)); + } + else if (VIsual_mode == 'V' || VIsual.lnum != curwin->w_cursor.lnum) + sprintf((char *)showcmd_buf, "%ld", lines); + else +! sprintf((char *)showcmd_buf, "%ld", (long)(cursor_bot + ? curwin->w_cursor.col - VIsual.col + : VIsual.col - curwin->w_cursor.col) + (*p_sel != 'e')); + showcmd_buf[SHOWCMD_COLS] = NUL; /* truncate */ +*** ../vim-7.2.163/src/ops.c Wed Apr 22 17:42:53 2009 +--- src/ops.c Wed Apr 22 18:30:07 2009 +*************** +*** 392,398 **** + colnr_T ws_vcol; + int i = 0, j = 0; + int len; +- + #ifdef FEAT_RIGHTLEFT + int old_p_ri = p_ri; + +--- 392,397 ---- +*************** +*** 6284,6294 **** +--- 6283,6302 ---- + + if (VIsual_mode == Ctrl_V) + { ++ #ifdef FEAT_LINEBREAK ++ char_u * saved_sbr = p_sbr; ++ ++ /* Make 'sbr' empty for a moment to get the correct size. */ ++ p_sbr = empty_option; ++ #endif + oparg.is_VIsual = 1; + oparg.block_mode = TRUE; + oparg.op_type = OP_NOP; + getvcols(curwin, &min_pos, &max_pos, + &oparg.start_vcol, &oparg.end_vcol); ++ #ifdef FEAT_LINEBREAK ++ p_sbr = saved_sbr; ++ #endif + if (curwin->w_curswant == MAXCOL) + oparg.end_vcol = MAXCOL; + /* Swap the start, end vcol if needed */ +*** ../vim-7.2.163/src/version.c Wed Apr 29 12:03:35 2009 +--- src/version.c Wed Apr 29 17:38:05 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 164, + /**/ + +-- +There are 10 kinds of people: Those who understand binary and those who don't. + + /// 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/7.2.165 b/7.2.165 new file mode 100644 index 00000000..aeded0a0 --- /dev/null +++ b/7.2.165 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.165 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.165 +Problem: The argument for the FuncUndefined autocmd event is expanded like + a file name. +Solution: Don't try expanding it. (Wang Xu) +Files: src/fileio.c + + +*** ../vim-7.2.164/src/fileio.c Wed Apr 29 11:00:09 2009 +--- src/fileio.c Wed Apr 29 18:01:06 2009 +*************** +*** 8785,8793 **** + else + { + sfname = vim_strsave(fname); +! /* Don't try expanding FileType, Syntax, WindowID or QuickFixCmd* */ + if (event == EVENT_FILETYPE + || event == EVENT_SYNTAX + || event == EVENT_REMOTEREPLY + || event == EVENT_SPELLFILEMISSING + || event == EVENT_QUICKFIXCMDPRE +--- 8785,8795 ---- + else + { + sfname = vim_strsave(fname); +! /* Don't try expanding FileType, Syntax, FuncUndefined, WindowID or +! * QuickFixCmd* */ + if (event == EVENT_FILETYPE + || event == EVENT_SYNTAX ++ || event == EVENT_FUNCUNDEFINED + || event == EVENT_REMOTEREPLY + || event == EVENT_SPELLFILEMISSING + || event == EVENT_QUICKFIXCMDPRE +*** ../vim-7.2.164/src/version.c Wed Apr 29 17:39:17 2009 +--- src/version.c Wed Apr 29 18:00:43 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 165, + /**/ + +-- +Be nice to your kids... they'll be the ones choosing your nursing home. + + /// 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/7.2.166 b/7.2.166 new file mode 100644 index 00000000..0461b31d --- /dev/null +++ b/7.2.166 @@ -0,0 +1,425 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.166 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.166 +Problem: No completion for ":sign" command. +Solution: Add ":sign" completion. (Dominique Pelle) +Files: src/ex_cmds.c, src/ex_docmd.c, src/ex_getln.c, src/vim.h, + src/proto/ex_cmds.pro + + +*** ../vim-7.2.165/src/ex_cmds.c Tue Feb 24 04:28:40 2009 +--- src/ex_cmds.c Wed Apr 29 17:08:27 2009 +*************** +*** 6543,6562 **** + static void sign_list_defined __ARGS((sign_T *sp)); + static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev)); + +! /* +! * ":sign" command +! */ +! void +! ex_sign(eap) +! exarg_T *eap; +! { +! char_u *arg = eap->arg; +! char_u *p; +! int idx; +! sign_T *sp; +! sign_T *sp_prev; +! buf_T *buf; +! static char *cmds[] = { + "define", + #define SIGNCMD_DEFINE 0 + "undefine", +--- 6543,6549 ---- + static void sign_list_defined __ARGS((sign_T *sp)); + static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev)); + +! static char *cmds[] = { + "define", + #define SIGNCMD_DEFINE 0 + "undefine", +*************** +*** 6569,6590 **** + #define SIGNCMD_UNPLACE 4 + "jump", + #define SIGNCMD_JUMP 5 + #define SIGNCMD_LAST 6 +! }; + + /* Parse the subcommand. */ + p = skiptowhite(arg); +! if (*p != NUL) +! *p++ = NUL; +! for (idx = 0; ; ++idx) + { +! if (idx == SIGNCMD_LAST) +! { +! EMSG2(_("E160: Unknown sign command: %s"), arg); +! return; +! } +! if (STRCMP(arg, cmds[idx]) == 0) +! break; + } + arg = skipwhite(p); + +--- 6556,6606 ---- + #define SIGNCMD_UNPLACE 4 + "jump", + #define SIGNCMD_JUMP 5 ++ NULL + #define SIGNCMD_LAST 6 +! }; +! +! /* +! * Find index of a ":sign" subcmd from its name. +! * "*end_cmd" must be writable. +! */ +! static int +! sign_cmd_idx(begin_cmd, end_cmd) +! char *begin_cmd; /* begin of sign subcmd */ +! char *end_cmd; /* just after sign subcmd */ +! { +! int idx; +! char save = *end_cmd; +! +! *end_cmd = NUL; +! for (idx = 0; ; ++idx) +! if (cmds[idx] == NULL || STRCMP(begin_cmd, cmds[idx]) == 0) +! break; +! *end_cmd = save; +! return idx; +! } +! +! /* +! * ":sign" command +! */ +! void +! ex_sign(eap) +! exarg_T *eap; +! { +! char_u *arg = eap->arg; +! char_u *p; +! int idx; +! sign_T *sp; +! sign_T *sp_prev; +! buf_T *buf; + + /* Parse the subcommand. */ + p = skiptowhite(arg); +! idx = sign_cmd_idx(arg, p); +! if (idx == SIGNCMD_LAST) + { +! EMSG2(_("E160: Unknown sign command: %s"), arg); +! return; + } + arg = skipwhite(p); + +*************** +*** 7110,7115 **** +--- 7126,7311 ---- + } + #endif + ++ #if defined(FEAT_CMDL_COMPL) || defined(PROTO) ++ static enum ++ { ++ EXP_SUBCMD, /* expand :sign sub-commands */ ++ EXP_DEFINE, /* expand :sign define {name} args */ ++ EXP_PLACE, /* expand :sign place {id} args */ ++ EXP_UNPLACE, /* expand :sign unplace" */ ++ EXP_SIGN_NAMES /* expand with name of placed signs */ ++ } expand_what; ++ ++ /* ++ * Function given to ExpandGeneric() to obtain the sign command ++ * expansion. ++ */ ++ /*ARGSUSED*/ ++ char_u * ++ get_sign_name(xp, idx) ++ expand_T *xp; ++ int idx; ++ { ++ sign_T *sp; ++ int current_idx; ++ ++ switch (expand_what) ++ { ++ case EXP_SUBCMD: ++ return (char_u *)cmds[idx]; ++ case EXP_DEFINE: ++ { ++ char *define_arg[] = ++ { ++ "icon=", "linehl=", "text=", "texthl=", NULL ++ }; ++ return (char_u *)define_arg[idx]; ++ } ++ case EXP_PLACE: ++ { ++ char *place_arg[] = ++ { ++ "line=", "name=", "file=", "buffer=", NULL ++ }; ++ return (char_u *)place_arg[idx]; ++ } ++ case EXP_UNPLACE: ++ { ++ char *unplace_arg[] = { "file=", "buffer=", NULL }; ++ return (char_u *)unplace_arg[idx]; ++ } ++ case EXP_SIGN_NAMES: ++ /* Complete with name of signs already defined */ ++ current_idx = 0; ++ for (sp = first_sign; sp != NULL; sp = sp->sn_next) ++ if (current_idx++ == idx) ++ return sp->sn_name; ++ return NULL; ++ default: ++ return NULL; ++ } ++ } ++ ++ /* ++ * Handle command line completion for :sign command. ++ */ ++ void ++ set_context_in_sign_cmd(xp, arg) ++ expand_T *xp; ++ char_u *arg; ++ { ++ char_u *p; ++ char_u *end_subcmd; ++ char_u *last; ++ int cmd_idx; ++ char_u *begin_subcmd_args; ++ ++ /* Default: expand subcommands. */ ++ xp->xp_context = EXPAND_SIGN; ++ expand_what = EXP_SUBCMD; ++ xp->xp_pattern = arg; ++ ++ end_subcmd = skiptowhite(arg); ++ if (*end_subcmd == NUL) ++ /* expand subcmd name ++ * :sign {subcmd}*/ ++ return; ++ ++ cmd_idx = sign_cmd_idx(arg, end_subcmd); ++ ++ /* :sign {subcmd} {subcmd_args} ++ * | ++ * begin_subcmd_args */ ++ begin_subcmd_args = skipwhite(end_subcmd); ++ p = skiptowhite(begin_subcmd_args); ++ if (*p == NUL) ++ { ++ /* ++ * Expand first argument of subcmd when possible. ++ * For ":jump {id}" and ":unplace {id}", we could ++ * possibly expand the ids of all signs already placed. ++ */ ++ xp->xp_pattern = begin_subcmd_args; ++ switch (cmd_idx) ++ { ++ case SIGNCMD_LIST: ++ case SIGNCMD_UNDEFINE: ++ /* :sign list ++ * :sign undefine */ ++ expand_what = EXP_SIGN_NAMES; ++ break; ++ default: ++ xp->xp_context = EXPAND_NOTHING; ++ } ++ return; ++ } ++ ++ /* expand last argument of subcmd */ ++ ++ /* :sign define {name} {args}... ++ * | ++ * p */ ++ ++ /* Loop until reaching last argument. */ ++ do ++ { ++ p = skipwhite(p); ++ last = p; ++ p = skiptowhite(p); ++ } while (*p != NUL); ++ ++ p = vim_strchr(last, '='); ++ ++ /* :sign define {name} {args}... {last}= ++ * | | ++ * last p */ ++ if (p == NUL) ++ { ++ /* Expand last argument name (before equal sign). */ ++ xp->xp_pattern = last; ++ switch (cmd_idx) ++ { ++ case SIGNCMD_DEFINE: ++ expand_what = EXP_DEFINE; ++ break; ++ case SIGNCMD_PLACE: ++ expand_what = EXP_PLACE; ++ break; ++ case SIGNCMD_JUMP: ++ case SIGNCMD_UNPLACE: ++ expand_what = EXP_UNPLACE; ++ break; ++ default: ++ xp->xp_context = EXPAND_NOTHING; ++ } ++ } ++ else ++ { ++ /* Expand last argument value (after equal sign). */ ++ xp->xp_pattern = p + 1; ++ switch (cmd_idx) ++ { ++ case SIGNCMD_DEFINE: ++ if (STRNCMP(last, "texthl", p - last) == 0 || ++ STRNCMP(last, "linehl", p - last) == 0) ++ xp->xp_context = EXPAND_HIGHLIGHT; ++ else if (STRNCMP(last, "icon", p - last) == 0) ++ xp->xp_context = EXPAND_FILES; ++ else ++ xp->xp_context = EXPAND_NOTHING; ++ break; ++ case SIGNCMD_PLACE: ++ if (STRNCMP(last, "name", p - last) == 0) ++ expand_what = EXP_SIGN_NAMES; ++ else ++ xp->xp_context = EXPAND_NOTHING; ++ break; ++ default: ++ xp->xp_context = EXPAND_NOTHING; ++ } ++ } ++ } ++ #endif + #endif + + #if defined(FEAT_GUI) || defined(FEAT_CLIENTSERVER) || defined(PROTO) +*** ../vim-7.2.165/src/ex_docmd.c Wed Apr 22 16:22:44 2009 +--- src/ex_docmd.c Wed Apr 29 17:05:23 2009 +*************** +*** 3695,3700 **** +--- 3695,3705 ---- + set_context_in_cscope_cmd(xp, arg, ea.cmdidx); + break; + #endif ++ #ifdef FEAT_SIGNS ++ case CMD_sign: ++ set_context_in_sign_cmd(xp, arg); ++ break; ++ #endif + #ifdef FEAT_LISTCMDS + case CMD_bdelete: + case CMD_bwipeout: +*************** +*** 5218,5223 **** +--- 5223,5231 ---- + {EXPAND_MENUS, "menu"}, + {EXPAND_SETTINGS, "option"}, + {EXPAND_SHELLCMD, "shellcmd"}, ++ #if defined(FEAT_SIGNS) ++ {EXPAND_SIGN, "sign"}, ++ #endif + {EXPAND_TAGS, "tag"}, + {EXPAND_TAGS_LISTFILES, "tag_listfiles"}, + {EXPAND_USER_VARS, "var"}, +*** ../vim-7.2.165/src/ex_getln.c Wed Apr 29 12:03:35 2009 +--- src/ex_getln.c Wed Apr 29 12:51:42 2009 +*************** +*** 325,331 **** + #endif + + #ifdef FEAT_DIGRAPHS +! do_digraph(-1); /* init digraph typahead */ + #endif + + /* +--- 325,331 ---- + #endif + + #ifdef FEAT_DIGRAPHS +! do_digraph(-1); /* init digraph typeahead */ + #endif + + /* +*************** +*** 4521,4526 **** +--- 4521,4529 ---- + #ifdef FEAT_CSCOPE + {EXPAND_CSCOPE, get_cscope_name, TRUE}, + #endif ++ #ifdef FEAT_SIGNS ++ {EXPAND_SIGN, get_sign_name, TRUE}, ++ #endif + #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ + && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE)) + {EXPAND_LANGUAGE, get_lang_arg, TRUE}, +*** ../vim-7.2.165/src/vim.h Wed Mar 18 12:50:58 2009 +--- src/vim.h Wed Apr 29 12:51:42 2009 +*************** +*** 709,714 **** +--- 709,715 ---- + #define EXPAND_USER_LIST 31 + #define EXPAND_SHELLCMD 32 + #define EXPAND_CSCOPE 33 ++ #define EXPAND_SIGN 34 + + /* Values for exmode_active (0 is no exmode) */ + #define EXMODE_NORMAL 1 +*** ../vim-7.2.165/src/proto/ex_cmds.pro Tue Feb 24 04:28:40 2009 +--- src/proto/ex_cmds.pro Wed Apr 29 17:10:29 2009 +*************** +*** 40,46 **** + int read_viminfo_sub_string __ARGS((vir_T *virp, int force)); + void write_viminfo_sub_string __ARGS((FILE *fp)); + void free_old_sub __ARGS((void)); +- void free_signs __ARGS((void)); + int prepare_tagpreview __ARGS((int undo_sync)); + void ex_help __ARGS((exarg_T *eap)); + char_u *check_help_lang __ARGS((char_u *arg)); +--- 40,45 ---- +*************** +*** 56,60 **** +--- 55,62 ---- + char_u *sign_get_text __ARGS((int typenr)); + void *sign_get_image __ARGS((int typenr)); + char_u *sign_typenr2name __ARGS((int typenr)); ++ void free_signs __ARGS((void)); ++ char_u *get_sign_name __ARGS((expand_T *xp, int idx)); ++ void set_context_in_sign_cmd __ARGS((expand_T *xp, char_u *arg)); + void ex_drop __ARGS((exarg_T *eap)); + /* vim: set ft=c : */ +*** ../vim-7.2.165/src/version.c Wed Apr 29 18:01:23 2009 +--- src/version.c Wed Apr 29 18:43:14 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 166, + /**/ + +-- +Did you ever stop to think... and forget to start again? + -- Steven Wright + + /// 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/7.2.167 b/7.2.167 new file mode 100644 index 00000000..9bf08e62 --- /dev/null +++ b/7.2.167 @@ -0,0 +1,1873 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.167 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.167 +Problem: Splint doesn't work well for checking the code. +Solution: Add splint arguments in the Makefile. Exclude some code from + splint that it can't handle. Tune splint arguments to give + reasonable errors. Add a filter for removing false warnings from + splint output. Many small changes to avoid warnings. More to + follow... +Files: Filelist, src/Makefile, src/buffer.c, src/charset.c, + src/cleanlint.vim, src/digraph.c, src/edit.c, src/ex_cmds.c, + src/globals.h, src/ops.c, src/os_unix.c, src/os_unix.h, + src/proto/buffer.pro, src/proto/edit.pro, src/screen.c, + src/structs.h + +*** ../vim-7.2.166/Filelist 2008-09-20 16:26:10.000000000 +0200 +--- Filelist 2009-05-05 21:45:49.000000000 +0200 +*************** +*** 139,144 **** +--- 139,145 ---- + src/INSTALL \ + src/INSTALLx.txt \ + src/Makefile \ ++ src/cleanlint.vim \ + src/auto/configure \ + src/config.aap.in \ + src/config.h.in \ +*************** +*** 683,691 **** + runtime/spell/??/main.aap \ + runtime/spell/yi/README.txt \ + runtime/spell/main.aap \ +- runtime/spell/cleanadd.vim \ + runtime/spell/*.vim \ +- runtime/spell/fixdup \ + + # generic language files, binary + LANG_GEN_BIN = \ +--- 684,690 ---- +*** ../vim-7.2.166/src/Makefile 2009-04-29 18:44:45.000000000 +0200 +--- src/Makefile 2009-05-06 00:23:15.000000000 +0200 +*************** +*** 551,557 **** + # }}} + + # LINT - for running lint +! LINT_OPTIONS = -beprxzF + + # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. + # Might not work with GUI or Perl. +--- 551,562 ---- + # }}} + + # LINT - for running lint +! # For standard lint +! #LINT = lint +! #LINT_OPTIONS = -beprxzF +! # For splint (see cleanlint.vim for filtering the output) +! LINT = splint +! LINT_OPTIONS = +unixlib -weak -macrovarprefixexclude -showfunc -linelen 9999 + + # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. + # Might not work with GUI or Perl. +*************** +*** 1259,1274 **** + # This is for cproto 3 patchlevel 8 or below + # __inline, __attribute__ and __extension__ are not recognized by cproto + # G_IMPLEMENT_INLINES is to avoid functions defined in glib/gutils.h. +! NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \ +! -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \ +! -D__extension__= -D__restrict="" \ +! -D__gnuc_va_list=char -D__builtin_va_list=char + + # +! # This is for cproto 3 patchlevel 9 or above (currently 4.6) + # __inline and __attribute__ are now recognized by cproto + # -D"foo()=" is not supported by all compilers so do not use it +! # NO_ATTR= + # + # maybe the "/usr/bin/cc -E" has to be adjusted for some systems + # This is for cproto 3.5 patchlevel 3: +--- 1264,1279 ---- + # This is for cproto 3 patchlevel 8 or below + # __inline, __attribute__ and __extension__ are not recognized by cproto + # G_IMPLEMENT_INLINES is to avoid functions defined in glib/gutils.h. +! #NO_ATTR = -D__inline= -D__inline__= -DG_IMPLEMENT_INLINES \ +! # -D"__attribute__\\(x\\)=" -D"__asm__\\(x\\)=" \ +! # -D__extension__= -D__restrict="" \ +! # -D__gnuc_va_list=char -D__builtin_va_list=char + + # +! # This is for cproto 3 patchlevel 9 or above (currently 4.6, 4.7g) + # __inline and __attribute__ are now recognized by cproto + # -D"foo()=" is not supported by all compilers so do not use it +! NO_ATTR= + # + # maybe the "/usr/bin/cc -E" has to be adjusted for some systems + # This is for cproto 3.5 patchlevel 3: +*************** +*** 1432,1437 **** +--- 1437,1443 ---- + $(SNIFF_SRC) $(WORKSHOP_SRC) $(WSDEBUG_SRC) $(NETBEANS_SRC) + #LINT_SRC = $(SRC) + #LINT_SRC = $(ALL_SRC) ++ #LINT_SRC = $(BASIC_SRC) + + OBJ = \ + objects/buffer.o \ +*************** +*** 2272,2283 **** + + # Run lint. Clean up the *.ln files that are sometimes left behind. + lint: +! lint $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC) + -rm -f *.ln + + # Check dosinst.c with lint. + lintinstall: +! lint $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c + -rm -f dosinst.ln + + ########################################################################### +--- 2279,2290 ---- + + # Run lint. Clean up the *.ln files that are sometimes left behind. + lint: +! $(LINT) $(LINT_OPTIONS) $(LINT_CFLAGS) $(LINT_EXTRA) $(LINT_SRC) + -rm -f *.ln + + # Check dosinst.c with lint. + lintinstall: +! $(LINT) $(LINT_OPTIONS) -DWIN32 -DUNIX_LINT dosinst.c + -rm -f dosinst.ln + + ########################################################################### +*** ../vim-7.2.166/src/buffer.c 2009-02-22 00:01:42.000000000 +0100 +--- src/buffer.c 2009-05-13 12:25:29.000000000 +0200 +*************** +*** 44,49 **** +--- 44,50 ---- + #ifdef FEAT_TITLE + static int ti_change __ARGS((char_u *str, char_u **last)); + #endif ++ static int append_arg_number __ARGS((win_T *wp, char_u *buf, int buflen, int add_file)); + static void free_buffer __ARGS((buf_T *)); + static void free_buffer_stuff __ARGS((buf_T *buf, int free_options)); + static void clear_wininfo __ARGS((buf_T *buf)); +*************** +*** 1453,1465 **** + + #ifdef FEAT_KEYMAP + if (curbuf->b_kmap_state & KEYMAP_INIT) +! keymap_init(); + #endif + #ifdef FEAT_SPELL + /* May need to set the spell language. Can only do this after the buffer + * has been properly setup. */ + if (!curbuf->b_help && curwin->w_p_spell && *curbuf->b_p_spl != NUL) +! did_set_spelllang(curbuf); + #endif + + redraw_later(NOT_VALID); +--- 1454,1466 ---- + + #ifdef FEAT_KEYMAP + if (curbuf->b_kmap_state & KEYMAP_INIT) +! (void)keymap_init(); + #endif + #ifdef FEAT_SPELL + /* May need to set the spell language. Can only do this after the buffer + * has been properly setup. */ + if (!curbuf->b_help && curwin->w_p_spell && *curbuf->b_p_spl != NUL) +! (void)did_set_spelllang(curbuf); + #endif + + redraw_later(NOT_VALID); +*************** +*** 2516,2522 **** + buf_T *buf; + { + wininfo_T *wip; +! static pos_T no_position = {1, 0}; + + wip = find_wininfo(buf, FALSE); + if (wip != NULL) +--- 2517,2523 ---- + buf_T *buf; + { + wininfo_T *wip; +! static pos_T no_position = INIT_POS_T(1, 0, 0); + + wip = find_wininfo(buf, FALSE); + if (wip != NULL) +*************** +*** 2577,2584 **** + { + IObuff[len++] = ' '; + } while (--i > 0 && len < IOSIZE - 18); +! vim_snprintf((char *)IObuff + len, IOSIZE - len, _("line %ld"), +! buf == curbuf ? curwin->w_cursor.lnum + : (long)buflist_findlnum(buf)); + msg_outtrans(IObuff); + out_flush(); /* output one line at a time */ +--- 2578,2585 ---- + { + IObuff[len++] = ' '; + } while (--i > 0 && len < IOSIZE - 18); +! vim_snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), +! _("line %ld"), buf == curbuf ? curwin->w_cursor.lnum + : (long)buflist_findlnum(buf)); + msg_outtrans(IObuff); + out_flush(); /* output one line at a time */ +*************** +*** 2967,2973 **** + + if (fullname > 1) /* 2 CTRL-G: include buffer number */ + { +! sprintf((char *)buffer, "buf %d: ", curbuf->b_fnum); + p = buffer + STRLEN(buffer); + } + else +--- 2968,2974 ---- + + if (fullname > 1) /* 2 CTRL-G: include buffer number */ + { +! vim_snprintf((char *)buffer, IOSIZE, "buf %d: ", curbuf->b_fnum); + p = buffer + STRLEN(buffer); + } + else +*************** +*** 3041,3051 **** + (long)curbuf->b_ml.ml_line_count, + n); + validate_virtcol(); +! col_print(buffer + STRLEN(buffer), + (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1); + } + +! (void)append_arg_number(curwin, buffer, !shortmess(SHM_FILE), IOSIZE); + + if (dont_truncate) + { +--- 3042,3053 ---- + (long)curbuf->b_ml.ml_line_count, + n); + validate_virtcol(); +! len = STRLEN(buffer); +! col_print(buffer + len, IOSIZE - len, + (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1); + } + +! (void)append_arg_number(curwin, buffer, IOSIZE, !shortmess(SHM_FILE)); + + if (dont_truncate) + { +*************** +*** 3073,3087 **** + } + + void +! col_print(buf, col, vcol) + char_u *buf; + int col; + int vcol; + { + if (col == vcol) +! sprintf((char *)buf, "%d", col); + else +! sprintf((char *)buf, "%d-%d", col, vcol); + } + + #if defined(FEAT_TITLE) || defined(PROTO) +--- 3075,3090 ---- + } + + void +! col_print(buf, buflen, col, vcol) + char_u *buf; ++ size_t buflen; + int col; + int vcol; + { + if (col == vcol) +! vim_snprintf((char *)buf, buflen, "%d", col); + else +! vim_snprintf((char *)buf, buflen, "%d-%d", col, vcol); + } + + #if defined(FEAT_TITLE) || defined(PROTO) +*************** +*** 3194,3211 **** + if (p == buf + off) + /* must be a help buffer */ + vim_strncpy(buf + off, (char_u *)_("help"), +! IOSIZE - off - 1); + else + *p = NUL; + + /* translate unprintable chars */ + p = transstr(buf + off); +! vim_strncpy(buf + off, p, IOSIZE - off - 1); + vim_free(p); + STRCAT(buf, ")"); + } + +! append_arg_number(curwin, buf, FALSE, IOSIZE); + + #if defined(FEAT_CLIENTSERVER) + if (serverName != NULL) +--- 3197,3214 ---- + if (p == buf + off) + /* must be a help buffer */ + vim_strncpy(buf + off, (char_u *)_("help"), +! (size_t)(IOSIZE - off - 1)); + else + *p = NUL; + + /* translate unprintable chars */ + p = transstr(buf + off); +! vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1)); + vim_free(p); + STRCAT(buf, ")"); + } + +! append_arg_number(curwin, buf, IOSIZE, FALSE); + + #if defined(FEAT_CLIENTSERVER) + if (serverName != NULL) +*************** +*** 3520,3526 **** + n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1; + + *t = '<'; +! mch_memmove(t + 1, t + n, p - (t + n)); + p = p - n + 1; + #ifdef FEAT_MBYTE + /* Fill up space left over by half a double-wide char. */ +--- 3523,3529 ---- + n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1; + + *t = '<'; +! mch_memmove(t + 1, t + n, (size_t)(p - (t + n))); + p = p - n + 1; + #ifdef FEAT_MBYTE + /* Fill up space left over by half a double-wide char. */ +*************** +*** 3550,3556 **** + else + { + /* fill by inserting characters */ +! mch_memmove(t + n - l, t, p - t); + l = n - l; + if (p + l >= out + outlen) + l = (long)((out + outlen) - p - 1); +--- 3553,3559 ---- + else + { + /* fill by inserting characters */ +! mch_memmove(t + n - l, t, (size_t)(p - t)); + l = n - l; + if (p + l >= out + outlen) + l = (long)((out + outlen) - p - 1); +*************** +*** 3686,3692 **** + p = t; + + #ifdef FEAT_EVAL +! sprintf((char *)tmp, "%d", curbuf->b_fnum); + set_internal_string_var((char_u *)"actual_curbuf", tmp); + + o_curbuf = curbuf; +--- 3689,3695 ---- + p = t; + + #ifdef FEAT_EVAL +! vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum); + set_internal_string_var((char_u *)"actual_curbuf", tmp); + + o_curbuf = curbuf; +*************** +*** 3753,3765 **** + + case STL_ALTPERCENT: + str = tmp; +! get_rel_pos(wp, str); + break; + + case STL_ARGLISTSTAT: + fillable = FALSE; + tmp[0] = 0; +! if (append_arg_number(wp, tmp, FALSE, (int)sizeof(tmp))) + str = tmp; + break; + +--- 3756,3768 ---- + + case STL_ALTPERCENT: + str = tmp; +! get_rel_pos(wp, str, TMPLEN); + break; + + case STL_ARGLISTSTAT: + fillable = FALSE; + tmp[0] = 0; +! if (append_arg_number(wp, tmp, (int)sizeof(tmp), FALSE)) + str = tmp; + break; + +*************** +*** 3794,3800 **** + case STL_BYTEVAL_X: + base = 'X'; + case STL_BYTEVAL: +! if (wp->w_cursor.col > STRLEN(linecont)) + num = 0; + else + { +--- 3797,3803 ---- + case STL_BYTEVAL_X: + base = 'X'; + case STL_BYTEVAL: +! if (wp->w_cursor.col > (colnr_T)STRLEN(linecont)) + num = 0; + else + { +*************** +*** 3967,3973 **** + if (zeropad) + *t++ = '0'; + *t++ = '*'; +! *t++ = nbase == 16 ? base : (nbase == 8 ? 'o' : 'd'); + *t = 0; + + for (n = num, l = 1; n >= nbase; n /= nbase) +--- 3970,3976 ---- + if (zeropad) + *t++ = '0'; + *t++ = '*'; +! *t++ = nbase == 16 ? base : (char_u)(nbase == 8 ? 'o' : 'd'); + *t = 0; + + for (n = num, l = 1; n >= nbase; n /= nbase) +*************** +*** 4160,4172 **** + #if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \ + || defined(FEAT_GUI_TABLINE) || defined(PROTO) + /* +! * Get relative cursor position in window into "str[]", in the form 99%, using +! * "Top", "Bot" or "All" when appropriate. + */ + void +! get_rel_pos(wp, str) + win_T *wp; +! char_u *str; + { + long above; /* number of lines above window */ + long below; /* number of lines below window */ +--- 4163,4176 ---- + #if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \ + || defined(FEAT_GUI_TABLINE) || defined(PROTO) + /* +! * Get relative cursor position in window into "buf[buflen]", in the form 99%, +! * using "Top", "Bot" or "All" when appropriate. + */ + void +! get_rel_pos(wp, buf, buflen) + win_T *wp; +! char_u *buf; +! int buflen; + { + long above; /* number of lines above window */ + long below; /* number of lines below window */ +*************** +*** 4177,4210 **** + #endif + below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1; + if (below <= 0) +! STRCPY(str, above == 0 ? _("All") : _("Bot")); + else if (above <= 0) +! STRCPY(str, _("Top")); + else +! sprintf((char *)str, "%2d%%", above > 1000000L + ? (int)(above / ((above + below) / 100L)) + : (int)(above * 100L / (above + below))); + } + #endif + + /* +! * Append (file 2 of 8) to 'buf', if editing more than one file. + * Return TRUE if it was appended. + */ +! int +! append_arg_number(wp, buf, add_file, maxlen) + win_T *wp; + char_u *buf; + int add_file; /* Add "file" before the arg number */ +- int maxlen; /* maximum nr of chars in buf or zero*/ + { + char_u *p; + + if (ARGCOUNT <= 1) /* nothing to do */ + return FALSE; + +! p = buf + STRLEN(buf); /* go to the end of the buffer */ +! if (maxlen && p - buf + 35 >= maxlen) /* getting too long */ + return FALSE; + *p++ = ' '; + *p++ = '('; +--- 4181,4215 ---- + #endif + below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1; + if (below <= 0) +! vim_strncpy(buf, (char_u *)(above == 0 ? _("All") : _("Bot")), +! (size_t)(buflen - 1)); + else if (above <= 0) +! vim_strncpy(buf, (char_u *)_("Top"), (size_t)(buflen - 1)); + else +! vim_snprintf((char *)buf, (size_t)buflen, "%2d%%", above > 1000000L + ? (int)(above / ((above + below) / 100L)) + : (int)(above * 100L / (above + below))); + } + #endif + + /* +! * Append (file 2 of 8) to "buf[buflen]", if editing more than one file. + * Return TRUE if it was appended. + */ +! static int +! append_arg_number(wp, buf, buflen, add_file) + win_T *wp; + char_u *buf; ++ int buflen; + int add_file; /* Add "file" before the arg number */ + { + char_u *p; + + if (ARGCOUNT <= 1) /* nothing to do */ + return FALSE; + +! p = buf + STRLEN(buf); /* go to the end of the buffer */ +! if (p - buf + 35 >= buflen) /* getting too long */ + return FALSE; + *p++ = ' '; + *p++ = '('; +*************** +*** 4213,4219 **** + STRCPY(p, "file "); + p += 5; + } +! sprintf((char *)p, wp->w_arg_idx_invalid ? "(%d) of %d)" + : "%d of %d)", wp->w_arg_idx + 1, ARGCOUNT); + return TRUE; + } +--- 4218,4225 ---- + STRCPY(p, "file "); + p += 5; + } +! vim_snprintf((char *)p, (size_t)(buflen - (p - buf)), +! wp->w_arg_idx_invalid ? "(%d) of %d)" + : "%d of %d)", wp->w_arg_idx + 1, ARGCOUNT); + return TRUE; + } +*************** +*** 4996,5002 **** + if (tab != NULL) + { + *tab++ = '\0'; +! col = atoi((char *)tab); + tab = vim_strrchr(xline, '\t'); + if (tab != NULL) + { +--- 5002,5008 ---- + if (tab != NULL) + { + *tab++ = '\0'; +! col = (colnr_T)atoi((char *)tab); + tab = vim_strrchr(xline, '\t'); + if (tab != NULL) + { +*************** +*** 5034,5039 **** +--- 5040,5046 ---- + #endif + char_u *line; + int max_buffers; ++ size_t len; + + if (find_viminfo_parameter('%') == NULL) + return; +*************** +*** 5042,5048 **** + max_buffers = get_viminfo_parameter('%'); + + /* Allocate room for the file name, lnum and col. */ +! line = alloc(MAXPATHL + 40); + if (line == NULL) + return; + +--- 5049,5056 ---- + max_buffers = get_viminfo_parameter('%'); + + /* Allocate room for the file name, lnum and col. */ +! #define LINE_BUF_LEN (MAXPATHL + 40) +! line = alloc(LINE_BUF_LEN); + if (line == NULL) + return; + +*************** +*** 5068,5074 **** + break; + putc('%', fp); + home_replace(NULL, buf->b_ffname, line, MAXPATHL, TRUE); +! sprintf((char *)line + STRLEN(line), "\t%ld\t%d", + (long)buf->b_last_cursor.lnum, + buf->b_last_cursor.col); + viminfo_writestring(fp, line); +--- 5076,5083 ---- + break; + putc('%', fp); + home_replace(NULL, buf->b_ffname, line, MAXPATHL, TRUE); +! len = STRLEN(line); +! vim_snprintf((char *)line + len, len - LINE_BUF_LEN, "\t%ld\t%d", + (long)buf->b_last_cursor.lnum, + buf->b_last_cursor.col); + viminfo_writestring(fp, line); +*************** +*** 5226,5232 **** + return; + } + +! int + buf_change_sign_type(buf, markId, typenr) + buf_T *buf; /* buffer to store sign in */ + int markId; /* sign ID */ +--- 5235,5241 ---- + return; + } + +! linenr_T + buf_change_sign_type(buf, markId, typenr) + buf_T *buf; /* buffer to store sign in */ + int markId; /* sign ID */ +*************** +*** 5243,5252 **** + } + } + +! return 0; + } + +! int_u + buf_getsigntype(buf, lnum, type) + buf_T *buf; + linenr_T lnum; +--- 5252,5261 ---- + } + } + +! return (linenr_T)0; + } + +! int + buf_getsigntype(buf, lnum, type) + buf_T *buf; + linenr_T lnum; +*** ../vim-7.2.166/src/charset.c 2008-07-24 21:30:44.000000000 +0200 +--- src/charset.c 2009-05-05 18:17:11.000000000 +0200 +*************** +*** 17,23 **** + static int win_nolbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp)); + #endif + +! static int nr2hex __ARGS((int c)); + + static int chartab_initialized = FALSE; + +--- 17,23 ---- + static int win_nolbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp)); + #endif + +! static unsigned nr2hex __ARGS((unsigned c)); + + static int chartab_initialized = FALSE; + +*************** +*** 664,670 **** + } + #endif + buf[++i] = nr2hex((unsigned)c >> 4); +! buf[++i] = nr2hex(c); + buf[++i] = '>'; + buf[++i] = NUL; + } +--- 664,670 ---- + } + #endif + buf[++i] = nr2hex((unsigned)c >> 4); +! buf[++i] = nr2hex((unsigned)c); + buf[++i] = '>'; + buf[++i] = NUL; + } +*************** +*** 674,682 **** + * Lower case letters are used to avoid the confusion of being 0xf1 or + * function key 1. + */ +! static int + nr2hex(c) +! int c; + { + if ((c & 0xf) <= 9) + return (c & 0xf) + '0'; +--- 674,682 ---- + * Lower case letters are used to avoid the confusion of being 0xf1 or + * function key 1. + */ +! static unsigned + nr2hex(c) +! unsigned c; + { + if ((c & 0xf) <= 9) + return (c & 0xf) + '0'; +*************** +*** 884,890 **** + if (c >= 0x100) + { + if (enc_dbcs != 0) +! return dbcs_class((unsigned)c >> 8, c & 0xff) >= 2; + if (enc_utf8) + return utf_class(c) >= 2; + } +--- 884,890 ---- + if (c >= 0x100) + { + if (enc_dbcs != 0) +! return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2; + if (enc_utf8) + return utf_class(c) >= 2; + } +*************** +*** 1090,1096 **** + */ + numberextra = win_col_off(wp); + col2 = col; +! colmax = W_WIDTH(wp) - numberextra; + if (col >= colmax) + { + n = colmax + win_col_off2(wp); +--- 1090,1096 ---- + */ + numberextra = win_col_off(wp); + col2 = col; +! colmax = (colnr_T)(W_WIDTH(wp) - numberextra); + if (col >= colmax) + { + n = colmax + win_col_off2(wp); +*************** +*** 1201,1217 **** + win_T *wp; + colnr_T vcol; + { +! colnr_T width1; /* width of first line (after line number) */ +! colnr_T width2; /* width of further lines */ + + #ifdef FEAT_VERTSPLIT + if (wp->w_width == 0) /* there is no border */ + return FALSE; + #endif + width1 = W_WIDTH(wp) - win_col_off(wp); +! if (vcol < width1 - 1) + return FALSE; +! if (vcol == width1 - 1) + return TRUE; + width2 = width1 + win_col_off2(wp); + return ((vcol - width1) % width2 == width2 - 1); +--- 1201,1217 ---- + win_T *wp; + colnr_T vcol; + { +! int width1; /* width of first line (after line number) */ +! int width2; /* width of further lines */ + + #ifdef FEAT_VERTSPLIT + if (wp->w_width == 0) /* there is no border */ + return FALSE; + #endif + width1 = W_WIDTH(wp) - win_col_off(wp); +! if ((int)vcol < width1 - 1) + return FALSE; +! if ((int)vcol == width1 - 1) + return TRUE; + width2 = width1 + win_col_off2(wp); + return ((vcol - width1) % width2 == width2 - 1); +*************** +*** 1396,1408 **** + # ifdef FEAT_MBYTE + /* Cannot put the cursor on part of a wide character. */ + ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE); +! if (pos->col < STRLEN(ptr)) + { + int c = (*mb_ptr2char)(ptr + pos->col); + + if (c != TAB && vim_isprintc(c)) + { +! endadd = char2cells(c) - 1; + if (coladd > endadd) /* past end of line */ + endadd = 0; + else +--- 1396,1408 ---- + # ifdef FEAT_MBYTE + /* Cannot put the cursor on part of a wide character. */ + ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE); +! if (pos->col < (colnr_T)STRLEN(ptr)) + { + int c = (*mb_ptr2char)(ptr + pos->col); + + if (c != TAB && vim_isprintc(c)) + { +! endadd = (colnr_T)(char2cells(c) - 1); + if (coladd > endadd) /* past end of line */ + endadd = 0; + else +*** ../vim-7.2.166/src/cleanlint.vim 2009-05-13 12:08:12.000000000 +0200 +--- src/cleanlint.vim 2009-05-05 21:34:01.000000000 +0200 +*************** +*** 0 **** +--- 1,27 ---- ++ " Vim tool: Filter output of splint ++ " ++ " Maintainer: Bram Moolenaar ++ " Last Change: 2009 May 05 ++ ++ " Usage: redirect output of "make lint" to a file, edit that file with Vim and ++ " :call CleanLint() ++ " This deletes irrelevant messages. What remains might be valid warnings. ++ ++ fun! CleanLint() ++ g/^ Types are incompatible/lockmarks d ++ g/Assignment of dev_t to __dev_t:/lockmarks d ++ g/Assignment of __dev_t to dev_t:/lockmarks d ++ g/Operands of == have incompatible types (__dev_t, dev_t): /lockmarks d ++ g/Operands of == have incompatible types (unsigned int, int): /lockmarks d ++ g/Assignment of char to char_u: /lockmarks d ++ g/Assignment of unsigned int to int: /lockmarks d ++ g/Assignment of colnr_T to int: /lockmarks d ++ g/Assignment of int to char_u: /lockmarks d ++ g/Function .* expects arg . to be wint_t gets int: /lockmarks d ++ g/^digraph.c.*digraphdefault.*is type char, expects char_u:/lockmarks d ++ g/^digraph.c.*Additional initialization errors for digraphdefault not reported/lockmarks d ++ g/Function strncasecmp expects arg 3 to be int gets size_t: /lockmarks d ++ g/ To ignore signs in type comparisons use +ignoresigns/lockmarks d ++ g/ To allow arbitrary integral types to match any integral type, use +matchanyintegral./lockmarks d ++ g/ To allow arbitrary integral types to match long unsigned, use +longintegral./lockmarks d ++ endfun +*** ../vim-7.2.166/src/digraph.c 2008-06-25 00:26:41.000000000 +0200 +--- src/digraph.c 2009-05-05 20:32:43.000000000 +0200 +*************** +*** 32,38 **** + static void printdigraph __ARGS((digr_T *)); + + /* digraphs added by the user */ +! static garray_T user_digraphs = {0, 0, sizeof(digr_T), 10, NULL}; + + /* + * Note: Characters marked with XX are not included literally, because some +--- 32,38 ---- + static void printdigraph __ARGS((digr_T *)); + + /* digraphs added by the user */ +! static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL}; + + /* + * Note: Characters marked with XX are not included literally, because some +*************** +*** 2371,2380 **** + } + else + #endif +! *p++ = dp->result; + if (char2cells(dp->result) == 1) + *p++ = ' '; +! sprintf((char *)p, " %3d", dp->result); + msg_outtrans(buf); + } + } +--- 2371,2380 ---- + } + else + #endif +! *p++ = (char_u)dp->result; + if (char2cells(dp->result) == 1) + *p++ = ' '; +! vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result); + msg_outtrans(buf); + } + } +*************** +*** 2395,2401 **** + static void keymap_unload __ARGS((void)); + + /* +! * Set up key mapping tables for the 'keymap' option + */ + char_u * + keymap_init() +--- 2395,2404 ---- + static void keymap_unload __ARGS((void)); + + /* +! * Set up key mapping tables for the 'keymap' option. +! * Returns NULL if OK, an error message for failure. This only needs to be +! * used when setting the option, not later when the value has already been +! * checked. + */ + char_u * + keymap_init() +*************** +*** 2412,2436 **** + else + { + char_u *buf; + + /* Source the keymap file. It will contain a ":loadkeymap" command + * which will call ex_loadkeymap() below. */ +! buf = alloc((unsigned)(STRLEN(curbuf->b_p_keymap) + # ifdef FEAT_MBYTE +! + STRLEN(p_enc) + # endif +! + 14)); + if (buf == NULL) + return e_outofmem; + + # ifdef FEAT_MBYTE + /* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */ +! sprintf((char *)buf, "keymap/%s_%s.vim", curbuf->b_p_keymap, p_enc); + if (source_runtime(buf, FALSE) == FAIL) + # endif + { + /* try finding "keymap/'keymap'.vim" in 'runtimepath' */ +! sprintf((char *)buf, "keymap/%s.vim", curbuf->b_p_keymap); + if (source_runtime(buf, FALSE) == FAIL) + { + vim_free(buf); +--- 2415,2443 ---- + else + { + char_u *buf; ++ size_t buflen; + + /* Source the keymap file. It will contain a ":loadkeymap" command + * which will call ex_loadkeymap() below. */ +! buflen = STRLEN(curbuf->b_p_keymap) + # ifdef FEAT_MBYTE +! + STRLEN(p_enc) + # endif +! + 14; +! buf = alloc((unsigned)buflen); + if (buf == NULL) + return e_outofmem; + + # ifdef FEAT_MBYTE + /* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */ +! vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim", +! curbuf->b_p_keymap, p_enc); + if (source_runtime(buf, FALSE) == FAIL) + # endif + { + /* try finding "keymap/'keymap'.vim" in 'runtimepath' */ +! vim_snprintf((char *)buf, buflen, "keymap/%s.vim", +! curbuf->b_p_keymap); + if (source_runtime(buf, FALSE) == FAIL) + { + vim_free(buf); +*** ../vim-7.2.166/src/edit.c 2009-02-21 20:27:00.000000000 +0100 +--- src/edit.c 2009-05-05 21:14:50.000000000 +0200 +*************** +*** 57,63 **** + N_(" Keyword Local completion (^N^P)"), + }; + +! static char_u e_hitend[] = N_("Hit end of paragraph"); + + /* + * Structure used to store one match for insert completion. +--- 57,63 ---- + N_(" Keyword Local completion (^N^P)"), + }; + +! static char e_hitend[] = N_("Hit end of paragraph"); + + /* + * Structure used to store one match for insert completion. +*************** +*** 69,75 **** +--- 69,79 ---- + compl_T *cp_prev; + char_u *cp_str; /* matched text */ + char cp_icase; /* TRUE or FALSE: ignore case */ ++ #ifdef S_SPLINT_S /* splint can't handle array of pointers */ ++ char_u **cp_text; /* text for the menu */ ++ #else + char_u *(cp_text[CPT_COUNT]); /* text for the menu */ ++ #endif + char_u *cp_fname; /* file containing the match, allocated when + * cp_flags has FREE_FNAME */ + int cp_flags; /* ORIGINAL_TEXT, CONT_S_IPOS or FREE_FNAME */ +*************** +*** 306,312 **** + int c = 0; + char_u *ptr; + int lastc; +! colnr_T mincol; + static linenr_T o_lnum = 0; + int i; + int did_backspace = TRUE; /* previous char was backspace */ +--- 310,316 ---- + int c = 0; + char_u *ptr; + int lastc; +! int mincol; + static linenr_T o_lnum = 0; + int i; + int did_backspace = TRUE; /* previous char was backspace */ +*************** +*** 387,393 **** + if (startln) + Insstart.col = 0; + } +! Insstart_textlen = linetabsize(ml_get_curline()); + Insstart_blank_vcol = MAXCOL; + if (!did_ai) + ai_col = 0; +--- 391,397 ---- + if (startln) + Insstart.col = 0; + } +! Insstart_textlen = (colnr_T)linetabsize(ml_get_curline()); + Insstart_blank_vcol = MAXCOL; + if (!did_ai) + ai_col = 0; +*************** +*** 653,659 **** + mincol = curwin->w_wcol; + validate_cursor_col(); + +! if ((int)curwin->w_wcol < (int)mincol - curbuf->b_p_ts + && curwin->w_wrow == W_WINROW(curwin) + + curwin->w_height - 1 - p_so + && (curwin->w_cursor.lnum != curwin->w_topline +--- 657,663 ---- + 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 +*************** +*** 1773,1779 **** + * Compute the screen column where the cursor should be. + */ + vcol = get_indent() - vcol; +! curwin->w_virtcol = (vcol < 0) ? 0 : vcol; + + /* + * Advance the cursor until we reach the right screen column. +--- 1777,1783 ---- + * Compute the screen column where the cursor should be. + */ + vcol = get_indent() - vcol; +! curwin->w_virtcol = (colnr_T)((vcol < 0) ? 0 : vcol); + + /* + * Advance the cursor until we reach the right screen column. +*************** +*** 1800,1808 **** + */ + if (vcol != (int)curwin->w_virtcol) + { +! curwin->w_cursor.col = new_cursor_col; + i = (int)curwin->w_virtcol - vcol; +! ptr = alloc(i + 1); + if (ptr != NULL) + { + new_cursor_col += i; +--- 1804,1812 ---- + */ + if (vcol != (int)curwin->w_virtcol) + { +! curwin->w_cursor.col = (colnr_T)new_cursor_col; + i = (int)curwin->w_virtcol - vcol; +! ptr = alloc((unsigned)(i + 1)); + if (ptr != NULL) + { + new_cursor_col += i; +*************** +*** 1826,1832 **** + if (new_cursor_col <= 0) + curwin->w_cursor.col = 0; + else +! curwin->w_cursor.col = new_cursor_col; + curwin->w_set_curswant = TRUE; + changed_cline_bef_curs(); + +--- 1830,1836 ---- + if (new_cursor_col <= 0) + curwin->w_cursor.col = 0; + else +! curwin->w_cursor.col = (colnr_T)new_cursor_col; + curwin->w_set_curswant = TRUE; + changed_cline_bef_curs(); + +*************** +*** 1966,1972 **** + #ifdef FEAT_MBYTE + if (enc_utf8 && limit_col >= 0) + { +! int ecol = curwin->w_cursor.col + 1; + + /* Make sure the cursor is at the start of a character, but + * skip forward again when going too far back because of a +--- 1970,1976 ---- + #ifdef FEAT_MBYTE + if (enc_utf8 && limit_col >= 0) + { +! colnr_T ecol = curwin->w_cursor.col + 1; + + /* Make sure the cursor is at the start of a character, but + * skip forward again when going too far back because of a +*************** +*** 1982,1988 **** + } + if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol) + return FALSE; +! del_bytes((long)(ecol - curwin->w_cursor.col), FALSE, TRUE); + } + else + #endif +--- 1986,1992 ---- + } + if (*ml_get_cursor() == NUL || curwin->w_cursor.col == ecol) + return FALSE; +! del_bytes((long)((int)ecol - curwin->w_cursor.col), FALSE, TRUE); + } + else + #endif +*************** +*** 2201,2207 **** + actual_compl_length = compl_length; + + /* Allocate wide character array for the completion and fill it. */ +! wca = (int *)alloc(actual_len * sizeof(int)); + if (wca != NULL) + { + p = str; +--- 2205,2211 ---- + actual_compl_length = compl_length; + + /* Allocate wide character array for the completion and fill it. */ +! wca = (int *)alloc((unsigned)(actual_len * sizeof(int))); + if (wca != NULL) + { + p = str; +*************** +*** 2580,2586 **** + */ + void + set_completion(startcol, list) +! int startcol; + list_T *list; + { + /* If already doing completions stop it. */ +--- 2584,2590 ---- + */ + void + set_completion(startcol, list) +! colnr_T startcol; + list_T *list; + { + /* If already doing completions stop it. */ +*************** +*** 2591,2600 **** + if (stop_arrow() == FAIL) + return; + +! if (startcol > (int)curwin->w_cursor.col) + startcol = curwin->w_cursor.col; + compl_col = startcol; +! compl_length = curwin->w_cursor.col - startcol; + /* compl_pattern doesn't need to be set */ + compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length); + if (compl_orig_text == NULL || ins_compl_add(compl_orig_text, +--- 2595,2604 ---- + if (stop_arrow() == FAIL) + return; + +! if (startcol > curwin->w_cursor.col) + startcol = curwin->w_cursor.col; + compl_col = startcol; +! compl_length = (int)curwin->w_cursor.col - (int)startcol; + /* compl_pattern doesn't need to be set */ + compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length); + if (compl_orig_text == NULL || ins_compl_add(compl_orig_text, +*************** +*** 2860,2866 **** + regmatch_T regmatch; + char_u **files; + int count; +- int i; + int save_p_scs; + int dir = compl_direction; + +--- 2864,2869 ---- +*************** +*** 2892,2908 **** + if (ctrl_x_mode == CTRL_X_WHOLE_LINE) + { + char_u *pat_esc = vim_strsave_escaped(pat, (char_u *)"\\"); + + if (pat_esc == NULL) + goto theend; +! i = (int)STRLEN(pat_esc) + 10; +! ptr = alloc(i); + if (ptr == NULL) + { + vim_free(pat_esc); + goto theend; + } +! vim_snprintf((char *)ptr, i, "^\\s*\\zs\\V%s", pat_esc); + regmatch.regprog = vim_regcomp(ptr, RE_MAGIC); + vim_free(pat_esc); + vim_free(ptr); +--- 2895,2912 ---- + if (ctrl_x_mode == CTRL_X_WHOLE_LINE) + { + char_u *pat_esc = vim_strsave_escaped(pat, (char_u *)"\\"); ++ size_t len; + + if (pat_esc == NULL) + goto theend; +! len = STRLEN(pat_esc) + 10; +! ptr = alloc((unsigned)len); + if (ptr == NULL) + { + vim_free(pat_esc); + goto theend; + } +! vim_snprintf((char *)ptr, len, "^\\s*\\zs\\V%s", pat_esc); + regmatch.regprog = vim_regcomp(ptr, RE_MAGIC); + vim_free(pat_esc); + vim_free(ptr); +*************** +*** 2993,2999 **** + { + vim_snprintf((char *)IObuff, IOSIZE, + _("Scanning dictionary: %s"), (char *)files[i]); +! msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + + if (fp != NULL) +--- 2997,3003 ---- + { + vim_snprintf((char *)IObuff, IOSIZE, + _("Scanning dictionary: %s"), (char *)files[i]); +! (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + + if (fp != NULL) +*************** +*** 3311,3317 **** + static int + ins_compl_len() + { +! int off = curwin->w_cursor.col - compl_col; + + if (off < 0) + return 0; +--- 3315,3321 ---- + static int + ins_compl_len() + { +! int off = (int)curwin->w_cursor.col - (int)compl_col; + + if (off < 0) + return 0; +*************** +*** 3347,3353 **** + + vim_free(compl_leader); + compl_leader = vim_strnsave(ml_get_curline() + compl_col, +! curwin->w_cursor.col - compl_col); + if (compl_leader != NULL) + ins_compl_new_leader(); + } +--- 3351,3357 ---- + + vim_free(compl_leader); + compl_leader = vim_strnsave(ml_get_curline() + compl_col, +! (int)(curwin->w_cursor.col - compl_col)); + if (compl_leader != NULL) + ins_compl_new_leader(); + } +*************** +*** 3395,3401 **** + ins_compl_addfrommatch() + { + char_u *p; +! int len = curwin->w_cursor.col - compl_col; + int c; + compl_T *cp; + +--- 3399,3405 ---- + ins_compl_addfrommatch() + { + char_u *p; +! int len = (int)curwin->w_cursor.col - (int)compl_col; + int c; + compl_T *cp; + +*************** +*** 3961,3967 **** + : ins_buf->b_sfname == NULL + ? (char *)ins_buf->b_fname + : (char *)ins_buf->b_sfname); +! msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + else if (*e_cpt == NUL) + break; +--- 3965,3971 ---- + : ins_buf->b_sfname == NULL + ? (char *)ins_buf->b_fname + : (char *)ins_buf->b_sfname); +! (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + else if (*e_cpt == NUL) + break; +*************** +*** 3991,3997 **** + { + type = CTRL_X_TAGS; + sprintf((char*)IObuff, _("Scanning tags.")); +! msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + else + type = -1; +--- 3995,4001 ---- + { + type = CTRL_X_TAGS; + sprintf((char*)IObuff, _("Scanning tags.")); +! (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + else + type = -1; +*************** +*** 6320,6326 **** + ins_need_undo = FALSE; + } + Insstart = curwin->w_cursor; /* new insertion starts here */ +! Insstart_textlen = linetabsize(ml_get_curline()); + ai_col = 0; + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +--- 6324,6330 ---- + ins_need_undo = FALSE; + } + Insstart = curwin->w_cursor; /* new insertion starts here */ +! Insstart_textlen = (colnr_T)linetabsize(ml_get_curline()); + ai_col = 0; + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +*** ../vim-7.2.166/src/ex_cmds.c 2009-04-29 18:44:38.000000000 +0200 +--- src/ex_cmds.c 2009-05-05 17:55:40.000000000 +0200 +*************** +*** 1789,1795 **** + * overwrite a user's viminfo file after a "su root", with a + * viminfo file that the user can't read. + */ +! st_old.st_dev = 0; + st_old.st_ino = 0; + st_old.st_mode = 0600; + if (mch_stat((char *)fname, &st_old) == 0 +--- 1789,1795 ---- + * overwrite a user's viminfo file after a "su root", with a + * viminfo file that the user can't read. + */ +! st_old.st_dev = (dev_t)0; + st_old.st_ino = 0; + st_old.st_mode = 0600; + if (mch_stat((char *)fname, &st_old) == 0 +*************** +*** 3715,3721 **** + /* If the window options were changed may need to set the spell language. + * Can only do this after the buffer has been properly setup. */ + if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL) +! did_set_spelllang(curbuf); + #endif + + if (command == NULL) +--- 3715,3721 ---- + /* If the window options were changed may need to set the spell language. + * Can only do this after the buffer has been properly setup. */ + if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL) +! (void)did_set_spelllang(curbuf); + #endif + + if (command == NULL) +*************** +*** 3788,3794 **** + + #ifdef FEAT_KEYMAP + if (curbuf->b_kmap_state & KEYMAP_INIT) +! keymap_init(); + #endif + + --RedrawingDisabled; +--- 3788,3794 ---- + + #ifdef FEAT_KEYMAP + if (curbuf->b_kmap_state & KEYMAP_INIT) +! (void)keymap_init(); + #endif + + --RedrawingDisabled; +*** ../vim-7.2.166/src/globals.h 2009-03-05 03:13:51.000000000 +0100 +--- src/globals.h 2009-05-09 21:14:49.000000000 +0200 +*************** +*** 524,530 **** + EXTERN win_T *prevwin INIT(= NULL); /* previous window */ + # define W_NEXT(wp) ((wp)->w_next) + # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) +! #define FOR_ALL_TAB_WINDOWS(tp, wp) \ + for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ + for ((wp) = ((tp) == curtab) \ + ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) +--- 524,530 ---- + EXTERN win_T *prevwin INIT(= NULL); /* previous window */ + # define W_NEXT(wp) ((wp)->w_next) + # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) +! # define FOR_ALL_TAB_WINDOWS(tp, wp) \ + for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ + for ((wp) = ((tp) == curtab) \ + ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) +*************** +*** 718,724 **** + + EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ + # ifdef DO_INIT +! = INIT_POS_T + # endif + ; + +--- 718,724 ---- + + EXTERN pos_T saved_cursor /* w_cursor before formatting text. */ + # ifdef DO_INIT +! = INIT_POS_T(0, 0, 0) + # endif + ; + +*************** +*** 1039,1045 **** + EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ + EXTERN pos_T last_cursormoved /* for CursorMoved event */ + # ifdef DO_INIT +! = INIT_POS_T + # endif + ; + #endif +--- 1039,1045 ---- + EXTERN int did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */ + EXTERN pos_T last_cursormoved /* for CursorMoved event */ + # ifdef DO_INIT +! = INIT_POS_T(0, 0, 0) + # endif + ; + #endif +*** ../vim-7.2.166/src/ops.c 2009-04-29 17:39:17.000000000 +0200 +--- src/ops.c 2009-05-13 12:41:02.000000000 +0200 +*************** +*** 6400,6406 **** + { + getvcols(curwin, &min_pos, &max_pos, &min_pos.col, + &max_pos.col); +! sprintf((char *)buf1, _("%ld Cols; "), + (long)(oparg.end_vcol - oparg.start_vcol + 1)); + } + else +--- 6400,6406 ---- + { + getvcols(curwin, &min_pos, &max_pos, &min_pos.col, + &max_pos.col); +! vim_snprintf((char *)buf1, sizeof(buf1), _("%ld Cols; "), + (long)(oparg.end_vcol - oparg.start_vcol + 1)); + } + else +*************** +*** 6408,6420 **** + + if (char_count_cursor == byte_count_cursor + && char_count == byte_count) +! sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), + buf1, line_count_selected, + (long)curbuf->b_ml.ml_line_count, + word_count_cursor, word_count, + byte_count_cursor, byte_count); + else +! sprintf((char *)IObuff, _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"), + buf1, line_count_selected, + (long)curbuf->b_ml.ml_line_count, + word_count_cursor, word_count, +--- 6408,6422 ---- + + if (char_count_cursor == byte_count_cursor + && char_count == byte_count) +! vim_snprintf((char *)IObuff, IOSIZE, +! _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"), + buf1, line_count_selected, + (long)curbuf->b_ml.ml_line_count, + word_count_cursor, word_count, + byte_count_cursor, byte_count); + else +! vim_snprintf((char *)IObuff, IOSIZE, +! _("Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"), + buf1, line_count_selected, + (long)curbuf->b_ml.ml_line_count, + word_count_cursor, word_count, +*************** +*** 6426,6445 **** + { + p = ml_get_curline(); + validate_virtcol(); +! col_print(buf1, (int)curwin->w_cursor.col + 1, + (int)curwin->w_virtcol + 1); +! col_print(buf2, (int)STRLEN(p), linetabsize(p)); + + if (char_count_cursor == byte_count_cursor + && char_count == byte_count) +! sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"), + (char *)buf1, (char *)buf2, + (long)curwin->w_cursor.lnum, + (long)curbuf->b_ml.ml_line_count, + word_count_cursor, word_count, + byte_count_cursor, byte_count); + else +! sprintf((char *)IObuff, _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"), + (char *)buf1, (char *)buf2, + (long)curwin->w_cursor.lnum, + (long)curbuf->b_ml.ml_line_count, +--- 6428,6449 ---- + { + p = ml_get_curline(); + validate_virtcol(); +! col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1, + (int)curwin->w_virtcol + 1); +! col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p)); + + if (char_count_cursor == byte_count_cursor + && char_count == byte_count) +! vim_snprintf((char *)IObuff, IOSIZE, +! _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"), + (char *)buf1, (char *)buf2, + (long)curwin->w_cursor.lnum, + (long)curbuf->b_ml.ml_line_count, + word_count_cursor, word_count, + byte_count_cursor, byte_count); + else +! vim_snprintf((char *)IObuff, IOSIZE, +! _("Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"), + (char *)buf1, (char *)buf2, + (long)curwin->w_cursor.lnum, + (long)curbuf->b_ml.ml_line_count, +*** ../vim-7.2.166/src/os_unix.c 2009-03-02 02:44:54.000000000 +0100 +--- src/os_unix.c 2009-05-05 17:35:58.000000000 +0200 +*************** +*** 199,205 **** + #endif + + #ifndef SIG_ERR +! # define SIG_ERR ((RETSIGTYPE (*)())-1) + #endif + + /* volatile because it is used in signal handler sig_winch(). */ +--- 199,207 ---- + #endif + + #ifndef SIG_ERR +! # ifndef S_SPLINT_S +! # define SIG_ERR ((RETSIGTYPE (*)())-1) +! # endif + #endif + + /* volatile because it is used in signal handler sig_winch(). */ +*************** +*** 441,447 **** + + #if defined(HAVE_TOTAL_MEM) || defined(PROTO) + # ifdef HAVE_SYS_RESOURCE_H +! # include + # endif + # if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTL) + # include +--- 443,451 ---- + + #if defined(HAVE_TOTAL_MEM) || defined(PROTO) + # ifdef HAVE_SYS_RESOURCE_H +! # ifndef S_SPLINT_S /* splint crashes on bits/resource.h */ +! # include +! # endif + # endif + # if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTL) + # include +*** ../vim-7.2.166/src/os_unix.h 2008-06-20 18:06:36.000000000 +0200 +--- src/os_unix.h 2009-05-05 17:07:45.000000000 +0200 +*************** +*** 53,59 **** + #endif + + #ifdef HAVE_UNISTD_H +! # include + #endif + + #ifdef HAVE_LIBC_H +--- 53,61 ---- + #endif + + #ifdef HAVE_UNISTD_H +! # ifndef S_SPLINT_S /* splint crashes on bits/confname.h */ +! # include +! # endif + #endif + + #ifdef HAVE_LIBC_H +*** ../vim-7.2.166/src/proto/buffer.pro 2008-11-15 14:10:23.000000000 +0100 +--- src/proto/buffer.pro 2009-05-13 12:23:41.000000000 +0200 +*************** +*** 37,49 **** + int otherfile __ARGS((char_u *ffname)); + void buf_setino __ARGS((buf_T *buf)); + void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); +! void col_print __ARGS((char_u *buf, int col, int vcol)); + void maketitle __ARGS((void)); + void resettitle __ARGS((void)); + void free_titles __ARGS((void)); + int build_stl_str_hl __ARGS((win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use_sandbox, int fillchar, int maxwidth, struct stl_hlrec *hltab, struct stl_hlrec *tabtab)); +! void get_rel_pos __ARGS((win_T *wp, char_u *str)); +! int append_arg_number __ARGS((win_T *wp, char_u *buf, int add_file, int maxlen)); + char_u *fix_fname __ARGS((char_u *fname)); + void fname_expand __ARGS((buf_T *buf, char_u **ffname, char_u **sfname)); + char_u *alist_name __ARGS((aentry_T *aep)); +--- 37,48 ---- + int otherfile __ARGS((char_u *ffname)); + void buf_setino __ARGS((buf_T *buf)); + void fileinfo __ARGS((int fullname, int shorthelp, int dont_truncate)); +! void col_print __ARGS((char_u *buf, size_t buflen, int col, int vcol)); + void maketitle __ARGS((void)); + void resettitle __ARGS((void)); + void free_titles __ARGS((void)); + int build_stl_str_hl __ARGS((win_T *wp, char_u *out, size_t outlen, char_u *fmt, int use_sandbox, int fillchar, int maxwidth, struct stl_hlrec *hltab, struct stl_hlrec *tabtab)); +! void get_rel_pos __ARGS((win_T *wp, char_u *buf, int buflen)); + char_u *fix_fname __ARGS((char_u *fname)); + void fname_expand __ARGS((buf_T *buf, char_u **ffname, char_u **sfname)); + char_u *alist_name __ARGS((aentry_T *aep)); +*************** +*** 54,61 **** + void write_viminfo_bufferlist __ARGS((FILE *fp)); + char *buf_spname __ARGS((buf_T *buf)); + void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr)); +! int buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); +! int_u buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); + linenr_T buf_delsign __ARGS((buf_T *buf, int id)); + int buf_findsign __ARGS((buf_T *buf, int id)); + int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum)); +--- 53,60 ---- + void write_viminfo_bufferlist __ARGS((FILE *fp)); + char *buf_spname __ARGS((buf_T *buf)); + void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr)); +! linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); +! int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); + linenr_T buf_delsign __ARGS((buf_T *buf, int id)); + int buf_findsign __ARGS((buf_T *buf, int id)); + int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum)); +*** ../vim-7.2.166/src/proto/edit.pro 2008-01-16 20:03:13.000000000 +0100 +--- src/proto/edit.pro 2009-05-05 20:51:56.000000000 +0200 +*************** +*** 8,14 **** + void backspace_until_column __ARGS((int col)); + int vim_is_ctrl_x_key __ARGS((int c)); + int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags)); +! void set_completion __ARGS((int startcol, list_T *list)); + void ins_compl_show_pum __ARGS((void)); + char_u *find_word_start __ARGS((char_u *ptr)); + char_u *find_word_end __ARGS((char_u *ptr)); +--- 8,14 ---- + void backspace_until_column __ARGS((int col)); + int vim_is_ctrl_x_key __ARGS((int c)); + int ins_compl_add_infercase __ARGS((char_u *str, int len, int icase, char_u *fname, int dir, int flags)); +! void set_completion __ARGS((colnr_T startcol, list_T *list)); + void ins_compl_show_pum __ARGS((void)); + char_u *find_word_start __ARGS((char_u *ptr)); + char_u *find_word_end __ARGS((char_u *ptr)); +*** ../vim-7.2.166/src/screen.c 2009-03-18 19:07:09.000000000 +0100 +--- src/screen.c 2009-05-05 17:42:45.000000000 +0200 +*************** +*** 9481,9493 **** + win_T *wp; + int always; + { +! char_u buffer[70]; + int row; + int fillchar; + int attr; + int empty_line = FALSE; + colnr_T virtcol; + int i; + int o; + #ifdef FEAT_VERTSPLIT + int this_ru_col; +--- 9481,9495 ---- + win_T *wp; + int always; + { +! #define RULER_BUF_LEN 70 +! char_u buffer[RULER_BUF_LEN]; + int row; + int fillchar; + int attr; + int empty_line = FALSE; + colnr_T virtcol; + int i; ++ size_t len; + int o; + #ifdef FEAT_VERTSPLIT + int this_ru_col; +*************** +*** 9602,9612 **** + * Some sprintfs return the length, some return a pointer. + * To avoid portability problems we use strlen() here. + */ +! sprintf((char *)buffer, "%ld,", + (wp->w_buffer->b_ml.ml_flags & ML_EMPTY) + ? 0L + : (long)(wp->w_cursor.lnum)); +! col_print(buffer + STRLEN(buffer), + empty_line ? 0 : (int)wp->w_cursor.col + 1, + (int)virtcol + 1); + +--- 9604,9615 ---- + * Some sprintfs return the length, some return a pointer. + * To avoid portability problems we use strlen() here. + */ +! vim_snprintf((char *)buffer, RULER_BUF_LEN, "%ld,", + (wp->w_buffer->b_ml.ml_flags & ML_EMPTY) + ? 0L + : (long)(wp->w_cursor.lnum)); +! len = STRLEN(buffer); +! col_print(buffer + len, RULER_BUF_LEN - len, + empty_line ? 0 : (int)wp->w_cursor.col + 1, + (int)virtcol + 1); + +*************** +*** 9616,9622 **** + * screen up on some terminals). + */ + i = (int)STRLEN(buffer); +! get_rel_pos(wp, buffer + i + 1); + o = i + vim_strsize(buffer + i + 1); + #ifdef FEAT_WINDOWS + if (wp->w_status_height == 0) /* can't use last char of screen */ +--- 9619,9625 ---- + * screen up on some terminals). + */ + i = (int)STRLEN(buffer); +! get_rel_pos(wp, buffer + i + 1, RULER_BUF_LEN - i - 1); + o = i + vim_strsize(buffer + i + 1); + #ifdef FEAT_WINDOWS + if (wp->w_status_height == 0) /* can't use last char of screen */ +*************** +*** 9643,9649 **** + buffer[i++] = fillchar; + ++o; + } +! get_rel_pos(wp, buffer + i); + } + /* Truncate at window boundary. */ + #ifdef FEAT_MBYTE +--- 9646,9652 ---- + buffer[i++] = fillchar; + ++o; + } +! get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i); + } + /* Truncate at window boundary. */ + #ifdef FEAT_MBYTE +*** ../vim-7.2.166/src/structs.h 2008-11-15 16:05:30.000000000 +0100 +--- src/structs.h 2009-05-05 18:20:36.000000000 +0200 +*************** +*** 33,41 **** + } pos_T; + + #ifdef FEAT_VIRTUALEDIT +! # define INIT_POS_T {0, 0, 0} + #else +! # define INIT_POS_T {0, 0} + #endif + + /* +--- 33,41 ---- + } pos_T; + + #ifdef FEAT_VIRTUALEDIT +! # define INIT_POS_T(l, c, ca) {l, c, ca} + #else +! # define INIT_POS_T(l, c, ca) {l, c} + #endif + + /* +*************** +*** 1166,1172 **** + char_u *b_fname; /* current file name */ + + #ifdef UNIX +! int b_dev; /* device number (-1 if not set) */ + ino_t b_ino; /* inode number */ + #endif + #ifdef FEAT_CW_EDITOR +--- 1166,1172 ---- + char_u *b_fname; /* current file name */ + + #ifdef UNIX +! dev_t b_dev; /* device number (-1 if not set) */ + ino_t b_ino; /* inode number */ + #endif + #ifdef FEAT_CW_EDITOR +*************** +*** 1645,1651 **** +--- 1645,1655 ---- + #endif + #ifdef FEAT_DIFF + diff_T *tp_first_diff; ++ # ifdef S_SPLINT_S /* splint doesn't understand the array of pointers */ ++ buf_T **tp_diffbuf; ++ # else + buf_T *(tp_diffbuf[DB_COUNT]); ++ # endif + int tp_diff_invalid; /* list of diffs is outdated */ + #endif + frame_T *tp_snapshot; /* window layout snapshot */ +*** ../vim-7.2.166/src/version.c 2009-04-29 18:44:38.000000000 +0200 +--- src/version.c 2009-05-13 12:06:36.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 167, + /**/ + +-- +Snoring is prohibited unless all bedroom windows are closed and securely +locked. + [real standing law in Massachusetts, United States of America] + + /// 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/7.2.168 b/7.2.168 new file mode 100644 index 00000000..29cafb61 --- /dev/null +++ b/7.2.168 @@ -0,0 +1,74 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.168 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.168 +Problem: When no ctags program can be found, "make tags" attempts to + execute the first C file. +Solution: Default to "ctags" when no ctags program can be found. +Files: src/configure.in, src/auto/configure + + +*** ../vim-7.2.167/src/configure.in 2009-04-22 17:50:53.000000000 +0200 +--- src/configure.in 2009-05-05 17:46:45.000000000 +0200 +*************** +*** 2968,2974 **** + dnl Link with xpg4, it is said to make Korean locale working + AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,) + +! dnl Check how we can run ctags + dnl --version for Exuberant ctags (preferred) + dnl Add --fields=+S to get function signatures for omni completion. + dnl -t for typedefs (many ctags have this) +--- 2968,2974 ---- + dnl Link with xpg4, it is said to make Korean locale working + AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,) + +! dnl Check how we can run ctags. Default to "ctags" when nothing works. + dnl --version for Exuberant ctags (preferred) + dnl Add --fields=+S to get function signatures for omni completion. + dnl -t for typedefs (many ctags have this) +*************** +*** 2980,2985 **** +--- 2980,2986 ---- + if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then + TAGPRG="ctags -I INIT+ --fields=+S" + else ++ TAGPRG="ctags" + (eval etags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags" + (eval etags -c /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags -c" + (eval ctags /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="ctags" +*** ../vim-7.2.167/src/auto/configure 2009-04-22 17:50:53.000000000 +0200 +--- src/auto/configure 2009-05-13 14:38:10.000000000 +0200 +*************** +*** 15707,15712 **** +--- 15723,15729 ---- + if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then + TAGPRG="ctags -I INIT+ --fields=+S" + else ++ TAGPRG="ctags" + (eval etags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags" + (eval etags -c /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags -c" + (eval ctags /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="ctags" +*** ../vim-7.2.167/src/version.c 2009-05-13 12:46:36.000000000 +0200 +--- src/version.c 2009-05-13 14:46:35.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 168, + /**/ + +-- +Zen Microsystems: we're the om in .commmmmmmmm + + /// 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/7.2.169 b/7.2.169 new file mode 100644 index 00000000..4ae90a51 --- /dev/null +++ b/7.2.169 @@ -0,0 +1,1214 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.169 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.169 +Problem: Splint complains about a lot of things. +Solution: Add type casts, #ifdefs and other changes to avoid warnings. + Change colnr_T from unsigned to int. Avoids mistakes with + subtracting columns. +Files: src/cleanlint.vim, src/diff.c, src/edit.c, src/ex_cmds.c, + src/ex_cmds2.c, src/ex_docmd.c, src/proto/ex_cmds.pro, + src/proto/spell.pro, src/quickfix.c, src/spell.c, src/structs.h, + src/term.h, src/vim.h + + +*** ../vim-7.2.168/src/cleanlint.vim 2009-05-13 12:46:36.000000000 +0200 +--- src/cleanlint.vim 2009-05-13 18:03:11.000000000 +0200 +*************** +*** 1,27 **** + " Vim tool: Filter output of splint + " + " Maintainer: Bram Moolenaar +! " Last Change: 2009 May 05 + + " Usage: redirect output of "make lint" to a file, edit that file with Vim and + " :call CleanLint() + " This deletes irrelevant messages. What remains might be valid warnings. + + fun! CleanLint() +- g/^ Types are incompatible/lockmarks d + g/Assignment of dev_t to __dev_t:/lockmarks d + g/Assignment of __dev_t to dev_t:/lockmarks d + g/Operands of == have incompatible types (__dev_t, dev_t): /lockmarks d +! g/Operands of == have incompatible types (unsigned int, int): /lockmarks d + g/Assignment of char to char_u: /lockmarks d + g/Assignment of unsigned int to int: /lockmarks d +! g/Assignment of colnr_T to int: /lockmarks d + g/Assignment of int to char_u: /lockmarks d + g/Function .* expects arg . to be wint_t gets int: /lockmarks d +! g/^digraph.c.*digraphdefault.*is type char, expects char_u:/lockmarks d + g/^digraph.c.*Additional initialization errors for digraphdefault not reported/lockmarks d + g/Function strncasecmp expects arg 3 to be int gets size_t: /lockmarks d + g/ To ignore signs in type comparisons use +ignoresigns/lockmarks d + g/ To allow arbitrary integral types to match any integral type, use +matchanyintegral./lockmarks d + g/ To allow arbitrary integral types to match long unsigned, use +longintegral./lockmarks d + endfun +--- 1,32 ---- + " Vim tool: Filter output of splint + " + " Maintainer: Bram Moolenaar +! " Last Change: 2009 May 13 + + " Usage: redirect output of "make lint" to a file, edit that file with Vim and + " :call CleanLint() + " This deletes irrelevant messages. What remains might be valid warnings. + + fun! CleanLint() + g/Assignment of dev_t to __dev_t:/lockmarks d + g/Assignment of __dev_t to dev_t:/lockmarks d + g/Operands of == have incompatible types (__dev_t, dev_t): /lockmarks d +! g/Operands of == have incompatible types (char_u, int): /lockmarks d + g/Assignment of char to char_u: /lockmarks d + g/Assignment of unsigned int to int: /lockmarks d +! g/Assignment of int to unsigned int: /lockmarks d +! g/Assignment of unsigned int to long int: /lockmarks d + g/Assignment of int to char_u: /lockmarks d + g/Function .* expects arg . to be wint_t gets int: /lockmarks d +! g/Function .* expects arg . to be size_t gets int: /lockmarks d +! g/Initial value of .* is type char, expects char_u: /lockmarks d +! g/^ex_cmds.h:.* Function types are inconsistent. Parameter 1 is implicitly temp, but unqualified in assigned function:/lockmarks d +! g/^ex_docmd.c:.* nospec_str/lockmarks d + g/^digraph.c.*Additional initialization errors for digraphdefault not reported/lockmarks d + g/Function strncasecmp expects arg 3 to be int gets size_t: /lockmarks d ++ g/^ Types are incompatible/lockmarks d + g/ To ignore signs in type comparisons use +ignoresigns/lockmarks d + g/ To allow arbitrary integral types to match any integral type, use +matchanyintegral./lockmarks d + g/ To allow arbitrary integral types to match long unsigned, use +longintegral./lockmarks d ++ g+ A variable is declared but never used. Use /.@unused@./ in front of declaration to suppress message.+lockmarks d + endfun +*** ../vim-7.2.168/src/diff.c 2009-03-11 12:45:44.000000000 +0100 +--- src/diff.c 2009-05-13 16:16:11.000000000 +0200 +*************** +*** 827,832 **** +--- 827,833 ---- + char_u *tmp_diff; + { + char_u *cmd; ++ size_t len; + + #ifdef FEAT_EVAL + if (*p_dex != NUL) +*************** +*** 835,842 **** + else + #endif + { +! cmd = alloc((unsigned)(STRLEN(tmp_orig) + STRLEN(tmp_new) +! + STRLEN(tmp_diff) + STRLEN(p_srr) + 27)); + if (cmd != NULL) + { + /* We don't want $DIFF_OPTIONS to get in the way. */ +--- 836,844 ---- + else + #endif + { +! len = STRLEN(tmp_orig) + STRLEN(tmp_new) +! + STRLEN(tmp_diff) + STRLEN(p_srr) + 27; +! cmd = alloc((unsigned)len); + if (cmd != NULL) + { + /* We don't want $DIFF_OPTIONS to get in the way. */ +*************** +*** 846,852 **** + /* Build the diff command and execute it. Always use -a, binary + * differences are of no use. Ignore errors, diff returns + * non-zero when differences have been found. */ +! sprintf((char *)cmd, "diff %s%s%s%s%s %s", + diff_a_works == FALSE ? "" : "-a ", + #if defined(MSWIN) || defined(MSDOS) + diff_bin_works == TRUE ? "--binary " : "", +--- 848,854 ---- + /* Build the diff command and execute it. Always use -a, binary + * differences are of no use. Ignore errors, diff returns + * non-zero when differences have been found. */ +! vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s", + diff_a_works == FALSE ? "" : "-a ", + #if defined(MSWIN) || defined(MSDOS) + diff_bin_works == TRUE ? "--binary " : "", +*************** +*** 856,862 **** + (diff_flags & DIFF_IWHITE) ? "-b " : "", + (diff_flags & DIFF_ICASE) ? "-i " : "", + tmp_orig, tmp_new); +! append_redir(cmd, p_srr, tmp_diff); + #ifdef FEAT_AUTOCMD + block_autocmds(); /* Avoid ShellCmdPost stuff */ + #endif +--- 858,864 ---- + (diff_flags & DIFF_IWHITE) ? "-b " : "", + (diff_flags & DIFF_ICASE) ? "-i " : "", + tmp_orig, tmp_new); +! append_redir(cmd, (int)len, p_srr, tmp_diff); + #ifdef FEAT_AUTOCMD + block_autocmds(); /* Avoid ShellCmdPost stuff */ + #endif +*************** +*** 881,886 **** +--- 883,889 ---- + char_u *tmp_orig; /* name of original temp file */ + char_u *tmp_new; /* name of patched temp file */ + char_u *buf = NULL; ++ size_t buflen; + win_T *old_curwin = curwin; + char_u *newname = NULL; /* name of patched file buffer */ + #ifdef UNIX +*************** +*** 920,930 **** + /* Get the absolute path of the patchfile, changing directory below. */ + fullname = FullName_save(eap->arg, FALSE); + #endif +! buf = alloc((unsigned)(STRLEN(tmp_orig) + ( + # ifdef UNIX + fullname != NULL ? STRLEN(fullname) : + # endif +! STRLEN(eap->arg)) + STRLEN(tmp_new) + 16)); + if (buf == NULL) + goto theend; + +--- 923,934 ---- + /* Get the absolute path of the patchfile, changing directory below. */ + fullname = FullName_save(eap->arg, FALSE); + #endif +! buflen = STRLEN(tmp_orig) + ( + # ifdef UNIX + fullname != NULL ? STRLEN(fullname) : + # endif +! STRLEN(eap->arg)) + STRLEN(tmp_new) + 16; +! buf = alloc((unsigned)buflen); + if (buf == NULL) + goto theend; + +*************** +*** 961,967 **** + { + /* Build the patch command and execute it. Ignore errors. Switch to + * cooked mode to allow the user to respond to prompts. */ +! sprintf((char *)buf, "patch -o %s %s < \"%s\"", tmp_new, tmp_orig, + # ifdef UNIX + fullname != NULL ? fullname : + # endif +--- 965,972 ---- + { + /* Build the patch command and execute it. Ignore errors. Switch to + * cooked mode to allow the user to respond to prompts. */ +! vim_snprintf((char *)buf, buflen, "patch -o %s %s < \"%s\"", +! tmp_new, tmp_orig, + # ifdef UNIX + fullname != NULL ? fullname : + # endif +*** ../vim-7.2.168/src/edit.c 2009-05-13 12:46:36.000000000 +0200 +--- src/edit.c 2009-05-13 18:29:21.000000000 +0200 +*************** +*** 169,175 **** + static int ins_compl_key2count __ARGS((int c)); + static int ins_compl_use_match __ARGS((int c)); + static int ins_complete __ARGS((int c)); +! static int quote_meta __ARGS((char_u *dest, char_u *str, int len)); + #endif /* FEAT_INS_EXPAND */ + + #define BACKSPACE_CHAR 1 +--- 169,175 ---- + static int ins_compl_key2count __ARGS((int c)); + static int ins_compl_use_match __ARGS((int c)); + static int ins_complete __ARGS((int c)); +! static unsigned quote_meta __ARGS((char_u *dest, char_u *str, int len)); + #endif /* FEAT_INS_EXPAND */ + + #define BACKSPACE_CHAR 1 +*************** +*** 757,763 **** + * there is nothing to add, CTRL-L works like CTRL-P then. */ + if (c == Ctrl_L + && (ctrl_x_mode != CTRL_X_WHOLE_LINE +! || STRLEN(compl_shown_match->cp_str) + > curwin->w_cursor.col - compl_col)) + { + ins_compl_addfrommatch(); +--- 757,763 ---- + * there is nothing to add, CTRL-L works like CTRL-P then. */ + if (c == Ctrl_L + && (ctrl_x_mode != CTRL_X_WHOLE_LINE +! || (int)STRLEN(compl_shown_match->cp_str) + > curwin->w_cursor.col - compl_col)) + { + ins_compl_addfrommatch(); +*************** +*** 3837,3843 **** +--- 3837,3847 ---- + char_u *word; + int icase = FALSE; + int adup = FALSE; ++ #ifdef S_SPLINT_S /* splint doesn't parse array of pointers correctly */ ++ char_u **cptext; ++ #else + char_u *(cptext[CPT_COUNT]); ++ #endif + + if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) + { +*************** +*** 3994,4000 **** + else if (*e_cpt == ']' || *e_cpt == 't') + { + type = CTRL_X_TAGS; +! sprintf((char*)IObuff, _("Scanning tags.")); + (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + else +--- 3998,4004 ---- + else if (*e_cpt == ']' || *e_cpt == 't') + { + type = CTRL_X_TAGS; +! vim_snprintf((char *)IObuff, IOSIZE, _("Scanning tags.")); + (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); + } + else +*************** +*** 4093,4099 **** + case CTRL_X_SPELL: + #ifdef FEAT_SPELL + num_matches = expand_spelling(first_match_pos.lnum, +! first_match_pos.col, compl_pattern, &matches); + if (num_matches > 0) + ins_compl_add_matches(num_matches, matches, p_ic); + #endif +--- 4097,4103 ---- + case CTRL_X_SPELL: + #ifdef FEAT_SPELL + num_matches = expand_spelling(first_match_pos.lnum, +! compl_pattern, &matches); + if (num_matches > 0) + ins_compl_add_matches(num_matches, matches, p_ic); + #endif +*************** +*** 4803,4812 **** + { + char_u *prefix = (char_u *)"\\<"; + +! /* we need 3 extra chars, 1 for the NUL and +! * 2 >= strlen(prefix) -- Acevedo */ + compl_pattern = alloc(quote_meta(NULL, line + compl_col, +! compl_length) + 3); + if (compl_pattern == NULL) + return FAIL; + if (!vim_iswordp(line + compl_col) +--- 4807,4815 ---- + { + char_u *prefix = (char_u *)"\\<"; + +! /* we need up to 2 extra chars for the prefix */ + compl_pattern = alloc(quote_meta(NULL, line + compl_col, +! compl_length) + 2); + if (compl_pattern == NULL) + return FAIL; + if (!vim_iswordp(line + compl_col) +*************** +*** 4881,4887 **** + else + { + compl_pattern = alloc(quote_meta(NULL, line + compl_col, +! compl_length) + 3); + if (compl_pattern == NULL) + return FAIL; + STRCPY((char *)compl_pattern, "\\<"); +--- 4884,4890 ---- + else + { + compl_pattern = alloc(quote_meta(NULL, line + compl_col, +! compl_length) + 2); + if (compl_pattern == NULL) + return FAIL; + STRCPY((char *)compl_pattern, "\\<"); +*************** +*** 4963,4969 **** + if (col < 0) + col = curs_col; + compl_col = col; +! if ((colnr_T)compl_col > curs_col) + compl_col = curs_col; + + /* Setup variables for completion. Need to obtain "line" again, +--- 4966,4972 ---- + if (col < 0) + col = curs_col; + compl_col = col; +! if (compl_col > curs_col) + compl_col = curs_col; + + /* Setup variables for completion. Need to obtain "line" again, +*************** +*** 5236,5250 **** + * a backslash) the metachars, and dest would be NUL terminated. + * Returns the length (needed) of dest + */ +! static int + quote_meta(dest, src, len) + char_u *dest; + char_u *src; + int len; + { +! int m; + +! for (m = len; --len >= 0; src++) + { + switch (*src) + { +--- 5239,5253 ---- + * a backslash) the metachars, and dest would be NUL terminated. + * Returns the length (needed) of dest + */ +! static unsigned + quote_meta(dest, src, len) + char_u *dest; + char_u *src; + int len; + { +! unsigned m = (unsigned)len + 1; /* one extra for the NUL */ + +! for ( ; --len >= 0; src++) + { + switch (*src) + { +*************** +*** 6073,6079 **** + * in 'formatoptions' and there is a single character before the cursor. + * Otherwise the line would be broken and when typing another non-white + * next they are not joined back together. */ +! wasatend = (pos.col == STRLEN(old)); + if (*old != NUL && !trailblank && wasatend) + { + dec_cursor(); +--- 6076,6082 ---- + * in 'formatoptions' and there is a single character before the cursor. + * Otherwise the line would be broken and when typing another non-white + * next they are not joined back together. */ +! wasatend = (pos.col == (colnr_T)STRLEN(old)); + if (*old != NUL && !trailblank && wasatend) + { + dec_cursor(); +*************** +*** 6250,6256 **** + * three digits. */ + if (VIM_ISDIGIT(c)) + { +! sprintf((char *)buf, "%03d", c); + AppendToRedobuff(buf); + } + else +--- 6253,6259 ---- + * three digits. */ + if (VIM_ISDIGIT(c)) + { +! vim_snprintf((char *)buf, sizeof(buf), "%03d", c); + AppendToRedobuff(buf); + } + else +*************** +*** 6453,6462 **** + * deleted characters. */ + if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum) + { +! cc = (int)STRLEN(ml_get_curline()); +! if (VIsual.col > (colnr_T)cc) + { +! VIsual.col = cc; + # ifdef FEAT_VIRTUALEDIT + VIsual.coladd = 0; + # endif +--- 6457,6467 ---- + * deleted characters. */ + if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum) + { +! int len = (int)STRLEN(ml_get_curline()); +! +! if (VIsual.col > len) + { +! VIsual.col = len; + # ifdef FEAT_VIRTUALEDIT + VIsual.coladd = 0; + # endif +*************** +*** 8315,8320 **** +--- 8320,8326 ---- + linenr_T lnum; + int cc; + int temp = 0; /* init for GCC */ ++ colnr_T save_col; + colnr_T mincol; + int did_backspace = FALSE; + int in_indent; +*************** +*** 8472,8484 **** + */ + while (cc > 0) + { +! temp = curwin->w_cursor.col; + #ifdef FEAT_MBYTE + mb_replace_pop_ins(cc); + #else + ins_char(cc); + #endif +! curwin->w_cursor.col = temp; + cc = replace_pop(); + } + /* restore the characters that NL replaced */ +--- 8478,8490 ---- + */ + while (cc > 0) + { +! save_col = curwin->w_cursor.col; + #ifdef FEAT_MBYTE + mb_replace_pop_ins(cc); + #else + ins_char(cc); + #endif +! curwin->w_cursor.col = save_col; + cc = replace_pop(); + } + /* restore the characters that NL replaced */ +*************** +*** 8510,8520 **** + #endif + ) + { +! temp = curwin->w_cursor.col; + beginline(BL_WHITE); + if (curwin->w_cursor.col < (colnr_T)temp) + mincol = curwin->w_cursor.col; +! curwin->w_cursor.col = temp; + } + + /* +--- 8516,8526 ---- + #endif + ) + { +! save_col = curwin->w_cursor.col; + beginline(BL_WHITE); + if (curwin->w_cursor.col < (colnr_T)temp) + mincol = curwin->w_cursor.col; +! curwin->w_cursor.col = save_col; + } + + /* +*** ../vim-7.2.168/src/ex_cmds.c 2009-05-13 12:46:36.000000000 +0200 +--- src/ex_cmds.c 2009-05-13 18:24:18.000000000 +0200 +*************** +*** 87,99 **** + )) + { + transchar_nonprint(buf3, c); +! sprintf(buf1, " <%s>", (char *)buf3); + } + else + buf1[0] = NUL; + #ifndef EBCDIC + if (c >= 0x80) +! sprintf(buf2, " ", transchar(c & 0x7f)); + else + #endif + buf2[0] = NUL; +--- 87,100 ---- + )) + { + transchar_nonprint(buf3, c); +! vim_snprintf(buf1, sizeof(buf1), " <%s>", (char *)buf3); + } + else + buf1[0] = NUL; + #ifndef EBCDIC + if (c >= 0x80) +! vim_snprintf(buf2, sizeof(buf2), " ", +! (char *)transchar(c & 0x7f)); + else + #endif + buf2[0] = NUL; +*************** +*** 358,364 **** + linenr_T lnum; + long maxlen = 0; + sorti_T *nrs; +! size_t count = eap->line2 - eap->line1 + 1; + size_t i; + char_u *p; + char_u *s; +--- 359,365 ---- + linenr_T lnum; + long maxlen = 0; + sorti_T *nrs; +! size_t count = (size_t)(eap->line2 - eap->line1 + 1); + size_t i; + char_u *p; + char_u *s; +*************** +*** 957,963 **** + } + len += (int)STRLEN(prevcmd); + } +! if ((t = alloc(len)) == NULL) + { + vim_free(newcmd); + return; +--- 958,964 ---- + } + len += (int)STRLEN(prevcmd); + } +! if ((t = alloc((unsigned)len)) == NULL) + { + vim_free(newcmd); + return; +*************** +*** 1548,1554 **** + * redirecting input and/or output. + */ + if (itmp != NULL || otmp != NULL) +! sprintf((char *)buf, "(%s)", (char *)cmd); + else + STRCPY(buf, cmd); + if (itmp != NULL) +--- 1549,1555 ---- + * redirecting input and/or output. + */ + if (itmp != NULL || otmp != NULL) +! vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); + else + STRCPY(buf, cmd); + if (itmp != NULL) +*************** +*** 1597,1633 **** + } + #endif + if (otmp != NULL) +! append_redir(buf, p_srr, otmp); + + return buf; + } + + /* +! * Append output redirection for file "fname" to the end of string buffer "buf" + * Works with the 'shellredir' and 'shellpipe' options. + * The caller should make sure that there is enough room: + * STRLEN(opt) + STRLEN(fname) + 3 + */ + void +! append_redir(buf, opt, fname) + char_u *buf; + char_u *opt; + char_u *fname; + { + char_u *p; + +! buf += STRLEN(buf); + /* find "%s", skipping "%%" */ + for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p) + if (p[1] == 's') + break; + if (p != NULL) + { +! *buf = ' '; /* not really needed? Not with sh, ksh or bash */ +! sprintf((char *)buf + 1, (char *)opt, (char *)fname); + } + else +! sprintf((char *)buf, + #ifdef FEAT_QUICKFIX + # ifndef RISCOS + opt != p_sp ? " %s%s" : +--- 1598,1638 ---- + } + #endif + if (otmp != NULL) +! append_redir(buf, (int)len, p_srr, otmp); + + return buf; + } + + /* +! * Append output redirection for file "fname" to the end of string buffer +! * "buf[buflen]" + * Works with the 'shellredir' and 'shellpipe' options. + * The caller should make sure that there is enough room: + * STRLEN(opt) + STRLEN(fname) + 3 + */ + void +! append_redir(buf, buflen, opt, fname) + char_u *buf; ++ int buflen; + char_u *opt; + char_u *fname; + { + char_u *p; ++ char_u *end; + +! end = buf + STRLEN(buf); + /* find "%s", skipping "%%" */ + for (p = opt; (p = vim_strchr(p, '%')) != NULL; ++p) + if (p[1] == 's') + break; + if (p != NULL) + { +! *end = ' '; /* not really needed? Not with sh, ksh or bash */ +! vim_snprintf((char *)end + 1, (size_t)(buflen - (end + 1 - buf)), +! (char *)opt, (char *)fname); + } + else +! vim_snprintf((char *)end, (size_t)(buflen - (end - buf)), + #ifdef FEAT_QUICKFIX + # ifndef RISCOS + opt != p_sp ? " %s%s" : +*************** +*** 2390,2396 **** + + if (curwin->w_p_nu || use_number) + { +! sprintf((char *)numbuf, "%*ld ", number_width(curwin), (long)lnum); + msg_puts_attr(numbuf, hl_attr(HLF_N)); /* Highlight line nrs */ + } + msg_prt_line(ml_get(lnum), list); +--- 2395,2402 ---- + + if (curwin->w_p_nu || use_number) + { +! vim_snprintf((char *)numbuf, sizeof(numbuf), +! "%*ld ", number_width(curwin), (long)lnum); + msg_puts_attr(numbuf, hl_attr(HLF_N)); /* Highlight line nrs */ + } + msg_prt_line(ml_get(lnum), list); +*************** +*** 4486,4492 **** + char_u *p1; + int did_sub = FALSE; + int lastone; +! unsigned len, needed_len; + long nmatch_tl = 0; /* nr of lines matched below lnum */ + int do_again; /* do it again after joining lines */ + int skip_match = FALSE; +--- 4492,4498 ---- + char_u *p1; + int did_sub = FALSE; + int lastone; +! int len, copy_len, needed_len; + long nmatch_tl = 0; /* nr of lines matched below lnum */ + int do_again; /* do it again after joining lines */ + int skip_match = FALSE; +*************** +*** 4631,4636 **** +--- 4637,4644 ---- + + if (do_ask) + { ++ int typed; ++ + /* change State to CONFIRM, so that the mouse works + * properly */ + save_State = State; +*************** +*** 4669,4675 **** + resp = getexmodeline('?', NULL, 0); + if (resp != NULL) + { +! i = *resp; + vim_free(resp); + } + } +--- 4677,4683 ---- + resp = getexmodeline('?', NULL, 0); + if (resp != NULL) + { +! typed = *resp; + vim_free(resp); + } + } +*************** +*** 4721,4727 **** + #endif + ++no_mapping; /* don't map this key */ + ++allow_keys; /* allow special keys */ +! i = plain_vgetc(); + --allow_keys; + --no_mapping; + +--- 4729,4735 ---- + #endif + ++no_mapping; /* don't map this key */ + ++allow_keys; /* allow special keys */ +! typed = plain_vgetc(); + --allow_keys; + --no_mapping; + +*************** +*** 4732,4766 **** + } + + need_wait_return = FALSE; /* no hit-return prompt */ +! if (i == 'q' || i == ESC || i == Ctrl_C + #ifdef UNIX +! || i == intr_char + #endif + ) + { + got_quit = TRUE; + break; + } +! if (i == 'n') + break; +! if (i == 'y') + break; +! if (i == 'l') + { + /* last: replace and then stop */ + do_all = FALSE; + line2 = lnum; + break; + } +! if (i == 'a') + { + do_ask = FALSE; + break; + } + #ifdef FEAT_INS_EXPAND +! if (i == Ctrl_E) + scrollup_clamp(); +! else if (i == Ctrl_Y) + scrolldown_clamp(); + #endif + } +--- 4740,4774 ---- + } + + need_wait_return = FALSE; /* no hit-return prompt */ +! if (typed == 'q' || typed == ESC || typed == Ctrl_C + #ifdef UNIX +! || typed == intr_char + #endif + ) + { + got_quit = TRUE; + break; + } +! if (typed == 'n') + break; +! if (typed == 'y') + break; +! if (typed == 'l') + { + /* last: replace and then stop */ + do_all = FALSE; + line2 = lnum; + break; + } +! if (typed == 'a') + { + do_ask = FALSE; + break; + } + #ifdef FEAT_INS_EXPAND +! if (typed == Ctrl_E) + scrollup_clamp(); +! else if (typed == Ctrl_Y) + scrolldown_clamp(); + #endif + } +*************** +*** 4771,4777 **** + if (vim_strchr(p_cpo, CPO_UNDO) != NULL) + --no_u_sync; + +! if (i == 'n') + { + /* For a multi-line match, put matchcol at the NUL at + * the end of the line and set nmatch to one, so that +--- 4779,4785 ---- + if (vim_strchr(p_cpo, CPO_UNDO) != NULL) + --no_u_sync; + +! if (typed == 'n') + { + /* For a multi-line match, put matchcol at the NUL at + * the end of the line and set nmatch to one, so that +*************** +*** 4822,4830 **** + p1 = ml_get(sub_firstlnum + nmatch - 1); + nmatch_tl += nmatch - 1; + } +! i = regmatch.startpos[0].col - copycol; +! needed_len = i + ((unsigned)STRLEN(p1) - regmatch.endpos[0].col) +! + sublen + 1; + if (new_start == NULL) + { + /* +--- 4830,4838 ---- + p1 = ml_get(sub_firstlnum + nmatch - 1); + nmatch_tl += nmatch - 1; + } +! copy_len = regmatch.startpos[0].col - copycol; +! needed_len = copy_len + ((unsigned)STRLEN(p1) +! - regmatch.endpos[0].col) + sublen + 1; + if (new_start == NULL) + { + /* +*************** +*** 4847,4853 **** + */ + len = (unsigned)STRLEN(new_start); + needed_len += len; +! if (needed_len > new_start_len) + { + new_start_len = needed_len + 50; + if ((p1 = alloc_check(new_start_len)) == NULL) +--- 4855,4861 ---- + */ + len = (unsigned)STRLEN(new_start); + needed_len += len; +! if (needed_len > (int)new_start_len) + { + new_start_len = needed_len + 50; + if ((p1 = alloc_check(new_start_len)) == NULL) +*************** +*** 4865,4872 **** + /* + * copy the text up to the part that matched + */ +! mch_memmove(new_end, sub_firstline + copycol, (size_t)i); +! new_end += i; + + (void)vim_regsub_multi(®match, + sub_firstlnum - regmatch.startpos[0].lnum, +--- 4873,4880 ---- + /* + * copy the text up to the part that matched + */ +! mch_memmove(new_end, sub_firstline + copycol, (size_t)copy_len); +! new_end += copy_len; + + (void)vim_regsub_multi(®match, + sub_firstlnum - regmatch.startpos[0].lnum, +*************** +*** 5768,5773 **** +--- 5776,5785 ---- + { + char_u *s, *d; + int i; ++ #ifdef S_SPLINT_S /* splint doesn't understand array of pointers */ ++ static char **mtable; ++ static char **rtable; ++ #else + static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*", + "/*", "/\\*", "\"*", "**", + "/\\(\\)", +*************** +*** 5782,5787 **** +--- 5794,5800 ---- + "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=", + "\\[count]", "\\[quotex]", "\\[range]", + "\\[pattern]", "\\\\bar", "/\\\\%\\$"}; ++ #endif + int flags; + + d = IObuff; /* assume IObuff is long enough! */ +*************** +*** 5790,5796 **** + * Recognize a few exceptions to the rule. Some strings that contain '*' + * with "star". Otherwise '*' is recognized as a wildcard. + */ +! for (i = sizeof(mtable) / sizeof(char *); --i >= 0; ) + if (STRCMP(arg, mtable[i]) == 0) + { + STRCPY(d, rtable[i]); +--- 5803,5809 ---- + * Recognize a few exceptions to the rule. Some strings that contain '*' + * with "star". Otherwise '*' is recognized as a wildcard. + */ +! for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; ) + if (STRCMP(arg, mtable[i]) == 0) + { + STRCPY(d, rtable[i]); +*** ../vim-7.2.168/src/ex_cmds2.c 2009-02-05 20:47:14.000000000 +0100 +--- src/ex_cmds2.c 2009-05-13 16:22:33.000000000 +0200 +*************** +*** 3373,3379 **** + p = skipwhite(sp->nextline); + if (*p != '\\') + break; +! s = alloc((int)(STRLEN(line) + STRLEN(p))); + if (s == NULL) /* out of memory */ + break; + STRCPY(s, line); +--- 3373,3379 ---- + p = skipwhite(sp->nextline); + if (*p != '\\') + break; +! s = alloc((unsigned)(STRLEN(line) + STRLEN(p))); + if (s == NULL) /* out of memory */ + break; + STRCPY(s, line); +*** ../vim-7.2.168/src/ex_docmd.c 2009-04-29 18:44:38.000000000 +0200 +--- src/ex_docmd.c 2009-05-13 17:56:44.000000000 +0200 +*************** +*** 2737,2743 **** + int i; + + for (i = 0; cmd[i] != NUL; ++i) +! if (cmd[i] != (*pp)[i]) + break; + if (i >= len && !isalpha((*pp)[i])) + { +--- 2737,2743 ---- + int i; + + for (i = 0; cmd[i] != NUL; ++i) +! if (((char_u *)cmd)[i] != (*pp)[i]) + break; + if (i >= len && !isalpha((*pp)[i])) + { +*************** +*** 2803,2809 **** + /* Check for ":dl", ":dell", etc. to ":deletel": that's + * :delete with the 'l' flag. Same for 'p'. */ + for (i = 0; i < len; ++i) +! if (eap->cmd[i] != "delete"[i]) + break; + if (i == len - 1) + { +--- 2803,2809 ---- + /* Check for ":dl", ":dell", etc. to ":deletel": that's + * :delete with the 'l' flag. Same for 'p'. */ + for (i = 0; i < len; ++i) +! if (eap->cmd[i] != ((char_u *)"delete")[i]) + break; + if (i == len - 1) + { +*************** +*** 3823,3829 **** + char_u *cmd; + int *ctx; /* pointer to xp_context or NULL */ + { +! int delim; + + while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;", *cmd) != NULL) + { +--- 3823,3829 ---- + char_u *cmd; + int *ctx; /* pointer to xp_context or NULL */ + { +! unsigned delim; + + while (vim_strchr((char_u *)" \t0123456789.$%'/?-+,;", *cmd) != NULL) + { +*************** +*** 9417,9423 **** + { + int len; + int i; +! static char *(spec_str[]) = { + "%", + #define SPEC_PERC 0 + "#", +--- 9417,9429 ---- + { + int len; + int i; +! #ifdef S_SPLINT_S /* splint can't handle array of pointers */ +! static char **spec_str; +! static char *(nospec_str[]) +! #else +! static char *(spec_str[]) +! #endif +! = { + "%", + #define SPEC_PERC 0 + "#", +*************** +*** 9443,9451 **** + # define SPEC_CLIENT 9 + #endif + }; +- #define SPEC_COUNT (sizeof(spec_str) / sizeof(char *)) + +! for (i = 0; i < SPEC_COUNT; ++i) + { + len = (int)STRLEN(spec_str[i]); + if (STRNCMP(src, spec_str[i], len) == 0) +--- 9449,9456 ---- + # define SPEC_CLIENT 9 + #endif + }; + +! for (i = 0; i < (int)(sizeof(spec_str) / sizeof(char *)); ++i) + { + len = (int)STRLEN(spec_str[i]); + if (STRNCMP(src, spec_str[i], len) == 0) +*************** +*** 9796,9802 **** + } + + /* allocate memory */ +! retval = alloc(len + 1); + if (retval == NULL) + break; + } +--- 9801,9807 ---- + } + + /* allocate memory */ +! retval = alloc((unsigned)len + 1); + if (retval == NULL) + break; + } +*** ../vim-7.2.168/src/proto/ex_cmds.pro 2009-04-29 18:44:38.000000000 +0200 +--- src/proto/ex_cmds.pro 2009-05-13 15:53:39.000000000 +0200 +*************** +*** 9,15 **** + void do_bang __ARGS((int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)); + void do_shell __ARGS((char_u *cmd, int flags)); + char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp)); +! void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname)); + int viminfo_error __ARGS((char *errnum, char *message, char_u *line)); + int read_viminfo __ARGS((char_u *file, int flags)); + void write_viminfo __ARGS((char_u *file, int forceit)); +--- 9,15 ---- + void do_bang __ARGS((int addr_count, exarg_T *eap, int forceit, int do_in, int do_out)); + void do_shell __ARGS((char_u *cmd, int flags)); + char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp)); +! void append_redir __ARGS((char_u *buf, int buflen, char_u *opt, char_u *fname)); + int viminfo_error __ARGS((char *errnum, char *message, char_u *line)); + int read_viminfo __ARGS((char_u *file, int flags)); + void write_viminfo __ARGS((char_u *file, int forceit)); +*** ../vim-7.2.168/src/proto/spell.pro 2007-05-05 19:19:19.000000000 +0200 +--- src/proto/spell.pro 2009-05-13 16:43:13.000000000 +0200 +*************** +*** 22,26 **** + char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf)); + int spell_word_start __ARGS((int startcol)); + void spell_expand_check_cap __ARGS((colnr_T col)); +! int expand_spelling __ARGS((linenr_T lnum, int col, char_u *pat, char_u ***matchp)); + /* vim: set ft=c : */ +--- 22,26 ---- + char_u *spell_to_word_end __ARGS((char_u *start, buf_T *buf)); + int spell_word_start __ARGS((int startcol)); + void spell_expand_check_cap __ARGS((colnr_T col)); +! int expand_spelling __ARGS((linenr_T lnum, char_u *pat, char_u ***matchp)); + /* vim: set ft=c : */ +*** ../vim-7.2.168/src/quickfix.c 2009-04-29 11:49:57.000000000 +0200 +--- src/quickfix.c 2009-05-13 15:53:18.000000000 +0200 +*************** +*** 2774,2780 **** + sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg, + (char *)p_shq); + if (*p_sp != NUL) +! append_redir(cmd, p_sp, fname); + /* + * Output a newline if there's something else than the :make command that + * was typed (in which case the cursor is in column 0). +--- 2774,2780 ---- + sprintf((char *)cmd, "%s%s%s", (char *)p_shq, (char *)eap->arg, + (char *)p_shq); + if (*p_sp != NUL) +! append_redir(cmd, len, p_sp, fname); + /* + * Output a newline if there's something else than the :make command that + * was typed (in which case the cursor is in column 0). +*** ../vim-7.2.168/src/spell.c 2009-02-11 17:57:43.000000000 +0100 +--- src/spell.c 2009-05-13 16:31:15.000000000 +0200 +*************** +*** 16151,16161 **** + * Returns the number of matches. The matches are in "matchp[]", array of + * allocated strings. + */ +- /*ARGSUSED*/ + int +! expand_spelling(lnum, col, pat, matchp) + linenr_T lnum; +- int col; + char_u *pat; + char_u ***matchp; + { +--- 16151,16159 ---- + * Returns the number of matches. The matches are in "matchp[]", array of + * allocated strings. + */ + int +! expand_spelling(lnum, pat, matchp) + linenr_T lnum; + char_u *pat; + char_u ***matchp; + { +*** ../vim-7.2.168/src/structs.h 2009-05-13 12:46:36.000000000 +0200 +--- src/structs.h 2009-05-13 16:45:51.000000000 +0200 +*************** +*** 16,22 **** + */ + #if defined(SASC) && SASC < 658 + typedef long linenr_T; +! typedef unsigned colnr_T; + typedef unsigned short short_u; + #endif + +--- 16,22 ---- + */ + #if defined(SASC) && SASC < 658 + typedef long linenr_T; +! typedef int colnr_T; + typedef unsigned short short_u; + #endif + +*** ../vim-7.2.168/src/term.h 2005-03-16 10:53:56.000000000 +0100 +--- src/term.h 2009-05-13 17:27:41.000000000 +0200 +*************** +*** 96,102 **** +--- 96,106 ---- + * - there should be code in term.c to obtain the value from the termcap + */ + ++ #ifdef S_SPLINT_S /* splint doesn't understand array of pointers */ ++ extern char_u **term_strings; /* current terminal strings */ ++ #else + extern char_u *(term_strings[]); /* current terminal strings */ ++ #endif + + /* + * strings used for terminal +*** ../vim-7.2.168/src/vim.h 2009-04-29 18:44:38.000000000 +0200 +--- src/vim.h 2009-05-13 16:45:39.000000000 +0200 +*************** +*** 1460,1467 **** + # define PERROR(msg) perror(msg) + #endif + +! typedef long linenr_T; /* line number type */ +! typedef unsigned colnr_T; /* column number type */ + typedef unsigned short disptick_T; /* display tick type */ + + #define MAXLNUM (0x7fffffffL) /* maximum (invalid) line number */ +--- 1460,1467 ---- + # define PERROR(msg) perror(msg) + #endif + +! typedef long linenr_T; /* line number type */ +! typedef int colnr_T; /* column number type */ + typedef unsigned short disptick_T; /* display tick type */ + + #define MAXLNUM (0x7fffffffL) /* maximum (invalid) line number */ +*** ../vim-7.2.168/src/version.c 2009-05-13 14:48:55.000000000 +0200 +--- src/version.c 2009-05-13 18:44:28.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 169, + /**/ + +-- +Females are strictly forbidden to appear unshaven in public. + [real standing law in New Mexico, United States of America] + + /// 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/7.2.170 b/7.2.170 new file mode 100644 index 00000000..6790be14 --- /dev/null +++ b/7.2.170 @@ -0,0 +1,179 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.170 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.170 +Problem: Using b_dev while it was not set. (Dominique Pelle) +Solution: Add the b_dev_valid flag. +Files: src/buffer.c, src/fileio.c, src/structs.h + + +*** ../vim-7.2.169/src/buffer.c 2009-05-13 12:46:36.000000000 +0200 +--- src/buffer.c 2009-05-13 20:23:51.000000000 +0200 +*************** +*** 1678,1686 **** + buf->b_fname = buf->b_sfname; + #ifdef UNIX + if (st.st_dev == (dev_T)-1) +! buf->b_dev = -1; + else + { + buf->b_dev = st.st_dev; + buf->b_ino = st.st_ino; + } +--- 1678,1687 ---- + buf->b_fname = buf->b_sfname; + #ifdef UNIX + if (st.st_dev == (dev_T)-1) +! buf->b_dev_valid = FALSE; + else + { ++ buf->b_dev_valid = TRUE; + buf->b_dev = st.st_dev; + buf->b_ino = st.st_ino; + } +*************** +*** 2693,2701 **** + buf->b_fname = buf->b_sfname; + #ifdef UNIX + if (st.st_dev == (dev_T)-1) +! buf->b_dev = -1; + else + { + buf->b_dev = st.st_dev; + buf->b_ino = st.st_ino; + } +--- 2694,2703 ---- + buf->b_fname = buf->b_sfname; + #ifdef UNIX + if (st.st_dev == (dev_T)-1) +! buf->b_dev_valid = FALSE; + else + { ++ buf->b_dev_valid = TRUE; + buf->b_dev = st.st_dev; + buf->b_ino = st.st_ino; + } +*************** +*** 2889,2895 **** + /* If no struct stat given, get it now */ + if (stp == NULL) + { +! if (buf->b_dev < 0 || mch_stat((char *)ffname, &st) < 0) + st.st_dev = (dev_T)-1; + stp = &st; + } +--- 2891,2897 ---- + /* If no struct stat given, get it now */ + if (stp == NULL) + { +! if (!buf->b_dev_valid || mch_stat((char *)ffname, &st) < 0) + st.st_dev = (dev_T)-1; + stp = &st; + } +*************** +*** 2926,2936 **** + + if (buf->b_fname != NULL && mch_stat((char *)buf->b_fname, &st) >= 0) + { + buf->b_dev = st.st_dev; + buf->b_ino = st.st_ino; + } + else +! buf->b_dev = -1; + } + + /* +--- 2928,2939 ---- + + if (buf->b_fname != NULL && mch_stat((char *)buf->b_fname, &st) >= 0) + { ++ buf->b_dev_valid = TRUE; + buf->b_dev = st.st_dev; + buf->b_ino = st.st_ino; + } + else +! buf->b_dev_valid = FALSE; + } + + /* +*************** +*** 2941,2947 **** + buf_T *buf; + struct stat *stp; + { +! return (buf->b_dev >= 0 + && stp->st_dev == buf->b_dev + && stp->st_ino == buf->b_ino); + } +--- 2944,2950 ---- + buf_T *buf; + struct stat *stp; + { +! return (buf->b_dev_valid + && stp->st_dev == buf->b_dev + && stp->st_ino == buf->b_ino); + } +*** ../vim-7.2.169/src/fileio.c 2009-04-29 18:01:23.000000000 +0200 +--- src/fileio.c 2009-05-13 20:24:08.000000000 +0200 +*************** +*** 4416,4422 **** + # endif + buf_setino(buf); + } +! else if (buf->b_dev < 0) + /* Set the inode when creating a new file. */ + buf_setino(buf); + #endif +--- 4416,4422 ---- + # endif + buf_setino(buf); + } +! else if (!buf->b_dev_valid) + /* Set the inode when creating a new file. */ + buf_setino(buf); + #endif +*** ../vim-7.2.169/src/structs.h 2009-05-13 18:54:14.000000000 +0200 +--- src/structs.h 2009-05-13 20:24:54.000000000 +0200 +*************** +*** 1166,1172 **** + char_u *b_fname; /* current file name */ + + #ifdef UNIX +! dev_t b_dev; /* device number (-1 if not set) */ + ino_t b_ino; /* inode number */ + #endif + #ifdef FEAT_CW_EDITOR +--- 1166,1173 ---- + char_u *b_fname; /* current file name */ + + #ifdef UNIX +! int b_dev_valid; /* TRUE when b_dev has a valid number */ +! dev_t b_dev; /* device number */ + ino_t b_ino; /* inode number */ + #endif + #ifdef FEAT_CW_EDITOR +*** ../vim-7.2.169/src/version.c 2009-05-13 18:54:14.000000000 +0200 +--- src/version.c 2009-05-13 20:43:22.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 170, + /**/ + +-- +A special cleaning ordinance bans housewives from hiding dirt and dust under a +rug in a dwelling. + [real standing law in Pennsylvania, United States of America] + + /// 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/7.2.171 b/7.2.171 new file mode 100644 index 00000000..7d1b8a86 --- /dev/null +++ b/7.2.171 @@ -0,0 +1,80 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.171 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.171 (after 7.2.169) +Problem: Compiler warnings. (Tony Mechelynck) +Solution: Add function prototype. (Patrick Texier) Init variable. +Files: src/ex_cmds.c + + +*** ../vim-7.2.170/src/ex_cmds.c 2009-05-13 18:54:14.000000000 +0200 +--- src/ex_cmds.c 2009-05-14 21:11:01.000000000 +0200 +*************** +*** 4637,4643 **** + + if (do_ask) + { +! int typed; + + /* change State to CONFIRM, so that the mouse works + * properly */ +--- 4635,4641 ---- + + if (do_ask) + { +! int typed = 0; + + /* change State to CONFIRM, so that the mouse works + * properly */ +*************** +*** 6553,6558 **** +--- 6549,6555 ---- + static sign_T *first_sign = NULL; + static int last_sign_typenr = MAX_TYPENR; /* is decremented */ + ++ static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd)); + static void sign_list_defined __ARGS((sign_T *sp)); + static void sign_undefine __ARGS((sign_T *sp, sign_T *sp_prev)); + +*************** +*** 6579,6586 **** + */ + static int + sign_cmd_idx(begin_cmd, end_cmd) +! char *begin_cmd; /* begin of sign subcmd */ +! char *end_cmd; /* just after sign subcmd */ + { + int idx; + char save = *end_cmd; +--- 6576,6583 ---- + */ + static int + sign_cmd_idx(begin_cmd, end_cmd) +! char_u *begin_cmd; /* begin of sign subcmd */ +! char_u *end_cmd; /* just after sign subcmd */ + { + int idx; + char save = *end_cmd; +*** ../vim-7.2.170/src/version.c 2009-05-13 20:47:07.000000000 +0200 +--- src/version.c 2009-05-14 21:49:22.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 171, + /**/ + +-- +Living on Earth includes an annual free trip around the Sun. + + /// 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/7.2.172 b/7.2.172 new file mode 100644 index 00000000..1ba814d3 --- /dev/null +++ b/7.2.172 @@ -0,0 +1,59 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.172 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.172 (extra) +Problem: Compiler warning. +Solution: Adjust function prototype. (Patrick Texier) +Files: src/os_mswin.c + + +*** ../vim-7.2.171/src/os_mswin.c 2009-01-22 21:49:21.000000000 +0100 +--- src/os_mswin.c 2009-05-14 20:54:32.000000000 +0200 +*************** +*** 1227,1234 **** + * Wait for another process to Close the Clipboard. + * Returns TRUE for success. + */ +! int +! vim_open_clipboard() + { + int delay = 10; + +--- 1227,1234 ---- + * Wait for another process to Close the Clipboard. + * Returns TRUE for success. + */ +! static int +! vim_open_clipboard(void) + { + int delay = 10; + +*** ../vim-7.2.171/src/version.c 2009-05-14 21:51:06.000000000 +0200 +--- src/version.c 2009-05-14 21:59:45.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 172, + /**/ + +-- +FROG: How you English say: I one more time, mac, I unclog my nose towards + you, sons of a window-dresser, so, you think you could out-clever us + French fellows with your silly knees-bent creeping about advancing + behaviour. (blows a raspberry) I wave my private parts at your aunties, + you brightly-coloured, mealy-templed, cranberry-smelling, electric + donkey-bottom biters. + "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/7.2.173 b/7.2.173 new file mode 100644 index 00000000..331a6e84 --- /dev/null +++ b/7.2.173 @@ -0,0 +1,719 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.173 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.173 +Problem: Without lint there is no check for unused function arguments. +Solution: Use gcc -Wunused-parameter instead of lint. For a few files add + attributes to arguments that are known not to be used. +Files: src/auto/configure, src/buffer.c, src/charset.c, src/diff.c, + src/configure.in, src/config.h.in, src/edit.c, src/ex_cmds.c, + src/ex_cmds2.c, src/version.c, src/vim.h + + +*** ../vim-7.2.172/src/auto/configure 2009-05-13 14:48:55.000000000 +0200 +--- src/auto/configure 2009-05-14 22:08:12.000000000 +0200 +*************** +*** 10362,10367 **** +--- 10372,10427 ---- + + rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ++ { $as_echo "$as_me:$LINENO: checking whether __attribute__((unused)) is allowed" >&5 ++ $as_echo_n "checking whether __attribute__((unused)) is allowed... " >&6; } ++ cat >conftest.$ac_ext <<_ACEOF ++ /* confdefs.h. */ ++ _ACEOF ++ cat confdefs.h >>conftest.$ac_ext ++ cat >>conftest.$ac_ext <<_ACEOF ++ /* end confdefs.h. */ ++ #include ++ int ++ main () ++ { ++ int x __attribute__((unused)); ++ ; ++ return 0; ++ } ++ _ACEOF ++ rm -f conftest.$ac_objext ++ if { (ac_try="$ac_compile" ++ case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++ esac ++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++ $as_echo "$ac_try_echo") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ { $as_echo "$as_me:$LINENO: result: yes" >&5 ++ $as_echo "yes" >&6; }; cat >>confdefs.h <<\_ACEOF ++ #define HAVE_ATTRIBUTE_UNUSED 1 ++ _ACEOF ++ ++ else ++ $as_echo "$as_me: failed program was:" >&5 ++ sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ { $as_echo "$as_me:$LINENO: result: no" >&5 ++ $as_echo "no" >&6; } ++ fi ++ ++ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ + if test "${ac_cv_header_elf_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for elf.h" >&5 + $as_echo_n "checking for elf.h... " >&6; } +*** ../vim-7.2.172/src/buffer.c 2009-05-13 20:47:07.000000000 +0200 +--- src/buffer.c 2009-05-14 21:34:06.000000000 +0200 +*************** +*** 512,523 **** + * buf_freeall() - free all things allocated for a buffer that are related to + * the file. + */ +- /*ARGSUSED*/ + void + buf_freeall(buf, del_buf, wipe_buf) + buf_T *buf; +! int del_buf; /* buffer is going to be deleted */ +! int wipe_buf; /* buffer is going to be wiped out */ + { + #ifdef FEAT_AUTOCMD + int is_curbuf = (buf == curbuf); +--- 512,522 ---- + * buf_freeall() - free all things allocated for a buffer that are related to + * the file. + */ + void + buf_freeall(buf, del_buf, wipe_buf) + buf_T *buf; +! int del_buf UNUSED; /* buffer is going to be deleted */ +! int wipe_buf UNUSED; /* buffer is going to be wiped out */ + { + #ifdef FEAT_AUTOCMD + int is_curbuf = (buf == curbuf); +*************** +*** 2437,2447 **** + * another tab page. + * Returns NULL when there isn't any info. + */ +- /*ARGSUSED*/ + static wininfo_T * + find_wininfo(buf, skip_diff_buffer) + buf_T *buf; +! int skip_diff_buffer; + { + wininfo_T *wip; + +--- 2436,2445 ---- + * another tab page. + * Returns NULL when there isn't any info. + */ + static wininfo_T * + find_wininfo(buf, skip_diff_buffer) + buf_T *buf; +! int skip_diff_buffer UNUSED; + { + wininfo_T *wip; + +*************** +*** 4278,4287 **** + * Make "ffname" a full file name, set "sfname" to "ffname" if not NULL. + * "ffname" becomes a pointer to allocated memory (or NULL). + */ +- /*ARGSUSED*/ + void + fname_expand(buf, ffname, sfname) +! buf_T *buf; + char_u **ffname; + char_u **sfname; + { +--- 4276,4284 ---- + * Make "ffname" a full file name, set "sfname" to "ffname" if not NULL. + * "ffname" becomes a pointer to allocated memory (or NULL). + */ + void + fname_expand(buf, ffname, sfname) +! buf_T *buf UNUSED; + char_u **ffname; + char_u **sfname; + { +*************** +*** 5577,5587 **** + * this buffer. Call this to wipe out a temp buffer that does not contain any + * marks. + */ +- /*ARGSUSED*/ + void + wipe_buffer(buf, aucmd) + buf_T *buf; +! int aucmd; /* When TRUE trigger autocommands. */ + { + if (buf->b_fnum == top_file_num - 1) + --top_file_num; +--- 5574,5583 ---- + * this buffer. Call this to wipe out a temp buffer that does not contain any + * marks. + */ + void + wipe_buffer(buf, aucmd) + buf_T *buf; +! int aucmd UNUSED; /* When TRUE trigger autocommands. */ + { + if (buf->b_fnum == top_file_num - 1) + --top_file_num; +*** ../vim-7.2.172/src/charset.c 2009-05-13 14:10:46.000000000 +0200 +--- src/charset.c 2009-05-14 21:34:30.000000000 +0200 +*************** +*** 1026,1038 **** + * string at start of line. Warning: *headp is only set if it's a non-zero + * value, init to 0 before calling. + */ +- /*ARGSUSED*/ + int + win_lbr_chartabsize(wp, s, col, headp) + win_T *wp; + char_u *s; + colnr_T col; +! int *headp; + { + #ifdef FEAT_LINEBREAK + int c; +--- 1026,1037 ---- + * string at start of line. Warning: *headp is only set if it's a non-zero + * value, init to 0 before calling. + */ + int + win_lbr_chartabsize(wp, s, col, headp) + win_T *wp; + char_u *s; + colnr_T col; +! int *headp UNUSED; + { + #ifdef FEAT_LINEBREAK + int c; +*** ../vim-7.2.172/src/diff.c 2009-05-13 18:54:14.000000000 +0200 +--- src/diff.c 2009-05-14 21:24:59.000000000 +0200 +*************** +*** 652,661 **** + * The buffers are written to a file, also for unmodified buffers (the file + * could have been produced by autocommands, e.g. the netrw plugin). + */ +- /*ARGSUSED*/ + void + ex_diffupdate(eap) +! exarg_T *eap; /* can be NULL, it's not used */ + { + buf_T *buf; + int idx_orig; +--- 652,660 ---- + * The buffers are written to a file, also for unmodified buffers (the file + * could have been produced by autocommands, e.g. the netrw plugin). + */ + void + ex_diffupdate(eap) +! exarg_T *eap UNUSED; /* can be NULL */ + { + buf_T *buf; + int idx_orig; +*************** +*** 1094,1103 **** + /* + * Set options to show difs for the current window. + */ +- /*ARGSUSED*/ + void + ex_diffthis(eap) +! exarg_T *eap; + { + /* Set 'diff', 'scrollbind' on and 'wrap' off. */ + diff_win_options(curwin, TRUE); +--- 1093,1101 ---- + /* + * Set options to show difs for the current window. + */ + void + ex_diffthis(eap) +! exarg_T *eap UNUSED; + { + /* Set 'diff', 'scrollbind' on and 'wrap' off. */ + diff_win_options(curwin, TRUE); +*** ../vim-7.2.172/src/configure.in 2009-05-13 14:48:55.000000000 +0200 +--- src/configure.in 2009-05-14 22:08:06.000000000 +0200 +*************** +*** 2067,2072 **** +--- 2067,2077 ---- + AC_MSG_RESULT(yes); AC_DEFINE(HAVE_DATE_TIME), + AC_MSG_RESULT(no)) + ++ AC_MSG_CHECKING(whether __attribute__((unused)) is allowed) ++ AC_TRY_COMPILE([#include ], [int x __attribute__((unused));], ++ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_ATTRIBUTE_UNUSED), ++ AC_MSG_RESULT(no)) ++ + dnl Checks for header files. + AC_CHECK_HEADER(elf.h, HAS_ELF=1) + dnl AC_CHECK_HEADER(dwarf.h, SVR4=1) +*** ../vim-7.2.172/src/config.h.in 2009-03-02 02:44:54.000000000 +0100 +--- src/config.h.in 2009-05-14 21:15:02.000000000 +0200 +*************** +*** 30,35 **** +--- 30,38 ---- + /* Define when __DATE__ " " __TIME__ can be used */ + #undef HAVE_DATE_TIME + ++ /* Define when __attribute__((unused)) can be used */ ++ #undef HAVE_ATTRIBUTE_UNUSED ++ + /* defined always when using configure */ + #undef UNIX + +*** ../vim-7.2.172/src/edit.c 2009-05-13 18:54:14.000000000 +0200 +--- src/edit.c 2009-05-14 21:35:08.000000000 +0200 +*************** +*** 1447,1456 **** + * Only redraw when there are no characters available. This speeds up + * inserting sequences of characters (e.g., for CTRL-R). + */ +- /*ARGSUSED*/ + static void + ins_redraw(ready) +! int ready; /* not busy with something */ + { + if (!char_avail()) + { +--- 1447,1455 ---- + * Only redraw when there are no characters available. This speeds up + * inserting sequences of characters (e.g., for CTRL-R). + */ + static void + ins_redraw(ready) +! int ready UNUSED; /* not busy with something */ + { + if (!char_avail()) + { +*************** +*** 1962,1971 **** + * Only matters when there are composing characters. + * Return TRUE when something was deleted. + */ +- /*ARGSUSED*/ + static int + del_char_after_col(limit_col) +! int limit_col; + { + #ifdef FEAT_MBYTE + if (enc_utf8 && limit_col >= 0) +--- 1961,1969 ---- + * Only matters when there are composing characters. + * Return TRUE when something was deleted. + */ + static int + del_char_after_col(limit_col) +! int limit_col UNUSED; + { + #ifdef FEAT_MBYTE + if (enc_utf8 && limit_col >= 0) +*** ../vim-7.2.172/src/ex_cmds.c 2009-05-14 21:51:06.000000000 +0200 +--- src/ex_cmds.c 2009-05-14 21:11:01.000000000 +0200 +*************** +*** 43,52 **** + /* + * ":ascii" and "ga". + */ +- /*ARGSUSED*/ + void + do_ascii(eap) +! exarg_T *eap; + { + int c; + int cval; +--- 43,51 ---- + /* + * ":ascii" and "ga". + */ + void + do_ascii(eap) +! exarg_T *eap UNUSED; + { + int c; + int cval; +*************** +*** 2373,2382 **** + * ^? ^H + * not ^? ^? + */ +- /*ARGSUSED*/ + void + do_fixdel(eap) +! exarg_T *eap; + { + char_u *p; + +--- 2372,2380 ---- + * ^? ^H + * not ^? ^? + */ + void + do_fixdel(eap) +! exarg_T *eap UNUSED; + { + char_u *p; + +*************** +*** 6127,6136 **** + /* + * ":exusage" + */ +- /*ARGSUSED*/ + void + ex_exusage(eap) +! exarg_T *eap; + { + do_cmdline_cmd((char_u *)"help ex-cmd-index"); + } +--- 6125,6133 ---- + /* + * ":exusage" + */ + void + ex_exusage(eap) +! exarg_T *eap UNUSED; + { + do_cmdline_cmd((char_u *)"help ex-cmd-index"); + } +*************** +*** 6138,6147 **** + /* + * ":viusage" + */ +- /*ARGSUSED*/ + void + ex_viusage(eap) +! exarg_T *eap; + { + do_cmdline_cmd((char_u *)"help normal-index"); + } +--- 6135,6143 ---- + /* + * ":viusage" + */ + void + ex_viusage(eap) +! exarg_T *eap UNUSED; + { + do_cmdline_cmd((char_u *)"help normal-index"); + } +*************** +*** 7154,7163 **** + * Function given to ExpandGeneric() to obtain the sign command + * expansion. + */ +- /*ARGSUSED*/ + char_u * + get_sign_name(xp, idx) +! expand_T *xp; + int idx; + { + sign_T *sp; +--- 7150,7158 ---- + * Function given to ExpandGeneric() to obtain the sign command + * expansion. + */ + char_u * + get_sign_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + sign_T *sp; +*** ../vim-7.2.172/src/ex_cmds2.c 2009-05-13 18:54:14.000000000 +0200 +--- src/ex_cmds2.c 2009-05-14 21:35:40.000000000 +0200 +*************** +*** 680,689 **** + /* + * ":breaklist". + */ +- /*ARGSUSED*/ + void + ex_breaklist(eap) +! exarg_T *eap; + { + struct debuggy *bp; + int i; +--- 680,688 ---- + /* + * ":breaklist". + */ + void + ex_breaklist(eap) +! exarg_T *eap UNUSED; + { + struct debuggy *bp; + int i; +*************** +*** 1342,1355 **** + /* + * return TRUE if buffer was changed and cannot be abandoned. + */ +- /*ARGSUSED*/ + int + check_changed(buf, checkaw, mult_win, forceit, allbuf) + buf_T *buf; + int checkaw; /* do autowrite if buffer was changed */ + int mult_win; /* check also when several wins for the buf */ + int forceit; +! int allbuf; /* may write all buffers */ + { + if ( !forceit + && bufIsChanged(buf) +--- 1341,1353 ---- + /* + * return TRUE if buffer was changed and cannot be abandoned. + */ + int + check_changed(buf, checkaw, mult_win, forceit, allbuf) + buf_T *buf; + int checkaw; /* do autowrite if buffer was changed */ + int mult_win; /* check also when several wins for the buf */ + int forceit; +! int allbuf UNUSED; /* may write all buffers */ + { + if ( !forceit + && bufIsChanged(buf) +*************** +*** 1759,1770 **** + * + * Return FAIL for failure, OK otherwise. + */ +- /*ARGSUSED*/ + static int + do_arglist(str, what, after) + char_u *str; +! int what; +! int after; /* 0 means before first one */ + { + garray_T new_ga; + int exp_count; +--- 1757,1767 ---- + * + * Return FAIL for failure, OK otherwise. + */ + static int + do_arglist(str, what, after) + char_u *str; +! int what UNUSED; +! int after UNUSED; /* 0 means before first one */ + { + garray_T new_ga; + int exp_count; +*************** +*** 2549,2559 **** + + static void source_callback __ARGS((char_u *fname, void *cookie)); + +- /*ARGSUSED*/ + static void + source_callback(fname, cookie) + char_u *fname; +! void *cookie; + { + (void)do_source(fname, FALSE, DOSO_NONE); + } +--- 2546,2555 ---- + + static void source_callback __ARGS((char_u *fname, void *cookie)); + + static void + source_callback(fname, cookie) + char_u *fname; +! void *cookie UNUSED; + { + (void)do_source(fname, FALSE, DOSO_NONE); + } +*************** +*** 2680,2689 **** + /* + * ":options" + */ +- /*ARGSUSED*/ + void + ex_options(eap) +! exarg_T *eap; + { + cmd_source((char_u *)SYS_OPTWIN_FILE, NULL); + } +--- 2676,2684 ---- + /* + * ":options" + */ + void + ex_options(eap) +! exarg_T *eap UNUSED; + { + cmd_source((char_u *)SYS_OPTWIN_FILE, NULL); + } +*************** +*** 3190,3199 **** + /* + * ":scriptnames" + */ +- /*ARGSUSED*/ + void + ex_scriptnames(eap) +! exarg_T *eap; + { + int i; + +--- 3185,3193 ---- + /* + * ":scriptnames" + */ + void + ex_scriptnames(eap) +! exarg_T *eap UNUSED; + { + int i; + +*************** +*** 3317,3328 **** + * Return a pointer to the line in allocated memory. + * Return NULL for end-of-file or some error. + */ +- /* ARGSUSED */ + char_u * + getsourceline(c, cookie, indent) +! int c; /* not used */ + void *cookie; +! int indent; /* not used */ + { + struct source_cookie *sp = (struct source_cookie *)cookie; + char_u *line; +--- 3311,3321 ---- + * Return a pointer to the line in allocated memory. + * Return NULL for end-of-file or some error. + */ + char_u * + getsourceline(c, cookie, indent) +! int c UNUSED; + void *cookie; +! int indent UNUSED; + { + struct source_cookie *sp = (struct source_cookie *)cookie; + char_u *line; +*************** +*** 3649,3658 **** + * ":scriptencoding": Set encoding conversion for a sourced script. + * Without the multi-byte feature it's simply ignored. + */ +- /*ARGSUSED*/ + void + ex_scriptencoding(eap) +! exarg_T *eap; + { + #ifdef FEAT_MBYTE + struct source_cookie *sp; +--- 3642,3650 ---- + * ":scriptencoding": Set encoding conversion for a sourced script. + * Without the multi-byte feature it's simply ignored. + */ + void + ex_scriptencoding(eap) +! exarg_T *eap UNUSED; + { + #ifdef FEAT_MBYTE + struct source_cookie *sp; +*************** +*** 4101,4110 **** + * Function given to ExpandGeneric() to obtain the possible arguments of the + * ":language" command. + */ +- /*ARGSUSED*/ + char_u * + get_lang_arg(xp, idx) +! expand_T *xp; + int idx; + { + if (idx == 0) +--- 4093,4101 ---- + * Function given to ExpandGeneric() to obtain the possible arguments of the + * ":language" command. + */ + char_u * + get_lang_arg(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + if (idx == 0) +*** ../vim-7.2.172/src/version.c 2009-05-14 22:00:37.000000000 +0200 +--- src/version.c 2009-05-14 22:14:51.000000000 +0200 +*************** +*** 1623,1632 **** + /* + * ":intro": clear screen, display intro screen and wait for return. + */ +- /*ARGSUSED*/ + void + ex_intro(eap) +! exarg_T *eap; + { + screenclear(); + intro_message(TRUE); +--- 1625,1633 ---- + /* + * ":intro": clear screen, display intro screen and wait for return. + */ + void + ex_intro(eap) +! exarg_T *eap UNUSED; + { + screenclear(); + intro_message(TRUE); +*** ../vim-7.2.172/src/vim.h 2009-05-13 18:54:14.000000000 +0200 +--- src/vim.h 2009-05-14 21:17:51.000000000 +0200 +*************** +*** 262,267 **** +--- 262,275 ---- + # define __PARMS(x) __ARGS(x) + #endif + ++ /* Mark unused function arguments with UNUSED, so that gcc -Wunused-parameter ++ * can be used to check for mistakes. */ ++ #ifdef HAVE_ATTRIBUTE_UNUSED ++ # define UNUSED __attribute__((unused)) ++ #else ++ # define UNUSED ++ #endif ++ + /* if we're compiling in C++ (currently only KVim), the system + * headers must have the correct prototypes or nothing will build. + * conversely, our prototypes might clash due to throw() specifiers and +*** ../vim-7.2.172/src/version.c 2009-05-14 22:00:37.000000000 +0200 +--- src/version.c 2009-05-14 22:14:51.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 173, + /**/ + +-- +SIGIRO -- irony detected (iron core dumped) + + /// 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/7.2.174 b/7.2.174 new file mode 100644 index 00000000..5f8ccd3a --- /dev/null +++ b/7.2.174 @@ -0,0 +1,1718 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.174 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.174 +Problem: Too many warnings from gcc -Wextra. +Solution: Change initializer. Add UNUSED. Add type casts. +Files: src/edit.c, src/eval.c, src/ex_cmds.c, src/ex_docmd.c, + src/ex_getln.c, src/fileio.c, getchar.c, globals.h, main.c, + memline.c, message.c, src/misc1.c, src/move.c, src/normal.c, + src/option.c, src/os_unix.c, src/os_unix.h, src/regexp.c, + src/search.c, src/tag.c + + +*** ../vim-7.2.173/src/edit.c 2009-05-14 22:19:19.000000000 +0200 +--- src/edit.c 2009-05-15 21:06:07.000000000 +0200 +*************** +*** 8991,8997 **** + foldOpenCursor(); + #endif + undisplay_dollar(); +! if (gchar_cursor() != NUL || virtual_active() + ) + { + start_arrow(&curwin->w_cursor); +--- 8992,9001 ---- + foldOpenCursor(); + #endif + undisplay_dollar(); +! if (gchar_cursor() != NUL +! #ifdef FEAT_VIRTUALEDIT +! || virtual_active() +! #endif + ) + { + start_arrow(&curwin->w_cursor); +*** ../vim-7.2.173/src/eval.c 2009-04-22 16:07:57.000000000 +0200 +--- src/eval.c 2009-05-15 21:18:08.000000000 +0200 +*************** +*** 8303,8312 **** + /* + * "argc()" function + */ +- /* ARGSUSED */ + static void + f_argc(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = ARGCOUNT; +--- 8303,8311 ---- + /* + * "argc()" function + */ + static void + f_argc(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = ARGCOUNT; +*************** +*** 8315,8324 **** + /* + * "argidx()" function + */ +- /* ARGSUSED */ + static void + f_argidx(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = curwin->w_arg_idx; +--- 8314,8322 ---- + /* + * "argidx()" function + */ + static void + f_argidx(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = curwin->w_arg_idx; +*************** +*** 8396,8405 **** + /* + * "browse(save, title, initdir, default)" function + */ +- /* ARGSUSED */ + static void + f_browse(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_BROWSE +--- 8394,8402 ---- + /* + * "browse(save, title, initdir, default)" function + */ + static void + f_browse(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_BROWSE +*************** +*** 8431,8440 **** + /* + * "browsedir(title, initdir)" function + */ +- /* ARGSUSED */ + static void + f_browsedir(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_BROWSE +--- 8428,8436 ---- + /* + * "browsedir(title, initdir)" function + */ + static void + f_browsedir(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_BROWSE +*************** +*** 8801,8810 **** + /* + * "changenr()" function + */ +- /*ARGSUSED*/ + static void + f_changenr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = curbuf->b_u_seq_cur; +--- 8797,8805 ---- + /* + * "changenr()" function + */ + static void + f_changenr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = curbuf->b_u_seq_cur; +*************** +*** 8854,8863 **** + /* + * "clearmatches()" function + */ +- /*ARGSUSED*/ + static void + f_clearmatches(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_SEARCH_EXTRA +--- 8849,8857 ---- + /* + * "clearmatches()" function + */ + static void + f_clearmatches(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_SEARCH_EXTRA +*** ../vim-7.2.173/src/ex_cmds.c 2009-05-14 22:19:19.000000000 +0200 +--- src/ex_cmds.c 2009-05-15 20:42:18.000000000 +0200 +*************** +*** 4040,4047 **** +--- 4040,4049 ---- + bigness = curwin->w_height; + else if (firstwin == lastwin) + bigness = curwin->w_p_scr * 2; ++ #ifdef FEAT_WINDOWS + else + bigness = curwin->w_height - 3; ++ #endif + if (bigness < 1) + bigness = 1; + +*** ../vim-7.2.173/src/ex_docmd.c 2009-05-13 18:54:14.000000000 +0200 +--- src/ex_docmd.c 2009-05-15 20:47:58.000000000 +0200 +*************** +*** 1578,1588 **** + * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals + * "func". * Otherwise return TRUE when "fgetline" equals "func". + */ +- /*ARGSUSED*/ + int + getline_equal(fgetline, cookie, func) + char_u *(*fgetline) __ARGS((int, void *, int)); +! void *cookie; /* argument for fgetline() */ + char_u *(*func) __ARGS((int, void *, int)); + { + #ifdef FEAT_EVAL +--- 1578,1587 ---- + * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals + * "func". * Otherwise return TRUE when "fgetline" equals "func". + */ + int + getline_equal(fgetline, cookie, func) + char_u *(*fgetline) __ARGS((int, void *, int)); +! void *cookie UNUSED; /* argument for fgetline() */ + char_u *(*func) __ARGS((int, void *, int)); + { + #ifdef FEAT_EVAL +*************** +*** 1610,1619 **** + * If "fgetline" is get_loop_line(), return the cookie used by the original + * getline function. Otherwise return "cookie". + */ +- /*ARGSUSED*/ + void * + getline_cookie(fgetline, cookie) +! char_u *(*fgetline) __ARGS((int, void *, int)); + void *cookie; /* argument for fgetline() */ + { + # ifdef FEAT_EVAL +--- 1609,1617 ---- + * If "fgetline" is get_loop_line(), return the cookie used by the original + * getline function. Otherwise return "cookie". + */ + void * + getline_cookie(fgetline, cookie) +! char_u *(*fgetline) __ARGS((int, void *, int)) UNUSED; + void *cookie; /* argument for fgetline() */ + { + # ifdef FEAT_EVAL +*************** +*** 2754,2764 **** + * "full" is set to TRUE if the whole command name matched. + * Returns NULL for an ambiguous user command. + */ +- /*ARGSUSED*/ + static char_u * + find_command(eap, full) + exarg_T *eap; +! int *full; + { + int len; + char_u *p; +--- 2752,2761 ---- + * "full" is set to TRUE if the whole command name matched. + * Returns NULL for an ambiguous user command. + */ + static char_u * + find_command(eap, full) + exarg_T *eap; +! int *full UNUSED; + { + int len; + char_u *p; +*************** +*** 5053,5062 **** + /* + * Function given to ExpandGeneric() to obtain the list of command names. + */ +- /*ARGSUSED*/ + char_u * + get_command_name(xp, idx) +! expand_T *xp; + int idx; + { + if (idx >= (int)CMD_SIZE) +--- 5050,5058 ---- + /* + * Function given to ExpandGeneric() to obtain the list of command names. + */ + char_u * + get_command_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + if (idx >= (int)CMD_SIZE) +*************** +*** 5573,5582 **** + * ":comclear" + * Clear all user commands, global and for current buffer. + */ +- /*ARGSUSED*/ + void + ex_comclear(eap) +! exarg_T *eap; + { + uc_clear(&ucmds); + uc_clear(&curbuf->b_ucmds); +--- 5569,5577 ---- + * ":comclear" + * Clear all user commands, global and for current buffer. + */ + void + ex_comclear(eap) +! exarg_T *eap UNUSED; + { + uc_clear(&ucmds); + uc_clear(&curbuf->b_ucmds); +*************** +*** 6072,6081 **** + /* + * Function given to ExpandGeneric() to obtain the list of user command names. + */ +- /*ARGSUSED*/ + char_u * + get_user_commands(xp, idx) +! expand_T *xp; + int idx; + { + if (idx < curbuf->b_ucmds.ga_len) +--- 6067,6075 ---- + /* + * Function given to ExpandGeneric() to obtain the list of user command names. + */ + char_u * + get_user_commands(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + if (idx < curbuf->b_ucmds.ga_len) +*************** +*** 6090,6099 **** + * Function given to ExpandGeneric() to obtain the list of user command + * attributes. + */ +- /*ARGSUSED*/ + char_u * + get_user_cmd_flags(xp, idx) +! expand_T *xp; + int idx; + { + static char *user_cmd_flags[] = +--- 6084,6092 ---- + * Function given to ExpandGeneric() to obtain the list of user command + * attributes. + */ + char_u * + get_user_cmd_flags(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + static char *user_cmd_flags[] = +*************** +*** 6108,6117 **** + /* + * Function given to ExpandGeneric() to obtain the list of values for -nargs. + */ +- /*ARGSUSED*/ + char_u * + get_user_cmd_nargs(xp, idx) +! expand_T *xp; + int idx; + { + static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"}; +--- 6101,6109 ---- + /* + * Function given to ExpandGeneric() to obtain the list of values for -nargs. + */ + char_u * + get_user_cmd_nargs(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"}; +*************** +*** 6124,6133 **** + /* + * Function given to ExpandGeneric() to obtain the list of values for -complete. + */ +- /*ARGSUSED*/ + char_u * + get_user_cmd_complete(xp, idx) +! expand_T *xp; + int idx; + { + return (char_u *)command_complete[idx].name; +--- 6116,6124 ---- + /* + * Function given to ExpandGeneric() to obtain the list of values for -complete. + */ + char_u * + get_user_cmd_complete(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + return (char_u *)command_complete[idx].name; +*************** +*** 6305,6314 **** + /* + * ":cquit". + */ +- /*ARGSUSED*/ + static void + ex_cquit(eap) +! exarg_T *eap; + { + getout(1); /* this does not always pass on the exit code to the Manx + compiler. why? */ +--- 6296,6304 ---- + /* + * ":cquit". + */ + static void + ex_cquit(eap) +! exarg_T *eap UNUSED; + { + getout(1); /* this does not always pass on the exit code to the Manx + compiler. why? */ +*************** +*** 6750,6759 **** + /* + * ":shell". + */ +- /*ARGSUSED*/ + static void + ex_shell(eap) +! exarg_T *eap; + { + do_shell(NULL, 0); + } +--- 6740,6748 ---- + /* + * ":shell". + */ + static void + ex_shell(eap) +! exarg_T *eap UNUSED; + { + do_shell(NULL, 0); + } +*************** +*** 7057,7066 **** + /* + * ":preserve". + */ +- /*ARGSUSED*/ + static void + ex_preserve(eap) +! exarg_T *eap; + { + curbuf->b_flags |= BF_PRESERVED; + ml_preserve(curbuf, TRUE); +--- 7046,7054 ---- + /* + * ":preserve". + */ + static void + ex_preserve(eap) +! exarg_T *eap UNUSED; + { + curbuf->b_flags |= BF_PRESERVED; + ml_preserve(curbuf, TRUE); +*************** +*** 7292,7301 **** + /* + * :tabs command: List tabs and their contents. + */ +- /*ARGSUSED*/ + static void + ex_tabs(eap) +! exarg_T *eap; + { + tabpage_T *tp; + win_T *wp; +--- 7280,7288 ---- + /* + * :tabs command: List tabs and their contents. + */ + static void + ex_tabs(eap) +! exarg_T *eap UNUSED; + { + tabpage_T *tp; + win_T *wp; +*************** +*** 7482,7488 **** + /* + * ":edit " command and alikes. + */ +- /*ARGSUSED*/ + void + do_exedit(eap, old_curwin) + exarg_T *eap; +--- 7469,7474 ---- +*************** +*** 7694,7703 **** + } + #endif + +- /*ARGSUSED*/ + static void + ex_swapname(eap) +! exarg_T *eap; + { + if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL) + MSG(_("No swap file")); +--- 7680,7688 ---- + } + #endif + + static void + ex_swapname(eap) +! exarg_T *eap UNUSED; + { + if (curbuf->b_ml.ml_mfp == NULL || curbuf->b_ml.ml_mfp->mf_fname == NULL) + MSG(_("No swap file")); +*************** +*** 7710,7719 **** + * offset. + * (1998-11-02 16:21:01 R. Edward Ralston ) + */ +- /*ARGSUSED*/ + static void + ex_syncbind(eap) +! exarg_T *eap; + { + #ifdef FEAT_SCROLLBIND + win_T *wp; +--- 7695,7703 ---- + * offset. + * (1998-11-02 16:21:01 R. Edward Ralston ) + */ + static void + ex_syncbind(eap) +! exarg_T *eap UNUSED; + { + #ifdef FEAT_SCROLLBIND + win_T *wp; +*************** +*** 7983,7992 **** + /* + * ":pwd". + */ +- /*ARGSUSED*/ + static void + ex_pwd(eap) +! exarg_T *eap; + { + if (mch_dirname(NameBuff, MAXPATHL) == OK) + { +--- 7967,7975 ---- + /* + * ":pwd". + */ + static void + ex_pwd(eap) +! exarg_T *eap UNUSED; + { + if (mch_dirname(NameBuff, MAXPATHL) == OK) + { +*************** +*** 8417,8426 **** + /* + * ":undo". + */ +- /*ARGSUSED*/ + static void + ex_undo(eap) +! exarg_T *eap; + { + if (eap->addr_count == 1) /* :undo 123 */ + undo_time(eap->line2, FALSE, TRUE); +--- 8400,8408 ---- + /* + * ":undo". + */ + static void + ex_undo(eap) +! exarg_T *eap UNUSED; + { + if (eap->addr_count == 1) /* :undo 123 */ + undo_time(eap->line2, FALSE, TRUE); +*************** +*** 8431,8440 **** + /* + * ":redo". + */ +- /*ARGSUSED*/ + static void + ex_redo(eap) +! exarg_T *eap; + { + u_redo(1); + } +--- 8413,8421 ---- + /* + * ":redo". + */ + static void + ex_redo(eap) +! exarg_T *eap UNUSED; + { + u_redo(1); + } +*************** +*** 8442,8448 **** + /* + * ":earlier" and ":later". + */ +- /*ARGSUSED*/ + static void + ex_later(eap) + exarg_T *eap; +--- 8423,8428 ---- +*************** +*** 8627,8636 **** + /* + * ":redrawstatus": force redraw of status line(s) + */ +- /*ARGSUSED*/ + static void + ex_redrawstatus(eap) +! exarg_T *eap; + { + #if defined(FEAT_WINDOWS) + int r = RedrawingDisabled; +--- 8607,8615 ---- + /* + * ":redrawstatus": force redraw of status line(s) + */ + static void + ex_redrawstatus(eap) +! exarg_T *eap UNUSED; + { + #if defined(FEAT_WINDOWS) + int r = RedrawingDisabled; +*************** +*** 8891,8901 **** + + #if ((defined(FEAT_SESSION) || defined(FEAT_EVAL)) && defined(vim_mkdir)) \ + || defined(PROTO) +- /*ARGSUSED*/ + int + vim_mkdir_emsg(name, prot) + char_u *name; +! int prot; + { + if (vim_mkdir(name, prot) != 0) + { +--- 8870,8879 ---- + + #if ((defined(FEAT_SESSION) || defined(FEAT_EVAL)) && defined(vim_mkdir)) \ + || defined(PROTO) + int + vim_mkdir_emsg(name, prot) + char_u *name; +! int prot UNUSED; + { + if (vim_mkdir(name, prot) != 0) + { +*************** +*** 10968,10977 **** + } + #endif + +- /*ARGSUSED*/ + static void + ex_digraphs(eap) +! exarg_T *eap; + { + #ifdef FEAT_DIGRAPHS + if (*eap->arg != NUL) +--- 10946,10954 ---- + } + #endif + + static void + ex_digraphs(eap) +! exarg_T *eap UNUSED; + { + #ifdef FEAT_DIGRAPHS + if (*eap->arg != NUL) +*************** +*** 11005,11014 **** + /* + * ":nohlsearch" + */ +- /*ARGSUSED*/ + static void + ex_nohlsearch(eap) +! exarg_T *eap; + { + no_hlsearch = TRUE; + redraw_all_later(SOME_VALID); +--- 10982,10990 ---- + /* + * ":nohlsearch" + */ + static void + ex_nohlsearch(eap) +! exarg_T *eap UNUSED; + { + no_hlsearch = TRUE; + redraw_all_later(SOME_VALID); +*************** +*** 11087,11096 **** + /* + * ":X": Get crypt key + */ +- /*ARGSUSED*/ + static void + ex_X(eap) +! exarg_T *eap; + { + (void)get_crypt_key(TRUE, TRUE); + } +--- 11063,11071 ---- + /* + * ":X": Get crypt key + */ + static void + ex_X(eap) +! exarg_T *eap UNUSED; + { + (void)get_crypt_key(TRUE, TRUE); + } +*** ../vim-7.2.173/src/ex_getln.c 2009-04-29 18:44:38.000000000 +0200 +--- src/ex_getln.c 2009-05-15 20:49:22.000000000 +0200 +*************** +*** 140,150 **** + * Return pointer to allocated string if there is a commandline, NULL + * otherwise. + */ +- /*ARGSUSED*/ + char_u * + getcmdline(firstc, count, indent) + int firstc; +! long count; /* only used for incremental search */ + int indent; /* indent for inside conditionals */ + { + int c; +--- 140,149 ---- + * Return pointer to allocated string if there is a commandline, NULL + * otherwise. + */ + char_u * + getcmdline(firstc, count, indent) + int firstc; +! long count UNUSED; /* only used for incremental search */ + int indent; /* indent for inside conditionals */ + { + int c; +*************** +*** 2113,2123 **** + /* + * Get an Ex command line for the ":" command. + */ +- /* ARGSUSED */ + char_u * +! getexline(c, dummy, indent) + int c; /* normally ':', NUL for ":append" */ +! void *dummy; /* cookie not used */ + int indent; /* indent for inside conditionals */ + { + /* When executing a register, remove ':' that's in front of each line. */ +--- 2112,2121 ---- + /* + * Get an Ex command line for the ":" command. + */ + char_u * +! getexline(c, cookie, indent) + int c; /* normally ':', NUL for ":append" */ +! void *cookie UNUSED; + int indent; /* indent for inside conditionals */ + { + /* When executing a register, remove ':' that's in front of each line. */ +*************** +*** 2132,2143 **** + * mappings or abbreviations. + * Returns a string in allocated memory or NULL. + */ +- /* ARGSUSED */ + char_u * +! getexmodeline(promptc, dummy, indent) + int promptc; /* normally ':', NUL for ":append" and '?' for + :s prompt */ +! void *dummy; /* cookie not used */ + int indent; /* indent for inside conditionals */ + { + garray_T line_ga; +--- 2130,2140 ---- + * mappings or abbreviations. + * Returns a string in allocated memory or NULL. + */ + char_u * +! getexmodeline(promptc, cookie, indent) + int promptc; /* normally ':', NUL for ":append" and '?' for + :s prompt */ +! void *cookie UNUSED; + int indent; /* indent for inside conditionals */ + { + garray_T line_ga; +*************** +*** 3832,3842 **** + * Returns EXPAND_NOTHING when the character that triggered expansion should + * be inserted like a normal character. + */ +- /*ARGSUSED*/ + static int + showmatches(xp, wildmenu) + expand_T *xp; +! int wildmenu; + { + #define L_SHOWFILE(m) (showtail ? sm_gettail(files_found[m]) : files_found[m]) + int num_files; +--- 3829,3838 ---- + * Returns EXPAND_NOTHING when the character that triggered expansion should + * be inserted like a normal character. + */ + static int + showmatches(xp, wildmenu) + expand_T *xp; +! int wildmenu UNUSED; + { + #define L_SHOWFILE(m) (showtail ? sm_gettail(files_found[m]) : files_found[m]) + int num_files; +*** ../vim-7.2.173/src/fileio.c 2009-05-13 20:47:07.000000000 +0200 +--- src/fileio.c 2009-05-15 20:52:40.000000000 +0200 +*************** +*** 3498,3504 **** + if (mch_stat((char *)IObuff, &st) < 0 + || st.st_uid != st_old.st_uid + || st.st_gid != st_old.st_gid +! || st.st_mode != perm) + backup_copy = TRUE; + # endif + /* Close the file before removing it, on MS-Windows we +--- 3498,3504 ---- + if (mch_stat((char *)IObuff, &st) < 0 + || st.st_uid != st_old.st_uid + || st.st_gid != st_old.st_gid +! || (long)st.st_mode != perm) + backup_copy = TRUE; + # endif + /* Close the file before removing it, on MS-Windows we +*************** +*** 5963,5969 **** + else if (*ext == '.') + #endif + { +! if (s - ptr > (size_t)8) + { + s = ptr + 8; + *s = '\0'; +--- 5971,5977 ---- + else if (*ext == '.') + #endif + { +! if ((size_t)(s - ptr) > (size_t)8) + { + s = ptr + 8; + *s = '\0'; +*************** +*** 6460,6470 **** + * return 2 if a message has been displayed. + * return 0 otherwise. + */ +- /*ARGSUSED*/ + int + buf_check_timestamp(buf, focus) + buf_T *buf; +! int focus; /* called for GUI focus event */ + { + struct stat st; + int stat_res; +--- 6468,6477 ---- + * return 2 if a message has been displayed. + * return 0 otherwise. + */ + int + buf_check_timestamp(buf, focus) + buf_T *buf; +! int focus UNUSED; /* called for GUI focus event */ + { + struct stat st; + int stat_res; +*************** +*** 6868,6879 **** + /* Careful: autocommands may have made "buf" invalid! */ + } + +- /*ARGSUSED*/ + void + buf_store_time(buf, st, fname) + buf_T *buf; + struct stat *st; +! char_u *fname; + { + buf->b_mtime = (long)st->st_mtime; + buf->b_orig_size = (size_t)st->st_size; +--- 6875,6885 ---- + /* Careful: autocommands may have made "buf" invalid! */ + } + + void + buf_store_time(buf, st, fname) + buf_T *buf; + struct stat *st; +! char_u *fname UNUSED; + { + buf->b_mtime = (long)st->st_mtime; + buf->b_orig_size = (size_t)st->st_size; +*************** +*** 6936,6945 **** + * The returned pointer is to allocated memory. + * The returned pointer is NULL if no valid name was found. + */ +- /*ARGSUSED*/ + char_u * + vim_tempname(extra_char) +! int extra_char; /* character to use in the name instead of '?' */ + { + #ifdef USE_TMPNAM + char_u itmp[L_tmpnam]; /* use tmpnam() */ +--- 6942,6950 ---- + * The returned pointer is to allocated memory. + * The returned pointer is NULL if no valid name was found. + */ + char_u * + vim_tempname(extra_char) +! int extra_char UNUSED; /* char to use in the name instead of '?' */ + { + #ifdef USE_TMPNAM + char_u itmp[L_tmpnam]; /* use tmpnam() */ +*************** +*** 6968,6974 **** + /* + * Try the entries in TEMPDIRNAMES to create the temp directory. + */ +! for (i = 0; i < sizeof(tempdirs) / sizeof(char *); ++i) + { + /* expand $TMP, leave room for "/v1100000/999999999" */ + expand_env((char_u *)tempdirs[i], itmp, TEMPNAMELEN - 20); +--- 6973,6979 ---- + /* + * Try the entries in TEMPDIRNAMES to create the temp directory. + */ +! for (i = 0; i < (int)(sizeof(tempdirs) / sizeof(char *)); ++i) + { + /* expand $TMP, leave room for "/v1100000/999999999" */ + expand_env((char_u *)tempdirs[i], itmp, TEMPNAMELEN - 20); +*************** +*** 9588,9600 **** + * + * Returns NULL when out of memory. + */ +- /*ARGSUSED*/ + char_u * + file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash) + char_u *pat; + char_u *pat_end; /* first char after pattern or NULL */ + char *allow_dirs; /* Result passed back out in here */ +! int no_bslash; /* Don't use a backward slash as pathsep */ + { + int size; + char_u *endp; +--- 9593,9604 ---- + * + * Returns NULL when out of memory. + */ + char_u * + file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash) + char_u *pat; + char_u *pat_end; /* first char after pattern or NULL */ + char *allow_dirs; /* Result passed back out in here */ +! int no_bslash UNUSED; /* Don't use a backward slash as pathsep */ + { + int size; + char_u *endp; +*** ../vim-7.2.173/src/misc1.c 2009-04-29 11:00:09.000000000 +0200 +--- src/misc1.c 2009-05-15 20:59:08.000000000 +0200 +*************** +*** 2188,2199 **** + * + * return FAIL for failure, OK otherwise + */ +- /*ARGSUSED*/ + int + del_bytes(count, fixpos_arg, use_delcombine) + long count; + int fixpos_arg; +! int use_delcombine; /* 'delcombine' option applies */ + { + char_u *oldp, *newp; + colnr_T oldlen; +--- 2188,2198 ---- + * + * return FAIL for failure, OK otherwise + */ + int + del_bytes(count, fixpos_arg, use_delcombine) + long count; + int fixpos_arg; +! int use_delcombine UNUSED; /* 'delcombine' option applies */ + { + char_u *oldp, *newp; + colnr_T oldlen; +*** ../vim-7.2.173/src/move.c 2008-11-15 16:05:30.000000000 +0100 +--- src/move.c 2009-05-15 21:00:06.000000000 +0200 +*************** +*** 1238,1248 **** + /* + * Scroll the current window down by "line_count" logical lines. "CTRL-Y" + */ +- /*ARGSUSED*/ + void + scrolldown(line_count, byfold) + long line_count; +! int byfold; /* TRUE: count a closed fold as one line */ + { + long done = 0; /* total # of physical lines done */ + int wrow; +--- 1238,1247 ---- + /* + * Scroll the current window down by "line_count" logical lines. "CTRL-Y" + */ + void + scrolldown(line_count, byfold) + long line_count; +! int byfold UNUSED; /* TRUE: count a closed fold as one line */ + { + long done = 0; /* total # of physical lines done */ + int wrow; +*************** +*** 1349,1359 **** + /* + * Scroll the current window up by "line_count" logical lines. "CTRL-E" + */ +- /*ARGSUSED*/ + void + scrollup(line_count, byfold) + long line_count; +! int byfold; /* TRUE: count a closed fold as one line */ + { + #if defined(FEAT_FOLDING) || defined(FEAT_DIFF) + linenr_T lnum; +--- 1348,1357 ---- + /* + * Scroll the current window up by "line_count" logical lines. "CTRL-E" + */ + void + scrollup(line_count, byfold) + long line_count; +! int byfold UNUSED; /* TRUE: count a closed fold as one line */ + { + #if defined(FEAT_FOLDING) || defined(FEAT_DIFF) + linenr_T lnum; +*** ../vim-7.2.173/src/normal.c 2009-04-29 17:39:17.000000000 +0200 +--- src/normal.c 2009-05-15 21:08:07.000000000 +0200 +*************** +*** 493,506 **** + int i; + + /* Fill the index table with a one to one relation. */ +! for (i = 0; i < NV_CMDS_SIZE; ++i) + nv_cmd_idx[i] = i; + + /* Sort the commands by the command character. */ + qsort((void *)&nv_cmd_idx, (size_t)NV_CMDS_SIZE, sizeof(short), nv_compare); + + /* Find the first entry that can't be indexed by the command character. */ +! for (i = 0; i < NV_CMDS_SIZE; ++i) + if (i != nv_cmds[nv_cmd_idx[i]].cmd_char) + break; + nv_max_linear = i - 1; +--- 493,506 ---- + int i; + + /* Fill the index table with a one to one relation. */ +! for (i = 0; i < (int)NV_CMDS_SIZE; ++i) + nv_cmd_idx[i] = i; + + /* Sort the commands by the command character. */ + qsort((void *)&nv_cmd_idx, (size_t)NV_CMDS_SIZE, sizeof(short), nv_compare); + + /* Find the first entry that can't be indexed by the command character. */ +! for (i = 0; i < (int)NV_CMDS_SIZE; ++i) + if (i != nv_cmds[nv_cmd_idx[i]].cmd_char) + break; + nv_max_linear = i - 1; +*************** +*** 561,571 **** + /* + * Execute a command in Normal mode. + */ +- /*ARGSUSED*/ + void + normal_cmd(oap, toplevel) + oparg_T *oap; +! int toplevel; /* TRUE when called from main() */ + { + cmdarg_T ca; /* command arguments */ + int c; +--- 561,570 ---- + /* + * Execute a command in Normal mode. + */ + void + normal_cmd(oap, toplevel) + oparg_T *oap; +! int toplevel UNUSED; /* TRUE when called from main() */ + { + cmdarg_T ca; /* command arguments */ + int c; +*************** +*** 2188,2197 **** + /* + * Handle the "g@" operator: call 'operatorfunc'. + */ +- /*ARGSUSED*/ + static void + op_function(oap) +! oparg_T *oap; + { + #ifdef FEAT_EVAL + char_u *(argv[1]); +--- 2187,2195 ---- + /* + * Handle the "g@" operator: call 'operatorfunc'. + */ + static void + op_function(oap) +! oparg_T *oap UNUSED; + { + #ifdef FEAT_EVAL + char_u *(argv[1]); +*************** +*** 4100,4109 **** + * Command character that doesn't do anything, but unlike nv_ignore() does + * start edit(). Used for "startinsert" executed while starting up. + */ +- /*ARGSUSED */ + static void + nv_nop(cap) +! cmdarg_T *cap; + { + } + +--- 4098,4106 ---- + * Command character that doesn't do anything, but unlike nv_ignore() does + * start edit(). Used for "startinsert" executed while starting up. + */ + static void + nv_nop(cap) +! cmdarg_T *cap UNUSED; + { + } + +*************** +*** 5241,5247 **** + if (cap->oap->op_type != OP_NOP + && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count + || cap->oap->start.col > +! STRLEN(ml_get(cap->oap->start.lnum)))) + clearopbeep(cap->oap); + } + } +--- 5238,5244 ---- + if (cap->oap->op_type != OP_NOP + && (cap->oap->start.lnum > curbuf->b_ml.ml_line_count + || cap->oap->start.col > +! (colnr_T)STRLEN(ml_get(cap->oap->start.lnum)))) + clearopbeep(cap->oap); + } + } +*************** +*** 5816,5822 **** + for (n = cap->count1; n > 0; --n) + { + if ((!PAST_LINE && oneright() == FAIL) +! || (PAST_LINE && *ml_get_cursor() == NUL)) + { + /* + * wraps to next line if 'whichwrap' has 's'. +--- 5813,5822 ---- + for (n = cap->count1; n > 0; --n) + { + if ((!PAST_LINE && oneright() == FAIL) +! #ifdef FEAT_VISUAL +! || (PAST_LINE && *ml_get_cursor() == NUL) +! #endif +! ) + { + /* + * wraps to next line if 'whichwrap' has 's'. +*** ../vim-7.2.173/src/option.c 2009-03-18 15:40:03.000000000 +0100 +--- src/option.c 2009-05-15 21:08:50.000000000 +0200 +*************** +*** 5302,5315 **** + * When "set_sid" is zero set the scriptID to current_SID. When "set_sid" is + * SID_NONE don't set the scriptID. Otherwise set the scriptID to "set_sid". + */ +- /*ARGSUSED*/ + void + set_string_option_direct(name, opt_idx, val, opt_flags, set_sid) + char_u *name; + int opt_idx; + char_u *val; + int opt_flags; /* OPT_FREE, OPT_LOCAL and/or OPT_GLOBAL */ +! int set_sid; + { + char_u *s; + char_u **varp; +--- 5302,5314 ---- + * When "set_sid" is zero set the scriptID to current_SID. When "set_sid" is + * SID_NONE don't set the scriptID. Otherwise set the scriptID to "set_sid". + */ + void + set_string_option_direct(name, opt_idx, val, opt_flags, set_sid) + char_u *name; + int opt_idx; + char_u *val; + int opt_flags; /* OPT_FREE, OPT_LOCAL and/or OPT_GLOBAL */ +! int set_sid UNUSED; + { + char_u *s; + char_u **varp; +*************** +*** 9357,9366 **** + /* + * Check for NULL pointers in a winopt_T and replace them with empty_option. + */ +- /*ARGSUSED*/ + void + check_winopt(wop) +! winopt_T *wop; + { + #ifdef FEAT_FOLDING + check_string_option(&wop->wo_fdi); +--- 9356,9364 ---- + /* + * Check for NULL pointers in a winopt_T and replace them with empty_option. + */ + void + check_winopt(wop) +! winopt_T *wop UNUSED; + { + #ifdef FEAT_FOLDING + check_string_option(&wop->wo_fdi); +*************** +*** 9382,9391 **** + /* + * Free the allocated memory inside a winopt_T. + */ +- /*ARGSUSED*/ + void + clear_winopt(wop) +! winopt_T *wop; + { + #ifdef FEAT_FOLDING + clear_string_option(&wop->wo_fdi); +--- 9380,9388 ---- + /* + * Free the allocated memory inside a winopt_T. + */ + void + clear_winopt(wop) +! winopt_T *wop UNUSED; + { + #ifdef FEAT_FOLDING + clear_string_option(&wop->wo_fdi); +*** ../vim-7.2.173/src/os_unix.c 2009-05-13 12:46:36.000000000 +0200 +--- src/os_unix.c 2009-05-15 21:13:43.000000000 +0200 +*************** +*** 458,467 **** + * Return total amount of memory available in Kbyte. + * Doesn't change when memory has been allocated. + */ +- /* ARGSUSED */ + long_u + mch_total_mem(special) +! int special; + { + # ifdef __EMX__ + return ulimit(3, 0L) >> 10; /* always 32MB? */ +--- 458,466 ---- + * Return total amount of memory available in Kbyte. + * Doesn't change when memory has been allocated. + */ + long_u + mch_total_mem(special) +! int special UNUSED; + { + # ifdef __EMX__ + return ulimit(3, 0L) >> 10; /* always 32MB? */ +*************** +*** 815,821 **** + * Let me try it with a few tricky defines from my own osdef.h (jw). + */ + #if defined(SIGWINCH) +- /* ARGSUSED */ + static RETSIGTYPE + sig_winch SIGDEFARG(sigarg) + { +--- 814,819 ---- +*************** +*** 1355,1365 **** + /* + * Check_win checks whether we have an interactive stdout. + */ +- /* ARGSUSED */ + int + mch_check_win(argc, argv) +! int argc; +! char **argv; + { + #ifdef OS2 + /* +--- 1353,1362 ---- + /* + * Check_win checks whether we have an interactive stdout. + */ + int + mch_check_win(argc, argv) +! int argc UNUSED; +! char **argv UNUSED; + { + #ifdef OS2 + /* +*************** +*** 2467,2473 **** + } + + /* Catch file names which are too long. */ +! if (retval == FAIL || STRLEN(buf) + STRLEN(fname) >= len) + return FAIL; + + /* Do not append ".", "/dir/." is equal to "/dir". */ +--- 2464,2470 ---- + } + + /* Catch file names which are too long. */ +! if (retval == FAIL || (int)(STRLEN(buf) + STRLEN(fname)) >= len) + return FAIL; + + /* Do not append ".", "/dir/." is equal to "/dir". */ +*************** +*** 2686,2692 **** + */ + vim_acl_T + mch_get_acl(fname) +! char_u *fname; + { + vim_acl_T ret = NULL; + #ifdef HAVE_POSIX_ACL +--- 2683,2689 ---- + */ + vim_acl_T + mch_get_acl(fname) +! char_u *fname UNUSED; + { + vim_acl_T ret = NULL; + #ifdef HAVE_POSIX_ACL +*************** +*** 2746,2752 **** + */ + void + mch_set_acl(fname, aclent) +! char_u *fname; + vim_acl_T aclent; + { + if (aclent == NULL) +--- 2743,2749 ---- + */ + void + mch_set_acl(fname, aclent) +! char_u *fname UNUSED; + vim_acl_T aclent; + { + if (aclent == NULL) +*************** +*** 2789,2798 **** + /* + * Set hidden flag for "name". + */ +- /* ARGSUSED */ + void + mch_hide(name) +! char_u *name; + { + /* can't hide a file */ + } +--- 2786,2794 ---- + /* + * Set hidden flag for "name". + */ + void + mch_hide(name) +! char_u *name UNUSED; + { + /* can't hide a file */ + } +*************** +*** 3481,3490 **** + /* + * set screen mode, always fails. + */ +- /* ARGSUSED */ + int + mch_screenmode(arg) +! char_u *arg; + { + EMSG(_(e_screenmode)); + return FAIL; +--- 3477,3485 ---- + /* + * set screen mode, always fails. + */ + int + mch_screenmode(arg) +! char_u *arg UNUSED; + { + EMSG(_(e_screenmode)); + return FAIL; +*************** +*** 4189,4197 **** + { + s = vim_strchr(lp + written, NL); + len = write(toshell_fd, (char *)lp + written, +! s == NULL ? l : s - (lp + written)); + } +! if (len == l) + { + /* Finished a line, add a NL, unless this line + * should not have one. */ +--- 4184,4193 ---- + { + s = vim_strchr(lp + written, NL); + len = write(toshell_fd, (char *)lp + written, +! s == NULL ? l +! : (size_t)(s - (lp + written))); + } +! if (len == (int)l) + { + /* Finished a line, add a NL, unless this line + * should not have one. */ +*************** +*** 4746,4752 **** + * Returns also, when a request from Sniff is waiting -- toni. + * Or when a Linux GPM mouse event is waiting. + */ +- /* ARGSUSED */ + #if defined(__BEOS__) + int + #else +--- 4742,4747 ---- +*************** +*** 4755,4761 **** + RealWaitForChar(fd, msec, check_for_gpm) + int fd; + long msec; +! int *check_for_gpm; + { + int ret; + #if defined(FEAT_XCLIPBOARD) || defined(USE_XSMP) || defined(FEAT_MZSCHEME) +--- 4750,4756 ---- + RealWaitForChar(fd, msec, check_for_gpm) + int fd; + long msec; +! int *check_for_gpm UNUSED; + { + int ret; + #if defined(FEAT_XCLIPBOARD) || defined(USE_XSMP) || defined(FEAT_MZSCHEME) +*************** +*** 5572,5578 **** + i = fread((char *)buffer, 1, len, fd); + fclose(fd); + mch_remove(tempname); +! if (i != len) + { + /* unexpected read error */ + EMSG2(_(e_notread), tempname); +--- 5567,5573 ---- + i = fread((char *)buffer, 1, len, fd); + fclose(fd); + mch_remove(tempname); +! if (i != (int)len) + { + /* unexpected read error */ + EMSG2(_(e_notread), tempname); +*************** +*** 5633,5639 **** + if (shell_style == STYLE_PRINT && !did_find_nul) + { + /* If there is a NUL, set did_find_nul, else set check_spaces */ +! if (len && (int)STRLEN(buffer) < len - 1) + did_find_nul = TRUE; + else + check_spaces = TRUE; +--- 5628,5634 ---- + if (shell_style == STYLE_PRINT && !did_find_nul) + { + /* If there is a NUL, set did_find_nul, else set check_spaces */ +! if (len && (int)STRLEN(buffer) < (int)len - 1) + did_find_nul = TRUE; + else + check_spaces = TRUE; +*** ../vim-7.2.173/src/os_unix.h 2009-05-13 12:46:36.000000000 +0200 +--- src/os_unix.h 2009-05-15 21:10:31.000000000 +0200 +*************** +*** 126,132 **** + # define SIGDUMMYARG 0, 0, (struct sigcontext *)0 + # else + # define SIGPROTOARG (int) +! # define SIGDEFARG(s) (s) int s; + # define SIGDUMMYARG 0 + # endif + #else +--- 126,132 ---- + # define SIGDUMMYARG 0, 0, (struct sigcontext *)0 + # else + # define SIGPROTOARG (int) +! # define SIGDEFARG(s) (s) int s UNUSED; + # define SIGDUMMYARG 0 + # endif + #else +*** ../vim-7.2.173/src/regexp.c 2009-02-21 22:03:06.000000000 +0100 +--- src/regexp.c 2009-05-15 21:14:18.000000000 +0200 +*************** +*** 471,477 **** + + if ((*pp)[1] == ':') + { +! for (i = 0; i < sizeof(class_names) / sizeof(*class_names); ++i) + if (STRNCMP(*pp + 2, class_names[i], STRLEN(class_names[i])) == 0) + { + *pp += STRLEN(class_names[i]) + 2; +--- 471,477 ---- + + if ((*pp)[1] == ':') + { +! for (i = 0; i < (int)(sizeof(class_names) / sizeof(*class_names)); ++i) + if (STRNCMP(*pp + 2, class_names[i], STRLEN(class_names[i])) == 0) + { + *pp += STRLEN(class_names[i]) + 2; +*************** +*** 3362,3373 **** + * Match a regexp against a string ("line" points to the string) or multiple + * lines ("line" is NULL, use reg_getline()). + */ +- /*ARGSUSED*/ + static long + vim_regexec_both(line, col, tm) + char_u *line; + colnr_T col; /* column to start looking for match */ +! proftime_T *tm; /* timeout limit or NULL */ + { + regprog_T *prog; + char_u *s; +--- 3362,3372 ---- + * Match a regexp against a string ("line" points to the string) or multiple + * lines ("line" is NULL, use reg_getline()). + */ + static long + vim_regexec_both(line, col, tm) + char_u *line; + colnr_T col; /* column to start looking for match */ +! proftime_T *tm UNUSED; /* timeout limit or NULL */ + { + regprog_T *prog; + char_u *s; +*** ../vim-7.2.173/src/search.c 2009-04-22 18:43:06.000000000 +0200 +--- src/search.c 2009-05-15 21:16:36.000000000 +0200 +*************** +*** 522,528 **** + * When FEAT_EVAL is defined, returns the index of the first matching + * subpattern plus one; one if there was none. + */ +- /*ARGSUSED*/ + int + searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm) + win_T *win; /* window to search in; can be NULL for a +--- 522,527 ---- +*************** +*** 535,541 **** + int options; + int pat_use; /* which pattern to use when "pat" is empty */ + linenr_T stop_lnum; /* stop after this line number when != 0 */ +! proftime_T *tm; /* timeout limit or NULL */ + { + int found; + linenr_T lnum; /* no init to shut up Apollo cc */ +--- 534,540 ---- + int options; + int pat_use; /* which pattern to use when "pat" is empty */ + linenr_T stop_lnum; /* stop after this line number when != 0 */ +! proftime_T *tm UNUSED; /* timeout limit or NULL */ + { + int found; + linenr_T lnum; /* no init to shut up Apollo cc */ +*************** +*** 554,561 **** + int save_called_emsg = called_emsg; + #ifdef FEAT_SEARCH_EXTRA + int break_loop = FALSE; +- #else +- # define break_loop FALSE + #endif + + if (search_regcomp(pat, RE_SEARCH, pat_use, +--- 553,558 ---- +*************** +*** 940,946 **** + * twice. + */ + if (!p_ws || stop_lnum != 0 || got_int || called_emsg +! || break_loop || found || loop) + break; + + /* +--- 937,946 ---- + * twice. + */ + if (!p_ws || stop_lnum != 0 || got_int || called_emsg +! #ifdef FEAT_SEARCH_EXTRA +! || break_loop +! #endif +! || found || loop) + break; + + /* +*************** +*** 958,964 **** + give_warning((char_u *)_(dir == BACKWARD + ? top_bot_msg : bot_top_msg), TRUE); + } +! if (got_int || called_emsg || break_loop) + break; + } + while (--count > 0 && found); /* stop after count matches or no match */ +--- 958,968 ---- + give_warning((char_u *)_(dir == BACKWARD + ? top_bot_msg : bot_top_msg), TRUE); + } +! if (got_int || called_emsg +! #ifdef FEAT_SEARCH_EXTRA +! || break_loop +! #endif +! ) + break; + } + while (--count > 0 && found); /* stop after count matches or no match */ +*** ../vim-7.2.173/src/tag.c 2009-02-23 00:53:35.000000000 +0100 +--- src/tag.c 2009-05-15 21:16:59.000000000 +0200 +*************** +*** 1105,1114 **** + /* + * Print the tag stack + */ +- /*ARGSUSED*/ + void + do_tags(eap) +! exarg_T *eap; + { + int i; + char_u *name; +--- 1105,1113 ---- + /* + * Print the tag stack + */ + void + do_tags(eap) +! exarg_T *eap UNUSED; + { + int i; + char_u *name; +*************** +*** 2530,2540 **** + * Callback function for finding all "tags" and "tags-??" files in + * 'runtimepath' doc directories. + */ +- /*ARGSUSED*/ + static void + found_tagfile_cb(fname, cookie) + char_u *fname; +! void *cookie; + { + if (ga_grow(&tag_fnames, 1) == OK) + ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] = +--- 2529,2538 ---- + * Callback function for finding all "tags" and "tags-??" files in + * 'runtimepath' doc directories. + */ + static void + found_tagfile_cb(fname, cookie) + char_u *fname; +! void *cookie UNUSED; + { + if (ga_grow(&tag_fnames, 1) == OK) + ((char_u **)(tag_fnames.ga_data))[tag_fnames.ga_len++] = +*** ../vim-7.2.173/src/version.c 2009-05-14 22:19:19.000000000 +0200 +--- src/version.c 2009-05-15 21:21:44.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 174, + /**/ + +-- +TERRY GILLIAM PLAYED: PATSY (ARTHUR'S TRUSTY STEED), THE GREEN KNIGHT + SOOTHSAYER, BRIDGEKEEPER, SIR GAWAIN (THE FIRST TO BE + KILLED BY THE RABBIT) + "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/7.2.175 b/7.2.175 new file mode 100644 index 00000000..4ba3a158 --- /dev/null +++ b/7.2.175 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.175 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.175 +Problem: Compiler warning in OpenBSD. +Solution: Add type cast for NULL. (Dasn) +Files: src/if_cscope.c + + +*** ../vim-7.2.174/src/if_cscope.c 2009-04-22 16:22:44.000000000 +0200 +--- src/if_cscope.c 2009-05-16 16:15:03.000000000 +0200 +*************** +*** 994,1000 **** + vim_free(ppath); + + #if defined(UNIX) +! if (execl("/bin/sh", "sh", "-c", cmd, NULL) == -1) + PERROR(_("cs_create_connection exec failed")); + + exit(127); +--- 994,1000 ---- + vim_free(ppath); + + #if defined(UNIX) +! if (execl("/bin/sh", "sh", "-c", cmd, (char *)NULL) == -1) + PERROR(_("cs_create_connection exec failed")); + + exit(127); +*** ../vim-7.2.174/src/version.c 2009-05-15 21:31:11.000000000 +0200 +--- src/version.c 2009-05-16 16:13:15.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 175, + /**/ + +-- +Every time I lose weight, it finds me again! + + /// 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/7.2.176 b/7.2.176 new file mode 100644 index 00000000..91c98afb --- /dev/null +++ b/7.2.176 @@ -0,0 +1,207 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.176 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.176 +Problem: Exceptions for splint are not useful. +Solution: Remove the S_SPLINT_S ifdefs. +Files: src/edit.c, src/ex_cmds.c, src/ex_docmd.c, src/os_unix.c, + src/os_unix.h, src/os_unixx.h, src/structs.h, src/term.h + + +*** ../vim-7.2.175/src/edit.c 2009-05-15 21:31:11.000000000 +0200 +--- src/edit.c 2009-05-16 16:18:35.000000000 +0200 +*************** +*** 69,79 **** + compl_T *cp_prev; + char_u *cp_str; /* matched text */ + char cp_icase; /* TRUE or FALSE: ignore case */ +- #ifdef S_SPLINT_S /* splint can't handle array of pointers */ +- char_u **cp_text; /* text for the menu */ +- #else + char_u *(cp_text[CPT_COUNT]); /* text for the menu */ +- #endif + char_u *cp_fname; /* file containing the match, allocated when + * cp_flags has FREE_FNAME */ + int cp_flags; /* ORIGINAL_TEXT, CONT_S_IPOS or FREE_FNAME */ +--- 69,75 ---- +*************** +*** 3835,3845 **** + char_u *word; + int icase = FALSE; + int adup = FALSE; +- #ifdef S_SPLINT_S /* splint doesn't parse array of pointers correctly */ +- char_u **cptext; +- #else + char_u *(cptext[CPT_COUNT]); +- #endif + + if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) + { +--- 3831,3837 ---- +*** ../vim-7.2.175/src/ex_cmds.c 2009-05-15 21:31:11.000000000 +0200 +--- src/ex_cmds.c 2009-05-16 16:18:56.000000000 +0200 +*************** +*** 5776,5785 **** + { + char_u *s, *d; + int i; +- #ifdef S_SPLINT_S /* splint doesn't understand array of pointers */ +- static char **mtable; +- static char **rtable; +- #else + static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*", + "/*", "/\\*", "\"*", "**", + "/\\(\\)", +--- 5776,5781 ---- +*************** +*** 5794,5800 **** + "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=", + "\\[count]", "\\[quotex]", "\\[range]", + "\\[pattern]", "\\\\bar", "/\\\\%\\$"}; +- #endif + int flags; + + d = IObuff; /* assume IObuff is long enough! */ +--- 5790,5795 ---- +*** ../vim-7.2.175/src/ex_docmd.c 2009-05-15 21:31:11.000000000 +0200 +--- src/ex_docmd.c 2009-05-16 16:19:26.000000000 +0200 +*************** +*** 9395,9407 **** + { + int len; + int i; +! #ifdef S_SPLINT_S /* splint can't handle array of pointers */ +! static char **spec_str; +! static char *(nospec_str[]) +! #else +! static char *(spec_str[]) +! #endif +! = { + "%", + #define SPEC_PERC 0 + "#", +--- 9395,9401 ---- + { + int len; + int i; +! static char *(spec_str[]) = { + "%", + #define SPEC_PERC 0 + "#", +*** ../vim-7.2.175/src/os_unix.c 2009-05-15 21:31:11.000000000 +0200 +--- src/os_unix.c 2009-05-16 16:20:00.000000000 +0200 +*************** +*** 199,207 **** + #endif + + #ifndef SIG_ERR +! # ifndef S_SPLINT_S +! # define SIG_ERR ((RETSIGTYPE (*)())-1) +! # endif + #endif + + /* volatile because it is used in signal handler sig_winch(). */ +--- 199,205 ---- + #endif + + #ifndef SIG_ERR +! # define SIG_ERR ((RETSIGTYPE (*)())-1) + #endif + + /* volatile because it is used in signal handler sig_winch(). */ +*************** +*** 443,451 **** + + #if defined(HAVE_TOTAL_MEM) || defined(PROTO) + # ifdef HAVE_SYS_RESOURCE_H +! # ifndef S_SPLINT_S /* splint crashes on bits/resource.h */ +! # include +! # endif + # endif + # if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTL) + # include +--- 441,447 ---- + + #if defined(HAVE_TOTAL_MEM) || defined(PROTO) + # ifdef HAVE_SYS_RESOURCE_H +! # include + # endif + # if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_SYSCTL) + # include +*** ../vim-7.2.175/src/os_unix.h 2009-05-15 21:31:11.000000000 +0200 +--- src/os_unix.h 2009-05-16 16:17:22.000000000 +0200 +*************** +*** 53,61 **** + #endif + + #ifdef HAVE_UNISTD_H +! # ifndef S_SPLINT_S /* splint crashes on bits/confname.h */ +! # include +! # endif + #endif + + #ifdef HAVE_LIBC_H +--- 53,59 ---- + #endif + + #ifdef HAVE_UNISTD_H +! # include + #endif + + #ifdef HAVE_LIBC_H +*** ../vim-7.2.175/src/structs.h 2009-05-13 20:47:07.000000000 +0200 +--- src/structs.h 2009-05-16 16:17:51.000000000 +0200 +*************** +*** 1646,1656 **** + #endif + #ifdef FEAT_DIFF + diff_T *tp_first_diff; +- # ifdef S_SPLINT_S /* splint doesn't understand the array of pointers */ +- buf_T **tp_diffbuf; +- # else + buf_T *(tp_diffbuf[DB_COUNT]); +- # endif + int tp_diff_invalid; /* list of diffs is outdated */ + #endif + frame_T *tp_snapshot; /* window layout snapshot */ +--- 1646,1652 ---- +*** ../vim-7.2.175/src/term.h 2009-05-13 18:54:14.000000000 +0200 +--- src/term.h 2009-05-16 16:20:06.000000000 +0200 +*************** +*** 96,106 **** + * - there should be code in term.c to obtain the value from the termcap + */ + +- #ifdef S_SPLINT_S /* splint doesn't understand array of pointers */ +- extern char_u **term_strings; /* current terminal strings */ +- #else + extern char_u *(term_strings[]); /* current terminal strings */ +- #endif + + /* + * strings used for terminal +--- 96,102 ---- +*** ../vim-7.2.175/src/version.c 2009-05-16 16:15:39.000000000 +0200 +--- src/version.c 2009-05-16 16:34:10.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 176, + /**/ + +-- +Corn oil comes from corn and olive oil comes from olives, so where +does baby oil come from? + + /// 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/7.2.177 b/7.2.177 new file mode 100644 index 00000000..65dc16c2 --- /dev/null +++ b/7.2.177 @@ -0,0 +1,2726 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.177 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.177 +Problem: Compiler warnings when using -Wextra +Solution: Add UNUSED and type casts. +Files: src/eval.c, src/ex_docmd.c, src/ex_eval.c, src/ex_getln.c, + src/fileio.c, src/hardcopy.c, src/if_cscope.c, src/if_xcmdsrv.c, + src/farsi.c, src/mark.c, src/menu.c + + +*** ../vim-7.2.176/src/eval.c 2009-05-15 21:31:11.000000000 +0200 +--- src/eval.c 2009-05-16 16:58:30.000000000 +0200 +*************** +*** 3772,3778 **** + * Function given to ExpandGeneric() to obtain the list of user defined + * (global/buffer/window/built-in) variable names. + */ +- /*ARGSUSED*/ + char_u * + get_user_var_name(xp, idx) + expand_T *xp; +--- 3772,3777 ---- +*************** +*** 7787,7793 **** + * Function given to ExpandGeneric() to obtain the list of internal or + * user defined variable or function names. + */ +- /*ARGSUSED*/ + char_u * + get_expr_name(xp, idx) + expand_T *xp; +--- 7786,7791 ---- +*************** +*** 8655,8664 **** + /* + * "byte2line(byte)" function + */ +- /*ARGSUSED*/ + static void + f_byte2line(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifndef FEAT_BYTEOFF +--- 8653,8661 ---- + /* + * "byte2line(byte)" function + */ + static void + f_byte2line(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifndef FEAT_BYTEOFF +*************** +*** 8678,8684 **** + /* + * "byteidx()" function + */ +- /*ARGSUSED*/ + static void + f_byteidx(argvars, rettv) + typval_T *argvars; +--- 8675,8680 ---- +*************** +*** 8852,8858 **** + static void + f_clearmatches(argvars, rettv) + typval_T *argvars UNUSED; +! typval_T *rettv; + { + #ifdef FEAT_SEARCH_EXTRA + clear_matches(curwin); +--- 8848,8854 ---- + static void + f_clearmatches(argvars, rettv) + typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_SEARCH_EXTRA + clear_matches(curwin); +*************** +*** 8916,8926 **** + /* + * "complete()" function + */ +- /*ARGSUSED*/ + static void + f_complete(argvars, rettv) + typval_T *argvars; +! typval_T *rettv; + { + int startcol; + +--- 8912,8921 ---- + /* + * "complete()" function + */ + static void + f_complete(argvars, rettv) + typval_T *argvars; +! typval_T *rettv UNUSED; + { + int startcol; + +*************** +*** 8951,8957 **** + /* + * "complete_add()" function + */ +- /*ARGSUSED*/ + static void + f_complete_add(argvars, rettv) + typval_T *argvars; +--- 8946,8951 ---- +*************** +*** 8963,8972 **** + /* + * "complete_check()" function + */ +- /*ARGSUSED*/ + static void + f_complete_check(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int saved = RedrawingDisabled; +--- 8957,8965 ---- + /* + * "complete_check()" function + */ + static void + f_complete_check(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int saved = RedrawingDisabled; +*************** +*** 8981,8991 **** + /* + * "confirm(message, buttons[, default [, type]])" function + */ +- /*ARGSUSED*/ + static void + f_confirm(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) + char_u *message; +--- 8974,8983 ---- + /* + * "confirm(message, buttons[, default [, type]])" function + */ + static void + f_confirm(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) + char_u *message; +*************** +*** 9150,9160 **** + * + * Checks the existence of a cscope connection. + */ +- /*ARGSUSED*/ + static void + f_cscope_connection(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_CSCOPE + int num = 0; +--- 9142,9151 ---- + * + * Checks the existence of a cscope connection. + */ + static void + f_cscope_connection(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_CSCOPE + int num = 0; +*************** +*** 9181,9187 **** + * Moves the cursor to the specified line and column. + * Returns 0 when the position could be set, -1 otherwise. + */ +- /*ARGSUSED*/ + static void + f_cursor(argvars, rettv) + typval_T *argvars; +--- 9172,9177 ---- +*************** +*** 9275,9285 **** + /* + * "did_filetype()" function + */ +- /*ARGSUSED*/ + static void + f_did_filetype(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_AUTOCMD + rettv->vval.v_number = did_filetype; +--- 9265,9274 ---- + /* + * "did_filetype()" function + */ + static void + f_did_filetype(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_AUTOCMD + rettv->vval.v_number = did_filetype; +*************** +*** 9289,9299 **** + /* + * "diff_filler()" function + */ +- /*ARGSUSED*/ + static void + f_diff_filler(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_DIFF + rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars)); +--- 9278,9287 ---- + /* + * "diff_filler()" function + */ + static void + f_diff_filler(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_DIFF + rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars)); +*************** +*** 9303,9313 **** + /* + * "diff_hlID()" function + */ +- /*ARGSUSED*/ + static void + f_diff_hlID(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_DIFF + linenr_T lnum = get_tv_lnum(argvars); +--- 9291,9300 ---- + /* + * "diff_hlID()" function + */ + static void + f_diff_hlID(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_DIFF + linenr_T lnum = get_tv_lnum(argvars); +*************** +*** 9420,9426 **** + /* + * "eval()" function + */ +- /*ARGSUSED*/ + static void + f_eval(argvars, rettv) + typval_T *argvars; +--- 9407,9412 ---- +*************** +*** 9444,9453 **** + /* + * "eventhandler()" function + */ +- /*ARGSUSED*/ + static void + f_eventhandler(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = vgetc_busy; +--- 9430,9438 ---- + /* + * "eventhandler()" function + */ + static void + f_eventhandler(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = vgetc_busy; +*************** +*** 9704,9714 **** + /* + * "feedkeys()" function + */ +- /*ARGSUSED*/ + static void + f_feedkeys(argvars, rettv) + typval_T *argvars; +! typval_T *rettv; + { + int remap = TRUE; + char_u *keys, *flags; +--- 9689,9698 ---- + /* + * "feedkeys()" function + */ + static void + f_feedkeys(argvars, rettv) + typval_T *argvars; +! typval_T *rettv UNUSED; + { + int remap = TRUE; + char_u *keys, *flags; +*************** +*** 10210,10219 **** + /* + * "foldtext()" function + */ +- /*ARGSUSED*/ + static void + f_foldtext(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_FOLDING +--- 10194,10202 ---- + /* + * "foldtext()" function + */ + static void + f_foldtext(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_FOLDING +*************** +*** 10278,10287 **** + /* + * "foldtextresult(lnum)" function + */ +- /*ARGSUSED*/ + static void + f_foldtextresult(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_FOLDING +--- 10261,10269 ---- + /* + * "foldtextresult(lnum)" function + */ + static void + f_foldtextresult(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_FOLDING +*************** +*** 10314,10324 **** + /* + * "foreground()" function + */ +- /*ARGSUSED*/ + static void + f_foreground(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_GUI + if (gui.in_use) +--- 10296,10305 ---- + /* + * "foreground()" function + */ + static void + f_foreground(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_GUI + if (gui.in_use) +*************** +*** 10333,10339 **** + /* + * "function()" function + */ +- /*ARGSUSED*/ + static void + f_function(argvars, rettv) + typval_T *argvars; +--- 10314,10319 ---- +*************** +*** 10357,10367 **** + /* + * "garbagecollect()" function + */ +- /*ARGSUSED*/ + static void + f_garbagecollect(argvars, rettv) + typval_T *argvars; +! typval_T *rettv; + { + /* This is postponed until we are back at the toplevel, because we may be + * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */ +--- 10337,10346 ---- + /* + * "garbagecollect()" function + */ + static void + f_garbagecollect(argvars, rettv) + typval_T *argvars; +! typval_T *rettv UNUSED; + { + /* This is postponed until we are back at the toplevel, because we may be + * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */ +*************** +*** 10664,10673 **** + /* + * "getcharmod()" function + */ +- /*ARGSUSED*/ + static void + f_getcharmod(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = mod_mask; +--- 10643,10651 ---- + /* + * "getcharmod()" function + */ + static void + f_getcharmod(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = mod_mask; +*************** +*** 10676,10685 **** + /* + * "getcmdline()" function + */ +- /*ARGSUSED*/ + static void + f_getcmdline(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +--- 10654,10662 ---- + /* + * "getcmdline()" function + */ + static void + f_getcmdline(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +*************** +*** 10689,10698 **** + /* + * "getcmdpos()" function + */ +- /*ARGSUSED*/ + static void + f_getcmdpos(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = get_cmdline_pos() + 1; +--- 10666,10674 ---- + /* + * "getcmdpos()" function + */ + static void + f_getcmdpos(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = get_cmdline_pos() + 1; +*************** +*** 10701,10710 **** + /* + * "getcmdtype()" function + */ +- /*ARGSUSED*/ + static void + f_getcmdtype(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +--- 10677,10685 ---- + /* + * "getcmdtype()" function + */ + static void + f_getcmdtype(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +*************** +*** 10719,10728 **** + /* + * "getcwd()" function + */ +- /*ARGSUSED*/ + static void + f_getcwd(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u cwd[MAXPATHL]; +--- 10694,10702 ---- + /* + * "getcwd()" function + */ + static void + f_getcwd(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u cwd[MAXPATHL]; +*************** +*** 10743,10752 **** + /* + * "getfontname()" function + */ +- /*ARGSUSED*/ + static void + f_getfontname(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +--- 10717,10725 ---- + /* + * "getfontname()" function + */ + static void + f_getfontname(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +*************** +*** 10973,10982 **** + /* + * "getmatches()" function + */ +- /*ARGSUSED*/ + static void + f_getmatches(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_SEARCH_EXTRA +--- 10946,10954 ---- + /* + * "getmatches()" function + */ + static void + f_getmatches(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_SEARCH_EXTRA +*************** +*** 11004,11013 **** + /* + * "getpid()" function + */ +- /*ARGSUSED*/ + static void + f_getpid(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = mch_get_pid(); +--- 10976,10984 ---- + /* + * "getpid()" function + */ + static void + f_getpid(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = mch_get_pid(); +*************** +*** 11051,11061 **** + /* + * "getqflist()" and "getloclist()" functions + */ +- /*ARGSUSED*/ + static void + f_getqflist(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_QUICKFIX + win_T *wp; +--- 11022,11031 ---- + /* + * "getqflist()" and "getloclist()" functions + */ + static void + f_getqflist(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_QUICKFIX + win_T *wp; +*************** +*** 11170,11179 **** + /* + * "getwinposx()" function + */ +- /*ARGSUSED*/ + static void + f_getwinposx(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = -1; +--- 11140,11148 ---- + /* + * "getwinposx()" function + */ + static void + f_getwinposx(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = -1; +*************** +*** 11191,11200 **** + /* + * "getwinposy()" function + */ +- /*ARGSUSED*/ + static void + f_getwinposy(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = -1; +--- 11160,11168 ---- + /* + * "getwinposy()" function + */ + static void + f_getwinposy(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = -1; +*************** +*** 11921,11930 **** + /* + * "haslocaldir()" function + */ +- /*ARGSUSED*/ + static void + f_haslocaldir(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = (curwin->w_localdir != NULL); +--- 11889,11897 ---- + /* + * "haslocaldir()" function + */ + static void + f_haslocaldir(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = (curwin->w_localdir != NULL); +*************** +*** 11962,11971 **** + /* + * "histadd()" function + */ +- /*ARGSUSED*/ + static void + f_histadd(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_CMDHIST +--- 11929,11937 ---- + /* + * "histadd()" function + */ + static void + f_histadd(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_CMDHIST +*************** +*** 11996,12006 **** + /* + * "histdel()" function + */ +- /*ARGSUSED*/ + static void + f_histdel(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_CMDHIST + int n; +--- 11962,11971 ---- + /* + * "histdel()" function + */ + static void + f_histdel(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_CMDHIST + int n; +*************** +*** 12028,12037 **** + /* + * "histget()" function + */ +- /*ARGSUSED*/ + static void + f_histget(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_CMDHIST +--- 11993,12001 ---- + /* + * "histget()" function + */ + static void + f_histget(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_CMDHIST +*************** +*** 12061,12070 **** + /* + * "histnr()" function + */ +- /*ARGSUSED*/ + static void + f_histnr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int i; +--- 12025,12033 ---- + /* + * "histnr()" function + */ + static void + f_histnr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int i; +*************** +*** 12106,12115 **** + /* + * "hostname()" function + */ +- /*ARGSUSED*/ + static void + f_hostname(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u hostname[256]; +--- 12069,12077 ---- + /* + * "hostname()" function + */ + static void + f_hostname(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u hostname[256]; +*************** +*** 12122,12131 **** + /* + * iconv() function + */ +- /*ARGSUSED*/ + static void + f_iconv(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_MBYTE +--- 12084,12092 ---- + /* + * iconv() function + */ + static void + f_iconv(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_MBYTE +*************** +*** 12420,12429 **** + /* + * "inputrestore()" function + */ +- /*ARGSUSED*/ + static void + f_inputrestore(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + if (ga_userinput.ga_len > 0) +--- 12381,12389 ---- + /* + * "inputrestore()" function + */ + static void + f_inputrestore(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + if (ga_userinput.ga_len > 0) +*************** +*** 12443,12452 **** + /* + * "inputsave()" function + */ +- /*ARGSUSED*/ + static void + f_inputsave(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + /* Add an entry to the stack of typeahead storage. */ +--- 12403,12411 ---- + /* + * "inputsave()" function + */ + static void + f_inputsave(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + /* Add an entry to the stack of typeahead storage. */ +*************** +*** 12733,12742 **** + /* + * "last_buffer_nr()" function. + */ +- /*ARGSUSED*/ + static void + f_last_buffer_nr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int n = 0; +--- 12692,12700 ---- + /* + * "last_buffer_nr()" function. + */ + static void + f_last_buffer_nr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int n = 0; +*************** +*** 12863,12872 **** + /* + * "line2byte(lnum)" function + */ +- /*ARGSUSED*/ + static void + f_line2byte(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifndef FEAT_BYTEOFF +--- 12821,12829 ---- + /* + * "line2byte(lnum)" function + */ + static void + f_line2byte(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifndef FEAT_BYTEOFF +*************** +*** 12912,12921 **** + /* + * "localtime()" function + */ +- /*ARGSUSED*/ + static void + f_localtime(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->vval.v_number = (varnumber_T)time(NULL); +--- 12869,12877 ---- + /* + * "localtime()" function + */ + static void + f_localtime(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->vval.v_number = (varnumber_T)time(NULL); +*************** +*** 13497,13503 **** + /* + * "mode()" function + */ +- /*ARGSUSED*/ + static void + f_mode(argvars, rettv) + typval_T *argvars; +--- 13453,13458 ---- +*************** +*** 13726,13736 **** + /* + * "pumvisible()" function + */ +- /*ARGSUSED*/ + static void + f_pumvisible(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_INS_EXPAND + if (pum_visible()) +--- 13681,13690 ---- + /* + * "pumvisible()" function + */ + static void + f_pumvisible(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_INS_EXPAND + if (pum_visible()) +*************** +*** 14131,14140 **** + /* + * "remote_expr()" function + */ +- /*ARGSUSED*/ + static void + f_remote_expr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +--- 14085,14093 ---- + /* + * "remote_expr()" function + */ + static void + f_remote_expr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +*************** +*** 14147,14157 **** + /* + * "remote_foreground()" function + */ +- /*ARGSUSED*/ + static void + f_remote_foreground(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_CLIENTSERVER + # ifdef WIN32 +--- 14100,14109 ---- + /* + * "remote_foreground()" function + */ + static void + f_remote_foreground(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_CLIENTSERVER + # ifdef WIN32 +*************** +*** 14173,14182 **** + #endif + } + +- /*ARGSUSED*/ + static void + f_remote_peek(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_CLIENTSERVER +--- 14125,14133 ---- + #endif + } + + static void + f_remote_peek(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_CLIENTSERVER +*************** +*** 14231,14240 **** + #endif + } + +- /*ARGSUSED*/ + static void + f_remote_read(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u *r = NULL; +--- 14182,14190 ---- + #endif + } + + static void + f_remote_read(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u *r = NULL; +*************** +*** 14266,14275 **** + /* + * "remote_send()" function + */ +- /*ARGSUSED*/ + static void + f_remote_send(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +--- 14216,14224 ---- + /* + * "remote_send()" function + */ + static void + f_remote_send(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + rettv->v_type = VAR_STRING; +*************** +*** 14398,14404 **** + /* + * "repeat()" function + */ +- /*ARGSUSED*/ + static void + f_repeat(argvars, rettv) + typval_T *argvars; +--- 14347,14352 ---- +*************** +*** 15207,15216 **** + } + + +- /*ARGSUSED*/ + static void + f_server2client(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_CLIENTSERVER +--- 15155,15163 ---- + } + + + static void + f_server2client(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_CLIENTSERVER +*************** +*** 15239,15248 **** + #endif + } + +- /*ARGSUSED*/ + static void + f_serverlist(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u *r = NULL; +--- 15186,15194 ---- + #endif + } + + static void + f_serverlist(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u *r = NULL; +*************** +*** 15263,15273 **** + /* + * "setbufvar()" function + */ +- /*ARGSUSED*/ + static void + f_setbufvar(argvars, rettv) + typval_T *argvars; +! typval_T *rettv; + { + buf_T *buf; + aco_save_T aco; +--- 15209,15218 ---- + /* + * "setbufvar()" function + */ + static void + f_setbufvar(argvars, rettv) + typval_T *argvars; +! typval_T *rettv UNUSED; + { + buf_T *buf; + aco_save_T aco; +*************** +*** 15402,15413 **** + /* + * Used by "setqflist()" and "setloclist()" functions + */ +- /*ARGSUSED*/ + static void + set_qf_ll_list(wp, list_arg, action_arg, rettv) +! win_T *wp; +! typval_T *list_arg; +! typval_T *action_arg; + typval_T *rettv; + { + #ifdef FEAT_QUICKFIX +--- 15347,15357 ---- + /* + * Used by "setqflist()" and "setloclist()" functions + */ + static void + set_qf_ll_list(wp, list_arg, action_arg, rettv) +! win_T *wp UNUSED; +! typval_T *list_arg UNUSED; +! typval_T *action_arg UNUSED; + typval_T *rettv; + { + #ifdef FEAT_QUICKFIX +*************** +*** 15442,15448 **** + /* + * "setloclist()" function + */ +- /*ARGSUSED*/ + static void + f_setloclist(argvars, rettv) + typval_T *argvars; +--- 15386,15391 ---- +*************** +*** 15520,15526 **** + /* + * "setpos()" function + */ +- /*ARGSUSED*/ + static void + f_setpos(argvars, rettv) + typval_T *argvars; +--- 15463,15468 ---- +*************** +*** 15564,15570 **** + /* + * "setqflist()" function + */ +- /*ARGSUSED*/ + static void + f_setqflist(argvars, rettv) + typval_T *argvars; +--- 15506,15511 ---- +*************** +*** 15667,15677 **** + /* + * "setwinvar()" and "settabwinvar()" functions + */ +- /*ARGSUSED*/ + static void + setwinvar(argvars, rettv, off) + typval_T *argvars; +! typval_T *rettv; + int off; + { + win_T *win; +--- 15608,15617 ---- + /* + * "setwinvar()" and "settabwinvar()" functions + */ + static void + setwinvar(argvars, rettv, off) + typval_T *argvars; +! typval_T *rettv UNUSED; + int off; + { + win_T *win; +*************** +*** 15987,15996 **** + /* + * "spellbadword()" function + */ +- /* ARGSUSED */ + static void + f_spellbadword(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u *word = (char_u *)""; +--- 15927,15935 ---- + /* + * "spellbadword()" function + */ + static void + f_spellbadword(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u *word = (char_u *)""; +*************** +*** 16042,16051 **** + /* + * "spellsuggest()" function + */ +- /*ARGSUSED*/ + static void + f_spellsuggest(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_SPELL +--- 15981,15989 ---- + /* + * "spellsuggest()" function + */ + static void + f_spellsuggest(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_SPELL +*************** +*** 16528,16537 **** + /* + * "synID(lnum, col, trans)" function + */ +- /*ARGSUSED*/ + static void + f_synID(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int id = 0; +--- 16466,16474 ---- + /* + * "synID(lnum, col, trans)" function + */ + static void + f_synID(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int id = 0; +*************** +*** 16556,16565 **** + /* + * "synIDattr(id, what [, mode])" function + */ +- /*ARGSUSED*/ + static void + f_synIDattr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u *p = NULL; +--- 16493,16501 ---- + /* + * "synIDattr(id, what [, mode])" function + */ + static void + f_synIDattr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u *p = NULL; +*************** +*** 16652,16661 **** + /* + * "synIDtrans(id)" function + */ +- /*ARGSUSED*/ + static void + f_synIDtrans(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int id; +--- 16588,16596 ---- + /* + * "synIDtrans(id)" function + */ + static void + f_synIDtrans(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int id; +*************** +*** 16675,16684 **** + /* + * "synstack(lnum, col)" function + */ +- /*ARGSUSED*/ + static void + f_synstack(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_SYN_HL +--- 16610,16618 ---- + /* + * "synstack(lnum, col)" function + */ + static void + f_synstack(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_SYN_HL +*************** +*** 16812,16822 **** + /* + * "tabpagebuflist()" function + */ +- /* ARGSUSED */ + static void + f_tabpagebuflist(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_WINDOWS + tabpage_T *tp; +--- 16746,16755 ---- + /* + * "tabpagebuflist()" function + */ + static void + f_tabpagebuflist(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_WINDOWS + tabpage_T *tp; +*************** +*** 16844,16853 **** + /* + * "tabpagenr()" function + */ +- /* ARGSUSED */ + static void + f_tabpagenr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int nr = 1; +--- 16777,16785 ---- + /* + * "tabpagenr()" function + */ + static void + f_tabpagenr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int nr = 1; +*************** +*** 16929,16938 **** + /* + * "tabpagewinnr()" function + */ +- /* ARGSUSED */ + static void + f_tabpagewinnr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int nr = 1; +--- 16861,16869 ---- + /* + * "tabpagewinnr()" function + */ + static void + f_tabpagewinnr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int nr = 1; +*************** +*** 16952,16961 **** + /* + * "tagfiles()" function + */ +- /*ARGSUSED*/ + static void + f_tagfiles(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + char_u fname[MAXPATHL + 1]; +--- 16883,16891 ---- + /* + * "tagfiles()" function + */ + static void + f_tagfiles(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + char_u fname[MAXPATHL + 1]; +*************** +*** 16995,17004 **** + /* + * "tempname()" function + */ +- /*ARGSUSED*/ + static void + f_tempname(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + static int x = 'A'; +--- 16925,16933 ---- + /* + * "tempname()" function + */ + static void + f_tempname(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + static int x = 'A'; +*************** +*** 17031,17041 **** + /* + * "test(list)" function: Just checking the walls... + */ +- /*ARGSUSED*/ + static void + f_test(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + /* Used for unit testing. Change the code below to your liking. */ + #if 0 +--- 16960,16969 ---- + /* + * "test(list)" function: Just checking the walls... + */ + static void + f_test(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + /* Used for unit testing. Change the code below to your liking. */ + #if 0 +*************** +*** 17320,17330 **** + /* + * "visualmode()" function + */ +- /*ARGSUSED*/ + static void + f_visualmode(argvars, rettv) +! typval_T *argvars; +! typval_T *rettv; + { + #ifdef FEAT_VISUAL + char_u str[2]; +--- 17248,17257 ---- + /* + * "visualmode()" function + */ + static void + f_visualmode(argvars, rettv) +! typval_T *argvars UNUSED; +! typval_T *rettv UNUSED; + { + #ifdef FEAT_VISUAL + char_u str[2]; +*************** +*** 17360,17369 **** + /* + * "wincol()" function + */ +- /*ARGSUSED*/ + static void + f_wincol(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + validate_cursor(); +--- 17287,17295 ---- + /* + * "wincol()" function + */ + static void + f_wincol(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + validate_cursor(); +*************** +*** 17390,17399 **** + /* + * "winline()" function + */ +- /*ARGSUSED*/ + static void + f_winline(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + validate_cursor(); +--- 17316,17324 ---- + /* + * "winline()" function + */ + static void + f_winline(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + validate_cursor(); +*************** +*** 17403,17412 **** + /* + * "winnr()" function + */ +- /* ARGSUSED */ + static void + f_winnr(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + int nr = 1; +--- 17328,17336 ---- + /* + * "winnr()" function + */ + static void + f_winnr(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + int nr = 1; +*************** +*** 17420,17429 **** + /* + * "winrestcmd()" function + */ +- /* ARGSUSED */ + static void + f_winrestcmd(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + #ifdef FEAT_WINDOWS +--- 17344,17352 ---- + /* + * "winrestcmd()" function + */ + static void + f_winrestcmd(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + #ifdef FEAT_WINDOWS +*************** +*** 17455,17465 **** + /* + * "winrestview()" function + */ +- /* ARGSUSED */ + static void + f_winrestview(argvars, rettv) + typval_T *argvars; +! typval_T *rettv; + { + dict_T *dict; + +--- 17378,17387 ---- + /* + * "winrestview()" function + */ + static void + f_winrestview(argvars, rettv) + typval_T *argvars; +! typval_T *rettv UNUSED; + { + dict_T *dict; + +*************** +*** 17501,17510 **** + /* + * "winsaveview()" function + */ +- /* ARGSUSED */ + static void + f_winsaveview(argvars, rettv) +! typval_T *argvars; + typval_T *rettv; + { + dict_T *dict; +--- 17423,17431 ---- + /* + * "winsaveview()" function + */ + static void + f_winsaveview(argvars, rettv) +! typval_T *argvars UNUSED; + typval_T *rettv; + { + dict_T *dict; +*************** +*** 21646,21657 **** + * Called by do_cmdline() to get the next line. + * Returns allocated string, or NULL for end of function. + */ +- /* ARGSUSED */ + char_u * + get_func_line(c, cookie, indent) +! int c; /* not used */ + void *cookie; +! int indent; /* not used */ + { + funccall_T *fcp = (funccall_T *)cookie; + ufunc_T *fp = fcp->func; +--- 21567,21577 ---- + * Called by do_cmdline() to get the next line. + * Returns allocated string, or NULL for end of function. + */ + char_u * + get_func_line(c, cookie, indent) +! int c UNUSED; + void *cookie; +! int indent UNUSED; + { + funccall_T *fcp = (funccall_T *)cookie; + ufunc_T *fp = fcp->func; +*************** +*** 22023,22032 **** + /* + * List v:oldfiles in a nice way. + */ +- /*ARGSUSED*/ + void + ex_oldfiles(eap) +! exarg_T *eap; + { + list_T *l = vimvars[VV_OLDFILES].vv_list; + listitem_T *li; +--- 21943,21951 ---- + /* + * List v:oldfiles in a nice way. + */ + void + ex_oldfiles(eap) +! exarg_T *eap UNUSED; + { + list_T *l = vimvars[VV_OLDFILES].vv_list; + listitem_T *li; +*** ../vim-7.2.176/src/ex_docmd.c 2009-05-16 16:36:25.000000000 +0200 +--- src/ex_docmd.c 2009-05-16 17:01:26.000000000 +0200 +*************** +*** 3004,3010 **** + + if (VIM_ISDIGIT(*cmd)) + p = skipwhite(skipdigits(cmd)); +! for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i) + { + for (j = 0; p[j] != NUL; ++j) + if (p[j] != cmdmods[i].name[j]) +--- 3004,3010 ---- + + if (VIM_ISDIGIT(*cmd)) + p = skipwhite(skipdigits(cmd)); +! for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i) + { + for (j = 0; p[j] != NUL; ++j) + if (p[j] != cmdmods[i].name[j]) +*************** +*** 3032,3038 **** + char_u *p; + + /* Check command modifiers. */ +! for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i) + { + for (j = 0; name[j] != NUL; ++j) + if (name[j] != cmdmods[i].name[j]) +--- 3032,3038 ---- + char_u *p; + + /* Check command modifiers. */ +! for (i = 0; i < (int)(sizeof(cmdmods) / sizeof(struct cmdmod)); ++i) + { + for (j = 0; name[j] != NUL; ++j) + if (name[j] != cmdmods[i].name[j]) +*************** +*** 6093,6099 **** + {"bang", "bar", "buffer", "complete", "count", + "nargs", "range", "register"}; + +! if (idx >= sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0])) + return NULL; + return (char_u *)user_cmd_flags[idx]; + } +--- 6093,6099 ---- + {"bang", "bar", "buffer", "complete", "count", + "nargs", "range", "register"}; + +! if (idx >= (int)(sizeof(user_cmd_flags) / sizeof(user_cmd_flags[0]))) + return NULL; + return (char_u *)user_cmd_flags[idx]; + } +*************** +*** 6108,6114 **** + { + static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"}; + +! if (idx >= sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0])) + return NULL; + return (char_u *)user_cmd_nargs[idx]; + } +--- 6108,6114 ---- + { + static char *user_cmd_nargs[] = {"0", "1", "*", "?", "+"}; + +! if (idx >= (int)(sizeof(user_cmd_nargs) / sizeof(user_cmd_nargs[0]))) + return NULL; + return (char_u *)user_cmd_nargs[idx]; + } +*************** +*** 9144,9153 **** + /* + * ":stopinsert" + */ +- /*ARGSUSED*/ + static void + ex_stopinsert(eap) +! exarg_T *eap; + { + restart_edit = 0; + stop_insert_mode = TRUE; +--- 9144,9152 ---- + /* + * ":stopinsert" + */ + static void + ex_stopinsert(eap) +! exarg_T *eap UNUSED; + { + restart_edit = 0; + stop_insert_mode = TRUE; +*** ../vim-7.2.176/src/ex_eval.c 2007-11-24 21:50:19.000000000 +0100 +--- src/ex_eval.c 2009-05-16 17:06:09.000000000 +0200 +*************** +*** 60,66 **** +--- 60,68 ---- + #else + /* Values used for the Vim release. */ + # define THROW_ON_ERROR TRUE ++ # define THROW_ON_ERROR_TRUE + # define THROW_ON_INTERRUPT TRUE ++ # define THROW_ON_INTERRUPT_TRUE + #endif + + static void catch_exception __ARGS((except_T *excp)); +*************** +*** 1320,1335 **** +--- 1322,1341 ---- + * and reset the did_emsg or got_int flag, so this won't happen again at + * the next surrounding try conditional. + */ ++ #ifndef THROW_ON_ERROR_TRUE + if (did_emsg && !THROW_ON_ERROR) + { + inactivate_try = TRUE; + did_emsg = FALSE; + } ++ #endif ++ #ifndef THROW_ON_INTERRUPT_TRUE + if (got_int && !THROW_ON_INTERRUPT) + { + inactivate_try = TRUE; + got_int = FALSE; + } ++ #endif + idx = cleanup_conditionals(cstack, 0, inactivate_try); + if (idx >= 0) + { +*************** +*** 2254,2263 **** + /* + * ":endfunction" when not after a ":function" + */ +- /*ARGSUSED*/ + void + ex_endfunction(eap) +! exarg_T *eap; + { + EMSG(_("E193: :endfunction not inside a function")); + } +--- 2260,2268 ---- + /* + * ":endfunction" when not after a ":function" + */ + void + ex_endfunction(eap) +! exarg_T *eap UNUSED; + { + EMSG(_("E193: :endfunction not inside a function")); + } +*** ../vim-7.2.176/src/ex_getln.c 2009-05-15 21:31:11.000000000 +0200 +--- src/ex_getln.c 2009-05-16 17:06:55.000000000 +0200 +*************** +*** 4533,4539 **** + * right function to do the expansion. + */ + ret = FAIL; +! for (i = 0; i < sizeof(tab) / sizeof(struct expgen); ++i) + if (xp->xp_context == tab[i].context) + { + if (tab[i].ic) +--- 4533,4539 ---- + * right function to do the expansion. + */ + ret = FAIL; +! for (i = 0; i < (int)(sizeof(tab) / sizeof(struct expgen)); ++i) + if (xp->xp_context == tab[i].context) + { + if (tab[i].ic) +*** ../vim-7.2.176/src/fileio.c 2009-05-15 21:31:11.000000000 +0200 +--- src/fileio.c 2009-05-16 17:07:35.000000000 +0200 +*************** +*** 9085,9096 **** + * Called by do_cmdline() to get the next line for ":if". + * Returns allocated string, or NULL for end of autocommands. + */ +- /* ARGSUSED */ + static char_u * + getnextac(c, cookie, indent) +! int c; /* not used */ + void *cookie; +! int indent; /* not used */ + { + AutoPatCmd *acp = (AutoPatCmd *)cookie; + char_u *retval; +--- 9093,9103 ---- + * Called by do_cmdline() to get the next line for ":if". + * Returns allocated string, or NULL for end of autocommands. + */ + static char_u * + getnextac(c, cookie, indent) +! int c UNUSED; + void *cookie; +! int indent UNUSED; + { + AutoPatCmd *acp = (AutoPatCmd *)cookie; + char_u *retval; +*************** +*** 9201,9210 **** + * Function given to ExpandGeneric() to obtain the list of autocommand group + * names. + */ +- /*ARGSUSED*/ + char_u * + get_augroup_name(xp, idx) +! expand_T *xp; + int idx; + { + if (idx == augroups.ga_len) /* add "END" add the end */ +--- 9208,9216 ---- + * Function given to ExpandGeneric() to obtain the list of autocommand group + * names. + */ + char_u * + get_augroup_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + if (idx == augroups.ga_len) /* add "END" add the end */ +*************** +*** 9270,9279 **** + /* + * Function given to ExpandGeneric() to obtain the list of event names. + */ +- /*ARGSUSED*/ + char_u * + get_event_name(xp, idx) +! expand_T *xp; + int idx; + { + if (idx < augroups.ga_len) /* First list group names, if wanted */ +--- 9276,9284 ---- + /* + * Function given to ExpandGeneric() to obtain the list of event names. + */ + char_u * + get_event_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + if (idx < augroups.ga_len) /* First list group names, if wanted */ +*** ../vim-7.2.176/src/hardcopy.c 2008-01-12 16:46:41.000000000 +0100 +--- src/hardcopy.c 2009-05-16 17:18:27.000000000 +0200 +*************** +*** 442,453 **** + /* + * Print the page header. + */ +- /*ARGSUSED*/ + static void + prt_header(psettings, pagenum, lnum) + prt_settings_T *psettings; + int pagenum; +! linenr_T lnum; + { + int width = psettings->chars_per_line; + int page_line; +--- 442,452 ---- + /* + * Print the page header. + */ + static void + prt_header(psettings, pagenum, lnum) + prt_settings_T *psettings; + int pagenum; +! linenr_T lnum UNUSED; + { + int width = psettings->chars_per_line; + int page_line; +*************** +*** 1881,1887 **** + return FALSE; + + /* Find type of DSC comment */ +! for (comment = 0; comment < NUM_ELEMENTS(prt_dsc_table); comment++) + if (prt_resfile_strncmp(0, prt_dsc_table[comment].string, + prt_dsc_table[comment].len) == 0) + break; +--- 1880,1886 ---- + return FALSE; + + /* Find type of DSC comment */ +! for (comment = 0; comment < (int)NUM_ELEMENTS(prt_dsc_table); comment++) + if (prt_resfile_strncmp(0, prt_dsc_table[comment].string, + prt_dsc_table[comment].len) == 0) + break; +*************** +*** 2454,2465 **** + } + #endif + +- /*ARGSUSED*/ + int + mch_print_init(psettings, jobname, forceit) + prt_settings_T *psettings; + char_u *jobname; +! int forceit; + { + int i; + char *paper_name; +--- 2453,2463 ---- + } + #endif + + int + mch_print_init(psettings, jobname, forceit) + prt_settings_T *psettings; + char_u *jobname; +! int forceit UNUSED; + { + int i; + char *paper_name; +*************** +*** 2514,2520 **** + if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE))) + { + p_mbenc_first = NULL; +! for (cmap = 0; cmap < NUM_ELEMENTS(prt_ps_mbfonts); cmap++) + if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap], + &p_mbenc)) + { +--- 2512,2518 ---- + if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE))) + { + p_mbenc_first = NULL; +! for (cmap = 0; cmap < (int)NUM_ELEMENTS(prt_ps_mbfonts); cmap++) + if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap], + &p_mbenc)) + { +*************** +*** 2642,2648 **** + paper_name = "A4"; + paper_strlen = 2; + } +! for (i = 0; i < PRT_MEDIASIZE_LEN; ++i) + if (STRLEN(prt_mediasize[i].name) == (unsigned)paper_strlen + && STRNICMP(prt_mediasize[i].name, paper_name, + paper_strlen) == 0) +--- 2640,2646 ---- + paper_name = "A4"; + paper_strlen = 2; + } +! for (i = 0; i < (int)PRT_MEDIASIZE_LEN; ++i) + if (STRLEN(prt_mediasize[i].name) == (unsigned)paper_strlen + && STRNICMP(prt_mediasize[i].name, paper_name, + paper_strlen) == 0) +*************** +*** 3308,3317 **** + return !prt_file_error; + } + +- /*ARGSUSED*/ + int + mch_print_begin_page(str) +! char_u *str; + { + int page_num[2]; + +--- 3306,3314 ---- + return !prt_file_error; + } + + int + mch_print_begin_page(str) +! char_u *str UNUSED; + { + int page_num[2]; + +*************** +*** 3379,3389 **** + #endif + } + +- /*ARGSUSED*/ + int + mch_print_text_out(p, len) + char_u *p; +! int len; + { + int need_break; + char_u ch; +--- 3376,3385 ---- + #endif + } + + int + mch_print_text_out(p, len) + char_u *p; +! int len UNUSED; + { + int need_break; + char_u ch; +*** ../vim-7.2.176/src/if_cscope.c 2009-05-16 16:15:39.000000000 +0200 +--- src/if_cscope.c 2009-05-16 17:19:30.000000000 +0200 +*************** +*** 83,89 **** + N_("Reinit all connections"), "reset", 0 }, + { "show", cs_show, + N_("Show connections"), "show", 0 }, +! { NULL } + }; + + static void +--- 83,89 ---- + N_("Reinit all connections"), "reset", 0 }, + { "show", cs_show, + N_("Show connections"), "show", 0 }, +! { NULL, NULL, NULL, NULL, 0 } + }; + + static void +*************** +*** 107,116 **** + * Function given to ExpandGeneric() to obtain the cscope command + * expansion. + */ +- /*ARGSUSED*/ + char_u * + get_cscope_name(xp, idx) +! expand_T *xp; + int idx; + { + int current_idx; +--- 107,115 ---- + * Function given to ExpandGeneric() to obtain the cscope command + * expansion. + */ + char_u * + get_cscope_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + int current_idx; +*************** +*** 496,505 **** + * + * MAXPATHL 256 + */ +- /* ARGSUSED */ + static int + cs_add(eap) +! exarg_T *eap; + { + char *fname, *ppath, *flags = NULL; + +--- 495,503 ---- + * + * MAXPATHL 256 + */ + static int + cs_add(eap) +! exarg_T *eap UNUSED; + { + char *fname, *ppath, *flags = NULL; + +*************** +*** 1292,1301 **** + * + * print help + */ +- /* ARGSUSED */ + static int + cs_help(eap) +! exarg_T *eap; + { + cscmd_T *cmdp = cs_cmds; + +--- 1290,1298 ---- + * + * print help + */ + static int + cs_help(eap) +! exarg_T *eap UNUSED; + { + cscmd_T *cmdp = cs_cmds; + +*************** +*** 1399,1411 **** + * + * insert a new cscope database filename into the filelist + */ +- /*ARGSUSED*/ + static int + cs_insert_filelist(fname, ppath, flags, sb) + char *fname; + char *ppath; + char *flags; +! struct stat *sb; + { + short i, j; + #ifndef UNIX +--- 1396,1407 ---- + * + * insert a new cscope database filename into the filelist + */ + static int + cs_insert_filelist(fname, ppath, flags, sb) + char *fname; + char *ppath; + char *flags; +! struct stat *sb UNUSED; + { + short i, j; + #ifndef UNIX +*************** +*** 1561,1570 **** + * + * nuke em + */ +- /* ARGSUSED */ + static int + cs_kill(eap) +! exarg_T *eap; + { + char *stok; + short i; +--- 1557,1565 ---- + * + * nuke em + */ + static int + cs_kill(eap) +! exarg_T *eap UNUSED; + { + char *stok; + short i; +*************** +*** 2241,2247 **** + /* + * Used to catch and ignore SIGALRM below. + */ +- /* ARGSUSED */ + static RETSIGTYPE + sig_handler SIGDEFARG(sigarg) + { +--- 2236,2241 ---- +*************** +*** 2381,2390 **** + * + * calls cs_kill on all cscope connections then reinits + */ +- /* ARGSUSED */ + static int + cs_reset(eap) +! exarg_T *eap; + { + char **dblist = NULL, **pplist = NULL, **fllist = NULL; + int i; +--- 2375,2383 ---- + * + * calls cs_kill on all cscope connections then reinits + */ + static int + cs_reset(eap) +! exarg_T *eap UNUSED; + { + char **dblist = NULL, **pplist = NULL, **fllist = NULL; + int i; +*************** +*** 2497,2506 **** + * + * show all cscope connections + */ +- /* ARGSUSED */ + static int + cs_show(eap) +! exarg_T *eap; + { + short i; + if (cs_cnt_connections() == 0) +--- 2490,2498 ---- + * + * show all cscope connections + */ + static int + cs_show(eap) +! exarg_T *eap UNUSED; + { + short i; + if (cs_cnt_connections() == 0) +*** ../vim-7.2.176/src/if_xcmdsrv.c 2008-11-12 14:52:11.000000000 +0100 +--- src/if_xcmdsrv.c 2009-05-16 17:12:32.000000000 +0200 +*************** +*** 682,688 **** + * Scan all of the names out of the property. + */ + ga_init2(&ga, 1, 100); +! for (p = regProp; (p - regProp) < numItems; p++) + { + entry = p; + while (*p != 0 && !isspace(*p)) +--- 682,688 ---- + * Scan all of the names out of the property. + */ + ga_init2(&ga, 1, 100); +! for (p = regProp; (long_u)(p - regProp) < numItems; p++) + { + entry = p; + while (*p != 0 && !isspace(*p)) +*************** +*** 969,975 **** + */ + returnValue = (int_u)None; + entry = NULL; /* Not needed, but eliminates compiler warning. */ +! for (p = regProp; (p - regProp) < numItems; ) + { + entry = p; + while (*p != 0 && !isspace(*p)) +--- 969,975 ---- + */ + returnValue = (int_u)None; + entry = NULL; /* Not needed, but eliminates compiler warning. */ +! for (p = regProp; (long_u)(p - regProp) < numItems; ) + { + entry = p; + while (*p != 0 && !isspace(*p)) +*************** +*** 986,992 **** + + if (loose != NULL && returnValue == (int_u)None && !IsSerialName(name)) + { +! for (p = regProp; (p - regProp) < numItems; ) + { + entry = p; + while (*p != 0 && !isspace(*p)) +--- 986,992 ---- + + if (loose != NULL && returnValue == (int_u)None && !IsSerialName(name)) + { +! for (p = regProp; (long_u)(p - regProp) < numItems; ) + { + entry = p; + while (*p != 0 && !isspace(*p)) +*************** +*** 1056,1062 **** + return; + + /* Scan the property for the window id. */ +! for (p = regProp; (p - regProp) < numItems; ) + { + if (*p != 0) + { +--- 1056,1062 ---- + return; + + /* Scan the property for the window id. */ +! for (p = regProp; (long_u)(p - regProp) < numItems; ) + { + if (*p != 0) + { +*************** +*** 1196,1202 **** + * one time; each iteration through the outer loop handles a + * single command or result. + */ +! for (p = propInfo; (p - propInfo) < numItems; ) + { + /* + * Ignore leading NULs; each command or result starts with a +--- 1196,1202 ---- + * one time; each iteration through the outer loop handles a + * single command or result. + */ +! for (p = propInfo; (long_u)(p - propInfo) < numItems; ) + { + /* + * Ignore leading NULs; each command or result starts with a +*************** +*** 1230,1236 **** + serial = (char_u *)""; + script = NULL; + enc = NULL; +! while (p - propInfo < numItems && *p == '-') + { + switch (p[1]) + { +--- 1230,1236 ---- + serial = (char_u *)""; + script = NULL; + enc = NULL; +! while ((long_u)(p - propInfo) < numItems && *p == '-') + { + switch (p[1]) + { +*************** +*** 1333,1339 **** + res = (char_u *)""; + code = 0; + enc = NULL; +! while ((p-propInfo) < numItems && *p == '-') + { + switch (p[1]) + { +--- 1333,1339 ---- + res = (char_u *)""; + code = 0; + enc = NULL; +! while ((long_u)(p - propInfo) < numItems && *p == '-') + { + switch (p[1]) + { +*************** +*** 1401,1407 **** + gotWindow = 0; + str = (char_u *)""; + enc = NULL; +! while ((p-propInfo) < numItems && *p == '-') + { + switch (p[1]) + { +--- 1401,1407 ---- + gotWindow = 0; + str = (char_u *)""; + enc = NULL; +! while ((long_u)(p - propInfo) < numItems && *p == '-') + { + switch (p[1]) + { +*************** +*** 1489,1499 **** + /* + * Another X Error handler, just used to check for errors. + */ +- /* ARGSUSED */ + static int + x_error_check(dpy, error_event) +! Display *dpy; +! XErrorEvent *error_event; + { + got_x_error = TRUE; + return 0; +--- 1489,1498 ---- + /* + * Another X Error handler, just used to check for errors. + */ + static int + x_error_check(dpy, error_event) +! Display *dpy UNUSED; +! XErrorEvent *error_event UNUSED; + { + got_x_error = TRUE; + return 0; +*** ../vim-7.2.176/src/farsi.c 2008-06-25 00:25:17.000000000 +0200 +--- src/farsi.c 2009-05-16 17:14:41.000000000 +0200 +*************** +*** 103,109 **** + case F_HE: + tempc = _HE; + +! if (p_ri && (curwin->w_cursor.col+1 < STRLEN(ml_get_curline()))) + { + inc_cursor(); + +--- 103,110 ---- + case F_HE: + tempc = _HE; + +! if (p_ri && (curwin->w_cursor.col + 1 +! < (colnr_T)STRLEN(ml_get_curline()))) + { + inc_cursor(); + +*************** +*** 344,350 **** + if (curwin->w_p_rl && p_ri) + return; + +! if ( (curwin->w_cursor.col < STRLEN(ml_get_curline()))) + { + if ((p_ri && curwin->w_cursor.col) || !p_ri) + { +--- 345,351 ---- + if (curwin->w_p_rl && p_ri) + return; + +! if ((curwin->w_cursor.col < (colnr_T)STRLEN(ml_get_curline()))) + { + if ((p_ri && curwin->w_cursor.col) || !p_ri) + { +*************** +*** 565,571 **** + + tempc = gchar_cursor(); + +! if (curwin->w_cursor.col+1 < STRLEN(ml_get_curline())) + { + inc_cursor(); + +--- 566,572 ---- + + tempc = gchar_cursor(); + +! if (curwin->w_cursor.col + 1 < (colnr_T)STRLEN(ml_get_curline())) + { + inc_cursor(); + +*************** +*** 594,601 **** + { + int tempc; + +! if (!curwin->w_cursor.col && +! (curwin->w_cursor.col+1 == STRLEN(ml_get_curline()))) + return; + + if (!curwin->w_cursor.col && p_ri) +--- 595,602 ---- + { + int tempc; + +! if (curwin->w_cursor.col != 0 && +! (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) + return; + + if (!curwin->w_cursor.col && p_ri) +*************** +*** 663,670 **** + { + int tempc; + +! if (!curwin->w_cursor.col && +! (curwin->w_cursor.col+1 == STRLEN(ml_get_curline()))) + return; + + if (!curwin->w_cursor.col && p_ri) +--- 664,671 ---- + { + int tempc; + +! if (curwin->w_cursor.col != 0 && +! (curwin->w_cursor.col + 1 == (colnr_T)STRLEN(ml_get_curline()))) + return; + + if (!curwin->w_cursor.col && p_ri) +*** ../vim-7.2.176/src/mark.c 2009-04-29 11:00:09.000000000 +0200 +--- src/mark.c 2009-05-16 17:14:56.000000000 +0200 +*************** +*** 884,893 **** + /* + * print the jumplist + */ +- /*ARGSUSED*/ + void + ex_jumps(eap) +! exarg_T *eap; + { + int i; + char_u *name; +--- 884,892 ---- + /* + * print the jumplist + */ + void + ex_jumps(eap) +! exarg_T *eap UNUSED; + { + int i; + char_u *name; +*************** +*** 933,942 **** + /* + * print the changelist + */ +- /*ARGSUSED*/ + void + ex_changes(eap) +! exarg_T *eap; + { + int i; + char_u *name; +--- 932,940 ---- + /* + * print the changelist + */ + void + ex_changes(eap) +! exarg_T *eap UNUSED; + { + int i; + char_u *name; +*** ../vim-7.2.176/src/menu.c 2008-08-17 23:43:53.000000000 +0200 +--- src/menu.c 2009-05-16 17:19:57.000000000 +0200 +*************** +*** 231,237 **** + if (skipdigits(menu_path + 7) == p) + { + menuarg.iconidx = atoi((char *)menu_path + 7); +! if (menuarg.iconidx >= TOOLBAR_NAME_COUNT) + menuarg.iconidx = -1; + else + menuarg.icon_builtin = TRUE; +--- 231,237 ---- + if (skipdigits(menu_path + 7) == p) + { + menuarg.iconidx = atoi((char *)menu_path + 7); +! if (menuarg.iconidx >= (int)TOOLBAR_NAME_COUNT) + menuarg.iconidx = -1; + else + menuarg.icon_builtin = TRUE; +*************** +*** 239,245 **** + } + else + { +! for (i = 0; i < TOOLBAR_NAME_COUNT; ++i) + if (STRNCMP(toolbar_names[i], menu_path, p - menu_path) + == 0) + { +--- 239,245 ---- + } + else + { +! for (i = 0; i < (int)TOOLBAR_NAME_COUNT; ++i) + if (STRNCMP(toolbar_names[i], menu_path, p - menu_path) + == 0) + { +*************** +*** 1341,1350 **** + * Function given to ExpandGeneric() to obtain the list of (sub)menus (not + * entries). + */ +- /*ARGSUSED*/ + char_u * + get_menu_name(xp, idx) +! expand_T *xp; + int idx; + { + static vimmenu_T *menu = NULL; +--- 1341,1349 ---- + * Function given to ExpandGeneric() to obtain the list of (sub)menus (not + * entries). + */ + char_u * + get_menu_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + static vimmenu_T *menu = NULL; +*************** +*** 1378,1387 **** + * Function given to ExpandGeneric() to obtain the list of menus and menu + * entries. + */ +- /*ARGSUSED*/ + char_u * + get_menu_names(xp, idx) +! expand_T *xp; + int idx; + { + static vimmenu_T *menu = NULL; +--- 1377,1385 ---- + * Function given to ExpandGeneric() to obtain the list of menus and menu + * entries. + */ + char_u * + get_menu_names(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + static vimmenu_T *menu = NULL; +*************** +*** 1739,1748 **** + /* + * Return TRUE if the menu is the tearoff menu. + */ +- /*ARGSUSED*/ + static int + menu_is_tearoff(name) +! char_u *name; + { + #ifdef FEAT_GUI + return (STRCMP(name, TEAR_STRING) == 0); +--- 1737,1745 ---- + /* + * Return TRUE if the menu is the tearoff menu. + */ + static int + menu_is_tearoff(name) +! char_u *name UNUSED; + { + #ifdef FEAT_GUI + return (STRCMP(name, TEAR_STRING) == 0); +*** ../vim-7.2.176/src/version.c 2009-05-16 16:36:25.000000000 +0200 +--- src/version.c 2009-05-16 17:22:08.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 177, + /**/ + +-- +(letter from Mark to Mike, about the film's probable certificate) + For an 'A' we would have to: Lose as many shits as possible; Take Jesus + Christ out, if possible; Loose "I fart in your general direction"; Lose + "the oral sex"; Lose "oh, fuck off"; Lose "We make castanets out of your + testicles" + "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/7.2.178 b/7.2.178 new file mode 100644 index 00000000..84fe670f --- /dev/null +++ b/7.2.178 @@ -0,0 +1,150 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.178 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.178 +Problem: Using negative value for device number might not work. +Solution: Use a separate flag for whether ffv_dev was set. +Files: src/misc2.c + + +*** ../vim-7.2.177/src/misc2.c 2009-04-29 11:00:09.000000000 +0200 +--- src/misc2.c 2009-05-16 21:05:10.000000000 +0200 +*************** +*** 2841,2847 **** + get_key_name(i) + int i; + { +! if (i >= KEY_NAMES_TABLE_LEN) + return NULL; + return key_names_table[i].name; + } +--- 2841,2847 ---- + get_key_name(i) + int i; + { +! if (i >= (int)KEY_NAMES_TABLE_LEN) + return NULL; + return key_names_table[i].name; + } +*************** +*** 3869,3875 **** + * use filename. + */ + #ifdef UNIX +! int ffv_dev; /* device number (-1 if not set) */ + ino_t ffv_ino; /* inode number */ + #endif + /* The memory for this struct is allocated according to the length of +--- 3869,3876 ---- + * use filename. + */ + #ifdef UNIX +! int ffv_dev_valid; /* ffv_dev and ffv_ino were set */ +! dev_t ffv_dev; /* device number */ + ino_t ffv_ino; /* inode number */ + #endif + /* The memory for this struct is allocated according to the length of +*************** +*** 4059,4071 **** + * This function silently ignores a few errors, vim_findfile() will have + * limited functionality then. + */ +- /*ARGSUSED*/ + void * + vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what, + search_ctx_arg, tagfile, rel_fname) + char_u *path; + char_u *filename; +! char_u *stopdirs; + int level; + int free_visited; + int find_what; +--- 4060,4071 ---- + * This function silently ignores a few errors, vim_findfile() will have + * limited functionality then. + */ + void * + vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what, + search_ctx_arg, tagfile, rel_fname) + char_u *path; + char_u *filename; +! char_u *stopdirs UNUSED; + int level; + int free_visited; + int find_what; +*************** +*** 5063,5072 **** + { + if ( + #ifdef UNIX +! !url +! ? (vp->ffv_dev == st.st_dev +! && vp->ffv_ino == st.st_ino) +! : + #endif + fnamecmp(vp->ffv_fname, ff_expand_buffer) == 0 + ) +--- 5063,5071 ---- + { + if ( + #ifdef UNIX +! !url ? (vp->ffv_dev_valid && vp->ffv_dev == st.st_dev +! && vp->ffv_ino == st.st_ino) +! : + #endif + fnamecmp(vp->ffv_fname, ff_expand_buffer) == 0 + ) +*************** +*** 5091,5104 **** + #ifdef UNIX + if (!url) + { + vp->ffv_ino = st.st_ino; + vp->ffv_dev = st.st_dev; + vp->ffv_fname[0] = NUL; + } + else + { +! vp->ffv_ino = 0; +! vp->ffv_dev = -1; + #endif + STRCPY(vp->ffv_fname, ff_expand_buffer); + #ifdef UNIX +--- 5090,5103 ---- + #ifdef UNIX + if (!url) + { ++ vp->ffv_dev_valid = TRUE; + vp->ffv_ino = st.st_ino; + vp->ffv_dev = st.st_dev; + vp->ffv_fname[0] = NUL; + } + else + { +! vp->ffv_dev_valid = FALSE; + #endif + STRCPY(vp->ffv_fname, ff_expand_buffer); + #ifdef UNIX +*** ../vim-7.2.177/src/version.c 2009-05-16 17:29:37.000000000 +0200 +--- src/version.c 2009-05-16 21:00:15.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 178, + /**/ + +-- +FATAL ERROR! SYSTEM HALTED! - Press any key to continue doing nothing. + + /// 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/7.2.179 b/7.2.179 new file mode 100644 index 00000000..97f94ed1 --- /dev/null +++ b/7.2.179 @@ -0,0 +1,100 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.179 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.179 +Problem: Using negative value for device number might not work. +Solution: Use a separate flag for whether sn_dev was set. +Files: src/ex_cmds2.c + + +*** ../vim-7.2.178/src/ex_cmds2.c 2009-05-14 22:19:19.000000000 +0200 +--- src/ex_cmds2.c 2009-05-16 21:13:29.000000000 +0200 +*************** +*** 28,34 **** + { + char_u *sn_name; + # ifdef UNIX +! int sn_dev; + ino_t sn_ino; + # endif + # ifdef FEAT_PROFILE +--- 28,35 ---- + { + char_u *sn_name; + # ifdef UNIX +! int sn_dev_valid; +! dev_t sn_dev; + ino_t sn_ino; + # endif + # ifdef FEAT_PROFILE +*************** +*** 3049,3055 **** + /* Compare dev/ino when possible, it catches symbolic + * links. Also compare file names, the inode may change + * when the file was edited. */ +! ((stat_ok && si->sn_dev != -1) + && (si->sn_dev == st.st_dev + && si->sn_ino == st.st_ino)) || + # endif +--- 3050,3056 ---- + /* Compare dev/ino when possible, it catches symbolic + * links. Also compare file names, the inode may change + * when the file was edited. */ +! ((stat_ok && si->sn_dev_valid) + && (si->sn_dev == st.st_dev + && si->sn_ino == st.st_ino)) || + # endif +*************** +*** 3076,3086 **** + # ifdef UNIX + if (stat_ok) + { + si->sn_dev = st.st_dev; + si->sn_ino = st.st_ino; + } + else +! si->sn_dev = -1; + # endif + + /* Allocate the local script variables to use for this script. */ +--- 3077,3088 ---- + # ifdef UNIX + if (stat_ok) + { ++ si->sn_dev_valid = TRUE; + si->sn_dev = st.st_dev; + si->sn_ino = st.st_ino; + } + else +! si->sn_dev_valid = FALSE; + # endif + + /* Allocate the local script variables to use for this script. */ +*** ../vim-7.2.178/src/version.c 2009-05-16 21:06:36.000000000 +0200 +--- src/version.c 2009-05-16 21:15:08.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 179, + /**/ + +-- +(letter from Mark to Mike, about the film's probable certificate) + I would like to get back to the Censor and agree to lose the shits, take + the odd Jesus Christ out and lose Oh fuck off, but to retain 'fart in + your general direction', 'castanets of your testicles' and 'oral sex' + and ask him for an 'A' rating on that basis. + "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/7.2.180 b/7.2.180 new file mode 100644 index 00000000..f3f3a9ed --- /dev/null +++ b/7.2.180 @@ -0,0 +1,6520 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.180 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.180 +Problem: Some more compiler warnings when using gcc -Wextra. +Solution: Add UNUSED and type casts. +Files: src/buffer.c, src/ex_cmds.c, src/macros.h, src/main.c, + src/menu.c, src/message.c, src/misc1.c, src/mbyte.c, + src/normal.c, src/option.c, src/os_unix.c, src/quickfix.c, + src/screen.c, src/search.c, src/spell.c, src/syntax.c, src/tag.c, + src/term.c, src/ui.c + + +*** ../vim-7.2.179/src/buffer.c 2009-05-14 22:19:19.000000000 +0200 +--- src/buffer.c 2009-05-16 22:21:41.000000000 +0200 +*************** +*** 2025,2037 **** + * Return fnum of the found buffer. + * Return < 0 for error. + */ +- /*ARGSUSED*/ + int + buflist_findpat(pattern, pattern_end, unlisted, diffmode) + char_u *pattern; + char_u *pattern_end; /* pointer to first char after pattern */ + int unlisted; /* find unlisted buffers */ +! int diffmode; /* find diff-mode buffers only */ + { + buf_T *buf; + regprog_T *prog; +--- 2025,2036 ---- + * Return fnum of the found buffer. + * Return < 0 for error. + */ + int + buflist_findpat(pattern, pattern_end, unlisted, diffmode) + char_u *pattern; + char_u *pattern_end; /* pointer to first char after pattern */ + int unlisted; /* find unlisted buffers */ +! int diffmode UNUSED; /* find diff-mode buffers only */ + { + buf_T *buf; + regprog_T *prog; +*************** +*** 2539,2545 **** + /* + * List all know file names (for :files and :buffers command). + */ +- /*ARGSUSED*/ + void + buflist_list(eap) + exarg_T *eap; +--- 2538,2543 ---- +*************** +*** 3346,3359 **** + * If maxwidth is not zero, the string will be filled at any middle marker + * or truncated if too long, fillchar is used for all whitespace. + */ +- /*ARGSUSED*/ + int + build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab) + win_T *wp; + char_u *out; /* buffer to write into != NameBuff */ + size_t outlen; /* length of out[] */ + char_u *fmt; +! int use_sandbox; /* "fmt" was set insecurely, use sandbox */ + int fillchar; + int maxwidth; + struct stl_hlrec *hltab; /* return: HL attributes (can be NULL) */ +--- 3344,3356 ---- + * If maxwidth is not zero, the string will be filled at any middle marker + * or truncated if too long, fillchar is used for all whitespace. + */ + int + build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab) + win_T *wp; + char_u *out; /* buffer to write into != NameBuff */ + size_t outlen; /* length of out[] */ + char_u *fmt; +! int use_sandbox UNUSED; /* "fmt" was set insecurely, use sandbox */ + int fillchar; + int maxwidth; + struct stl_hlrec *hltab; /* return: HL attributes (can be NULL) */ +*** ../vim-7.2.179/src/ex_cmds.c 2009-05-16 16:36:25.000000000 +0200 +--- src/ex_cmds.c 2009-05-16 22:22:46.000000000 +0200 +*************** +*** 2255,2266 **** + * + * Return the string in allocated memory (NULL when out of memory). + */ +- /*ARGSUSED*/ + char_u * + viminfo_readstring(virp, off, convert) + vir_T *virp; + int off; /* offset for virp->vir_line */ +! int convert; /* convert the string */ + { + char_u *retval; + char_u *s, *d; +--- 2255,2265 ---- + * + * Return the string in allocated memory (NULL when out of memory). + */ + char_u * + viminfo_readstring(virp, off, convert) + vir_T *virp; + int off; /* offset for virp->vir_line */ +! int convert UNUSED; /* convert the string */ + { + char_u *retval; + char_u *s, *d; +*************** +*** 2736,2742 **** + * May set eap->forceit if a dialog says it's OK to overwrite. + * Return OK if it's OK, FAIL if it is not. + */ +- /*ARGSUSED*/ + static int + check_overwrite(eap, buf, fname, ffname, other) + exarg_T *eap; +--- 2735,2740 ---- +*** ../vim-7.2.179/src/macros.h 2009-02-21 20:27:00.000000000 +0100 +--- src/macros.h 2009-05-16 21:52:56.000000000 +0200 +*************** +*** 284,290 **** + # define mb_cptr2len(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p)) + + # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++ +! # define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : STRLEN(p)) + # define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p)) + #else + # define mb_ptr_adv(p) ++p +--- 284,290 ---- + # define mb_cptr2len(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p)) + + # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++ +! # define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : (int)STRLEN(p)) + # define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p)) + #else + # define mb_ptr_adv(p) ++p +*** ../vim-7.2.179/src/main.c 2008-11-28 21:26:50.000000000 +0100 +--- src/main.c 2009-05-16 22:25:59.000000000 +0200 +*************** +*** 1505,1514 **** + * + * Also find the --server... arguments and --socketid and --windowid + */ +- /*ARGSUSED*/ + static void + early_arg_scan(parmp) +! mparm_T *parmp; + { + #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \ + || !defined(FEAT_NETBEANS_INTG) +--- 1505,1513 ---- + * + * Also find the --server... arguments and --socketid and --windowid + */ + static void + early_arg_scan(parmp) +! mparm_T *parmp UNUSED; + { + #if defined(FEAT_XCLIPBOARD) || defined(FEAT_CLIENTSERVER) \ + || !defined(FEAT_NETBEANS_INTG) +*************** +*** 2380,2389 **** + * Create the requested number of windows and edit buffers in them. + * Also does recovery if "recoverymode" set. + */ +- /*ARGSUSED*/ + static void + create_windows(parmp) +! mparm_T *parmp; + { + #ifdef FEAT_WINDOWS + int dorewind; +--- 2379,2387 ---- + * Create the requested number of windows and edit buffers in them. + * Also does recovery if "recoverymode" set. + */ + static void + create_windows(parmp) +! mparm_T *parmp UNUSED; + { + #ifdef FEAT_WINDOWS + int dorewind; +*************** +*** 3851,3860 **** + * return an allocated string. Otherwise return "data". + * "*tofree" is set to the result when it needs to be freed later. + */ +- /*ARGSUSED*/ + char_u * + serverConvert(client_enc, data, tofree) +! char_u *client_enc; + char_u *data; + char_u **tofree; + { +--- 3849,3857 ---- + * return an allocated string. Otherwise return "data". + * "*tofree" is set to the result when it needs to be freed later. + */ + char_u * + serverConvert(client_enc, data, tofree) +! char_u *client_enc UNUSED; + char_u *data; + char_u **tofree; + { +*** ../vim-7.2.179/src/menu.c 2009-05-16 17:29:37.000000000 +0200 +--- src/menu.c 2009-05-16 22:29:31.000000000 +0200 +*************** +*** 2340,2349 **** + * This function is also defined without the +multi_lang feature, in which + * case the commands are ignored. + */ +- /*ARGSUSED*/ + void + ex_menutranslate(eap) +! exarg_T *eap; + { + #ifdef FEAT_MULTI_LANG + char_u *arg = eap->arg; +--- 2340,2348 ---- + * This function is also defined without the +multi_lang feature, in which + * case the commands are ignored. + */ + void + ex_menutranslate(eap) +! exarg_T *eap UNUSED; + { + #ifdef FEAT_MULTI_LANG + char_u *arg = eap->arg; +*** ../vim-7.2.179/src/message.c 2009-04-22 14:42:26.000000000 +0200 +--- src/message.c 2009-05-16 22:30:47.000000000 +0200 +*************** +*** 818,827 **** + /* + * ":messages" command. + */ +- /*ARGSUSED*/ + void + ex_messages(eap) +! exarg_T *eap; + { + struct msg_hist *p; + char_u *s; +--- 818,826 ---- + /* + * ":messages" command. + */ + void + ex_messages(eap) +! exarg_T *eap UNUSED; + { + struct msg_hist *p; + char_u *s; +*************** +*** 3290,3304 **** + * A '&' in a button name becomes a shortcut, so each '&' should be before a + * different letter. + */ +- /* ARGSUSED */ + int + do_dialog(type, title, message, buttons, dfltbutton, textfield) +! int type; +! char_u *title; + char_u *message; + char_u *buttons; + int dfltbutton; +! char_u *textfield; /* IObuff for inputdialog(), NULL otherwise */ + { + int oldState; + int retval = 0; +--- 3289,3303 ---- + * A '&' in a button name becomes a shortcut, so each '&' should be before a + * different letter. + */ + int + do_dialog(type, title, message, buttons, dfltbutton, textfield) +! int type UNUSED; +! char_u *title UNUSED; + char_u *message; + char_u *buttons; + int dfltbutton; +! char_u *textfield UNUSED; /* IObuff for inputdialog(), NULL +! otherwise */ + { + int oldState; + int retval = 0; +*************** +*** 4021,4027 **** + if (*p != '%') + { + char *q = strchr(p + 1, '%'); +! size_t n = (q == NULL) ? STRLEN(p) : (q - p); + + /* Copy up to the next '%' or NUL without any changes. */ + if (str_l < str_m) +--- 4020,4026 ---- + if (*p != '%') + { + char *q = strchr(p + 1, '%'); +! size_t n = (q == NULL) ? STRLEN(p) : (size_t)(q - p); + + /* Copy up to the next '%' or NUL without any changes. */ + if (str_l < str_m) +*************** +*** 4268,4274 **** + precision <= (size_t)0x7fffffffL ? precision + : (size_t)0x7fffffffL); + #endif +! str_arg_l = (q == NULL) ? precision : q - str_arg; + } + break; + +--- 4267,4274 ---- + precision <= (size_t)0x7fffffffL ? precision + : (size_t)0x7fffffffL); + #endif +! str_arg_l = (q == NULL) ? precision +! : (size_t)(q - str_arg); + } + break; + +*************** +*** 4368,4374 **** + get_a_arg(arg_idx); + #else + # if defined(FEAT_EVAL) +! tvs != NULL ? tv_nr(tvs, &arg_idx) : + # endif + va_arg(ap, unsigned int); + #endif +--- 4368,4375 ---- + get_a_arg(arg_idx); + #else + # if defined(FEAT_EVAL) +! tvs != NULL ? (unsigned) +! tv_nr(tvs, &arg_idx) : + # endif + va_arg(ap, unsigned int); + #endif +*************** +*** 4381,4387 **** + get_a_arg(arg_idx); + #else + # if defined(FEAT_EVAL) +! tvs != NULL ? tv_nr(tvs, &arg_idx) : + # endif + va_arg(ap, unsigned long int); + #endif +--- 4382,4389 ---- + get_a_arg(arg_idx); + #else + # if defined(FEAT_EVAL) +! tvs != NULL ? (unsigned long) +! tv_nr(tvs, &arg_idx) : + # endif + va_arg(ap, unsigned long int); + #endif +*************** +*** 4704,4710 **** + size_t avail = str_m - str_l; + + vim_memset(str + str_l, zero_padding ? '0' : ' ', +! (size_t)pn > avail ? avail : pn); + } + str_l += pn; + } +--- 4706,4713 ---- + size_t avail = str_m - str_l; + + vim_memset(str + str_l, zero_padding ? '0' : ' ', +! (size_t)pn > avail ? avail +! : (size_t)pn); + } + str_l += pn; + } +*************** +*** 4731,4737 **** + size_t avail = str_m - str_l; + + mch_memmove(str + str_l, str_arg, +! (size_t)zn > avail ? avail : zn); + } + str_l += zn; + } +--- 4734,4741 ---- + size_t avail = str_m - str_l; + + mch_memmove(str + str_l, str_arg, +! (size_t)zn > avail ? avail +! : (size_t)zn); + } + str_l += zn; + } +*************** +*** 4746,4752 **** + size_t avail = str_m-str_l; + + vim_memset(str + str_l, '0', +! (size_t)zn > avail ? avail : zn); + } + str_l += zn; + } +--- 4750,4757 ---- + size_t avail = str_m-str_l; + + vim_memset(str + str_l, '0', +! (size_t)zn > avail ? avail +! : (size_t)zn); + } + str_l += zn; + } +*************** +*** 4765,4771 **** + + mch_memmove(str + str_l, + str_arg + zero_padding_insertion_ind, +! (size_t)sn > avail ? avail : sn); + } + str_l += sn; + } +--- 4770,4776 ---- + + mch_memmove(str + str_l, + str_arg + zero_padding_insertion_ind, +! (size_t)sn > avail ? avail : (size_t)sn); + } + str_l += sn; + } +*************** +*** 4785,4791 **** + size_t avail = str_m - str_l; + + vim_memset(str + str_l, ' ', +! (size_t)pn > avail ? avail : pn); + } + str_l += pn; + } +--- 4790,4797 ---- + size_t avail = str_m - str_l; + + vim_memset(str + str_l, ' ', +! (size_t)pn > avail ? avail +! : (size_t)pn); + } + str_l += pn; + } +*** ../vim-7.2.179/src/misc1.c 2009-05-15 21:31:11.000000000 +0200 +--- src/misc1.c 2009-05-16 21:25:34.000000000 +0200 +*************** +*** 4147,4156 **** + /* + * Function given to ExpandGeneric() to obtain an environment variable name. + */ +- /*ARGSUSED*/ + char_u * + get_env_name(xp, idx) +! expand_T *xp; + int idx; + { + # if defined(AMIGA) || defined(__MRC__) || defined(__SC__) +--- 4147,4155 ---- + /* + * Function given to ExpandGeneric() to obtain an environment variable name. + */ + char_u * + get_env_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + # if defined(AMIGA) || defined(__MRC__) || defined(__SC__) +*************** +*** 4742,4750 **** + * If it is then restrict the search to below this line and try again. + */ + line = ml_get(pos->lnum); +! for (p = line; *p && (unsigned)(p - line) < pos->col; ++p) + p = skip_string(p); +! if ((unsigned)(p - line) <= pos->col) + break; + cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1; + if (cur_maxcomment <= 0) +--- 4741,4749 ---- + * If it is then restrict the search to below this line and try again. + */ + line = ml_get(pos->lnum); +! for (p = line; *p && (colnr_T)(p - line) < pos->col; ++p) + p = skip_string(p); +! if ((colnr_T)(p - line) <= pos->col) + break; + cur_maxcomment = curwin->w_cursor.lnum - pos->lnum - 1; + if (cur_maxcomment <= 0) +*************** +*** 6275,6281 **** + * check for that. + */ + if ((State & INSERT) +! && curwin->w_cursor.col < STRLEN(linecopy) + && linecopy[curwin->w_cursor.col] == ')') + linecopy[curwin->w_cursor.col] = NUL; + +--- 6274,6280 ---- + * check for that. + */ + if ((State & INSERT) +! && curwin->w_cursor.col < (colnr_T)STRLEN(linecopy) + && linecopy[curwin->w_cursor.col] == ')') + linecopy[curwin->w_cursor.col] = NUL; + +*** ../vim-7.2.179/src/mbyte.c 2008-11-28 21:26:50.000000000 +0100 +--- src/mbyte.c 2009-05-16 22:29:02.000000000 +0200 +*************** +*** 1015,1024 **** + * Return length in bytes of character "c". + * Returns 1 for a single-byte character. + */ +- /* ARGSUSED */ + int + latin_char2len(c) +! int c; + { + return 1; + } +--- 1015,1023 ---- + * Return length in bytes of character "c". + * Returns 1 for a single-byte character. + */ + int + latin_char2len(c) +! int c UNUSED; + { + return 1; + } +*************** +*** 1248,1257 **** + * Return the number of display cells character at "*p" occupies. + * This doesn't take care of unprintable characters, use ptr2cells() for that. + */ +- /*ARGSUSED*/ + int + latin_ptr2cells(p) +! char_u *p; + { + return 1; + } +--- 1247,1255 ---- + * Return the number of display cells character at "*p" occupies. + * This doesn't take care of unprintable characters, use ptr2cells() for that. + */ + int + latin_ptr2cells(p) +! char_u *p UNUSED; + { + return 1; + } +*************** +*** 1293,1302 **** + * Return the number of display cells character "c" occupies. + * Only takes care of multi-byte chars, not "^C" and such. + */ +- /*ARGSUSED*/ + int + latin_char2cells(c) +! int c; + { + return 1; + } +--- 1291,1299 ---- + * Return the number of display cells character "c" occupies. + * Only takes care of multi-byte chars, not "^C" and such. + */ + int + latin_char2cells(c) +! int c UNUSED; + { + return 1; + } +*************** +*** 1318,1328 **** + * Return number of display cells for char at ScreenLines[off]. + * We make sure that the offset used is less than "max_off". + */ +- /*ARGSUSED*/ + int + latin_off2cells(off, max_off) +! unsigned off; +! unsigned max_off; + { + return 1; + } +--- 1315,1324 ---- + * Return number of display cells for char at ScreenLines[off]. + * We make sure that the offset used is less than "max_off". + */ + int + latin_off2cells(off, max_off) +! unsigned off UNUSED; +! unsigned max_off UNUSED; + { + return 1; + } +*************** +*** 2419,2429 **** + * Return offset from "p" to the first byte of the character it points into. + * Returns 0 when already at the first byte of a character. + */ +- /*ARGSUSED*/ + int + latin_head_off(base, p) +! char_u *base; +! char_u *p; + { + return 0; + } +--- 2415,2424 ---- + * Return offset from "p" to the first byte of the character it points into. + * Returns 0 when already at the first byte of a character. + */ + int + latin_head_off(base, p) +! char_u *base UNUSED; +! char_u *p UNUSED; + { + return 0; + } +*************** +*** 3131,3137 **** + else + s = p + 1; + } +! for (i = 0; s[i] != NUL && i < sizeof(buf) - 1; ++i) + { + if (s[i] == '_' || s[i] == '-') + buf[i] = '-'; +--- 3126,3132 ---- + else + s = p + 1; + } +! for (i = 0; s[i] != NUL && i < (int)sizeof(buf) - 1; ++i) + { + if (s[i] == '_' || s[i] == '-') + buf[i] = '-'; +*************** +*** 3582,3590 **** + * Callback invoked when the user finished preediting. + * Put the final string into the input buffer. + */ +- /*ARGSUSED0*/ + static void +! im_commit_cb(GtkIMContext *context, const gchar *str, gpointer data) + { + int slen = (int)STRLEN(str); + int add_to_input = TRUE; +--- 3577,3586 ---- + * Callback invoked when the user finished preediting. + * Put the final string into the input buffer. + */ + static void +! im_commit_cb(GtkIMContext *context UNUSED, +! const gchar *str, +! gpointer data UNUSED) + { + int slen = (int)STRLEN(str); + int add_to_input = TRUE; +*************** +*** 3670,3678 **** + /* + * Callback invoked after start to the preedit. + */ +- /*ARGSUSED*/ + static void +! im_preedit_start_cb(GtkIMContext *context, gpointer data) + { + #ifdef XIM_DEBUG + xim_log("im_preedit_start_cb()\n"); +--- 3666,3673 ---- + /* + * Callback invoked after start to the preedit. + */ + static void +! im_preedit_start_cb(GtkIMContext *context UNUSED, gpointer data UNUSED) + { + #ifdef XIM_DEBUG + xim_log("im_preedit_start_cb()\n"); +*************** +*** 3687,3695 **** + /* + * Callback invoked after end to the preedit. + */ +- /*ARGSUSED*/ + static void +! im_preedit_end_cb(GtkIMContext *context, gpointer data) + { + #ifdef XIM_DEBUG + xim_log("im_preedit_end_cb()\n"); +--- 3682,3689 ---- + /* + * Callback invoked after end to the preedit. + */ + static void +! im_preedit_end_cb(GtkIMContext *context UNUSED, gpointer data UNUSED) + { + #ifdef XIM_DEBUG + xim_log("im_preedit_end_cb()\n"); +*************** +*** 3748,3756 **** + * remaining input from within the "retrieve_surrounding" signal handler, this + * might not be necessary. Gotta ask on vim-dev for opinions. + */ +- /*ARGSUSED1*/ + static void +! im_preedit_changed_cb(GtkIMContext *context, gpointer data) + { + char *preedit_string = NULL; + int cursor_index = 0; +--- 3742,3749 ---- + * remaining input from within the "retrieve_surrounding" signal handler, this + * might not be necessary. Gotta ask on vim-dev for opinions. + */ + static void +! im_preedit_changed_cb(GtkIMContext *context, gpointer data UNUSED) + { + char *preedit_string = NULL; + int cursor_index = 0; +*************** +*** 4616,4626 **** + } + } + +- /*ARGSUSED*/ + void + im_set_position(row, col) +! int row; +! int col; + { + xim_set_preedit(); + } +--- 4609,4618 ---- + } + } + + void + im_set_position(row, col) +! int row UNUSED; +! int col UNUSED; + { + xim_set_preedit(); + } +*************** +*** 4927,4938 **** + static void xim_instantiate_cb __ARGS((Display *display, XPointer client_data, XPointer call_data)); + static void xim_destroy_cb __ARGS((XIM im, XPointer client_data, XPointer call_data)); + +- /*ARGSUSED*/ + static void + xim_instantiate_cb(display, client_data, call_data) + Display *display; +! XPointer client_data; +! XPointer call_data; + { + Window x11_window; + Display *x11_display; +--- 4919,4929 ---- + static void xim_instantiate_cb __ARGS((Display *display, XPointer client_data, XPointer call_data)); + static void xim_destroy_cb __ARGS((XIM im, XPointer client_data, XPointer call_data)); + + static void + xim_instantiate_cb(display, client_data, call_data) + Display *display; +! XPointer client_data UNUSED; +! XPointer call_data UNUSED; + { + Window x11_window; + Display *x11_display; +*************** +*** 4952,4963 **** + xim_instantiate_cb, NULL); + } + +- /*ARGSUSED*/ + static void + xim_destroy_cb(im, client_data, call_data) +! XIM im; +! XPointer client_data; +! XPointer call_data; + { + Window x11_window; + Display *x11_display; +--- 4943,4953 ---- + xim_instantiate_cb, NULL); + } + + static void + xim_destroy_cb(im, client_data, call_data) +! XIM im UNUSED; +! XPointer client_data UNUSED; +! XPointer call_data UNUSED; + { + Window x11_window; + Display *x11_display; +*************** +*** 5276,5284 **** + } + } + +- /*ARGSUSED*/ + static void +! preedit_start_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("xim_decide_input_style()\n"); +--- 5266,5275 ---- + } + } + + static void +! preedit_start_cbproc(XIC thexic UNUSED, +! XPointer client_data UNUSED, +! XPointer call_data UNUSED) + { + #ifdef XIM_DEBUG + xim_log("xim_decide_input_style()\n"); +*************** +*** 5310,5318 **** + static GSList *key_press_event_queue = NULL; + static gboolean processing_queued_event = FALSE; + +- /*ARGSUSED*/ + static void +! preedit_draw_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + XIMPreeditDrawCallbackStruct *draw_data; + XIMText *text; +--- 5301,5310 ---- + static GSList *key_press_event_queue = NULL; + static gboolean processing_queued_event = FALSE; + + static void +! preedit_draw_cbproc(XIC thexic UNUSED, +! XPointer client_data UNUSED, +! XPointer call_data) + { + XIMPreeditDrawCallbackStruct *draw_data; + XIMText *text; +*************** +*** 5451,5468 **** + return -1; + } + +- /*ARGSUSED*/ + static void +! preedit_caret_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("preedit_caret_cbproc()\n"); + #endif + } + +- /*ARGSUSED*/ + static void +! preedit_done_cbproc(XIC thexic, XPointer client_data, XPointer call_data) + { + #ifdef XIM_DEBUG + xim_log("preedit_done_cbproc()\n"); +--- 5443,5462 ---- + return -1; + } + + static void +! preedit_caret_cbproc(XIC thexic UNUSED, +! XPointer client_data UNUSED, +! XPointer call_data UNUSED) + { + #ifdef XIM_DEBUG + xim_log("preedit_caret_cbproc()\n"); + #endif + } + + static void +! preedit_done_cbproc(XIC thexic UNUSED, +! XPointer client_data UNUSED, +! XPointer call_data UNUSED) + { + #ifdef XIM_DEBUG + xim_log("preedit_done_cbproc()\n"); +*************** +*** 5501,5509 **** + } + } + +- /*ARGSUSED*/ + int +! xim_queue_key_press_event(GdkEventKey *event, int down) + { + #ifdef XIM_DEBUG + xim_log("xim_queue_key_press_event()\n"); +--- 5495,5502 ---- + } + } + + int +! xim_queue_key_press_event(GdkEventKey *event, int down UNUSED) + { + #ifdef XIM_DEBUG + xim_log("xim_queue_key_press_event()\n"); +*************** +*** 5519,5527 **** + return TRUE; + } + +- /*ARGSUSED*/ + static void +! preedit_callback_setup(GdkIC *ic) + { + XIC xxic; + XVaNestedList preedit_attr; +--- 5512,5519 ---- + return TRUE; + } + + static void +! preedit_callback_setup(GdkIC *ic UNUSED) + { + XIC xxic; + XVaNestedList preedit_attr; +*************** +*** 5546,5554 **** + XFree(preedit_attr); + } + +- /*ARGSUSED*/ + static void +! reset_state_setup(GdkIC *ic) + { + #ifdef USE_X11R6_XIM + /* don't change the input context when we call reset */ +--- 5538,5545 ---- + XFree(preedit_attr); + } + + static void +! reset_state_setup(GdkIC *ic UNUSED) + { + #ifdef USE_X11R6_XIM + /* don't change the input context when we call reset */ +*** ../vim-7.2.179/src/normal.c 2009-05-15 21:31:11.000000000 +0200 +--- src/normal.c 2009-05-16 22:31:10.000000000 +0200 +*************** +*** 9243,9252 **** + } + + #ifdef FEAT_SNIFF +- /*ARGSUSED*/ + static void + nv_sniff(cap) +! cmdarg_T *cap; + { + ProcessSniffRequests(); + } +--- 9243,9251 ---- + } + + #ifdef FEAT_SNIFF + static void + nv_sniff(cap) +! cmdarg_T *cap UNUSED; + { + ProcessSniffRequests(); + } +*************** +*** 9262,9271 **** + #endif + + #ifdef FEAT_DND +- /*ARGSUSED*/ + static void + nv_drop(cap) +! cmdarg_T *cap; + { + do_put('~', BACKWARD, 1L, PUT_CURSEND); + } +--- 9261,9269 ---- + #endif + + #ifdef FEAT_DND + static void + nv_drop(cap) +! cmdarg_T *cap UNUSED; + { + do_put('~', BACKWARD, 1L, PUT_CURSEND); + } +*************** +*** 9277,9283 **** + * When waiting for a character for 'updatetime' K_CURSORHOLD is put in the + * input buffer. "did_cursorhold" is set to avoid retriggering. + */ +- /*ARGSUSED*/ + static void + nv_cursorhold(cap) + cmdarg_T *cap; +--- 9275,9280 ---- +*** ../vim-7.2.179/src/option.c 2009-05-15 21:31:11.000000000 +0200 +--- src/option.c 2009-05-17 12:13:52.000000000 +0200 +*************** +*** 387,392 **** +--- 387,395 ---- + char_u *def_val[2]; /* default values for variable (vi and vim) */ + #ifdef FEAT_EVAL + scid_T scriptID; /* script in which the option was last set */ ++ # define SCRIPTID_INIT , 0 ++ #else ++ # define SCRIPTID_INIT + #endif + }; + +*************** +*** 477,483 **** + #else + (char_u *)224L, + #endif +! (char_u *)0L}}, + {"antialias", "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR, + #if defined(FEAT_GUI) && defined(MACOS_X) + (char_u *)&p_antialias, PV_NONE, +--- 480,486 ---- + #else + (char_u *)224L, + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"antialias", "anti", P_BOOL|P_VI_DEF|P_VIM|P_RCLR, + #if defined(FEAT_GUI) && defined(MACOS_X) + (char_u *)&p_antialias, PV_NONE, +*************** +*** 486,520 **** + (char_u *)NULL, PV_NONE, + {(char_u *)FALSE, (char_u *)FALSE} + #endif +! }, + {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_ARABIC + (char_u *)VAR_WIN, PV_ARAB, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"arabicshape", "arshape", P_BOOL|P_VI_DEF|P_VIM|P_RCLR, + #ifdef FEAT_ARABIC + (char_u *)&p_arshape, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L}}, + {"allowrevins", "ari", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_ari, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"altkeymap", "akm", P_BOOL|P_VI_DEF, + #ifdef FEAT_FKMAP + (char_u *)&p_altkeymap, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"ambiwidth", "ambw", P_STRING|P_VI_DEF|P_RCLR, + #if defined(FEAT_MBYTE) + (char_u *)&p_ambw, PV_NONE, +--- 489,523 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)FALSE, (char_u *)FALSE} + #endif +! SCRIPTID_INIT}, + {"arabic", "arab", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_ARABIC + (char_u *)VAR_WIN, PV_ARAB, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"arabicshape", "arshape", P_BOOL|P_VI_DEF|P_VIM|P_RCLR, + #ifdef FEAT_ARABIC + (char_u *)&p_arshape, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"allowrevins", "ari", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_ari, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"altkeymap", "akm", P_BOOL|P_VI_DEF, + #ifdef FEAT_FKMAP + (char_u *)&p_altkeymap, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"ambiwidth", "ambw", P_STRING|P_VI_DEF|P_RCLR, + #if defined(FEAT_MBYTE) + (char_u *)&p_ambw, PV_NONE, +*************** +*** 523,549 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + #ifdef FEAT_AUTOCHDIR + {"autochdir", "acd", P_BOOL|P_VI_DEF, + (char_u *)&p_acd, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + #endif + {"autoindent", "ai", P_BOOL|P_VI_DEF, + (char_u *)&p_ai, PV_AI, +! {(char_u *)FALSE, (char_u *)0L}}, + {"autoprint", "ap", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"autoread", "ar", P_BOOL|P_VI_DEF, + (char_u *)&p_ar, PV_AR, +! {(char_u *)FALSE, (char_u *)0L}}, + {"autowrite", "aw", P_BOOL|P_VI_DEF, + (char_u *)&p_aw, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"autowriteall","awa", P_BOOL|P_VI_DEF, + (char_u *)&p_awa, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"background", "bg", P_STRING|P_VI_DEF|P_RCLR, + (char_u *)&p_bg, PV_NONE, + { +--- 526,552 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + #ifdef FEAT_AUTOCHDIR + {"autochdir", "acd", P_BOOL|P_VI_DEF, + (char_u *)&p_acd, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + #endif + {"autoindent", "ai", P_BOOL|P_VI_DEF, + (char_u *)&p_ai, PV_AI, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"autoprint", "ap", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"autoread", "ar", P_BOOL|P_VI_DEF, + (char_u *)&p_ar, PV_AR, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"autowrite", "aw", P_BOOL|P_VI_DEF, + (char_u *)&p_aw, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"autowriteall","awa", P_BOOL|P_VI_DEF, + (char_u *)&p_awa, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"background", "bg", P_STRING|P_VI_DEF|P_RCLR, + (char_u *)&p_bg, PV_NONE, + { +*************** +*** 552,564 **** + #else + (char_u *)"light", + #endif +! (char_u *)0L}}, + {"backspace", "bs", P_STRING|P_VI_DEF|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_bs, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"backup", "bk", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_bk, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"backupcopy", "bkc", P_STRING|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_bkc, PV_NONE, + #ifdef UNIX +--- 555,567 ---- + #else + (char_u *)"light", + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"backspace", "bs", P_STRING|P_VI_DEF|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_bs, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"backup", "bk", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_bk, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"backupcopy", "bkc", P_STRING|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_bkc, PV_NONE, + #ifdef UNIX +*************** +*** 566,575 **** + #else + {(char_u *)"auto", (char_u *)"auto"} + #endif +! }, + {"backupdir", "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE, + (char_u *)&p_bdir, PV_NONE, +! {(char_u *)DFLT_BDIR, (char_u *)0L}}, + {"backupext", "bex", P_STRING|P_VI_DEF|P_NFNAME, + (char_u *)&p_bex, PV_NONE, + { +--- 569,578 ---- + #else + {(char_u *)"auto", (char_u *)"auto"} + #endif +! SCRIPTID_INIT}, + {"backupdir", "bdir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE, + (char_u *)&p_bdir, PV_NONE, +! {(char_u *)DFLT_BDIR, (char_u *)0L} SCRIPTID_INIT}, + {"backupext", "bex", P_STRING|P_VI_DEF|P_NFNAME, + (char_u *)&p_bex, PV_NONE, + { +*************** +*** 578,584 **** + #else + (char_u *)"~", + #endif +! (char_u *)0L}}, + {"backupskip", "bsk", P_STRING|P_VI_DEF|P_COMMA, + #ifdef FEAT_WILDIGN + (char_u *)&p_bsk, PV_NONE, +--- 581,587 ---- + #else + (char_u *)"~", + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"backupskip", "bsk", P_STRING|P_VI_DEF|P_COMMA, + #ifdef FEAT_WILDIGN + (char_u *)&p_bsk, PV_NONE, +*************** +*** 587,626 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + #ifdef FEAT_BEVAL + {"balloondelay","bdlay",P_NUM|P_VI_DEF, + (char_u *)&p_bdlay, PV_NONE, +! {(char_u *)600L, (char_u *)0L}}, + {"ballooneval", "beval",P_BOOL|P_VI_DEF|P_NO_MKRC, + (char_u *)&p_beval, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + # ifdef FEAT_EVAL + {"balloonexpr", "bexpr", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, + (char_u *)&p_bexpr, PV_BEXPR, +! {(char_u *)"", (char_u *)0L}}, + # endif + #endif + {"beautify", "bf", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"binary", "bin", P_BOOL|P_VI_DEF|P_RSTAT, + (char_u *)&p_bin, PV_BIN, +! {(char_u *)FALSE, (char_u *)0L}}, + {"bioskey", "biosk",P_BOOL|P_VI_DEF, + #ifdef MSDOS + (char_u *)&p_biosk, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L}}, + {"bomb", NULL, P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT, + #ifdef FEAT_MBYTE + (char_u *)&p_bomb, PV_BOMB, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"breakat", "brk", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST, + #ifdef FEAT_LINEBREAK + (char_u *)&p_breakat, PV_NONE, +--- 590,629 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + #ifdef FEAT_BEVAL + {"balloondelay","bdlay",P_NUM|P_VI_DEF, + (char_u *)&p_bdlay, PV_NONE, +! {(char_u *)600L, (char_u *)0L} SCRIPTID_INIT}, + {"ballooneval", "beval",P_BOOL|P_VI_DEF|P_NO_MKRC, + (char_u *)&p_beval, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + # ifdef FEAT_EVAL + {"balloonexpr", "bexpr", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, + (char_u *)&p_bexpr, PV_BEXPR, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + # endif + #endif + {"beautify", "bf", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"binary", "bin", P_BOOL|P_VI_DEF|P_RSTAT, + (char_u *)&p_bin, PV_BIN, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"bioskey", "biosk",P_BOOL|P_VI_DEF, + #ifdef MSDOS + (char_u *)&p_biosk, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"bomb", NULL, P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT, + #ifdef FEAT_MBYTE + (char_u *)&p_bomb, PV_BOMB, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"breakat", "brk", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST, + #ifdef FEAT_LINEBREAK + (char_u *)&p_breakat, PV_NONE, +*************** +*** 629,635 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"browsedir", "bsdir",P_STRING|P_VI_DEF, + #ifdef FEAT_BROWSE + (char_u *)&p_bsdir, PV_NONE, +--- 632,638 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"browsedir", "bsdir",P_STRING|P_VI_DEF, + #ifdef FEAT_BROWSE + (char_u *)&p_bsdir, PV_NONE, +*************** +*** 638,644 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"bufhidden", "bh", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB, + #if defined(FEAT_QUICKFIX) + (char_u *)&p_bh, PV_BH, +--- 641,647 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"bufhidden", "bh", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB, + #if defined(FEAT_QUICKFIX) + (char_u *)&p_bh, PV_BH, +*************** +*** 647,657 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"buflisted", "bl", P_BOOL|P_VI_DEF|P_NOGLOB, + (char_u *)&p_bl, PV_BL, + {(char_u *)1L, (char_u *)0L} +! }, + {"buftype", "bt", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB, + #if defined(FEAT_QUICKFIX) + (char_u *)&p_bt, PV_BT, +--- 650,660 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"buflisted", "bl", P_BOOL|P_VI_DEF|P_NOGLOB, + (char_u *)&p_bl, PV_BL, + {(char_u *)1L, (char_u *)0L} +! SCRIPTID_INIT}, + {"buftype", "bt", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB, + #if defined(FEAT_QUICKFIX) + (char_u *)&p_bt, PV_BT, +*************** +*** 660,666 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"casemap", "cmp", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_MBYTE + (char_u *)&p_cmp, PV_NONE, +--- 663,669 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"casemap", "cmp", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_MBYTE + (char_u *)&p_cmp, PV_NONE, +*************** +*** 669,675 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SEARCHPATH + (char_u *)&p_cdpath, PV_NONE, +--- 672,678 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cdpath", "cd", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SEARCHPATH + (char_u *)&p_cdpath, PV_NONE, +*************** +*** 678,684 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"cedit", NULL, P_STRING, + #ifdef FEAT_CMDWIN + (char_u *)&p_cedit, PV_NONE, +--- 681,687 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cedit", NULL, P_STRING, + #ifdef FEAT_CMDWIN + (char_u *)&p_cedit, PV_NONE, +*************** +*** 687,693 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"charconvert", "ccv", P_STRING|P_VI_DEF|P_SECURE, + #if defined(FEAT_MBYTE) && defined(FEAT_EVAL) + (char_u *)&p_ccv, PV_NONE, +--- 690,696 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"charconvert", "ccv", P_STRING|P_VI_DEF|P_SECURE, + #if defined(FEAT_MBYTE) && defined(FEAT_EVAL) + (char_u *)&p_ccv, PV_NONE, +*************** +*** 696,709 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"cindent", "cin", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_CINDENT + (char_u *)&p_cin, PV_CIN, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"cinkeys", "cink", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_CINDENT + (char_u *)&p_cink, PV_CINK, +--- 699,712 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cindent", "cin", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_CINDENT + (char_u *)&p_cin, PV_CIN, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"cinkeys", "cink", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_CINDENT + (char_u *)&p_cink, PV_CINK, +*************** +*** 712,725 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"cinoptions", "cino", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_CINDENT + (char_u *)&p_cino, PV_CINO, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"cinwords", "cinw", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT) + (char_u *)&p_cinw, PV_CINW, +--- 715,728 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cinoptions", "cino", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_CINDENT + (char_u *)&p_cino, PV_CINO, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"cinwords", "cinw", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT) + (char_u *)&p_cinw, PV_CINW, +*************** +*** 729,735 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"clipboard", "cb", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_CLIPBOARD + (char_u *)&p_cb, PV_NONE, +--- 732,738 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"clipboard", "cb", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_CLIPBOARD + (char_u *)&p_cb, PV_NONE, +*************** +*** 743,762 **** + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! }, + {"cmdheight", "ch", P_NUM|P_VI_DEF|P_RALL, + (char_u *)&p_ch, PV_NONE, +! {(char_u *)1L, (char_u *)0L}}, + {"cmdwinheight", "cwh", P_NUM|P_VI_DEF, + #ifdef FEAT_CMDWIN + (char_u *)&p_cwh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)7L, (char_u *)0L}}, + {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR, + (char_u *)&Columns, PV_NONE, +! {(char_u *)80L, (char_u *)0L}}, + {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_COMMENTS + (char_u *)&p_com, PV_COM, +--- 746,765 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cmdheight", "ch", P_NUM|P_VI_DEF|P_RALL, + (char_u *)&p_ch, PV_NONE, +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"cmdwinheight", "cwh", P_NUM|P_VI_DEF, + #ifdef FEAT_CMDWIN + (char_u *)&p_cwh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)7L, (char_u *)0L} SCRIPTID_INIT}, + {"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR, + (char_u *)&Columns, PV_NONE, +! {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT}, + {"comments", "com", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_COMMENTS + (char_u *)&p_com, PV_COM, +*************** +*** 766,772 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_FOLDING + (char_u *)&p_cms, PV_CMS, +--- 769,775 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_FOLDING + (char_u *)&p_cms, PV_CMS, +*************** +*** 775,786 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + /* P_PRI_MKRC isn't needed here, optval_default() + * always returns TRUE for 'compatible' */ + {"compatible", "cp", P_BOOL|P_RALL, + (char_u *)&p_cp, PV_NONE, +! {(char_u *)TRUE, (char_u *)FALSE}}, + {"complete", "cpt", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_cpt, PV_CPT, +--- 778,789 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + /* P_PRI_MKRC isn't needed here, optval_default() + * always returns TRUE for 'compatible' */ + {"compatible", "cp", P_BOOL|P_RALL, + (char_u *)&p_cp, PV_NONE, +! {(char_u *)TRUE, (char_u *)FALSE} SCRIPTID_INIT}, + {"complete", "cpt", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_cpt, PV_CPT, +*************** +*** 789,795 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"completefunc", "cfu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE, + #ifdef FEAT_COMPL_FUNC + (char_u *)&p_cfu, PV_CFU, +--- 792,798 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"completefunc", "cfu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE, + #ifdef FEAT_COMPL_FUNC + (char_u *)&p_cfu, PV_CFU, +*************** +*** 798,804 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"completeopt", "cot", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_cot, PV_NONE, +--- 801,807 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"completeopt", "cot", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_cot, PV_NONE, +*************** +*** 807,840 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"confirm", "cf", P_BOOL|P_VI_DEF, + #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) + (char_u *)&p_confirm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"conskey", "consk",P_BOOL|P_VI_DEF, + #ifdef MSDOS + (char_u *)&p_consk, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"copyindent", "ci", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_ci, PV_CI, +! {(char_u *)FALSE, (char_u *)0L}}, + {"cpoptions", "cpo", P_STRING|P_VIM|P_RALL|P_FLAGLIST, + (char_u *)&p_cpo, PV_NONE, +! {(char_u *)CPO_VI, (char_u *)CPO_VIM}}, + {"cscopepathcomp", "cspc", P_NUM|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_cspc, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L}}, + {"cscopeprg", "csprg", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_CSCOPE + (char_u *)&p_csprg, PV_NONE, +--- 810,844 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"confirm", "cf", P_BOOL|P_VI_DEF, + #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) + (char_u *)&p_confirm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"conskey", "consk",P_BOOL|P_VI_DEF, + #ifdef MSDOS + (char_u *)&p_consk, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"copyindent", "ci", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_ci, PV_CI, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"cpoptions", "cpo", P_STRING|P_VIM|P_RALL|P_FLAGLIST, + (char_u *)&p_cpo, PV_NONE, +! {(char_u *)CPO_VI, (char_u *)CPO_VIM} +! SCRIPTID_INIT}, + {"cscopepathcomp", "cspc", P_NUM|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_cspc, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"cscopeprg", "csprg", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_CSCOPE + (char_u *)&p_csprg, PV_NONE, +*************** +*** 843,849 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"cscopequickfix", "csqf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX) + (char_u *)&p_csqf, PV_NONE, +--- 847,853 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cscopequickfix", "csqf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #if defined(FEAT_CSCOPE) && defined(FEAT_QUICKFIX) + (char_u *)&p_csqf, PV_NONE, +*************** +*** 852,896 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_cst, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L}}, + {"cscopetagorder", "csto", P_NUM|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_csto, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L}}, + {"cscopeverbose", "csverb", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_csverbose, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L}}, + {"cursorcolumn", "cuc", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_SYN_HL + (char_u *)VAR_WIN, PV_CUC, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_SYN_HL + (char_u *)VAR_WIN, PV_CUL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"debug", NULL, P_STRING|P_VI_DEF, + (char_u *)&p_debug, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_FIND_ID + (char_u *)&p_def, PV_DEF, +--- 856,900 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"cscopetag", "cst", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_cst, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"cscopetagorder", "csto", P_NUM|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_csto, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"cscopeverbose", "csverb", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_CSCOPE + (char_u *)&p_csverbose, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"cursorcolumn", "cuc", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_SYN_HL + (char_u *)VAR_WIN, PV_CUC, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"cursorline", "cul", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_SYN_HL + (char_u *)VAR_WIN, PV_CUL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"debug", NULL, P_STRING|P_VI_DEF, + (char_u *)&p_debug, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"define", "def", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_FIND_ID + (char_u *)&p_def, PV_DEF, +*************** +*** 899,926 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"delcombine", "deco", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_MBYTE + (char_u *)&p_deco, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_dict, PV_DICT, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"diff", NULL, P_BOOL|P_VI_DEF|P_RWIN|P_NOGLOB, + #ifdef FEAT_DIFF + (char_u *)VAR_WIN, PV_DIFF, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE, + #if defined(FEAT_DIFF) && defined(FEAT_EVAL) + (char_u *)&p_dex, PV_NONE, +--- 903,930 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"delcombine", "deco", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_MBYTE + (char_u *)&p_deco, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"dictionary", "dict", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_dict, PV_DICT, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"diff", NULL, P_BOOL|P_VI_DEF|P_RWIN|P_NOGLOB, + #ifdef FEAT_DIFF + (char_u *)VAR_WIN, PV_DIFF, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"diffexpr", "dex", P_STRING|P_VI_DEF|P_SECURE, + #if defined(FEAT_DIFF) && defined(FEAT_EVAL) + (char_u *)&p_dex, PV_NONE, +*************** +*** 929,935 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"diffopt", "dip", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN|P_COMMA|P_NODUP, + #ifdef FEAT_DIFF + (char_u *)&p_dip, PV_NONE, +--- 933,939 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"diffopt", "dip", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN|P_COMMA|P_NODUP, + #ifdef FEAT_DIFF + (char_u *)&p_dip, PV_NONE, +*************** +*** 938,957 **** + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)NULL} + #endif +! }, + {"digraph", "dg", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_DIGRAPHS + (char_u *)&p_dg, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"directory", "dir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE, + (char_u *)&p_dir, PV_NONE, +! {(char_u *)DFLT_DIR, (char_u *)0L}}, + {"display", "dy", P_STRING|P_VI_DEF|P_COMMA|P_RALL|P_NODUP, + (char_u *)&p_dy, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"eadirection", "ead", P_STRING|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_ead, PV_NONE, +--- 942,961 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)NULL} + #endif +! SCRIPTID_INIT}, + {"digraph", "dg", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_DIGRAPHS + (char_u *)&p_dg, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"directory", "dir", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP|P_SECURE, + (char_u *)&p_dir, PV_NONE, +! {(char_u *)DFLT_DIR, (char_u *)0L} SCRIPTID_INIT}, + {"display", "dy", P_STRING|P_VI_DEF|P_COMMA|P_RALL|P_NODUP, + (char_u *)&p_dy, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"eadirection", "ead", P_STRING|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_ead, PV_NONE, +*************** +*** 960,969 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"edcompatible","ed", P_BOOL|P_VI_DEF, + (char_u *)&p_ed, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"encoding", "enc", P_STRING|P_VI_DEF|P_RCLR, + #ifdef FEAT_MBYTE + (char_u *)&p_enc, PV_NONE, +--- 964,973 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"edcompatible","ed", P_BOOL|P_VI_DEF, + (char_u *)&p_ed, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"encoding", "enc", P_STRING|P_VI_DEF|P_RCLR, + #ifdef FEAT_MBYTE + (char_u *)&p_enc, PV_NONE, +*************** +*** 972,990 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"endofline", "eol", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT, + (char_u *)&p_eol, PV_EOL, +! {(char_u *)TRUE, (char_u *)0L}}, + {"equalalways", "ea", P_BOOL|P_VI_DEF|P_RALL, + (char_u *)&p_ea, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"equalprg", "ep", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_ep, PV_EP, +! {(char_u *)"", (char_u *)0L}}, + {"errorbells", "eb", P_BOOL|P_VI_DEF, + (char_u *)&p_eb, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"errorfile", "ef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_ef, PV_NONE, +--- 976,994 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"endofline", "eol", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT, + (char_u *)&p_eol, PV_EOL, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"equalalways", "ea", P_BOOL|P_VI_DEF|P_RALL, + (char_u *)&p_ea, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"equalprg", "ep", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_ep, PV_EP, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"errorbells", "eb", P_BOOL|P_VI_DEF, + (char_u *)&p_eb, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"errorfile", "ef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_ef, PV_NONE, +*************** +*** 993,1024 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"errorformat", "efm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_QUICKFIX + (char_u *)&p_efm, PV_EFM, +! {(char_u *)DFLT_EFM, (char_u *)0L}, + #else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"esckeys", "ek", P_BOOL|P_VIM, + (char_u *)&p_ek, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE}}, + {"eventignore", "ei", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_AUTOCMD + (char_u *)&p_ei, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"expandtab", "et", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_et, PV_ET, +! {(char_u *)FALSE, (char_u *)0L}}, + {"exrc", "ex", P_BOOL|P_VI_DEF|P_SECURE, + (char_u *)&p_exrc, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"fileencoding","fenc", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_RBUF|P_NO_MKRC, + #ifdef FEAT_MBYTE + (char_u *)&p_fenc, PV_FENC, +--- 997,1028 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"errorformat", "efm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_QUICKFIX + (char_u *)&p_efm, PV_EFM, +! {(char_u *)DFLT_EFM, (char_u *)0L} + #else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"esckeys", "ek", P_BOOL|P_VIM, + (char_u *)&p_ek, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, + {"eventignore", "ei", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_AUTOCMD + (char_u *)&p_ei, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"expandtab", "et", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_et, PV_ET, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"exrc", "ex", P_BOOL|P_VI_DEF|P_SECURE, + (char_u *)&p_exrc, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"fileencoding","fenc", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_RBUF|P_NO_MKRC, + #ifdef FEAT_MBYTE + (char_u *)&p_fenc, PV_FENC, +*************** +*** 1027,1033 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"fileencodings","fencs", P_STRING|P_VI_DEF|P_COMMA, + #ifdef FEAT_MBYTE + (char_u *)&p_fencs, PV_NONE, +--- 1031,1037 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"fileencodings","fencs", P_STRING|P_VI_DEF|P_COMMA, + #ifdef FEAT_MBYTE + (char_u *)&p_fencs, PV_NONE, +*************** +*** 1036,1048 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC, + (char_u *)&p_ff, PV_FF, +! {(char_u *)DFLT_FF, (char_u *)0L}}, + {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_ffs, PV_NONE, +! {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}}, + {"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, + #ifdef FEAT_AUTOCMD + (char_u *)&p_ft, PV_FT, +--- 1040,1053 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"fileformat", "ff", P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC, + (char_u *)&p_ff, PV_FF, +! {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT}, + {"fileformats", "ffs", P_STRING|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_ffs, PV_NONE, +! {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM} +! SCRIPTID_INIT}, + {"filetype", "ft", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, + #ifdef FEAT_AUTOCMD + (char_u *)&p_ft, PV_FT, +*************** +*** 1051,1057 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, + #if defined(FEAT_WINDOWS) || defined(FEAT_FOLDING) + (char_u *)&p_fcs, PV_NONE, +--- 1056,1062 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"fillchars", "fcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, + #if defined(FEAT_WINDOWS) || defined(FEAT_FOLDING) + (char_u *)&p_fcs, PV_NONE, +*************** +*** 1060,1086 **** + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! }, + {"fkmap", "fk", P_BOOL|P_VI_DEF, + #ifdef FEAT_FKMAP + (char_u *)&p_fkmap, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"flash", "fl", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + #ifdef FEAT_FOLDING + {"foldclose", "fcl", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_RWIN, + (char_u *)&p_fcl, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"foldcolumn", "fdc", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDC, +! {(char_u *)FALSE, (char_u *)0L}}, + {"foldenable", "fen", P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FEN, +! {(char_u *)TRUE, (char_u *)0L}}, + {"foldexpr", "fde", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + # ifdef FEAT_EVAL + (char_u *)VAR_WIN, PV_FDE, +--- 1065,1091 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"fkmap", "fk", P_BOOL|P_VI_DEF, + #ifdef FEAT_FKMAP + (char_u *)&p_fkmap, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"flash", "fl", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + #ifdef FEAT_FOLDING + {"foldclose", "fcl", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_RWIN, + (char_u *)&p_fcl, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"foldcolumn", "fdc", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDC, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"foldenable", "fen", P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FEN, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"foldexpr", "fde", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + # ifdef FEAT_EVAL + (char_u *)VAR_WIN, PV_FDE, +*************** +*** 1089,1121 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + # endif +! }, + {"foldignore", "fdi", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDI, +! {(char_u *)"#", (char_u *)NULL}}, + {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDL, +! {(char_u *)0L, (char_u *)0L}}, + {"foldlevelstart","fdls", P_NUM|P_VI_DEF, + (char_u *)&p_fdls, PV_NONE, +! {(char_u *)-1L, (char_u *)0L}}, + {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF| + P_RWIN|P_COMMA|P_NODUP, + (char_u *)VAR_WIN, PV_FMR, +! {(char_u *)"{{{,}}}", (char_u *)NULL}}, + {"foldmethod", "fdm", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDM, +! {(char_u *)"manual", (char_u *)NULL}}, + {"foldminlines","fml", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FML, +! {(char_u *)1L, (char_u *)0L}}, + {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDN, +! {(char_u *)20L, (char_u *)0L}}, + {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_fdo, PV_NONE, + {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo", +! (char_u *)0L}}, + {"foldtext", "fdt", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + # ifdef FEAT_EVAL + (char_u *)VAR_WIN, PV_FDT, +--- 1094,1127 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + # endif +! SCRIPTID_INIT}, + {"foldignore", "fdi", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDI, +! {(char_u *)"#", (char_u *)NULL} SCRIPTID_INIT}, + {"foldlevel", "fdl", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDL, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"foldlevelstart","fdls", P_NUM|P_VI_DEF, + (char_u *)&p_fdls, PV_NONE, +! {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT}, + {"foldmarker", "fmr", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF| + P_RWIN|P_COMMA|P_NODUP, + (char_u *)VAR_WIN, PV_FMR, +! {(char_u *)"{{{,}}}", (char_u *)NULL} +! SCRIPTID_INIT}, + {"foldmethod", "fdm", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDM, +! {(char_u *)"manual", (char_u *)NULL} SCRIPTID_INIT}, + {"foldminlines","fml", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FML, +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"foldnestmax", "fdn", P_NUM|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_FDN, +! {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT}, + {"foldopen", "fdo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_fdo, PV_NONE, + {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo", +! (char_u *)0L} SCRIPTID_INIT}, + {"foldtext", "fdt", P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|P_RWIN, + # ifdef FEAT_EVAL + (char_u *)VAR_WIN, PV_FDT, +*************** +*** 1124,1130 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + # endif +! }, + #endif + {"formatexpr", "fex", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, + #ifdef FEAT_EVAL +--- 1130,1136 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + # endif +! SCRIPTID_INIT}, + #endif + {"formatexpr", "fex", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, + #ifdef FEAT_EVAL +*************** +*** 1134,1149 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"formatoptions","fo", P_STRING|P_ALLOCED|P_VIM|P_FLAGLIST, + (char_u *)&p_fo, PV_FO, +! {(char_u *)DFLT_FO_VI, (char_u *)DFLT_FO_VIM}}, + {"formatlistpat","flp", P_STRING|P_ALLOCED|P_VI_DEF, + (char_u *)&p_flp, PV_FLP, +! {(char_u *)"^\\s*\\d\\+[\\]:.)}\\t ]\\s*", (char_u *)0L}}, + {"formatprg", "fp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_fp, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"fsync", "fs", P_BOOL|P_SECURE|P_VI_DEF, + #ifdef HAVE_FSYNC + (char_u *)&p_fs, PV_NONE, +--- 1140,1157 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"formatoptions","fo", P_STRING|P_ALLOCED|P_VIM|P_FLAGLIST, + (char_u *)&p_fo, PV_FO, +! {(char_u *)DFLT_FO_VI, (char_u *)DFLT_FO_VIM} +! SCRIPTID_INIT}, + {"formatlistpat","flp", P_STRING|P_ALLOCED|P_VI_DEF, + (char_u *)&p_flp, PV_FLP, +! {(char_u *)"^\\s*\\d\\+[\\]:.)}\\t ]\\s*", +! (char_u *)0L} SCRIPTID_INIT}, + {"formatprg", "fp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_fp, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"fsync", "fs", P_BOOL|P_SECURE|P_VI_DEF, + #ifdef HAVE_FSYNC + (char_u *)&p_fs, PV_NONE, +*************** +*** 1152,1173 **** + (char_u *)NULL, PV_NONE, + {(char_u *)FALSE, (char_u *)0L} + #endif +! }, + {"gdefault", "gd", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_gd, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"graphic", "gr", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"grepformat", "gfm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_QUICKFIX + (char_u *)&p_gefm, PV_NONE, +! {(char_u *)DFLT_GREPFORMAT, (char_u *)0L}, + #else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"grepprg", "gp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_gp, PV_GP, +--- 1160,1181 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)FALSE, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"gdefault", "gd", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_gd, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"graphic", "gr", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"grepformat", "gfm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_QUICKFIX + (char_u *)&p_gefm, PV_NONE, +! {(char_u *)DFLT_GREPFORMAT, (char_u *)0L} + #else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"grepprg", "gp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_gp, PV_GP, +*************** +*** 1185,1199 **** + (char_u *)"SEARCH/NUMBERS ", + # else + (char_u *)"grep -n ", +! #endif +! #endif + # endif +! (char_u *)0L}, + #else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guicursor", "gcr", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef CURSOR_SHAPE + (char_u *)&p_guicursor, PV_NONE, +--- 1193,1207 ---- + (char_u *)"SEARCH/NUMBERS ", + # else + (char_u *)"grep -n ", +! # endif +! # endif + # endif +! (char_u *)0L} + #else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guicursor", "gcr", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef CURSOR_SHAPE + (char_u *)&p_guicursor, PV_NONE, +*************** +*** 1208,1214 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guifont", "gfn", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, + #ifdef FEAT_GUI + (char_u *)&p_guifont, PV_NONE, +--- 1216,1222 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guifont", "gfn", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, + #ifdef FEAT_GUI + (char_u *)&p_guifont, PV_NONE, +*************** +*** 1217,1223 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guifontset", "gfs", P_STRING|P_VI_DEF|P_RCLR|P_COMMA, + #if defined(FEAT_GUI) && defined(FEAT_XFONTSET) + (char_u *)&p_guifontset, PV_NONE, +--- 1225,1231 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guifontset", "gfs", P_STRING|P_VI_DEF|P_RCLR|P_COMMA, + #if defined(FEAT_GUI) && defined(FEAT_XFONTSET) + (char_u *)&p_guifontset, PV_NONE, +*************** +*** 1226,1232 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, + #if defined(FEAT_GUI) && defined(FEAT_MBYTE) + (char_u *)&p_guifontwide, PV_NONE, +--- 1234,1240 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guifontwide", "gfw", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, + #if defined(FEAT_GUI) && defined(FEAT_MBYTE) + (char_u *)&p_guifontwide, PV_NONE, +*************** +*** 1235,1248 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guiheadroom", "ghr", P_NUM|P_VI_DEF, + #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) + (char_u *)&p_ghr, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)50L, (char_u *)0L}}, + {"guioptions", "go", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST, + #if defined(FEAT_GUI) + (char_u *)&p_go, PV_NONE, +--- 1243,1256 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guiheadroom", "ghr", P_NUM|P_VI_DEF, + #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) + (char_u *)&p_ghr, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)50L, (char_u *)0L} SCRIPTID_INIT}, + {"guioptions", "go", P_STRING|P_VI_DEF|P_RALL|P_FLAGLIST, + #if defined(FEAT_GUI) + (char_u *)&p_go, PV_NONE, +*************** +*** 1255,1268 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guipty", NULL, P_BOOL|P_VI_DEF, + #if defined(FEAT_GUI) + (char_u *)&p_guipty, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L}}, + {"guitablabel", "gtl", P_STRING|P_VI_DEF|P_RWIN, + #if defined(FEAT_GUI_TABLINE) + (char_u *)&p_gtl, PV_NONE, +--- 1263,1276 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guipty", NULL, P_BOOL|P_VI_DEF, + #if defined(FEAT_GUI) + (char_u *)&p_guipty, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"guitablabel", "gtl", P_STRING|P_VI_DEF|P_RWIN, + #if defined(FEAT_GUI_TABLINE) + (char_u *)&p_gtl, PV_NONE, +*************** +*** 1271,1277 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"guitabtooltip", "gtt", P_STRING|P_VI_DEF|P_RWIN, + #if defined(FEAT_GUI_TABLINE) + (char_u *)&p_gtt, PV_NONE, +--- 1279,1285 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"guitabtooltip", "gtt", P_STRING|P_VI_DEF|P_RWIN, + #if defined(FEAT_GUI_TABLINE) + (char_u *)&p_gtt, PV_NONE, +*************** +*** 1280,1299 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"hardtabs", "ht", P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"helpfile", "hf", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_hf, PV_NONE, +! {(char_u *)DFLT_HELPFILE, (char_u *)0L}}, + {"helpheight", "hh", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_hh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)20L, (char_u *)0L}}, + {"helplang", "hlg", P_STRING|P_VI_DEF|P_COMMA, + #ifdef FEAT_MULTI_LANG + (char_u *)&p_hlg, PV_NONE, +--- 1288,1308 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"hardtabs", "ht", P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"helpfile", "hf", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_hf, PV_NONE, +! {(char_u *)DFLT_HELPFILE, (char_u *)0L} +! SCRIPTID_INIT}, + {"helpheight", "hh", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_hh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT}, + {"helplang", "hlg", P_STRING|P_VI_DEF|P_COMMA, + #ifdef FEAT_MULTI_LANG + (char_u *)&p_hlg, PV_NONE, +*************** +*** 1302,1365 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"hidden", "hid", P_BOOL|P_VI_DEF, + (char_u *)&p_hid, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"highlight", "hl", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, + (char_u *)&p_hl, PV_NONE, +! {(char_u *)HIGHLIGHT_INIT, (char_u *)0L}}, + {"history", "hi", P_NUM|P_VIM, + (char_u *)&p_hi, PV_NONE, +! {(char_u *)0L, (char_u *)20L}}, + {"hkmap", "hk", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_hkmap, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"hkmapp", "hkp", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_hkmapp, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"hlsearch", "hls", P_BOOL|P_VI_DEF|P_VIM|P_RALL, + (char_u *)&p_hls, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"icon", NULL, P_BOOL|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_icon, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"iconstring", NULL, P_STRING|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_iconstring, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"ignorecase", "ic", P_BOOL|P_VI_DEF, + (char_u *)&p_ic, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"imactivatekey","imak",P_STRING|P_VI_DEF, + #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK) + (char_u *)&p_imak, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"imcmdline", "imc", P_BOOL|P_VI_DEF, + #ifdef USE_IM_CONTROL + (char_u *)&p_imcmdline, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"imdisable", "imd", P_BOOL|P_VI_DEF, + #ifdef USE_IM_CONTROL + (char_u *)&p_imdisable, PV_NONE, +--- 1311,1375 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"hidden", "hid", P_BOOL|P_VI_DEF, + (char_u *)&p_hid, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"highlight", "hl", P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP, + (char_u *)&p_hl, PV_NONE, +! {(char_u *)HIGHLIGHT_INIT, (char_u *)0L} +! SCRIPTID_INIT}, + {"history", "hi", P_NUM|P_VIM, + (char_u *)&p_hi, PV_NONE, +! {(char_u *)0L, (char_u *)20L} SCRIPTID_INIT}, + {"hkmap", "hk", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_hkmap, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"hkmapp", "hkp", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_hkmapp, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"hlsearch", "hls", P_BOOL|P_VI_DEF|P_VIM|P_RALL, + (char_u *)&p_hls, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"icon", NULL, P_BOOL|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_icon, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"iconstring", NULL, P_STRING|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_iconstring, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"ignorecase", "ic", P_BOOL|P_VI_DEF, + (char_u *)&p_ic, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"imactivatekey","imak",P_STRING|P_VI_DEF, + #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK) + (char_u *)&p_imak, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"imcmdline", "imc", P_BOOL|P_VI_DEF, + #ifdef USE_IM_CONTROL + (char_u *)&p_imcmdline, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"imdisable", "imd", P_BOOL|P_VI_DEF, + #ifdef USE_IM_CONTROL + (char_u *)&p_imdisable, PV_NONE, +*************** +*** 1371,1377 **** + #else + {(char_u *)FALSE, (char_u *)0L} + #endif +! }, + {"iminsert", "imi", P_NUM|P_VI_DEF, + (char_u *)&p_iminsert, PV_IMI, + #ifdef B_IMODE_IM +--- 1381,1387 ---- + #else + {(char_u *)FALSE, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"iminsert", "imi", P_NUM|P_VI_DEF, + (char_u *)&p_iminsert, PV_IMI, + #ifdef B_IMODE_IM +*************** +*** 1379,1385 **** + #else + {(char_u *)B_IMODE_NONE, (char_u *)0L} + #endif +! }, + {"imsearch", "ims", P_NUM|P_VI_DEF, + (char_u *)&p_imsearch, PV_IMS, + #ifdef B_IMODE_IM +--- 1389,1395 ---- + #else + {(char_u *)B_IMODE_NONE, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"imsearch", "ims", P_NUM|P_VI_DEF, + (char_u *)&p_imsearch, PV_IMS, + #ifdef B_IMODE_IM +*************** +*** 1387,1393 **** + #else + {(char_u *)B_IMODE_NONE, (char_u *)0L} + #endif +! }, + {"include", "inc", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_FIND_ID + (char_u *)&p_inc, PV_INC, +--- 1397,1403 ---- + #else + {(char_u *)B_IMODE_NONE, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"include", "inc", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_FIND_ID + (char_u *)&p_inc, PV_INC, +*************** +*** 1396,1402 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"includeexpr", "inex", P_STRING|P_ALLOCED|P_VI_DEF, + #if defined(FEAT_FIND_ID) && defined(FEAT_EVAL) + (char_u *)&p_inex, PV_INEX, +--- 1406,1412 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"includeexpr", "inex", P_STRING|P_ALLOCED|P_VI_DEF, + #if defined(FEAT_FIND_ID) && defined(FEAT_EVAL) + (char_u *)&p_inex, PV_INEX, +*************** +*** 1405,1414 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"incsearch", "is", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_is, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"indentexpr", "inde", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, + #if defined(FEAT_CINDENT) && defined(FEAT_EVAL) + (char_u *)&p_inde, PV_INDE, +--- 1415,1424 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"incsearch", "is", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_is, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"indentexpr", "inde", P_STRING|P_ALLOCED|P_VI_DEF|P_VIM, + #if defined(FEAT_CINDENT) && defined(FEAT_EVAL) + (char_u *)&p_inde, PV_INDE, +*************** +*** 1417,1423 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"indentkeys", "indk", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #if defined(FEAT_CINDENT) && defined(FEAT_EVAL) + (char_u *)&p_indk, PV_INDK, +--- 1427,1433 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"indentkeys", "indk", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + #if defined(FEAT_CINDENT) && defined(FEAT_EVAL) + (char_u *)&p_indk, PV_INDK, +*************** +*** 1426,1438 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"infercase", "inf", P_BOOL|P_VI_DEF, + (char_u *)&p_inf, PV_INF, +! {(char_u *)FALSE, (char_u *)0L}}, + {"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_im, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_isf, PV_NONE, + { +--- 1436,1448 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"infercase", "inf", P_BOOL|P_VI_DEF, + (char_u *)&p_inf, PV_INF, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_im, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_isf, PV_NONE, + { +*************** +*** 1455,1461 **** + # endif + # endif + #endif +! (char_u *)0L}}, + {"isident", "isi", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_isi, PV_NONE, + { +--- 1465,1471 ---- + # endif + # endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"isident", "isi", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_isi, PV_NONE, + { +*************** +*** 1472,1478 **** + (char_u *)"@,48-57,_,192-255", + # endif + #endif +! (char_u *)0L}}, + {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_isk, PV_ISK, + { +--- 1482,1488 ---- + (char_u *)"@,48-57,_,192-255", + # endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"iskeyword", "isk", P_STRING|P_ALLOCED|P_VIM|P_COMMA|P_NODUP, + (char_u *)&p_isk, PV_ISK, + { +*************** +*** 1491,1497 **** + ISK_LATIN1 + # endif + #endif +! }}, + {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, + (char_u *)&p_isp, PV_NONE, + { +--- 1501,1507 ---- + ISK_LATIN1 + # endif + #endif +! } SCRIPTID_INIT}, + {"isprint", "isp", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, + (char_u *)&p_isp, PV_NONE, + { +*************** +*** 1507,1516 **** + ISP_LATIN1, + # endif + #endif +! (char_u *)0L}}, + {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_js, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"key", NULL, P_STRING|P_ALLOCED|P_VI_DEF|P_NO_MKRC, + #ifdef FEAT_CRYPT + (char_u *)&p_key, PV_KEY, +--- 1517,1526 ---- + ISP_LATIN1, + # endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"joinspaces", "js", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_js, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"key", NULL, P_STRING|P_ALLOCED|P_VI_DEF|P_NO_MKRC, + #ifdef FEAT_CRYPT + (char_u *)&p_key, PV_KEY, +*************** +*** 1519,1525 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"keymap", "kmp", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME|P_PRI_MKRC, + #ifdef FEAT_KEYMAP + (char_u *)&p_keymap, PV_KMAP, +--- 1529,1535 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"keymap", "kmp", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_RSTAT|P_NFNAME|P_PRI_MKRC, + #ifdef FEAT_KEYMAP + (char_u *)&p_keymap, PV_KMAP, +*************** +*** 1528,1541 **** + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! }, + {"keymodel", "km", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_VISUAL + (char_u *)&p_km, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_kp, PV_KP, + { +--- 1538,1551 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"keymodel", "km", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_VISUAL + (char_u *)&p_km, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"keywordprg", "kp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_kp, PV_KP, + { +*************** +*** 1556,1562 **** + # endif + #endif + #endif +! (char_u *)0L}}, + {"langmap", "lmap", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_LANGMAP + (char_u *)&p_langmap, PV_NONE, +--- 1566,1572 ---- + # endif + #endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"langmap", "lmap", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_LANGMAP + (char_u *)&p_langmap, PV_NONE, +*************** +*** 1565,1595 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, + #endif +! (char_u *)0L}}, + {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME, + #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG) + (char_u *)&p_lm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL, + #ifdef FEAT_WINDOWS + (char_u *)&p_ls, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L}}, + {"lazyredraw", "lz", P_BOOL|P_VI_DEF, + (char_u *)&p_lz, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"linebreak", "lbr", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_LINEBREAK + (char_u *)VAR_WIN, PV_LBR, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"lines", NULL, P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR, + (char_u *)&Rows, PV_NONE, + { +--- 1575,1605 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"langmenu", "lm", P_STRING|P_VI_DEF|P_NFNAME, + #if defined(FEAT_MENU) && defined(FEAT_MULTI_LANG) + (char_u *)&p_lm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"laststatus", "ls", P_NUM|P_VI_DEF|P_RALL, + #ifdef FEAT_WINDOWS + (char_u *)&p_ls, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"lazyredraw", "lz", P_BOOL|P_VI_DEF, + (char_u *)&p_lz, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"linebreak", "lbr", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_LINEBREAK + (char_u *)VAR_WIN, PV_LBR, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"lines", NULL, P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR, + (char_u *)&Rows, PV_NONE, + { +*************** +*** 1598,1604 **** + #else + (char_u *)24L, + #endif +! (char_u *)0L}}, + {"linespace", "lsp", P_NUM|P_VI_DEF|P_RCLR, + #ifdef FEAT_GUI + (char_u *)&p_linespace, PV_NONE, +--- 1608,1614 ---- + #else + (char_u *)24L, + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"linespace", "lsp", P_NUM|P_VI_DEF|P_RCLR, + #ifdef FEAT_GUI + (char_u *)&p_linespace, PV_NONE, +*************** +*** 1610,1623 **** + #else + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"lisp", NULL, P_BOOL|P_VI_DEF, + #ifdef FEAT_LISP + (char_u *)&p_lisp, PV_LISP, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"lispwords", "lw", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_LISP + (char_u *)&p_lispwords, PV_NONE, +--- 1620,1633 ---- + #else + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"lisp", NULL, P_BOOL|P_VI_DEF, + #ifdef FEAT_LISP + (char_u *)&p_lisp, PV_LISP, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"lispwords", "lw", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_LISP + (char_u *)&p_lispwords, PV_NONE, +*************** +*** 1626,1649 **** + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! }, + {"list", NULL, P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_LIST, +! {(char_u *)FALSE, (char_u *)0L}}, + {"listchars", "lcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, + (char_u *)&p_lcs, PV_NONE, +! {(char_u *)"eol:$", (char_u *)0L}}, + {"loadplugins", "lpl", P_BOOL|P_VI_DEF, + (char_u *)&p_lpl, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + #ifdef FEAT_GUI_MAC + {"macatsui", NULL, P_BOOL|P_VI_DEF|P_RCLR, + (char_u *)&p_macatsui, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + #endif + {"magic", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_magic, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"makeef", "mef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_mef, PV_NONE, +--- 1636,1659 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)"", (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"list", NULL, P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_LIST, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"listchars", "lcs", P_STRING|P_VI_DEF|P_RALL|P_COMMA|P_NODUP, + (char_u *)&p_lcs, PV_NONE, +! {(char_u *)"eol:$", (char_u *)0L} SCRIPTID_INIT}, + {"loadplugins", "lpl", P_BOOL|P_VI_DEF, + (char_u *)&p_lpl, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + #ifdef FEAT_GUI_MAC + {"macatsui", NULL, P_BOOL|P_VI_DEF|P_RCLR, + (char_u *)&p_macatsui, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + #endif + {"magic", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_magic, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"makeef", "mef", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_mef, PV_NONE, +*************** +*** 1652,1658 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"makeprg", "mp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_mp, PV_MP, +--- 1662,1668 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"makeprg", "mp", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_mp, PV_MP, +*************** +*** 1665,1713 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"matchpairs", "mps", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_mps, PV_MPS, +! {(char_u *)"(:),{:},[:]", (char_u *)0L}}, + {"matchtime", "mat", P_NUM|P_VI_DEF, + (char_u *)&p_mat, PV_NONE, +! {(char_u *)5L, (char_u *)0L}}, + {"maxcombine", "mco", P_NUM|P_VI_DEF, + #ifdef FEAT_MBYTE + (char_u *)&p_mco, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)2, (char_u *)0L}}, + {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF, + #ifdef FEAT_EVAL + (char_u *)&p_mfd, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)100L, (char_u *)0L}}, + {"maxmapdepth", "mmd", P_NUM|P_VI_DEF, + (char_u *)&p_mmd, PV_NONE, +! {(char_u *)1000L, (char_u *)0L}}, + {"maxmem", "mm", P_NUM|P_VI_DEF, + (char_u *)&p_mm, PV_NONE, +! {(char_u *)DFLT_MAXMEM, (char_u *)0L}}, + {"maxmempattern","mmp", P_NUM|P_VI_DEF, + (char_u *)&p_mmp, PV_NONE, +! {(char_u *)1000L, (char_u *)0L}}, + {"maxmemtot", "mmt", P_NUM|P_VI_DEF, + (char_u *)&p_mmt, PV_NONE, +! {(char_u *)DFLT_MAXMEMTOT, (char_u *)0L}}, + {"menuitems", "mis", P_NUM|P_VI_DEF, + #ifdef FEAT_MENU + (char_u *)&p_mis, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)25L, (char_u *)0L}}, + {"mesg", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"mkspellmem", "msm", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE, + #ifdef FEAT_SPELL + (char_u *)&p_msm, PV_NONE, +--- 1675,1726 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"matchpairs", "mps", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_mps, PV_MPS, +! {(char_u *)"(:),{:},[:]", (char_u *)0L} +! SCRIPTID_INIT}, + {"matchtime", "mat", P_NUM|P_VI_DEF, + (char_u *)&p_mat, PV_NONE, +! {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT}, + {"maxcombine", "mco", P_NUM|P_VI_DEF, + #ifdef FEAT_MBYTE + (char_u *)&p_mco, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)2, (char_u *)0L} SCRIPTID_INIT}, + {"maxfuncdepth", "mfd", P_NUM|P_VI_DEF, + #ifdef FEAT_EVAL + (char_u *)&p_mfd, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)100L, (char_u *)0L} SCRIPTID_INIT}, + {"maxmapdepth", "mmd", P_NUM|P_VI_DEF, + (char_u *)&p_mmd, PV_NONE, +! {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT}, + {"maxmem", "mm", P_NUM|P_VI_DEF, + (char_u *)&p_mm, PV_NONE, +! {(char_u *)DFLT_MAXMEM, (char_u *)0L} +! SCRIPTID_INIT}, + {"maxmempattern","mmp", P_NUM|P_VI_DEF, + (char_u *)&p_mmp, PV_NONE, +! {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT}, + {"maxmemtot", "mmt", P_NUM|P_VI_DEF, + (char_u *)&p_mmt, PV_NONE, +! {(char_u *)DFLT_MAXMEMTOT, (char_u *)0L} +! SCRIPTID_INIT}, + {"menuitems", "mis", P_NUM|P_VI_DEF, + #ifdef FEAT_MENU + (char_u *)&p_mis, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)25L, (char_u *)0L} SCRIPTID_INIT}, + {"mesg", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"mkspellmem", "msm", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE, + #ifdef FEAT_SPELL + (char_u *)&p_msm, PV_NONE, +*************** +*** 1716,1737 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"modeline", "ml", P_BOOL|P_VIM, + (char_u *)&p_ml, PV_ML, +! {(char_u *)FALSE, (char_u *)TRUE}}, + {"modelines", "mls", P_NUM|P_VI_DEF, + (char_u *)&p_mls, PV_NONE, +! {(char_u *)5L, (char_u *)0L}}, + {"modifiable", "ma", P_BOOL|P_VI_DEF|P_NOGLOB, + (char_u *)&p_ma, PV_MA, +! {(char_u *)TRUE, (char_u *)0L}}, + {"modified", "mod", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT, + (char_u *)&p_mod, PV_MOD, +! {(char_u *)FALSE, (char_u *)0L}}, + {"more", NULL, P_BOOL|P_VIM, + (char_u *)&p_more, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE}}, + {"mouse", NULL, P_STRING|P_VI_DEF|P_FLAGLIST, + (char_u *)&p_mouse, PV_NONE, + { +--- 1729,1750 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"modeline", "ml", P_BOOL|P_VIM, + (char_u *)&p_ml, PV_ML, +! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, + {"modelines", "mls", P_NUM|P_VI_DEF, + (char_u *)&p_mls, PV_NONE, +! {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT}, + {"modifiable", "ma", P_BOOL|P_VI_DEF|P_NOGLOB, + (char_u *)&p_ma, PV_MA, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"modified", "mod", P_BOOL|P_NO_MKRC|P_VI_DEF|P_RSTAT, + (char_u *)&p_mod, PV_MOD, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"more", NULL, P_BOOL|P_VIM, + (char_u *)&p_more, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, + {"mouse", NULL, P_STRING|P_VI_DEF|P_FLAGLIST, + (char_u *)&p_mouse, PV_NONE, + { +*************** +*** 1740,1760 **** + #else + (char_u *)"", + #endif +! (char_u *)0L}}, + {"mousefocus", "mousef", P_BOOL|P_VI_DEF, + #ifdef FEAT_GUI + (char_u *)&p_mousef, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"mousehide", "mh", P_BOOL|P_VI_DEF, + #ifdef FEAT_GUI + (char_u *)&p_mh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L}}, + {"mousemodel", "mousem", P_STRING|P_VI_DEF, + (char_u *)&p_mousem, PV_NONE, + { +--- 1753,1773 ---- + #else + (char_u *)"", + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"mousefocus", "mousef", P_BOOL|P_VI_DEF, + #ifdef FEAT_GUI + (char_u *)&p_mousef, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"mousehide", "mh", P_BOOL|P_VI_DEF, + #ifdef FEAT_GUI + (char_u *)&p_mh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"mousemodel", "mousem", P_STRING|P_VI_DEF, + (char_u *)&p_mousem, PV_NONE, + { +*************** +*** 1767,1773 **** + (char_u *)"extend", + # endif + #endif +! (char_u *)0L}}, + {"mouseshape", "mouses", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_MOUSESHAPE + (char_u *)&p_mouseshape, PV_NONE, +--- 1780,1786 ---- + (char_u *)"extend", + # endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"mouseshape", "mouses", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_MOUSESHAPE + (char_u *)&p_mouseshape, PV_NONE, +*************** +*** 1776,1808 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"mousetime", "mouset", P_NUM|P_VI_DEF, + (char_u *)&p_mouset, PV_NONE, +! {(char_u *)500L, (char_u *)0L}}, + {"mzquantum", "mzq", P_NUM, + #ifdef FEAT_MZSCHEME + (char_u *)&p_mzq, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)100L, (char_u *)100L}}, + {"novice", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"nrformats", "nf", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_nf, PV_NF, +! {(char_u *)"octal,hex", (char_u *)0L}}, + {"number", "nu", P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_NU, +! {(char_u *)FALSE, (char_u *)0L}}, + {"numberwidth", "nuw", P_NUM|P_RWIN|P_VIM, + #ifdef FEAT_LINEBREAK + (char_u *)VAR_WIN, PV_NUW, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)8L, (char_u *)4L}}, + {"omnifunc", "ofu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE, + #ifdef FEAT_COMPL_FUNC + (char_u *)&p_ofu, PV_OFU, +--- 1789,1822 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"mousetime", "mouset", P_NUM|P_VI_DEF, + (char_u *)&p_mouset, PV_NONE, +! {(char_u *)500L, (char_u *)0L} SCRIPTID_INIT}, + {"mzquantum", "mzq", P_NUM, + #ifdef FEAT_MZSCHEME + (char_u *)&p_mzq, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)100L, (char_u *)100L} SCRIPTID_INIT}, + {"novice", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"nrformats", "nf", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_nf, PV_NF, +! {(char_u *)"octal,hex", (char_u *)0L} +! SCRIPTID_INIT}, + {"number", "nu", P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_NU, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"numberwidth", "nuw", P_NUM|P_RWIN|P_VIM, + #ifdef FEAT_LINEBREAK + (char_u *)VAR_WIN, PV_NUW, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)8L, (char_u *)4L} SCRIPTID_INIT}, + {"omnifunc", "ofu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE, + #ifdef FEAT_COMPL_FUNC + (char_u *)&p_ofu, PV_OFU, +*************** +*** 1811,1820 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"open", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"opendevice", "odev", P_BOOL|P_VI_DEF, + #if defined(MSDOS) || defined(MSWIN) || defined(OS2) + (char_u *)&p_odev, PV_NONE, +--- 1825,1834 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"open", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"opendevice", "odev", P_BOOL|P_VI_DEF, + #if defined(MSDOS) || defined(MSWIN) || defined(OS2) + (char_u *)&p_odev, PV_NONE, +*************** +*** 1822,1834 **** + (char_u *)NULL, PV_NONE, + #endif + {(char_u *)FALSE, (char_u *)FALSE} +! }, + {"operatorfunc", "opfunc", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_opfunc, PV_NONE, +! {(char_u *)"", (char_u *)0L} }, + {"optimize", "opt", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_OSFILETYPE + (char_u *)&p_oft, PV_OFT, +--- 1836,1848 ---- + (char_u *)NULL, PV_NONE, + #endif + {(char_u *)FALSE, (char_u *)FALSE} +! SCRIPTID_INIT}, + {"operatorfunc", "opfunc", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_opfunc, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"optimize", "opt", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"osfiletype", "oft", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_OSFILETYPE + (char_u *)&p_oft, PV_OFT, +*************** +*** 1837,1853 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"paragraphs", "para", P_STRING|P_VI_DEF, + (char_u *)&p_para, PV_NONE, + {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp", +! (char_u *)0L}}, + {"paste", NULL, P_BOOL|P_VI_DEF|P_PRI_MKRC, + (char_u *)&p_paste, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"pastetoggle", "pt", P_STRING|P_VI_DEF, + (char_u *)&p_pt, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"patchexpr", "pex", P_STRING|P_VI_DEF|P_SECURE, + #if defined(FEAT_DIFF) && defined(FEAT_EVAL) + (char_u *)&p_pex, PV_NONE, +--- 1851,1867 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"paragraphs", "para", P_STRING|P_VI_DEF, + (char_u *)&p_para, PV_NONE, + {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp", +! (char_u *)0L} SCRIPTID_INIT}, + {"paste", NULL, P_BOOL|P_VI_DEF|P_PRI_MKRC, + (char_u *)&p_paste, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"pastetoggle", "pt", P_STRING|P_VI_DEF, + (char_u *)&p_pt, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"patchexpr", "pex", P_STRING|P_VI_DEF|P_SECURE, + #if defined(FEAT_DIFF) && defined(FEAT_EVAL) + (char_u *)&p_pex, PV_NONE, +*************** +*** 1856,1865 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"patchmode", "pm", P_STRING|P_VI_DEF|P_NFNAME, + (char_u *)&p_pm, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_path, PV_PATH, + { +--- 1870,1879 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"patchmode", "pm", P_STRING|P_VI_DEF|P_NFNAME, + (char_u *)&p_pm, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_path, PV_PATH, + { +*************** +*** 1872,1895 **** + (char_u *)".,/usr/include,,", + # endif + #endif +! (char_u *)0L}}, + {"preserveindent", "pi", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_pi, PV_PI, +! {(char_u *)FALSE, (char_u *)0L}}, + {"previewheight", "pvh", P_NUM|P_VI_DEF, + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) + (char_u *)&p_pvh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)12L, (char_u *)0L}}, + {"previewwindow", "pvw", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB, + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) + (char_u *)VAR_WIN, PV_PVW, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"printdevice", "pdev", P_STRING|P_VI_DEF|P_SECURE, + #ifdef FEAT_PRINTER + (char_u *)&p_pdev, PV_NONE, +--- 1886,1909 ---- + (char_u *)".,/usr/include,,", + # endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"preserveindent", "pi", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_pi, PV_PI, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"previewheight", "pvh", P_NUM|P_VI_DEF, + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) + (char_u *)&p_pvh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT}, + {"previewwindow", "pvw", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB, + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) + (char_u *)VAR_WIN, PV_PVW, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"printdevice", "pdev", P_STRING|P_VI_DEF|P_SECURE, + #ifdef FEAT_PRINTER + (char_u *)&p_pdev, PV_NONE, +*************** +*** 1898,1904 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printencoding", "penc", P_STRING|P_VI_DEF, + #ifdef FEAT_POSTSCRIPT + (char_u *)&p_penc, PV_NONE, +--- 1912,1918 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printencoding", "penc", P_STRING|P_VI_DEF, + #ifdef FEAT_POSTSCRIPT + (char_u *)&p_penc, PV_NONE, +*************** +*** 1907,1913 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printexpr", "pexpr", P_STRING|P_VI_DEF, + #ifdef FEAT_POSTSCRIPT + (char_u *)&p_pexpr, PV_NONE, +--- 1921,1927 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printexpr", "pexpr", P_STRING|P_VI_DEF, + #ifdef FEAT_POSTSCRIPT + (char_u *)&p_pexpr, PV_NONE, +*************** +*** 1916,1922 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printfont", "pfn", P_STRING|P_VI_DEF, + #ifdef FEAT_PRINTER + (char_u *)&p_pfn, PV_NONE, +--- 1930,1936 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printfont", "pfn", P_STRING|P_VI_DEF, + #ifdef FEAT_PRINTER + (char_u *)&p_pfn, PV_NONE, +*************** +*** 1931,1937 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printheader", "pheader", P_STRING|P_VI_DEF|P_GETTEXT, + #ifdef FEAT_PRINTER + (char_u *)&p_header, PV_NONE, +--- 1945,1951 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printheader", "pheader", P_STRING|P_VI_DEF|P_GETTEXT, + #ifdef FEAT_PRINTER + (char_u *)&p_header, PV_NONE, +*************** +*** 1940,1946 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printmbcharset", "pmbcs", P_STRING|P_VI_DEF, + #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE) + (char_u *)&p_pmcs, PV_NONE, +--- 1954,1960 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printmbcharset", "pmbcs", P_STRING|P_VI_DEF, + #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE) + (char_u *)&p_pmcs, PV_NONE, +*************** +*** 1949,1955 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printmbfont", "pmbfn", P_STRING|P_VI_DEF, + #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE) + (char_u *)&p_pmfn, PV_NONE, +--- 1963,1969 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printmbfont", "pmbfn", P_STRING|P_VI_DEF, + #if defined(FEAT_POSTSCRIPT) && defined(FEAT_MBYTE) + (char_u *)&p_pmfn, PV_NONE, +*************** +*** 1958,1964 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"printoptions", "popt", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_PRINTER + (char_u *)&p_popt, PV_NONE, +--- 1972,1978 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"printoptions", "popt", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_PRINTER + (char_u *)&p_popt, PV_NONE, +*************** +*** 1967,1983 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"prompt", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_prompt, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"pumheight", "ph", P_NUM|P_VI_DEF, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_ph, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L}}, + {"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_TEXTOBJ + (char_u *)&p_qe, PV_QE, +--- 1981,1997 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"prompt", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_prompt, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"pumheight", "ph", P_NUM|P_VI_DEF, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_ph, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"quoteescape", "qe", P_STRING|P_ALLOCED|P_VI_DEF, + #ifdef FEAT_TEXTOBJ + (char_u *)&p_qe, PV_QE, +*************** +*** 1986,2032 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"readonly", "ro", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB, + (char_u *)&p_ro, PV_RO, +! {(char_u *)FALSE, (char_u *)0L}}, + {"redraw", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"redrawtime", "rdt", P_NUM|P_VI_DEF, + #ifdef FEAT_RELTIME + (char_u *)&p_rdt, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)2000L, (char_u *)0L}}, + {"remap", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_remap, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"report", NULL, P_NUM|P_VI_DEF, + (char_u *)&p_report, PV_NONE, +! {(char_u *)2L, (char_u *)0L}}, + {"restorescreen", "rs", P_BOOL|P_VI_DEF, + #ifdef WIN3264 + (char_u *)&p_rs, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L}}, + {"revins", "ri", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_ri, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"rightleft", "rl", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_RIGHTLEFT + (char_u *)VAR_WIN, PV_RL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"rightleftcmd", "rlc", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN, + #ifdef FEAT_RIGHTLEFT + (char_u *)VAR_WIN, PV_RLC, +--- 2000,2046 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"readonly", "ro", P_BOOL|P_VI_DEF|P_RSTAT|P_NOGLOB, + (char_u *)&p_ro, PV_RO, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"redraw", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"redrawtime", "rdt", P_NUM|P_VI_DEF, + #ifdef FEAT_RELTIME + (char_u *)&p_rdt, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT}, + {"remap", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_remap, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"report", NULL, P_NUM|P_VI_DEF, + (char_u *)&p_report, PV_NONE, +! {(char_u *)2L, (char_u *)0L} SCRIPTID_INIT}, + {"restorescreen", "rs", P_BOOL|P_VI_DEF, + #ifdef WIN3264 + (char_u *)&p_rs, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"revins", "ri", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_RIGHTLEFT + (char_u *)&p_ri, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"rightleft", "rl", P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_RIGHTLEFT + (char_u *)VAR_WIN, PV_RL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"rightleftcmd", "rlc", P_STRING|P_ALLOCED|P_VI_DEF|P_RWIN, + #ifdef FEAT_RIGHTLEFT + (char_u *)VAR_WIN, PV_RLC, +*************** +*** 2035,2074 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"ruler", "ru", P_BOOL|P_VI_DEF|P_VIM|P_RSTAT, + #ifdef FEAT_CMDL_INFO + (char_u *)&p_ru, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"rulerformat", "ruf", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT, + #ifdef FEAT_STL_OPT + (char_u *)&p_ruf, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"runtimepath", "rtp", P_STRING|P_VI_DEF|P_EXPAND|P_COMMA|P_NODUP|P_SECURE, + (char_u *)&p_rtp, PV_NONE, +! {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L}}, + {"scroll", "scr", P_NUM|P_NO_MKRC|P_VI_DEF, + (char_u *)VAR_WIN, PV_SCROLL, +! {(char_u *)12L, (char_u *)0L}}, + {"scrollbind", "scb", P_BOOL|P_VI_DEF, + #ifdef FEAT_SCROLLBIND + (char_u *)VAR_WIN, PV_SCBIND, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"scrolljump", "sj", P_NUM|P_VI_DEF|P_VIM, + (char_u *)&p_sj, PV_NONE, +! {(char_u *)1L, (char_u *)0L}}, + {"scrolloff", "so", P_NUM|P_VI_DEF|P_VIM|P_RALL, + (char_u *)&p_so, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"scrollopt", "sbo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SCROLLBIND + (char_u *)&p_sbo, PV_NONE, +--- 2049,2089 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"ruler", "ru", P_BOOL|P_VI_DEF|P_VIM|P_RSTAT, + #ifdef FEAT_CMDL_INFO + (char_u *)&p_ru, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"rulerformat", "ruf", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT, + #ifdef FEAT_STL_OPT + (char_u *)&p_ruf, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"runtimepath", "rtp", P_STRING|P_VI_DEF|P_EXPAND|P_COMMA|P_NODUP|P_SECURE, + (char_u *)&p_rtp, PV_NONE, +! {(char_u *)DFLT_RUNTIMEPATH, (char_u *)0L} +! SCRIPTID_INIT}, + {"scroll", "scr", P_NUM|P_NO_MKRC|P_VI_DEF, + (char_u *)VAR_WIN, PV_SCROLL, +! {(char_u *)12L, (char_u *)0L} SCRIPTID_INIT}, + {"scrollbind", "scb", P_BOOL|P_VI_DEF, + #ifdef FEAT_SCROLLBIND + (char_u *)VAR_WIN, PV_SCBIND, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"scrolljump", "sj", P_NUM|P_VI_DEF|P_VIM, + (char_u *)&p_sj, PV_NONE, +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"scrolloff", "so", P_NUM|P_VI_DEF|P_VIM|P_RALL, + (char_u *)&p_so, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"scrollopt", "sbo", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SCROLLBIND + (char_u *)&p_sbo, PV_NONE, +*************** +*** 2077,2103 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"sections", "sect", P_STRING|P_VI_DEF, + (char_u *)&p_sections, PV_NONE, +! {(char_u *)"SHNHH HUnhsh", (char_u *)0L}}, + {"secure", NULL, P_BOOL|P_VI_DEF|P_SECURE, + (char_u *)&p_secure, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"selection", "sel", P_STRING|P_VI_DEF, + #ifdef FEAT_VISUAL + (char_u *)&p_sel, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"inclusive", (char_u *)0L}}, + {"selectmode", "slm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_VISUAL + (char_u *)&p_slm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SESSION + (char_u *)&p_ssop, PV_NONE, +--- 2092,2120 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"sections", "sect", P_STRING|P_VI_DEF, + (char_u *)&p_sections, PV_NONE, +! {(char_u *)"SHNHH HUnhsh", (char_u *)0L} +! SCRIPTID_INIT}, + {"secure", NULL, P_BOOL|P_VI_DEF|P_SECURE, + (char_u *)&p_secure, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"selection", "sel", P_STRING|P_VI_DEF, + #ifdef FEAT_VISUAL + (char_u *)&p_sel, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"inclusive", (char_u *)0L} +! SCRIPTID_INIT}, + {"selectmode", "slm", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_VISUAL + (char_u *)&p_slm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SESSION + (char_u *)&p_ssop, PV_NONE, +*************** +*** 2107,2113 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"shell", "sh", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_sh, PV_NONE, + { +--- 2124,2130 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"shell", "sh", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_sh, PV_NONE, + { +*************** +*** 2136,2142 **** + # endif + # endif + #endif /* VMS */ +! (char_u *)0L}}, + {"shellcmdflag","shcf", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_shcf, PV_NONE, + { +--- 2153,2159 ---- + # endif + # endif + #endif /* VMS */ +! (char_u *)0L} SCRIPTID_INIT}, + {"shellcmdflag","shcf", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_shcf, PV_NONE, + { +*************** +*** 2149,2155 **** + (char_u *)"-c", + # endif + #endif +! (char_u *)0L}}, + {"shellpipe", "sp", P_STRING|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_sp, PV_NONE, +--- 2166,2172 ---- + (char_u *)"-c", + # endif + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"shellpipe", "sp", P_STRING|P_VI_DEF|P_SECURE, + #ifdef FEAT_QUICKFIX + (char_u *)&p_sp, PV_NONE, +*************** +*** 2168,2197 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"shellquote", "shq", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_shq, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"shellredir", "srr", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_srr, PV_NONE, +! {(char_u *)">", (char_u *)0L}}, + {"shellslash", "ssl", P_BOOL|P_VI_DEF, + #ifdef BACKSLASH_IN_FILENAME + (char_u *)&p_ssl, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"shelltemp", "stmp", P_BOOL, + (char_u *)&p_stmp, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE}}, + {"shelltype", "st", P_NUM|P_VI_DEF, + #ifdef AMIGA + (char_u *)&p_st, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L}}, + {"shellxquote", "sxq", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_sxq, PV_NONE, + { +--- 2185,2214 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"shellquote", "shq", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_shq, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"shellredir", "srr", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_srr, PV_NONE, +! {(char_u *)">", (char_u *)0L} SCRIPTID_INIT}, + {"shellslash", "ssl", P_BOOL|P_VI_DEF, + #ifdef BACKSLASH_IN_FILENAME + (char_u *)&p_ssl, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"shelltemp", "stmp", P_BOOL, + (char_u *)&p_stmp, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, + {"shelltype", "st", P_NUM|P_VI_DEF, + #ifdef AMIGA + (char_u *)&p_st, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"shellxquote", "sxq", P_STRING|P_VI_DEF|P_SECURE, + (char_u *)&p_sxq, PV_NONE, + { +*************** +*** 2200,2229 **** + #else + (char_u *)"", + #endif +! (char_u *)0L}}, + {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_sr, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"shiftwidth", "sw", P_NUM|P_VI_DEF, + (char_u *)&p_sw, PV_SW, +! {(char_u *)8L, (char_u *)0L}}, + {"shortmess", "shm", P_STRING|P_VIM|P_FLAGLIST, + (char_u *)&p_shm, PV_NONE, +! {(char_u *)"", (char_u *)"filnxtToO"}}, + {"shortname", "sn", P_BOOL|P_VI_DEF, + #ifdef SHORT_FNAME + (char_u *)NULL, PV_NONE, + #else + (char_u *)&p_sn, PV_SN, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"showbreak", "sbr", P_STRING|P_VI_DEF|P_RALL, + #ifdef FEAT_LINEBREAK + (char_u *)&p_sbr, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"showcmd", "sc", P_BOOL|P_VIM, + #ifdef FEAT_CMDL_INFO + (char_u *)&p_sc, PV_NONE, +--- 2217,2247 ---- + #else + (char_u *)"", + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"shiftround", "sr", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_sr, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"shiftwidth", "sw", P_NUM|P_VI_DEF, + (char_u *)&p_sw, PV_SW, +! {(char_u *)8L, (char_u *)0L} SCRIPTID_INIT}, + {"shortmess", "shm", P_STRING|P_VIM|P_FLAGLIST, + (char_u *)&p_shm, PV_NONE, +! {(char_u *)"", (char_u *)"filnxtToO"} +! SCRIPTID_INIT}, + {"shortname", "sn", P_BOOL|P_VI_DEF, + #ifdef SHORT_FNAME + (char_u *)NULL, PV_NONE, + #else + (char_u *)&p_sn, PV_SN, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"showbreak", "sbr", P_STRING|P_VI_DEF|P_RALL, + #ifdef FEAT_LINEBREAK + (char_u *)&p_sbr, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"showcmd", "sc", P_BOOL|P_VIM, + #ifdef FEAT_CMDL_INFO + (char_u *)&p_sc, PV_NONE, +*************** +*** 2236,2293 **** + #else + (char_u *)TRUE + #endif +! }}, + {"showfulltag", "sft", P_BOOL|P_VI_DEF, + (char_u *)&p_sft, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"showmatch", "sm", P_BOOL|P_VI_DEF, + (char_u *)&p_sm, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"showmode", "smd", P_BOOL|P_VIM, + (char_u *)&p_smd, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE}}, + {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL, + #ifdef FEAT_WINDOWS + (char_u *)&p_stal, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L}}, + {"sidescroll", "ss", P_NUM|P_VI_DEF, + (char_u *)&p_ss, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"sidescrolloff", "siso", P_NUM|P_VI_DEF|P_VIM|P_RBUF, + (char_u *)&p_siso, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"slowopen", "slow", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"smartcase", "scs", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_scs, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"smartindent", "si", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_SMARTINDENT + (char_u *)&p_si, PV_SI, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"smarttab", "sta", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_sta, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"softtabstop", "sts", P_NUM|P_VI_DEF|P_VIM, + (char_u *)&p_sts, PV_STS, +! {(char_u *)0L, (char_u *)0L}}, + {"sourceany", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"spell", NULL, P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_SPELL + (char_u *)VAR_WIN, PV_SPELL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF, + #ifdef FEAT_SPELL + (char_u *)&p_spc, PV_SPC, +--- 2254,2311 ---- + #else + (char_u *)TRUE + #endif +! } SCRIPTID_INIT}, + {"showfulltag", "sft", P_BOOL|P_VI_DEF, + (char_u *)&p_sft, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"showmatch", "sm", P_BOOL|P_VI_DEF, + (char_u *)&p_sm, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"showmode", "smd", P_BOOL|P_VIM, + (char_u *)&p_smd, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, + {"showtabline", "stal", P_NUM|P_VI_DEF|P_RALL, + #ifdef FEAT_WINDOWS + (char_u *)&p_stal, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"sidescroll", "ss", P_NUM|P_VI_DEF, + (char_u *)&p_ss, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"sidescrolloff", "siso", P_NUM|P_VI_DEF|P_VIM|P_RBUF, + (char_u *)&p_siso, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"slowopen", "slow", P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"smartcase", "scs", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_scs, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"smartindent", "si", P_BOOL|P_VI_DEF|P_VIM, + #ifdef FEAT_SMARTINDENT + (char_u *)&p_si, PV_SI, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"smarttab", "sta", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_sta, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"softtabstop", "sts", P_NUM|P_VI_DEF|P_VIM, + (char_u *)&p_sts, PV_STS, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"sourceany", NULL, P_BOOL|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"spell", NULL, P_BOOL|P_VI_DEF|P_RWIN, + #ifdef FEAT_SPELL + (char_u *)VAR_WIN, PV_SPELL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"spellcapcheck", "spc", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF, + #ifdef FEAT_SPELL + (char_u *)&p_spc, PV_SPC, +*************** +*** 2296,2302 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"spellfile", "spf", P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_SECURE|P_COMMA, + #ifdef FEAT_SPELL + (char_u *)&p_spf, PV_SPF, +--- 2314,2320 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"spellfile", "spf", P_STRING|P_EXPAND|P_ALLOCED|P_VI_DEF|P_SECURE|P_COMMA, + #ifdef FEAT_SPELL + (char_u *)&p_spf, PV_SPF, +*************** +*** 2305,2311 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"spelllang", "spl", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF|P_EXPAND, + #ifdef FEAT_SPELL + (char_u *)&p_spl, PV_SPL, +--- 2323,2329 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"spelllang", "spl", P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_RBUF|P_EXPAND, + #ifdef FEAT_SPELL + (char_u *)&p_spl, PV_SPL, +*************** +*** 2314,2320 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA, + #ifdef FEAT_SPELL + (char_u *)&p_sps, PV_NONE, +--- 2332,2338 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA, + #ifdef FEAT_SPELL + (char_u *)&p_sps, PV_NONE, +*************** +*** 2323,2357 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"splitbelow", "sb", P_BOOL|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_sb, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"splitright", "spr", P_BOOL|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_spr, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"startofline", "sol", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_sol, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"statusline" ,"stl", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT, + #ifdef FEAT_STL_OPT + (char_u *)&p_stl, PV_STL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"suffixes", "su", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_su, PV_NONE, + {(char_u *)".bak,~,.o,.h,.info,.swp,.obj", +! (char_u *)0L}}, + {"suffixesadd", "sua", P_STRING|P_VI_DEF|P_ALLOCED|P_COMMA|P_NODUP, + #ifdef FEAT_SEARCHPATH + (char_u *)&p_sua, PV_SUA, +--- 2341,2375 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"splitbelow", "sb", P_BOOL|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_sb, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"splitright", "spr", P_BOOL|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_spr, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"startofline", "sol", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_sol, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"statusline" ,"stl", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT, + #ifdef FEAT_STL_OPT + (char_u *)&p_stl, PV_STL, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"suffixes", "su", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_su, PV_NONE, + {(char_u *)".bak,~,.o,.h,.info,.swp,.obj", +! (char_u *)0L} SCRIPTID_INIT}, + {"suffixesadd", "sua", P_STRING|P_VI_DEF|P_ALLOCED|P_COMMA|P_NODUP, + #ifdef FEAT_SEARCHPATH + (char_u *)&p_sua, PV_SUA, +*************** +*** 2360,2375 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"swapfile", "swf", P_BOOL|P_VI_DEF|P_RSTAT, + (char_u *)&p_swf, PV_SWF, +! {(char_u *)TRUE, (char_u *)0L}}, + {"swapsync", "sws", P_STRING|P_VI_DEF, + (char_u *)&p_sws, PV_NONE, +! {(char_u *)"fsync", (char_u *)0L}}, + {"switchbuf", "swb", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_swb, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"synmaxcol", "smc", P_NUM|P_VI_DEF|P_RBUF, + #ifdef FEAT_SYN_HL + (char_u *)&p_smc, PV_SMC, +--- 2378,2393 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"swapfile", "swf", P_BOOL|P_VI_DEF|P_RSTAT, + (char_u *)&p_swf, PV_SWF, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"swapsync", "sws", P_STRING|P_VI_DEF, + (char_u *)&p_sws, PV_NONE, +! {(char_u *)"fsync", (char_u *)0L} SCRIPTID_INIT}, + {"switchbuf", "swb", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_swb, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"synmaxcol", "smc", P_NUM|P_VI_DEF|P_RBUF, + #ifdef FEAT_SYN_HL + (char_u *)&p_smc, PV_SMC, +*************** +*** 2378,2384 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"syntax", "syn", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, + #ifdef FEAT_SYN_HL + (char_u *)&p_syn, PV_SYN, +--- 2396,2402 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"syntax", "syn", P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME, + #ifdef FEAT_SYN_HL + (char_u *)&p_syn, PV_SYN, +*************** +*** 2387,2410 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"tabline", "tal", P_STRING|P_VI_DEF|P_RALL, + #ifdef FEAT_STL_OPT + (char_u *)&p_tal, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"tabpagemax", "tpm", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_tpm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)10L, (char_u *)0L}}, + {"tabstop", "ts", P_NUM|P_VI_DEF|P_RBUF, + (char_u *)&p_ts, PV_TS, +! {(char_u *)8L, (char_u *)0L}}, + {"tagbsearch", "tbs", P_BOOL|P_VI_DEF, + (char_u *)&p_tbs, PV_NONE, + #ifdef VMS /* binary searching doesn't appear to work on VMS */ +--- 2405,2428 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"tabline", "tal", P_STRING|P_VI_DEF|P_RALL, + #ifdef FEAT_STL_OPT + (char_u *)&p_tal, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"tabpagemax", "tpm", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_tpm, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)10L, (char_u *)0L} SCRIPTID_INIT}, + {"tabstop", "ts", P_NUM|P_VI_DEF|P_RBUF, + (char_u *)&p_ts, PV_TS, +! {(char_u *)8L, (char_u *)0L} SCRIPTID_INIT}, + {"tagbsearch", "tbs", P_BOOL|P_VI_DEF, + (char_u *)&p_tbs, PV_NONE, + #ifdef VMS /* binary searching doesn't appear to work on VMS */ +*************** +*** 2412,2424 **** + #else + {(char_u *)TRUE, (char_u *)0L} + #endif +! }, + {"taglength", "tl", P_NUM|P_VI_DEF, + (char_u *)&p_tl, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"tagrelative", "tr", P_BOOL|P_VIM, + (char_u *)&p_tr, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE}}, + {"tags", "tag", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_tags, PV_TAGS, + { +--- 2430,2442 ---- + #else + {(char_u *)TRUE, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"taglength", "tl", P_NUM|P_VI_DEF, + (char_u *)&p_tl, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"tagrelative", "tr", P_BOOL|P_VIM, + (char_u *)&p_tr, PV_NONE, +! {(char_u *)FALSE, (char_u *)TRUE} SCRIPTID_INIT}, + {"tags", "tag", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_tags, PV_TAGS, + { +*************** +*** 2427,2446 **** + #else + (char_u *)"./tags,tags", + #endif +! (char_u *)0L}}, + {"tagstack", "tgst", P_BOOL|P_VI_DEF, + (char_u *)&p_tgst, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"term", NULL, P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL, + (char_u *)&T_NAME, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"termbidi", "tbidi", P_BOOL|P_VI_DEF, + #ifdef FEAT_ARABIC + (char_u *)&p_tbidi, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"termencoding", "tenc", P_STRING|P_VI_DEF|P_RCLR, + #ifdef FEAT_MBYTE + (char_u *)&p_tenc, PV_NONE, +--- 2445,2464 ---- + #else + (char_u *)"./tags,tags", + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"tagstack", "tgst", P_BOOL|P_VI_DEF, + (char_u *)&p_tgst, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"term", NULL, P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL, + (char_u *)&T_NAME, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"termbidi", "tbidi", P_BOOL|P_VI_DEF, + #ifdef FEAT_ARABIC + (char_u *)&p_tbidi, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"termencoding", "tenc", P_STRING|P_VI_DEF|P_RCLR, + #ifdef FEAT_MBYTE + (char_u *)&p_tenc, PV_NONE, +*************** +*** 2449,2461 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"terse", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_terse, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"textauto", "ta", P_BOOL|P_VIM, + (char_u *)&p_ta, PV_NONE, +! {(char_u *)DFLT_TEXTAUTO, (char_u *)TRUE}}, + {"textmode", "tx", P_BOOL|P_VI_DEF|P_NO_MKRC, + (char_u *)&p_tx, PV_TX, + { +--- 2467,2480 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"terse", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_terse, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"textauto", "ta", P_BOOL|P_VIM, + (char_u *)&p_ta, PV_NONE, +! {(char_u *)DFLT_TEXTAUTO, (char_u *)TRUE} +! SCRIPTID_INIT}, + {"textmode", "tx", P_BOOL|P_VI_DEF|P_NO_MKRC, + (char_u *)&p_tx, PV_TX, + { +*************** +*** 2464,2503 **** + #else + (char_u *)FALSE, + #endif +! (char_u *)0L}}, + {"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM, + (char_u *)&p_tw, PV_TW, +! {(char_u *)0L, (char_u *)0L}}, + {"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_tsr, PV_TSR, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"tildeop", "top", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_to, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"timeout", "to", P_BOOL|P_VI_DEF, + (char_u *)&p_timeout, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"timeoutlen", "tm", P_NUM|P_VI_DEF, + (char_u *)&p_tm, PV_NONE, +! {(char_u *)1000L, (char_u *)0L}}, + {"title", NULL, P_BOOL|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_title, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"titlelen", NULL, P_NUM|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_titlelen, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)85L, (char_u *)0L}}, + {"titleold", NULL, P_STRING|P_VI_DEF|P_GETTEXT|P_SECURE|P_NO_MKRC, + #ifdef FEAT_TITLE + (char_u *)&p_titleold, PV_NONE, +--- 2483,2522 ---- + #else + (char_u *)FALSE, + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM, + (char_u *)&p_tw, PV_TW, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_INS_EXPAND + (char_u *)&p_tsr, PV_TSR, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"tildeop", "top", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_to, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"timeout", "to", P_BOOL|P_VI_DEF, + (char_u *)&p_timeout, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"timeoutlen", "tm", P_NUM|P_VI_DEF, + (char_u *)&p_tm, PV_NONE, +! {(char_u *)1000L, (char_u *)0L} SCRIPTID_INIT}, + {"title", NULL, P_BOOL|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_title, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"titlelen", NULL, P_NUM|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_titlelen, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)85L, (char_u *)0L} SCRIPTID_INIT}, + {"titleold", NULL, P_STRING|P_VI_DEF|P_GETTEXT|P_SECURE|P_NO_MKRC, + #ifdef FEAT_TITLE + (char_u *)&p_titleold, PV_NONE, +*************** +*** 2507,2555 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"titlestring", NULL, P_STRING|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_titlestring, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32) + {"toolbar", "tb", P_STRING|P_COMMA|P_VI_DEF|P_NODUP, + (char_u *)&p_toolbar, PV_NONE, +! {(char_u *)"icons,tooltips", (char_u *)0L}}, + #endif + #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) + {"toolbariconsize", "tbis", P_STRING|P_VI_DEF, + (char_u *)&p_tbis, PV_NONE, +! {(char_u *)"small", (char_u *)0L}}, + #endif + {"ttimeout", NULL, P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_ttimeout, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"ttimeoutlen", "ttm", P_NUM|P_VI_DEF, + (char_u *)&p_ttm, PV_NONE, +! {(char_u *)-1L, (char_u *)0L}}, + {"ttybuiltin", "tbi", P_BOOL|P_VI_DEF, + (char_u *)&p_tbi, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"ttyfast", "tf", P_BOOL|P_NO_MKRC|P_VI_DEF, + (char_u *)&p_tf, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"ttymouse", "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF, + #if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS)) + (char_u *)&p_ttym, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"ttyscroll", "tsl", P_NUM|P_VI_DEF, + (char_u *)&p_ttyscroll, PV_NONE, +! {(char_u *)999L, (char_u *)0L}}, + {"ttytype", "tty", P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL, + (char_u *)&T_NAME, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"undolevels", "ul", P_NUM|P_VI_DEF, + (char_u *)&p_ul, PV_NONE, + { +--- 2526,2575 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"titlestring", NULL, P_STRING|P_VI_DEF, + #ifdef FEAT_TITLE + (char_u *)&p_titlestring, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + #if defined(FEAT_TOOLBAR) && !defined(FEAT_GUI_W32) + {"toolbar", "tb", P_STRING|P_COMMA|P_VI_DEF|P_NODUP, + (char_u *)&p_toolbar, PV_NONE, +! {(char_u *)"icons,tooltips", (char_u *)0L} +! SCRIPTID_INIT}, + #endif + #if defined(FEAT_TOOLBAR) && defined(FEAT_GUI_GTK) && defined(HAVE_GTK2) + {"toolbariconsize", "tbis", P_STRING|P_VI_DEF, + (char_u *)&p_tbis, PV_NONE, +! {(char_u *)"small", (char_u *)0L} SCRIPTID_INIT}, + #endif + {"ttimeout", NULL, P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_ttimeout, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"ttimeoutlen", "ttm", P_NUM|P_VI_DEF, + (char_u *)&p_ttm, PV_NONE, +! {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT}, + {"ttybuiltin", "tbi", P_BOOL|P_VI_DEF, + (char_u *)&p_tbi, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"ttyfast", "tf", P_BOOL|P_NO_MKRC|P_VI_DEF, + (char_u *)&p_tf, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"ttymouse", "ttym", P_STRING|P_NODEFAULT|P_NO_MKRC|P_VI_DEF, + #if defined(FEAT_MOUSE) && (defined(UNIX) || defined(VMS)) + (char_u *)&p_ttym, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"ttyscroll", "tsl", P_NUM|P_VI_DEF, + (char_u *)&p_ttyscroll, PV_NONE, +! {(char_u *)999L, (char_u *)0L} SCRIPTID_INIT}, + {"ttytype", "tty", P_STRING|P_EXPAND|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RALL, + (char_u *)&T_NAME, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"undolevels", "ul", P_NUM|P_VI_DEF, + (char_u *)&p_ul, PV_NONE, + { +*************** +*** 2558,2576 **** + #else + (char_u *)100L, + #endif +! (char_u *)0L}}, + {"updatecount", "uc", P_NUM|P_VI_DEF, + (char_u *)&p_uc, PV_NONE, +! {(char_u *)200L, (char_u *)0L}}, + {"updatetime", "ut", P_NUM|P_VI_DEF, + (char_u *)&p_ut, PV_NONE, +! {(char_u *)4000L, (char_u *)0L}}, + {"verbose", "vbs", P_NUM|P_VI_DEF, + (char_u *)&p_verbose, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"verbosefile", "vfile", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_vfile, PV_NONE, +! {(char_u *)"", (char_u *)0L}}, + {"viewdir", "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_SESSION + (char_u *)&p_vdir, PV_NONE, +--- 2578,2596 ---- + #else + (char_u *)100L, + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"updatecount", "uc", P_NUM|P_VI_DEF, + (char_u *)&p_uc, PV_NONE, +! {(char_u *)200L, (char_u *)0L} SCRIPTID_INIT}, + {"updatetime", "ut", P_NUM|P_VI_DEF, + (char_u *)&p_ut, PV_NONE, +! {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT}, + {"verbose", "vbs", P_NUM|P_VI_DEF, + (char_u *)&p_verbose, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"verbosefile", "vfile", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + (char_u *)&p_vfile, PV_NONE, +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"viewdir", "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, + #ifdef FEAT_SESSION + (char_u *)&p_vdir, PV_NONE, +*************** +*** 2579,2585 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"viewoptions", "vop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SESSION + (char_u *)&p_vop, PV_NONE, +--- 2599,2605 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"viewoptions", "vop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_SESSION + (char_u *)&p_vop, PV_NONE, +*************** +*** 2588,2594 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"viminfo", "vi", P_STRING|P_COMMA|P_NODUP|P_SECURE, + #ifdef FEAT_VIMINFO + (char_u *)&p_viminfo, PV_NONE, +--- 2608,2614 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"viminfo", "vi", P_STRING|P_COMMA|P_NODUP|P_SECURE, + #ifdef FEAT_VIMINFO + (char_u *)&p_viminfo, PV_NONE, +*************** +*** 2606,2612 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM, + #ifdef FEAT_VIRTUALEDIT + (char_u *)&p_ve, PV_NONE, +--- 2626,2632 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"virtualedit", "ve", P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM, + #ifdef FEAT_VIRTUALEDIT + (char_u *)&p_ve, PV_NONE, +*************** +*** 2615,2665 **** + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! }, + {"visualbell", "vb", P_BOOL|P_VI_DEF, + (char_u *)&p_vb, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"w300", NULL, P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"w1200", NULL, P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"w9600", NULL, P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"warn", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_warn, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"weirdinvert", "wiv", P_BOOL|P_VI_DEF|P_RCLR, + (char_u *)&p_wiv, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"whichwrap", "ww", P_STRING|P_VIM|P_COMMA|P_FLAGLIST, + (char_u *)&p_ww, PV_NONE, +! {(char_u *)"", (char_u *)"b,s"}}, + {"wildchar", "wc", P_NUM|P_VIM, + (char_u *)&p_wc, PV_NONE, +! {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}}, + {"wildcharm", "wcm", P_NUM|P_VI_DEF, + (char_u *)&p_wcm, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"wildignore", "wig", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_WILDIGN + (char_u *)&p_wig, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L}}, + {"wildmenu", "wmnu", P_BOOL|P_VI_DEF, + #ifdef FEAT_WILDMENU + (char_u *)&p_wmnu, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"wildmode", "wim", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_wim, PV_NONE, +! {(char_u *)"full", (char_u *)0L}}, + {"wildoptions", "wop", P_STRING|P_VI_DEF, + #ifdef FEAT_CMDL_COMPL + (char_u *)&p_wop, PV_NONE, +--- 2635,2686 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)0L, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"visualbell", "vb", P_BOOL|P_VI_DEF, + (char_u *)&p_vb, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"w300", NULL, P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"w1200", NULL, P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"w9600", NULL, P_NUM|P_VI_DEF, + (char_u *)NULL, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"warn", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_warn, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"weirdinvert", "wiv", P_BOOL|P_VI_DEF|P_RCLR, + (char_u *)&p_wiv, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"whichwrap", "ww", P_STRING|P_VIM|P_COMMA|P_FLAGLIST, + (char_u *)&p_ww, PV_NONE, +! {(char_u *)"", (char_u *)"b,s"} SCRIPTID_INIT}, + {"wildchar", "wc", P_NUM|P_VIM, + (char_u *)&p_wc, PV_NONE, +! {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB} +! SCRIPTID_INIT}, + {"wildcharm", "wcm", P_NUM|P_VI_DEF, + (char_u *)&p_wcm, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"wildignore", "wig", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + #ifdef FEAT_WILDIGN + (char_u *)&p_wig, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + {"wildmenu", "wmnu", P_BOOL|P_VI_DEF, + #ifdef FEAT_WILDMENU + (char_u *)&p_wmnu, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"wildmode", "wim", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, + (char_u *)&p_wim, PV_NONE, +! {(char_u *)"full", (char_u *)0L} SCRIPTID_INIT}, + {"wildoptions", "wop", P_STRING|P_VI_DEF, + #ifdef FEAT_CMDL_COMPL + (char_u *)&p_wop, PV_NONE, +*************** +*** 2668,2674 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"winaltkeys", "wak", P_STRING|P_VI_DEF, + #ifdef FEAT_WAK + (char_u *)&p_wak, PV_NONE, +--- 2689,2695 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"winaltkeys", "wak", P_STRING|P_VI_DEF, + #ifdef FEAT_WAK + (char_u *)&p_wak, PV_NONE, +*************** +*** 2677,2743 **** + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! }, + {"window", "wi", P_NUM|P_VI_DEF, + (char_u *)&p_window, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + {"winheight", "wh", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_wh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L}}, + {"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT, + #ifdef FEAT_WINDOWS + (char_u *)VAR_WIN, PV_WFH, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT, + #ifdef FEAT_VERTSPLIT + (char_u *)VAR_WIN, PV_WFW, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L}}, + {"winminheight", "wmh", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_wmh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L}}, + {"winminwidth", "wmw", P_NUM|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_wmw, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L}}, + {"winwidth", "wiw", P_NUM|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_wiw, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)20L, (char_u *)0L}}, + {"wrap", NULL, P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_WRAP, +! {(char_u *)TRUE, (char_u *)0L}}, + {"wrapmargin", "wm", P_NUM|P_VI_DEF, + (char_u *)&p_wm, PV_WM, +! {(char_u *)0L, (char_u *)0L}}, + {"wrapscan", "ws", P_BOOL|P_VI_DEF, + (char_u *)&p_ws, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"write", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_write, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L}}, + {"writeany", "wa", P_BOOL|P_VI_DEF, + (char_u *)&p_wa, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L}}, + {"writebackup", "wb", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_wb, PV_NONE, + { +--- 2698,2764 ---- + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} + #endif +! SCRIPTID_INIT}, + {"window", "wi", P_NUM|P_VI_DEF, + (char_u *)&p_window, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"winheight", "wh", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_wh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"winfixheight", "wfh", P_BOOL|P_VI_DEF|P_RSTAT, + #ifdef FEAT_WINDOWS + (char_u *)VAR_WIN, PV_WFH, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"winfixwidth", "wfw", P_BOOL|P_VI_DEF|P_RSTAT, + #ifdef FEAT_VERTSPLIT + (char_u *)VAR_WIN, PV_WFW, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"winminheight", "wmh", P_NUM|P_VI_DEF, + #ifdef FEAT_WINDOWS + (char_u *)&p_wmh, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"winminwidth", "wmw", P_NUM|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_wmw, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)1L, (char_u *)0L} SCRIPTID_INIT}, + {"winwidth", "wiw", P_NUM|P_VI_DEF, + #ifdef FEAT_VERTSPLIT + (char_u *)&p_wiw, PV_NONE, + #else + (char_u *)NULL, PV_NONE, + #endif +! {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT}, + {"wrap", NULL, P_BOOL|P_VI_DEF|P_RWIN, + (char_u *)VAR_WIN, PV_WRAP, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"wrapmargin", "wm", P_NUM|P_VI_DEF, + (char_u *)&p_wm, PV_WM, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + {"wrapscan", "ws", P_BOOL|P_VI_DEF, + (char_u *)&p_ws, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"write", NULL, P_BOOL|P_VI_DEF, + (char_u *)&p_write, PV_NONE, +! {(char_u *)TRUE, (char_u *)0L} SCRIPTID_INIT}, + {"writeany", "wa", P_BOOL|P_VI_DEF, + (char_u *)&p_wa, PV_NONE, +! {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT}, + {"writebackup", "wb", P_BOOL|P_VI_DEF|P_VIM, + (char_u *)&p_wb, PV_NONE, + { +*************** +*** 2746,2760 **** + #else + (char_u *)FALSE, + #endif +! (char_u *)0L}}, + {"writedelay", "wd", P_NUM|P_VI_DEF, + (char_u *)&p_wd, PV_NONE, +! {(char_u *)0L, (char_u *)0L}}, + + /* terminal output codes */ + #define p_term(sss, vvv) {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \ + (char_u *)&vvv, PV_NONE, \ +! {(char_u *)"", (char_u *)0L}}, + + p_term("t_AB", T_CAB) + p_term("t_AF", T_CAF) +--- 2767,2781 ---- + #else + (char_u *)FALSE, + #endif +! (char_u *)0L} SCRIPTID_INIT}, + {"writedelay", "wd", P_NUM|P_VI_DEF, + (char_u *)&p_wd, PV_NONE, +! {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, + + /* terminal output codes */ + #define p_term(sss, vvv) {sss, NULL, P_STRING|P_VI_DEF|P_RALL|P_SECURE, \ + (char_u *)&vvv, PV_NONE, \ +! {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, + + p_term("t_AB", T_CAB) + p_term("t_AF", T_CAF) +*************** +*** 2815,2821 **** + + /* terminal key codes are not in here */ + +! {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL}} /* end marker */ + }; + + #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption)) +--- 2836,2843 ---- + + /* terminal key codes are not in here */ + +! /* end marker */ +! {NULL, NULL, 0, NULL, PV_NONE, {NULL, NULL} SCRIPTID_INIT} + }; + + #define PARAM_COUNT (sizeof(options) / sizeof(struct vimoption)) +*************** +*** 9917,9923 **** + regmatch->rm_ic = ic; + if (xp->xp_context != EXPAND_BOOL_SETTINGS) + { +! for (match = 0; match < sizeof(names) / sizeof(char *); ++match) + if (vim_regexec(regmatch, (char_u *)names[match], (colnr_T)0)) + { + if (loop == 0) +--- 9939,9946 ---- + regmatch->rm_ic = ic; + if (xp->xp_context != EXPAND_BOOL_SETTINGS) + { +! for (match = 0; match < (int)(sizeof(names) / sizeof(char *)); +! ++match) + if (vim_regexec(regmatch, (char_u *)names[match], (colnr_T)0)) + { + if (loop == 0) +*** ../vim-7.2.179/src/os_unix.c 2009-05-16 16:36:25.000000000 +0200 +--- src/os_unix.c 2009-05-17 12:17:01.000000000 +0200 +*************** +*** 821,827 **** + #endif + + #if defined(SIGINT) +- /* ARGSUSED */ + static RETSIGTYPE + catch_sigint SIGDEFARG(sigarg) + { +--- 821,826 ---- +*************** +*** 833,839 **** + #endif + + #if defined(SIGPWR) +- /* ARGSUSED */ + static RETSIGTYPE + catch_sigpwr SIGDEFARG(sigarg) + { +--- 832,837 ---- +*************** +*** 853,859 **** + /* + * signal function for alarm(). + */ +- /* ARGSUSED */ + static RETSIGTYPE + sig_alarm SIGDEFARG(sigarg) + { +--- 851,856 ---- +*************** +*** 1087,1093 **** + /* + * signal handler for SIGCONT + */ +- /* ARGSUSED */ + static RETSIGTYPE + sigcont_handler SIGDEFARG(sigarg) + { +--- 1084,1089 ---- +*************** +*** 1436,1446 **** + /* + * Another X Error handler, just used to check for errors. + */ +- /* ARGSUSED */ + static int + x_error_check(dpy, error_event) +! Display *dpy; +! XErrorEvent *error_event; + { + got_x_error = TRUE; + return 0; +--- 1432,1441 ---- + /* + * Another X Error handler, just used to check for errors. + */ + static int + x_error_check(dpy, error_event) +! Display *dpy UNUSED; +! XErrorEvent *error_event UNUSED; + { + got_x_error = TRUE; + return 0; +*************** +*** 1453,1467 **** + */ + static int x_IOerror_check __ARGS((Display *dpy)); + +- /* ARGSUSED */ + static int + x_IOerror_check(dpy) +! Display *dpy; + { + /* This function should not return, it causes exit(). Longjump instead. */ + LONGJMP(lc_jump_env, 1); +- /*NOTREACHED*/ +- return 0; + } + # endif + +--- 1448,1459 ---- + */ + static int x_IOerror_check __ARGS((Display *dpy)); + + static int + x_IOerror_check(dpy) +! Display *dpy UNUSED; + { + /* This function should not return, it causes exit(). Longjump instead. */ + LONGJMP(lc_jump_env, 1); + } + # endif + +*************** +*** 1470,1479 **** + */ + static int x_IOerror_handler __ARGS((Display *dpy)); + +- /* ARGSUSED */ + static int + x_IOerror_handler(dpy) +! Display *dpy; + { + xterm_dpy = NULL; + x11_window = 0; +--- 1462,1470 ---- + */ + static int x_IOerror_handler __ARGS((Display *dpy)); + + static int + x_IOerror_handler(dpy) +! Display *dpy UNUSED; + { + xterm_dpy = NULL; + x11_window = 0; +*************** +*** 1482,1489 **** + + /* This function should not return, it causes exit(). Longjump instead. */ + LONGJMP(x_jump_env, 1); +- /*NOTREACHED*/ +- return 0; + } + #endif + +--- 1473,1478 ---- +*************** +*** 1919,1928 **** + + #else /* FEAT_X11 */ + +- /*ARGSUSED*/ + static int + get_x11_title(test_only) +! int test_only; + { + return FALSE; + } +--- 1908,1916 ---- + + #else /* FEAT_X11 */ + + static int + get_x11_title(test_only) +! int test_only UNUSED; + { + return FALSE; + } +*************** +*** 2497,2507 **** + * file name to remain exactly the same. + * Only required for file systems where case is ignored and preserved. + */ +- /*ARGSUSED*/ + void + fname_case(name, len) + char_u *name; +! int len; /* buffer size, only used when name gets longer */ + { + struct stat st; + char_u *slash, *tail; +--- 2485,2494 ---- + * file name to remain exactly the same. + * Only required for file systems where case is ignored and preserved. + */ + void + fname_case(name, len) + char_u *name; +! int len UNUSED; /* buffer size, only used when name gets longer */ + { + struct stat st; + char_u *slash, *tail; +*************** +*** 5141,5147 **** + + #define SHELL_SPECIAL (char_u *)"\t \"&'$;<>()\\|" + +- /* ARGSUSED */ + int + mch_expand_wildcards(num_pat, pat, num_file, file, flags) + int num_pat; +--- 5128,5133 ---- +*************** +*** 6068,6074 **** + /* + * Gets info from sysmouse and adds special keys to input buf. + */ +- /* ARGSUSED */ + static RETSIGTYPE + sig_sysmouse SIGDEFARG(sigarg) + { +--- 6054,6059 ---- +*************** +*** 6632,6642 **** + * This is our chance to ask the user if they want to save, + * or abort the logout + */ +- /*ARGSUSED*/ + static void + xsmp_handle_interaction(smc_conn, client_data) + SmcConn smc_conn; +! SmPointer client_data; + { + cmdmod_T save_cmdmod; + int cancel_shutdown = False; +--- 6617,6626 ---- + * This is our chance to ask the user if they want to save, + * or abort the logout + */ + static void + xsmp_handle_interaction(smc_conn, client_data) + SmcConn smc_conn; +! SmPointer client_data UNUSED; + { + cmdmod_T save_cmdmod; + int cancel_shutdown = False; +*************** +*** 6669,6684 **** + /* + * Callback that starts save-yourself. + */ +- /*ARGSUSED*/ + static void + xsmp_handle_save_yourself(smc_conn, client_data, save_type, + shutdown, interact_style, fast) + SmcConn smc_conn; +! SmPointer client_data; +! int save_type; + Bool shutdown; +! int interact_style; +! Bool fast; + { + /* Handle already being in saveyourself */ + if (xsmp.save_yourself) +--- 6653,6667 ---- + /* + * Callback that starts save-yourself. + */ + static void + xsmp_handle_save_yourself(smc_conn, client_data, save_type, + shutdown, interact_style, fast) + SmcConn smc_conn; +! SmPointer client_data UNUSED; +! int save_type UNUSED; + Bool shutdown; +! int interact_style UNUSED; +! Bool fast UNUSED; + { + /* Handle already being in saveyourself */ + if (xsmp.save_yourself) +*************** +*** 6712,6722 **** + /* + * Callback to warn us of imminent death. + */ +- /*ARGSUSED*/ + static void + xsmp_die(smc_conn, client_data) +! SmcConn smc_conn; +! SmPointer client_data; + { + xsmp_close(); + +--- 6695,6704 ---- + /* + * Callback to warn us of imminent death. + */ + static void + xsmp_die(smc_conn, client_data) +! SmcConn smc_conn UNUSED; +! SmPointer client_data UNUSED; + { + xsmp_close(); + +*************** +*** 6728,6738 **** + /* + * Callback to tell us that save-yourself has completed. + */ +- /*ARGSUSED*/ + static void + xsmp_save_complete(smc_conn, client_data) +! SmcConn smc_conn; +! SmPointer client_data; + { + xsmp.save_yourself = False; + } +--- 6710,6719 ---- + /* + * Callback to tell us that save-yourself has completed. + */ + static void + xsmp_save_complete(smc_conn, client_data) +! SmcConn smc_conn UNUSED; +! SmPointer client_data UNUSED; + { + xsmp.save_yourself = False; + } +*************** +*** 6742,6752 **** + * Callback to tell us that an instigated shutdown was cancelled + * (maybe even by us) + */ +- /*ARGSUSED*/ + static void + xsmp_shutdown_cancelled(smc_conn, client_data) + SmcConn smc_conn; +! SmPointer client_data; + { + if (xsmp.save_yourself) + SmcSaveYourselfDone(smc_conn, True); +--- 6723,6732 ---- + * Callback to tell us that an instigated shutdown was cancelled + * (maybe even by us) + */ + static void + xsmp_shutdown_cancelled(smc_conn, client_data) + SmcConn smc_conn; +! SmPointer client_data UNUSED; + { + if (xsmp.save_yourself) + SmcSaveYourselfDone(smc_conn, True); +*************** +*** 6758,6770 **** + /* + * Callback to tell us that a new ICE connection has been established. + */ +- /*ARGSUSED*/ + static void + xsmp_ice_connection(iceConn, clientData, opening, watchData) + IceConn iceConn; +! IcePointer clientData; + Bool opening; +! IcePointer *watchData; + { + /* Intercept creation of ICE connection fd */ + if (opening) +--- 6738,6749 ---- + /* + * Callback to tell us that a new ICE connection has been established. + */ + static void + xsmp_ice_connection(iceConn, clientData, opening, watchData) + IceConn iceConn; +! IcePointer clientData UNUSED; + Bool opening; +! IcePointer *watchData UNUSED; + { + /* Intercept creation of ICE connection fd */ + if (opening) +*** ../vim-7.2.179/src/quickfix.c 2009-05-13 18:54:14.000000000 +0200 +--- src/quickfix.c 2009-05-16 22:31:49.000000000 +0200 +*************** +*** 2240,2246 **** + * ":cclose": close the window showing the list of errors. + * ":lclose": close the window showing the location list + */ +- /*ARGSUSED*/ + void + ex_cclose(eap) + exarg_T *eap; +--- 2240,2245 ---- +*************** +*** 3211,3217 **** + break; + col = regmatch.endpos[0].col + + (col == regmatch.endpos[0].col); +! if (col > STRLEN(ml_get_buf(buf, lnum, FALSE))) + break; + } + line_breakcheck(); +--- 3210,3216 ---- + break; + col = regmatch.endpos[0].col + + (col == regmatch.endpos[0].col); +! if (col > (colnr_T)STRLEN(ml_get_buf(buf, lnum, FALSE))) + break; + } + line_breakcheck(); +*** ../vim-7.2.179/src/screen.c 2009-05-13 12:46:36.000000000 +0200 +--- src/screen.c 2009-05-16 21:51:13.000000000 +0200 +*************** +*** 270,280 **** + * Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot + * may become invalid and the whole window will have to be redrawn. + */ +- /*ARGSUSED*/ + void + redrawWinline(lnum, invalid) + linenr_T lnum; +! int invalid; /* window line height is invalid now */ + { + #ifdef FEAT_FOLDING + int i; +--- 270,279 ---- + * Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot + * may become invalid and the whole window will have to be redrawn. + */ + void + redrawWinline(lnum, invalid) + linenr_T lnum; +! int invalid UNUSED; /* window line height is invalid now */ + { + #ifdef FEAT_FOLDING + int i; +*************** +*** 2413,2419 **** + && (lnume < bot->lnum + || (lnume == bot->lnum + && (bot->col - (*p_sel == 'e')) +! >= STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE))))))) + { + if (VIsual_mode == Ctrl_V) + { +--- 2412,2418 ---- + && (lnume < bot->lnum + || (lnume == bot->lnum + && (bot->col - (*p_sel == 'e')) +! >= (colnr_T)STRLEN(ml_get_buf(wp->w_buffer, lnume, FALSE))))))) + { + if (VIsual_mode == Ctrl_V) + { +*************** +*** 2549,2562 **** + * + * Return the number of last row the line occupies. + */ +- /* ARGSUSED */ + static int + win_line(wp, lnum, startrow, endrow, nochange) + win_T *wp; + linenr_T lnum; + int startrow; + int endrow; +! int nochange; /* not updating for changed text */ + { + int col; /* visual column on screen */ + unsigned off; /* offset in ScreenLines/ScreenAttrs */ +--- 2548,2560 ---- + * + * Return the number of last row the line occupies. + */ + static int + win_line(wp, lnum, startrow, endrow, nochange) + win_T *wp; + linenr_T lnum; + int startrow; + int endrow; +! int nochange UNUSED; /* not updating for changed text */ + { + int col; /* visual column on screen */ + unsigned off; /* offset in ScreenLines/ScreenAttrs */ +*************** +*** 6098,6104 **** + fillchar, maxwidth, hltab, tabtab); + len = (int)STRLEN(buf); + +! while (width < maxwidth && len < sizeof(buf) - 1) + { + #ifdef FEAT_MBYTE + len += (*mb_char2bytes)(fillchar, buf + len); +--- 6096,6102 ---- + fillchar, maxwidth, hltab, tabtab); + len = (int)STRLEN(buf); + +! while (width < maxwidth && len < (int)sizeof(buf) - 1) + { + #ifdef FEAT_MBYTE + len += (*mb_char2bytes)(fillchar, buf + len); +*************** +*** 8655,8661 **** + * + * Return OK for success, FAIL if the lines are not deleted. + */ +- /*ARGSUSED*/ + int + screen_del_lines(off, row, line_count, end, force, wp) + int off; +--- 8653,8658 ---- +*************** +*** 8663,8669 **** + int line_count; + int end; + int force; /* even when line_count > p_ttyscroll */ +! win_T *wp; /* NULL or window to use width from */ + { + int j; + int i; +--- 8660,8666 ---- + int line_count; + int end; + int force; /* even when line_count > p_ttyscroll */ +! win_T *wp UNUSED; /* NULL or window to use width from */ + { + int j; + int i; +*** ../vim-7.2.179/src/search.c 2009-05-15 21:31:11.000000000 +0200 +--- src/search.c 2009-05-16 22:33:05.000000000 +0200 +*************** +*** 4527,4538 **** + * Find identifiers or defines in included files. + * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase. + */ +- /*ARGSUSED*/ + void + find_pattern_in_path(ptr, dir, len, whole, skip_comments, + type, count, action, start_lnum, end_lnum) + char_u *ptr; /* pointer to search pattern */ +! int dir; /* direction of expansion */ + int len; /* length of search pattern */ + int whole; /* match whole words only */ + int skip_comments; /* don't match inside comments */ +--- 4527,4537 ---- + * Find identifiers or defines in included files. + * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase. + */ + void + find_pattern_in_path(ptr, dir, len, whole, skip_comments, + type, count, action, start_lnum, end_lnum) + char_u *ptr; /* pointer to search pattern */ +! int dir UNUSED; /* direction of expansion */ + int len; /* length of search pattern */ + int whole; /* match whole words only */ + int skip_comments; /* don't match inside comments */ +*** ../vim-7.2.179/src/spell.c 2009-05-13 18:54:14.000000000 +0200 +--- src/spell.c 2009-05-16 22:10:19.000000000 +0200 +*************** +*** 950,957 **** + */ + #ifndef FEAT_MBYTE + /* Non-multi-byte implementation. */ +! # define SPELL_TOFOLD(c) ((c) < 256 ? spelltab.st_fold[c] : (c)) +! # define SPELL_TOUPPER(c) ((c) < 256 ? spelltab.st_upper[c] : (c)) + # define SPELL_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE) + #else + # if defined(HAVE_WCHAR_H) +--- 950,957 ---- + */ + #ifndef FEAT_MBYTE + /* Non-multi-byte implementation. */ +! # define SPELL_TOFOLD(c) ((c) < 256 ? (int)spelltab.st_fold[c] : (c)) +! # define SPELL_TOUPPER(c) ((c) < 256 ? (int)spelltab.st_upper[c] : (c)) + # define SPELL_ISUPPER(c) ((c) < 256 ? spelltab.st_isu[c] : FALSE) + #else + # if defined(HAVE_WCHAR_H) +*************** +*** 962,979 **** + * the "w" library function for characters above 255 if available. */ + # ifdef HAVE_TOWLOWER + # define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \ +! : (c) < 256 ? spelltab.st_fold[c] : towlower(c)) + # else + # define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \ +! : (c) < 256 ? spelltab.st_fold[c] : (c)) + # endif + + # ifdef HAVE_TOWUPPER + # define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \ +! : (c) < 256 ? spelltab.st_upper[c] : towupper(c)) + # else + # define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \ +! : (c) < 256 ? spelltab.st_upper[c] : (c)) + # endif + + # ifdef HAVE_ISWUPPER +--- 962,979 ---- + * the "w" library function for characters above 255 if available. */ + # ifdef HAVE_TOWLOWER + # define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \ +! : (c) < 256 ? (int)spelltab.st_fold[c] : (int)towlower(c)) + # else + # define SPELL_TOFOLD(c) (enc_utf8 && (c) >= 128 ? utf_fold(c) \ +! : (c) < 256 ? (int)spelltab.st_fold[c] : (c)) + # endif + + # ifdef HAVE_TOWUPPER + # define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \ +! : (c) < 256 ? (int)spelltab.st_upper[c] : (int)towupper(c)) + # else + # define SPELL_TOUPPER(c) (enc_utf8 && (c) >= 128 ? utf_toupper(c) \ +! : (c) < 256 ? (int)spelltab.st_upper[c] : (c)) + # endif + + # ifdef HAVE_ISWUPPER +*************** +*** 8052,8058 **** + /* time_t can be up to 8 bytes in size, more than long_u, thus we + * can't use put_bytes() here. */ + for (i = 7; i >= 0; --i) +! if (i + 1 > sizeof(time_t)) + /* ">>" doesn't work well when shifting more bits than avail */ + putc(0, fd); + else +--- 8052,8058 ---- + /* time_t can be up to 8 bytes in size, more than long_u, thus we + * can't use put_bytes() here. */ + for (i = 7; i >= 0; --i) +! if (i + 1 > (int)sizeof(time_t)) + /* ">>" doesn't work well when shifting more bits than avail */ + putc(0, fd); + else +*************** +*** 10541,10550 **** + /* + * ":spellrepall" + */ +- /*ARGSUSED*/ + void + ex_spellrepall(eap) +! exarg_T *eap; + { + pos_T pos = curwin->w_cursor; + char_u *frompat; +--- 10541,10549 ---- + /* + * ":spellrepall" + */ + void + ex_spellrepall(eap) +! exarg_T *eap UNUSED; + { + pos_T pos = curwin->w_cursor; + char_u *frompat; +*************** +*** 15604,15613 **** + /* + * ":spellinfo" + */ +- /*ARGSUSED*/ + void + ex_spellinfo(eap) +! exarg_T *eap; + { + int lpi; + langp_T *lp; +--- 15603,15611 ---- + /* + * ":spellinfo" + */ + void + ex_spellinfo(eap) +! exarg_T *eap UNUSED; + { + int lpi; + langp_T *lp; +*************** +*** 16153,16159 **** + */ + int + expand_spelling(lnum, pat, matchp) +! linenr_T lnum; + char_u *pat; + char_u ***matchp; + { +--- 16151,16157 ---- + */ + int + expand_spelling(lnum, pat, matchp) +! linenr_T lnum UNUSED; + char_u *pat; + char_u ***matchp; + { +*** ../vim-7.2.179/src/syntax.c 2008-08-09 19:37:33.000000000 +0200 +--- src/syntax.c 2009-05-16 22:14:19.000000000 +0200 +*************** +*** 3224,3234 **** + /* + * Handle ":syntax case" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_case(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + char_u *arg = eap->arg; + char_u *next; +--- 3224,3233 ---- + /* + * Handle ":syntax case" command. + */ + static void + syn_cmd_case(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + char_u *arg = eap->arg; + char_u *next; +*************** +*** 3249,3259 **** + /* + * Handle ":syntax spell" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_spell(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + char_u *arg = eap->arg; + char_u *next; +--- 3248,3257 ---- + /* + * Handle ":syntax spell" command. + */ + static void + syn_cmd_spell(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + char_u *arg = eap->arg; + char_u *next; +*************** +*** 3517,3527 **** + /* + * Handle ":syntax on" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_on(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + syn_cmd_onoff(eap, "syntax"); + } +--- 3515,3524 ---- + /* + * Handle ":syntax on" command. + */ + static void + syn_cmd_on(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + syn_cmd_onoff(eap, "syntax"); + } +*************** +*** 3529,3539 **** + /* + * Handle ":syntax enable" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_enable(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + set_internal_string_var((char_u *)"syntax_cmd", (char_u *)"enable"); + syn_cmd_onoff(eap, "syntax"); +--- 3526,3535 ---- + /* + * Handle ":syntax enable" command. + */ + static void + syn_cmd_enable(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + set_internal_string_var((char_u *)"syntax_cmd", (char_u *)"enable"); + syn_cmd_onoff(eap, "syntax"); +*************** +*** 3543,3553 **** + /* + * Handle ":syntax reset" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_reset(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + eap->nextcmd = check_nextcmd(eap->arg); + if (!eap->skip) +--- 3539,3548 ---- + /* + * Handle ":syntax reset" command. + */ + static void + syn_cmd_reset(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + eap->nextcmd = check_nextcmd(eap->arg); + if (!eap->skip) +*************** +*** 3561,3571 **** + /* + * Handle ":syntax manual" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_manual(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + syn_cmd_onoff(eap, "manual"); + } +--- 3556,3565 ---- + /* + * Handle ":syntax manual" command. + */ + static void + syn_cmd_manual(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + syn_cmd_onoff(eap, "manual"); + } +*************** +*** 3573,3583 **** + /* + * Handle ":syntax off" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_off(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + syn_cmd_onoff(eap, "nosyntax"); + } +--- 3567,3576 ---- + /* + * Handle ":syntax off" command. + */ + static void + syn_cmd_off(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + syn_cmd_onoff(eap, "nosyntax"); + } +*************** +*** 4461,4471 **** + /* + * Handle ":syntax include [@{group-name}] filename" command. + */ +- /* ARGSUSED */ + static void + syn_cmd_include(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + char_u *arg = eap->arg; + int sgl_id = 1; +--- 4454,4463 ---- + /* + * Handle ":syntax include [@{group-name}] filename" command. + */ + static void + syn_cmd_include(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + char_u *arg = eap->arg; + int sgl_id = 1; +*************** +*** 4532,4542 **** + /* + * Handle ":syntax keyword {group-name} [{option}] keyword .." command. + */ +- /* ARGSUSED */ + static void + syn_cmd_keyword(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + char_u *arg = eap->arg; + char_u *group_name_end; +--- 4524,4533 ---- + /* + * Handle ":syntax keyword {group-name} [{option}] keyword .." command. + */ + static void + syn_cmd_keyword(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + char_u *arg = eap->arg; + char_u *group_name_end; +*************** +*** 5275,5285 **** + * Handle ":syntax cluster {cluster-name} [contains={groupname},..] + * [add={groupname},..] [remove={groupname},..]". + */ +- /* ARGSUSED */ + static void + syn_cmd_cluster(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + char_u *arg = eap->arg; + char_u *group_name_end; +--- 5266,5275 ---- + * Handle ":syntax cluster {cluster-name} [contains={groupname},..] + * [add={groupname},..] [remove={groupname},..]". + */ + static void + syn_cmd_cluster(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + char_u *arg = eap->arg; + char_u *group_name_end; +*************** +*** 5464,5474 **** + /* + * Handle ":syntax sync .." command. + */ +- /* ARGSUSED */ + static void + syn_cmd_sync(eap, syncing) + exarg_T *eap; +! int syncing; /* not used */ + { + char_u *arg_start = eap->arg; + char_u *arg_end; +--- 5454,5463 ---- + /* + * Handle ":syntax sync .." command. + */ + static void + syn_cmd_sync(eap, syncing) + exarg_T *eap; +! int syncing UNUSED; + { + char_u *arg_start = eap->arg; + char_u *arg_end; +*************** +*** 6099,6108 **** + * Function given to ExpandGeneric() to obtain the list syntax names for + * expansion. + */ +- /*ARGSUSED*/ + char_u * + get_syntax_name(xp, idx) +! expand_T *xp; + int idx; + { + if (expand_what == EXP_SUBCMD) +--- 6088,6096 ---- + * Function given to ExpandGeneric() to obtain the list syntax names for + * expansion. + */ + char_u * + get_syntax_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + if (expand_what == EXP_SUBCMD) +*************** +*** 7744,7757 **** + /* + * Get the font or fontset for one highlight group. + */ +- /*ARGSUSED*/ + static void + hl_do_font(idx, arg, do_normal, do_menu, do_tooltip) + int idx; + char_u *arg; +! int do_normal; /* set normal font */ +! int do_menu; /* set menu font */ +! int do_tooltip; /* set tooltip font */ + { + # ifdef FEAT_XFONTSET + /* If 'guifontset' is not empty, first try using the name as a +--- 7732,7744 ---- + /* + * Get the font or fontset for one highlight group. + */ + static void + hl_do_font(idx, arg, do_normal, do_menu, do_tooltip) + int idx; + char_u *arg; +! int do_normal; /* set normal font */ +! int do_menu UNUSED; /* set menu font */ +! int do_tooltip UNUSED; /* set tooltip font */ + { + # ifdef FEAT_XFONTSET + /* If 'guifontset' is not empty, first try using the name as a +*************** +*** 9150,9159 **** + * Function given to ExpandGeneric() to obtain the list of group names. + * Also used for synIDattr() function. + */ +- /*ARGSUSED*/ + char_u * + get_highlight_name(xp, idx) +! expand_T *xp; + int idx; + { + #ifdef FEAT_CMDL_COMPL +--- 9137,9145 ---- + * Function given to ExpandGeneric() to obtain the list of group names. + * Also used for synIDattr() function. + */ + char_u * + get_highlight_name(xp, idx) +! expand_T *xp UNUSED; + int idx; + { + #ifdef FEAT_CMDL_COMPL +*** ../vim-7.2.179/src/tag.c 2009-05-15 21:31:11.000000000 +0200 +--- src/tag.c 2009-05-16 22:16:31.000000000 +0200 +*************** +*** 100,106 **** + * Tag for preview window is remembered separately, to avoid messing up the + * normal tagstack. + */ +! static taggy_T ptag_entry = {NULL}; + #endif + + /* +--- 100,106 ---- + * Tag for preview window is remembered separately, to avoid messing up the + * normal tagstack. + */ +! static taggy_T ptag_entry = {NULL, {INIT_POS_T(0, 0, 0), 0}, 0, 0}; + #endif + + /* +*************** +*** 3791,3797 **** + --end; + } + len = (int)(end - start); +! if (len > sizeof(buf) - 1) + len = sizeof(buf) - 1; + vim_strncpy(buf, start, len); + } +--- 3791,3797 ---- + --end; + } + len = (int)(end - start); +! if (len > (int)sizeof(buf) - 1) + len = sizeof(buf) - 1; + vim_strncpy(buf, start, len); + } +*** ../vim-7.2.179/src/term.c 2009-01-22 18:32:55.000000000 +0100 +--- src/term.c 2009-05-16 22:18:08.000000000 +0200 +*************** +*** 2906,2912 **** + int i; + int shift; + +! for (i = 1; i <= sizeof(long_u); i++) + { + shift = 8 * (sizeof(long_u) - i); + dst[i - 1] = (char_u) ((val >> shift) & 0xff); +--- 2906,2912 ---- + int i; + int shift; + +! for (i = 1; i <= (int)sizeof(long_u); i++) + { + shift = 8 * (sizeof(long_u) - i); + dst[i - 1] = (char_u) ((val >> shift) & 0xff); +*************** +*** 2937,2943 **** + len = get_bytes_from_buf(buf, bytes, (int)sizeof(long_u)); + if (len != -1) + { +! for (i = 0; i < sizeof(long_u); i++) + { + shift = 8 * (sizeof(long_u) - 1 - i); + *val += (long_u)bytes[i] << shift; +--- 2937,2943 ---- + len = get_bytes_from_buf(buf, bytes, (int)sizeof(long_u)); + if (len != -1) + { +! for (i = 0; i < (int)sizeof(long_u); i++) + { + shift = 8 * (sizeof(long_u) - 1 - i); + *val += (long_u)bytes[i] << shift; +*** ../vim-7.2.179/src/ui.c 2008-11-28 21:26:50.000000000 +0100 +--- src/ui.c 2009-05-16 22:33:55.000000000 +0200 +*************** +*** 320,329 **** + * The gui_set_shellsize() or mch_set_shellsize() function will try to set the + * new size. If this is not possible, it will adjust Rows and Columns. + */ +- /*ARGSUSED*/ + void + ui_set_shellsize(mustset) +! int mustset; /* set by the user */ + { + #ifdef FEAT_GUI + if (gui.in_use) +--- 320,328 ---- + * The gui_set_shellsize() or mch_set_shellsize() function will try to set the + * new size. If this is not possible, it will adjust Rows and Columns. + */ + void + ui_set_shellsize(mustset) +! int mustset UNUSED; /* set by the user */ + { + #ifdef FEAT_GUI + if (gui.in_use) +*************** +*** 1127,1136 **** + * available for pasting. + * When "both" is TRUE also copy to the '+' register. + */ +- /*ARGSUSED*/ + void + clip_copy_modeless_selection(both) +! int both; + { + char_u *buffer; + char_u *bufp; +--- 1126,1134 ---- + * available for pasting. + * When "both" is TRUE also copy to the '+' register. + */ + void + clip_copy_modeless_selection(both) +! int both UNUSED; + { + char_u *buffer; + char_u *bufp; +*************** +*** 1701,1710 **** + return (int)maxlen; + } + +- /*ARGSUSED*/ + void + fill_input_buf(exit_on_error) +! int exit_on_error; + { + #if defined(UNIX) || defined(OS2) || defined(VMS) || defined(MACOS_X_UNIX) + int len; +--- 1699,1707 ---- + return (int)maxlen; + } + + void + fill_input_buf(exit_on_error) +! int exit_on_error UNUSED; + { + #if defined(UNIX) || defined(OS2) || defined(VMS) || defined(MACOS_X_UNIX) + int len; +*************** +*** 1992,2002 **** + + static void clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *)); + +- /* ARGSUSED */ + static void + clip_x11_request_selection_cb(w, success, sel_atom, type, value, length, + format) +! Widget w; + XtPointer success; + Atom *sel_atom; + Atom *type; +--- 1989,1998 ---- + + static void clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *)); + + static void + clip_x11_request_selection_cb(w, success, sel_atom, type, value, length, + format) +! Widget w UNUSED; + XtPointer success; + Atom *sel_atom; + Atom *type; +*************** +*** 2202,2211 **** + + static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *)); + +- /* ARGSUSED */ + static Boolean + clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format) +! Widget w; + Atom *sel_atom; + Atom *target; + Atom *type; +--- 2198,2206 ---- + + static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *)); + + static Boolean + clip_x11_convert_selection_cb(w, sel_atom, target, type, value, length, format) +! Widget w UNUSED; + Atom *sel_atom; + Atom *target; + Atom *type; +*************** +*** 2332,2341 **** + + static void clip_x11_lose_ownership_cb __ARGS((Widget, Atom *)); + +- /* ARGSUSED */ + static void + clip_x11_lose_ownership_cb(w, sel_atom) +! Widget w; + Atom *sel_atom; + { + if (*sel_atom == clip_plus.sel_atom) +--- 2327,2335 ---- + + static void clip_x11_lose_ownership_cb __ARGS((Widget, Atom *)); + + static void + clip_x11_lose_ownership_cb(w, sel_atom) +! Widget w UNUSED; + Atom *sel_atom; + { + if (*sel_atom == clip_plus.sel_atom) +*************** +*** 2368,2377 **** + * Send the current selection to the clipboard. Do nothing for X because we + * will fill in the selection only when requested by another app. + */ +- /*ARGSUSED*/ + void + clip_x11_set_selection(cbd) +! VimClipboard *cbd; + { + } + #endif +--- 2362,2370 ---- + * Send the current selection to the clipboard. Do nothing for X because we + * will fill in the selection only when requested by another app. + */ + void + clip_x11_set_selection(cbd) +! VimClipboard *cbd UNUSED; + { + } + #endif +*************** +*** 2922,2932 **** + * Find the window at screen position "*rowp" and "*colp". The positions are + * updated to become relative to the top-left of the window. + */ +- /*ARGSUSED*/ + win_T * + mouse_find_win(rowp, colp) + int *rowp; +! int *colp; + { + frame_T *fp; + +--- 2915,2924 ---- + * Find the window at screen position "*rowp" and "*colp". The positions are + * updated to become relative to the top-left of the window. + */ + win_T * + mouse_find_win(rowp, colp) + int *rowp; +! int *colp UNUSED; + { + frame_T *fp; + +*** ../vim-7.2.179/src/version.c 2009-05-16 21:16:12.000000000 +0200 +--- src/version.c 2009-05-17 13:06:38.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 180, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.181 b/7.2.181 new file mode 100644 index 00000000..bf7d5feb --- /dev/null +++ b/7.2.181 @@ -0,0 +1,1978 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.181 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.181 +Problem: Some more compiler warnings when using gcc -Wextra. +Solution: Add UNUSED and type casts. +Files: src/if_mzsch.c, src/gui.c, src/gui_gtk.c, src/gui_gtk_x11.c, + src/gui_gtk_f.c, src/gui_beval.c, src/netbeans.c + + +*** ../vim-7.2.180/src/if_mzsch.c 2007-07-06 19:43:08.000000000 +0200 +--- src/if_mzsch.c 2009-05-16 22:24:18.000000000 +0200 +*************** +*** 667,679 **** + static void CALLBACK + timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) + # elif defined(FEAT_GUI_GTK) +- /*ARGSUSED*/ + static gint +! timer_proc(gpointer data) + # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) +- /* ARGSUSED */ + static void +! timer_proc(XtPointer timed_out, XtIntervalId *interval_id) + # elif defined(FEAT_GUI_MAC) + pascal void + timer_proc(EventLoopTimerRef theTimer, void *userData) +--- 667,677 ---- + static void CALLBACK + timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) + # elif defined(FEAT_GUI_GTK) + static gint +! timer_proc(gpointer data UNUSED) + # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) + static void +! timer_proc(XtPointer timed_out UNUSED, XtIntervalId *interval_id UNUSED) + # elif defined(FEAT_GUI_MAC) + pascal void + timer_proc(EventLoopTimerRef theTimer, void *userData) +*** ../vim-7.2.180/src/gui.c 2008-12-03 18:50:09.000000000 +0100 +--- src/gui.c 2009-05-17 15:52:18.000000000 +0200 +*************** +*** 678,688 **** + * Return OK when able to set the font. When it failed FAIL is returned and + * the fonts are unchanged. + */ +- /*ARGSUSED*/ + int + gui_init_font(font_list, fontset) + char_u *font_list; +! int fontset; + { + #define FONTLEN 320 + char_u font_name[FONTLEN]; +--- 678,687 ---- + * Return OK when able to set the font. When it failed FAIL is returned and + * the fonts are unchanged. + */ + int + gui_init_font(font_list, fontset) + char_u *font_list; +! int fontset UNUSED; + { + #define FONTLEN 320 + char_u font_name[FONTLEN]; +*************** +*** 1138,1147 **** + * Position the various GUI components (text area, menu). The vertical + * scrollbars are NOT handled here. See gui_update_scrollbars(). + */ +- /*ARGSUSED*/ + static void + gui_position_components(total_width) +! int total_width; + { + int text_area_x; + int text_area_y; +--- 1137,1145 ---- + * Position the various GUI components (text area, menu). The vertical + * scrollbars are NOT handled here. See gui_update_scrollbars(). + */ + static void + gui_position_components(total_width) +! int total_width UNUSED; + { + int text_area_x; + int text_area_y; +*************** +*** 1374,1383 **** + * If "fit_to_display" is TRUE then the size may be reduced to fit the window + * on the screen. + */ +- /*ARGSUSED*/ + void + gui_set_shellsize(mustset, fit_to_display, direction) +! int mustset; /* set by the user */ + int fit_to_display; + int direction; /* RESIZE_HOR, RESIZE_VER */ + { +--- 1372,1380 ---- + * If "fit_to_display" is TRUE then the size may be reduced to fit the window + * on the screen. + */ + void + gui_set_shellsize(mustset, fit_to_display, direction) +! int mustset UNUSED; /* set by the user */ + int fit_to_display; + int direction; /* RESIZE_HOR, RESIZE_VER */ + { +*************** +*** 3120,3126 **** + * If "oldval" is not NULL, "oldval" is the previous value, the new value is + * in p_go. + */ +- /*ARGSUSED*/ + void + gui_init_which_components(oldval) + char_u *oldval; +--- 3117,3122 ---- +*************** +*** 4411,4417 **** + if (curwin->w_p_wrap) + return FALSE; + +! if (curwin->w_leftcol == scrollbar_value) + return FALSE; + + curwin->w_leftcol = (colnr_T)scrollbar_value; +--- 4407,4413 ---- + if (curwin->w_p_wrap) + return FALSE; + +! if ((long_u)curwin->w_leftcol == scrollbar_value) + return FALSE; + + curwin->w_leftcol = (colnr_T)scrollbar_value; +*************** +*** 4424,4430 **** + && longest_lnum < curwin->w_botline + && !virtual_active()) + { +! if (scrollbar_value > scroll_line_len(curwin->w_cursor.lnum)) + { + curwin->w_cursor.lnum = longest_lnum; + curwin->w_cursor.col = 0; +--- 4420,4426 ---- + && longest_lnum < curwin->w_botline + && !virtual_active()) + { +! if (scrollbar_value > (long_u)scroll_line_len(curwin->w_cursor.lnum)) + { + curwin->w_cursor.lnum = longest_lnum; + curwin->w_cursor.col = 0; +*************** +*** 4670,4676 **** + /* + * Find window where the mouse pointer "y" coordinate is in. + */ +- /*ARGSUSED*/ + static win_T * + xy2win(x, y) + int x; +--- 4666,4671 ---- +*************** +*** 5124,5130 **** + * of dropped files, they will be freed in this function, and caller can't use + * fnames after call this function. + */ +- /*ARGSUSED*/ + void + gui_handle_drop(x, y, modifiers, fnames, count) + int x; +--- 5119,5124 ---- +*** ../vim-7.2.180/src/gui_gtk.c 2008-07-31 22:29:28.000000000 +0200 +--- src/gui_gtk.c 2009-05-17 16:06:30.000000000 +0200 +*************** +*** 285,298 **** + return image; + } + +- /*ARGSUSED*/ + static gint +! toolbar_button_focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) +! { +! /* When we're in a GtkPlug, we don't have window focus events, only widget focus. +! * To emulate stand-alone gvim, if a button gets focus (e.g., into GtkPlug) +! * immediately pass it to mainwin. +! */ + if (gtk_socket_id != 0) + gtk_widget_grab_focus(gui.drawarea); + +--- 285,298 ---- + return image; + } + + static gint +! toolbar_button_focus_in_event(GtkWidget *widget UNUSED, +! GdkEventFocus *event UNUSED, +! gpointer data UNUSED) +! { +! /* When we're in a GtkPlug, we don't have window focus events, only widget +! * focus. To emulate stand-alone gvim, if a button gets focus (e.g., +! * into GtkPlug) immediately pass it to mainwin. */ + if (gtk_socket_id != 0) + gtk_widget_grab_focus(gui.drawarea); + +*************** +*** 585,593 **** + gtk_menu_prepend(GTK_MENU(menu->submenu_id), menu->tearoff_handle); + } + +- /*ARGSUSED*/ + static void +! menu_item_activate(GtkWidget *widget, gpointer data) + { + gui_menu_cb((vimmenu_T *)data); + +--- 585,592 ---- + gtk_menu_prepend(GTK_MENU(menu->submenu_id), menu->tearoff_handle); + } + + static void +! menu_item_activate(GtkWidget *widget UNUSED, gpointer data) + { + gui_menu_cb((vimmenu_T *)data); + +*************** +*** 1202,1210 **** + #endif + + #ifndef USE_FILE_CHOOSER +- /*ARGSUSED*/ + static void +! browse_ok_cb(GtkWidget *widget, gpointer cbdata) + { + gui_T *vw = (gui_T *)cbdata; + +--- 1201,1208 ---- + #endif + + #ifndef USE_FILE_CHOOSER + static void +! browse_ok_cb(GtkWidget *widget UNUSED, gpointer cbdata) + { + gui_T *vw = (gui_T *)cbdata; + +*************** +*** 1218,1226 **** + gtk_main_quit(); + } + +- /*ARGSUSED*/ + static void +! browse_cancel_cb(GtkWidget *widget, gpointer cbdata) + { + gui_T *vw = (gui_T *)cbdata; + +--- 1216,1223 ---- + gtk_main_quit(); + } + + static void +! browse_cancel_cb(GtkWidget *widget UNUSED, gpointer cbdata) + { + gui_T *vw = (gui_T *)cbdata; + +*************** +*** 1234,1242 **** + gtk_main_quit(); + } + +- /*ARGSUSED*/ + static gboolean +! browse_destroy_cb(GtkWidget * widget) + { + if (gui.browse_fname != NULL) + { +--- 1231,1238 ---- + gtk_main_quit(); + } + + static gboolean +! browse_destroy_cb(GtkWidget *widget UNUSED) + { + if (gui.browse_fname != NULL) + { +*************** +*** 1262,1275 **** + * initdir initial directory, NULL for current dir + * filter not used (file name filter) + */ +- /*ARGSUSED*/ + char_u * +! gui_mch_browse(int saving, + char_u *title, + char_u *dflt, +! char_u *ext, + char_u *initdir, +! char_u *filter) + { + #ifdef USE_FILE_CHOOSER + GtkWidget *fc; +--- 1258,1270 ---- + * initdir initial directory, NULL for current dir + * filter not used (file name filter) + */ + char_u * +! gui_mch_browse(int saving UNUSED, + char_u *title, + char_u *dflt, +! char_u *ext UNUSED, + char_u *initdir, +! char_u *filter UNUSED) + { + #ifdef USE_FILE_CHOOSER + GtkWidget *fc; +*************** +*** 1377,1383 **** + * dflt default name + * initdir initial directory, NULL for current dir + */ +- /*ARGSUSED*/ + char_u * + gui_mch_browsedir( + char_u *title, +--- 1372,1377 ---- +*************** +*** 1460,1466 **** + } + + # ifdef FEAT_GUI_GNOME +- /* ARGSUSED */ + static int + gui_gnome_dialog( int type, + char_u *title, +--- 1454,1459 ---- +*************** +*** 1611,1617 **** + GtkWidget *dialog; + } CancelData; + +- /* ARGSUSED */ + static void + dlg_button_clicked(GtkWidget * widget, ButtonData *data) + { +--- 1604,1609 ---- +*************** +*** 1622,1628 **** + /* + * This makes the Escape key equivalent to the cancel button. + */ +- /*ARGSUSED*/ + static int + dlg_key_press_event(GtkWidget *widget, GdkEventKey *event, CancelData *data) + { +--- 1614,1619 ---- +*************** +*** 1655,1661 **** + gtk_main_quit(); + } + +- /* ARGSUSED */ + int + gui_mch_dialog( int type, /* type of dialog */ + char_u *title, /* title of dialog */ +--- 1646,1651 ---- +*************** +*** 2215,2221 **** + GtkDialog *dialog; /* Widget of the dialog */ + } DialogInfo; + +- /*ARGSUSED2*/ + static gboolean + dialog_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) + { +--- 2205,2210 ---- +*************** +*** 2398,2411 **** + * Note: The push_in output argument seems to affect scrolling of huge + * menus that don't fit on the screen. Leave it at the default for now. + */ +- /*ARGSUSED0*/ + static void +! popup_menu_position_func(GtkMenu *menu, + gint *x, gint *y, + # ifdef HAVE_GTK2 +! gboolean *push_in, + # endif +! gpointer user_data) + { + gdk_window_get_origin(gui.drawarea->window, x, y); + +--- 2387,2399 ---- + * Note: The push_in output argument seems to affect scrolling of huge + * menus that don't fit on the screen. Leave it at the default for now. + */ + static void +! popup_menu_position_func(GtkMenu *menu UNUSED, + gint *x, gint *y, + # ifdef HAVE_GTK2 +! gboolean *push_in UNUSED, + # endif +! gpointer user_data UNUSED) + { + gdk_window_get_origin(gui.drawarea->window, x, y); + +*************** +*** 2464,2476 **** + GtkWidget *all; /* 'Replace All' action button */ + } SharedFindReplace; + +! static SharedFindReplace find_widgets = { NULL, }; +! static SharedFindReplace repl_widgets = { NULL, }; + +- /* ARGSUSED */ + static int + find_key_press_event( +! GtkWidget *widget, + GdkEventKey *event, + SharedFindReplace *frdp) + { +--- 2452,2463 ---- + GtkWidget *all; /* 'Replace All' action button */ + } SharedFindReplace; + +! static SharedFindReplace find_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; +! static SharedFindReplace repl_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + + static int + find_key_press_event( +! GtkWidget *widget UNUSED, + GdkEventKey *event, + SharedFindReplace *frdp) + { +*************** +*** 2962,2970 **** + /* + * Callback for actions of the find and replace dialogs + */ +- /*ARGSUSED*/ + static void +! find_replace_cb(GtkWidget *widget, gpointer data) + { + int flags; + char_u *find_text; +--- 2949,2956 ---- + /* + * Callback for actions of the find and replace dialogs + */ + static void +! find_replace_cb(GtkWidget *widget UNUSED, gpointer data) + { + int flags; + char_u *find_text; +*************** +*** 3010,3018 **** + } + + /* our usual callback function */ +- /*ARGSUSED*/ + static void +! entry_activate_cb(GtkWidget *widget, gpointer data) + { + gtk_widget_grab_focus(GTK_WIDGET(data)); + } +--- 2996,3003 ---- + } + + /* our usual callback function */ + static void +! entry_activate_cb(GtkWidget *widget UNUSED, gpointer data) + { + gtk_widget_grab_focus(GTK_WIDGET(data)); + } +*************** +*** 3055,3064 **** + /* + * ":helpfind" + */ +- /*ARGSUSED*/ + void + ex_helpfind(eap) +! exarg_T *eap; + { + /* This will fail when menus are not loaded. Well, it's only for + * backwards compatibility anyway. */ +--- 3040,3048 ---- + /* + * ":helpfind" + */ + void + ex_helpfind(eap) +! exarg_T *eap UNUSED; + { + /* This will fail when menus are not loaded. Well, it's only for + * backwards compatibility anyway. */ +*** ../vim-7.2.180/src/gui_gtk_x11.c 2008-11-28 21:26:50.000000000 +0100 +--- src/gui_gtk_x11.c 2009-05-17 15:53:02.000000000 +0200 +*************** +*** 619,627 **** + * Doesn't seem possible, since check_copy_area() relies on + * this information. --danielk + */ +- /*ARGSUSED*/ + static gint +! visibility_event(GtkWidget *widget, GdkEventVisibility *event, gpointer data) + { + gui.visibility = event->state; + /* +--- 625,634 ---- + * Doesn't seem possible, since check_copy_area() relies on + * this information. --danielk + */ + static gint +! visibility_event(GtkWidget *widget UNUSED, +! GdkEventVisibility *event, +! gpointer data UNUSED) + { + gui.visibility = event->state; + /* +*************** +*** 638,646 **** + /* + * Redraw the corresponding portions of the screen. + */ +- /*ARGSUSED*/ + static gint +! expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) + { + /* Skip this when the GUI isn't set up yet, will redraw later. */ + if (gui.starting) +--- 645,654 ---- + /* + * Redraw the corresponding portions of the screen. + */ + static gint +! expose_event(GtkWidget *widget UNUSED, +! GdkEventExpose *event, +! gpointer data UNUSED) + { + /* Skip this when the GUI isn't set up yet, will redraw later. */ + if (gui.starting) +*************** +*** 668,676 **** + /* + * Handle changes to the "Comm" property + */ +- /*ARGSUSED2*/ + static gint +! property_event(GtkWidget *widget, GdkEventProperty *event, gpointer data) + { + if (event->type == GDK_PROPERTY_NOTIFY + && event->state == (int)GDK_PROPERTY_NEW_VALUE +--- 676,685 ---- + /* + * Handle changes to the "Comm" property + */ + static gint +! property_event(GtkWidget *widget, +! GdkEventProperty *event, +! gpointer data UNUSED) + { + if (event->type == GDK_PROPERTY_NOTIFY + && event->state == (int)GDK_PROPERTY_NEW_VALUE +*************** +*** 740,748 **** + blink_state = BLINK_NONE; + } + +- /*ARGSUSED*/ + static gint +! blink_cb(gpointer data) + { + if (blink_state == BLINK_ON) + { +--- 749,756 ---- + blink_state = BLINK_NONE; + } + + static gint +! blink_cb(gpointer data UNUSED) + { + if (blink_state == BLINK_ON) + { +*************** +*** 781,789 **** + } + } + +- /*ARGSUSED*/ + static gint +! enter_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data) + { + if (blink_state == BLINK_NONE) + gui_mch_start_blink(); +--- 789,798 ---- + } + } + + static gint +! enter_notify_event(GtkWidget *widget UNUSED, +! GdkEventCrossing *event UNUSED, +! gpointer data UNUSED) + { + if (blink_state == BLINK_NONE) + gui_mch_start_blink(); +*************** +*** 795,803 **** + return FALSE; + } + +- /*ARGSUSED*/ + static gint +! leave_notify_event(GtkWidget *widget, GdkEventCrossing *event, gpointer data) + { + if (blink_state != BLINK_NONE) + gui_mch_stop_blink(); +--- 804,813 ---- + return FALSE; + } + + static gint +! leave_notify_event(GtkWidget *widget UNUSED, +! GdkEventCrossing *event UNUSED, +! gpointer data UNUSED) + { + if (blink_state != BLINK_NONE) + gui_mch_stop_blink(); +*************** +*** 805,813 **** + return FALSE; + } + +- /*ARGSUSED*/ + static gint +! focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) + { + gui_focus_change(TRUE); + +--- 815,824 ---- + return FALSE; + } + + static gint +! focus_in_event(GtkWidget *widget, +! GdkEventFocus *event UNUSED, +! gpointer data UNUSED) + { + gui_focus_change(TRUE); + +*************** +*** 826,834 **** + return TRUE; + } + +- /*ARGSUSED*/ + static gint +! focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer data) + { + gui_focus_change(FALSE); + +--- 837,846 ---- + return TRUE; + } + + static gint +! focus_out_event(GtkWidget *widget UNUSED, +! GdkEventFocus *event UNUSED, +! gpointer data UNUSED) + { + gui_focus_change(FALSE); + +*************** +*** 956,964 **** + /* + * Main keyboard handler: + */ +- /*ARGSUSED*/ + static gint +! key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data) + { + #ifdef HAVE_GTK2 + /* 256 bytes is way over the top, but for safety let's reduce it only +--- 968,977 ---- + /* + * Main keyboard handler: + */ + static gint +! key_press_event(GtkWidget *widget UNUSED, +! GdkEventKey *event, +! gpointer data UNUSED) + { + #ifdef HAVE_GTK2 + /* 256 bytes is way over the top, but for safety let's reduce it only +*************** +*** 1225,1233 **** + } + + #if defined(FEAT_XIM) && defined(HAVE_GTK2) +- /*ARGSUSED0*/ + static gboolean +! key_release_event(GtkWidget *widget, GdkEventKey *event, gpointer data) + { + /* + * GTK+ 2 input methods may do fancy stuff on key release events too. +--- 1238,1247 ---- + } + + #if defined(FEAT_XIM) && defined(HAVE_GTK2) + static gboolean +! key_release_event(GtkWidget *widget UNUSED, +! GdkEventKey *event, +! gpointer data UNUSED) + { + /* + * GTK+ 2 input methods may do fancy stuff on key release events too. +*************** +*** 1243,1253 **** + * Selection handlers: + */ + +- /*ARGSUSED*/ + static gint +! selection_clear_event(GtkWidget *widget, + GdkEventSelection *event, +! gpointer user_data) + { + if (event->selection == clip_plus.gtk_sel_atom) + clip_lose_selection(&clip_plus); +--- 1257,1266 ---- + * Selection handlers: + */ + + static gint +! selection_clear_event(GtkWidget *widget UNUSED, + GdkEventSelection *event, +! gpointer user_data UNUSED) + { + if (event->selection == clip_plus.gtk_sel_atom) + clip_lose_selection(&clip_plus); +*************** +*** 1265,1276 **** + #define RS_FAIL 2 /* selection_received_cb() called and failed */ + static int received_selection = RS_NONE; + +- /*ARGSUSED*/ + static void +! selection_received_cb(GtkWidget *widget, + GtkSelectionData *data, +! guint time_, +! gpointer user_data) + { + VimClipboard *cbd; + char_u *text; +--- 1278,1288 ---- + #define RS_FAIL 2 /* selection_received_cb() called and failed */ + static int received_selection = RS_NONE; + + static void +! selection_received_cb(GtkWidget *widget UNUSED, + GtkSelectionData *data, +! guint time_ UNUSED, +! gpointer user_data UNUSED) + { + VimClipboard *cbd; + char_u *text; +*************** +*** 1414,1426 **** + * Prepare our selection data for passing it to the external selection + * client. + */ +- /*ARGSUSED*/ + static void +! selection_get_cb(GtkWidget *widget, + GtkSelectionData *selection_data, + guint info, +! guint time_, +! gpointer user_data) + { + char_u *string; + char_u *tmpbuf; +--- 1426,1437 ---- + * Prepare our selection data for passing it to the external selection + * client. + */ + static void +! selection_get_cb(GtkWidget *widget UNUSED, + GtkSelectionData *selection_data, + guint info, +! guint time_ UNUSED, +! gpointer user_data UNUSED) + { + char_u *string; + char_u *tmpbuf; +*************** +*** 1678,1684 **** + + offshoot = dx > dy ? dx : dy; + +! /* Make a linearly declaying timer delay with a threshold of 5 at a + * distance of 127 pixels from the main window. + * + * One could think endlessly about the most ergonomic variant here. +--- 1689,1695 ---- + + offshoot = dx > dy ? dx : dy; + +! /* Make a linearly decaying timer delay with a threshold of 5 at a + * distance of 127 pixels from the main window. + * + * One could think endlessly about the most ergonomic variant here. +*************** +*** 1707,1715 **** + /* + * Timer used to recognize multiple clicks of the mouse button. + */ +- /*ARGSUSED0*/ + static gint +! motion_repeat_timer_cb(gpointer data) + { + int x; + int y; +--- 1718,1725 ---- + /* + * Timer used to recognize multiple clicks of the mouse button. + */ + static gint +! motion_repeat_timer_cb(gpointer data UNUSED) + { + int x; + int y; +*************** +*** 1749,1757 **** + return FALSE; + } + +- /*ARGSUSED2*/ + static gint +! motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer data) + { + if (event->is_hint) + { +--- 1759,1768 ---- + return FALSE; + } + + static gint +! motion_notify_event(GtkWidget *widget, +! GdkEventMotion *event, +! gpointer data UNUSED) + { + if (event->is_hint) + { +*************** +*** 1777,1785 **** + * by our own timeout mechanism instead of the one provided by GTK+ itself. + * This is due to the way the generic VIM code is recognizing multiple clicks. + */ +- /*ARGSUSED2*/ + static gint +! button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer data) + { + int button; + int repeated_click = FALSE; +--- 1788,1797 ---- + * by our own timeout mechanism instead of the one provided by GTK+ itself. + * This is due to the way the generic VIM code is recognizing multiple clicks. + */ + static gint +! button_press_event(GtkWidget *widget, +! GdkEventButton *event, +! gpointer data UNUSED) + { + int button; + int repeated_click = FALSE; +*************** +*** 1855,1863 **** + * GTK+ 2 doesn't handle mouse buttons 4, 5, 6 and 7 the same way as GTK+ 1. + * Instead, it abstracts scrolling via the new GdkEventScroll. + */ +- /*ARGSUSED2*/ + static gboolean +! scroll_event(GtkWidget *widget, GdkEventScroll *event, gpointer data) + { + int button; + int_u vim_modifiers; +--- 1867,1876 ---- + * GTK+ 2 doesn't handle mouse buttons 4, 5, 6 and 7 the same way as GTK+ 1. + * Instead, it abstracts scrolling via the new GdkEventScroll. + */ + static gboolean +! scroll_event(GtkWidget *widget, +! GdkEventScroll *event, +! gpointer data UNUSED) + { + int button; + int_u vim_modifiers; +*************** +*** 1896,1904 **** + #endif /* HAVE_GTK2 */ + + +- /*ARGSUSED*/ + static gint +! button_release_event(GtkWidget *widget, GdkEventButton *event, gpointer data) + { + int x, y; + int_u vim_modifiers; +--- 1909,1918 ---- + #endif /* HAVE_GTK2 */ + + + static gint +! button_release_event(GtkWidget *widget UNUSED, +! GdkEventButton *event, +! gpointer data UNUSED) + { + int x, y; + int_u vim_modifiers; +*************** +*** 2100,2106 **** + /* + * DND receiver. + */ +- /*ARGSUSED2*/ + static void + drag_data_received_cb(GtkWidget *widget, + GdkDragContext *context, +--- 2114,2119 ---- +*************** +*** 2109,2115 **** + GtkSelectionData *data, + guint info, + guint time_, +! gpointer user_data) + { + GdkModifierType state; + +--- 2122,2128 ---- + GtkSelectionData *data, + guint info, + guint time_, +! gpointer user_data UNUSED) + { + GdkModifierType state; + +*************** +*** 2143,2149 **** + * be abandoned and pop up a dialog asking the user for confirmation if + * necessary. + */ +- /*ARGSUSED0*/ + static void + sm_client_check_changed_any(GnomeClient *client, + gint key, +--- 2156,2161 ---- +*************** +*** 2251,2257 **** + * for confirmation if necessary. Save the current editing session and tell + * the session manager how to restart Vim. + */ +- /*ARGSUSED1*/ + static gboolean + sm_client_save_yourself(GnomeClient *client, + gint phase, +--- 2263,2268 ---- +*************** +*** 2339,2345 **** + * here since "save_yourself" has been emitted before (unless serious trouble + * is happening). + */ +- /*ARGSUSED0*/ + static void + sm_client_die(GnomeClient *client, gpointer data) + { +--- 2350,2355 ---- +*************** +*** 2379,2388 **** + /* + * GTK tells us that XSMP needs attention + */ +- /*ARGSUSED*/ + static gboolean + local_xsmp_handle_requests(source, condition, data) +! GIOChannel *source; + GIOCondition condition; + gpointer data; + { +--- 2389,2397 ---- + /* + * GTK tells us that XSMP needs attention + */ + static gboolean + local_xsmp_handle_requests(source, condition, data) +! GIOChannel *source UNUSED; + GIOCondition condition; + gpointer data; + { +*************** +*** 2480,2495 **** + * WM_SAVE_YOURSELF hack it actually stores the session... And yes, + * it should work with KDE as well. + */ +- /*ARGSUSED1*/ + static GdkFilterReturn +! global_event_filter(GdkXEvent *xev, GdkEvent *event, gpointer data) + { + XEvent *xevent = (XEvent *)xev; + + if (xevent != NULL + && xevent->type == ClientMessage + && xevent->xclient.message_type == GET_X_ATOM(wm_protocols_atom) +! && xevent->xclient.data.l[0] == GET_X_ATOM(save_yourself_atom)) + { + out_flush(); + ml_sync_all(FALSE, FALSE); /* preserve all swap files */ +--- 2489,2506 ---- + * WM_SAVE_YOURSELF hack it actually stores the session... And yes, + * it should work with KDE as well. + */ + static GdkFilterReturn +! global_event_filter(GdkXEvent *xev, +! GdkEvent *event UNUSED, +! gpointer data UNUSED) + { + XEvent *xevent = (XEvent *)xev; + + if (xevent != NULL + && xevent->type == ClientMessage + && xevent->xclient.message_type == GET_X_ATOM(wm_protocols_atom) +! && (long_u)xevent->xclient.data.l[0] +! == GET_X_ATOM(save_yourself_atom)) + { + out_flush(); + ml_sync_all(FALSE, FALSE); /* preserve all swap files */ +*************** +*** 2512,2518 **** + /* + * GDK handler for X ClientMessage events. + */ +- /*ARGSUSED2*/ + static GdkFilterReturn + gdk_wm_protocols_filter(GdkXEvent *xev, GdkEvent *event, gpointer data) + { +--- 2523,2528 ---- +*************** +*** 2558,2566 **** + /* + * Setup the window icon & xcmdsrv comm after the main window has been realized. + */ +- /*ARGSUSED*/ + static void +! mainwin_realize(GtkWidget *widget, gpointer data) + { + /* If you get an error message here, you still need to unpack the runtime + * archive! */ +--- 2568,2575 ---- + /* + * Setup the window icon & xcmdsrv comm after the main window has been realized. + */ + static void +! mainwin_realize(GtkWidget *widget UNUSED, gpointer data UNUSED) + { + /* If you get an error message here, you still need to unpack the runtime + * archive! */ +*************** +*** 2712,2722 **** + } + + #ifdef HAVE_GTK_MULTIHEAD +- /*ARGSUSED1*/ + static void + mainwin_screen_changed_cb(GtkWidget *widget, +! GdkScreen *previous_screen, +! gpointer data) + { + if (!gtk_widget_has_screen(widget)) + return; +--- 2721,2730 ---- + } + + #ifdef HAVE_GTK_MULTIHEAD + static void + mainwin_screen_changed_cb(GtkWidget *widget, +! GdkScreen *previous_screen UNUSED, +! gpointer data UNUSED) + { + if (!gtk_widget_has_screen(widget)) + return; +*************** +*** 2757,2765 **** + * Don't try to set any VIM scrollbar sizes anywhere here. I'm relying on the + * fact that the main VIM engine doesn't take them into account anywhere. + */ +- /*ARGSUSED1*/ + static void +! drawarea_realize_cb(GtkWidget *widget, gpointer data) + { + GtkWidget *sbar; + +--- 2765,2772 ---- + * Don't try to set any VIM scrollbar sizes anywhere here. I'm relying on the + * fact that the main VIM engine doesn't take them into account anywhere. + */ + static void +! drawarea_realize_cb(GtkWidget *widget, gpointer data UNUSED) + { + GtkWidget *sbar; + +*************** +*** 2789,2797 **** + /* + * Properly clean up on shutdown. + */ +- /*ARGSUSED0*/ + static void +! drawarea_unrealize_cb(GtkWidget *widget, gpointer data) + { + /* Don't write messages to the GUI anymore */ + full_screen = FALSE; +--- 2796,2803 ---- + /* + * Properly clean up on shutdown. + */ + static void +! drawarea_unrealize_cb(GtkWidget *widget UNUSED, gpointer data UNUSED) + { + /* Don't write messages to the GUI anymore */ + full_screen = FALSE; +*************** +*** 2827,2837 **** + #endif + } + +- /*ARGSUSED0*/ + static void +! drawarea_style_set_cb(GtkWidget *widget, +! GtkStyle *previous_style, +! gpointer data) + { + gui_mch_new_colors(); + } +--- 2833,2842 ---- + #endif + } + + static void +! drawarea_style_set_cb(GtkWidget *widget UNUSED, +! GtkStyle *previous_style UNUSED, +! gpointer data UNUSED) + { + gui_mch_new_colors(); + } +*************** +*** 2840,2848 **** + * Callback routine for the "delete_event" signal on the toplevel window. + * Tries to vim gracefully, or refuses to exit with changed buffers. + */ +- /*ARGSUSED*/ + static gint +! delete_event_cb(GtkWidget *widget, GdkEventAny *event, gpointer data) + { + gui_shell_closed(); + return TRUE; +--- 2845,2854 ---- + * Callback routine for the "delete_event" signal on the toplevel window. + * Tries to vim gracefully, or refuses to exit with changed buffers. + */ + static gint +! delete_event_cb(GtkWidget *widget UNUSED, +! GdkEventAny *event UNUSED, +! gpointer data UNUSED) + { + gui_shell_closed(); + return TRUE; +*************** +*** 2964,2970 **** + + /* At start-up, don't try to set the hints until the initial + * values have been used (those that dictate our initial size) +! * Let forced (i.e., correct) values thruogh always. + */ + if (!(force_width && force_height) && init_window_hints_state > 0) + { +--- 2970,2976 ---- + + /* At start-up, don't try to set the hints until the initial + * values have been used (those that dictate our initial size) +! * Let forced (i.e., correct) values through always. + */ + if (!(force_width && force_height) && init_window_hints_state > 0) + { +*************** +*** 3142,3150 **** + /* + * Handle selecting an item in the tab line popup menu. + */ +- /*ARGSUSED*/ + static void +! tabline_menu_handler(GtkMenuItem *item, gpointer user_data) + { + /* Add the string cmd into input buffer */ + send_tabline_menu_event(clicked_page, (int)(long)user_data); +--- 3148,3155 ---- + /* + * Handle selecting an item in the tab line popup menu. + */ + static void +! tabline_menu_handler(GtkMenuItem *item UNUSED, gpointer user_data) + { + /* Add the string cmd into input buffer */ + send_tabline_menu_event(clicked_page, (int)(long)user_data); +*************** +*** 3244,3256 **** + /* + * Handle selecting one of the tabs. + */ +- /*ARGSUSED*/ + static void + on_select_tab( +! GtkNotebook *notebook, +! GtkNotebookPage *page, + gint idx, +! gpointer data) + { + if (!ignore_tabline_evt) + { +--- 3249,3260 ---- + /* + * Handle selecting one of the tabs. + */ + static void + on_select_tab( +! GtkNotebook *notebook UNUSED, +! GtkNotebookPage *page UNUSED, + gint idx, +! gpointer data UNUSED) + { + if (!ignore_tabline_evt) + { +*************** +*** 3784,3790 **** + #endif + + if (gtk_socket_id != 0) +! /* make sure keybord input can go to the drawarea */ + GTK_WIDGET_SET_FLAGS(gui.drawarea, GTK_CAN_FOCUS); + + /* +--- 3788,3794 ---- + #endif + + if (gtk_socket_id != 0) +! /* make sure keyboard input can go to the drawarea */ + GTK_WIDGET_SET_FLAGS(gui.drawarea, GTK_CAN_FOCUS); + + /* +*************** +*** 3922,3931 **** + /* + * This signal informs us about the need to rearrange our sub-widgets. + */ +- /*ARGSUSED*/ + static gint +! form_configure_event(GtkWidget *widget, GdkEventConfigure *event, +! gpointer data) + { + int usable_height = event->height; + +--- 3926,3935 ---- + /* + * This signal informs us about the need to rearrange our sub-widgets. + */ + static gint +! form_configure_event(GtkWidget *widget UNUSED, +! GdkEventConfigure *event, +! gpointer data UNUSED) + { + int usable_height = event->height; + +*************** +*** 3948,3956 **** + * We can't do much more here than to trying to preserve what had been done, + * since the window is already inevitably going away. + */ +- /*ARGSUSED0*/ + static void +! mainwin_destroy_cb(GtkObject *object, gpointer data) + { + /* Don't write messages to the GUI anymore */ + full_screen = FALSE; +--- 3952,3959 ---- + * We can't do much more here than to trying to preserve what had been done, + * since the window is already inevitably going away. + */ + static void +! mainwin_destroy_cb(GtkObject *object UNUSED, gpointer data UNUSED) + { + /* Don't write messages to the GUI anymore */ + full_screen = FALSE; +*************** +*** 3980,3988 **** + * scrollbar init.), actually do the standard hinst and stop the timer. + * We'll not let the default hints be set while this timer's active. + */ +- /*ARGSUSED*/ + static gboolean +! check_startup_plug_hints(gpointer data) + { + if (init_window_hints_state == 1) + { +--- 3983,3990 ---- + * scrollbar init.), actually do the standard hinst and stop the timer. + * We'll not let the default hints be set while this timer's active. + */ + static gboolean +! check_startup_plug_hints(gpointer data UNUSED) + { + if (init_window_hints_state == 1) + { +*************** +*** 4055,4061 **** + Columns = w; + if (mask & HeightValue) + { +! if (p_window > h - 1 || !option_was_set((char_u *)"window")) + p_window = h - 1; + Rows = h; + } +--- 4057,4063 ---- + Columns = w; + if (mask & HeightValue) + { +! if (p_window > (long)h - 1 || !option_was_set((char_u *)"window")) + p_window = h - 1; + Rows = h; + } +*************** +*** 4229,4237 **** + } + + +- /*ARGSUSED0*/ + void +! gui_mch_exit(int rc) + { + if (gui.mainwin != NULL) + gtk_widget_destroy(gui.mainwin); +--- 4231,4238 ---- + } + + + void +! gui_mch_exit(int rc UNUSED) + { + if (gui.mainwin != NULL) + gtk_widget_destroy(gui.mainwin); +*************** +*** 4286,4292 **** + * report the new size through form_configure_event(). That caused the window + * layout to be messed up. + */ +- /*ARGSUSED0*/ + static gboolean + force_shell_resize_idle(gpointer data) + { +--- 4287,4292 ---- +*************** +*** 4314,4325 **** + /* + * Set the windows size. + */ +- /*ARGSUSED2*/ + void + gui_mch_set_shellsize(int width, int height, +! int min_width, int min_height, +! int base_width, int base_height, +! int direction) + { + #ifndef HAVE_GTK2 + /* Hack: When the form already is at the desired size, the window might +--- 4314,4324 ---- + /* + * Set the windows size. + */ + void + gui_mch_set_shellsize(int width, int height, +! int min_width UNUSED, int min_height UNUSED, +! int base_width UNUSED, int base_height UNUSED, +! int direction UNUSED) + { + #ifndef HAVE_GTK2 + /* Hack: When the form already is at the desired size, the window might +*************** +*** 4413,4421 **** + } + + #if defined(FEAT_TITLE) || defined(PROTO) +- /*ARGSUSED*/ + void +! gui_mch_settitle(char_u *title, char_u *icon) + { + # ifdef HAVE_GTK2 + if (title != NULL && output_conv.vc_type != CONV_NONE) +--- 4412,4419 ---- + } + + #if defined(FEAT_TITLE) || defined(PROTO) + void +! gui_mch_settitle(char_u *title, char_u *icon UNUSED) + { + # ifdef HAVE_GTK2 + if (title != NULL && output_conv.vc_type != CONV_NONE) +*************** +*** 4493,4499 **** + * Get a font structure for highlighting. + * "cbdata" is a pointer to the global gui structure. + */ +- /*ARGSUSED*/ + static void + font_sel_ok(GtkWidget *wgt, gpointer cbdata) + { +--- 4491,4496 ---- +*************** +*** 4509,4515 **** + gtk_main_quit(); + } + +- /*ARGSUSED*/ + static void + font_sel_cancel(GtkWidget *wgt, gpointer cbdata) + { +--- 4506,4511 ---- +*************** +*** 4520,4526 **** + gtk_main_quit(); + } + +- /*ARGSUSED*/ + static void + font_sel_destroy(GtkWidget *wgt, gpointer cbdata) + { +--- 4516,4521 ---- +*************** +*** 4620,4626 **** + /* + * Try to load the requested fontset. + */ +- /*ARGSUSED2*/ + GuiFontset + gui_mch_get_fontset(char_u *name, int report_error, int fixed_width) + { +--- 4615,4620 ---- +*************** +*** 4863,4869 **** + styled_font[1] = &gui.ital_font; + styled_font[2] = &gui.boldital_font; + +! /* First free whatever was freviously there. */ + for (i = 0; i < 3; ++i) + if (*styled_font[i]) + { +--- 4857,4863 ---- + styled_font[1] = &gui.ital_font; + styled_font[2] = &gui.boldital_font; + +! /* First free whatever was previously there. */ + for (i = 0; i < 3; ++i) + if (*styled_font[i]) + { +*************** +*** 5012,5020 **** + * Initialize Vim to use the font or fontset with the given name. + * Return FAIL if the font could not be loaded, OK otherwise. + */ +- /*ARGSUSED1*/ + int +! gui_mch_init_font(char_u *font_name, int fontset) + { + #ifdef HAVE_GTK2 + PangoFontDescription *font_desc; +--- 5006,5013 ---- + * Initialize Vim to use the font or fontset with the given name. + * Return FAIL if the font could not be loaded, OK otherwise. + */ + int +! gui_mch_init_font(char_u *font_name, int fontset UNUSED) + { + #ifdef HAVE_GTK2 + PangoFontDescription *font_desc; +*************** +*** 5326,5334 **** + /* + * Return the name of font "font" in allocated memory. + */ +- /*ARGSUSED*/ + char_u * +! gui_mch_get_fontname(GuiFont font, char_u *name) + { + # ifdef HAVE_GTK2 + if (font != NOFONT) +--- 5319,5326 ---- + /* + * Return the name of font "font" in allocated memory. + */ + char_u * +! gui_mch_get_fontname(GuiFont font, char_u *name UNUSED) + { + # ifdef HAVE_GTK2 + if (font != NOFONT) +*************** +*** 5732,5738 **** + { + int i; + int offset; +! const static int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; + int y = FILL_Y(row + 1) - 1; + + /* Undercurl: draw curl at the bottom of the character cell. */ +--- 5724,5730 ---- + { + int i; + int offset; +! static const int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; + int y = FILL_Y(row + 1) - 1; + + /* Undercurl: draw curl at the bottom of the character cell. */ +*************** +*** 6402,6408 **** + /* + * Callback function, used when data is available on the SNiFF connection. + */ +- /* ARGSUSED */ + static void + sniff_request_cb( + gpointer data, +--- 6394,6399 ---- +*************** +*** 6711,6719 **** + /* + * Disown the selection. + */ +- /*ARGSUSED*/ + void +! clip_mch_lose_selection(VimClipboard *cbd) + { + /* WEIRD: when using NULL to actually disown the selection, we lose the + * selection the first time we own it. */ +--- 6702,6709 ---- + /* + * Disown the selection. + */ + void +! clip_mch_lose_selection(VimClipboard *cbd UNUSED) + { + /* WEIRD: when using NULL to actually disown the selection, we lose the + * selection the first time we own it. */ +*************** +*** 6741,6749 **** + * Send the current selection to the clipboard. Do nothing for X because we + * will fill in the selection only when requested by another app. + */ +- /*ARGSUSED*/ + void +! clip_mch_set_selection(VimClipboard *cbd) + { + } + +--- 6731,6738 ---- + * Send the current selection to the clipboard. Do nothing for X because we + * will fill in the selection only when requested by another app. + */ + void +! clip_mch_set_selection(VimClipboard *cbd UNUSED) + { + } + +*************** +*** 6950,6956 **** + else + id &= ~1; /* they are always even (why?) */ + } +! else if (shape < sizeof(mshape_ids) / sizeof(int)) + id = mshape_ids[shape]; + else + return; +--- 6939,6945 ---- + else + id &= ~1; /* they are always even (why?) */ + } +! else if (shape < (int)(sizeof(mshape_ids) / sizeof(int))) + id = mshape_ids[shape]; + else + return; +*** ../vim-7.2.180/src/gui_gtk_f.c 2007-05-10 19:50:33.000000000 +0200 +--- src/gui_gtk_f.c 2009-05-17 15:48:51.000000000 +0200 +*************** +*** 227,240 **** + + if (!form_type) + { +! GtkTypeInfo form_info = +! { +! "GtkForm", +! sizeof(GtkForm), +! sizeof(GtkFormClass), +! (GtkClassInitFunc) gtk_form_class_init, +! (GtkObjectInitFunc) gtk_form_init +! }; + + form_type = gtk_type_unique(GTK_TYPE_CONTAINER, &form_info); + } +--- 227,239 ---- + + if (!form_type) + { +! GtkTypeInfo form_info; +! +! form_info.type_name = "GtkForm"; +! form_info.object_size = sizeof(GtkForm); +! form_info.class_size = sizeof(GtkFormClass); +! form_info.class_init_func = (GtkClassInitFunc)gtk_form_class_init; +! form_info.object_init_func = (GtkObjectInitFunc)gtk_form_init; + + form_type = gtk_type_unique(GTK_TYPE_CONTAINER, &form_info); + } +*************** +*** 611,620 **** + } + } + +- /*ARGSUSED1*/ + static void + gtk_form_forall(GtkContainer *container, +! gboolean include_internals, + GtkCallback callback, + gpointer callback_data) + { +--- 610,618 ---- + } + } + + static void + gtk_form_forall(GtkContainer *container, +! gboolean include_internals UNUSED, + GtkCallback callback, + gpointer callback_data) + { +*************** +*** 786,794 **** + * them or discards them, depending on whether we are obscured + * or not. + */ +- /*ARGSUSED1*/ + static GdkFilterReturn +! gtk_form_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) + { + XEvent *xevent; + GtkForm *form; +--- 784,791 ---- + * them or discards them, depending on whether we are obscured + * or not. + */ + static GdkFilterReturn +! gtk_form_filter(GdkXEvent *gdk_xevent, GdkEvent *event UNUSED, gpointer data) + { + XEvent *xevent; + GtkForm *form; +*************** +*** 821,829 **** + * there is no corresponding event in GTK, so we have + * to get the events from a filter + */ +- /*ARGSUSED1*/ + static GdkFilterReturn +! gtk_form_main_filter(GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data) + { + XEvent *xevent; + GtkForm *form; +--- 818,827 ---- + * there is no corresponding event in GTK, so we have + * to get the events from a filter + */ + static GdkFilterReturn +! gtk_form_main_filter(GdkXEvent *gdk_xevent, +! GdkEvent *event UNUSED, +! gpointer data) + { + XEvent *xevent; + GtkForm *form; +*************** +*** 911,919 **** + #endif + } + +- /*ARGSUSED0*/ + static void +! gtk_form_child_map(GtkWidget *widget, gpointer user_data) + { + GtkFormChild *child; + +--- 909,916 ---- + #endif + } + + static void +! gtk_form_child_map(GtkWidget *widget UNUSED, gpointer user_data) + { + GtkFormChild *child; + +*************** +*** 923,931 **** + gdk_window_show(child->window); + } + +- /*ARGSUSED0*/ + static void +! gtk_form_child_unmap(GtkWidget *widget, gpointer user_data) + { + GtkFormChild *child; + +--- 920,927 ---- + gdk_window_show(child->window); + } + + static void +! gtk_form_child_unmap(GtkWidget *widget UNUSED, gpointer user_data) + { + GtkFormChild *child; + +*** ../vim-7.2.180/src/gui_beval.c 2009-03-18 12:20:35.000000000 +0100 +--- src/gui_beval.c 2009-05-17 15:53:22.000000000 +0200 +*************** +*** 15,21 **** + /* + * Common code, invoked when the mouse is resting for a moment. + */ +- /*ARGSUSED*/ + void + general_beval_cb(beval, state) + BalloonEval *beval; +--- 15,20 ---- +*************** +*** 551,559 **** + return FALSE; /* continue emission */ + } + +- /*ARGSUSED*/ + static gint +! mainwin_event_cb(GtkWidget *widget, GdkEvent *event, gpointer data) + { + BalloonEval *beval = (BalloonEval *)data; + +--- 550,557 ---- + return FALSE; /* continue emission */ + } + + static gint +! mainwin_event_cb(GtkWidget *widget UNUSED, GdkEvent *event, gpointer data) + { + BalloonEval *beval = (BalloonEval *)data; + +*************** +*** 663,671 **** + return FALSE; /* don't call me again */ + } + +- /*ARGSUSED2*/ + static gint +! balloon_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data) + { + gtk_paint_flat_box(widget->style, widget->window, + GTK_STATE_NORMAL, GTK_SHADOW_OUT, +--- 661,670 ---- + return FALSE; /* don't call me again */ + } + + static gint +! balloon_expose_event_cb(GtkWidget *widget, +! GdkEventExpose *event, +! gpointer data UNUSED) + { + gtk_paint_flat_box(widget->style, widget->window, + GTK_STATE_NORMAL, GTK_SHADOW_OUT, +*************** +*** 676,682 **** + } + + # ifndef HAVE_GTK2 +- /*ARGSUSED2*/ + static void + balloon_draw_cb(GtkWidget *widget, GdkRectangle *area, gpointer data) + { +--- 675,680 ---- +*************** +*** 726,732 **** + /* + * The X event handler. All it does is call the real event handler. + */ +- /*ARGSUSED*/ + static void + pointerEventEH(w, client_data, event, unused) + Widget w; +--- 724,729 ---- +*************** +*** 877,883 **** + } + } + +- /*ARGSUSED*/ + static void + timerRoutine(dx, id) + XtPointer dx; +--- 874,879 ---- +*** ../vim-7.2.180/src/netbeans.c 2009-02-21 22:12:43.000000000 +0100 +--- src/netbeans.c 2009-05-17 15:51:14.000000000 +0200 +*************** +*** 700,706 **** + /* + * Read and process a command from netbeans. + */ +- /*ARGSUSED*/ + #if defined(FEAT_GUI_W32) || defined(PROTO) + /* Use this one when generating prototypes, the others are static. */ + void +--- 700,705 ---- +*************** +*** 708,719 **** + #else + # ifdef FEAT_GUI_MOTIF + static void +! messageFromNetbeans(XtPointer clientData, int *unused1, XtInputId *unused2) + # endif + # ifdef FEAT_GUI_GTK + static void +! messageFromNetbeans(gpointer clientData, gint unused1, +! GdkInputCondition unused2) + # endif + #endif + { +--- 707,721 ---- + #else + # ifdef FEAT_GUI_MOTIF + static void +! messageFromNetbeans(XtPointer clientData UNUSED +! int *unused1 UNUSED, +! XtInputId *unused2 UNUSED) + # endif + # ifdef FEAT_GUI_GTK + static void +! messageFromNetbeans(gpointer clientData UNUSED, +! gint unused1 UNUSED, +! GdkInputCondition unused2 UNUSED) + # endif + #endif + { +*************** +*** 1585,1591 **** +--- 1587,1595 ---- + buf_delsign(buf->bufp, id); + } + else ++ { + nbdebug((" No sign on line %d\n", i)); ++ } + } + + nbdebug((" Deleting lines %d through %d\n", del_from_lnum, del_to_lnum)); +*************** +*** 2144,2150 **** +--- 2148,2156 ---- + #endif + } + else ++ { + nbdebug((" BAD POSITION in setDot: %s\n", s)); ++ } + + /* gui_update_cursor(TRUE, FALSE); */ + /* update_curbuf(NOT_VALID); */ +*************** +*** 2744,2754 **** + * cursor and sends it to the debugger for evaluation. The debugger should + * respond with a showBalloon command when there is a useful result. + */ +- /*ARGSUSED*/ + void + netbeans_beval_cb( + BalloonEval *beval, +! int state) + { + win_T *wp; + char_u *text; +--- 2750,2759 ---- + * cursor and sends it to the debugger for evaluation. The debugger should + * respond with a showBalloon command when there is a useful result. + */ + void + netbeans_beval_cb( + BalloonEval *beval, +! int state UNUSED) + { + win_T *wp; + char_u *text; +*************** +*** 3061,3069 **** + /* + * Send netbeans an unmodufied command. + */ +- /*ARGSUSED*/ + void +! netbeans_unmodified(buf_T *bufp) + { + #if 0 + char_u buf[128]; +--- 3066,3073 ---- + /* + * Send netbeans an unmodufied command. + */ + void +! netbeans_unmodified(buf_T *bufp UNUSED) + { + #if 0 + char_u buf[128]; +*************** +*** 3370,3382 **** + * buf->signmapused[] maps buffer-local annotation IDs to an index in + * globalsignmap[]. + */ +- /*ARGSUSED*/ + static void + addsigntype( + nbbuf_T *buf, + int typeNum, + char_u *typeName, +! char_u *tooltip, + char_u *glyphFile, + int use_fg, + int fg, +--- 3374,3385 ---- + * buf->signmapused[] maps buffer-local annotation IDs to an index in + * globalsignmap[]. + */ + static void + addsigntype( + nbbuf_T *buf, + int typeNum, + char_u *typeName, +! char_u *tooltip UNUSED, + char_u *glyphFile, + int use_fg, + int fg, +*** ../vim-7.2.180/src/version.c 2009-05-17 13:30:58.000000000 +0200 +--- src/version.c 2009-05-17 16:07:26.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 181, + /**/ + +-- +I am always surprised in the Linux world how quickly solutions can be +obtained. (Imagine sending an email to Bill Gates, asking why Windows +crashed, and how to fix it... and then getting an answer that fixed the +problem... <0>_<0> !) -- Mark Langdon + + /// 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/7.2.182 b/7.2.182 new file mode 100644 index 00000000..2df64995 --- /dev/null +++ b/7.2.182 @@ -0,0 +1,66 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.182 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.182 (after 7.2.181) +Problem: Compilation problems after previous patch for Motif. Gvim with + GTK crashes on startup. +Solution: Add comma. Init form structure to zeroes. +Files: src/netbeans.c, src/gui_gtk_f.c + + +*** ../vim-7.2.181/src/netbeans.c 2009-05-17 16:23:20.000000000 +0200 +--- src/netbeans.c 2009-05-17 22:34:11.000000000 +0200 +*************** +*** 707,713 **** + #else + # ifdef FEAT_GUI_MOTIF + static void +! messageFromNetbeans(XtPointer clientData UNUSED + int *unused1 UNUSED, + XtInputId *unused2 UNUSED) + # endif +--- 707,713 ---- + #else + # ifdef FEAT_GUI_MOTIF + static void +! messageFromNetbeans(XtPointer clientData UNUSED, + int *unused1 UNUSED, + XtInputId *unused2 UNUSED) + # endif +*** ../vim-7.2.181/src/gui_gtk_f.c 2009-05-17 16:23:20.000000000 +0200 +--- src/gui_gtk_f.c 2009-05-17 23:20:41.000000000 +0200 +*************** +*** 229,234 **** +--- 229,235 ---- + { + GtkTypeInfo form_info; + ++ vim_memset(&form_info, 0, sizeof(form_info)); + form_info.type_name = "GtkForm"; + form_info.object_size = sizeof(GtkForm); + form_info.class_size = sizeof(GtkFormClass); +*** ../vim-7.2.181/src/version.c 2009-05-17 16:23:20.000000000 +0200 +--- src/version.c 2009-05-17 23:21:41.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 182, + /**/ + +-- +We apologise again for the fault in the subtitles. Those responsible for +sacking the people who have just been sacked have been sacked. + "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/7.2.183 b/7.2.183 new file mode 100644 index 00000000..ad1052db --- /dev/null +++ b/7.2.183 @@ -0,0 +1,1846 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.183 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.183 +Problem: Configure problem for sys/sysctl.h on OpenBSD. (Dasn) +Solution: Add separate check for this header file. Also switch to newer + version of autoconf. +Files: src/auto/configure, src/configure.in + + +*** ../vim-7.2.182/src/auto/configure 2009-05-14 22:19:19.000000000 +0200 +--- src/auto/configure 2009-05-16 13:32:16.000000000 +0200 +*************** +*** 1,6 **** + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +! # Generated by GNU Autoconf 2.62. + # + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, + # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +--- 1,6 ---- + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +! # Generated by GNU Autoconf 2.63. + # + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, + # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +*************** +*** 635,772 **** + # include + #endif" + +! ac_subst_vars='SHELL +! PATH_SEPARATOR +! PACKAGE_NAME +! PACKAGE_TARNAME +! PACKAGE_VERSION +! PACKAGE_STRING +! PACKAGE_BUGREPORT +! exec_prefix +! prefix +! program_transform_name +! bindir +! sbindir +! libexecdir +! datarootdir +! datadir +! sysconfdir +! sharedstatedir +! localstatedir +! includedir +! oldincludedir +! docdir +! infodir +! htmldir +! dvidir +! pdfdir +! psdir +! libdir +! localedir +! mandir +! DEFS +! ECHO_C +! ECHO_N +! ECHO_T +! LIBS +! build_alias +! host_alias +! target_alias +! SET_MAKE +! CC +! CFLAGS +! LDFLAGS +! CPPFLAGS +! ac_ct_CC +! EXEEXT +! OBJEXT +! CPP +! GREP +! EGREP +! AWK +! STRIP +! CPP_MM +! OS_EXTRA_SRC +! OS_EXTRA_OBJ +! VIMNAME +! EXNAME +! VIEWNAME +! line_break +! dovimdiff +! dogvimdiff +! compiledby +! vi_cv_path_mzscheme +! MZSCHEME_SRC +! MZSCHEME_OBJ +! MZSCHEME_PRO +! MZSCHEME_LIBS +! MZSCHEME_CFLAGS +! vi_cv_path_perl +! vi_cv_perllib +! shrpenv +! PERL_SRC +! PERL_OBJ +! PERL_PRO +! PERL_CFLAGS +! PERL_LIBS +! vi_cv_path_python +! PYTHON_CONFDIR +! PYTHON_LIBS +! PYTHON_GETPATH_CFLAGS +! PYTHON_CFLAGS +! PYTHON_SRC +! PYTHON_OBJ +! vi_cv_path_tcl +! TCL_SRC +! TCL_OBJ +! TCL_PRO +! TCL_CFLAGS +! TCL_LIBS +! vi_cv_path_ruby +! RUBY_SRC +! RUBY_OBJ +! RUBY_PRO +! RUBY_CFLAGS +! RUBY_LIBS +! WORKSHOP_SRC +! WORKSHOP_OBJ +! NETBEANS_SRC +! NETBEANS_OBJ +! SNIFF_SRC +! SNIFF_OBJ +! xmkmfpath +! XMKMF +! X_CFLAGS +! X_PRE_LIBS +! X_LIBS +! X_EXTRA_LIBS +! X_LIB +! GTK_CONFIG +! GTK12_CONFIG +! PKG_CONFIG +! GTK_CFLAGS +! GTK_LIBS +! GTK_LIBNAME +! GNOME_LIBS +! GNOME_LIBDIR +! GNOME_INCLUDEDIR +! GNOME_CONFIG +! MOTIF_LIBNAME +! NARROW_PROTO +! GUI_INC_LOC +! GUI_LIB_LOC +! GUITYPE +! GUI_X_LIBS +! HANGULIN_SRC +! HANGULIN_OBJ +! TAGPRG +! INSTALL_LANGS +! INSTALL_TOOL_LANGS +! MSGFMT +! MAKEMO +! DEPEND_CFLAGS_FILTER + LIBOBJS +! LTLIBOBJS' + ac_subst_files='' + ac_user_opts=' + enable_option_checking +--- 635,772 ---- + # include + #endif" + +! ac_subst_vars='LTLIBOBJS + LIBOBJS +! DEPEND_CFLAGS_FILTER +! MAKEMO +! MSGFMT +! INSTALL_TOOL_LANGS +! INSTALL_LANGS +! TAGPRG +! HANGULIN_OBJ +! HANGULIN_SRC +! GUI_X_LIBS +! GUITYPE +! GUI_LIB_LOC +! GUI_INC_LOC +! NARROW_PROTO +! MOTIF_LIBNAME +! GNOME_CONFIG +! GNOME_INCLUDEDIR +! GNOME_LIBDIR +! GNOME_LIBS +! GTK_LIBNAME +! GTK_LIBS +! GTK_CFLAGS +! PKG_CONFIG +! GTK12_CONFIG +! GTK_CONFIG +! X_LIB +! X_EXTRA_LIBS +! X_LIBS +! X_PRE_LIBS +! X_CFLAGS +! XMKMF +! xmkmfpath +! SNIFF_OBJ +! SNIFF_SRC +! NETBEANS_OBJ +! NETBEANS_SRC +! WORKSHOP_OBJ +! WORKSHOP_SRC +! RUBY_LIBS +! RUBY_CFLAGS +! RUBY_PRO +! RUBY_OBJ +! RUBY_SRC +! vi_cv_path_ruby +! TCL_LIBS +! TCL_CFLAGS +! TCL_PRO +! TCL_OBJ +! TCL_SRC +! vi_cv_path_tcl +! PYTHON_OBJ +! PYTHON_SRC +! PYTHON_CFLAGS +! PYTHON_GETPATH_CFLAGS +! PYTHON_LIBS +! PYTHON_CONFDIR +! vi_cv_path_python +! PERL_LIBS +! PERL_CFLAGS +! PERL_PRO +! PERL_OBJ +! PERL_SRC +! shrpenv +! vi_cv_perllib +! vi_cv_path_perl +! MZSCHEME_CFLAGS +! MZSCHEME_LIBS +! MZSCHEME_PRO +! MZSCHEME_OBJ +! MZSCHEME_SRC +! vi_cv_path_mzscheme +! compiledby +! dogvimdiff +! dovimdiff +! line_break +! VIEWNAME +! EXNAME +! VIMNAME +! OS_EXTRA_OBJ +! OS_EXTRA_SRC +! CPP_MM +! STRIP +! AWK +! EGREP +! GREP +! CPP +! OBJEXT +! EXEEXT +! ac_ct_CC +! CPPFLAGS +! LDFLAGS +! CFLAGS +! CC +! SET_MAKE +! target_alias +! host_alias +! build_alias +! LIBS +! ECHO_T +! ECHO_N +! ECHO_C +! DEFS +! mandir +! localedir +! libdir +! psdir +! pdfdir +! dvidir +! htmldir +! infodir +! docdir +! oldincludedir +! includedir +! localstatedir +! sharedstatedir +! sysconfdir +! datadir +! datarootdir +! libexecdir +! sbindir +! bindir +! program_transform_name +! prefix +! exec_prefix +! PACKAGE_BUGREPORT +! PACKAGE_STRING +! PACKAGE_VERSION +! PACKAGE_TARNAME +! PACKAGE_NAME +! PATH_SEPARATOR +! SHELL' + ac_subst_files='' + ac_user_opts=' + enable_option_checking +*************** +*** 1253,1261 **** + if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; +! fatal) { $as_echo "$as_me: error: Unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; +! *) $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac + fi + +--- 1253,1261 ---- + if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; +! fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; +! *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac + fi + +*************** +*** 1308,1314 **** + ac_pwd=`pwd` && test -n "$ac_pwd" && + ac_ls_di=`ls -di .` && + ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || +! { $as_echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } + test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 +--- 1308,1314 ---- + ac_pwd=`pwd` && test -n "$ac_pwd" && + ac_ls_di=`ls -di .` && + ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || +! { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } + test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 +*************** +*** 1587,1593 **** + if $ac_init_version; then + cat <<\_ACEOF + configure +! generated by GNU Autoconf 2.62 + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +--- 1587,1593 ---- + if $ac_init_version; then + cat <<\_ACEOF + configure +! generated by GNU Autoconf 2.63 + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +*************** +*** 1601,1607 **** + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +! generated by GNU Autoconf 2.62. Invocation command line was + + $ $0 $@ + +--- 1601,1607 ---- + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +! generated by GNU Autoconf 2.63. Invocation command line was + + $ $0 $@ + +*************** +*** 1724,1731 **** + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( +! *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +! $as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( +--- 1724,1731 ---- + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( +! *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +! $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( +*************** +*** 1928,1933 **** +--- 1928,1935 ---- + fi + done + if $ac_cache_corrupted; then ++ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 ++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 + $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +*************** +*** 2084,2095 **** + else + case $cross_compiling:$ac_tool_warned in + yes:) +! { $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +! whose name does not start with the host triplet. If you think this +! configuration is useful to you, please write to autoconf@gnu.org." >&5 +! $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +! whose name does not start with the host triplet. If you think this +! configuration is useful to you, please write to autoconf@gnu.org." >&2;} + ac_tool_warned=yes ;; + esac + CC=$ac_ct_CC +--- 2086,2093 ---- + else + case $cross_compiling:$ac_tool_warned in + yes:) +! { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +! $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} + ac_tool_warned=yes ;; + esac + CC=$ac_ct_CC +*************** +*** 2288,2299 **** + else + case $cross_compiling:$ac_tool_warned in + yes:) +! { $as_echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +! whose name does not start with the host triplet. If you think this +! configuration is useful to you, please write to autoconf@gnu.org." >&5 +! $as_echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +! whose name does not start with the host triplet. If you think this +! configuration is useful to you, please write to autoconf@gnu.org." >&2;} + ac_tool_warned=yes ;; + esac + CC=$ac_ct_CC +--- 2286,2293 ---- + else + case $cross_compiling:$ac_tool_warned in + yes:) +! { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +! $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} + ac_tool_warned=yes ;; + esac + CC=$ac_ct_CC +*************** +*** 2303,2313 **** + fi + + +! test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: no acceptable C compiler found in \$PATH + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; } + + # Provide some information about the compiler. + $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +--- 2297,2309 ---- + fi + + +! test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +! { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: no acceptable C compiler found in \$PATH + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; }; } + + # Provide some information about the compiler. + $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +*************** +*** 2437,2447 **** + $as_echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: C compiler cannot create executables + See \`config.log' for more details." >&2;} +! { (exit 77); exit 77; }; } + fi + + ac_exeext=$ac_cv_exeext +--- 2433,2445 ---- + $as_echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 ++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: C compiler cannot create executables + See \`config.log' for more details." >&2;} +! { (exit 77); exit 77; }; }; } + fi + + ac_exeext=$ac_cv_exeext +*************** +*** 2469,2481 **** + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else +! { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. + If you meant to cross compile, use \`--host'. + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: cannot run C compiled programs. + If you meant to cross compile, use \`--host'. + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; } + fi + fi + fi +--- 2467,2481 ---- + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else +! { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +! { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. + If you meant to cross compile, use \`--host'. + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: cannot run C compiled programs. + If you meant to cross compile, use \`--host'. + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; }; } + fi + fi + fi +*************** +*** 2518,2528 **** + esac + done + else +! { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; } + fi + + rm -f conftest$ac_cv_exeext +--- 2518,2530 ---- + esac + done + else +! { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +! { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; }; } + fi + + rm -f conftest$ac_cv_exeext +*************** +*** 2576,2586 **** + $as_echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + + { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; } + fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext +--- 2578,2590 ---- + $as_echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + ++ { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 ++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; }; } + fi + + rm -f conftest.$ac_cv_objext conftest.$ac_ext +*************** +*** 3148,3158 **** + if $ac_preproc_ok; then + : + else +! { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; } + fi + + ac_ext=c +--- 3152,3164 ---- + if $ac_preproc_ok; then + : + else +! { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +! $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +! { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check + See \`config.log' for more details." >&5 + $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check + See \`config.log' for more details." >&2;} +! { (exit 1); exit 1; }; }; } + fi + + ac_ext=c +*************** +*** 4016,4023 **** + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 4022,4030 ---- + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 4154,4160 **** + $as_echo "$ac_cv_header_Carbon_Carbon_h" >&6; } + + fi +! if test $ac_cv_header_Carbon_Carbon_h = yes; then + CARBON=yes + fi + +--- 4161,4167 ---- + $as_echo "$ac_cv_header_Carbon_Carbon_h" >&6; } + + fi +! if test "x$ac_cv_header_Carbon_Carbon_h" = x""yes; then + CARBON=yes + fi + +*************** +*** 4484,4490 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 + $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +! if test $ac_cv_lib_selinux_is_selinux_enabled = yes; then + LIBS="$LIBS -lselinux" + cat >>confdefs.h <<\_ACEOF + #define HAVE_SELINUX 1 +--- 4491,4497 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5 + $as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; } +! if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then + LIBS="$LIBS -lselinux" + cat >>confdefs.h <<\_ACEOF + #define HAVE_SELINUX 1 +*************** +*** 5891,5897 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 + $as_echo "$ac_cv_lib_socket_socket" >&6; } +! if test $ac_cv_lib_socket_socket = yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBSOCKET 1 + _ACEOF +--- 5898,5904 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 + $as_echo "$ac_cv_lib_socket_socket" >&6; } +! if test "x$ac_cv_lib_socket_socket" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBSOCKET 1 + _ACEOF +*************** +*** 5966,5972 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 + $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +! if test $ac_cv_lib_nsl_gethostbyname = yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBNSL 1 + _ACEOF +--- 5973,5979 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 + $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +! if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBNSL 1 + _ACEOF +*************** +*** 6203,6210 **** + have_x=disabled + else + case $x_includes,$x_libraries in #( +! *\'*) { { $as_echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5 +! $as_echo "$as_me: error: Cannot use X directory names containing '" >&2;} + { (exit 1); exit 1; }; };; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then + $as_echo_n "(cached) " >&6 +--- 6210,6217 ---- + have_x=disabled + else + case $x_includes,$x_libraries in #( +! *\'*) { { $as_echo "$as_me:$LINENO: error: cannot use X directory names containing '" >&5 +! $as_echo "$as_me: error: cannot use X directory names containing '" >&2;} + { (exit 1); exit 1; }; };; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then + $as_echo_n "(cached) " >&6 +*************** +*** 6242,6248 **** + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in +! /usr/lib | /lib) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi +--- 6249,6255 ---- + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in +! /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi +*************** +*** 6682,6688 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 + $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +! if test $ac_cv_lib_dnet_dnet_ntoa = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" + fi + +--- 6689,6695 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 + $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +! if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" + fi + +*************** +*** 6752,6758 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 + $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +! if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" + fi + +--- 6759,6765 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 + $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +! if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" + fi + +*************** +*** 6924,6930 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 + $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +! if test $ac_cv_lib_nsl_gethostbyname = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" + fi + +--- 6931,6937 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 + $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +! if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" + fi + +*************** +*** 6994,7000 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 + $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +! if test $ac_cv_lib_bsd_gethostbyname = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" + fi + +--- 7001,7007 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 + $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +! if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" + fi + +*************** +*** 7160,7166 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 + $as_echo "$ac_cv_lib_socket_connect" >&6; } +! if test $ac_cv_lib_socket_connect = yes; then + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" + fi + +--- 7167,7173 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 + $as_echo "$ac_cv_lib_socket_connect" >&6; } +! if test "x$ac_cv_lib_socket_connect" = x""yes; then + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" + fi + +*************** +*** 7319,7325 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 + $as_echo "$ac_cv_lib_posix_remove" >&6; } +! if test $ac_cv_lib_posix_remove = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" + fi + +--- 7326,7332 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 + $as_echo "$ac_cv_lib_posix_remove" >&6; } +! if test "x$ac_cv_lib_posix_remove" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" + fi + +*************** +*** 7478,7484 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 + $as_echo "$ac_cv_lib_ipc_shmat" >&6; } +! if test $ac_cv_lib_ipc_shmat = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" + fi + +--- 7485,7491 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 + $as_echo "$ac_cv_lib_ipc_shmat" >&6; } +! if test "x$ac_cv_lib_ipc_shmat" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" + fi + +*************** +*** 7559,7565 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 + $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +! if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" + fi + +--- 7566,7572 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 + $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +! if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" + fi + +*************** +*** 7727,7733 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&5 + $as_echo "$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&6; } +! if test $ac_cv_lib_Xdmcp__XdmcpAuthDoIt = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp" + fi + +--- 7734,7740 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&5 + $as_echo "$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" >&6; } +! if test "x$ac_cv_lib_Xdmcp__XdmcpAuthDoIt" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lXdmcp" + fi + +*************** +*** 7797,7803 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceOpenConnection" >&5 + $as_echo "$ac_cv_lib_ICE_IceOpenConnection" >&6; } +! if test $ac_cv_lib_ICE_IceOpenConnection = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE" + fi + +--- 7804,7810 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceOpenConnection" >&5 + $as_echo "$ac_cv_lib_ICE_IceOpenConnection" >&6; } +! if test "x$ac_cv_lib_ICE_IceOpenConnection" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lSM -lICE" + fi + +*************** +*** 7868,7874 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5 + $as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; } +! if test $ac_cv_lib_Xpm_XpmCreatePixmapFromData = yes; then + X_PRE_LIBS="$X_PRE_LIBS -lXpm" + fi + +--- 7875,7881 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5 + $as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; } +! if test "x$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = x""yes; then + X_PRE_LIBS="$X_PRE_LIBS -lXpm" + fi + +*************** +*** 9251,9257 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeQueryExtension" >&5 + $as_echo "$ac_cv_lib_Xext_XShapeQueryExtension" >&6; } +! if test $ac_cv_lib_Xext_XShapeQueryExtension = yes; then + GUI_X_LIBS="-lXext" + fi + +--- 9258,9264 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeQueryExtension" >&5 + $as_echo "$ac_cv_lib_Xext_XShapeQueryExtension" >&6; } +! if test "x$ac_cv_lib_Xext_XShapeQueryExtension" = x""yes; then + GUI_X_LIBS="-lXext" + fi + +*************** +*** 9320,9326 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_w_wslen" >&5 + $as_echo "$ac_cv_lib_w_wslen" >&6; } +! if test $ac_cv_lib_w_wslen = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lw" + fi + +--- 9327,9333 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_w_wslen" >&5 + $as_echo "$ac_cv_lib_w_wslen" >&6; } +! if test "x$ac_cv_lib_w_wslen" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lw" + fi + +*************** +*** 9389,9395 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlsym" >&5 + $as_echo "$ac_cv_lib_dl_dlsym" >&6; } +! if test $ac_cv_lib_dl_dlsym = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl" + fi + +--- 9396,9402 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlsym" >&5 + $as_echo "$ac_cv_lib_dl_dlsym" >&6; } +! if test "x$ac_cv_lib_dl_dlsym" = x""yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldl" + fi + +*************** +*** 9458,9464 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&5 + $as_echo "$ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&6; } +! if test $ac_cv_lib_Xmu_XmuCreateStippledPixmap = yes; then + GUI_X_LIBS="-lXmu $GUI_X_LIBS" + fi + +--- 9465,9471 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&5 + $as_echo "$ac_cv_lib_Xmu_XmuCreateStippledPixmap" >&6; } +! if test "x$ac_cv_lib_Xmu_XmuCreateStippledPixmap" = x""yes; then + GUI_X_LIBS="-lXmu $GUI_X_LIBS" + fi + +*************** +*** 9528,9534 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xp_XpEndJob" >&5 + $as_echo "$ac_cv_lib_Xp_XpEndJob" >&6; } +! if test $ac_cv_lib_Xp_XpEndJob = yes; then + GUI_X_LIBS="-lXp $GUI_X_LIBS" + fi + +--- 9535,9541 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xp_XpEndJob" >&5 + $as_echo "$ac_cv_lib_Xp_XpEndJob" >&6; } +! if test "x$ac_cv_lib_Xp_XpEndJob" = x""yes; then + GUI_X_LIBS="-lXp $GUI_X_LIBS" + fi + +*************** +*** 9699,9706 **** + $as_echo "$ac_res" >&6; } + + fi +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 9706,9714 ---- + $as_echo "$ac_res" >&6; } + + fi +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 9852,9859 **** + $as_echo "$ac_res" >&6; } + + fi +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 9860,9868 ---- + $as_echo "$ac_res" >&6; } + + fi +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 10098,10105 **** + $as_echo "$ac_res" >&6; } + + fi +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 10107,10115 ---- + $as_echo "$ac_res" >&6; } + + fi +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 10539,10545 **** + $as_echo "$ac_cv_header_elf_h" >&6; } + + fi +! if test $ac_cv_header_elf_h = yes; then + HAS_ELF=1 + fi + +--- 10549,10555 ---- + $as_echo "$ac_cv_header_elf_h" >&6; } + + fi +! if test "x$ac_cv_header_elf_h" = x""yes; then + HAS_ELF=1 + fi + +*************** +*** 10605,10611 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5 + $as_echo "$ac_cv_lib_elf_main" >&6; } +! if test $ac_cv_lib_elf_main = yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBELF 1 + _ACEOF +--- 10615,10621 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5 + $as_echo "$ac_cv_lib_elf_main" >&6; } +! if test "x$ac_cv_lib_elf_main" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBELF 1 + _ACEOF +*************** +*** 10679,10686 **** + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 + _ACEOF +--- 10689,10697 ---- + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 10966,10972 **** + + + +- + for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \ + termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h sys/types.h termio.h \ + iconv.h langinfo.h math.h unistd.h stropts.h errno.h \ +--- 10977,10982 ---- +*************** +*** 10974,10980 **** + sys/stream.h termios.h libc.h sys/statfs.h \ + poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \ + libgen.h util/debug.h util/msg18n.h frame.h \ +! sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h + do + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` + if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +--- 10984,10990 ---- + sys/stream.h termios.h libc.h sys/statfs.h \ + poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \ + libgen.h util/debug.h util/msg18n.h frame.h \ +! sys/acl.h sys/access.h sys/sysinfo.h wchar.h wctype.h + do + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` + if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +*************** +*** 11108,11115 **** + $as_echo "$ac_res" >&6; } + + fi +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 11118,11126 ---- + $as_echo "$ac_res" >&6; } + + fi +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 11172,11179 **** + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 11183,11256 ---- + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then +! cat >>confdefs.h <<_ACEOF +! #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +! _ACEOF +! +! fi +! +! done +! +! +! +! for ac_header in sys/sysctl.h +! do +! as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +! { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +! $as_echo_n "checking for $ac_header... " >&6; } +! if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then +! $as_echo_n "(cached) " >&6 +! else +! cat >conftest.$ac_ext <<_ACEOF +! /* confdefs.h. */ +! _ACEOF +! cat confdefs.h >>conftest.$ac_ext +! cat >>conftest.$ac_ext <<_ACEOF +! /* end confdefs.h. */ +! #if defined HAVE_SYS_PARAM_H +! # include +! #endif +! +! #include <$ac_header> +! _ACEOF +! rm -f conftest.$ac_objext +! if { (ac_try="$ac_compile" +! case "(($ac_try" in +! *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; +! *) ac_try_echo=$ac_try;; +! esac +! eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +! $as_echo "$ac_try_echo") >&5 +! (eval "$ac_compile") 2>conftest.er1 +! ac_status=$? +! grep -v '^ *+' conftest.er1 >conftest.err +! rm -f conftest.er1 +! cat conftest.err >&5 +! $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 +! (exit $ac_status); } && { +! test -z "$ac_c_werror_flag" || +! test ! -s conftest.err +! } && test -s conftest.$ac_objext; then +! eval "$as_ac_Header=yes" +! else +! $as_echo "$as_me: failed program was:" >&5 +! sed 's/^/| /' conftest.$ac_ext >&5 +! +! eval "$as_ac_Header=no" +! fi +! +! rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +! fi +! ac_res=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +! $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 11372,11379 **** + $as_echo "$ac_res" >&6; } + + fi +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 11449,11457 ---- + $as_echo "$ac_res" >&6; } + + fi +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 11770,11776 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 + $as_echo "$ac_cv_type_mode_t" >&6; } +! if test $ac_cv_type_mode_t = yes; then + : + else + +--- 11848,11854 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 + $as_echo "$ac_cv_type_mode_t" >&6; } +! if test "x$ac_cv_type_mode_t" = x""yes; then + : + else + +*************** +*** 11874,11880 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 + $as_echo "$ac_cv_type_off_t" >&6; } +! if test $ac_cv_type_off_t = yes; then + : + else + +--- 11952,11958 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 + $as_echo "$ac_cv_type_off_t" >&6; } +! if test "x$ac_cv_type_off_t" = x""yes; then + : + else + +*************** +*** 11978,11984 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 + $as_echo "$ac_cv_type_pid_t" >&6; } +! if test $ac_cv_type_pid_t = yes; then + : + else + +--- 12056,12062 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 + $as_echo "$ac_cv_type_pid_t" >&6; } +! if test "x$ac_cv_type_pid_t" = x""yes; then + : + else + +*************** +*** 12082,12088 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 + $as_echo "$ac_cv_type_size_t" >&6; } +! if test $ac_cv_type_size_t = yes; then + : + else + +--- 12160,12166 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 + $as_echo "$ac_cv_type_size_t" >&6; } +! if test "x$ac_cv_type_size_t" = x""yes; then + : + else + +*************** +*** 12286,12292 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5 + $as_echo "$ac_cv_type_ino_t" >&6; } +! if test $ac_cv_type_ino_t = yes; then + : + else + +--- 12364,12370 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5 + $as_echo "$ac_cv_type_ino_t" >&6; } +! if test "x$ac_cv_type_ino_t" = x""yes; then + : + else + +*************** +*** 12390,12396 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_dev_t" >&5 + $as_echo "$ac_cv_type_dev_t" >&6; } +! if test $ac_cv_type_dev_t = yes; then + : + else + +--- 12468,12474 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_type_dev_t" >&5 + $as_echo "$ac_cv_type_dev_t" >&6; } +! if test "x$ac_cv_type_dev_t" = x""yes; then + : + else + +*************** +*** 12680,12687 **** + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! if test `eval 'as_val=${'$as_ac_Lib'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_LIB${libname}" | $as_tr_cpp` 1 + _ACEOF +--- 12758,12766 ---- + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_Lib'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_LIB${libname}" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 13929,13936 **** + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! if test `eval 'as_val=${'$as_ac_var'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 + _ACEOF +--- 14008,14016 ---- + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_var'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 14313,14319 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_strtod" >&5 + $as_echo "$ac_cv_lib_m_strtod" >&6; } +! if test $ac_cv_lib_m_strtod = yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBM 1 + _ACEOF +--- 14393,14399 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_m_strtod" >&5 + $as_echo "$ac_cv_lib_m_strtod" >&6; } +! if test "x$ac_cv_lib_m_strtod" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define HAVE_LIBM 1 + _ACEOF +*************** +*** 14473,14479 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix1e_acl_get_file" >&5 + $as_echo "$ac_cv_lib_posix1e_acl_get_file" >&6; } +! if test $ac_cv_lib_posix1e_acl_get_file = yes; then + LIBS="$LIBS -lposix1e" + else + { $as_echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5 +--- 14553,14559 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix1e_acl_get_file" >&5 + $as_echo "$ac_cv_lib_posix1e_acl_get_file" >&6; } +! if test "x$ac_cv_lib_posix1e_acl_get_file" = x""yes; then + LIBS="$LIBS -lposix1e" + else + { $as_echo "$as_me:$LINENO: checking for acl_get_file in -lacl" >&5 +*************** +*** 14541,14547 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_acl_acl_get_file" >&5 + $as_echo "$ac_cv_lib_acl_acl_get_file" >&6; } +! if test $ac_cv_lib_acl_acl_get_file = yes; then + LIBS="$LIBS -lacl" + { $as_echo "$as_me:$LINENO: checking for fgetxattr in -lattr" >&5 + $as_echo_n "checking for fgetxattr in -lattr... " >&6; } +--- 14621,14627 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_acl_acl_get_file" >&5 + $as_echo "$ac_cv_lib_acl_acl_get_file" >&6; } +! if test "x$ac_cv_lib_acl_acl_get_file" = x""yes; then + LIBS="$LIBS -lacl" + { $as_echo "$as_me:$LINENO: checking for fgetxattr in -lattr" >&5 + $as_echo_n "checking for fgetxattr in -lattr... " >&6; } +*************** +*** 14608,14614 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_attr_fgetxattr" >&5 + $as_echo "$ac_cv_lib_attr_fgetxattr" >&6; } +! if test $ac_cv_lib_attr_fgetxattr = yes; then + LIBS="$LIBS -lattr" + fi + +--- 14688,14694 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_attr_fgetxattr" >&5 + $as_echo "$ac_cv_lib_attr_fgetxattr" >&6; } +! if test "x$ac_cv_lib_attr_fgetxattr" = x""yes; then + LIBS="$LIBS -lattr" + fi + +*************** +*** 15746,15752 **** + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_xpg4__xpg4_setrunelocale" >&5 + $as_echo "$ac_cv_lib_xpg4__xpg4_setrunelocale" >&6; } +! if test $ac_cv_lib_xpg4__xpg4_setrunelocale = yes; then + LIBS="$LIBS -lxpg4" + fi + +--- 15826,15832 ---- + fi + { $as_echo "$as_me:$LINENO: result: $ac_cv_lib_xpg4__xpg4_setrunelocale" >&5 + $as_echo "$ac_cv_lib_xpg4__xpg4_setrunelocale" >&6; } +! if test "x$ac_cv_lib_xpg4__xpg4_setrunelocale" = x""yes; then + LIBS="$LIBS -lxpg4" + fi + +*************** +*** 16045,16052 **** + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! if test `eval 'as_val=${'$as_ac_var'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 + _ACEOF +--- 16125,16133 ---- + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 + $as_echo "$ac_res" >&6; } +! as_val=`eval 'as_val=${'$as_ac_var'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 16246,16252 **** + $as_echo "$ac_cv_header_dlfcn_h" >&6; } + + fi +! if test $ac_cv_header_dlfcn_h = yes; then + DLL=dlfcn.h + else + if test "${ac_cv_header_dl_h+set}" = set; then +--- 16327,16333 ---- + $as_echo "$ac_cv_header_dlfcn_h" >&6; } + + fi +! if test "x$ac_cv_header_dlfcn_h" = x""yes; then + DLL=dlfcn.h + else + if test "${ac_cv_header_dl_h+set}" = set; then +*************** +*** 16376,16382 **** + $as_echo "$ac_cv_header_dl_h" >&6; } + + fi +! if test $ac_cv_header_dl_h = yes; then + DLL=dl.h + fi + +--- 16457,16463 ---- + $as_echo "$ac_cv_header_dl_h" >&6; } + + fi +! if test "x$ac_cv_header_dl_h" = x""yes; then + DLL=dl.h + fi + +*************** +*** 16895,16902 **** + $as_echo "$ac_res" >&6; } + + fi +! if test `eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` = yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +--- 16976,16984 ---- + $as_echo "$ac_res" >&6; } + + fi +! as_val=`eval 'as_val=${'$as_ac_Header'} +! $as_echo "$as_val"'` +! if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF + #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF +*************** +*** 16986,16993 **** + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( +! *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +! $as_echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( +--- 17068,17075 ---- + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( +! *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +! $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( +*************** +*** 17379,17385 **** + # values after options handling. + ac_log=" + This file was extended by $as_me, which was +! generated by GNU Autoconf 2.62. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +--- 17461,17467 ---- + # values after options handling. + ac_log=" + This file was extended by $as_me, which was +! generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +*************** +*** 17392,17397 **** +--- 17474,17488 ---- + + _ACEOF + ++ case $ac_config_files in *" ++ "*) set x $ac_config_files; shift; ac_config_files=$*;; ++ esac ++ ++ case $ac_config_headers in *" ++ "*) set x $ac_config_headers; shift; ac_config_headers=$*;; ++ esac ++ ++ + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + # Files that config.status was made for. + config_files="$ac_config_files" +*************** +*** 17404,17419 **** + \`$as_me' instantiates files from templates according to the + current configuration. + +! Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit +! -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +! --file=FILE[:TEMPLATE] + instantiate the configuration file FILE +! --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + + Configuration files: +--- 17495,17511 ---- + \`$as_me' instantiates files from templates according to the + current configuration. + +! Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit +! -q, --quiet, --silent +! do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions +! --file=FILE[:TEMPLATE] + instantiate the configuration file FILE +! --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + + Configuration files: +*************** +*** 17428,17434 **** + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_version="\\ + config.status +! configured by $0, generated by GNU Autoconf 2.62, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + + Copyright (C) 2008 Free Software Foundation, Inc. +--- 17520,17526 ---- + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_version="\\ + config.status +! configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + + Copyright (C) 2008 Free Software Foundation, Inc. +*************** +*** 17625,17631 **** + $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + +! if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +--- 17717,17724 ---- + $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + +! ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` +! if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +*************** +*** 17830,17838 **** + } + split(mac1, mac2, "(") #) + macro = mac2[1] + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". +- prefix = substr(line, 1, index(line, defundef) - 1) + print prefix "define", macro P[macro] D[macro] + next + } else { +--- 17923,17931 ---- + } + split(mac1, mac2, "(") #) + macro = mac2[1] ++ prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { +*************** +*** 17840,17846 **** + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { +! print "/*", line, "*/" + next + } + } +--- 17933,17939 ---- + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { +! print "/*", prefix defundef, macro, "*/" + next + } + } +*************** +*** 17864,17871 **** + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; +! :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +! $as_echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; +--- 17957,17964 ---- + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; +! :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +! $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; +*************** +*** 18183,18190 **** + $ac_cs_success || { (exit 1); exit 1; } + fi + if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then +! { $as_echo "$as_me:$LINENO: WARNING: Unrecognized options: $ac_unrecognized_opts" >&5 +! $as_echo "$as_me: WARNING: Unrecognized options: $ac_unrecognized_opts" >&2;} + fi + + +--- 18276,18283 ---- + $ac_cs_success || { (exit 1); exit 1; } + fi + if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then +! { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +! $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + fi + + +*** ../vim-7.2.182/src/configure.in 2009-05-14 22:19:19.000000000 +0200 +--- src/configure.in 2009-05-16 13:32:00.000000000 +0200 +*************** +*** 2100,2106 **** + sys/stream.h termios.h libc.h sys/statfs.h \ + poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \ + libgen.h util/debug.h util/msg18n.h frame.h \ +! sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h) + + dnl sys/ptem.h depends on sys/stream.h on Solaris + AC_CHECK_HEADERS(sys/ptem.h, [], [], +--- 2100,2106 ---- + sys/stream.h termios.h libc.h sys/statfs.h \ + poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \ + libgen.h util/debug.h util/msg18n.h frame.h \ +! sys/acl.h sys/access.h sys/sysinfo.h wchar.h wctype.h) + + dnl sys/ptem.h depends on sys/stream.h on Solaris + AC_CHECK_HEADERS(sys/ptem.h, [], [], +*************** +*** 2108,2113 **** +--- 2108,2119 ---- + # include + #endif]) + ++ dnl sys/sysctl.h depends on sys/param.h on OpenBSD ++ AC_CHECK_HEADERS(sys/sysctl.h, [], [], ++ [#if defined HAVE_SYS_PARAM_H ++ # include ++ #endif]) ++ + + dnl pthread_np.h may exist but can only be used after including pthread.h + AC_MSG_CHECKING([for pthread_np.h]) +*** ../vim-7.2.182/src/version.c 2009-05-17 23:25:16.000000000 +0200 +--- src/version.c 2009-05-21 15:16:01.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 183, + /**/ + +-- +CART DRIVER: Bring out your dead! + There are legs stick out of windows and doors. Two MEN are fighting in the + mud - covered from head to foot in it. Another MAN is on his hands in + knees shovelling mud into his mouth. We just catch sight of a MAN falling + into a well. + "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/7.2.184 b/7.2.184 new file mode 100644 index 00000000..63882157 --- /dev/null +++ b/7.2.184 @@ -0,0 +1,3646 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.184 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.184 +Problem: Some more compiler warnings when using gcc -Wextra. +Solution: Add UNUSED and type casts. Autoconf check for wchar_t. +Files: src/auto/configure, src/config.h.in, src/configure.in, + src/gui_athena.c, src/gui_x11.c, src/gui.c, src/gui_beval.c, + src/gui_at_sb.c, src/gui_at_fs.c, src/gui_motif.c, + src/gui_xmdlg.c, src/gui_xmebw.c, src/if_python.c, src/window.c, + src/workshop.c + + +*** ../vim-7.2.183/src/auto/configure 2009-05-21 15:19:59.000000000 +0200 +--- src/auto/configure 2009-05-21 16:05:01.000000000 +0200 +*************** +*** 7977,7982 **** +--- 7977,8058 ---- + + LDFLAGS="$ac_save_LDFLAGS" + ++ { $as_echo "$as_me:$LINENO: checking size of wchar_t is 2 bytes" >&5 ++ $as_echo_n "checking size of wchar_t is 2 bytes... " >&6; } ++ if test "${ac_cv_small_wchar_t+set}" = set; then ++ $as_echo_n "(cached) " >&6 ++ else ++ if test "$cross_compiling" = yes; then ++ { { $as_echo "$as_me:$LINENO: error: failed to compile test program" >&5 ++ $as_echo "$as_me: error: failed to compile test program" >&2;} ++ { (exit 1); exit 1; }; } ++ else ++ cat >conftest.$ac_ext <<_ACEOF ++ /* confdefs.h. */ ++ _ACEOF ++ cat confdefs.h >>conftest.$ac_ext ++ cat >>conftest.$ac_ext <<_ACEOF ++ /* end confdefs.h. */ ++ ++ #include ++ #if STDC_HEADERS ++ # include ++ # include ++ #endif ++ main() ++ { ++ if (sizeof(wchar_t) <= 2) ++ exit(1); ++ exit(0); ++ } ++ _ACEOF ++ rm -f conftest$ac_exeext ++ if { (ac_try="$ac_link" ++ case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++ esac ++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++ $as_echo "$ac_try_echo") >&5 ++ (eval "$ac_link") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ac_try='./conftest$ac_exeext' ++ { (case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++ esac ++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++ $as_echo "$ac_try_echo") >&5 ++ (eval "$ac_try") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; }; then ++ ac_cv_small_wchar_t="no" ++ else ++ $as_echo "$as_me: program exited with status $ac_status" >&5 ++ $as_echo "$as_me: failed program was:" >&5 ++ sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ( exit $ac_status ) ++ ac_cv_small_wchar_t="yes" ++ fi ++ rm -rf conftest.dSYM ++ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext ++ fi ++ ++ ++ fi ++ ++ { $as_echo "$as_me:$LINENO: result: $ac_cv_small_wchar_t" >&5 ++ $as_echo "$ac_cv_small_wchar_t" >&6; } ++ if test "x$ac_cv_small_wchar_t" = "xyes" ; then ++ cat >>confdefs.h <<\_ACEOF ++ #define SMALL_WCHAR_T 1 ++ _ACEOF ++ ++ fi ++ + fi + fi + +*************** +*** 15417,15423 **** + + + +- + bcopy_test_prog=' + #include "confdefs.h" + #ifdef HAVE_STRING_H +--- 15493,15498 ---- +*** ../vim-7.2.183/src/config.h.in 2009-05-14 22:19:19.000000000 +0200 +--- src/config.h.in 2009-05-21 15:44:24.000000000 +0200 +*************** +*** 39,44 **** +--- 39,47 ---- + /* Defined to the size of an int */ + #undef SIZEOF_INT + ++ /* Define when wchar_t is only 2 bytes. */ ++ #undef SMALL_WCHAR_T ++ + /* + * If we cannot trust one of the following from the libraries, we use our + * own safe but probably slower vim_memmove(). +*** ../vim-7.2.183/src/configure.in 2009-05-21 15:19:59.000000000 +0200 +--- src/configure.in 2009-05-21 16:04:56.000000000 +0200 +*************** +*** 1193,1198 **** +--- 1193,1220 ---- + + LDFLAGS="$ac_save_LDFLAGS" + ++ AC_MSG_CHECKING(size of wchar_t is 2 bytes) ++ AC_CACHE_VAL(ac_cv_small_wchar_t, ++ [AC_TRY_RUN([ ++ #include ++ #if STDC_HEADERS ++ # include ++ # include ++ #endif ++ main() ++ { ++ if (sizeof(wchar_t) <= 2) ++ exit(1); ++ exit(0); ++ }], ++ ac_cv_small_wchar_t="no", ++ ac_cv_small_wchar_t="yes", ++ AC_MSG_ERROR(failed to compile test program))]) ++ AC_MSG_RESULT($ac_cv_small_wchar_t) ++ if test "x$ac_cv_small_wchar_t" = "xyes" ; then ++ AC_DEFINE(SMALL_WCHAR_T) ++ fi ++ + fi + fi + +*************** +*** 2881,2887 **** + AC_MSG_RESULT($ac_cv_sizeof_int) + AC_DEFINE_UNQUOTED(SIZEOF_INT, $ac_cv_sizeof_int) + +- + dnl Check for memmove() before bcopy(), makes memmove() be used when both are + dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5. + +--- 2903,2908 ---- +*** ../vim-7.2.183/src/gui_athena.c 2008-06-24 23:00:51.000000000 +0200 +--- src/gui_athena.c 2009-05-21 16:39:43.000000000 +0200 +*************** +*** 86,95 **** + * Scrollbar callback (XtNjumpProc) for when the scrollbar is dragged with the + * left or middle mouse button. + */ +- /* ARGSUSED */ + static void + gui_athena_scroll_cb_jump(w, client_data, call_data) +! Widget w; + XtPointer client_data, call_data; + { + scrollbar_T *sb, *sb_info; +--- 86,94 ---- + * Scrollbar callback (XtNjumpProc) for when the scrollbar is dragged with the + * left or middle mouse button. + */ + static void + gui_athena_scroll_cb_jump(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data, call_data; + { + scrollbar_T *sb, *sb_info; +*************** +*** 122,131 **** + * Scrollbar callback (XtNscrollProc) for paging up or down with the left or + * right mouse buttons. + */ +- /* ARGSUSED */ + static void + gui_athena_scroll_cb_scroll(w, client_data, call_data) +! Widget w; + XtPointer client_data, call_data; + { + scrollbar_T *sb, *sb_info; +--- 121,129 ---- + * Scrollbar callback (XtNscrollProc) for paging up or down with the left or + * right mouse buttons. + */ + static void + gui_athena_scroll_cb_scroll(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data, call_data; + { + scrollbar_T *sb, *sb_info; +*************** +*** 492,498 **** + if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL) + { + if (menu->iconidx >= 0 && menu->iconidx +! < (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) + xpm = built_in_pixmaps[menu->iconidx]; + else + xpm = tb_blank_xpm; +--- 490,496 ---- + if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL) + { + if (menu->iconidx >= 0 && menu->iconidx +! < (int)(sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) + xpm = built_in_pixmaps[menu->iconidx]; + else + xpm = tb_blank_xpm; +*************** +*** 763,769 **** + XtGetValues(XtParent(widget), args, n); + + retval = num_children; +! for (i = 0; i < num_children; ++i) + { + Widget current = children[i]; + vimmenu_T *menu = NULL; +--- 761,767 ---- + XtGetValues(XtParent(widget), args, n); + + retval = num_children; +! for (i = 0; i < (int)num_children; ++i) + { + Widget current = children[i]; + vimmenu_T *menu = NULL; +*************** +*** 780,790 **** + return retval; + } + +- /* ARGSUSED */ + void + gui_mch_add_menu(menu, idx) + vimmenu_T *menu; +! int idx; + { + char_u *pullright_name; + Dimension height, space, border; +--- 778,787 ---- + return retval; + } + + void + gui_mch_add_menu(menu, idx) + vimmenu_T *menu; +! int idx UNUSED; + { + char_u *pullright_name; + Dimension height, space, border; +*************** +*** 869,875 **** + XtVaGetValues(parent->submenu_id, XtNchildren, &children, + XtNnumChildren, &num_children, + NULL); +! for (i = 0; i < num_children; ++i) + { + XtVaSetValues(children[i], + XtNrightMargin, puller_width, +--- 866,872 ---- + XtVaGetValues(parent->submenu_id, XtNchildren, &children, + XtNnumChildren, &num_children, + NULL); +! for (i = 0; i < (int)num_children; ++i) + { + XtVaSetValues(children[i], + XtNrightMargin, puller_width, +*************** +*** 913,919 **** + XtVaGetValues(id, XtNchildren, &children, + XtNnumChildren, &num_children, + NULL); +! for (i = 0; i < num_children; ++i) + { + if (children[i] == ignore) + continue; +--- 910,916 ---- + XtVaGetValues(id, XtNchildren, &children, + XtNnumChildren, &num_children, + NULL); +! for (i = 0; i < (int)num_children; ++i) + { + if (children[i] == ignore) + continue; +*************** +*** 1175,1185 **** + return pname; + } + +- /* ARGSUSED */ + void + gui_mch_add_menu_item(menu, idx) + vimmenu_T *menu; +! int idx; + { + vimmenu_T *parent = menu->parent; + +--- 1172,1181 ---- + return pname; + } + + void + gui_mch_add_menu_item(menu, idx) + vimmenu_T *menu; +! int idx UNUSED; + { + vimmenu_T *parent = menu->parent; + +*************** +*** 1444,1450 **** + XtNchildren, &children, + XtNnumChildren, &numChildren, + NULL); +! for (i = 0; i < numChildren; i++) + { + whgt = 0; + +--- 1440,1446 ---- + XtNchildren, &children, + XtNnumChildren, &numChildren, + NULL); +! for (i = 0; i < (int)numChildren; i++) + { + whgt = 0; + +*************** +*** 1473,1482 **** + #endif + + +- /* ARGSUSED */ + void + gui_mch_toggle_tearoffs(enable) +! int enable; + { + /* no tearoff menus */ + } +--- 1469,1477 ---- + #endif + + + void + gui_mch_toggle_tearoffs(enable) +! int enable UNUSED; + { + /* no tearoff menus */ + } +*************** +*** 1537,1543 **** + else + get_left_margin = True; + +! for (i = 0; i < num_children; ++i) + { + if (children[i] == menu->id) + continue; +--- 1532,1538 ---- + else + get_left_margin = True; + +! for (i = 0; i < (int)num_children; ++i) + { + if (children[i] == menu->id) + continue; +*************** +*** 1645,1655 **** + } + } + +- /*ARGSUSED*/ + static void + gui_athena_menu_timeout(client_data, id) + XtPointer client_data; +! XtIntervalId *id; + { + Widget w = (Widget)client_data; + Widget popup; +--- 1640,1649 ---- + } + } + + static void + gui_athena_menu_timeout(client_data, id) + XtPointer client_data; +! XtIntervalId *id UNUSED; + { + Widget w = (Widget)client_data; + Widget popup; +*************** +*** 1678,1689 **** + * + * This is called when XtPopup() is called. + */ +- /*ARGSUSED*/ + static void + gui_athena_popup_callback(w, client_data, call_data) + Widget w; + XtPointer client_data; +! XtPointer call_data; + { + /* Assumption: XtIsSubclass(XtParent(w),simpleMenuWidgetClass) */ + vimmenu_T *menu = (vimmenu_T *)client_data; +--- 1672,1682 ---- + * + * This is called when XtPopup() is called. + */ + static void + gui_athena_popup_callback(w, client_data, call_data) + Widget w; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + /* Assumption: XtIsSubclass(XtParent(w),simpleMenuWidgetClass) */ + vimmenu_T *menu = (vimmenu_T *)client_data; +*************** +*** 1711,1717 **** + NULL); + } + +- /* ARGSUSED */ + static void + gui_athena_popdown_submenus_action(w, event, args, nargs) + Widget w; +--- 1704,1709 ---- +*************** +*** 1756,1762 **** + return False; + } + +- /* ARGSUSED */ + static void + gui_athena_delayed_arm_action(w, event, args, nargs) + Widget w; +--- 1748,1753 ---- +*************** +*** 1837,1843 **** + * (XtIsSubclass(popup,simpleMenuWidgetClass) == True) */ + } + +- /* ARGSUSED */ + void + gui_mch_show_popupmenu(menu) + vimmenu_T *menu; +--- 1828,1833 ---- +*************** +*** 2046,2060 **** + * Put up a file requester. + * Returns the selected name in allocated memory, or NULL for Cancel. + */ +- /* ARGSUSED */ + char_u * + gui_mch_browse(saving, title, dflt, ext, initdir, filter) +! int saving; /* select file to write */ +! char_u *title; /* not used (title for the window) */ +! char_u *dflt; /* not used (default name) */ +! char_u *ext; /* not used (extension added) */ + char_u *initdir; /* initial directory, NULL for current dir */ +! char_u *filter; /* not used (file name filter) */ + { + Position x, y; + char_u dirbuf[MAXPATHL]; +--- 2036,2049 ---- + * Put up a file requester. + * Returns the selected name in allocated memory, or NULL for Cancel. + */ + char_u * + gui_mch_browse(saving, title, dflt, ext, initdir, filter) +! int saving UNUSED; /* select file to write */ +! char_u *title; /* title for the window */ +! char_u *dflt; /* default name */ +! char_u *ext UNUSED; /* extension added */ + char_u *initdir; /* initial directory, NULL for current dir */ +! char_u *filter UNUSED; /* file name filter */ + { + Position x, y; + char_u dirbuf[MAXPATHL]; +*************** +*** 2100,2112 **** + * Callback function for the textfield. When CR is hit this works like + * hitting the "OK" button, ESC like "Cancel". + */ +- /* ARGSUSED */ + static void + keyhit_callback(w, client_data, event, cont) +! Widget w; +! XtPointer client_data; + XEvent *event; +! Boolean *cont; + { + char buf[2]; + +--- 2089,2100 ---- + * Callback function for the textfield. When CR is hit this works like + * hitting the "OK" button, ESC like "Cancel". + */ + static void + keyhit_callback(w, client_data, event, cont) +! Widget w UNUSED; +! XtPointer client_data UNUSED; + XEvent *event; +! Boolean *cont UNUSED; + { + char buf[2]; + +*************** +*** 2119,2130 **** + } + } + +- /* ARGSUSED */ + static void + butproc(w, client_data, call_data) +! Widget w; + XtPointer client_data; +! XtPointer call_data; + { + dialogStatus = (int)(long)client_data + 1; + } +--- 2107,2117 ---- + } + } + + static void + butproc(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + dialogStatus = (int)(long)client_data + 1; + } +*************** +*** 2132,2158 **** + /* + * Function called when dialog window closed. + */ +- /*ARGSUSED*/ + static void + dialog_wm_handler(w, client_data, event, dum) +! Widget w; +! XtPointer client_data; + XEvent *event; +! Boolean *dum; + { + if (event->type == ClientMessage +! && ((XClientMessageEvent *)event)->data.l[0] == dialogatom) + dialogStatus = 0; + } + +- /* ARGSUSED */ + int + gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield) +! int type; + char_u *title; + char_u *message; + char_u *buttons; +! int dfltbutton; + char_u *textfield; + { + char_u *buts; +--- 2119,2143 ---- + /* + * Function called when dialog window closed. + */ + static void + dialog_wm_handler(w, client_data, event, dum) +! Widget w UNUSED; +! XtPointer client_data UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + if (event->type == ClientMessage +! && (Atom)((XClientMessageEvent *)event)->data.l[0] == dialogatom) + dialogStatus = 0; + } + + int + gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield) +! int type UNUSED; + char_u *title; + char_u *message; + char_u *buttons; +! int dfltbutton UNUSED; + char_u *textfield; + { + char_u *buts; +*** ../vim-7.2.183/src/gui_x11.c 2009-02-24 04:11:07.000000000 +0100 +--- src/gui_x11.c 2009-05-21 16:47:02.000000000 +0200 +*************** +*** 570,591 **** + * Call-back routines. + */ + +- /* ARGSUSED */ + static void + gui_x11_timer_cb(timed_out, interval_id) + XtPointer timed_out; +! XtIntervalId *interval_id; + { + *((int *)timed_out) = TRUE; + } + +- /* ARGSUSED */ + static void + gui_x11_visibility_cb(w, dud, event, dum) +! Widget w; +! XtPointer dud; + XEvent *event; +! Boolean *dum; + { + if (event->type != VisibilityNotify) + return; +--- 570,589 ---- + * Call-back routines. + */ + + static void + gui_x11_timer_cb(timed_out, interval_id) + XtPointer timed_out; +! XtIntervalId *interval_id UNUSED; + { + *((int *)timed_out) = TRUE; + } + + static void + gui_x11_visibility_cb(w, dud, event, dum) +! Widget w UNUSED; +! XtPointer dud UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + if (event->type != VisibilityNotify) + return; +*************** +*** 603,615 **** + gui_mch_update(); + } + +- /* ARGSUSED */ + static void + gui_x11_expose_cb(w, dud, event, dum) +! Widget w; +! XtPointer dud; + XEvent *event; +! Boolean *dum; + { + XExposeEvent *gevent; + int new_x; +--- 601,612 ---- + gui_mch_update(); + } + + static void + gui_x11_expose_cb(w, dud, event, dum) +! Widget w UNUSED; +! XtPointer dud UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + XExposeEvent *gevent; + int new_x; +*************** +*** 680,692 **** + } + #endif + +- /* ARGSUSED */ + static void + gui_x11_resize_window_cb(w, dud, event, dum) +! Widget w; +! XtPointer dud; + XEvent *event; +! Boolean *dum; + { + static int lastWidth, lastHeight; + +--- 677,688 ---- + } + #endif + + static void + gui_x11_resize_window_cb(w, dud, event, dum) +! Widget w UNUSED; +! XtPointer dud UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + static int lastWidth, lastHeight; + +*************** +*** 727,761 **** + #endif + } + +- /* ARGSUSED */ + static void + gui_x11_focus_change_cb(w, data, event, dum) +! Widget w; +! XtPointer data; + XEvent *event; +! Boolean *dum; + { + gui_focus_change(event->type == FocusIn); + } + +- /* ARGSUSED */ + static void + gui_x11_enter_cb(w, data, event, dum) +! Widget w; +! XtPointer data; +! XEvent *event; +! Boolean *dum; + { + gui_focus_change(TRUE); + } + +- /* ARGSUSED */ + static void + gui_x11_leave_cb(w, data, event, dum) +! Widget w; +! XtPointer data; +! XEvent *event; +! Boolean *dum; + { + gui_focus_change(FALSE); + } +--- 723,754 ---- + #endif + } + + static void + gui_x11_focus_change_cb(w, data, event, dum) +! Widget w UNUSED; +! XtPointer data UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + gui_focus_change(event->type == FocusIn); + } + + static void + gui_x11_enter_cb(w, data, event, dum) +! Widget w UNUSED; +! XtPointer data UNUSED; +! XEvent *event UNUSED; +! Boolean *dum UNUSED; + { + gui_focus_change(TRUE); + } + + static void + gui_x11_leave_cb(w, data, event, dum) +! Widget w UNUSED; +! XtPointer data UNUSED; +! XEvent *event UNUSED; +! Boolean *dum UNUSED; + { + gui_focus_change(FALSE); + } +*************** +*** 766,778 **** + # endif + #endif + +- /* ARGSUSED */ + void + gui_x11_key_hit_cb(w, dud, event, dum) +! Widget w; +! XtPointer dud; + XEvent *event; +! Boolean *dum; + { + XKeyPressedEvent *ev_press; + #ifdef FEAT_XIM +--- 759,770 ---- + # endif + #endif + + void + gui_x11_key_hit_cb(w, dud, event, dum) +! Widget w UNUSED; +! XtPointer dud UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + XKeyPressedEvent *ev_press; + #ifdef FEAT_XIM +*************** +*** 1078,1090 **** + #endif + } + +- /* ARGSUSED */ + static void + gui_x11_mouse_cb(w, dud, event, dum) +! Widget w; +! XtPointer dud; + XEvent *event; +! Boolean *dum; + { + static XtIntervalId timer = (XtIntervalId)0; + static int timed_out = TRUE; +--- 1070,1081 ---- + #endif + } + + static void + gui_x11_mouse_cb(w, dud, event, dum) +! Widget w UNUSED; +! XtPointer dud UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + static XtIntervalId timer = (XtIntervalId)0; + static int timed_out = TRUE; +*************** +*** 1210,1220 **** + while (arg < *argc) + { + /* Look for argv[arg] in cmdline_options[] table */ +! for (i = 0; i < XtNumber(cmdline_options); i++) + if (strcmp(argv[arg], cmdline_options[i].option) == 0) + break; + +! if (i < XtNumber(cmdline_options)) + { + /* Remember finding "-rv" or "-reverse" */ + if (strcmp("-rv", argv[arg]) == 0 +--- 1201,1211 ---- + while (arg < *argc) + { + /* Look for argv[arg] in cmdline_options[] table */ +! for (i = 0; i < (int)XtNumber(cmdline_options); i++) + if (strcmp(argv[arg], cmdline_options[i].option) == 0) + break; + +! if (i < (int)XtNumber(cmdline_options)) + { + /* Remember finding "-rv" or "-reverse" */ + if (strcmp("-rv", argv[arg]) == 0 +*************** +*** 1319,1330 **** + + static void local_xsmp_handle_requests __ARGS((XtPointer c, int *s, XtInputId *i)); + +- /*ARGSUSED*/ + static void + local_xsmp_handle_requests(c, s, i) +! XtPointer c; +! int *s; +! XtInputId *i; + { + if (xsmp_handle_requests() == FAIL) + XtRemoveInput(_xsmp_xtinputid); +--- 1310,1320 ---- + + static void local_xsmp_handle_requests __ARGS((XtPointer c, int *s, XtInputId *i)); + + static void + local_xsmp_handle_requests(c, s, i) +! XtPointer c UNUSED; +! int *s UNUSED; +! XtInputId *i UNUSED; + { + if (xsmp_handle_requests() == FAIL) + XtRemoveInput(_xsmp_xtinputid); +*************** +*** 1438,1444 **** + Columns = w; + if (mask & HeightValue) + { +! if (p_window > h - 1 || !option_was_set((char_u *)"window")) + p_window = h - 1; + Rows = h; + } +--- 1428,1434 ---- + Columns = w; + if (mask & HeightValue) + { +! if (p_window > (long)h - 1 || !option_was_set((char_u *)"window")) + p_window = h - 1; + Rows = h; + } +*************** +*** 1753,1762 **** + } + #endif + +- /*ARGSUSED*/ + void + gui_mch_exit(rc) +! int rc; + { + #if 0 + /* Lesstif gives an error message here, and so does Solaris. The man page +--- 1743,1751 ---- + } + #endif + + void + gui_mch_exit(rc) +! int rc UNUSED; + { + #if 0 + /* Lesstif gives an error message here, and so does Solaris. The man page +*************** +*** 1799,1805 **** + NULL); + } + +- /*ARGSUSED*/ + void + gui_mch_set_shellsize(width, height, min_width, min_height, + base_width, base_height, direction) +--- 1788,1793 ---- +*************** +*** 1809,1815 **** + int min_height; + int base_width; + int base_height; +! int direction; + { + #ifdef FEAT_XIM + height += xim_get_status_area_height(), +--- 1797,1803 ---- + int min_height; + int base_width; + int base_height; +! int direction UNUSED; + { + #ifdef FEAT_XIM + height += xim_get_status_area_height(), +*************** +*** 1847,1857 **** + * If "fontset" is TRUE, load the "font_name" as a fontset. + * Return FAIL if the font could not be loaded, OK otherwise. + */ +- /*ARGSUSED*/ + int + gui_mch_init_font(font_name, do_fontset) + char_u *font_name; +! int do_fontset; + { + XFontStruct *font = NULL; + +--- 1835,1844 ---- + * If "fontset" is TRUE, load the "font_name" as a fontset. + * Return FAIL if the font could not be loaded, OK otherwise. + */ + int + gui_mch_init_font(font_name, do_fontset) + char_u *font_name; +! int do_fontset UNUSED; + { + XFontStruct *font = NULL; + +*************** +*** 2029,2038 **** + * Return the name of font "font" in allocated memory. + * Don't know how to get the actual name, thus use the provided name. + */ +- /*ARGSUSED*/ + char_u * + gui_mch_get_fontname(font, name) +! GuiFont font; + char_u *name; + { + if (name == NULL) +--- 2016,2024 ---- + * Return the name of font "font" in allocated memory. + * Don't know how to get the actual name, thus use the provided name. + */ + char_u * + gui_mch_get_fontname(font, name) +! GuiFont font UNUSED; + char_u *name; + { + if (name == NULL) +*************** +*** 2521,2527 **** + { + int i; + int offset; +! const static int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; + + XSetForeground(gui.dpy, gui.text_gc, prev_sp_color); + for (i = FILL_X(col); i < FILL_X(col + cells); ++i) +--- 2507,2513 ---- + { + int i; + int offset; +! static const int val[8] = {1, 0, 0, 0, 1, 2, 2, 2 }; + + XSetForeground(gui.dpy, gui.text_gc, prev_sp_color); + for (i = FILL_X(col); i < FILL_X(col + cells); ++i) +*************** +*** 2569,2576 **** + # ifdef FEAT_XFONTSET + if (current_fontset != NULL) + { +! if (c >= 0x10000 && sizeof(wchar_t) <= 2) + c = 0xbf; /* show chars > 0xffff as ? */ + ((wchar_t *)buf)[wlen] = c; + } + else +--- 2555,2564 ---- + # ifdef FEAT_XFONTSET + if (current_fontset != NULL) + { +! # ifdef SMALL_WCHAR_T +! if (c >= 0x10000) + c = 0xbf; /* show chars > 0xffff as ? */ ++ # endif + ((wchar_t *)buf)[wlen] = c; + } + else +*************** +*** 3136,3146 **** + /* Nothing to do in X */ + } + +- /* ARGSUSED */ + void + gui_x11_menu_cb(w, client_data, call_data) +! Widget w; +! XtPointer client_data, call_data; + { + gui_menu_cb((vimmenu_T *)client_data); + } +--- 3124,3134 ---- + /* Nothing to do in X */ + } + + void + gui_x11_menu_cb(w, client_data, call_data) +! Widget w UNUSED; +! XtPointer client_data; +! XtPointer call_data UNUSED; + { + gui_menu_cb((vimmenu_T *)client_data); + } +*************** +*** 3153,3165 **** + * Function called when window closed. Works like ":qa". + * Should put up a requester! + */ +- /*ARGSUSED*/ + static void + gui_x11_wm_protocol_handler(w, client_data, event, dum) +! Widget w; +! XtPointer client_data; + XEvent *event; +! Boolean *dum; + { + /* + * Only deal with Client messages. +--- 3141,3152 ---- + * Function called when window closed. Works like ":qa". + * Should put up a requester! + */ + static void + gui_x11_wm_protocol_handler(w, client_data, event, dum) +! Widget w UNUSED; +! XtPointer client_data UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + /* + * Only deal with Client messages. +*************** +*** 3172,3178 **** + * exit. That can be cancelled though, thus Vim shouldn't exit here. + * Just sync our swap files. + */ +! if (((XClientMessageEvent *)event)->data.l[0] == + wm_atoms[SAVE_YOURSELF_IDX]) + { + out_flush(); +--- 3159,3165 ---- + * exit. That can be cancelled though, thus Vim shouldn't exit here. + * Just sync our swap files. + */ +! if ((Atom)((XClientMessageEvent *)event)->data.l[0] == + wm_atoms[SAVE_YOURSELF_IDX]) + { + out_flush(); +*************** +*** 3185,3191 **** + return; + } + +! if (((XClientMessageEvent *)event)->data.l[0] != + wm_atoms[DELETE_WINDOW_IDX]) + return; + +--- 3172,3178 ---- + return; + } + +! if ((Atom)((XClientMessageEvent *)event)->data.l[0] != + wm_atoms[DELETE_WINDOW_IDX]) + return; + +*************** +*** 3196,3208 **** + /* + * Function called when property changed. Check for incoming commands + */ +- /*ARGSUSED*/ + static void + gui_x11_send_event_handler(w, client_data, event, dum) +! Widget w; +! XtPointer client_data; + XEvent *event; +! Boolean *dum; + { + XPropertyEvent *e = (XPropertyEvent *) event; + +--- 3183,3194 ---- + /* + * Function called when property changed. Check for incoming commands + */ + static void + gui_x11_send_event_handler(w, client_data, event, dum) +! Widget w UNUSED; +! XtPointer client_data UNUSED; + XEvent *event; +! Boolean *dum UNUSED; + { + XPropertyEvent *e = (XPropertyEvent *) event; + +*************** +*** 3277,3287 **** + } + } + +- /* ARGSUSED */ + static void + gui_x11_blink_cb(timed_out, interval_id) +! XtPointer timed_out; +! XtIntervalId *interval_id; + { + if (blink_state == BLINK_ON) + { +--- 3263,3272 ---- + } + } + + static void + gui_x11_blink_cb(timed_out, interval_id) +! XtPointer timed_out UNUSED; +! XtIntervalId *interval_id UNUSED; + { + if (blink_state == BLINK_ON) + { +*** ../vim-7.2.183/src/gui.c 2009-05-17 16:23:20.000000000 +0200 +--- src/gui.c 2009-05-21 16:37:39.000000000 +0200 +*************** +*** 3119,3125 **** + */ + void + gui_init_which_components(oldval) +! char_u *oldval; + { + #ifdef FEAT_MENU + static int prev_menu_is_active = -1; +--- 3119,3125 ---- + */ + void + gui_init_which_components(oldval) +! char_u *oldval UNUSED; + { + #ifdef FEAT_MENU + static int prev_menu_is_active = -1; +*************** +*** 4668,4675 **** + */ + static win_T * + xy2win(x, y) +! int x; +! int y; + { + #ifdef FEAT_WINDOWS + int row; +--- 4668,4675 ---- + */ + static win_T * + xy2win(x, y) +! int x UNUSED; +! int y UNUSED; + { + #ifdef FEAT_WINDOWS + int row; +*************** +*** 5121,5128 **** + */ + void + gui_handle_drop(x, y, modifiers, fnames, count) +! int x; +! int y; + int_u modifiers; + char_u **fnames; + int count; +--- 5121,5128 ---- + */ + void + gui_handle_drop(x, y, modifiers, fnames, count) +! int x UNUSED; +! int y UNUSED; + int_u modifiers; + char_u **fnames; + int count; +*** ../vim-7.2.183/src/gui_beval.c 2009-05-17 16:23:20.000000000 +0200 +--- src/gui_beval.c 2009-05-21 15:03:02.000000000 +0200 +*************** +*** 18,24 **** + void + general_beval_cb(beval, state) + BalloonEval *beval; +! int state; + { + win_T *wp; + int col; +--- 18,24 ---- + void + general_beval_cb(beval, state) + BalloonEval *beval; +! int state UNUSED; + { + win_T *wp; + int col; +*************** +*** 726,735 **** + */ + static void + pointerEventEH(w, client_data, event, unused) +! Widget w; + XtPointer client_data; + XEvent *event; +! Boolean *unused; + { + BalloonEval *beval = (BalloonEval *)client_data; + pointerEvent(beval, event); +--- 726,735 ---- + */ + static void + pointerEventEH(w, client_data, event, unused) +! Widget w UNUSED; + XtPointer client_data; + XEvent *event; +! Boolean *unused UNUSED; + { + BalloonEval *beval = (BalloonEval *)client_data; + pointerEvent(beval, event); +*************** +*** 877,883 **** + static void + timerRoutine(dx, id) + XtPointer dx; +! XtIntervalId *id; + { + BalloonEval *beval = (BalloonEval *)dx; + +--- 877,883 ---- + static void + timerRoutine(dx, id) + XtPointer dx; +! XtIntervalId *id UNUSED; + { + BalloonEval *beval = (BalloonEval *)dx; + +*** ../vim-7.2.183/src/gui_at_sb.c 2008-11-28 21:26:50.000000000 +0100 +--- src/gui_at_sb.c 2009-05-21 16:38:53.000000000 +0200 +*************** +*** 198,207 **** + /* extension */ NULL + }, + { /* simple fields */ +! /* change_sensitive */ XtInheritChangeSensitive + }, + { /* scrollbar fields */ +! /* ignore */ 0 + } + }; + +--- 198,210 ---- + /* extension */ NULL + }, + { /* simple fields */ +! /* change_sensitive */ XtInheritChangeSensitive, +! #ifndef OLDXAW +! /* extension */ NULL +! #endif + }, + { /* scrollbar fields */ +! /* empty */ 0 + } + }; + +*************** +*** 241,247 **** + + if (bottom <= 0 || bottom <= top) + return; +! if ((sw = sbw->scrollbar.shadow_width) < 0) + sw = 0; + margin = MARGIN (sbw); + floor = sbw->scrollbar.length - margin + 2; +--- 244,251 ---- + + if (bottom <= 0 || bottom <= top) + return; +! sw = sbw->scrollbar.shadow_width; +! if (sw < 0) + sw = 0; + margin = MARGIN (sbw); + floor = sbw->scrollbar.length - margin + 2; +*************** +*** 516,528 **** + } + } + +- /* ARGSUSED */ + static void + Initialize(request, new, args, num_args) +! Widget request; /* what the client asked for */ + Widget new; /* what we're going to give him */ +! ArgList args; +! Cardinal *num_args; + { + ScrollbarWidget sbw = (ScrollbarWidget) new; + +--- 520,531 ---- + } + } + + static void + Initialize(request, new, args, num_args) +! Widget request UNUSED; /* what the client asked for */ + Widget new; /* what we're going to give him */ +! ArgList args UNUSED; +! Cardinal *num_args UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget) new; + +*************** +*** 556,569 **** + (w, valueMask, attributes); + } + +- /* ARGSUSED */ + static Boolean + SetValues(current, request, desired, args, num_args) +! Widget current, /* what I am */ +! request, /* what he wants me to be */ +! desired; /* what I will become */ +! ArgList args; +! Cardinal *num_args; + { + ScrollbarWidget sbw = (ScrollbarWidget) current; + ScrollbarWidget dsbw = (ScrollbarWidget) desired; +--- 559,571 ---- + (w, valueMask, attributes); + } + + static Boolean + SetValues(current, request, desired, args, num_args) +! Widget current; /* what I am */ +! Widget request UNUSED; /* what he wants me to be */ +! Widget desired; /* what I will become */ +! ArgList args UNUSED; +! Cardinal *num_args UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget) current; + ScrollbarWidget dsbw = (ScrollbarWidget) desired; +*************** +*** 609,615 **** + } + + +- /* ARGSUSED */ + static void + Redisplay(w, event, region) + Widget w; +--- 611,616 ---- +*************** +*** 789,799 **** + } + } + +- /* ARGSUSED */ + static void + RepeatNotify(client_data, idp) + XtPointer client_data; +! XtIntervalId *idp; + { + ScrollbarWidget sbw = (ScrollbarWidget) client_data; + int call_data; +--- 790,799 ---- + } + } + + static void + RepeatNotify(client_data, idp) + XtPointer client_data; +! XtIntervalId *idp UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget) client_data; + int call_data; +*************** +*** 839,884 **** + return (num < small) ? small : ((num > big) ? big : num); + } + +- /* ARGSUSED */ + static void + ScrollOneLineUp(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; +! Cardinal *num_params; + { + ScrollSome(w, event, -ONE_LINE_DATA); + } + +- /* ARGSUSED */ + static void + ScrollOneLineDown(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; +! Cardinal *num_params; + { + ScrollSome(w, event, ONE_LINE_DATA); + } + +- /* ARGSUSED */ + static void + ScrollPageDown(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; +! Cardinal *num_params; + { + ScrollSome(w, event, ONE_PAGE_DATA); + } + +- /* ARGSUSED */ + static void + ScrollPageUp(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; +! Cardinal *num_params; + { + ScrollSome(w, event, -ONE_PAGE_DATA); + } +--- 839,880 ---- + return (num < small) ? small : ((num > big) ? big : num); + } + + static void + ScrollOneLineUp(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollSome(w, event, -ONE_LINE_DATA); + } + + static void + ScrollOneLineDown(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollSome(w, event, ONE_LINE_DATA); + } + + static void + ScrollPageDown(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollSome(w, event, ONE_PAGE_DATA); + } + + static void + ScrollPageUp(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollSome(w, event, -ONE_PAGE_DATA); + } +*************** +*** 901,913 **** + XtCallCallbacks(w, XtNscrollProc, (XtPointer)call_data); + } + +- /* ARGSUSED */ + static void + NotifyScroll(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; +! Cardinal *num_params; + { + ScrollbarWidget sbw = (ScrollbarWidget) w; + Position x, y, loc; +--- 897,908 ---- + XtCallCallbacks(w, XtNscrollProc, (XtPointer)call_data); + } + + static void + NotifyScroll(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget) w; + Position x, y, loc; +*************** +*** 991,1003 **** + delay, RepeatNotify, (XtPointer)w); + } + +- /* ARGSUSED */ + static void + EndScroll(w, event, params, num_params) + Widget w; +! XEvent *event; /* unused */ +! String *params; /* unused */ +! Cardinal *num_params; /* unused */ + { + ScrollbarWidget sbw = (ScrollbarWidget) w; + +--- 986,997 ---- + delay, RepeatNotify, (XtPointer)w); + } + + static void + EndScroll(w, event, params, num_params) + Widget w; +! XEvent *event UNUSED; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget) w; + +*************** +*** 1023,1035 **** + return PICKLENGTH(sbw, x / width, y / height); + } + +- /* ARGSUSED */ + static void + MoveThumb(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; /* unused */ +! Cardinal *num_params; /* unused */ + { + ScrollbarWidget sbw = (ScrollbarWidget)w; + Position x, y; +--- 1017,1028 ---- + return PICKLENGTH(sbw, x / width, y / height); + } + + static void + MoveThumb(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget)w; + Position x, y; +*************** +*** 1069,1081 **** + } + + +- /* ARGSUSED */ + static void + NotifyThumb(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params; /* unused */ +! Cardinal *num_params; /* unused */ + { + ScrollbarWidget sbw = (ScrollbarWidget)w; + /* Use a union to avoid a warning for the weird conversion from float to +--- 1062,1073 ---- + } + + + static void + NotifyThumb(w, event, params, num_params) + Widget w; + XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { + ScrollbarWidget sbw = (ScrollbarWidget)w; + /* Use a union to avoid a warning for the weird conversion from float to +*************** +*** 1096,1102 **** + XtCallCallbacks(w, XtNjumpProc, (XtPointer)&sbw->scrollbar.top); + } + +- /* ARGSUSED */ + static void + AllocTopShadowGC(w) + Widget w; +--- 1088,1093 ---- +*************** +*** 1110,1116 **** + sbw->scrollbar.top_shadow_GC = XtGetGC(w, valuemask, &myXGCV); + } + +- /* ARGSUSED */ + static void + AllocBotShadowGC(w) + Widget w; +--- 1101,1106 ---- +*************** +*** 1124,1134 **** + sbw->scrollbar.bot_shadow_GC = XtGetGC(w, valuemask, &myXGCV); + } + +- /* ARGSUSED */ + static void + _Xaw3dDrawShadows(gw, event, region, out) + Widget gw; +! XEvent *event; + Region region; + int out; + { +--- 1114,1123 ---- + sbw->scrollbar.bot_shadow_GC = XtGetGC(w, valuemask, &myXGCV); + } + + static void + _Xaw3dDrawShadows(gw, event, region, out) + Widget gw; +! XEvent *event UNUSED; + Region region; + int out; + { +*** ../vim-7.2.183/src/gui_at_fs.c 2006-05-13 15:51:07.000000000 +0200 +--- src/gui_at_fs.c 2009-05-21 16:38:36.000000000 +0200 +*************** +*** 829,835 **** + text.format = FMT8BIT; + + #ifdef XtNinternational +! if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide) + { + XawTextReplace(selFileField, (XawTextPosition)0, + (XawTextPosition)WcsLen((wchar_t *)&SFtextBuffer[0]), &text); +--- 829,835 ---- + text.format = FMT8BIT; + + #ifdef XtNinternational +! if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide) + { + XawTextReplace(selFileField, (XawTextPosition)0, + (XawTextPosition)WcsLen((wchar_t *)&SFtextBuffer[0]), &text); +*************** +*** 851,867 **** + #endif + } + +- /* ARGSUSED */ + static void + SFbuttonPressList(w, n, event) +! Widget w; +! int n; +! XButtonPressedEvent *event; + { + SFbuttonPressed = 1; + } + +- /* ARGSUSED */ + static void + SFbuttonReleaseList(w, n, event) + Widget w; +--- 851,865 ---- + #endif + } + + static void + SFbuttonPressList(w, n, event) +! Widget w UNUSED; +! int n UNUSED; +! XButtonPressedEvent *event UNUSED; + { + SFbuttonPressed = 1; + } + + static void + SFbuttonReleaseList(w, n, event) + Widget w; +*************** +*** 989,999 **** + return result; + } + +- /* ARGSUSED */ + static void + SFdirModTimer(cl, id) +! XtPointer cl; +! XtIntervalId *id; + { + static int n = -1; + static int f = 0; +--- 987,996 ---- + return result; + } + + static void + SFdirModTimer(cl, id) +! XtPointer cl UNUSED; +! XtIntervalId *id UNUSED; + { + static int n = -1; + static int f = 0; +*************** +*** 1596,1606 **** + + static void SFscrollTimer __ARGS((XtPointer p, XtIntervalId *id)); + +- /* ARGSUSED */ + static void + SFscrollTimer(p, id) + XtPointer p; +! XtIntervalId *id; + { + SFDir *dir; + int save; +--- 1593,1602 ---- + + static void SFscrollTimer __ARGS((XtPointer p, XtIntervalId *id)); + + static void + SFscrollTimer(p, id) + XtPointer p; +! XtIntervalId *id UNUSED; + { + SFDir *dir; + int save; +*************** +*** 1695,1704 **** + } + } + +- /* ARGSUSED */ + static void + SFenterList(w, n, event) +! Widget w; + int n; + XEnterWindowEvent *event; + { +--- 1691,1699 ---- + } + } + + static void + SFenterList(w, n, event) +! Widget w UNUSED; + int n; + XEnterWindowEvent *event; + { +*************** +*** 1719,1730 **** + } + } + +- /* ARGSUSED */ + static void + SFleaveList(w, n, event) +! Widget w; + int n; +! XEvent *event; + { + if (SFcurrentInvert[n] != -1) + { +--- 1714,1724 ---- + } + } + + static void + SFleaveList(w, n, event) +! Widget w UNUSED; + int n; +! XEvent *event UNUSED; + { + if (SFcurrentInvert[n] != -1) + { +*************** +*** 1733,1742 **** + } + } + +- /* ARGSUSED */ + static void + SFmotionList(w, n, event) +! Widget w; + int n; + XMotionEvent *event; + { +--- 1727,1735 ---- + } + } + + static void + SFmotionList(w, n, event) +! Widget w UNUSED; + int n; + XMotionEvent *event; + { +*************** +*** 1754,1760 **** + } + } + +- /* ARGSUSED */ + static void + SFvFloatSliderMovedCallback(w, n, fnew) + Widget w; +--- 1747,1752 ---- +*************** +*** 1767,1776 **** + SFvSliderMovedCallback(w, (int)(long)n, nw); + } + +- /* ARGSUSED */ + static void + SFvSliderMovedCallback(w, n, nw) +! Widget w; + int n; + int nw; + { +--- 1759,1767 ---- + SFvSliderMovedCallback(w, (int)(long)n, nw); + } + + static void + SFvSliderMovedCallback(w, n, nw) +! Widget w UNUSED; + int n; + int nw; + { +*************** +*** 1853,1862 **** + } + } + +- /* ARGSUSED */ + static void + SFvAreaSelectedCallback(w, n, pnew) +! Widget w; + XtPointer n; + XtPointer pnew; + { +--- 1844,1852 ---- + } + } + + static void + SFvAreaSelectedCallback(w, n, pnew) +! Widget w; + XtPointer n; + XtPointer pnew; + { +*************** +*** 1914,1923 **** + SFvSliderMovedCallback(w, (int)(long)n, nw); + } + +- /* ARGSUSED */ + static void + SFhSliderMovedCallback(w, n, nw) +! Widget w; + XtPointer n; + XtPointer nw; + { +--- 1904,1912 ---- + SFvSliderMovedCallback(w, (int)(long)n, nw); + } + + static void + SFhSliderMovedCallback(w, n, nw) +! Widget w UNUSED; + XtPointer n; + XtPointer nw; + { +*************** +*** 1933,1942 **** + SFdrawList((int)(long)n, SF_DO_NOT_SCROLL); + } + +- /* ARGSUSED */ + static void + SFhAreaSelectedCallback(w, n, pnew) +! Widget w; + XtPointer n; + XtPointer pnew; + { +--- 1922,1930 ---- + SFdrawList((int)(long)n, SF_DO_NOT_SCROLL); + } + + static void + SFhAreaSelectedCallback(w, n, pnew) +! Widget w; + XtPointer n; + XtPointer pnew; + { +*************** +*** 1994,2004 **** + } + } + +- /* ARGSUSED */ + static void + SFpathSliderMovedCallback(w, client_data, nw) +! Widget w; +! XtPointer client_data; + XtPointer nw; + { + SFDir *dir; +--- 1982,1991 ---- + } + } + + static void + SFpathSliderMovedCallback(w, client_data, nw) +! Widget w UNUSED; +! XtPointer client_data UNUSED; + XtPointer nw; + { + SFDir *dir; +*************** +*** 2031,2041 **** + XawTextSetInsertionPoint(selFileField, pos); + } + +- /* ARGSUSED */ + static void + SFpathAreaSelectedCallback(w, client_data, pnew) + Widget w; +! XtPointer client_data; + XtPointer pnew; + { + int nw = (int)(long)pnew; +--- 2018,2027 ---- + XawTextSetInsertionPoint(selFileField, pos); + } + + static void + SFpathAreaSelectedCallback(w, client_data, pnew) + Widget w; +! XtPointer client_data UNUSED; + XtPointer pnew; + { + int nw = (int)(long)pnew; +*************** +*** 2206,2218 **** + + static void SFexposeList __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont)); + +- /* ARGSUSED */ + static void + SFexposeList(w, n, event, cont) +! Widget w; + XtPointer n; + XEvent *event; +! Boolean *cont; + { + if ((event->type == NoExpose) || event->xexpose.count) + return; +--- 2192,2203 ---- + + static void SFexposeList __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont)); + + static void + SFexposeList(w, n, event, cont) +! Widget w UNUSED; + XtPointer n; + XEvent *event; +! Boolean *cont UNUSED; + { + if ((event->type == NoExpose) || event->xexpose.count) + return; +*************** +*** 2222,2234 **** + + static void SFmodVerifyCallback __ARGS((Widget w, XtPointer client_data, XEvent *event, Boolean *cont)); + +- /* ARGSUSED */ + static void + SFmodVerifyCallback(w, client_data, event, cont) +! Widget w; +! XtPointer client_data; + XEvent *event; +! Boolean *cont; + { + char buf[2]; + +--- 2207,2218 ---- + + static void SFmodVerifyCallback __ARGS((Widget w, XtPointer client_data, XEvent *event, Boolean *cont)); + + static void + SFmodVerifyCallback(w, client_data, event, cont) +! Widget w UNUSED; +! XtPointer client_data UNUSED; + XEvent *event; +! Boolean *cont UNUSED; + { + char buf[2]; + +*************** +*** 2241,2251 **** + + static void SFokCallback __ARGS((Widget w, XtPointer cl, XtPointer cd)); + +- /* ARGSUSED */ + static void + SFokCallback(w, cl, cd) +! Widget w; +! XtPointer cl, cd; + { + SFstatus = SEL_FILE_OK; + } +--- 2225,2235 ---- + + static void SFokCallback __ARGS((Widget w, XtPointer cl, XtPointer cd)); + + static void + SFokCallback(w, cl, cd) +! Widget w UNUSED; +! XtPointer cl UNUSED; +! XtPointer cd UNUSED; + { + SFstatus = SEL_FILE_OK; + } +*************** +*** 2258,2268 **** + + static void SFcancelCallback __ARGS((Widget w, XtPointer cl, XtPointer cd)); + +- /* ARGSUSED */ + static void + SFcancelCallback(w, cl, cd) +! Widget w; +! XtPointer cl, cd; + { + SFstatus = SEL_FILE_CANCEL; + } +--- 2242,2252 ---- + + static void SFcancelCallback __ARGS((Widget w, XtPointer cl, XtPointer cd)); + + static void + SFcancelCallback(w, cl, cd) +! Widget w UNUSED; +! XtPointer cl UNUSED; +! XtPointer cd UNUSED; + { + SFstatus = SEL_FILE_CANCEL; + } +*************** +*** 2275,2290 **** + + static void SFdismissAction __ARGS((Widget w, XEvent *event, String *params, Cardinal *num_params)); + +- /* ARGSUSED */ + static void + SFdismissAction(w, event, params, num_params) +! Widget w; +! XEvent *event; +! String *params; +! Cardinal *num_params; + { +! if (event->type == ClientMessage && +! event->xclient.data.l[0] != SFwmDeleteWindow) + return; + + SFstatus = SEL_FILE_CANCEL; +--- 2259,2273 ---- + + static void SFdismissAction __ARGS((Widget w, XEvent *event, String *params, Cardinal *num_params)); + + static void + SFdismissAction(w, event, params, num_params) +! Widget w UNUSED; +! XEvent *event; +! String *params UNUSED; +! Cardinal *num_params UNUSED; + { +! if (event->type == ClientMessage +! && (Atom)event->xclient.data.l[0] != SFwmDeleteWindow) + return; + + SFstatus = SEL_FILE_CANCEL; +*************** +*** 2703,2709 **** + SFtextChanged() + { + #if defined(FEAT_XFONTSET) && defined(XtNinternational) +! if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide) + { + wchar_t *wcbuf=(wchar_t *)SFtextBuffer; + +--- 2686,2692 ---- + SFtextChanged() + { + #if defined(FEAT_XFONTSET) && defined(XtNinternational) +! if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide) + { + wchar_t *wcbuf=(wchar_t *)SFtextBuffer; + +*************** +*** 2749,2755 **** + #if defined(FEAT_XFONTSET) && defined(XtNinternational) + char *buf; + +! if (_XawTextFormat((TextWidget)selFileField) == XawFmtWide) + { + wchar_t *wcbuf; + int mbslength; +--- 2732,2738 ---- + #if defined(FEAT_XFONTSET) && defined(XtNinternational) + char *buf; + +! if ((unsigned long)_XawTextFormat((TextWidget)selFileField) == XawFmtWide) + { + wchar_t *wcbuf; + int mbslength; +*** ../vim-7.2.183/src/gui_motif.c 2008-06-20 11:39:30.000000000 +0200 +--- src/gui_motif.c 2009-05-21 17:15:05.000000000 +0200 +*************** +*** 117,126 **** + * Call-back routines. + */ + +- /* ARGSUSED */ + static void + scroll_cb(w, client_data, call_data) +! Widget w; + XtPointer client_data, call_data; + { + scrollbar_T *sb; +--- 117,125 ---- + * Call-back routines. + */ + + static void + scroll_cb(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data, call_data; + { + scrollbar_T *sb; +*************** +*** 136,146 **** + } + + #ifdef FEAT_GUI_TABLINE +- /*ARGSUSED*/ + static void + tabline_cb(w, client_data, call_data) +! Widget w; +! XtPointer client_data, call_data; + { + XmNotebookCallbackStruct *nptr; + +--- 135,145 ---- + } + + #ifdef FEAT_GUI_TABLINE + static void + tabline_cb(w, client_data, call_data) +! Widget w UNUSED; +! XtPointer client_data UNUSED; +! XtPointer call_data; + { + XmNotebookCallbackStruct *nptr; + +*************** +*** 149,159 **** + send_tabline_event(nptr->page_number); + } + +- /*ARGSUSED*/ + static void + tabline_button_cb(w, client_data, call_data) + Widget w; +! XtPointer client_data, call_data; + { + int cmd, tab_idx; + +--- 148,158 ---- + send_tabline_event(nptr->page_number); + } + + static void + tabline_button_cb(w, client_data, call_data) + Widget w; +! XtPointer client_data UNUSED; +! XtPointer call_data UNUSED; + { + int cmd, tab_idx; + +*************** +*** 166,176 **** + /* + * Tabline single mouse click timeout handler + */ +- /*ARGSUSED*/ + static void + motif_tabline_timer_cb (timed_out, interval_id) + XtPointer timed_out; +! XtIntervalId *interval_id; + { + *((int *)timed_out) = TRUE; + } +--- 165,174 ---- + /* + * Tabline single mouse click timeout handler + */ + static void + motif_tabline_timer_cb (timed_out, interval_id) + XtPointer timed_out; +! XtIntervalId *interval_id UNUSED; + { + *((int *)timed_out) = TRUE; + } +*************** +*** 203,215 **** + return FALSE; + } + +- /*ARGSUSED*/ + static void + tabline_menu_cb(w, closure, e, continue_dispatch) + Widget w; +! XtPointer closure; + XEvent *e; +! Boolean *continue_dispatch; + { + Widget tab_w; + XButtonPressedEvent *event; +--- 201,212 ---- + return FALSE; + } + + static void + tabline_menu_cb(w, closure, e, continue_dispatch) + Widget w; +! XtPointer closure UNUSED; + XEvent *e; +! Boolean *continue_dispatch UNUSED; + { + Widget tab_w; + XButtonPressedEvent *event; +*************** +*** 277,287 **** + XtManageChild(tabLine_menu); + } + +- /*ARGSUSED*/ + static void + tabline_balloon_cb(beval, state) + BalloonEval *beval; +! int state; + { + int nr; + tabpage_T *tp; +--- 274,283 ---- + XtManageChild(tabLine_menu); + } + + static void + tabline_balloon_cb(beval, state) + BalloonEval *beval; +! int state UNUSED; + { + int nr; + tabpage_T *tp; +*************** +*** 642,654 **** + #endif + } + +- /*ARGSUSED*/ + void + gui_mch_set_text_area_pos(x, y, w, h) +! int x; +! int y; +! int w; +! int h; + { + #ifdef FEAT_TOOLBAR + /* Give keyboard focus to the textArea instead of the toolbar. */ +--- 638,649 ---- + #endif + } + + void + gui_mch_set_text_area_pos(x, y, w, h) +! int x UNUSED; +! int y UNUSED; +! int w UNUSED; +! int h UNUSED; + { + #ifdef FEAT_TOOLBAR + /* Give keyboard focus to the textArea instead of the toolbar. */ +*************** +*** 1261,1267 **** + if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL) + { + if (menu->iconidx >= 0 && menu->iconidx +! < (sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) + xpm = built_in_pixmaps[menu->iconidx]; + else + xpm = tb_blank_xpm; +--- 1256,1262 ---- + if (menu->icon_builtin || gui_find_bitmap(menu->name, buf, "xpm") == FAIL) + { + if (menu->iconidx >= 0 && menu->iconidx +! < (int)(sizeof(built_in_pixmaps) / sizeof(built_in_pixmaps[0]))) + xpm = built_in_pixmaps[menu->iconidx]; + else + xpm = tb_blank_xpm; +*************** +*** 1716,1725 **** + } + } + +- /* ARGSUSED */ + void + gui_mch_show_popupmenu(menu) +! vimmenu_T *menu; + { + #ifdef MOTIF_POPUP + XmMenuPosition(menu->submenu_id, gui_x11_get_last_mouse_event()); +--- 1711,1719 ---- + } + } + + void + gui_mch_show_popupmenu(menu) +! vimmenu_T *menu UNUSED; + { + #ifdef MOTIF_POPUP + XmMenuPosition(menu->submenu_id, gui_x11_get_last_mouse_event()); +*************** +*** 2046,2054 **** + /* + * Callback routine for dialog mnemonic processing. + */ +- /*ARGSUSED*/ + static void +! mnemonic_event(Widget w, XtPointer call_data, XKeyEvent *event) + { + do_mnemonic(w, event->keycode); + } +--- 2040,2047 ---- + /* + * Callback routine for dialog mnemonic processing. + */ + static void +! mnemonic_event(Widget w, XtPointer call_data UNUSED, XKeyEvent *event) + { + do_mnemonic(w, event->keycode); + } +*************** +*** 2287,2299 **** + * Put up a file requester. + * Returns the selected name in allocated memory, or NULL for Cancel. + */ +- /* ARGSUSED */ + char_u * + gui_mch_browse(saving, title, dflt, ext, initdir, filter) +! int saving; /* select file to write */ + char_u *title; /* title for the window */ + char_u *dflt; /* default name */ +! char_u *ext; /* not used (extension added) */ + char_u *initdir; /* initial directory, NULL for current dir */ + char_u *filter; /* file name filter */ + { +--- 2280,2291 ---- + * Put up a file requester. + * Returns the selected name in allocated memory, or NULL for Cancel. + */ + char_u * + gui_mch_browse(saving, title, dflt, ext, initdir, filter) +! int saving UNUSED; /* select file to write */ + char_u *title; /* title for the window */ + char_u *dflt; /* default name */ +! char_u *ext UNUSED; /* not used (extension added) */ + char_u *initdir; /* initial directory, NULL for current dir */ + char_u *filter; /* file name filter */ + { +*************** +*** 2413,2424 **** + /* + * Process callback from Dialog cancel actions. + */ +- /* ARGSUSED */ + static void + DialogCancelCB(w, client_data, call_data) +! Widget w; /* widget id */ +! XtPointer client_data; /* data from application */ +! XtPointer call_data; /* data from widget class */ + { + if (browse_fname != NULL) + { +--- 2405,2415 ---- + /* + * Process callback from Dialog cancel actions. + */ + static void + DialogCancelCB(w, client_data, call_data) +! Widget w UNUSED; /* widget id */ +! XtPointer client_data UNUSED; /* data from application */ +! XtPointer call_data UNUSED; /* data from widget class */ + { + if (browse_fname != NULL) + { +*************** +*** 2431,2442 **** + /* + * Process callback from Dialog actions. + */ +- /* ARGSUSED */ + static void + DialogAcceptCB(w, client_data, call_data) +! Widget w; /* widget id */ +! XtPointer client_data; /* data from application */ +! XtPointer call_data; /* data from widget class */ + { + XmFileSelectionBoxCallbackStruct *fcb; + +--- 2422,2432 ---- + /* + * Process callback from Dialog actions. + */ + static void + DialogAcceptCB(w, client_data, call_data) +! Widget w UNUSED; /* widget id */ +! XtPointer client_data UNUSED; /* data from application */ +! XtPointer call_data; /* data from widget class */ + { + XmFileSelectionBoxCallbackStruct *fcb; + +*************** +*** 2467,2479 **** + * Callback function for the textfield. When CR is hit this works like + * hitting the "OK" button, ESC like "Cancel". + */ +- /* ARGSUSED */ + static void + keyhit_callback(w, client_data, event, cont) + Widget w; +! XtPointer client_data; + XEvent *event; +! Boolean *cont; + { + char buf[2]; + KeySym key_sym; +--- 2457,2468 ---- + * Callback function for the textfield. When CR is hit this works like + * hitting the "OK" button, ESC like "Cancel". + */ + static void + keyhit_callback(w, client_data, event, cont) + Widget w; +! XtPointer client_data UNUSED; + XEvent *event; +! Boolean *cont UNUSED; + { + char buf[2]; + KeySym key_sym; +*************** +*** 2490,2501 **** + XmTextFieldClearSelection(w, XtLastTimestampProcessed(gui.dpy)); + } + +- /* ARGSUSED */ + static void + butproc(w, client_data, call_data) +! Widget w; + XtPointer client_data; +! XtPointer call_data; + { + dialogStatus = (int)(long)client_data + 1; + } +--- 2479,2489 ---- + XmTextFieldClearSelection(w, XtLastTimestampProcessed(gui.dpy)); + } + + static void + butproc(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + dialogStatus = (int)(long)client_data + 1; + } +*************** +*** 2567,2576 **** + } + #endif + +- /* ARGSUSED */ + int + gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield) +! int type; + char_u *title; + char_u *message; + char_u *button_names; +--- 2555,2563 ---- + } + #endif + + int + gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield) +! int type UNUSED; + char_u *title; + char_u *message; + char_u *button_names; +*************** +*** 3197,3203 **** + XmNchildren, &children, + XmNnumChildren, &numChildren, NULL); + borders += tst + tmh; +! for (i = 0; i < numChildren; i++) + { + whgt = 0; + XtVaGetValues(children[i], XmNheight, &whgt, NULL); +--- 3184,3190 ---- + XmNchildren, &children, + XmNnumChildren, &numChildren, NULL); + borders += tst + tmh; +! for (i = 0; i < (int)numChildren; i++) + { + whgt = 0; + XtVaGetValues(children[i], XmNheight, &whgt, NULL); +*************** +*** 3237,3249 **** + * I have to use footer help for backwards compatability. Hopefully both will + * get implemented and the user will have a choice. + */ +- /*ARGSUSED*/ + static void + toolbarbutton_enter_cb(w, client_data, event, cont) +! Widget w; + XtPointer client_data; +! XEvent *event; +! Boolean *cont; + { + vimmenu_T *menu = (vimmenu_T *) client_data; + +--- 3224,3235 ---- + * I have to use footer help for backwards compatability. Hopefully both will + * get implemented and the user will have a choice. + */ + static void + toolbarbutton_enter_cb(w, client_data, event, cont) +! Widget w UNUSED; + XtPointer client_data; +! XEvent *event UNUSED; +! Boolean *cont UNUSED; + { + vimmenu_T *menu = (vimmenu_T *) client_data; + +*************** +*** 3254,3266 **** + } + } + +- /*ARGSUSED*/ + static void + toolbarbutton_leave_cb(w, client_data, event, cont) +! Widget w; +! XtPointer client_data; +! XEvent *event; +! Boolean *cont; + { + gui_mch_set_footer((char_u *) ""); + } +--- 3240,3251 ---- + } + } + + static void + toolbarbutton_leave_cb(w, client_data, event, cont) +! Widget w UNUSED; +! XtPointer client_data UNUSED; +! XEvent *event UNUSED; +! Boolean *cont UNUSED; + { + gui_mch_set_footer((char_u *) ""); + } +*************** +*** 3492,3501 **** + /* + * Set the fontlist for Widget "id" to use gui.menu_fontset or gui.menu_font. + */ +- /*ARGSUSED*/ + void + gui_motif_menu_fontlist(id) +! Widget id; + { + #ifdef FEAT_MENU + #ifdef FONTSET_ALWAYS +--- 3477,3485 ---- + /* + * Set the fontlist for Widget "id" to use gui.menu_fontset or gui.menu_font. + */ + void + gui_motif_menu_fontlist(id) +! Widget id UNUSED; + { + #ifdef FEAT_MENU + #ifdef FONTSET_ALWAYS +*************** +*** 3566,3573 **** + Widget cancel; + } SharedFindReplace; + +! static SharedFindReplace find_widgets = { NULL }; +! static SharedFindReplace repl_widgets = { NULL }; + + static void find_replace_destroy_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); + static void find_replace_dismiss_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); +--- 3550,3557 ---- + Widget cancel; + } SharedFindReplace; + +! static SharedFindReplace find_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; +! static SharedFindReplace repl_widgets = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; + + static void find_replace_destroy_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); + static void find_replace_dismiss_callback __ARGS((Widget w, XtPointer client_data, XtPointer call_data)); +*************** +*** 3576,3587 **** + static void find_replace_keypress __ARGS((Widget w, SharedFindReplace * frdp, XKeyEvent * event)); + static void find_replace_dialog_create __ARGS((char_u *entry_text, int do_replace)); + +- /*ARGSUSED*/ + static void + find_replace_destroy_callback(w, client_data, call_data) +! Widget w; + XtPointer client_data; +! XtPointer call_data; + { + SharedFindReplace *cd = (SharedFindReplace *)client_data; + +--- 3560,3570 ---- + static void find_replace_keypress __ARGS((Widget w, SharedFindReplace * frdp, XKeyEvent * event)); + static void find_replace_dialog_create __ARGS((char_u *entry_text, int do_replace)); + + static void + find_replace_destroy_callback(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + SharedFindReplace *cd = (SharedFindReplace *)client_data; + +*************** +*** 3590,3601 **** + cd->dialog = (Widget)0; + } + +- /*ARGSUSED*/ + static void + find_replace_dismiss_callback(w, client_data, call_data) +! Widget w; + XtPointer client_data; +! XtPointer call_data; + { + SharedFindReplace *cd = (SharedFindReplace *)client_data; + +--- 3573,3583 ---- + cd->dialog = (Widget)0; + } + + static void + find_replace_dismiss_callback(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + SharedFindReplace *cd = (SharedFindReplace *)client_data; + +*************** +*** 3603,3624 **** + XtUnmanageChild(cd->dialog); + } + +- /*ARGSUSED*/ + static void + entry_activate_callback(w, client_data, call_data) +! Widget w; + XtPointer client_data; +! XtPointer call_data; + { + XmProcessTraversal((Widget)client_data, XmTRAVERSE_CURRENT); + } + +- /*ARGSUSED*/ + static void + find_replace_callback(w, client_data, call_data) +! Widget w; + XtPointer client_data; +! XtPointer call_data; + { + long_u flags = (long_u)client_data; + char *find_text, *repl_text; +--- 3585,3604 ---- + XtUnmanageChild(cd->dialog); + } + + static void + entry_activate_callback(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + XmProcessTraversal((Widget)client_data, XmTRAVERSE_CURRENT); + } + + static void + find_replace_callback(w, client_data, call_data) +! Widget w UNUSED; + XtPointer client_data; +! XtPointer call_data UNUSED; + { + long_u flags = (long_u)client_data; + char *find_text, *repl_text; +*************** +*** 3668,3677 **** + XtFree(repl_text); + } + +- /*ARGSUSED*/ + static void + find_replace_keypress(w, frdp, event) +! Widget w; + SharedFindReplace *frdp; + XKeyEvent *event; + { +--- 3648,3656 ---- + XtFree(repl_text); + } + + static void + find_replace_keypress(w, frdp, event) +! Widget w UNUSED; + SharedFindReplace *frdp; + XKeyEvent *event; + { +*** ../vim-7.2.183/src/gui_xmdlg.c 2008-11-28 21:26:50.000000000 +0100 +--- src/gui_xmdlg.c 2009-05-21 17:01:52.000000000 +0200 +*************** +*** 448,454 **** + + items[i] = XmStringCreateLocalized(list[ENCODING][i]); + +! if (i < n_items) + { + /* recycle old button */ + XtVaSetValues(children[i], +--- 448,454 ---- + + items[i] = XmStringCreateLocalized(list[ENCODING][i]); + +! if (i < (int)n_items) + { + /* recycle old button */ + XtVaSetValues(children[i], +*************** +*** 481,487 **** + + /* Destroy all the outstanding menu items. + */ +! for (i = count[ENCODING]; i < n_items; ++i) + { + XtUnmanageChild(children[i]); + XtDestroyWidget(children[i]); +--- 481,487 ---- + + /* Destroy all the outstanding menu items. + */ +! for (i = count[ENCODING]; i < (int)n_items; ++i) + { + XtUnmanageChild(children[i]); + XtDestroyWidget(children[i]); +*************** +*** 544,552 **** + } + } + +- /*ARGSUSED*/ + static void +! stoggle_callback(Widget w, + SharedFontSelData *data, + XmToggleButtonCallbackStruct *call_data) + { +--- 544,551 ---- + } + } + + static void +! stoggle_callback(Widget w UNUSED, + SharedFontSelData *data, + XmToggleButtonCallbackStruct *call_data) + { +*************** +*** 709,719 **** + } + } + +- /*ARGSUSED*/ + static void + encoding_callback(Widget w, + SharedFontSelData *data, +! XtPointer dummy) + { + XmString str; + XmListCallbackStruct fake_data; +--- 708,717 ---- + } + } + + static void + encoding_callback(Widget w, + SharedFontSelData *data, +! XtPointer dummy UNUSED) + { + XmString str; + XmListCallbackStruct fake_data; +*************** +*** 752,762 **** + do_choice(w, data, call_data, SIZE); + } + +- /*ARGSUSED*/ + static void +! cancel_callback(Widget w, + SharedFontSelData *data, +! XmListCallbackStruct *call_data) + { + if (data->sel[ENCODING]) + { +--- 750,759 ---- + do_choice(w, data, call_data, SIZE); + } + + static void +! cancel_callback(Widget w UNUSED, + SharedFontSelData *data, +! XmListCallbackStruct *call_data UNUSED) + { + if (data->sel[ENCODING]) + { +*************** +*** 789,799 **** + data->exit = True; + } + +- /*ARGSUSED*/ + static void +! ok_callback(Widget w, + SharedFontSelData *data, +! XmPushButtonCallbackStruct *call_data) + { + char *pattern; + char **name; +--- 786,795 ---- + data->exit = True; + } + + static void +! ok_callback(Widget w UNUSED, + SharedFontSelData *data, +! XmPushButtonCallbackStruct *call_data UNUSED) + { + char *pattern; + char **name; +*** ../vim-7.2.183/src/gui_xmebw.c 2008-11-28 21:26:50.000000000 +0100 +--- src/gui_xmebw.c 2009-05-21 17:06:17.000000000 +0200 +*************** +*** 235,247 **** + return tmp; + } + +- /*ARGSUSED*/ + static int + alloc_color(Display *display, + Colormap colormap, + char *colorname, + XColor *xcolor, +! void *closure) + { + int status; + +--- 235,246 ---- + return tmp; + } + + static int + alloc_color(Display *display, + Colormap colormap, + char *colorname, + XColor *xcolor, +! void *closure UNUSED) + { + int status; + +*************** +*** 595,603 **** + XtHeight(eb), eb->primitive.highlight_thickness); + } + +- /*ARGSUSED*/ + static void +! draw_pixmap(XmEnhancedButtonWidget eb, XEvent *event, Region region) + { + Pixmap pix; + GC gc = eb->label.normal_GC; +--- 594,603 ---- + XtHeight(eb), eb->primitive.highlight_thickness); + } + + static void +! draw_pixmap(XmEnhancedButtonWidget eb, +! XEvent *event UNUSED, +! Region region UNUSED) + { + Pixmap pix; + GC gc = eb->label.normal_GC; +*************** +*** 641,647 **** + height = eb->core.height - 2 * y; + if (h < height) + height = h; +! if (depth == eb->core.depth) + XCopyArea(XtDisplay(eb), pix, XtWindow(eb), gc, 0, 0, + width, height, x, y); + else if (depth == 1) +--- 641,647 ---- + height = eb->core.height - 2 * y; + if (h < height) + height = h; +! if (depth == (int)eb->core.depth) + XCopyArea(XtDisplay(eb), pix, XtWindow(eb), gc, 0, 0, + width, height, x, y); + else if (depth == 1) +*************** +*** 731,739 **** + eb->label.normal_GC = tmp_gc; + } + +- /*ARGSUSED*/ + static void +! Enter(Widget wid, XEvent *event, String *params, Cardinal *num_params) + { + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) wid; + XmPushButtonCallbackStruct call_value; +--- 731,741 ---- + eb->label.normal_GC = tmp_gc; + } + + static void +! Enter(Widget wid, +! XEvent *event, +! String *params UNUSED, +! Cardinal *num_params UNUSED) + { + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) wid; + XmPushButtonCallbackStruct call_value; +*************** +*** 818,826 **** + } + } + +- /*ARGSUSED*/ + static void +! Leave(Widget wid, XEvent *event, String *params, Cardinal *num_params) + { + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)wid; + XmPushButtonCallbackStruct call_value; +--- 820,830 ---- + } + } + + static void +! Leave(Widget wid, +! XEvent *event, +! String *params UNUSED, +! Cardinal *num_params UNUSED) + { + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)wid; + XmPushButtonCallbackStruct call_value; +*************** +*** 976,984 **** + } + } + +- /*ARGSUSED*/ + static void +! Initialize(Widget rq, Widget ebw, ArgList args, Cardinal *n) + { + XmEnhancedButtonWidget request = (XmEnhancedButtonWidget)rq; + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)ebw; +--- 980,987 ---- + } + } + + static void +! Initialize(Widget rq, Widget ebw, ArgList args UNUSED, Cardinal *n UNUSED) + { + XmEnhancedButtonWidget request = (XmEnhancedButtonWidget)rq; + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget)ebw; +*************** +*** 1056,1064 **** + free_pixmaps((XmEnhancedButtonWidget)w); + } + +- /*ARGSUSED*/ + static Boolean +! SetValues(Widget current, Widget request, Widget new, ArgList args, Cardinal *n) + { + XmEnhancedButtonWidget cur = (XmEnhancedButtonWidget) current; + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) new; +--- 1059,1070 ---- + free_pixmaps((XmEnhancedButtonWidget)w); + } + + static Boolean +! SetValues(Widget current, +! Widget request UNUSED, +! Widget new, +! ArgList args UNUSED, +! Cardinal *n UNUSED) + { + XmEnhancedButtonWidget cur = (XmEnhancedButtonWidget) current; + XmEnhancedButtonWidget eb = (XmEnhancedButtonWidget) new; +*************** +*** 1108,1114 **** + if ((win_x < 0) || (win_y < 0)) + return False; + +! if ((win_x > r_width) || (win_y > r_height)) + return False; + draw_highlight(eb); + draw_shadows(eb); +--- 1114,1120 ---- + if ((win_x < 0) || (win_y < 0)) + return False; + +! if ((win_x > (int)r_width) || (win_y > (int)r_height)) + return False; + draw_highlight(eb); + draw_shadows(eb); +*** ../vim-7.2.183/src/if_python.c 2009-01-13 18:10:21.000000000 +0100 +--- src/if_python.c 2009-05-21 17:27:50.000000000 +0200 +*************** +*** 1096,1104 **** + + /* Vim module - Implementation + */ +- /*ARGSUSED*/ + static PyObject * +! VimCommand(PyObject *self, PyObject *args) + { + char *cmd; + PyObject *result; +--- 1096,1103 ---- + + /* Vim module - Implementation + */ + static PyObject * +! VimCommand(PyObject *self UNUSED, PyObject *args) + { + char *cmd; + PyObject *result; +*************** +*** 1242,1250 **** + } + #endif + +- /*ARGSUSED*/ + static PyObject * +! VimEval(PyObject *self, PyObject *args) + { + #ifdef FEAT_EVAL + char *expr; +--- 1241,1248 ---- + } + #endif + + static PyObject * +! VimEval(PyObject *self UNUSED, PyObject *args) + { + #ifdef FEAT_EVAL + char *expr; +*************** +*** 1894,1902 **** + /* Buffer list object - Implementation + */ + +- /*ARGSUSED*/ + static PyInt +! BufListLength(PyObject *self) + { + buf_T *b = firstbuf; + PyInt n = 0; +--- 1892,1899 ---- + /* Buffer list object - Implementation + */ + + static PyInt +! BufListLength(PyObject *self UNUSED) + { + buf_T *b = firstbuf; + PyInt n = 0; +*************** +*** 1910,1918 **** + return n; + } + +- /*ARGSUSED*/ + static PyObject * +! BufListItem(PyObject *self, PyInt n) + { + buf_T *b; + +--- 1907,1914 ---- + return n; + } + + static PyObject * +! BufListItem(PyObject *self UNUSED, PyInt n) + { + buf_T *b; + +*************** +*** 2210,2218 **** + + /* Window list object - Implementation + */ +- /*ARGSUSED*/ + static PyInt +! WinListLength(PyObject *self) + { + win_T *w = firstwin; + PyInt n = 0; +--- 2206,2213 ---- + + /* Window list object - Implementation + */ + static PyInt +! WinListLength(PyObject *self UNUSED) + { + win_T *w = firstwin; + PyInt n = 0; +*************** +*** 2226,2234 **** + return n; + } + +- /*ARGSUSED*/ + static PyObject * +! WinListItem(PyObject *self, PyInt n) + { + win_T *w; + +--- 2221,2228 ---- + return n; + } + + static PyObject * +! WinListItem(PyObject *self UNUSED, PyInt n) + { + win_T *w; + +*************** +*** 2274,2282 **** + + /* Current items object - Implementation + */ +- /*ARGSUSED*/ + static PyObject * +! CurrentGetattr(PyObject *self, char *name) + { + if (strcmp(name, "buffer") == 0) + return (PyObject *)BufferNew(curbuf); +--- 2268,2275 ---- + + /* Current items object - Implementation + */ + static PyObject * +! CurrentGetattr(PyObject *self UNUSED, char *name) + { + if (strcmp(name, "buffer") == 0) + return (PyObject *)BufferNew(curbuf); +*************** +*** 2295,2303 **** + } + } + +- /*ARGSUSED*/ + static int +! CurrentSetattr(PyObject *self, char *name, PyObject *value) + { + if (strcmp(name, "line") == 0) + { +--- 2288,2295 ---- + } + } + + static int +! CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value) + { + if (strcmp(name, "line") == 0) + { +*** ../vim-7.2.183/src/window.c 2009-02-22 02:36:36.000000000 +0100 +--- src/window.c 2009-05-21 15:14:54.000000000 +0200 +*************** +*** 1163,1174 **** + * WSP_NEWLOC may be specified in flags to prevent the location list from + * being copied. + */ +- /*ARGSUSED*/ + static void + win_init(newp, oldp, flags) + win_T *newp; + win_T *oldp; +! int flags; + { + int i; + +--- 1163,1173 ---- + * WSP_NEWLOC may be specified in flags to prevent the location list from + * being copied. + */ + static void + win_init(newp, oldp, flags) + win_T *newp; + win_T *oldp; +! int flags UNUSED; + { + int i; + +*************** +*** 1268,1278 **** + * Must be called when there is just one window, filling the whole screen + * (excluding the command line). + */ +- /*ARGSUSED*/ + int + make_windows(count, vertical) + int count; +! int vertical; /* split windows vertically if TRUE */ + { + int maxcount; + int todo; +--- 1267,1276 ---- + * Must be called when there is just one window, filling the whole screen + * (excluding the command line). + */ + int + make_windows(count, vertical) + int count; +! int vertical UNUSED; /* split windows vertically if TRUE */ + { + int maxcount; + int todo; +*************** +*** 2353,2363 **** + * Remove a window and its frame from the tree of frames. + * Returns a pointer to the window that got the freed up space. + */ +- /*ARGSUSED*/ + static win_T * + winframe_remove(win, dirp, tp) + win_T *win; +! int *dirp; /* set to 'v' or 'h' for direction if 'ea' */ + tabpage_T *tp; /* tab page "win" is in, NULL for current */ + { + frame_T *frp, *frp2, *frp3; +--- 2351,2360 ---- + * Remove a window and its frame from the tree of frames. + * Returns a pointer to the window that got the freed up space. + */ + static win_T * + winframe_remove(win, dirp, tp) + win_T *win; +! int *dirp UNUSED; /* set to 'v' or 'h' for direction if 'ea' */ + tabpage_T *tp; /* tab page "win" is in, NULL for current */ + { + frame_T *frp, *frp2, *frp3; +*************** +*** 3500,3509 **** + * FAIL. + * Careful: When OK is returned need to get a new tab page very very soon! + */ +- /*ARGSUSED*/ + static int + leave_tabpage(new_curbuf) +! buf_T *new_curbuf; /* what is going to be the new curbuf, + NULL if unknown */ + { + tabpage_T *tp = curtab; +--- 3497,3505 ---- + * FAIL. + * Careful: When OK is returned need to get a new tab page very very soon! + */ + static int + leave_tabpage(new_curbuf) +! buf_T *new_curbuf UNUSED; /* what is going to be the new curbuf, + NULL if unknown */ + { + tabpage_T *tp = curtab; +*************** +*** 3545,3555 **** + * Start using tab page "tp". + * Only to be used after leave_tabpage() or freeing the current tab page. + */ +- /*ARGSUSED*/ + static void + enter_tabpage(tp, old_curbuf) + tabpage_T *tp; +! buf_T *old_curbuf; + { + int old_off = tp->tp_firstwin->w_winrow; + win_T *next_prevwin = tp->tp_prevwin; +--- 3541,3550 ---- + * Start using tab page "tp". + * Only to be used after leave_tabpage() or freeing the current tab page. + */ + static void + enter_tabpage(tp, old_curbuf) + tabpage_T *tp; +! buf_T *old_curbuf UNUSED; + { + int old_off = tp->tp_firstwin->w_winrow; + win_T *next_prevwin = tp->tp_prevwin; +*************** +*** 4157,4166 **** + /* + * allocate a window structure and link it in the window list + */ +- /*ARGSUSED*/ + static win_T * + win_alloc(after) +! win_T *after; + { + win_T *newwin; + +--- 4152,4160 ---- + /* + * allocate a window structure and link it in the window list + */ + static win_T * + win_alloc(after) +! win_T *after UNUSED; + { + win_T *newwin; + +*** ../vim-7.2.183/src/workshop.c 2008-11-28 11:47:14.000000000 +0100 +--- src/workshop.c 2009-05-21 17:12:55.000000000 +0200 +*************** +*** 204,215 **** + * Function: + * Load a given file into the WorkShop buffer. + */ +- /*ARGSUSED*/ + void + workshop_load_file( + char *filename, /* the file to load */ + int line, /* an optional line number (or 0) */ +! char *frameid) /* used for multi-frame support */ + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +--- 204,214 ---- + * Function: + * Load a given file into the WorkShop buffer. + */ + void + workshop_load_file( + char *filename, /* the file to load */ + int line, /* an optional line number (or 0) */ +! char *frameid UNUSED) /* used for multi-frame support */ + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +*************** +*** 263,272 **** + load_window(filename, lineno); + } + +- /*ARGSUSED*/ + void + workshop_front_file( +! char *filename) + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +--- 262,270 ---- + load_window(filename, lineno); + } + + void + workshop_front_file( +! char *filename UNUSED) + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +*************** +*** 538,546 **** + * breakpoints have moved when a program has been recompiled and + * reloaded into dbx. + */ +- /*ARGSUSED*/ + void +! workshop_moved_marks(char *filename) + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +--- 536,543 ---- + * breakpoints have moved when a program has been recompiled and + * reloaded into dbx. + */ + void +! workshop_moved_marks(char *filename UNUSED) + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +*************** +*** 575,585 **** + return (int)h; + } + +- /*ARGSUSED*/ + void + workshop_footer_message( +! char *message, +! int severity) /* severity is currently unused */ + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +--- 572,581 ---- + return (int)h; + } + + void + workshop_footer_message( +! char *message, +! int severity UNUSED) /* severity is currently unused */ + { + #ifdef WSDEBUG_TRACE + if (WSDLEVEL(WS_TRACE_VERBOSE | WS_TRACE)) +*************** +*** 687,701 **** + * command. The globals curMenuName and curMenuPriority contain the name and + * priority of the parent menu tree. + */ +- /*ARGSUSED*/ + void + workshop_menu_item( + char *label, + char *verb, +! char *accelerator, + char *acceleratorText, +! char *name, +! char *filepos, + char *sensitive) + { + char cbuf[BUFSIZ]; +--- 683,696 ---- + * command. The globals curMenuName and curMenuPriority contain the name and + * priority of the parent menu tree. + */ + void + workshop_menu_item( + char *label, + char *verb, +! char *accelerator UNUSED, + char *acceleratorText, +! char *name UNUSED, +! char *filepos UNUSED, + char *sensitive) + { + char cbuf[BUFSIZ]; +*************** +*** 810,822 **** + workshopInitDone = True; + } + +- /*ARGSUSED*/ + void + workshop_toolbar_button( + char *label, + char *verb, +! char *senseVerb, +! char *filepos, + char *help, + char *sense, + char *file, +--- 805,816 ---- + workshopInitDone = True; + } + + void + workshop_toolbar_button( + char *label, + char *verb, +! char *senseVerb UNUSED, +! char *filepos UNUSED, + char *help, + char *sense, + char *file, +*************** +*** 968,974 **** + if (strcmp(option, "syntax") == 0) + vim_snprintf(cbuf, sizeof(cbuf), "syntax %s", value); + else if (strcmp(option, "savefiles") == 0) +! ; /* XXX - Not yet implemented */ + break; + + case 'l': +--- 962,970 ---- + if (strcmp(option, "syntax") == 0) + vim_snprintf(cbuf, sizeof(cbuf), "syntax %s", value); + else if (strcmp(option, "savefiles") == 0) +! { +! /* XXX - Not yet implemented */ +! } + break; + + case 'l': +*************** +*** 1098,1107 **** + /* + * A button in the toolbar has been pushed. + */ +- /*ARGSUSED*/ + int + workshop_get_positions( +! void *clientData, /* unused */ + char **filename, /* output data */ + int *curLine, /* output data */ + int *curCol, /* output data */ +--- 1094,1102 ---- + /* + * A button in the toolbar has been pushed. + */ + int + workshop_get_positions( +! void *clientData UNUSED, + char **filename, /* output data */ + int *curLine, /* output data */ + int *curCol, /* output data */ +*************** +*** 1526,1534 **** + return NULL; + } + +- /*ARGSUSED*/ + void +! workshop_save_sensitivity(char *filename) + { + } + +--- 1521,1528 ---- + return NULL; + } + + void +! workshop_save_sensitivity(char *filename UNUSED) + { + } + +*** ../vim-7.2.183/src/version.c 2009-05-21 15:19:59.000000000 +0200 +--- src/version.c 2009-05-21 23:19:40.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 184, + /**/ + +-- +CART DRIVER: Bring out your dead! +LARGE MAN: Here's one! +CART DRIVER: Ninepence. +BODY: I'm not dead! + "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/7.2.185 b/7.2.185 new file mode 100644 index 00000000..35dbad05 --- /dev/null +++ b/7.2.185 @@ -0,0 +1,305 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.185 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.185 +Problem: Some more compiler warnings when using gcc -Wextra. +Solution: Add UNUSED and type casts. +Files: src/Makefile, src/if_tlc.c, src/if_ruby.c + + +*** ../vim-7.2.184/src/Makefile 2009-05-21 23:25:47.000000000 +0200 +--- src/Makefile 2009-05-22 18:18:44.000000000 +0200 +*************** +*** 105,112 **** + # 4. "make test" {{{1 + # This is optional. This will run Vim scripts on a number of test + # files, and compare the produced output with the expected output. +! # If all is well, you will get the "ALL DONE" message in the end. See +! # below (search for "/^test"). + # + # 5. "make install" {{{1 + # If the new Vim seems to be working OK you can install it and the +--- 105,112 ---- + # 4. "make test" {{{1 + # This is optional. This will run Vim scripts on a number of test + # files, and compare the produced output with the expected output. +! # If all is well, you will get the "ALL DONE" message in the end. If a +! # test fails you get "TEST FAILURE". See below (search for "/^test"). + # + # 5. "make install" {{{1 + # If the new Vim seems to be working OK you can install it and the +*************** +*** 533,538 **** +--- 533,543 ---- + #CFLAGS = -g -DDEBUG -Wall -Wshadow -Wmissing-prototypes + #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes + ++ # Use this with GCC to check for mistakes, unused arguments, etc. ++ #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code ++ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers ++ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code ++ + # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond + # allocated memory (and makes every malloc()/free() very slow). + # Electric Fence is free (search ftp sites). +*************** +*** 551,562 **** + # }}} + + # LINT - for running lint +! # For standard lint +! #LINT = lint +! #LINT_OPTIONS = -beprxzF +! # For splint (see cleanlint.vim for filtering the output) +! LINT = splint +! LINT_OPTIONS = +unixlib -weak -macrovarprefixexclude -showfunc -linelen 9999 + + # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. + # Might not work with GUI or Perl. +--- 556,568 ---- + # }}} + + # LINT - for running lint +! # For standard Unix lint +! LINT = lint +! LINT_OPTIONS = -beprxzF +! # For splint +! # It doesn't work well, crashes on include files and non-ascii characters. +! #LINT = splint +! #LINT_OPTIONS = +unixlib -weak -macrovarprefixexclude -showfunc -linelen 9999 + + # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof. + # Might not work with GUI or Perl. +*************** +*** 1743,1749 **** + # messages. Don't worry about that. + # If there is a real error, there will be a difference between "test.out" and + # a "test99.ok" file. +! # If everything is alright, the final message will be "ALL DONE". + # + test check: + $(MAKE) -f Makefile $(VIMTARGET) +--- 1749,1756 ---- + # messages. Don't worry about that. + # If there is a real error, there will be a difference between "test.out" and + # a "test99.ok" file. +! # If everything is alright, the final message will be "ALL DONE". If not you +! # get "TEST FAILURE". + # + test check: + $(MAKE) -f Makefile $(VIMTARGET) +*************** +*** 2427,2433 **** + $(CCC) -o $@ if_xcmdsrv.c + + objects/if_mzsch.o: if_mzsch.c +! $(CCC) -o $@ if_mzsch.c + + objects/if_perl.o: auto/if_perl.c + $(CCC) -o $@ auto/if_perl.c +--- 2434,2440 ---- + $(CCC) -o $@ if_xcmdsrv.c + + objects/if_mzsch.o: if_mzsch.c +! $(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c + + objects/if_perl.o: auto/if_perl.c + $(CCC) -o $@ auto/if_perl.c +*************** +*** 2436,2442 **** + $(CCC) -o $@ if_perlsfio.c + + objects/if_python.o: if_python.c +! $(CCC) -o $@ if_python.c + + objects/if_ruby.o: if_ruby.c + $(CCC) -o $@ if_ruby.c +--- 2443,2449 ---- + $(CCC) -o $@ if_perlsfio.c + + objects/if_python.o: if_python.c +! $(CCC) -o $@ $(PYTHON_CFLAGS_EXTRA) if_python.c + + objects/if_ruby.o: if_ruby.c + $(CCC) -o $@ if_ruby.c +*** ../vim-7.2.184/src/if_ruby.c 2007-09-13 15:00:49.000000000 +0200 +--- src/if_ruby.c 2009-05-22 15:32:04.000000000 +0200 +*************** +*** 492,498 **** + } + } + +! static VALUE vim_message(VALUE self, VALUE str) + { + char *buff, *p; + +--- 492,498 ---- + } + } + +! static VALUE vim_message(VALUE self UNUSED, VALUE str) + { + char *buff, *p; + +*************** +*** 505,524 **** + return Qnil; + } + +! static VALUE vim_set_option(VALUE self, VALUE str) + { + do_set((char_u *)STR2CSTR(str), 0); + update_screen(NOT_VALID); + return Qnil; + } + +! static VALUE vim_command(VALUE self, VALUE str) + { + do_cmdline_cmd((char_u *)STR2CSTR(str)); + return Qnil; + } + +! static VALUE vim_evaluate(VALUE self, VALUE str) + { + #ifdef FEAT_EVAL + char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE); +--- 505,524 ---- + return Qnil; + } + +! static VALUE vim_set_option(VALUE self UNUSED, VALUE str) + { + do_set((char_u *)STR2CSTR(str), 0); + update_screen(NOT_VALID); + return Qnil; + } + +! static VALUE vim_command(VALUE self UNUSED, VALUE str) + { + do_cmdline_cmd((char_u *)STR2CSTR(str)); + return Qnil; + } + +! static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) + { + #ifdef FEAT_EVAL + char_u *value = eval_to_string((char_u *)STR2CSTR(str), NULL, TRUE); +*************** +*** 580,586 **** + return INT2NUM(n); + } + +! static VALUE buffer_s_aref(VALUE self, VALUE num) + { + buf_T *b; + int n = NUM2INT(num); +--- 580,586 ---- + return INT2NUM(n); + } + +! static VALUE buffer_s_aref(VALUE self UNUSED, VALUE num) + { + buf_T *b; + int n = NUM2INT(num); +*************** +*** 629,635 **** +--- 629,637 ---- + return line ? rb_str_new2(line) : Qnil; + } + rb_raise(rb_eIndexError, "index %d out of buffer", n); ++ #ifndef __GNUC__ + return Qnil; /* For stop warning */ ++ #endif + } + + static VALUE buffer_aref(VALUE self, VALUE num) +*************** +*** 668,674 **** +--- 670,678 ---- + else + { + rb_raise(rb_eIndexError, "index %d out of buffer", n); ++ #ifndef __GNUC__ + return Qnil; /* For stop warning */ ++ #endif + } + return str; + } +*************** +*** 789,795 **** + return get_buffer_line(curbuf, curwin->w_cursor.lnum); + } + +! static VALUE set_current_line(VALUE self, VALUE str) + { + return set_buffer_line(curbuf, curwin->w_cursor.lnum, str); + } +--- 793,799 ---- + return get_buffer_line(curbuf, curwin->w_cursor.lnum); + } + +! static VALUE set_current_line(VALUE self UNUSED, VALUE str) + { + return set_buffer_line(curbuf, curwin->w_cursor.lnum, str); + } +*************** +*** 815,821 **** + #endif + } + +! static VALUE window_s_aref(VALUE self, VALUE num) + { + win_T *w; + int n = NUM2INT(num); +--- 819,825 ---- + #endif + } + +! static VALUE window_s_aref(VALUE self UNUSED, VALUE num) + { + win_T *w; + int n = NUM2INT(num); +*************** +*** 897,903 **** + return Qnil; + } + +! static VALUE f_p(int argc, VALUE *argv, VALUE self) + { + int i; + VALUE str = rb_str_new("", 0); +--- 901,907 ---- + return Qnil; + } + +! static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED) + { + int i; + VALUE str = rb_str_new("", 0); +*** ../vim-7.2.184/src/version.c 2009-05-21 23:25:38.000000000 +0200 +--- src/version.c 2009-05-22 18:18:58.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 185, + /**/ + +-- +BODY: I'm not dead! +CART DRIVER: 'Ere. He says he's not dead. +LARGE MAN: Yes he is. +BODY: I'm not! + "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/7.2.186 b/7.2.186 new file mode 100644 index 00000000..c3710425 --- /dev/null +++ b/7.2.186 @@ -0,0 +1,331 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.186 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.186 +Problem: Some more compiler warnings when using gcc -Wextra. +Solution: Now with the intended if_tcl.c changes. +Files: src/if_tcl.c + + +*** ../vim-7.2.185/src/if_tcl.c 2007-05-10 20:55:34.000000000 +0200 +--- src/if_tcl.c 2009-05-22 15:29:53.000000000 +0200 +*************** +*** 290,299 **** + */ + #define TCL_EXIT 5 + +- /* ARGSUSED */ + static int + exitcmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 290,298 ---- + */ + #define TCL_EXIT 5 + + static int + exitcmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 315,324 **** + return TCL_ERROR; + } + +- /* ARGSUSED */ + static int + catchcmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 314,322 ---- + return TCL_ERROR; + } + + static int + catchcmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 356,365 **** + /* + * "::vim::beep" - what Vi[m] does best :-) + */ +- /* ARGSUSED */ + static int + beepcmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 354,362 ---- + /* + * "::vim::beep" - what Vi[m] does best :-) + */ + static int + beepcmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 378,387 **** + * "::vim::buffer {N}" - create buffer command for buffer N. + * "::vim::buffer new" - create a new buffer (not implemented) + */ +- /* ARGSUSED */ + static int + buffercmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 375,383 ---- + * "::vim::buffer {N}" - create buffer command for buffer N. + * "::vim::buffer new" - create a new buffer (not implemented) + */ + static int + buffercmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 475,484 **** + /* + * "::vim::window list" - create list of window commands. + */ +- /* ARGSUSED */ + static int + windowcmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 471,479 ---- + /* + * "::vim::window list" - create list of window commands. + */ + static int + windowcmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 1130,1139 **** + } + + +- /* ARGSUSED */ + static int + commandcmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 1125,1133 ---- + } + + + static int + commandcmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 1145,1154 **** + return err; + } + +- /* ARGSUSED */ + static int + optioncmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 1139,1147 ---- + return err; + } + + static int + optioncmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 1160,1169 **** + return err; + } + +- /* ARGSUSED */ + static int + exprcmd(dummy, interp, objc, objv) +! ClientData dummy; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +--- 1153,1161 ---- + return err; + } + + static int + exprcmd(dummy, interp, objc, objv) +! ClientData dummy UNUSED; + Tcl_Interp *interp; + int objc; + Tcl_Obj *CONST objv[]; +*************** +*** 1584,1594 **** + I/O Channel + ********************************************/ + +- /* ARGSUSED */ + static int + channel_close(instance, interp) + ClientData instance; +! Tcl_Interp *interp; + { + int err = 0; + +--- 1576,1585 ---- + I/O Channel + ********************************************/ + + static int + channel_close(instance, interp) + ClientData instance; +! Tcl_Interp *interp UNUSED; + { + int err = 0; + +*************** +*** 1602,1613 **** + return err; + } + +- /* ARGSUSED */ + static int + channel_input(instance, buf, bufsiz, errptr) +! ClientData instance; +! char *buf; +! int bufsiz; + int *errptr; + { + +--- 1593,1603 ---- + return err; + } + + static int + channel_input(instance, buf, bufsiz, errptr) +! ClientData instance UNUSED; +! char *buf UNUSED; +! int bufsiz UNUSED; + int *errptr; + { + +*************** +*** 1659,1679 **** + return result; + } + +- /* ARGSUSED */ + static void + channel_watch(instance, mask) +! ClientData instance; +! int mask; + { + Tcl_SetErrno(EINVAL); + } + +- /* ARGSUSED */ + static int + channel_gethandle(instance, direction, handleptr) +! ClientData instance; +! int direction; +! ClientData *handleptr; + { + Tcl_SetErrno(EINVAL); + return EINVAL; +--- 1649,1667 ---- + return result; + } + + static void + channel_watch(instance, mask) +! ClientData instance UNUSED; +! int mask UNUSED; + { + Tcl_SetErrno(EINVAL); + } + + static int + channel_gethandle(instance, direction, handleptr) +! ClientData instance UNUSED; +! int direction UNUSED; +! ClientData *handleptr UNUSED; + { + Tcl_SetErrno(EINVAL); + return EINVAL; +*************** +*** 1691,1697 **** + NULL, /* set option */ + NULL, /* get option */ + channel_watch, +! channel_gethandle + }; + + /********************************** +--- 1679,1692 ---- + NULL, /* set option */ + NULL, /* get option */ + channel_watch, +! channel_gethandle, +! NULL, +! NULL, +! NULL, +! NULL, +! NULL, +! NULL, +! NULL + }; + + /********************************** +*** ../vim-7.2.185/src/version.c 2009-05-22 18:20:23.000000000 +0200 +--- src/version.c 2009-05-22 21:07:21.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 186, + /**/ + +-- +ARTHUR: Old woman! +DENNIS: Man! +ARTHUR: Man. I'm sorry. Old man, What knight live in that castle over there? +DENNIS: I'm thirty-seven. + "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/7.2.187 b/7.2.187 new file mode 100644 index 00000000..13dfc9f1 --- /dev/null +++ b/7.2.187 @@ -0,0 +1,125 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.187 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.187 (after 7.2.186) +Problem: Doesn't build with older versions of TCL. (Yongwei Wu) +Solution: Add #ifdefs. (Dominique Pelle) +Files: src/if_tcl.c + + +*** ../vim-7.2.186/src/if_tcl.c 2009-05-22 21:07:45.000000000 +0200 +--- src/if_tcl.c 2009-05-23 14:23:51.000000000 +0200 +*************** +*** 161,167 **** + # endif + + /* +! * Declare HANDLE for perl.dll and function pointers. + */ + static HANDLE hTclLib = NULL; + Tcl_Interp* (*dll_Tcl_CreateInterp)(); +--- 161,167 ---- + # endif + + /* +! * Declare HANDLE for tcl.dll and function pointers. + */ + static HANDLE hTclLib = NULL; + Tcl_Interp* (*dll_Tcl_CreateInterp)(); +*************** +*** 182,188 **** + * Make all runtime-links of tcl. + * + * 1. Get module handle using LoadLibraryEx. +! * 2. Get pointer to perl function by GetProcAddress. + * 3. Repeat 2, until get all functions will be used. + * + * Parameter 'libname' provides name of DLL. +--- 182,188 ---- + * Make all runtime-links of tcl. + * + * 1. Get module handle using LoadLibraryEx. +! * 2. Get pointer to tcl function by GetProcAddress. + * 3. Repeat 2, until get all functions will be used. + * + * Parameter 'libname' provides name of DLL. +*************** +*** 1670,1692 **** + + static Tcl_ChannelType channel_type = + { +! "vimmessage", +! NULL, /* blockmode */ +! channel_close, +! channel_input, +! channel_output, +! NULL, /* seek */ +! NULL, /* set option */ +! NULL, /* get option */ +! channel_watch, +! channel_gethandle, +! NULL, +! NULL, +! NULL, +! NULL, +! NULL, +! NULL, +! NULL + }; + + /********************************** +--- 1670,1700 ---- + + static Tcl_ChannelType channel_type = + { +! "vimmessage", /* typeName */ +! NULL, /* version */ +! channel_close, /* closeProc */ +! channel_input, /* inputProc */ +! channel_output, /* outputProc */ +! NULL, /* seekProc */ +! NULL, /* setOptionProc */ +! NULL, /* getOptionProc */ +! channel_watch, /* watchProc */ +! channel_gethandle, /* getHandleProc */ +! NULL, /* close2Proc */ +! NULL, /* blockModeProc */ +! #ifdef TCL_CHANNEL_VERSION_2 +! NULL, /* flushProc */ +! NULL, /* handlerProc */ +! #endif +! #ifdef TCL_CHANNEL_VERSION_3 +! NULL, /* wideSeekProc */ +! #endif +! #ifdef TCL_CHANNEL_VERSION_4 +! NULL, /* threadActionProc */ +! #endif +! #ifdef TCL_CHANNEL_VERSION_5 +! NULL /* truncateProc */ +! #endif + }; + + /********************************** +*** ../vim-7.2.186/src/version.c 2009-05-22 21:07:45.000000000 +0200 +--- src/version.c 2009-05-23 14:25:04.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 187, + /**/ + +-- +Friends? I have lots of friends! In fact, I have every episode ever made. + + /// 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/7.2.188 b/7.2.188 new file mode 100644 index 00000000..1aa527da --- /dev/null +++ b/7.2.188 @@ -0,0 +1,278 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.188 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.188 +Problem: Crash with specific use of function calls. (Meikel Brandmeyer) +Solution: Make sure the items referenced by a function call are not freed + twice. (based on patch from Nico Weber) +Files: src/eval.c + + +*** ../vim-7.2.187/src/eval.c 2009-05-16 17:29:37.000000000 +0200 +--- src/eval.c 2009-05-22 20:04:22.000000000 +0200 +*************** +*** 129,136 **** +--- 129,139 ---- + /* + * When recursively copying lists and dicts we need to remember which ones we + * have done to avoid endless recursiveness. This unique ID is used for that. ++ * The last bit is used for previous_funccal, ignored when comparing. + */ + static int current_copyID = 0; ++ #define COPYID_INC 2 ++ #define COPYID_MASK (~0x1) + + /* + * Array to hold the hashtab with variables local to each sourced script. +*************** +*** 439,444 **** +--- 442,448 ---- + static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2)); + static char_u *list2string __ARGS((typval_T *tv, int copyID)); + static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID)); ++ static int free_unref_items __ARGS((int copyID)); + static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID)); + static void set_ref_in_list __ARGS((list_T *l, int copyID)); + static void set_ref_in_item __ARGS((typval_T *tv, int copyID)); +*************** +*** 6494,6507 **** + int + garbage_collect() + { +! dict_T *dd; +! list_T *ll; +! int copyID = ++current_copyID; + buf_T *buf; + win_T *wp; + int i; + funccall_T *fc, **pfc; +! int did_free = FALSE; + #ifdef FEAT_WINDOWS + tabpage_T *tp; + #endif +--- 6498,6510 ---- + int + garbage_collect() + { +! int copyID; + buf_T *buf; + win_T *wp; + int i; + funccall_T *fc, **pfc; +! int did_free; +! int did_free_funccal = FALSE; + #ifdef FEAT_WINDOWS + tabpage_T *tp; + #endif +*************** +*** 6511,6520 **** +--- 6514,6538 ---- + may_garbage_collect = FALSE; + garbage_collect_at_exit = FALSE; + ++ /* We advance by two because we add one for items referenced through ++ * previous_funccal. */ ++ current_copyID += COPYID_INC; ++ copyID = current_copyID; ++ + /* + * 1. Go through all accessible variables and mark all lists and dicts + * with copyID. + */ ++ ++ /* Don't free variables in the previous_funccal list unless they are only ++ * referenced through previous_funccal. This must be first, because if ++ * the item is referenced elsewhere it must not be freed. */ ++ for (fc = previous_funccal; fc != NULL; fc = fc->caller) ++ { ++ set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1); ++ set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1); ++ } ++ + /* script-local variables */ + for (i = 1; i <= ga_scripts.ga_len; ++i) + set_ref_in_ht(&SCRIPT_VARS(i), copyID); +*************** +*** 6546,6556 **** + /* v: vars */ + set_ref_in_ht(&vimvarht, copyID); + + /* +! * 2. Go through the list of dicts and free items without the copyID. + */ + for (dd = first_dict; dd != NULL; ) +! if (dd->dv_copyID != copyID) + { + /* Free the Dictionary and ordinary items it contains, but don't + * recurse into Lists and Dictionaries, they will be in the list +--- 6564,6610 ---- + /* v: vars */ + set_ref_in_ht(&vimvarht, copyID); + ++ /* Free lists and dictionaries that are not referenced. */ ++ did_free = free_unref_items(copyID); ++ ++ /* check if any funccal can be freed now */ ++ for (pfc = &previous_funccal; *pfc != NULL; ) ++ { ++ if (can_free_funccal(*pfc, copyID)) ++ { ++ fc = *pfc; ++ *pfc = fc->caller; ++ free_funccal(fc, TRUE); ++ did_free = TRUE; ++ did_free_funccal = TRUE; ++ } ++ else ++ pfc = &(*pfc)->caller; ++ } ++ if (did_free_funccal) ++ /* When a funccal was freed some more items might be garbage ++ * collected, so run again. */ ++ (void)garbage_collect(); ++ ++ return did_free; ++ } ++ ++ /* ++ * Free lists and dictionaries that are no longer referenced. ++ */ ++ static int ++ free_unref_items(copyID) ++ int copyID; ++ { ++ dict_T *dd; ++ list_T *ll; ++ int did_free = FALSE; ++ + /* +! * Go through the list of dicts and free items without the copyID. + */ + for (dd = first_dict; dd != NULL; ) +! if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)) + { + /* Free the Dictionary and ordinary items it contains, but don't + * recurse into Lists and Dictionaries, they will be in the list +*************** +*** 6565,6576 **** + dd = dd->dv_used_next; + + /* +! * 3. Go through the list of lists and free items without the copyID. +! * But don't free a list that has a watcher (used in a for loop), these +! * are not referenced anywhere. + */ + for (ll = first_list; ll != NULL; ) +! if (ll->lv_copyID != copyID && ll->lv_watch == NULL) + { + /* Free the List and ordinary items it contains, but don't recurse + * into Lists and Dictionaries, they will be in the list of dicts +--- 6619,6631 ---- + dd = dd->dv_used_next; + + /* +! * Go through the list of lists and free items without the copyID. +! * But don't free a list that has a watcher (used in a for loop), these +! * are not referenced anywhere. + */ + for (ll = first_list; ll != NULL; ) +! if ((ll->lv_copyID & COPYID_MASK) != (copyID & COPYID_MASK) +! && ll->lv_watch == NULL) + { + /* Free the List and ordinary items it contains, but don't recurse + * into Lists and Dictionaries, they will be in the list of dicts +*************** +*** 6584,6603 **** + else + ll = ll->lv_used_next; + +- /* check if any funccal can be freed now */ +- for (pfc = &previous_funccal; *pfc != NULL; ) +- { +- if (can_free_funccal(*pfc, copyID)) +- { +- fc = *pfc; +- *pfc = fc->caller; +- free_funccal(fc, TRUE); +- did_free = TRUE; +- } +- else +- pfc = &(*pfc)->caller; +- } +- + return did_free; + } + +--- 6639,6644 ---- +*************** +*** 18842,18847 **** +--- 18883,18889 ---- + { + hash_init(&dict->dv_hashtab); + dict->dv_refcount = DO_NOT_FREE_CNT; ++ dict->dv_copyID = 0; + dict_var->di_tv.vval.v_dict = dict; + dict_var->di_tv.v_type = VAR_DICT; + dict_var->di_tv.v_lock = VAR_FIXED; +*************** +*** 21294,21301 **** + current_funccal = fc->caller; + --depth; + +! /* if the a:000 list and the a: dict are not referenced we can free the +! * funccall_T and what's in it. */ + if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT + && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT + && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT) +--- 21336,21343 ---- + current_funccal = fc->caller; + --depth; + +! /* If the a:000 list and the l: and a: dicts are not referenced we can +! * free the funccall_T and what's in it. */ + if (fc->l_varlist.lv_refcount == DO_NOT_FREE_CNT + && fc->l_vars.dv_refcount == DO_NOT_FREE_CNT + && fc->l_avars.dv_refcount == DO_NOT_FREE_CNT) +*************** +*** 21334,21340 **** + + /* + * Return TRUE if items in "fc" do not have "copyID". That means they are not +! * referenced from anywhere. + */ + static int + can_free_funccal(fc, copyID) +--- 21376,21382 ---- + + /* + * Return TRUE if items in "fc" do not have "copyID". That means they are not +! * referenced from anywhere that is in use. + */ + static int + can_free_funccal(fc, copyID) +*** ../vim-7.2.187/src/version.c 2009-05-23 14:27:43.000000000 +0200 +--- src/version.c 2009-05-24 13:20:49.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 188, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.189 b/7.2.189 new file mode 100644 index 00000000..c8ad9add --- /dev/null +++ b/7.2.189 @@ -0,0 +1,86 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.189 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.189 +Problem: Possible hang for deleting auto-indent. (Dominique Pelle) +Solution: Make sure the position is not beyond the end of the line. +Files: src/edit.c + + +*** ../vim-7.2.188/src/edit.c 2009-05-16 16:36:25.000000000 +0200 +--- src/edit.c 2009-05-26 10:53:05.000000000 +0200 +*************** +*** 6420,6432 **** + + /* If we just did an auto-indent, remove the white space from the end + * of the line, and put the cursor back. +! * Do this when ESC was used or moving the cursor up/down. */ + if (did_ai && (esc || (vim_strchr(p_cpo, CPO_INDENT) == NULL +! && curwin->w_cursor.lnum != end_insert_pos->lnum))) + { + pos_T tpos = curwin->w_cursor; + + curwin->w_cursor = *end_insert_pos; + for (;;) + { + if (gchar_cursor() == NUL && curwin->w_cursor.col > 0) +--- 6420,6436 ---- + + /* If we just did an auto-indent, remove the white space from the end + * of the line, and put the cursor back. +! * Do this when ESC was used or moving the cursor up/down. +! * Check for the old position still being valid, just in case the text +! * got changed unexpectedly. */ + if (did_ai && (esc || (vim_strchr(p_cpo, CPO_INDENT) == NULL +! && curwin->w_cursor.lnum != end_insert_pos->lnum)) +! && end_insert_pos->lnum <= curbuf->b_ml.ml_line_count) + { + pos_T tpos = curwin->w_cursor; + + curwin->w_cursor = *end_insert_pos; ++ check_cursor_col(); /* make sure it is not past the line */ + for (;;) + { + if (gchar_cursor() == NUL && curwin->w_cursor.col > 0) +*************** +*** 6434,6440 **** + cc = gchar_cursor(); + if (!vim_iswhite(cc)) + break; +! (void)del_char(TRUE); + } + if (curwin->w_cursor.lnum != tpos.lnum) + curwin->w_cursor = tpos; +--- 6438,6445 ---- + cc = gchar_cursor(); + if (!vim_iswhite(cc)) + break; +! if (del_char(TRUE) == FAIL) +! break; /* should not happen */ + } + if (curwin->w_cursor.lnum != tpos.lnum) + curwin->w_cursor = tpos; +*** ../vim-7.2.188/src/version.c 2009-05-24 13:40:17.000000000 +0200 +--- src/version.c 2009-05-26 10:50:53.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 189, + /**/ + +-- +FIRST VILLAGER: We have found a witch. May we burn her? + "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/7.2.190 b/7.2.190 new file mode 100644 index 00000000..2a0aee98 --- /dev/null +++ b/7.2.190 @@ -0,0 +1,182 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.190 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.190 +Problem: The register executed by @@ isn't restored. +Solution: Mark the executable register in the viminfo file. +Files: src/ops.c + + +*** ../vim-7.2.189/src/ops.c 2009-05-13 12:46:36.000000000 +0200 +--- src/ops.c 2009-05-26 18:05:23.000000000 +0200 +*************** +*** 1143,1148 **** +--- 1143,1150 ---- + return OK; + } + ++ static int execreg_lastc = NUL; ++ + /* + * execute a yank register: copy it into the stuff buffer + * +*************** +*** 1155,1161 **** + int addcr; /* always add '\n' to end of line */ + int silent; /* set "silent" flag in typeahead buffer */ + { +- static int lastc = NUL; + long i; + char_u *p; + int retval = OK; +--- 1157,1162 ---- +*************** +*** 1163,1174 **** + + if (regname == '@') /* repeat previous one */ + { +! if (lastc == NUL) + { + EMSG(_("E748: No previously used register")); + return FAIL; + } +! regname = lastc; + } + /* check for valid regname */ + if (regname == '%' || regname == '#' || !valid_yank_reg(regname, FALSE)) +--- 1164,1175 ---- + + if (regname == '@') /* repeat previous one */ + { +! if (execreg_lastc == NUL) + { + EMSG(_("E748: No previously used register")); + return FAIL; + } +! regname = execreg_lastc; + } + /* check for valid regname */ + if (regname == '%' || regname == '#' || !valid_yank_reg(regname, FALSE)) +*************** +*** 1176,1182 **** + emsg_invreg(regname); + return FAIL; + } +! lastc = regname; + + #ifdef FEAT_CLIPBOARD + regname = may_get_selection(regname); +--- 1177,1183 ---- + emsg_invreg(regname); + return FAIL; + } +! execreg_lastc = regname; + + #ifdef FEAT_CLIPBOARD + regname = may_get_selection(regname); +*************** +*** 5337,5347 **** +--- 5338,5351 ---- + + /* We only get here (hopefully) if line[0] == '"' */ + str = virp->vir_line + 1; ++ ++ /* If the line starts with "" this is the y_previous register. */ + if (*str == '"') + { + set_prev = TRUE; + str++; + } ++ + if (!ASCII_ISALNUM(*str) && *str != '-') + { + if (viminfo_error("E577: ", _("Illegal register name"), virp->vir_line)) +*************** +*** 5351,5356 **** +--- 5355,5368 ---- + get_yank_register(*str++, FALSE); + if (!force && y_current->y_array != NULL) + do_it = FALSE; ++ ++ if (*str == '@') ++ { ++ /* "x@: register x used for @@ */ ++ if (force || execreg_lastc == NUL) ++ execreg_lastc = str[-1]; ++ } ++ + size = 0; + limit = 100; /* Optimized for registers containing <= 100 lines */ + if (do_it) +*************** +*** 5360,5366 **** + vim_free(y_current->y_array); + array = y_current->y_array = + (char_u **)alloc((unsigned)(limit * sizeof(char_u *))); +! str = skipwhite(str); + if (STRNCMP(str, "CHAR", 4) == 0) + y_current->y_type = MCHAR; + #ifdef FEAT_VISUAL +--- 5372,5378 ---- + vim_free(y_current->y_array); + array = y_current->y_array = + (char_u **)alloc((unsigned)(limit * sizeof(char_u *))); +! str = skipwhite(skiptowhite(str)); + if (STRNCMP(str, "CHAR", 4) == 0) + y_current->y_type = MCHAR; + #ifdef FEAT_VISUAL +*************** +*** 5443,5448 **** +--- 5455,5461 ---- + max_kbyte = get_viminfo_parameter('s'); + if (max_kbyte == 0) + return; ++ + for (i = 0; i < NUM_REGISTERS; i++) + { + if (y_regs[i].y_array == NULL) +*************** +*** 5497,5503 **** + if (y_previous == &y_regs[i]) + fprintf(fp, "\""); + c = get_register_name(i); +! fprintf(fp, "\"%c\t%s\t%d\n", c, type, + #ifdef FEAT_VISUAL + (int)y_regs[i].y_width + #else +--- 5510,5519 ---- + if (y_previous == &y_regs[i]) + fprintf(fp, "\""); + c = get_register_name(i); +! fprintf(fp, "\"%c", c); +! if (c == execreg_lastc) +! fprintf(fp, "@"); +! fprintf(fp, "\t%s\t%d\n", type, + #ifdef FEAT_VISUAL + (int)y_regs[i].y_width + #else +*** ../vim-7.2.189/src/version.c 2009-05-26 11:01:43.000000000 +0200 +--- src/version.c 2009-05-26 18:10:13.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 190, + /**/ + +-- +If you had to identify, in one word, the reason why the +human race has not achieved, and never will achieve, its +full potential, that word would be "meetings." + + /// 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/7.2.191 b/7.2.191 new file mode 100644 index 00000000..f9c33571 --- /dev/null +++ b/7.2.191 @@ -0,0 +1,3705 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.191 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.191 +Problem: Mzscheme interface doesn't work on Ubuntu. +Solution: Change autoconf rules. Define missing macro. Some changes to + avoid gcc warnings. Remove per-buffer namespace. (Sergey Khorev) +Files: runtime/doc/if_mzsch.txt, src/Makefile, src/Make_ming.mak, + src/Make_mvc.mak, src/auto/configure, src/configure.in, + src/config.mk.in, src/eval.c, src/if_mzsch.c, src/if_mzsch.h, + src/main.c, src/proto/if_mzsch.pro + + +*** ../vim-7.2.190/runtime/doc/if_mzsch.txt 2008-08-09 19:36:48.000000000 +0200 +--- runtime/doc/if_mzsch.txt 2009-05-26 18:49:53.000000000 +0200 +*************** +*** 1,4 **** +! *if_mzsch.txt* For Vim version 7.2. Last change: 2008 Jun 28 + + + VIM REFERENCE MANUAL by Sergey Khorev +--- 1,4 ---- +! *if_mzsch.txt* For Vim version 7.2. Last change: 2009 May 26 + + + VIM REFERENCE MANUAL by Sergey Khorev +*************** +*** 42,51 **** + + *:mzfile* *:mzf* + :[range]mzf[ile] {file} Execute the MzScheme script in {file}. {not in Vi} +- All statements are executed in the namespace of the +- buffer that was current during :mzfile start. +- If you want to access other namespaces, use +- 'parameterize'. + + All of these commands do essentially the same thing - they execute a piece of + MzScheme code, with the "current range" set to the given line +--- 42,47 ---- +*************** +*** 54,61 **** + In the case of :mzscheme, the code to execute is in the command-line. + In the case of :mzfile, the code to execute is the contents of the given file. + +- Each buffer has its own MzScheme namespace. Global namespace is bound to +- the "global-namespace" value from the 'vimext' module. + MzScheme interface defines exception exn:vim, derived from exn. + It is raised for various Vim errors. + +--- 50,55 ---- +*************** +*** 79,118 **** + e.g.: > + :mzscheme (require (prefix vim- vimext)) + < +! All the examples below assume this naming scheme. Note that you need to do +! this again for every buffer. + +- The auto-instantiation can be achieved with autocommands, e.g. you can put +- something like this in your .vimrc (EOFs should not have indentation): > +- function s:MzRequire() +- if has("mzscheme") +- :mz << EOF +- (require (prefix vim- vimext)) +- (let ((buf (vim-get-buff-by-name (vim-eval "expand(\"\")")))) +- (when (and buf (not (eq? buf (vim-curr-buff)))) +- (parameterize ((current-namespace (vim-get-buff-namespace buf))) +- (namespace-attach-module vim-global-namespace 'vimext) +- (namespace-require '(prefix vim vimext))))) +- EOF +- endif +- endfunction +- +- function s:MzStartup() +- if has("mzscheme") +- au BufNew,BufNewFile,BufAdd,BufReadPre * :call s:MzRequire() +- :mz << EOF +- (current-library-collection-paths +- (cons +- (build-path (find-system-path 'addon-dir) (version) "collects") +- (current-library-collection-paths))) +- EOF +- endif +- endfunction +- +- call s:MzStartup() +- < +- +- The global namespace just instantiated this module with the prefix "vimext:". + *mzscheme-sandbox* + When executed in the |sandbox|, access to some filesystem and Vim interface + procedures is restricted. +--- 73,80 ---- + e.g.: > + :mzscheme (require (prefix vim- vimext)) + < +! All the examples below assume this naming scheme. + + *mzscheme-sandbox* + When executed in the |sandbox|, access to some filesystem and Vim interface + procedures is restricted. +*************** +*** 121,135 **** + 2. Examples *mzscheme-examples* + > + :mzscheme (display "Hello") + :mzscheme (vim-set-buff-line 10 "This is line #10") + < + Inline script usage: > + function! SetFirstLine() + :mz << EOF + (display "!!!") + (vim-set-buff-line 1 "This is line #1") + (vim-beep) +! EOF + endfunction + + nmap :call SetFirstLine() +--- 83,102 ---- + 2. Examples *mzscheme-examples* + > + :mzscheme (display "Hello") ++ :mz (display (string-append "Using MzScheme version " (version))) ++ :mzscheme (require (prefix vim- vimext)) ; for MzScheme < 4.x ++ :mzscheme (require (prefix-in vim- 'vimext)) ; MzScheme 4.x + :mzscheme (vim-set-buff-line 10 "This is line #10") + < + Inline script usage: > + function! SetFirstLine() + :mz << EOF + (display "!!!") ++ (require (prefix vim- vimext)) ++ ; for newer versions (require (prefix-in vim- 'vimext)) + (vim-set-buff-line 1 "This is line #1") + (vim-beep) +! EOF + endfunction + + nmap :call SetFirstLine() +*************** +*** 137,153 **** + File execution: > + :mzfile supascript.scm + < +! Accessing the current buffer namespace from an MzScheme program running in +! another buffer within |:mzfile|-executed script : > +! ; Move to the window below +! (vim-command "wincmd j") +! ; execute in the context of buffer, to which window belongs +! ; assume that buffer has 'textstring' defined +! (parameterize ((current-namespace +! (vim-get-buff-namespace (vim-curr-buff)))) +! (eval '(vim-set-buff-line 1 textstring))) +! < + + ============================================================================== + 3. Threads *mzscheme-threads* + +--- 104,136 ---- + File execution: > + :mzfile supascript.scm + < +! Vim exception handling: > +! :mz << EOF +! (require (prefix vim- vimext)) +! ; for newer versions (require (prefix-in vim- 'vimext)) +! (with-handlers +! ([exn:vim? (lambda (e) (display (exn-message e)))]) +! (vim-eval "nonsense-string")) +! EOF +! < +! Auto-instantiation of vimext module (can be placed in your |vimrc|): > +! function! MzRequire() +! :redir => l:mzversion +! :mz (version) +! :redir END +! if strpart(l:mzversion, 1, 1) < "4" +! " MzScheme versions < 4.x: +! :mz (require (prefix vim- vimext)) +! else +! " newer versions: +! :mz (require (prefix-in vim- 'vimext)) +! endif +! endfunction + ++ if has("mzscheme") ++ silent call MzRequire() ++ endif ++ < + ============================================================================== + 3. Threads *mzscheme-threads* + +*************** +*** 168,178 **** + Common + ------ + (command {command-string}) Perform the vim ":Ex" style command. +! (eval {expr-string}) Evaluate the vim expression to a string. +! A |List| is turned into a string by +! joining the items and inserting line +! breaks. +! NOTE clashes with MzScheme eval + (range-start) Start/End of the range passed with + (range-end) the Scheme command. + (beep) beep +--- 151,161 ---- + Common + ------ + (command {command-string}) Perform the vim ":Ex" style command. +! (eval {expr-string}) Evaluate the vim expression into +! respective MzScheme object: |Lists| are +! represented as Scheme lists, +! |Dictionaries| as hash tables. +! NOTE the name clashes with MzScheme eval + (range-start) Start/End of the range passed with + (range-end) the Scheme command. + (beep) beep +*************** +*** 186,192 **** + be set. The symbol 'global can be passed + as {buffer-or-window}. Then |:setglobal| + will be used. +- global-namespace The MzScheme main namespace. + + Buffers *mzscheme-buffer* + ------- +--- 169,174 ---- +*************** +*** 228,234 **** + if there is no such buffer. + (get-buff-by-num {buffernum}) Get a buffer by its number (return #f if + there is no buffer with this number). +- (get-buff-namespace [buffer]) Get buffer namespace. + + Windows *mzscheme-window* + ------ +--- 210,215 ---- +*************** +*** 250,256 **** + (set-cursor (line . col) [window]) Set cursor position. + + ============================================================================== +! 5. Dynamic loading *mzscheme-dynamic* + + On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| + output then includes |+mzscheme/dyn|. +--- 231,237 ---- + (set-cursor (line . col) [window]) Set cursor position. + + ============================================================================== +! 5. Dynamic loading *mzscheme-dynamic* *E812* + + On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| + output then includes |+mzscheme/dyn|. +*** ../vim-7.2.190/src/Makefile 2009-05-26 18:12:19.000000000 +0200 +--- src/Makefile 2009-05-26 22:54:48.000000000 +0200 +*************** +*** 536,542 **** + # Use this with GCC to check for mistakes, unused arguments, etc. + #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code + #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers +! #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code + + # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond + # allocated memory (and makes every malloc()/free() very slow). +--- 536,542 ---- + # Use this with GCC to check for mistakes, unused arguments, etc. + #CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code + #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers +! #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter + + # EFENCE - Electric-Fence malloc debugging: catches memory accesses beyond + # allocated memory (and makes every malloc()/free() very slow). +*************** +*** 2200,2205 **** +--- 2200,2206 ---- + -rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c + -rm -f conftest* *~ auto/link.sed + -rm -rf $(APPDIR) ++ -rm -rf mzscheme_base.c + if test -d $(PODIR); then \ + cd $(PODIR); $(MAKE) prefix=$(DESTDIR)$(prefix) clean; \ + fi +*************** +*** 2433,2440 **** + objects/if_xcmdsrv.o: if_xcmdsrv.c + $(CCC) -o $@ if_xcmdsrv.c + +! objects/if_mzsch.o: if_mzsch.c + $(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c + + objects/if_perl.o: auto/if_perl.c + $(CCC) -o $@ auto/if_perl.c +--- 2434,2444 ---- + objects/if_xcmdsrv.o: if_xcmdsrv.c + $(CCC) -o $@ if_xcmdsrv.c + +! objects/if_mzsch.o: if_mzsch.c $(MZSCHEME_EXTRA) + $(CCC) -o $@ $(MZSCHEME_CFLAGS_EXTRA) if_mzsch.c ++ ++ mzscheme_base.c: ++ $(MZSCHEME_MZC) --c-mods mzscheme_base.c ++lib scheme/base + + objects/if_perl.o: auto/if_perl.c + $(CCC) -o $@ auto/if_perl.c +*** ../vim-7.2.190/src/Make_ming.mak 2007-08-12 15:24:29.000000000 +0200 +--- src/Make_ming.mak 2009-05-26 18:54:15.000000000 +0200 +*************** +*** 115,122 **** +--- 115,135 ---- + MZSCHEME_VER=205_000 + endif + ++ ifndef MZSCHEME_PRECISE_GC ++ MZSCHEME_PRECISE_GC=no ++ endif ++ ++ # for version 4.x we need to generate byte-code for Scheme base ++ ifndef MZSCHEME_GENERATE_BASE ++ MZSCHEME_GENERATE_BASE=no ++ endif ++ + ifeq (no,$(DYNAMIC_MZSCHEME)) ++ ifeq (yes,$(MZSCHEME_PRECISE_GC)) ++ MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER) ++ else + MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER) ++ endif + # the modern MinGW can dynamically link to dlls directly. + # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll + ifndef MZSCHEME_DLLS +*************** +*** 410,415 **** +--- 423,435 ---- + ifdef MZSCHEME + OBJ += $(OUTDIR)/if_mzsch.o + MZSCHEME_INCL = if_mzsch.h ++ ifeq (yes,$(MZSCHEME_GENERATE_BASE)) ++ CFLAGS += -DINCLUDE_MZSCHEME_BASE ++ MZ_EXTRA_DEP += mzscheme_base.c ++ endif ++ ifeq (yes,$(MZSCHEME_PRECISE_GC)) ++ CFLAGS += -DMZ_PRECISE_GC ++ endif + endif + ifdef PYTHON + OBJ += $(OUTDIR)/if_python.o +*************** +*** 588,593 **** +--- 608,619 ---- + $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC) + $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o + ++ $(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP) ++ $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o ++ ++ mzscheme_base.c: ++ $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base ++ + pathdef.c: $(INCL) + ifneq (sh.exe, $(SHELL)) + @echo creating pathdef.c +*** ../vim-7.2.190/src/Make_mvc.mak 2009-02-04 18:34:54.000000000 +0100 +--- src/Make_mvc.mak 2009-05-26 18:54:51.000000000 +0200 +*************** +*** 34,39 **** +--- 34,40 ---- + # MZSCHEME=[Path to MzScheme directory] + # DYNAMIC_MZSCHEME=yes (to load the MzScheme DLLs dynamically) + # MZSCHEME_VER=[version, 205_000, ...] ++ # MZSCHEME_DEBUG=no + # + # Perl interface: + # PERL=[Path to Perl directory] +*************** +*** 621,635 **** +--- 622,658 ---- + MZSCHEME_VER = 205_000 + !endif + CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include ++ !if EXIST("$(MZSCHEME)\collects\scheme\base.ss") ++ # for MzScheme 4.x we need to include byte code for basic Scheme stuff ++ MZSCHEME_EXTRA_DEP = mzscheme_base.c ++ CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE ++ !endif ++ !if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \ ++ && !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib") ++ !message Building with Precise GC ++ MZSCHEME_PRECISE_GC = yes ++ CFLAGS = $(CFLAGS) -DMZ_PRECISE_GC ++ !endif + !if "$(DYNAMIC_MZSCHEME)" == "yes" ++ !if "$(MZSCHEME_PRECISE_GC)" == "yes" ++ !error MzScheme with Precise GC cannot be loaded dynamically ++ !endif + !message MzScheme DLLs will be loaded dynamically + CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \ + -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \ + -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\" + !else ++ !if "$(MZSCHEME_DEBUG)" == "yes" ++ CFLAGS = $(CFLAGS) -DMZSCHEME_FORCE_GC ++ !endif ++ !if "$(MZSCHEME_PRECISE_GC)" == "yes" ++ # Precise GC does not use separate dll ++ MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib ++ !else + MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \ + $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib + !endif ++ !endif + MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj + !endif + +*************** +*** 930,938 **** + $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c $(INCL) + $(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c + +! $(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c $(INCL) + $(CC) $(CFLAGS) if_mzsch.c \ + -DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\" + + $(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c $(INCL) + $(CC) $(CFLAGS) $(PYTHON_INC) if_python.c +--- 953,963 ---- + $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c $(INCL) + $(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c + +! $(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c $(INCL) $(MZSCHEME_EXTRA_DEP) + $(CC) $(CFLAGS) if_mzsch.c \ + -DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\" ++ mzscheme_base.c: ++ $(MZSCHEME)\mzc --c-mods mzscheme_base.c ++lib scheme/base + + $(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c $(INCL) + $(CC) $(CFLAGS) $(PYTHON_INC) if_python.c +*** ../vim-7.2.190/src/auto/configure 2009-05-21 23:25:38.000000000 +0200 +--- src/auto/configure 2009-05-26 19:12:29.000000000 +0200 +*************** +*** 701,706 **** +--- 701,708 ---- + shrpenv + vi_cv_perllib + vi_cv_path_perl ++ MZSCHEME_MZC ++ MZSCHEME_EXTRA + MZSCHEME_CFLAGS + MZSCHEME_LIBS + MZSCHEME_PRO +*************** +*** 4641,4648 **** + $as_echo "\"$PLTHOME\"" >&6; } + vi_cv_path_mzscheme_pfx="$PLTHOME" + else +! { $as_echo "$as_me:$LINENO: result: \"not set\"" >&5 +! $as_echo "\"not set\"" >&6; } + # Extract the first word of "mzscheme", so it can be a program name with args. + set dummy mzscheme; ac_word=$2 + { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +--- 4643,4650 ---- + $as_echo "\"$PLTHOME\"" >&6; } + vi_cv_path_mzscheme_pfx="$PLTHOME" + else +! { $as_echo "$as_me:$LINENO: result: not set" >&5 +! $as_echo "not set" >&6; } + # Extract the first word of "mzscheme", so it can be a program name with args. + set dummy mzscheme; ac_word=$2 + { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +*************** +*** 4697,4712 **** + if test "${vi_cv_path_mzscheme_pfx+set}" = set; then + $as_echo_n "(cached) " >&6 + else +! vi_cv_path_mzscheme_pfx=` +! ${vi_cv_path_mzscheme} -evm \ +! "(display (simplify-path \ + (build-path (call-with-values \ + (lambda () (split-path (find-system-path (quote exec-file)))) \ +! (lambda (base name must-be-dir?) base)) (quote up))))"` + fi + { $as_echo "$as_me:$LINENO: result: $vi_cv_path_mzscheme_pfx" >&5 + $as_echo "$vi_cv_path_mzscheme_pfx" >&6; } +! vi_cv_path_mzscheme_pfx=`echo "$vi_cv_path_mzscheme_pfx" | sed 's+/$++'` + fi + fi + fi +--- 4699,4714 ---- + if test "${vi_cv_path_mzscheme_pfx+set}" = set; then + $as_echo_n "(cached) " >&6 + else +! echo "(display (simplify-path \ + (build-path (call-with-values \ + (lambda () (split-path (find-system-path (quote exec-file)))) \ +! (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm +! vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \ +! sed -e 's+/$++'` + fi + { $as_echo "$as_me:$LINENO: result: $vi_cv_path_mzscheme_pfx" >&5 + $as_echo "$vi_cv_path_mzscheme_pfx" >&6; } +! rm -f mzdirs.scm + fi + fi + fi +*************** +*** 4716,4736 **** + { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include" >&5 + $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include... " >&6; } + if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then +! { $as_echo "$as_me:$LINENO: result: \"yes\"" >&5 +! $as_echo "\"yes\"" >&6; } + else +! { $as_echo "$as_me:$LINENO: result: \"no\"" >&5 +! $as_echo "\"no\"" >&6; } +! { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include" >&5 +! $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include... " >&6; } + if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then +! { $as_echo "$as_me:$LINENO: result: \"yes\"" >&5 +! $as_echo "\"yes\"" >&6; } +! SCHEME_INC=/plt + else +! { $as_echo "$as_me:$LINENO: result: \"no\"" >&5 +! $as_echo "\"no\"" >&6; } +! vi_cv_path_mzscheme_pfx= + fi + fi + fi +--- 4718,4749 ---- + { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include" >&5 + $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include... " >&6; } + if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then +! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include +! { $as_echo "$as_me:$LINENO: result: yes" >&5 +! $as_echo "yes" >&6; } + else +! { $as_echo "$as_me:$LINENO: result: no" >&5 +! $as_echo "no" >&6; } +! { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt" >&5 +! $as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt... " >&6; } + if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then +! { $as_echo "$as_me:$LINENO: result: yes" >&5 +! $as_echo "yes" >&6; } +! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt + else +! { $as_echo "$as_me:$LINENO: result: no" >&5 +! $as_echo "no" >&6; } +! { $as_echo "$as_me:$LINENO: checking if scheme.h can be found in /usr/include/plt/" >&5 +! $as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; } +! if test -f /usr/include/plt/scheme.h; then +! { $as_echo "$as_me:$LINENO: result: yes" >&5 +! $as_echo "yes" >&6; } +! SCHEME_INC=/usr/include/plt +! else +! { $as_echo "$as_me:$LINENO: result: no" >&5 +! $as_echo "no" >&6; } +! vi_cv_path_mzscheme_pfx= +! fi + fi + fi + fi +*************** +*** 4738,4758 **** + if test "X$vi_cv_path_mzscheme_pfx" != "X"; then + if test "x$MACOSX" = "xyes"; then + MZSCHEME_LIBS="-framework PLT_MzScheme" + elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then + MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" + else +! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" + if test "$GCC" = yes; then +! MZSCHEME_LIBS="$MZSCHEME_LIBS -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" + elif test "`(uname) 2>/dev/null`" = SunOS && + uname -r | grep '^5' >/dev/null; then +! MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib" + fi + fi + if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then + SCHEME_COLLECTS=lib/plt/ + fi +! MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC} \ + -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" + MZSCHEME_SRC="if_mzsch.c" + MZSCHEME_OBJ="objects/if_mzsch.o" +--- 4751,4784 ---- + if test "X$vi_cv_path_mzscheme_pfx" != "X"; then + if test "x$MACOSX" = "xyes"; then + MZSCHEME_LIBS="-framework PLT_MzScheme" ++ elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then ++ MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a" ++ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" + elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then + MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" + else +! if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then +! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m" +! MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" +! else +! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" +! fi + if test "$GCC" = yes; then +! MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" + elif test "`(uname) 2>/dev/null`" = SunOS && + uname -r | grep '^5' >/dev/null; then +! MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib" + fi + fi + if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then + SCHEME_COLLECTS=lib/plt/ + fi +! if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then +! MZSCHEME_EXTRA="mzscheme_base.c" +! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE" +! MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" +! fi +! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \ + -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" + MZSCHEME_SRC="if_mzsch.c" + MZSCHEME_OBJ="objects/if_mzsch.o" +*************** +*** 4767,4772 **** +--- 4793,4800 ---- + + + ++ ++ + fi + + +*** ../vim-7.2.190/src/configure.in 2009-05-21 23:25:38.000000000 +0200 +--- src/configure.in 2009-05-26 18:57:35.000000000 +0200 +*************** +*** 414,420 **** + AC_MSG_RESULT("$PLTHOME") + vi_cv_path_mzscheme_pfx="$PLTHOME" + else +! AC_MSG_RESULT("not set") + dnl -- try to find MzScheme executable + AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme) + +--- 414,420 ---- + AC_MSG_RESULT("$PLTHOME") + vi_cv_path_mzscheme_pfx="$PLTHOME" + else +! AC_MSG_RESULT(not set) + dnl -- try to find MzScheme executable + AC_PATH_PROG(vi_cv_path_mzscheme, mzscheme) + +*************** +*** 430,443 **** + if test "X$vi_cv_path_mzscheme" != "X"; then + dnl -- find where MzScheme thinks it was installed + AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx, +! [ vi_cv_path_mzscheme_pfx=` +! ${vi_cv_path_mzscheme} -evm \ +! "(display (simplify-path \ + (build-path (call-with-values \ + (lambda () (split-path (find-system-path (quote exec-file)))) \ +! (lambda (base name must-be-dir?) base)) (quote up))))"` ]) +! dnl Remove a trailing slash. +! vi_cv_path_mzscheme_pfx=`echo "$vi_cv_path_mzscheme_pfx" | sed 's+/$++'` + fi + fi + fi +--- 430,445 ---- + if test "X$vi_cv_path_mzscheme" != "X"; then + dnl -- find where MzScheme thinks it was installed + AC_CACHE_CHECK(MzScheme install prefix,vi_cv_path_mzscheme_pfx, +! dnl different versions of MzScheme differ in command line processing +! dnl use universal approach +! echo "(display (simplify-path \ + (build-path (call-with-values \ + (lambda () (split-path (find-system-path (quote exec-file)))) \ +! (lambda (base name must-be-dir?) base)) (quote up))))" > mzdirs.scm +! dnl Remove a trailing slash +! [ vi_cv_path_mzscheme_pfx=`${vi_cv_path_mzscheme} -r mzdirs.scm | \ +! sed -e 's+/$++'` ]) +! rm -f mzdirs.scm + fi + fi + fi +*************** +*** 446,461 **** + if test "X$vi_cv_path_mzscheme_pfx" != "X"; then + AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include) + if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then +! AC_MSG_RESULT("yes") + else +! AC_MSG_RESULT("no") +! AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include) + if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then +! AC_MSG_RESULT("yes") +! SCHEME_INC=/plt + else +! AC_MSG_RESULT("no") +! vi_cv_path_mzscheme_pfx= + fi + fi + fi +--- 448,471 ---- + if test "X$vi_cv_path_mzscheme_pfx" != "X"; then + AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include) + if test -f $vi_cv_path_mzscheme_pfx/include/scheme.h; then +! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include +! AC_MSG_RESULT(yes) + else +! AC_MSG_RESULT(no) +! AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/plt) + if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then +! AC_MSG_RESULT(yes) +! SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt + else +! AC_MSG_RESULT(no) +! AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/) +! if test -f /usr/include/plt/scheme.h; then +! AC_MSG_RESULT(yes) +! SCHEME_INC=/usr/include/plt +! else +! AC_MSG_RESULT(no) +! vi_cv_path_mzscheme_pfx= +! fi + fi + fi + fi +*************** +*** 463,485 **** + if test "X$vi_cv_path_mzscheme_pfx" != "X"; then + if test "x$MACOSX" = "xyes"; then + MZSCHEME_LIBS="-framework PLT_MzScheme" + elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then + MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" + else +! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" + if test "$GCC" = yes; then + dnl Make Vim remember the path to the library. For when it's not in + dnl $LD_LIBRARY_PATH. +! MZSCHEME_LIBS="$MZSCHEME_LIBS -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" + elif test "`(uname) 2>/dev/null`" = SunOS && + uname -r | grep '^5' >/dev/null; then +! MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib" + fi + fi + if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then + SCHEME_COLLECTS=lib/plt/ + fi +! MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC} \ + -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" + MZSCHEME_SRC="if_mzsch.c" + MZSCHEME_OBJ="objects/if_mzsch.o" +--- 473,510 ---- + if test "X$vi_cv_path_mzscheme_pfx" != "X"; then + if test "x$MACOSX" = "xyes"; then + MZSCHEME_LIBS="-framework PLT_MzScheme" ++ elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then ++ MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a" ++ MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" + elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then + MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" + else +! dnl Using shared objects +! if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then +! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m" +! MZSCHEME_CFLAGS="-DMZ_PRECISE_GC" +! else +! MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" +! fi + if test "$GCC" = yes; then + dnl Make Vim remember the path to the library. For when it's not in + dnl $LD_LIBRARY_PATH. +! MZSCHEME_LIBS="${MZSCHEME_LIBS} -Wl,-rpath -Wl,${vi_cv_path_mzscheme_pfx}/lib" + elif test "`(uname) 2>/dev/null`" = SunOS && + uname -r | grep '^5' >/dev/null; then +! MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib" + fi + fi + if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then + SCHEME_COLLECTS=lib/plt/ + fi +! if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then +! dnl need to generate bytecode for MzScheme base +! MZSCHEME_EXTRA="mzscheme_base.c" +! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE" +! MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc" +! fi +! MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \ + -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'" + MZSCHEME_SRC="if_mzsch.c" + MZSCHEME_OBJ="objects/if_mzsch.o" +*************** +*** 491,496 **** +--- 516,523 ---- + AC_SUBST(MZSCHEME_PRO) + AC_SUBST(MZSCHEME_LIBS) + AC_SUBST(MZSCHEME_CFLAGS) ++ AC_SUBST(MZSCHEME_EXTRA) ++ AC_SUBST(MZSCHEME_MZC) + fi + + +*** ../vim-7.2.190/src/config.mk.in 2008-06-25 00:49:03.000000000 +0200 +--- src/config.mk.in 2009-05-26 18:57:49.000000000 +0200 +*************** +*** 41,46 **** +--- 41,48 ---- + MZSCHEME_OBJ = @MZSCHEME_OBJ@ + MZSCHEME_CFLAGS = @MZSCHEME_CFLAGS@ + MZSCHEME_PRO = @MZSCHEME_PRO@ ++ MZSCHEME_EXTRA = @MZSCHEME_EXTRA@ ++ MZSCHEME_MZC = @MZSCHEME_MZC@ + + PERL = @vi_cv_path_perl@ + PERLLIB = @vi_cv_perllib@ +*** ../vim-7.2.190/src/eval.c 2009-05-24 13:40:17.000000000 +0200 +--- src/eval.c 2009-05-26 18:58:20.000000000 +0200 +*************** +*** 5866,5872 **** + return item1 == NULL && item2 == NULL; + } + +! #if defined(FEAT_PYTHON) || defined(PROTO) + /* + * Return the dictitem that an entry in a hashtable points to. + */ +--- 5866,5872 ---- + return item1 == NULL && item2 == NULL; + } + +! #if defined(FEAT_PYTHON) || defined(FEAT_MZSCHEME) || defined(PROTO) + /* + * Return the dictitem that an entry in a hashtable points to. + */ +*** ../vim-7.2.190/src/if_mzsch.c 2009-05-17 16:23:20.000000000 +0200 +--- src/if_mzsch.c 2009-05-26 19:24:18.000000000 +0200 +*************** +*** 4,9 **** +--- 4,11 ---- + * Original work by Brent Fulgham + * (Based on lots of help from Matthew Flatt) + * ++ * TODO Convert byte-strings to char strings? ++ * + * This consists of six parts: + * 1. MzScheme interpreter main program + * 2. Routines that handle the external interface between MzScheme and +*************** +*** 18,24 **** + * garbage collector will do it self + * 2. Requires at least NORMAL features. I can't imagine why one may want + * to build with SMALL or TINY features but with MzScheme interface. +! * 3. I don't use K&R-style functions. Anyway, MzScheme headers are ANSI. + */ + + #include "vim.h" +--- 20,26 ---- + * garbage collector will do it self + * 2. Requires at least NORMAL features. I can't imagine why one may want + * to build with SMALL or TINY features but with MzScheme interface. +! * 3. I don't use K&R-style functions. Anyways, MzScheme headers are ANSI. + */ + + #include "vim.h" +*************** +*** 29,42 **** + * depend". */ + #if defined(FEAT_MZSCHEME) || defined(PROTO) + + /* Base data structures */ + #define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type) + #define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type) + + typedef struct + { +! Scheme_Type tag; +! Scheme_Env *env; + buf_T *buf; + } vim_mz_buffer; + +--- 31,45 ---- + * depend". */ + #if defined(FEAT_MZSCHEME) || defined(PROTO) + ++ #include ++ + /* Base data structures */ + #define SCHEME_VIMBUFFERP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type) + #define SCHEME_VIMWINDOWP(obj) SAME_TYPE(SCHEME_TYPE(obj), mz_window_type) + + typedef struct + { +! Scheme_Object so; + buf_T *buf; + } vim_mz_buffer; + +*************** +*** 44,50 **** + + typedef struct + { +! Scheme_Type tag; + win_T *win; + } vim_mz_window; + +--- 47,53 ---- + + typedef struct + { +! Scheme_Object so; + win_T *win; + } vim_mz_window; + +*************** +*** 67,85 **** + Scheme_Object *port; + } Port_Info; + +- /* info for closed prim */ +- /* +- * data have different means: +- * for do_eval it is char* +- * for do_apply is Apply_Onfo* +- * for do_load is Port_Info* +- */ +- typedef struct +- { +- void *data; +- Scheme_Env *env; +- } Cmd_Info; +- + /* info for do_apply */ + typedef struct + { +--- 70,75 ---- +*************** +*** 122,128 **** + static Scheme_Object *insert_buffer_line_list(void *, int, Scheme_Object **); + static Scheme_Object *get_range_start(void *, int, Scheme_Object **); + static Scheme_Object *get_range_end(void *, int, Scheme_Object **); +- static Scheme_Object *get_buffer_namespace(void *, int, Scheme_Object **); + static vim_mz_buffer *get_vim_curr_buffer(void); + + /* Window-related commands */ +--- 112,117 ---- +*************** +*** 163,170 **** + static int do_mzscheme_command(exarg_T *, void *, Scheme_Closed_Prim *what); + static void startup_mzscheme(void); + static char *string_to_line(Scheme_Object *obj); +- static int mzscheme_io_init(void); +- static void mzscheme_interface_init(vim_mz_buffer *self); + static void do_output(char *mesg, long len); + static void do_printf(char *format, ...); + static void do_flush(void); +--- 152,157 ---- +*************** +*** 174,192 **** + static Scheme_Object *do_eval(void *, int noargc, Scheme_Object **noargv); + static Scheme_Object *do_load(void *, int noargc, Scheme_Object **noargv); + static Scheme_Object *do_apply(void *, int noargc, Scheme_Object **noargv); +! static void register_vim_exn(Scheme_Env *env); + static vim_mz_buffer *get_buffer_arg(const char *fname, int argnum, + int argc, Scheme_Object **argv); + static vim_mz_window *get_window_arg(const char *fname, int argnum, + int argc, Scheme_Object **argv); +- static void add_vim_exn(Scheme_Env *env); + static int line_in_range(linenr_T, buf_T *); + static void check_line_range(linenr_T, buf_T *); + static void mz_fix_cursor(int lo, int hi, int extra); + +! static int eval_in_namespace(void *, Scheme_Closed_Prim *, Scheme_Env *, +! Scheme_Object **ret); +! static void make_modules(Scheme_Env *); + + #ifdef DYNAMIC_MZSCHEME + +--- 161,212 ---- + static Scheme_Object *do_eval(void *, int noargc, Scheme_Object **noargv); + static Scheme_Object *do_load(void *, int noargc, Scheme_Object **noargv); + static Scheme_Object *do_apply(void *, int noargc, Scheme_Object **noargv); +! static void register_vim_exn(void); + static vim_mz_buffer *get_buffer_arg(const char *fname, int argnum, + int argc, Scheme_Object **argv); + static vim_mz_window *get_window_arg(const char *fname, int argnum, + int argc, Scheme_Object **argv); + static int line_in_range(linenr_T, buf_T *); + static void check_line_range(linenr_T, buf_T *); + static void mz_fix_cursor(int lo, int hi, int extra); + +! static int eval_with_exn_handling(void *, Scheme_Closed_Prim *, +! Scheme_Object **ret); +! static void make_modules(void); +! static void init_exn_catching_apply(void); +! static int mzscheme_env_main(Scheme_Env *env, int argc, char **argv); +! static int mzscheme_init(void); +! #ifdef FEAT_EVAL +! static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth, +! Scheme_Hash_Table *visited); +! #endif +! +! #ifdef MZ_PRECISE_GC +! static int buffer_size_proc(void *obj) +! { +! return gcBYTES_TO_WORDS(sizeof(vim_mz_buffer)); +! } +! static int buffer_mark_proc(void *obj) +! { +! return buffer_size_proc(obj); +! } +! static int buffer_fixup_proc(void *obj) +! { +! return buffer_size_proc(obj); +! } +! static int window_size_proc(void *obj) +! { +! return gcBYTES_TO_WORDS(sizeof(vim_mz_window)); +! } +! static int window_mark_proc(void *obj) +! { +! return window_size_proc(obj); +! } +! static int window_fixup_proc(void *obj) +! { +! return window_size_proc(obj); +! } +! #endif + + #ifdef DYNAMIC_MZSCHEME + +*************** +*** 260,267 **** + (Scheme_Closed_Prim *prim, void *data, const char *name, mzshort mina, + mzshort maxa); + static Scheme_Object *(*dll_scheme_make_integer_value)(long i); +- static Scheme_Object *(*dll_scheme_make_namespace)(int argc, +- Scheme_Object *argv[]); + static Scheme_Object *(*dll_scheme_make_pair)(Scheme_Object *car, + Scheme_Object *cdr); + static Scheme_Object *(*dll_scheme_make_prim_w_arity)(Scheme_Prim *prim, +--- 280,285 ---- +*************** +*** 311,316 **** +--- 329,345 ---- + static Scheme_Object *(*dll_scheme_char_string_to_path) + (Scheme_Object *s); + # endif ++ static Scheme_Hash_Table *(*dll_scheme_make_hash_table)(int type); ++ static void (*dll_scheme_hash_set)(Scheme_Hash_Table *table, ++ Scheme_Object *key, Scheme_Object *value); ++ static Scheme_Object *(*dll_scheme_hash_get)(Scheme_Hash_Table *table, ++ Scheme_Object *key); ++ static Scheme_Object *(*dll_scheme_make_double)(double d); ++ # ifdef INCLUDE_MZSCHEME_BASE ++ static Scheme_Object *(*dll_scheme_make_sized_byte_string)(char *chars, ++ long len, int copy); ++ static Scheme_Object *(*dll_scheme_namespace_require)(Scheme_Object *req); ++ # endif + + /* arrays are imported directly */ + # define scheme_eof dll_scheme_eof +*************** +*** 368,374 **** + # define scheme_lookup_global dll_scheme_lookup_global + # define scheme_make_closed_prim_w_arity dll_scheme_make_closed_prim_w_arity + # define scheme_make_integer_value dll_scheme_make_integer_value +- # define scheme_make_namespace dll_scheme_make_namespace + # define scheme_make_pair dll_scheme_make_pair + # define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity + # if MZSCHEME_VERSION_MAJOR < 299 +--- 397,402 ---- +*************** +*** 403,408 **** +--- 431,444 ---- + # define scheme_char_string_to_path \ + dll_scheme_char_string_to_path + # endif ++ # define scheme_make_hash_table dll_scheme_make_hash_table ++ # define scheme_hash_set dll_scheme_hash_set ++ # define scheme_hash_get dll_scheme_hash_get ++ # define scheme_make_double dll_scheme_make_double ++ # ifdef INCLUDE_MZSCHEME_BASE ++ # define scheme_make_sized_byte_string dll_scheme_make_sized_byte_string ++ # define scheme_namespace_require dll_scheme_namespace_require ++ # endif + + typedef struct + { +*************** +*** 468,474 **** + {"scheme_make_closed_prim_w_arity", + (void **)&dll_scheme_make_closed_prim_w_arity}, + {"scheme_make_integer_value", (void **)&dll_scheme_make_integer_value}, +- {"scheme_make_namespace", (void **)&dll_scheme_make_namespace}, + {"scheme_make_pair", (void **)&dll_scheme_make_pair}, + {"scheme_make_prim_w_arity", (void **)&dll_scheme_make_prim_w_arity}, + # if MZSCHEME_VERSION_MAJOR < 299 +--- 504,509 ---- +*************** +*** 502,510 **** + {"scheme_current_config", (void **)&dll_scheme_current_config}, + {"scheme_char_string_to_byte_string", + (void **)&dll_scheme_char_string_to_byte_string}, +! {"scheme_char_string_to_path", +! (void **)&dll_scheme_char_string_to_path}, + # endif + {NULL, NULL}}; + + static HINSTANCE hMzGC = 0; +--- 537,552 ---- + {"scheme_current_config", (void **)&dll_scheme_current_config}, + {"scheme_char_string_to_byte_string", + (void **)&dll_scheme_char_string_to_byte_string}, +! {"scheme_char_string_to_path", (void **)&dll_scheme_char_string_to_path}, + # endif ++ {"scheme_make_hash_table", (void **)&dll_scheme_make_hash_table}, ++ {"scheme_hash_set", (void **)&dll_scheme_hash_set}, ++ {"scheme_hash_get", (void **)&dll_scheme_hash_get}, ++ {"scheme_make_double", (void **)&dll_scheme_make_double}, ++ # ifdef INCLUDE_MZSCHEME_BASE ++ {"scheme_make_sized_byte_string", (void **)&dll_scheme_make_sized_byte_string}, ++ {"scheme_namespace_require", (void **)&dll_scheme_namespace_require}, ++ #endif + {NULL, NULL}}; + + static HINSTANCE hMzGC = 0; +*************** +*** 592,597 **** +--- 634,644 ---- + } + #endif /* DYNAMIC_MZSCHEME */ + ++ /* need to put it here for dynamic stuff to work */ ++ #ifdef INCLUDE_MZSCHEME_BASE ++ # include "mzscheme_base.c" ++ #endif ++ + /* + *======================================================================== + * 1. MzScheme interpreter startup +*************** +*** 601,621 **** + static Scheme_Type mz_buffer_type; + static Scheme_Type mz_window_type; + +! static int initialized = 0; + + /* global environment */ + static Scheme_Env *environment = NULL; + /* output/error handlers */ + static Scheme_Object *curout = NULL; + static Scheme_Object *curerr = NULL; +! /* vim:exn exception */ + static Scheme_Object *exn_catching_apply = NULL; + static Scheme_Object *exn_p = NULL; + static Scheme_Object *exn_message = NULL; + static Scheme_Object *vim_exn = NULL; /* Vim Error exception */ +! /* values for exn:vim - constructor, predicate, accessors etc */ +! static Scheme_Object *vim_exn_names = NULL; +! static Scheme_Object *vim_exn_values = NULL; + + static long range_start; + static long range_end; +--- 648,669 ---- + static Scheme_Type mz_buffer_type; + static Scheme_Type mz_window_type; + +! static int initialized = FALSE; + + /* global environment */ + static Scheme_Env *environment = NULL; + /* output/error handlers */ + static Scheme_Object *curout = NULL; + static Scheme_Object *curerr = NULL; +! /* exn:vim exception */ + static Scheme_Object *exn_catching_apply = NULL; + static Scheme_Object *exn_p = NULL; + static Scheme_Object *exn_message = NULL; + static Scheme_Object *vim_exn = NULL; /* Vim Error exception */ +! +! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 +! static void *stack_base = NULL; +! #endif + + static long range_start; + static long range_end; +*************** +*** 668,677 **** + timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) + # elif defined(FEAT_GUI_GTK) + static gint +! timer_proc(gpointer data UNUSED) + # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) + static void +! timer_proc(XtPointer timed_out UNUSED, XtIntervalId *interval_id UNUSED) + # elif defined(FEAT_GUI_MAC) + pascal void + timer_proc(EventLoopTimerRef theTimer, void *userData) +--- 716,725 ---- + timer_proc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) + # elif defined(FEAT_GUI_GTK) + static gint +! timer_proc(gpointer data) + # elif defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) + static void +! timer_proc(XtPointer timed_out, XtIntervalId *interval_id) + # elif defined(FEAT_GUI_MAC) + pascal void + timer_proc(EventLoopTimerRef theTimer, void *userData) +*************** +*** 751,762 **** + #endif + } + + static void + startup_mzscheme(void) + { +! Scheme_Object *proc_make_security_guard; +! +! scheme_set_stack_base(NULL, 1); + + MZ_REGISTER_STATIC(environment); + MZ_REGISTER_STATIC(curout); +--- 799,862 ---- + #endif + } + ++ void ++ mzscheme_main(void) ++ { ++ #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 ++ /* use trampoline for precise GC in MzScheme >= 4.x */ ++ scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL); ++ #else ++ mzscheme_env_main(NULL, 0, NULL); ++ #endif ++ } ++ ++ static int ++ mzscheme_env_main(Scheme_Env *env, int argc, char **argv) ++ { ++ /* neither argument nor return values are used */ ++ #ifdef MZ_PRECISE_GC ++ # if MZSCHEME_VERSION_MAJOR < 400 ++ /* ++ * Starting from version 4.x, embedding applications must use ++ * scheme_main_setup/scheme_main_stack_setup trampolines ++ * rather than setting stack base directly with scheme_set_stack_base ++ */ ++ Scheme_Object *dummy = NULL; ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, dummy); ++ ++ stack_base = &__gc_var_stack__; ++ # else ++ /* environment has been created by us by Scheme */ ++ environment = env; ++ # endif ++ /* ++ * In 4.x, all activities must be performed inside trampoline ++ * so we are forced to initialise GC immediately ++ * This can be postponed in 3.x but I see no point in implementing ++ * a feature which will work in older versions only. ++ * One would better use conservative GC if he needs dynamic MzScheme ++ */ ++ mzscheme_init(); ++ #else ++ int dummy = 0; ++ stack_base = (void *)&dummy; ++ #endif ++ main_loop(FALSE, FALSE); ++ #if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400 ++ /* releasing dummy */ ++ MZ_GC_REG(); ++ MZ_GC_UNREG(); ++ #endif ++ return 0; ++ } ++ + static void + startup_mzscheme(void) + { +! #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 +! scheme_set_stack_base(stack_base, 1); +! #endif + + MZ_REGISTER_STATIC(environment); + MZ_REGISTER_STATIC(curout); +*************** +*** 765,774 **** + MZ_REGISTER_STATIC(exn_p); + MZ_REGISTER_STATIC(exn_message); + MZ_REGISTER_STATIC(vim_exn); +- MZ_REGISTER_STATIC(vim_exn_names); +- MZ_REGISTER_STATIC(vim_exn_values); + + environment = scheme_basic_env(); + + /* redirect output */ + scheme_console_output = do_output; +--- 865,899 ---- + MZ_REGISTER_STATIC(exn_p); + MZ_REGISTER_STATIC(exn_message); + MZ_REGISTER_STATIC(vim_exn); + ++ #if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400 ++ /* in newer versions of precise GC the initial env has been created */ + environment = scheme_basic_env(); ++ #endif ++ MZ_GC_CHECK(); ++ ++ #ifdef INCLUDE_MZSCHEME_BASE ++ { ++ /* ++ * versions 4.x do not provide Scheme bindings by defaults ++ * we need to add them explicitly ++ */ ++ Scheme_Object *scheme_base_symbol = NULL; ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, scheme_base_symbol); ++ MZ_GC_REG(); ++ /* invoke function from generated and included base.c */ ++ declare_modules(environment); ++ scheme_base_symbol = scheme_intern_symbol("scheme/base"); ++ MZ_GC_CHECK(); ++ scheme_namespace_require(scheme_base_symbol); ++ MZ_GC_CHECK(); ++ MZ_GC_UNREG(); ++ } ++ #endif ++ register_vim_exn(); ++ /* use new environment to initialise exception handling */ ++ init_exn_catching_apply(); + + /* redirect output */ + scheme_console_output = do_output; +*************** +*** 776,823 **** + + #ifdef MZSCHEME_COLLECTS + /* setup 'current-library-collection-paths' parameter */ +- scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS, +- scheme_make_pair( + # if MZSCHEME_VERSION_MAJOR >= 299 +! scheme_char_string_to_path( +! scheme_byte_string_to_char_string( +! scheme_make_byte_string(MZSCHEME_COLLECTS))), + # else +! scheme_make_string(MZSCHEME_COLLECTS), + # endif +- scheme_null)); + #endif + #ifdef HAVE_SANDBOX +! /* setup sandbox guards */ +! proc_make_security_guard = scheme_lookup_global( +! scheme_intern_symbol("make-security-guard"), +! environment); +! if (proc_make_security_guard != NULL) +! { +! Scheme_Object *args[3]; +! Scheme_Object *guard; +! args[0] = scheme_get_param(scheme_config, MZCONFIG_SECURITY_GUARD); +! args[1] = scheme_make_prim_w_arity(sandbox_file_guard, +! "sandbox-file-guard", 3, 3); +! args[2] = scheme_make_prim_w_arity(sandbox_network_guard, +! "sandbox-network-guard", 4, 4); +! guard = scheme_apply(proc_make_security_guard, 3, args); +! scheme_set_param(scheme_config, MZCONFIG_SECURITY_GUARD, guard); + } + #endif + /* Create buffer and window types for use in Scheme code */ + mz_buffer_type = scheme_make_type(""); + mz_window_type = scheme_make_type(""); + +! register_vim_exn(environment); +! make_modules(environment); + + /* + * setup callback to receive notifications + * whether thread scheduling is (or not) required + */ + scheme_notify_multithread = notify_multithread; +- initialized = 1; + } + + /* +--- 901,1031 ---- + + #ifdef MZSCHEME_COLLECTS + /* setup 'current-library-collection-paths' parameter */ + # if MZSCHEME_VERSION_MAJOR >= 299 +! { +! Scheme_Object *coll_byte_string = NULL; +! Scheme_Object *coll_char_string = NULL; +! Scheme_Object *coll_path = NULL; +! Scheme_Object *coll_pair = NULL; +! Scheme_Config *config = NULL; +! +! MZ_GC_DECL_REG(5); +! MZ_GC_VAR_IN_REG(0, coll_byte_string); +! MZ_GC_VAR_IN_REG(1, coll_char_string); +! MZ_GC_VAR_IN_REG(2, coll_path); +! MZ_GC_VAR_IN_REG(3, coll_pair); +! MZ_GC_VAR_IN_REG(4, config); +! MZ_GC_REG(); +! coll_byte_string = scheme_make_byte_string(MZSCHEME_COLLECTS); +! MZ_GC_CHECK(); +! coll_char_string = scheme_byte_string_to_char_string(coll_byte_string); +! MZ_GC_CHECK(); +! coll_path = scheme_char_string_to_path(coll_char_string); +! MZ_GC_CHECK(); +! coll_pair = scheme_make_pair(coll_path, scheme_null); +! MZ_GC_CHECK(); +! config = scheme_config; +! MZ_GC_CHECK(); +! scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair); +! MZ_GC_CHECK(); +! MZ_GC_UNREG(); +! } + # else +! { +! Scheme_Object *coll_string = NULL; +! Scheme_Object *coll_pair = NULL; +! Scheme_Config *config = NULL; +! +! MZ_GC_DECL_REG(3); +! MZ_GC_VAR_IN_REG(0, coll_string); +! MZ_GC_VAR_IN_REG(1, coll_pair); +! MZ_GC_VAR_IN_REG(2, config); +! MZ_GC_REG(); +! coll_string = scheme_make_string(MZSCHEME_COLLECTS); +! MZ_GC_CHECK(); +! coll_pair = scheme_make_pair(coll_string, scheme_null); +! MZ_GC_CHECK(); +! config = scheme_config; +! MZ_GC_CHECK(); +! scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair); +! MZ_GC_CHECK(); +! MZ_GC_UNREG(); +! } + # endif + #endif + #ifdef HAVE_SANDBOX +! { +! Scheme_Object *make_security_guard = NULL; +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, make_security_guard); +! MZ_GC_REG(); +! +! #if MZSCHEME_VERSION_MAJOR < 400 +! { +! Scheme_Object *make_security_guard_symbol = NULL; +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, make_security_guard_symbol); +! MZ_GC_REG(); +! make_security_guard_symbol = scheme_intern_symbol("make-security-guard"); +! MZ_GC_CHECK(); +! make_security_guard = scheme_lookup_global( +! make_security_guard_symbol, environment); +! MZ_GC_UNREG(); +! } +! #else +! make_security_guard = scheme_builtin_value("make-security-guard"); +! MZ_GC_CHECK(); +! #endif +! +! /* setup sandbox guards */ +! if (make_security_guard != NULL) +! { +! Scheme_Object *args[3] = {NULL, NULL, NULL}; +! Scheme_Object *guard = NULL; +! Scheme_Config *config = NULL; +! MZ_GC_DECL_REG(5); +! MZ_GC_ARRAY_VAR_IN_REG(0, args, 3); +! MZ_GC_VAR_IN_REG(3, guard); +! MZ_GC_VAR_IN_REG(4, config); +! MZ_GC_REG(); +! config = scheme_config; +! MZ_GC_CHECK(); +! args[0] = scheme_get_param(config, MZCONFIG_SECURITY_GUARD); +! MZ_GC_CHECK(); +! args[1] = scheme_make_prim_w_arity(sandbox_file_guard, +! "sandbox-file-guard", 3, 3); +! args[2] = scheme_make_prim_w_arity(sandbox_network_guard, +! "sandbox-network-guard", 4, 4); +! guard = scheme_apply(make_security_guard, 3, args); +! MZ_GC_CHECK(); +! scheme_set_param(config, MZCONFIG_SECURITY_GUARD, guard); +! MZ_GC_CHECK(); +! MZ_GC_UNREG(); +! } +! MZ_GC_UNREG(); + } + #endif + /* Create buffer and window types for use in Scheme code */ + mz_buffer_type = scheme_make_type(""); ++ MZ_GC_CHECK(); + mz_window_type = scheme_make_type(""); ++ MZ_GC_CHECK(); ++ #ifdef MZ_PRECISE_GC ++ GC_register_traversers(mz_buffer_type, ++ buffer_size_proc, buffer_mark_proc, buffer_fixup_proc, ++ TRUE, TRUE); ++ GC_register_traversers(mz_window_type, ++ window_size_proc, window_mark_proc, window_fixup_proc, ++ TRUE, TRUE); ++ #endif + +! make_modules(); + + /* + * setup callback to receive notifications + * whether thread scheduling is (or not) required + */ + scheme_notify_multithread = notify_multithread; + } + + /* +*************** +*** 827,897 **** + static int + mzscheme_init(void) + { +- int do_require = FALSE; +- + if (!initialized) + { +- do_require = TRUE; + #ifdef DYNAMIC_MZSCHEME + if (!mzscheme_enabled(TRUE)) + { +! EMSG(_("???: Sorry, this command is disabled, the MzScheme library could not be loaded.")); + return -1; + } + #endif + startup_mzscheme(); +! +! if (mzscheme_io_init()) +! return -1; +! +! } +! /* recreate ports each call effectivelly clearing these ones */ +! curout = scheme_make_string_output_port(); +! curerr = scheme_make_string_output_port(); +! scheme_set_param(scheme_config, MZCONFIG_OUTPUT_PORT, curout); +! scheme_set_param(scheme_config, MZCONFIG_ERROR_PORT, curerr); +! +! if (do_require) +! { +! /* auto-instantiate in basic env */ +! eval_in_namespace("(require (prefix vimext: vimext))", do_eval, +! environment, NULL); + } +- +- return 0; +- } +- +- /* +- * This routine fills the namespace with various important routines that can +- * be used within MzScheme. +- */ +- static void +- mzscheme_interface_init(vim_mz_buffer *mzbuff) +- { +- Scheme_Object *attach; +- +- mzbuff->env = (Scheme_Env *)scheme_make_namespace(0, NULL); +- +- /* +- * attach instantiated modules from global namespace +- * so they can be easily instantiated in the buffer namespace +- */ +- attach = scheme_lookup_global( +- scheme_intern_symbol("namespace-attach-module"), +- environment); +- +- if (attach != NULL) + { +! Scheme_Object *ret; +! Scheme_Object *args[2]; +! +! args[0] = (Scheme_Object *)environment; +! args[1] = scheme_intern_symbol("vimext"); +! +! ret = (Scheme_Object *)mzvim_apply(attach, 2, args); + } + +! add_vim_exn(mzbuff->env); + } + + /* +--- 1035,1072 ---- + static int + mzscheme_init(void) + { + if (!initialized) + { + #ifdef DYNAMIC_MZSCHEME + if (!mzscheme_enabled(TRUE)) + { +! EMSG(_("E812: Sorry, this command is disabled, the MzScheme libraries could not be loaded.")); + return -1; + } + #endif + startup_mzscheme(); +! initialized = TRUE; + } + { +! Scheme_Config *config = NULL; +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, config); +! MZ_GC_REG(); +! config = scheme_config; +! MZ_GC_CHECK(); +! /* recreate ports each call effectivelly clearing these ones */ +! curout = scheme_make_string_output_port(); +! MZ_GC_CHECK(); +! curerr = scheme_make_string_output_port(); +! MZ_GC_CHECK(); +! scheme_set_param(config, MZCONFIG_OUTPUT_PORT, curout); +! MZ_GC_CHECK(); +! scheme_set_param(config, MZCONFIG_ERROR_PORT, curerr); +! MZ_GC_CHECK(); +! MZ_GC_UNREG(); + } + +! return 0; + } + + /* +*************** +*** 901,928 **** + */ + + /* +! * Evaluate command in namespace with exception handling + */ + static int +! eval_in_namespace(void *data, Scheme_Closed_Prim *what, Scheme_Env *env, +! Scheme_Object **ret) + { +! Scheme_Object *value; +! Scheme_Object *exn; +! Cmd_Info info; /* closure info */ +! +! info.data = data; +! info.env = env; +! +! scheme_set_param(scheme_config, MZCONFIG_ENV, +! (Scheme_Object *) env); +! /* +! * ensure all evaluations will be in current buffer namespace, +! * the second argument to scheme_eval_string isn't enough! +! */ +! value = _apply_thunk_catch_exceptions( +! scheme_make_closed_prim_w_arity(what, &info, "mzvim", 0, 0), +! &exn); + + if (!value) + { +--- 1076,1100 ---- + */ + + /* +! * Evaluate command with exception handling + */ + static int +! eval_with_exn_handling(void *data, Scheme_Closed_Prim *what, Scheme_Object **ret) + { +! Scheme_Object *value = NULL; +! Scheme_Object *exn = NULL; +! Scheme_Object *prim = NULL; +! +! MZ_GC_DECL_REG(3); +! MZ_GC_VAR_IN_REG(0, value); +! MZ_GC_VAR_IN_REG(1, exn); +! MZ_GC_VAR_IN_REG(2, prim); +! MZ_GC_REG(); +! +! prim = scheme_make_closed_prim_w_arity(what, data, "mzvim", 0, 0); +! MZ_GC_CHECK(); +! value = _apply_thunk_catch_exceptions(prim, &exn); +! MZ_GC_CHECK(); + + if (!value) + { +*************** +*** 930,938 **** + /* Got an exn? */ + if (value) + { +! scheme_display(value, curerr); /* Send to stderr-vim */ + do_flush(); + } + /* `raise' was called on some arbitrary value */ + return FAIL; + } +--- 1102,1112 ---- + /* Got an exn? */ + if (value) + { +! scheme_display(value, curerr); /* Send to stderr-vim */ +! MZ_GC_CHECK(); + do_flush(); + } ++ MZ_GC_UNREG(); + /* `raise' was called on some arbitrary value */ + return FAIL; + } +*************** +*** 941,949 **** +--- 1115,1127 ---- + *ret = value; + /* Print any result, as long as it's not a void */ + else if (!SCHEME_VOIDP(value)) ++ { + scheme_display(value, curout); /* Send to stdout-vim */ ++ MZ_GC_CHECK(); ++ } + + do_flush(); ++ MZ_GC_UNREG(); + return OK; + } + +*************** +*** 957,963 **** + range_start = eap->line1; + range_end = eap->line2; + +! return eval_in_namespace(data, what, get_vim_curr_buffer()->env, NULL); + } + + /* +--- 1135,1141 ---- + range_start = eap->line1; + range_end = eap->line2; + +! return eval_with_exn_handling(data, what, NULL); + } + + /* +*************** +*** 974,979 **** +--- 1152,1158 ---- + bp->buf = INVALID_BUFFER_VALUE; + buf->b_mzscheme_ref = NULL; + scheme_gc_ptr_ok(bp); ++ MZ_GC_CHECK(); + } + } + +*************** +*** 990,995 **** +--- 1169,1175 ---- + wp->win = INVALID_WINDOW_VALUE; + win->w_mzscheme_ref = NULL; + scheme_gc_ptr_ok(wp); ++ MZ_GC_CHECK(); + } + } + +*************** +*** 1014,1031 **** + } + } + +- /* eval MzScheme string */ +- void * +- mzvim_eval_string(char_u *str) +- { +- Scheme_Object *ret = NULL; +- if (mzscheme_init()) +- return FAIL; +- +- eval_in_namespace(str, do_eval, get_vim_curr_buffer()->env, &ret); +- return ret; +- } +- + /* + * apply MzScheme procedure with arguments, + * handling errors +--- 1194,1199 ---- +*************** +*** 1033,1075 **** + Scheme_Object * + mzvim_apply(Scheme_Object *proc, int argc, Scheme_Object **argv) + { +- Apply_Info data; +- Scheme_Object *ret = NULL; +- + if (mzscheme_init()) + return FAIL; + +! data.proc = proc; +! data.argc = argc; +! data.argv = argv; +! +! eval_in_namespace(&data, do_apply, get_vim_curr_buffer()->env, &ret); +! return ret; + } + + static Scheme_Object * + do_load(void *data, int noargc, Scheme_Object **noargv) + { +! Cmd_Info *info = (Cmd_Info *)data; +! Scheme_Object *result = scheme_void; +! Scheme_Object *expr; +! char_u *file = scheme_malloc_fail_ok( +! scheme_malloc_atomic, MAXPATHL + 1); +! Port_Info *pinfo = (Port_Info *)(info->data); + + /* make Vim expansion */ +! expand_env((char_u *)pinfo->name, file, MAXPATHL); +! /* scheme_load looks strange working with namespaces and error handling*/ + pinfo->port = scheme_open_input_file(file, "mzfile"); +! scheme_count_lines(pinfo->port); /* to get accurate read error location*/ + + /* Like REPL but print only last result */ + while (!SCHEME_EOFP(expr = scheme_read(pinfo->port))) +! result = scheme_eval(expr, info->env); + + /* errors will be caught in do_mzscheme_comamnd and ex_mzfile */ + scheme_close_input_port(pinfo->port); + pinfo->port = NULL; + return result; + } + +--- 1201,1265 ---- + Scheme_Object * + mzvim_apply(Scheme_Object *proc, int argc, Scheme_Object **argv) + { + if (mzscheme_init()) + return FAIL; ++ else ++ { ++ Apply_Info data = {NULL, 0, NULL}; ++ Scheme_Object *ret = NULL; + +! MZ_GC_DECL_REG(5); +! MZ_GC_VAR_IN_REG(0, ret); +! MZ_GC_VAR_IN_REG(1, data.proc); +! MZ_GC_ARRAY_VAR_IN_REG(2, data.argv, argc); +! MZ_GC_REG(); +! +! data.proc = proc; +! data.argc = argc; +! data.argv = argv; +! +! eval_with_exn_handling(&data, do_apply, &ret); +! MZ_GC_UNREG(); +! return ret; +! } + } + + static Scheme_Object * + do_load(void *data, int noargc, Scheme_Object **noargv) + { +! Scheme_Object *expr = NULL; +! Scheme_Object *result = NULL; +! char *file = NULL; +! Port_Info *pinfo = (Port_Info *)data; +! +! MZ_GC_DECL_REG(3); +! MZ_GC_VAR_IN_REG(0, expr); +! MZ_GC_VAR_IN_REG(1, result); +! MZ_GC_VAR_IN_REG(2, file); +! MZ_GC_REG(); +! +! file = (char *)scheme_malloc_fail_ok(scheme_malloc_atomic, MAXPATHL + 1); +! MZ_GC_CHECK(); + + /* make Vim expansion */ +! expand_env((char_u *)pinfo->name, (char_u *)file, MAXPATHL); + pinfo->port = scheme_open_input_file(file, "mzfile"); +! MZ_GC_CHECK(); +! scheme_count_lines(pinfo->port); /* to get accurate read error location*/ +! MZ_GC_CHECK(); + + /* Like REPL but print only last result */ + while (!SCHEME_EOFP(expr = scheme_read(pinfo->port))) +! { +! result = scheme_eval(expr, environment); +! MZ_GC_CHECK(); +! } + + /* errors will be caught in do_mzscheme_comamnd and ex_mzfile */ + scheme_close_input_port(pinfo->port); ++ MZ_GC_CHECK(); + pinfo->port = NULL; ++ MZ_GC_UNREG(); + return result; + } + +*************** +*** 1077,1089 **** + void + ex_mzfile(exarg_T *eap) + { +! Port_Info pinfo; + + pinfo.name = (char *)eap->arg; +- pinfo.port = NULL; + if (do_mzscheme_command(eap, &pinfo, do_load) != OK + && pinfo.port != NULL) /* looks like port was not closed */ + scheme_close_input_port(pinfo.port); + } + + +--- 1267,1286 ---- + void + ex_mzfile(exarg_T *eap) + { +! Port_Info pinfo = {NULL, NULL}; +! +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, pinfo.port); +! MZ_GC_REG(); + + pinfo.name = (char *)eap->arg; + if (do_mzscheme_command(eap, &pinfo, do_load) != OK + && pinfo.port != NULL) /* looks like port was not closed */ ++ { + scheme_close_input_port(pinfo.port); ++ MZ_GC_CHECK(); ++ } ++ MZ_GC_UNREG(); + } + + +*************** +*** 1103,1116 **** + "(with-handlers ([void (lambda (exn) (cons #f exn))]) " + "(cons #t (thunk))))"; + +! /* make sure we have a namespace with the standard syntax: */ +! Scheme_Env *env = (Scheme_Env *)scheme_make_namespace(0, NULL); +! add_vim_exn(env); +! +! exn_catching_apply = scheme_eval_string(e, env); +! exn_p = scheme_lookup_global(scheme_intern_symbol("exn?"), env); +! exn_message = scheme_lookup_global( +! scheme_intern_symbol("exn-message"), env); + } + } + +--- 1300,1311 ---- + "(with-handlers ([void (lambda (exn) (cons #f exn))]) " + "(cons #t (thunk))))"; + +! exn_catching_apply = scheme_eval_string(e, environment); +! MZ_GC_CHECK(); +! exn_p = scheme_builtin_value("exn?"); +! MZ_GC_CHECK(); +! exn_message = scheme_builtin_value("exn-message"); +! MZ_GC_CHECK(); + } + } + +*************** +*** 1124,1131 **** + { + Scheme_Object *v; + +- init_exn_catching_apply(); +- + v = _scheme_apply(exn_catching_apply, 1, &f); + /* v is a pair: (cons #t value) or (cons #f exn) */ + +--- 1319,1324 ---- +*************** +*** 1141,1148 **** + static Scheme_Object * + extract_exn_message(Scheme_Object *v) + { +- init_exn_catching_apply(); +- + if (SCHEME_TRUEP(_scheme_apply(exn_p, 1, &v))) + return _scheme_apply(exn_message, 1, &v); + else +--- 1334,1339 ---- +*************** +*** 1152,1167 **** + static Scheme_Object * + do_eval(void *s, int noargc, Scheme_Object **noargv) + { +! Cmd_Info *info = (Cmd_Info *)s; +! +! return scheme_eval_string_all((char *)(info->data), info->env, TRUE); + } + + static Scheme_Object * + do_apply(void *a, int noargc, Scheme_Object **noargv) + { +! Apply_Info *info = (Apply_Info *)(((Cmd_Info *)a)->data); +! + return scheme_apply(info->proc, info->argc, info->argv); + } + +--- 1343,1355 ---- + static Scheme_Object * + do_eval(void *s, int noargc, Scheme_Object **noargv) + { +! return scheme_eval_string_all((char *)s, environment, TRUE); + } + + static Scheme_Object * + do_apply(void *a, int noargc, Scheme_Object **noargv) + { +! Apply_Info *info = (Apply_Info *)a; + return scheme_apply(info->proc, info->argc, info->argv); + } + +*************** +*** 1219,1224 **** +--- 1407,1413 ---- + long length; + + buff = scheme_get_sized_string_output(curerr, &length); ++ MZ_GC_CHECK(); + if (length) + { + do_err_output(buff, length); +*************** +*** 1226,1242 **** + } + + buff = scheme_get_sized_string_output(curout, &length); + if (length) + do_output(buff, length); + } + +- static int +- mzscheme_io_init(void) +- { +- /* Nothing needed so far... */ +- return 0; +- } +- + /* + *======================================================================== + * 4. Implementation of the Vim Features for MzScheme +--- 1415,1425 ---- + } + + buff = scheme_get_sized_string_output(curout, &length); ++ MZ_GC_CHECK(); + if (length) + do_output(buff, length); + } + + /* + *======================================================================== + * 4. Implementation of the Vim Features for MzScheme +*************** +*** 1263,1284 **** + vim_eval(void *data, int argc, Scheme_Object **argv) + { + #ifdef FEAT_EVAL +! Vim_Prim *prim = (Vim_Prim *)data; +! char *expr; +! char *str; +! Scheme_Object *result; + +! expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); + +! str = (char *)eval_to_string((char_u *)expr, NULL, TRUE); + +! if (str == NULL) + raise_vim_exn(_("invalid expression")); + +! result = scheme_make_string(str); +! +! vim_free(str); + + return result; + #else + raise_vim_exn(_("expressions disabled at compile time")); +--- 1446,1475 ---- + vim_eval(void *data, int argc, Scheme_Object **argv) + { + #ifdef FEAT_EVAL +! Vim_Prim *prim = (Vim_Prim *)data; +! char *expr; +! Scheme_Object *result; +! /* hash table to store visited values to avoid infinite loops */ +! Scheme_Hash_Table *visited = NULL; +! typval_T *vim_result; +! +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, visited); +! MZ_GC_REG(); + +! visited = scheme_make_hash_table(SCHEME_hash_ptr); +! MZ_GC_CHECK(); + +! expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); +! vim_result = eval_expr((char_u *)expr, NULL); + +! if (vim_result == NULL) + raise_vim_exn(_("invalid expression")); + +! result = vim_to_mzscheme(vim_result, 1, visited); +! free_tv(vim_result); + ++ MZ_GC_UNREG(); + return result; + #else + raise_vim_exn(_("expressions disabled at compile time")); +*************** +*** 1318,1324 **** + Vim_Prim *prim = (Vim_Prim *)data; + char_u *name; + long value; +! char_u *strval; + int rc; + Scheme_Object *rval; + int opt_flags = 0; +--- 1509,1515 ---- + Vim_Prim *prim = (Vim_Prim *)data; + char_u *name; + long value; +! char *strval; + int rc; + Scheme_Object *rval; + int opt_flags = 0; +*************** +*** 1333,1338 **** +--- 1524,1530 ---- + { + MZ_REGISTER_STATIC(M_global); + M_global = scheme_intern_symbol("global"); ++ MZ_GC_CHECK(); + } + + if (argv[1] == M_global) +*************** +*** 1354,1360 **** + scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); + } + +! rc = get_option_value(name, &value, &strval, opt_flags); + curbuf = save_curb; + curwin = save_curw; + +--- 1546,1552 ---- + scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv); + } + +! rc = get_option_value(name, &value, (char_u **)&strval, opt_flags); + curbuf = save_curb; + curwin = save_curw; + +*************** +*** 1364,1369 **** +--- 1556,1562 ---- + return scheme_make_integer_value(value); + case 0: + rval = scheme_make_string(strval); ++ MZ_GC_CHECK(); + vim_free(strval); + return rval; + case -1: +*************** +*** 1393,1398 **** +--- 1586,1592 ---- + { + MZ_REGISTER_STATIC(M_global); + M_global = scheme_intern_symbol("global"); ++ MZ_GC_CHECK(); + } + + if (argv[1] == M_global) +*************** +*** 1463,1469 **** +--- 1657,1666 ---- + + for (w = firstwin; w != NULL; w = w->w_next) + if (w->w_buffer == buf->buf) ++ { + list = scheme_make_pair(window_new(w), list); ++ MZ_GC_CHECK(); ++ } + + return list; + } +*************** +*** 1471,1477 **** + static Scheme_Object * + window_new(win_T *win) + { +! vim_mz_window *self; + + /* We need to handle deletion of windows underneath us. + * If we add a "w_mzscheme_ref" field to the win_T structure, +--- 1668,1678 ---- + static Scheme_Object * + window_new(win_T *win) + { +! vim_mz_window *self = NULL; +! +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, self); +! MZ_GC_REG(); + + /* We need to handle deletion of windows underneath us. + * If we add a "w_mzscheme_ref" field to the win_T structure, +*************** +*** 1485,1497 **** + return win->w_mzscheme_ref; + + self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window)); +- + vim_memset(self, 0, sizeof(vim_mz_window)); + scheme_dont_gc_ptr(self); /* because win isn't visible to GC */ + win->w_mzscheme_ref = self; + self->win = win; +! self->tag = mz_window_type; + + return (Scheme_Object *)(self); + } + +--- 1686,1699 ---- + return win->w_mzscheme_ref; + + self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window)); + vim_memset(self, 0, sizeof(vim_mz_window)); + scheme_dont_gc_ptr(self); /* because win isn't visible to GC */ ++ MZ_GC_CHECK(); + win->w_mzscheme_ref = self; + self->win = win; +! self->so.type = mz_window_type; + ++ MZ_GC_UNREG(); + return (Scheme_Object *)(self); + } + +*************** +*** 1660,1666 **** + /* + *=========================================================================== + * 6. Vim Buffer-related Manipulation Functions +- * Note that each buffer should have its own private namespace. + *=========================================================================== + */ + +--- 1862,1867 ---- +*************** +*** 1669,1682 **** + mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv) + { + Vim_Prim *prim = (Vim_Prim *)data; +! char *fname; + int num = 0; + Scheme_Object *onum; + + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +! fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); + /* TODO make open existing file */ + num = buflist_add(fname, BLN_LISTED | BLN_CURBUF); + +--- 1870,1883 ---- + mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv) + { + Vim_Prim *prim = (Vim_Prim *)data; +! char_u *fname; + int num = 0; + Scheme_Object *onum; + + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +! fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); + /* TODO make open existing file */ + num = buflist_add(fname, BLN_LISTED | BLN_CURBUF); + +*************** +*** 1712,1718 **** + buf_T *buf; + char_u *fname; + +! fname = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); + + for (buf = firstbuf; buf; buf = buf->b_next) + if (buf->b_ffname == NULL || buf->b_sfname == NULL) +--- 1913,1919 ---- + buf_T *buf; + char_u *fname; + +! fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0)); + + for (buf = firstbuf; buf; buf = buf->b_next) + if (buf->b_ffname == NULL || buf->b_sfname == NULL) +*************** +*** 1783,1789 **** + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf = get_buffer_arg(prim->name, 0, argc, argv); + +! return scheme_make_string(buf->buf->b_ffname); + } + + /* (curr-buff) */ +--- 1984,1990 ---- + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf = get_buffer_arg(prim->name, 0, argc, argv); + +! return scheme_make_string((char *)buf->buf->b_ffname); + } + + /* (curr-buff) */ +*************** +*** 1796,1802 **** + static Scheme_Object * + buffer_new(buf_T *buf) + { +! vim_mz_buffer *self; + + /* We need to handle deletion of buffers underneath us. + * If we add a "b_mzscheme_ref" field to the buf_T structure, +--- 1997,2007 ---- + static Scheme_Object * + buffer_new(buf_T *buf) + { +! vim_mz_buffer *self = NULL; +! +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, self); +! MZ_GC_REG(); + + /* We need to handle deletion of buffers underneath us. + * If we add a "b_mzscheme_ref" field to the buf_T structure, +*************** +*** 1806,1820 **** + return buf->b_mzscheme_ref; + + self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer)); +- + vim_memset(self, 0, sizeof(vim_mz_buffer)); +! scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */ + buf->b_mzscheme_ref = self; + self->buf = buf; +! self->tag = mz_buffer_type; +! +! mzscheme_interface_init(self); /* Set up namespace */ + + return (Scheme_Object *)(self); + } + +--- 2011,2024 ---- + return buf->b_mzscheme_ref; + + self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer)); + vim_memset(self, 0, sizeof(vim_mz_buffer)); +! scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */ +! MZ_GC_CHECK(); + buf->b_mzscheme_ref = self; + self->buf = buf; +! self->so.type = mz_buffer_type; + ++ MZ_GC_UNREG(); + return (Scheme_Object *)(self); + } + +*************** +*** 1845,1858 **** + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf; + int linenr; +! char *line; + + buf = get_buffer_arg(prim->name, 1, argc, argv); + linenr = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); + line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE); + + raise_if_error(); +! return scheme_make_string(line); + } + + +--- 2049,2062 ---- + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf; + int linenr; +! char_u *line; + + buf = get_buffer_arg(prim->name, 1, argc, argv); + linenr = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0)); + line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE); + + raise_if_error(); +! return scheme_make_string((char *)line); + } + + +*************** +*** 1869,1875 **** + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf; + int i, hi, lo, n; +! Scheme_Object *list; + + buf = get_buffer_arg(prim->name, 2, argc, argv); + list = scheme_null; +--- 2073,2083 ---- + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf; + int i, hi, lo, n; +! Scheme_Object *list = NULL; +! +! MZ_GC_DECL_REG(1); +! MZ_GC_VAR_IN_REG(0, list); +! MZ_GC_REG(); + + buf = get_buffer_arg(prim->name, 2, argc, argv); + list = scheme_null; +*************** +*** 1897,1904 **** + + /* Set the list item */ + list = scheme_make_pair(str, list); + } +! + return list; + } + +--- 2105,2113 ---- + + /* Set the list item */ + list = scheme_make_pair(str, list); ++ MZ_GC_CHECK(); + } +! MZ_GC_UNREG(); + return list; + } + +*************** +*** 1925,1935 **** + */ + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf; +! Scheme_Object *line; + char *save; +- buf_T *savebuf; + int n; + + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +--- 2134,2147 ---- + */ + Vim_Prim *prim = (Vim_Prim *)data; + vim_mz_buffer *buf; +! Scheme_Object *line = NULL; + char *save; + int n; + ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, line); ++ MZ_GC_REG(); ++ + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +*************** +*** 1943,1949 **** + + if (SCHEME_FALSEP(line)) + { +! savebuf = curbuf; + curbuf = buf->buf; + + if (u_savedel((linenr_T)n, 1L) == FAIL) +--- 2155,2162 ---- + + if (SCHEME_FALSEP(line)) + { +! buf_T *savebuf = curbuf; +! + curbuf = buf->buf; + + if (u_savedel((linenr_T)n, 1L) == FAIL) +*************** +*** 1962,1994 **** + + curbuf = savebuf; + + raise_if_error(); + return scheme_void; + } + +! /* Otherwise it's a line */ +! save = string_to_line(line); +! savebuf = curbuf; + +! curbuf = buf->buf; + +- if (u_savesub((linenr_T)n) == FAIL) +- { +- curbuf = savebuf; +- raise_vim_exn(_("cannot save undo information")); +- } +- else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL) +- { + curbuf = savebuf; +- raise_vim_exn(_("cannot replace line")); +- } +- else +- changed_bytes((linenr_T)n, 0); + +! curbuf = savebuf; + +! raise_if_error(); +! return scheme_void; + } + + /* +--- 2175,2230 ---- + + curbuf = savebuf; + ++ MZ_GC_UNREG(); + raise_if_error(); + return scheme_void; + } ++ else ++ { ++ /* Otherwise it's a line */ ++ buf_T *savebuf = curbuf; + +! save = string_to_line(line); + +! curbuf = buf->buf; +! +! if (u_savesub((linenr_T)n) == FAIL) +! { +! curbuf = savebuf; +! vim_free(save); +! raise_vim_exn(_("cannot save undo information")); +! } +! else if (ml_replace((linenr_T)n, (char_u *)save, TRUE) == FAIL) +! { +! curbuf = savebuf; +! vim_free(save); +! raise_vim_exn(_("cannot replace line")); +! } +! else +! { +! vim_free(save); +! changed_bytes((linenr_T)n, 0); +! } + + curbuf = savebuf; + +! /* Check that the cursor is not beyond the end of the line now. */ +! if (buf->buf == curwin->w_buffer) +! check_cursor_col(); + +! MZ_GC_UNREG(); +! raise_if_error(); +! return scheme_void; +! } +! } +! +! static void +! free_array(char **array) +! { +! char **curr = array; +! while (*curr != NULL) +! vim_free(*curr++); +! vim_free(array); + } + + /* +*************** +*** 2013,2027 **** + * 3. Anything else - this is an error. + */ + Vim_Prim *prim = (Vim_Prim *)data; +! vim_mz_buffer *buf; +! Scheme_Object *line_list; +! Scheme_Object *line; +! Scheme_Object *rest; +! char **array; +! buf_T *savebuf; + int i, old_len, new_len, hi, lo; + long extra; + + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +--- 2249,2263 ---- + * 3. Anything else - this is an error. + */ + Vim_Prim *prim = (Vim_Prim *)data; +! vim_mz_buffer *buf = NULL; +! Scheme_Object *line_list = NULL; + int i, old_len, new_len, hi, lo; + long extra; + ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, line_list); ++ MZ_GC_REG(); ++ + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +*************** +*** 2047,2053 **** + + if (SCHEME_FALSEP(line_list) || SCHEME_NULLP(line_list)) + { +! savebuf = curbuf; + curbuf = buf->buf; + + if (u_savedel((linenr_T)lo, (long)old_len) == FAIL) +--- 2283,2289 ---- + + if (SCHEME_FALSEP(line_list) || SCHEME_NULLP(line_list)) + { +! buf_T *savebuf = curbuf; + curbuf = buf->buf; + + if (u_savedel((linenr_T)lo, (long)old_len) == FAIL) +*************** +*** 2070,2167 **** + + curbuf = savebuf; + + raise_if_error(); + return scheme_void; + } + +! /* List */ +! new_len = scheme_proper_list_length(line_list); +! if (new_len < 0) /* improper or cyclic list */ +! scheme_wrong_type(prim->name, "proper list", +! 2, argc, argv); + +! /* Using MzScheme allocator, so we don't need to free this and +! * can safely keep pointers to GC collected strings +! */ +! array = (char **)scheme_malloc_fail_ok(scheme_malloc, +! (unsigned)(new_len * sizeof(char *))); + +! rest = line_list; +! for (i = 0; i < new_len; ++i) +! { +! line = SCHEME_CAR(rest); +! rest = SCHEME_CDR(rest); +! if (!SCHEME_STRINGP(line)) +! scheme_wrong_type(prim->name, "string-list", 2, argc, argv); +! array[i] = string_to_line(line); +! } + +! savebuf = curbuf; +! curbuf = buf->buf; + +! if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) +! { +! curbuf = savebuf; +! raise_vim_exn(_("cannot save undo information")); +! } + +! /* +! * If the size of the range is reducing (ie, new_len < old_len) we +! * need to delete some old_len. We do this at the start, by +! * repeatedly deleting line "lo". +! */ +! for (i = 0; i < old_len - new_len; ++i) +! { +! if (ml_delete((linenr_T)lo, FALSE) == FAIL) +! { +! curbuf = savebuf; +! raise_vim_exn(_("cannot delete line")); +! } +! extra--; +! } + +! /* +! * For as long as possible, replace the existing old_len with the +! * new old_len. This is a more efficient operation, as it requires +! * less memory allocation and freeing. +! */ +! for (i = 0; i < old_len && i < new_len; i++) +! if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE) == FAIL) +! { +! curbuf = savebuf; +! raise_vim_exn(_("cannot replace line")); +! } + +! /* +! * Now we may need to insert the remaining new_len. We don't need to +! * free the string passed back because MzScheme has control of that +! * memory. +! */ +! while (i < new_len) +! { +! if (ml_append((linenr_T)(lo + i - 1), +! (char_u *)array[i], 0, FALSE) == FAIL) +! { +! curbuf = savebuf; +! raise_vim_exn(_("cannot insert line")); + } +- ++i; +- ++extra; +- } + +! /* +! * Adjust marks. Invalidate any which lie in the +! * changed range, and move any in the remainder of the buffer. +! */ +! mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), (long)MAXLNUM, (long)extra); +! changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); + +! if (buf->buf == curwin->w_buffer) +! mz_fix_cursor(lo, hi, extra); +! curbuf = savebuf; + +! raise_if_error(); +! return scheme_void; + } + + /* +--- 2306,2426 ---- + + curbuf = savebuf; + ++ MZ_GC_UNREG(); + raise_if_error(); + return scheme_void; + } ++ else ++ { ++ buf_T *savebuf = curbuf; + +! /* List */ +! new_len = scheme_proper_list_length(line_list); +! MZ_GC_CHECK(); +! if (new_len < 0) /* improper or cyclic list */ +! scheme_wrong_type(prim->name, "proper list", +! 2, argc, argv); +! else +! { +! char **array = NULL; +! Scheme_Object *line = NULL; +! Scheme_Object *rest = NULL; +! +! MZ_GC_DECL_REG(2); +! MZ_GC_VAR_IN_REG(0, line); +! MZ_GC_VAR_IN_REG(1, rest); +! MZ_GC_REG(); + +! array = (char **)alloc(new_len * sizeof(char *)); +! vim_memset(array, 0, new_len * sizeof(char *)); + +! rest = line_list; +! for (i = 0; i < new_len; ++i) +! { +! line = SCHEME_CAR(rest); +! rest = SCHEME_CDR(rest); +! if (!SCHEME_STRINGP(line)) +! { +! free_array(array); +! scheme_wrong_type(prim->name, "string-list", 2, argc, argv); +! } +! array[i] = string_to_line(line); +! } + +! curbuf = buf->buf; + +! if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL) +! { +! curbuf = savebuf; +! free_array(array); +! raise_vim_exn(_("cannot save undo information")); +! } + +! /* +! * If the size of the range is reducing (ie, new_len < old_len) we +! * need to delete some old_len. We do this at the start, by +! * repeatedly deleting line "lo". +! */ +! for (i = 0; i < old_len - new_len; ++i) +! { +! if (ml_delete((linenr_T)lo, FALSE) == FAIL) +! { +! curbuf = savebuf; +! free_array(array); +! raise_vim_exn(_("cannot delete line")); +! } +! extra--; +! } + +! /* +! * For as long as possible, replace the existing old_len with the +! * new old_len. This is a more efficient operation, as it requires +! * less memory allocation and freeing. +! */ +! for (i = 0; i < old_len && i < new_len; i++) +! if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], TRUE) == FAIL) +! { +! curbuf = savebuf; +! free_array(array); +! raise_vim_exn(_("cannot replace line")); +! } + +! /* +! * Now we may need to insert the remaining new_len. We don't need to +! * free the string passed back because MzScheme has control of that +! * memory. +! */ +! while (i < new_len) +! { +! if (ml_append((linenr_T)(lo + i - 1), +! (char_u *)array[i], 0, FALSE) == FAIL) +! { +! curbuf = savebuf; +! free_array(array); +! raise_vim_exn(_("cannot insert line")); +! } +! ++i; +! ++extra; +! } +! MZ_GC_UNREG(); +! free_array(array); + } + +! /* +! * Adjust marks. Invalidate any which lie in the +! * changed range, and move any in the remainder of the buffer. +! */ +! mark_adjust((linenr_T)lo, (linenr_T)(hi - 1), (long)MAXLNUM, (long)extra); +! changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra); + +! if (buf->buf == curwin->w_buffer) +! mz_fix_cursor(lo, hi, extra); +! curbuf = savebuf; + +! MZ_GC_UNREG(); +! raise_if_error(); +! return scheme_void; +! } + } + + /* +*************** +*** 2179,2193 **** + insert_buffer_line_list(void *data, int argc, Scheme_Object **argv) + { + Vim_Prim *prim = (Vim_Prim *)data; +! vim_mz_buffer *buf; +! Scheme_Object *list; +! Scheme_Object *line; +! Scheme_Object *rest; +! char **array; +! char *str; +! buf_T *savebuf; + int i, n, size; + + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +--- 2438,2452 ---- + insert_buffer_line_list(void *data, int argc, Scheme_Object **argv) + { + Vim_Prim *prim = (Vim_Prim *)data; +! vim_mz_buffer *buf = NULL; +! Scheme_Object *list = NULL; +! char *str = NULL; + int i, n, size; + ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, list); ++ MZ_GC_REG(); ++ + #ifdef HAVE_SANDBOX + sandbox_check(); + #endif +*************** +*** 2206,2294 **** + check_line_range(n, buf->buf); + if (SCHEME_STRINGP(list)) + { +! str = string_to_line(list); + +! savebuf = curbuf; + curbuf = buf->buf; + + if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL) + { + curbuf = savebuf; + raise_vim_exn(_("cannot save undo information")); + } + else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL) + { + curbuf = savebuf; + raise_vim_exn(_("cannot insert line")); + } + else + appended_lines_mark((linenr_T)n, 1L); + + curbuf = savebuf; + update_screen(VALID); + + raise_if_error(); + return scheme_void; + } + + /* List */ + size = scheme_proper_list_length(list); + if (size < 0) /* improper or cyclic list */ + scheme_wrong_type(prim->name, "proper list", + 2, argc, argv); +! +! /* Using MzScheme allocator, so we don't need to free this and +! * can safely keep pointers to GC collected strings +! */ +! array = (char **)scheme_malloc_fail_ok( +! scheme_malloc, (unsigned)(size * sizeof(char *))); +! +! rest = list; +! for (i = 0; i < size; ++i) + { +! line = SCHEME_CAR(rest); +! rest = SCHEME_CDR(rest); +! array[i] = string_to_line(line); +! } + +! savebuf = curbuf; +! curbuf = buf->buf; + +! if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL) +! { +! curbuf = savebuf; +! raise_vim_exn(_("cannot save undo information")); +! } +! else +! { + for (i = 0; i < size; ++i) +! if (ml_append((linenr_T)(n + i), (char_u *)array[i], +! 0, FALSE) == FAIL) +! { +! curbuf = savebuf; +! raise_vim_exn(_("cannot insert line")); +! } + +! if (i > 0) +! appended_lines_mark((linenr_T)n, (long)i); +! } + +! curbuf = savebuf; +! update_screen(VALID); + + raise_if_error(); + return scheme_void; + } + +- /* (get-buff-namespace [buffer]) */ +- static Scheme_Object * +- get_buffer_namespace(void *data, int argc, Scheme_Object **argv) +- { +- Vim_Prim *prim = (Vim_Prim *)data; +- +- return (Scheme_Object *)get_buffer_arg(prim->name, 0, argc, argv)->env; +- } +- + /* + * Predicates + */ +--- 2465,2563 ---- + check_line_range(n, buf->buf); + if (SCHEME_STRINGP(list)) + { +! buf_T *savebuf = curbuf; + +! str = string_to_line(list); + curbuf = buf->buf; + + if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL) + { + curbuf = savebuf; ++ vim_free(str); + raise_vim_exn(_("cannot save undo information")); + } + else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL) + { + curbuf = savebuf; ++ vim_free(str); + raise_vim_exn(_("cannot insert line")); + } + else ++ { ++ vim_free(str); + appended_lines_mark((linenr_T)n, 1L); ++ } + + curbuf = savebuf; + update_screen(VALID); + ++ MZ_GC_UNREG(); + raise_if_error(); + return scheme_void; + } + + /* List */ + size = scheme_proper_list_length(list); ++ MZ_GC_CHECK(); + if (size < 0) /* improper or cyclic list */ + scheme_wrong_type(prim->name, "proper list", + 2, argc, argv); +! else + { +! Scheme_Object *line = NULL; +! Scheme_Object *rest = NULL; +! char **array; +! buf_T *savebuf = curbuf; +! +! MZ_GC_DECL_REG(2); +! MZ_GC_VAR_IN_REG(0, line); +! MZ_GC_VAR_IN_REG(1, rest); +! MZ_GC_REG(); + +! array = (char **)alloc(size * sizeof(char *)); +! vim_memset(array, 0, size * sizeof(char *)); + +! rest = list; + for (i = 0; i < size; ++i) +! { +! line = SCHEME_CAR(rest); +! rest = SCHEME_CDR(rest); +! array[i] = string_to_line(line); +! } + +! curbuf = buf->buf; + +! if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL) +! { +! curbuf = savebuf; +! free_array(array); +! raise_vim_exn(_("cannot save undo information")); +! } +! else +! { +! for (i = 0; i < size; ++i) +! if (ml_append((linenr_T)(n + i), (char_u *)array[i], +! 0, FALSE) == FAIL) +! { +! curbuf = savebuf; +! free_array(array); +! raise_vim_exn(_("cannot insert line")); +! } +! +! if (i > 0) +! appended_lines_mark((linenr_T)n, (long)i); +! } +! free_array(array); +! MZ_GC_UNREG(); +! curbuf = savebuf; +! update_screen(VALID); +! } + ++ MZ_GC_UNREG(); + raise_if_error(); + return scheme_void; + } + + /* + * Predicates + */ +*************** +*** 2343,2383 **** + /* + * Convert an MzScheme string into a Vim line. + * +! * The result is in allocated memory. All internal nulls are replaced by +! * newline characters. It is an error for the string to contain newline +! * characters. + * + */ + static char * + string_to_line(Scheme_Object *obj) + { +! char *str; + long len; + int i; + +! str = scheme_display_to_string(obj, &len); + + /* Error checking: String must not contain newlines, as we + * are replacing a single line, and we must replace it with + * a single line. + */ +! if (memchr(str, '\n', len)) + scheme_signal_error(_("string cannot contain newlines")); + + /* Create a copy of the string, with internal nulls replaced by + * newline characters, as is the vim convention. + */ + for (i = 0; i < len; ++i) + { +! if (str[i] == '\0') +! str[i] = '\n'; + } + +! str[i] = '\0'; + +! return str; + } + + /* + * Check to see whether a Vim error has been reported, or a keyboard + * interrupt (from vim --> got_int) has been detected. +--- 2612,2784 ---- + /* + * Convert an MzScheme string into a Vim line. + * +! * All internal nulls are replaced by newline characters. +! * It is an error for the string to contain newline characters. + * ++ * Returns pointer to Vim allocated memory + */ + static char * + string_to_line(Scheme_Object *obj) + { +! char *scheme_str = NULL; +! char *vim_str = NULL; + long len; + int i; + +! scheme_str = scheme_display_to_string(obj, &len); + + /* Error checking: String must not contain newlines, as we + * are replacing a single line, and we must replace it with + * a single line. + */ +! if (memchr(scheme_str, '\n', len)) + scheme_signal_error(_("string cannot contain newlines")); + ++ vim_str = (char *)alloc(len + 1); ++ + /* Create a copy of the string, with internal nulls replaced by + * newline characters, as is the vim convention. + */ + for (i = 0; i < len; ++i) + { +! if (scheme_str[i] == '\0') +! vim_str[i] = '\n'; +! else +! vim_str[i] = scheme_str[i]; + } + +! vim_str[i] = '\0'; + +! MZ_GC_CHECK(); +! return vim_str; + } + ++ #ifdef FEAT_EVAL ++ /* ++ * Convert Vim value into MzScheme, adopted from if_python.c ++ */ ++ static Scheme_Object * ++ vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited) ++ { ++ Scheme_Object *result = NULL; ++ int new_value = TRUE; ++ ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, result); ++ MZ_GC_REG(); ++ ++ /* Avoid infinite recursion */ ++ if (depth > 100) ++ { ++ MZ_GC_UNREG(); ++ return scheme_void; ++ } ++ ++ /* Check if we run into a recursive loop. The item must be in visited ++ * then and we can use it again. ++ */ ++ result = scheme_hash_get(visited, (Scheme_Object *)vim_value); ++ MZ_GC_CHECK(); ++ if (result != NULL) /* found, do nothing */ ++ new_value = FALSE; ++ else if (vim_value->v_type == VAR_STRING) ++ { ++ result = scheme_make_string((char *)vim_value->vval.v_string); ++ MZ_GC_CHECK(); ++ } ++ else if (vim_value->v_type == VAR_NUMBER) ++ { ++ result = scheme_make_integer((long)vim_value->vval.v_number); ++ MZ_GC_CHECK(); ++ } ++ # ifdef FEAT_FLOAT ++ else if (vim_value->v_type == VAR_FLOAT) ++ { ++ result = scheme_make_double((double)vim_value->vval.v_float); ++ MZ_GC_CHECK(); ++ } ++ # endif ++ else if (vim_value->v_type == VAR_LIST) ++ { ++ list_T *list = vim_value->vval.v_list; ++ listitem_T *curr; ++ ++ if (list == NULL || list->lv_first == NULL) ++ result = scheme_null; ++ else ++ { ++ Scheme_Object *obj = NULL; ++ ++ MZ_GC_DECL_REG(1); ++ MZ_GC_VAR_IN_REG(0, obj); ++ MZ_GC_REG(); ++ ++ curr = list->lv_last; ++ obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited); ++ result = scheme_make_pair(obj, scheme_null); ++ MZ_GC_CHECK(); ++ ++ while (curr != list->lv_first) ++ { ++ curr = curr->li_prev; ++ obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited); ++ result = scheme_make_pair(obj, result); ++ MZ_GC_CHECK(); ++ } ++ } ++ MZ_GC_UNREG(); ++ } ++ else if (vim_value->v_type == VAR_DICT) ++ { ++ Scheme_Object *key = NULL; ++ Scheme_Object *obj = NULL; ++ ++ MZ_GC_DECL_REG(2); ++ MZ_GC_VAR_IN_REG(0, key); ++ MZ_GC_VAR_IN_REG(1, obj); ++ MZ_GC_REG(); ++ ++ result = (Scheme_Object *)scheme_make_hash_table(SCHEME_hash_ptr); ++ MZ_GC_CHECK(); ++ if (vim_value->vval.v_dict != NULL) ++ { ++ hashtab_T *ht = &vim_value->vval.v_dict->dv_hashtab; ++ long_u todo = ht->ht_used; ++ hashitem_T *hi; ++ dictitem_T *di; ++ ++ for (hi = ht->ht_array; todo > 0; ++hi) ++ { ++ if (!HASHITEM_EMPTY(hi)) ++ { ++ --todo; ++ ++ di = dict_lookup(hi); ++ obj = vim_to_mzscheme(&di->di_tv, depth + 1, visited); ++ key = scheme_make_string((char *)hi->hi_key); ++ MZ_GC_CHECK(); ++ scheme_hash_set((Scheme_Hash_Table *)result, key, obj); ++ MZ_GC_CHECK(); ++ } ++ } ++ } ++ MZ_GC_UNREG(); ++ } ++ else ++ { ++ result = scheme_void; ++ new_value = FALSE; ++ } ++ if (new_value) ++ { ++ scheme_hash_set(visited, (Scheme_Object *)vim_value, result); ++ MZ_GC_CHECK(); ++ } ++ MZ_GC_UNREG(); ++ return result; ++ } ++ #endif ++ + /* + * Check to see whether a Vim error has been reported, or a keyboard + * interrupt (from vim --> got_int) has been detected. +*************** +*** 2392,2441 **** + * register Scheme exn:vim + */ + static void +! register_vim_exn(Scheme_Env *env) + { +! Scheme_Object *exn_name = scheme_intern_symbol("exn:vim"); + + if (vim_exn == NULL) + vim_exn = scheme_make_struct_type(exn_name, +! scheme_builtin_value("struct:exn"), NULL, 0, 0, NULL, NULL + #if MZSCHEME_VERSION_MAJOR >= 299 + , NULL + #endif + ); + +- if (vim_exn_values == NULL) +- { +- int nc = 0; + +! Scheme_Object **exn_names = scheme_make_struct_names( +! exn_name, scheme_null, 0, &nc); +! Scheme_Object **exn_values = scheme_make_struct_values( +! vim_exn, exn_names, nc, 0); +! +! vim_exn_names = scheme_make_vector(nc, scheme_false); +! vim_exn_values = scheme_make_vector(nc, scheme_false); +! /* remember names and values */ +! mch_memmove(SCHEME_VEC_ELS(vim_exn_names), exn_names, +! nc * sizeof(Scheme_Object *)); +! mch_memmove(SCHEME_VEC_ELS(vim_exn_values), exn_values, +! nc * sizeof(Scheme_Object *)); + } +! +! add_vim_exn(env); +! } +! +! /* +! * Add stuff of exn:vim to env +! */ +! static void +! add_vim_exn(Scheme_Env *env) +! { +! int i; +! +! for (i = 0; i < SCHEME_VEC_SIZE(vim_exn_values); i++) +! scheme_add_global_symbol(SCHEME_VEC_ELS(vim_exn_names)[i], +! SCHEME_VEC_ELS(vim_exn_values)[i], env); + } + + /* +--- 2793,2851 ---- + * register Scheme exn:vim + */ + static void +! register_vim_exn(void) + { +! int nc = 0; +! int i; +! Scheme_Object *struct_exn = NULL; +! Scheme_Object *exn_name = NULL; +! +! MZ_GC_DECL_REG(2); +! MZ_GC_VAR_IN_REG(0, struct_exn); +! MZ_GC_VAR_IN_REG(1, exn_name); +! MZ_GC_REG(); +! +! exn_name = scheme_intern_symbol("exn:vim"); +! MZ_GC_CHECK(); +! struct_exn = scheme_builtin_value("struct:exn"); +! MZ_GC_CHECK(); + + if (vim_exn == NULL) + vim_exn = scheme_make_struct_type(exn_name, +! struct_exn, NULL, 0, 0, NULL, NULL + #if MZSCHEME_VERSION_MAJOR >= 299 + , NULL + #endif + ); + + +! { +! Scheme_Object **tmp = NULL; +! Scheme_Object *exn_names[5] = {NULL, NULL, NULL, NULL, NULL}; +! Scheme_Object *exn_values[5] = {NULL, NULL, NULL, NULL, NULL}; +! MZ_GC_DECL_REG(6); +! MZ_GC_ARRAY_VAR_IN_REG(0, exn_names, 5); +! MZ_GC_ARRAY_VAR_IN_REG(3, exn_values, 5); +! MZ_GC_REG(); +! +! tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc); +! assert(nc <= 5); +! mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *)); +! MZ_GC_CHECK(); +! +! tmp = scheme_make_struct_values(vim_exn, exn_names, nc, 0); +! mch_memmove(exn_values, tmp, nc * sizeof(Scheme_Object *)); +! MZ_GC_CHECK(); +! +! for (i = 0; i < nc; i++) +! { +! scheme_add_global_symbol(exn_names[i], +! exn_values[i], environment); +! MZ_GC_CHECK(); +! } +! MZ_GC_UNREG(); + } +! MZ_GC_UNREG(); + } + + /* +*************** +*** 2444,2469 **** + void + raise_vim_exn(const char *add_info) + { +! Scheme_Object *argv[2]; +! char_u *fmt = _("Vim error: ~a"); + + if (add_info != NULL) + { +! Scheme_Object *info = scheme_make_string(add_info); +! argv[0] = scheme_byte_string_to_char_string(scheme_make_string( +! scheme_format(fmt, strlen(fmt), 1, &info, NULL))); + SCHEME_SET_IMMUTABLE(argv[0]); + } + else + argv[0] = scheme_make_string(_("Vim error")); + + #if MZSCHEME_VERSION_MAJOR < 360 + argv[1] = scheme_current_continuation_marks(); + #else + argv[1] = scheme_current_continuation_marks(NULL); + #endif + +! scheme_raise(scheme_make_struct_instance(vim_exn, 2, argv)); + } + + void +--- 2854,2907 ---- + void + raise_vim_exn(const char *add_info) + { +! char *fmt = _("Vim error: ~a"); +! Scheme_Object *argv[2] = {NULL, NULL}; +! Scheme_Object *exn = NULL; +! +! MZ_GC_DECL_REG(4); +! MZ_GC_ARRAY_VAR_IN_REG(0, argv, 2); +! MZ_GC_VAR_IN_REG(3, exn); +! MZ_GC_REG(); + + if (add_info != NULL) + { +! char *c_string = NULL; +! Scheme_Object *byte_string = NULL; +! Scheme_Object *info = NULL; +! +! MZ_GC_DECL_REG(3); +! MZ_GC_VAR_IN_REG(0, c_string); +! MZ_GC_VAR_IN_REG(1, byte_string); +! MZ_GC_VAR_IN_REG(2, info); +! MZ_GC_REG(); +! +! info = scheme_make_string(add_info); +! MZ_GC_CHECK(); +! c_string = scheme_format(fmt, STRLEN(fmt), 1, &info, NULL); +! MZ_GC_CHECK(); +! byte_string = scheme_make_string(c_string); +! MZ_GC_CHECK(); +! argv[0] = scheme_byte_string_to_char_string(byte_string); +! MZ_GC_CHECK(); + SCHEME_SET_IMMUTABLE(argv[0]); ++ MZ_GC_UNREG(); + } + else + argv[0] = scheme_make_string(_("Vim error")); ++ MZ_GC_CHECK(); + + #if MZSCHEME_VERSION_MAJOR < 360 + argv[1] = scheme_current_continuation_marks(); ++ MZ_GC_CHECK(); + #else + argv[1] = scheme_current_continuation_marks(NULL); ++ MZ_GC_CHECK(); + #endif + +! exn = scheme_make_struct_instance(vim_exn, 2, argv); +! MZ_GC_CHECK(); +! scheme_raise(exn); +! MZ_GC_UNREG(); + } + + void +*************** +*** 2570,2575 **** +--- 3008,3015 ---- + curwin->w_cursor.lnum = lo; + check_cursor(); + } ++ else ++ check_cursor_col(); + changed_cline_bef_curs(); + } + invalidate_botline(); +*************** +*** 2595,2601 **** + {mzscheme_open_buffer, "open-buff", 1, 1}, + {get_buffer_by_name, "get-buff-by-name", 1, 1}, + {get_buffer_by_num, "get-buff-by-num", 1, 1}, +- {get_buffer_namespace, "get-buff-namespace", 0, 1}, + /* + * Window-related commands + */ +--- 3035,3040 ---- +*************** +*** 2653,2675 **** + } + + static void +! make_modules(Scheme_Env *env) + { +! int i; +! Scheme_Env *mod; +! +! mod = scheme_primitive_module(scheme_intern_symbol("vimext"), env); + /* all prims made closed so they can access their own names */ +! for (i = 0; i < sizeof(prims)/sizeof(prims[0]); i++) + { + Vim_Prim *prim = prims + i; +! scheme_add_global(prim->name, +! scheme_make_closed_prim_w_arity(prim->prim, prim, prim->name, +! prim->mina, prim->maxa), +! mod); + } +- scheme_add_global("global-namespace", (Scheme_Object *)environment, mod); + scheme_finish_primitive_module(mod); + } + + #ifdef HAVE_SANDBOX +--- 3092,3126 ---- + } + + static void +! make_modules() + { +! int i; +! Scheme_Env *mod = NULL; +! Scheme_Object *vimext_symbol = NULL; +! Scheme_Object *closed_prim = NULL; +! +! MZ_GC_DECL_REG(3); +! MZ_GC_VAR_IN_REG(0, mod); +! MZ_GC_VAR_IN_REG(1, vimext_symbol); +! MZ_GC_VAR_IN_REG(2, closed_prim); +! MZ_GC_REG(); +! +! vimext_symbol = scheme_intern_symbol("vimext"); +! MZ_GC_CHECK(); +! mod = scheme_primitive_module(vimext_symbol, environment); +! MZ_GC_CHECK(); + /* all prims made closed so they can access their own names */ +! for (i = 0; i < (int)(sizeof(prims)/sizeof(prims[0])); i++) + { + Vim_Prim *prim = prims + i; +! closed_prim = scheme_make_closed_prim_w_arity(prim->prim, prim, prim->name, +! prim->mina, prim->maxa); +! scheme_add_global(prim->name, closed_prim, mod); +! MZ_GC_CHECK(); + } + scheme_finish_primitive_module(mod); ++ MZ_GC_CHECK(); ++ MZ_GC_UNREG(); + } + + #ifdef HAVE_SANDBOX +*************** +*** 2697,2717 **** +--- 3148,3172 ---- + { + MZ_REGISTER_STATIC(M_write); + M_write = scheme_intern_symbol("write"); ++ MZ_GC_CHECK(); + } + if (M_read == NULL) + { + MZ_REGISTER_STATIC(M_read); + M_read = scheme_intern_symbol("read"); ++ MZ_GC_CHECK(); + } + if (M_execute == NULL) + { + MZ_REGISTER_STATIC(M_execute); + M_execute = scheme_intern_symbol("execute"); ++ MZ_GC_CHECK(); + } + if (M_delete == NULL) + { + MZ_REGISTER_STATIC(M_delete); + M_delete = scheme_intern_symbol("delete"); ++ MZ_GC_CHECK(); + } + + while (!SCHEME_NULLP(requested_access)) +*** ../vim-7.2.190/src/if_mzsch.h 2006-03-24 23:43:11.000000000 +0100 +--- src/if_mzsch.h 2009-05-26 19:08:21.000000000 +0200 +*************** +*** 11,16 **** +--- 11,17 ---- + + /* #ifdef needed for "make depend" */ + #ifdef FEAT_MZSCHEME ++ # include + # include + #endif + +*************** +*** 46,49 **** +--- 47,77 ---- + # define scheme_byte_string_to_char_string(obj) (obj) + #endif + ++ /* Precise GC macros */ ++ #ifndef MZ_GC_DECL_REG ++ # define MZ_GC_DECL_REG(size) /* empty */ ++ #endif ++ #ifndef MZ_GC_VAR_IN_REG ++ # define MZ_GC_VAR_IN_REG(x, v) /* empty */ ++ #endif ++ #ifndef MZ_GC_ARRAY_VAR_IN_REG ++ # define MZ_GC_ARRAY_VAR_IN_REG(x, v, l) /* empty */ ++ #endif ++ #ifndef MZ_GC_REG ++ # define MZ_GC_REG() /* empty */ ++ #endif ++ #ifndef MZ_GC_UNREG ++ # define MZ_GC_UNREG() /* empty */ ++ #endif ++ ++ #ifdef MZSCHEME_FORCE_GC ++ /* ++ * force garbage collection to check all references are registered ++ * seg faults will indicate not registered refs ++ */ ++ # define MZ_GC_CHECK() scheme_collect_garbage(); ++ #else ++ # define MZ_GC_CHECK() /* empty */ ++ #endif ++ + #endif /* _IF_MZSCH_H_ */ +*** ../vim-7.2.190/src/main.c 2009-05-17 13:30:58.000000000 +0200 +--- src/main.c 2009-05-26 19:09:01.000000000 +0200 +*************** +*** 935,942 **** +--- 935,948 ---- + + /* + * Call the main command loop. This never returns. ++ * For embedded MzScheme the main_loop will be called by Scheme ++ * for proper stack tracking + */ ++ #ifndef FEAT_MZSCHEME + main_loop(FALSE, FALSE); ++ #else ++ mzscheme_main(); ++ #endif + + return 0; + } +*** ../vim-7.2.190/src/proto/if_mzsch.pro 2004-07-12 17:51:52.000000000 +0200 +--- src/proto/if_mzsch.pro 2009-05-26 19:09:55.000000000 +0200 +*************** +*** 15,24 **** + void *mzvim_eval_string __ARGS((char_u *str)); + struct Scheme_Object *mzvim_apply __ARGS((struct Scheme_Object *, int argc, + struct Scheme_Object **)); +! int mzthreads_allowed (void); +! #ifdef FEAT_GUI_KDE +! void timer_proc (void); +! void mzscheme_kde_start_timer (void); +! void mzscheme_kde_stop_timer (void); +! #endif + /* vim: set ft=c : */ +--- 15,20 ---- + void *mzvim_eval_string __ARGS((char_u *str)); + struct Scheme_Object *mzvim_apply __ARGS((struct Scheme_Object *, int argc, + struct Scheme_Object **)); +! int mzthreads_allowed __ARGS((void)); +! void mzscheme_main __ARGS((void)); + /* vim: set ft=c : */ +*** ../vim-7.2.190/src/version.c 2009-05-26 18:12:13.000000000 +0200 +--- src/version.c 2009-05-26 22:52:53.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 191, + /**/ + +-- +Scientists decoded the first message from an alien civilization: + SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR +SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT +YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER +STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE +ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS +MAXIMUM! IT REALLY WORKS! + + /// 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/7.2.192 b/7.2.192 new file mode 100644 index 00000000..28cefd5b --- /dev/null +++ b/7.2.192 @@ -0,0 +1,135 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.192 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.192 (after 7.2.188) +Problem: Still a crash in the garbage collector for a very rare situation. +Solution: Make sure current_copyID is always incremented correctly. (Kent + Sibilev) +Files: src/eval.c + + +*** ../vim-7.2.191/src/eval.c 2009-05-26 22:58:43.000000000 +0200 +--- src/eval.c 2009-05-29 21:13:47.000000000 +0200 +*************** +*** 6526,6532 **** + + /* Don't free variables in the previous_funccal list unless they are only + * referenced through previous_funccal. This must be first, because if +! * the item is referenced elsewhere it must not be freed. */ + for (fc = previous_funccal; fc != NULL; fc = fc->caller) + { + set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1); +--- 6526,6532 ---- + + /* Don't free variables in the previous_funccal list unless they are only + * referenced through previous_funccal. This must be first, because if +! * the item is referenced elsewhere the funccal must not be freed. */ + for (fc = previous_funccal; fc != NULL; fc = fc->caller) + { + set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1); +*************** +*** 6564,6573 **** + /* v: vars */ + set_ref_in_ht(&vimvarht, copyID); + +! /* Free lists and dictionaries that are not referenced. */ + did_free = free_unref_items(copyID); + +! /* check if any funccal can be freed now */ + for (pfc = &previous_funccal; *pfc != NULL; ) + { + if (can_free_funccal(*pfc, copyID)) +--- 6564,6577 ---- + /* v: vars */ + set_ref_in_ht(&vimvarht, copyID); + +! /* +! * 2. Free lists and dictionaries that are not referenced. +! */ + did_free = free_unref_items(copyID); + +! /* +! * 3. Check if any funccal can be freed now. +! */ + for (pfc = &previous_funccal; *pfc != NULL; ) + { + if (can_free_funccal(*pfc, copyID)) +*************** +*** 9286,9292 **** + if (noref < 0 || noref > 1) + EMSG(_(e_invarg)); + else +! item_copy(&argvars[0], rettv, TRUE, noref == 0 ? ++current_copyID : 0); + } + + /* +--- 9290,9299 ---- + if (noref < 0 || noref > 1) + EMSG(_(e_invarg)); + else +! { +! current_copyID += COPYID_INC; +! item_copy(&argvars[0], rettv, TRUE, noref == 0 ? current_copyID : 0); +! } + } + + /* +*************** +*** 18966,18972 **** + char_u *s; + char_u numbuf[NUMBUFLEN]; + +! s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID); + list_one_var_a(prefix, v->di_key, v->di_tv.v_type, + s == NULL ? (char_u *)"" : s, first); + vim_free(tofree); +--- 18973,18980 ---- + char_u *s; + char_u numbuf[NUMBUFLEN]; + +! current_copyID += COPYID_INC; +! s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID); + list_one_var_a(prefix, v->di_key, v->di_tv.v_type, + s == NULL ? (char_u *)"" : s, first); + vim_free(tofree); +*************** +*** 19401,19407 **** + } + else if (eap->cmdidx == CMD_echo) + msg_puts_attr((char_u *)" ", echo_attr); +! p = echo_string(&rettv, &tofree, numbuf, ++current_copyID); + if (p != NULL) + for ( ; *p != NUL && !got_int; ++p) + { +--- 19409,19416 ---- + } + else if (eap->cmdidx == CMD_echo) + msg_puts_attr((char_u *)" ", echo_attr); +! current_copyID += COPYID_INC; +! p = echo_string(&rettv, &tofree, numbuf, current_copyID); + if (p != NULL) + for ( ; *p != NUL && !got_int; ++p) + { +*** ../vim-7.2.191/src/version.c 2009-05-26 22:58:43.000000000 +0200 +--- src/version.c 2009-06-03 13:21:20.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 192, + /**/ + +-- +Imagine a world without hypothetical situations. + + /// 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/7.2.193 b/7.2.193 new file mode 100644 index 00000000..175a6b88 --- /dev/null +++ b/7.2.193 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.193 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.193 +Problem: Warning for uninitialized values. +Solution: Initialize all the struct items. +Files: src/eval.c + + +*** ../vim-7.2.192/src/eval.c 2009-06-03 13:22:22.000000000 +0200 +--- src/eval.c 2009-05-29 21:13:47.000000000 +0200 +*************** +*** 286,292 **** + #define VV_RO 2 /* read-only */ + #define VV_RO_SBX 4 /* read-only in the sandbox */ + +! #define VV_NAME(s, t) s, {{t}}, {0} + + static struct vimvar + { +--- 286,292 ---- + #define VV_RO 2 /* read-only */ + #define VV_RO_SBX 4 /* read-only in the sandbox */ + +! #define VV_NAME(s, t) s, {{t, 0, {0}}, 0, {0}}, {0} + + static struct vimvar + { +*** ../vim-7.2.192/src/version.c 2009-06-03 13:22:23.000000000 +0200 +--- src/version.c 2009-06-03 14:25:18.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 193, + /**/ + +-- +No engineer can take a shower without wondering if some sort of Teflon coating +would make showering unnecessary. + (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/7.2.194 b/7.2.194 new file mode 100644 index 00000000..91d438f8 --- /dev/null +++ b/7.2.194 @@ -0,0 +1,44 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.194 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.194 (extra) +Problem: MSVC: rem commands are echoed. +Solution: Add commands to switch off echo. (Wang Xu) +Files: src/msvc2008.bat + + +*** ../vim-7.2.193/src/msvc2008.bat 2008-06-24 22:55:23.000000000 +0200 +--- src/msvc2008.bat 2009-04-29 18:05:11.000000000 +0200 +*************** +*** 1,5 **** +--- 1,7 ---- ++ @echo off + rem To be used on MS-Windows for Visual C++ 2008 Express Edition + rem aka Microsoft Visual Studio 9.0. + rem See INSTALLpc.txt for information. ++ @echo on + + call "%VS90COMNTOOLS%%vsvars32.bat" +*** ../vim-7.2.193/src/version.c 2009-06-03 14:25:47.000000000 +0200 +--- src/version.c 2009-06-03 15:04:30.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 194, + /**/ + +-- +I used to be indecisive, now I'm not sure. + + /// 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/7.2.195 b/7.2.195 new file mode 100644 index 00000000..5669a65f --- /dev/null +++ b/7.2.195 @@ -0,0 +1,79 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.195 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.195 +Problem: Leaking memory for the command Vim was started with. +Solution: Remember the pointer and free it. +Files: src/gui_gtk_x11.c + + +*** ../vim-7.2.194/src/gui_gtk_x11.c 2009-05-17 16:23:20.000000000 +0200 +--- src/gui_gtk_x11.c 2009-06-03 12:44:31.000000000 +0200 +*************** +*** 412,417 **** +--- 412,418 ---- + #endif + #if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION) + static const char *restart_command = NULL; ++ static char *abs_restart_command = NULL; + #endif + static int found_iconic_arg = FALSE; + +*************** +*** 449,456 **** + char_u buf[MAXPATHL]; + + if (mch_FullName((char_u *)argv[0], buf, (int)sizeof(buf), TRUE) == OK) +! /* Tiny leak; doesn't matter, and usually we don't even get here */ +! restart_command = (char *)vim_strsave(buf); + } + #endif + +--- 450,459 ---- + char_u buf[MAXPATHL]; + + if (mch_FullName((char_u *)argv[0], buf, (int)sizeof(buf), TRUE) == OK) +! { +! abs_restart_command = (char *)vim_strsave(buf); +! restart_command = abs_restart_command; +! } + } + #endif + +*************** +*** 611,616 **** +--- 614,622 ---- + gui_mch_free_all() + { + vim_free(gui_argv); ++ #if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION) ++ vim_free(abs_restart_command); ++ #endif + } + #endif + +*** ../vim-7.2.194/src/version.c 2009-06-03 15:05:05.000000000 +0200 +--- src/version.c 2009-06-03 16:19:00.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 195, + /**/ + +-- +I think that you'll agree that engineers are very effective in their social +interactions. It's the "normal" people who are nuts. + (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/7.2.196 b/7.2.196 new file mode 100644 index 00000000..7be8d95c --- /dev/null +++ b/7.2.196 @@ -0,0 +1,84 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.196 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.196 (after 7.2.167) +Problem: Turns out splint doesn't work well enough to be usable. +Solution: Remove splint support. +Files: Filelist, src/cleanlint.vim + + +*** ../vim-7.2.195/Filelist 2009-05-13 12:46:36.000000000 +0200 +--- Filelist 2009-05-21 14:42:46.000000000 +0200 +*************** +*** 139,145 **** + src/INSTALL \ + src/INSTALLx.txt \ + src/Makefile \ +- src/cleanlint.vim \ + src/auto/configure \ + src/config.aap.in \ + src/config.h.in \ +--- 139,144 ---- +*** ../vim-7.2.195/src/cleanlint.vim 2009-05-13 18:54:14.000000000 +0200 +--- src/cleanlint.vim 1970-01-01 01:00:00.000000000 +0100 +*************** +*** 1,32 **** +- " Vim tool: Filter output of splint +- " +- " Maintainer: Bram Moolenaar +- " Last Change: 2009 May 13 +- +- " Usage: redirect output of "make lint" to a file, edit that file with Vim and +- " :call CleanLint() +- " This deletes irrelevant messages. What remains might be valid warnings. +- +- fun! CleanLint() +- g/Assignment of dev_t to __dev_t:/lockmarks d +- g/Assignment of __dev_t to dev_t:/lockmarks d +- g/Operands of == have incompatible types (__dev_t, dev_t): /lockmarks d +- g/Operands of == have incompatible types (char_u, int): /lockmarks d +- g/Assignment of char to char_u: /lockmarks d +- g/Assignment of unsigned int to int: /lockmarks d +- g/Assignment of int to unsigned int: /lockmarks d +- g/Assignment of unsigned int to long int: /lockmarks d +- g/Assignment of int to char_u: /lockmarks d +- g/Function .* expects arg . to be wint_t gets int: /lockmarks d +- g/Function .* expects arg . to be size_t gets int: /lockmarks d +- g/Initial value of .* is type char, expects char_u: /lockmarks d +- g/^ex_cmds.h:.* Function types are inconsistent. Parameter 1 is implicitly temp, but unqualified in assigned function:/lockmarks d +- g/^ex_docmd.c:.* nospec_str/lockmarks d +- g/^digraph.c.*Additional initialization errors for digraphdefault not reported/lockmarks d +- g/Function strncasecmp expects arg 3 to be int gets size_t: /lockmarks d +- g/^ Types are incompatible/lockmarks d +- g/ To ignore signs in type comparisons use +ignoresigns/lockmarks d +- g/ To allow arbitrary integral types to match any integral type, use +matchanyintegral./lockmarks d +- g/ To allow arbitrary integral types to match long unsigned, use +longintegral./lockmarks d +- g+ A variable is declared but never used. Use /.@unused@./ in front of declaration to suppress message.+lockmarks d +- endfun +--- 0 ---- +*** ../vim-7.2.195/src/version.c 2009-06-03 16:20:09.000000000 +0200 +--- src/version.c 2009-06-03 22:04:31.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 196, + /**/ + +-- +It's totally unfair to suggest - as many have - that engineers are socially +inept. Engineers simply have different objectives when it comes to social +interaction. + (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/7.2.197 b/7.2.197 new file mode 100644 index 00000000..8e49a530 --- /dev/null +++ b/7.2.197 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.197 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.197 +Problem: Warning for uninitialized values. +Solution: Initialize all the struct items of typebuf. +Files: src/globals.h + + +*** ../vim-7.2.196/src/globals.h 2009-05-13 12:46:36.000000000 +0200 +--- src/globals.h 2009-06-10 15:52:18.000000000 +0200 +*************** +*** 960,966 **** + ; + EXTERN typebuf_T typebuf /* typeahead buffer */ + #ifdef DO_INIT +! = {NULL, NULL} + #endif + ; + #ifdef FEAT_EX_EXTRA +--- 967,973 ---- + ; + EXTERN typebuf_T typebuf /* typeahead buffer */ + #ifdef DO_INIT +! = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0} + #endif + ; + #ifdef FEAT_EX_EXTRA +*** ../vim-7.2.196/src/version.c 2009-06-03 22:07:38.000000000 +0200 +--- src/version.c 2009-06-10 18:14:58.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 197, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +18. Your wife drapes a blond wig over your monitor to remind you of what she + looks like. + + /// 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/7.2.198 b/7.2.198 new file mode 100644 index 00000000..cae27ac3 --- /dev/null +++ b/7.2.198 @@ -0,0 +1,60 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.198 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.198 +Problem: Size of buffer used for tgetent() may be too small. +Solution: Use the largest known size everywhere. +Files: src/vim.h + + +*** ../vim-7.2.197/src/vim.h 2009-05-14 22:19:19.000000000 +0200 +--- src/vim.h 2009-06-07 20:37:48.000000000 +0200 +*************** +*** 1345,1355 **** + # define MSG_BUF_CLEN MSG_BUF_LEN /* cell length */ + #endif + +! #if defined(AMIGA) || defined(__linux__) || defined(__QNX__) || defined(__CYGWIN32__) || defined(_AIX) +! # define TBUFSZ 2048 /* buffer size for termcap entry */ +! #else +! # define TBUFSZ 1024 /* buffer size for termcap entry */ +! #endif + + /* + * Maximum length of key sequence to be mapped. +--- 1345,1355 ---- + # define MSG_BUF_CLEN MSG_BUF_LEN /* cell length */ + #endif + +! /* Size of the buffer used for tgetent(). Unfortunately this is largely +! * undocumented, some systems use 1024. Using a buffer that is too small +! * causes a buffer overrun and a crash. Use the maximum known value to stay +! * on the safe side. */ +! #define TBUFSZ 2048 /* buffer size for termcap entry */ + + /* + * Maximum length of key sequence to be mapped. +*** ../vim-7.2.197/src/version.c 2009-06-10 18:15:49.000000000 +0200 +--- src/version.c 2009-06-16 11:06:45.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 198, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +7. Finish all your sentences with "in accordance with the prophecy". + + /// 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/7.2.199 b/7.2.199 new file mode 100644 index 00000000..391ede6f --- /dev/null +++ b/7.2.199 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.199 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.199 +Problem: Strange character in comment. +Solution: Change to "message". (Yongwei Wu) +Files: src/term.c + + +*** ../vim-7.2.198/src/term.c 2009-05-17 13:30:58.000000000 +0200 +--- src/term.c 2009-06-16 11:16:17.000000000 +0200 +*************** +*** 5555,5561 **** + * respects the current B/k/< settings of 'cpoption'. + * + * This function is called when expanding mappings/abbreviations on the +! * command-line, and for building the "Ambiguous mapping..." error messæge. + * + * It uses a growarray to build the translation string since the + * latter can be wider than the original description. The caller has to +--- 5555,5561 ---- + * respects the current B/k/< settings of 'cpoption'. + * + * This function is called when expanding mappings/abbreviations on the +! * command-line, and for building the "Ambiguous mapping..." error message. + * + * It uses a growarray to build the translation string since the + * latter can be wider than the original description. The caller has to +*** ../vim-7.2.198/src/version.c 2009-06-16 11:08:13.000000000 +0200 +--- src/version.c 2009-06-16 14:31:03.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 199, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +10. Ask people what sex they are. Laugh hysterically after they answer. + + /// 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/7.2.200 b/7.2.200 new file mode 100644 index 00000000..65cc598e --- /dev/null +++ b/7.2.200 @@ -0,0 +1,348 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.200 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.200 +Problem: Reading past end of string when navigating the menu bar or + resizing the window. +Solution: Add and use mb_ptr2len_len(). (partly by Dominique Pelle) + Also add mb_ptr2cells_len() to prevent more trouble. +Files: src/gui_gtk_x11.c, src/os_unix.c, src/globals.h, src/mbyte.c, + src/proto/mbyte.pro + + +*** ../vim-7.2.199/src/gui_gtk_x11.c 2009-06-03 16:20:09.000000000 +0200 +--- src/gui_gtk_x11.c 2009-06-16 14:44:19.000000000 +0200 +*************** +*** 6077,6088 **** + # ifdef FEAT_MBYTE + if (enc_utf8) + { +! c = utf_ptr2char(p); + if (c >= 0x10000) /* show chars > 0xffff as ? */ + c = 0xbf; + buf[textlen].byte1 = c >> 8; + buf[textlen].byte2 = c; +! p += utf_ptr2len(p); + width += utf_char2cells(c); + } + else +--- 6135,6149 ---- + # ifdef FEAT_MBYTE + if (enc_utf8) + { +! int pcc[MAX_MCO]; +! +! /* TODO: use the composing characters */ +! c = utfc_ptr2char_len(p, &pcc, len - (p - s)); + if (c >= 0x10000) /* show chars > 0xffff as ? */ + c = 0xbf; + buf[textlen].byte1 = c >> 8; + buf[textlen].byte2 = c; +! p += utfc_ptr2len_len(p, len - (p - s)); + width += utf_char2cells(c); + } + else +*************** +*** 6106,6113 **** + if (has_mbyte) + { + width = 0; +! for (p = s; p < s + len; p += (*mb_ptr2len)(p)) +! width += (*mb_ptr2cells)(p); + } + else + # endif +--- 6167,6174 ---- + if (has_mbyte) + { + width = 0; +! for (p = s; p < s + len; p += (*mb_ptr2len_len)(p, len - (p - s))) +! width += (*mb_ptr2cells_len)(p, len - (p - s)); + } + else + # endif +*** ../vim-7.2.199/src/os_unix.c 2009-05-17 13:30:58.000000000 +0200 +--- src/os_unix.c 2009-06-03 12:35:59.000000000 +0200 +*************** +*** 4305,4311 **** + ta_buf[i] = '\n'; + # ifdef FEAT_MBYTE + if (has_mbyte) +! i += (*mb_ptr2len)(ta_buf + i) - 1; + # endif + } + +--- 4305,4312 ---- + ta_buf[i] = '\n'; + # ifdef FEAT_MBYTE + if (has_mbyte) +! i += (*mb_ptr2len_len)(ta_buf + i, +! ta_len + len - i) - 1; + # endif + } + +*** ../vim-7.2.199/src/globals.h 2009-06-10 18:15:49.000000000 +0200 +--- src/globals.h 2009-06-12 21:10:30.000000000 +0200 +*************** +*** 810,820 **** +--- 815,828 ---- + */ + /* length of char in bytes, including following composing chars */ + EXTERN int (*mb_ptr2len) __ARGS((char_u *p)) INIT(= latin_ptr2len); ++ /* idem, with limit on string length */ ++ EXTERN int (*mb_ptr2len_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2len_len); + /* byte length of char */ + EXTERN int (*mb_char2len) __ARGS((int c)) INIT(= latin_char2len); + /* convert char to bytes, return the length */ + EXTERN int (*mb_char2bytes) __ARGS((int c, char_u *buf)) INIT(= latin_char2bytes); + EXTERN int (*mb_ptr2cells) __ARGS((char_u *p)) INIT(= latin_ptr2cells); ++ EXTERN int (*mb_ptr2cells_len) __ARGS((char_u *p, int size)) INIT(= latin_ptr2cells_len); + EXTERN int (*mb_char2cells) __ARGS((int c)) INIT(= latin_char2cells); + EXTERN int (*mb_off2cells) __ARGS((unsigned off, unsigned max_off)) INIT(= latin_off2cells); + EXTERN int (*mb_ptr2char) __ARGS((char_u *p)) INIT(= latin_ptr2char); +*** ../vim-7.2.199/src/mbyte.c 2009-05-17 13:30:58.000000000 +0200 +--- src/mbyte.c 2009-06-16 15:01:30.000000000 +0200 +*************** +*** 127,133 **** +--- 127,136 ---- + static int dbcs_char2len __ARGS((int c)); + static int dbcs_char2bytes __ARGS((int c, char_u *buf)); + static int dbcs_ptr2len __ARGS((char_u *p)); ++ static int dbcs_ptr2len_len __ARGS((char_u *p, int size)); ++ static int utf_ptr2cells_len __ARGS((char_u *p, int size)); + static int dbcs_char2cells __ARGS((int c)); ++ static int dbcs_ptr2cells_len __ARGS((char_u *p, int size)); + static int dbcs_ptr2char __ARGS((char_u *p)); + + /* Lookup table to quickly get the length in bytes of a UTF-8 character from +*************** +*** 606,614 **** +--- 609,619 ---- + if (enc_utf8) + { + mb_ptr2len = utfc_ptr2len; ++ mb_ptr2len_len = utfc_ptr2len_len; + mb_char2len = utf_char2len; + mb_char2bytes = utf_char2bytes; + mb_ptr2cells = utf_ptr2cells; ++ mb_ptr2cells_len = utf_ptr2cells_len; + mb_char2cells = utf_char2cells; + mb_off2cells = utf_off2cells; + mb_ptr2char = utf_ptr2char; +*************** +*** 617,625 **** +--- 622,632 ---- + else if (enc_dbcs != 0) + { + mb_ptr2len = dbcs_ptr2len; ++ mb_ptr2len_len = dbcs_ptr2len_len; + mb_char2len = dbcs_char2len; + mb_char2bytes = dbcs_char2bytes; + mb_ptr2cells = dbcs_ptr2cells; ++ mb_ptr2cells_len = dbcs_ptr2cells_len; + mb_char2cells = dbcs_char2cells; + mb_off2cells = dbcs_off2cells; + mb_ptr2char = dbcs_ptr2char; +*************** +*** 628,636 **** +--- 635,645 ---- + else + { + mb_ptr2len = latin_ptr2len; ++ mb_ptr2len_len = latin_ptr2len_len; + mb_char2len = latin_char2len; + mb_char2bytes = latin_char2bytes; + mb_ptr2cells = latin_ptr2cells; ++ mb_ptr2cells_len = latin_ptr2cells_len; + mb_char2cells = latin_char2cells; + mb_off2cells = latin_off2cells; + mb_ptr2char = latin_ptr2char; +*************** +*** 1069,1075 **** + * Get byte length of character at "*p" but stop at a NUL. + * For UTF-8 this includes following composing characters. + * Returns 0 when *p is NUL. +- * + */ + int + latin_ptr2len(p) +--- 1078,1083 ---- +*************** +*** 1091,1096 **** +--- 1099,1138 ---- + return len; + } + ++ /* ++ * mb_ptr2len_len() function pointer. ++ * Like mb_ptr2len(), but limit to read "size" bytes. ++ * Returns 0 for an empty string. ++ * Returns 1 for an illegal char or an incomplete byte sequence. ++ */ ++ int ++ latin_ptr2len_len(p, size) ++ char_u *p; ++ int size; ++ { ++ if (size < 1 || *p == NUL) ++ return 0; ++ return 1; ++ } ++ ++ static int ++ dbcs_ptr2len_len(p, size) ++ char_u *p; ++ int size; ++ { ++ int len; ++ ++ if (size < 1 || *p == NUL) ++ return 0; ++ if (size == 1) ++ return 1; ++ /* Check that second byte is not missing. */ ++ len = MB_BYTE2LEN(*p); ++ if (len == 2 && p[1] == NUL) ++ len = 1; ++ return len; ++ } ++ + struct interval + { + unsigned short first; +*************** +*** 1287,1292 **** +--- 1329,1383 ---- + } + + /* ++ * mb_ptr2cells_len() function pointer. ++ * Like mb_ptr2cells(), but limit string length to "size". ++ * For an empty string or truncated character returns 1. ++ */ ++ int ++ latin_ptr2cells_len(p, size) ++ char_u *p UNUSED; ++ int size UNUSED; ++ { ++ return 1; ++ } ++ ++ static int ++ utf_ptr2cells_len(p, size) ++ char_u *p; ++ int size; ++ { ++ int c; ++ ++ /* Need to convert to a wide character. */ ++ if (size > 0 && *p >= 0x80) ++ { ++ if (utf_ptr2len_len(p, size) < utf8len_tab[*p]) ++ return 1; ++ c = utf_ptr2char(p); ++ /* An illegal byte is displayed as . */ ++ if (utf_ptr2len(p) == 1 || c == NUL) ++ return 4; ++ /* If the char is ASCII it must be an overlong sequence. */ ++ if (c < 0x80) ++ return char2cells(c); ++ return utf_char2cells(c); ++ } ++ return 1; ++ } ++ ++ static int ++ dbcs_ptr2cells_len(p, size) ++ char_u *p; ++ int size; ++ { ++ /* Number of cells is equal to number of bytes, except for euc-jp when ++ * the first byte is 0x8e. */ ++ if (size <= 1 || (enc_dbcs == DBCS_JPNU && *p == 0x8e)) ++ return 1; ++ return MB_BYTE2LEN(*p); ++ } ++ ++ /* + * mb_char2cells() function pointer. + * Return the number of display cells character "c" occupies. + * Only takes care of multi-byte chars, not "^C" and such. +*************** +*** 1716,1721 **** +--- 1807,1813 ---- + /* + * Return the number of bytes the UTF-8 encoding of the character at "p[size]" + * takes. This includes following composing characters. ++ * Returns 0 for an empty string. + * Returns 1 for an illegal char or an incomplete byte sequence. + */ + int +*************** +*** 1728,1734 **** + int prevlen; + #endif + +! if (*p == NUL) + return 0; + if (p[0] < 0x80 && (size == 1 || p[1] < 0x80)) /* be quick for ASCII */ + return 1; +--- 1820,1826 ---- + int prevlen; + #endif + +! if (size < 1 || *p == NUL) + return 0; + if (p[0] < 0x80 && (size == 1 || p[1] < 0x80)) /* be quick for ASCII */ + return 1; +*** ../vim-7.2.199/src/proto/mbyte.pro 2008-07-13 19:34:19.000000000 +0200 +--- src/proto/mbyte.pro 2009-06-16 14:58:39.000000000 +0200 +*************** +*** 7,16 **** +--- 7,18 ---- + int latin_char2len __ARGS((int c)); + int latin_char2bytes __ARGS((int c, char_u *buf)); + int latin_ptr2len __ARGS((char_u *p)); ++ int latin_ptr2len_len __ARGS((char_u *p, int size)); + int utf_char2cells __ARGS((int c)); + int latin_ptr2cells __ARGS((char_u *p)); + int utf_ptr2cells __ARGS((char_u *p)); + int dbcs_ptr2cells __ARGS((char_u *p)); ++ int latin_ptr2cells_len __ARGS((char_u *p, int size)); + int latin_char2cells __ARGS((int c)); + int latin_off2cells __ARGS((unsigned off, unsigned max_off)); + int dbcs_off2cells __ARGS((unsigned off, unsigned max_off)); +*************** +*** 85,90 **** +--- 87,93 ---- + int preedit_get_status __ARGS((void)); + int im_is_preediting __ARGS((void)); + int convert_setup __ARGS((vimconv_T *vcp, char_u *from, char_u *to)); ++ int convert_setup_ext __ARGS((vimconv_T *vcp, char_u *from, int from_unicode_is_utf8, char_u *to, int to_unicode_is_utf8)); + int convert_input __ARGS((char_u *ptr, int len, int maxlen)); + int convert_input_safe __ARGS((char_u *ptr, int len, int maxlen, char_u **restp, int *restlenp)); + char_u *string_convert __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp)); +*** ../vim-7.2.199/src/version.c 2009-06-16 14:31:56.000000000 +0200 +--- src/version.c 2009-06-16 14:37:38.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 200, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.201 b/7.2.201 new file mode 100644 index 00000000..cd2df079 --- /dev/null +++ b/7.2.201 @@ -0,0 +1,494 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.201 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.201 +Problem: Cannot copy/paste HTML to/from Firefox via the clipboard. +Solution: Implement this for GTK. Add the "html" value to 'clipboard'. +Files: runtime/doc/options.txt, src/globals.h, src/gui_gtk_x11.c, + src/mbyte.c, src/proto/mbyte.pro, src/option.c + + +*** ../vim-7.2.200/runtime/doc/options.txt 2009-02-21 20:27:00.000000000 +0100 +--- runtime/doc/options.txt 2009-06-12 22:25:22.000000000 +0200 +*************** +*** 1443,1448 **** +--- 1444,1457 ---- + autoselectml Like "autoselect", but for the modeless selection + only. Compare to the 'A' flag in 'guioptions'. + ++ html When the clipboard contains HTML, use this when ++ pasting. When putting text on the clipboard, mark it ++ as HTML. This works to copy rendered HTML from ++ Firefox, paste it as raw HTML in Vim, select the HTML ++ in Vim and paste it in a rich edit box in Firefox. ++ Only supported for GTK version 2 and later. ++ Only available with the |+multi_byte| feature. ++ + exclude:{pattern} + Defines a pattern that is matched against the name of + the terminal 'term'. If there is a match, no +*** ../vim-7.2.200/src/globals.h 2009-06-16 15:12:11.000000000 +0200 +--- src/globals.h 2009-06-12 21:10:30.000000000 +0200 +*************** +*** 509,514 **** +--- 509,515 ---- + EXTERN int clip_unnamed INIT(= FALSE); + EXTERN int clip_autoselect INIT(= FALSE); + EXTERN int clip_autoselectml INIT(= FALSE); ++ EXTERN int clip_html INIT(= FALSE); + EXTERN regprog_T *clip_exclude_prog INIT(= NULL); + #endif + +*** ../vim-7.2.200/src/gui_gtk_x11.c 2009-06-16 15:12:11.000000000 +0200 +--- src/gui_gtk_x11.c 2009-06-16 14:44:19.000000000 +0200 +*************** +*** 107,112 **** +--- 107,113 ---- + TARGET_UTF8_STRING, + TARGET_STRING, + TARGET_COMPOUND_TEXT, ++ TARGET_HTML, + TARGET_TEXT, + TARGET_TEXT_URI_LIST, + TARGET_TEXT_PLAIN, +*************** +*** 123,128 **** +--- 124,130 ---- + {VIMENC_ATOM_NAME, 0, TARGET_VIMENC}, + {VIM_ATOM_NAME, 0, TARGET_VIM}, + #ifdef FEAT_MBYTE ++ {"text/html", 0, TARGET_HTML}, + {"UTF8_STRING", 0, TARGET_UTF8_STRING}, + #endif + {"COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT}, +*************** +*** 140,145 **** +--- 142,148 ---- + { + {"text/uri-list", 0, TARGET_TEXT_URI_LIST}, + # ifdef FEAT_MBYTE ++ {"text/html", 0, TARGET_HTML}, + {"UTF8_STRING", 0, TARGET_UTF8_STRING}, + # endif + {"STRING", 0, TARGET_STRING}, +*************** +*** 178,183 **** +--- 181,187 ---- + * Atoms used to control/reference X11 selections. + */ + #ifdef FEAT_MBYTE ++ static GdkAtom html_atom = GDK_NONE; + static GdkAtom utf8_string_atom = GDK_NONE; + #endif + #ifndef HAVE_GTK2 +*************** +*** 1364,1369 **** +--- 1368,1391 ---- + else + text = tmpbuf_utf8; + } ++ else if (len >= 2 && text[0] == 0xff && text[1] == 0xfe) ++ { ++ vimconv_T conv; ++ ++ /* UTF-16, we get this for HTML */ ++ conv.vc_type = CONV_NONE; ++ convert_setup_ext(&conv, (char_u *)"utf-16le", FALSE, p_enc, TRUE); ++ ++ if (conv.vc_type != CONV_NONE) ++ { ++ text += 2; ++ len -= 2; ++ tmpbuf = string_convert(&conv, text, &len); ++ convert_setup(&conv, NULL, NULL); ++ } ++ if (tmpbuf != NULL) ++ text = tmpbuf; ++ } + } + #else /* !HAVE_GTK2 */ + # ifdef FEAT_MBYTE +*************** +*** 1451,1456 **** +--- 1473,1479 ---- + + if (info != (guint)TARGET_STRING + #ifdef FEAT_MBYTE ++ && (!clip_html || info != (guint)TARGET_HTML) + && info != (guint)TARGET_UTF8_STRING + && info != (guint)TARGET_VIMENC + #endif +*************** +*** 1486,1491 **** +--- 1509,1548 ---- + } + + #ifdef FEAT_MBYTE ++ else if (info == (guint)TARGET_HTML) ++ { ++ vimconv_T conv; ++ ++ /* Since we get utf-16, we probably should set it as well. */ ++ conv.vc_type = CONV_NONE; ++ convert_setup_ext(&conv, p_enc, TRUE, (char_u *)"utf-16le", FALSE); ++ if (conv.vc_type != CONV_NONE) ++ { ++ tmpbuf = string_convert(&conv, string, &length); ++ convert_setup(&conv, NULL, NULL); ++ vim_free(string); ++ string = tmpbuf; ++ } ++ ++ /* Prepend the BOM: "fffe" */ ++ if (string != NULL) ++ { ++ tmpbuf = alloc(length + 2); ++ tmpbuf[0] = 0xff; ++ tmpbuf[1] = 0xfe; ++ mch_memmove(tmpbuf + 2, string, (size_t)length); ++ vim_free(string); ++ string = tmpbuf; ++ length += 2; ++ ++ selection_data->type = selection_data->target; ++ selection_data->format = 16; /* 16 bits per char */ ++ gtk_selection_data_set(selection_data, html_atom, 16, ++ string, length); ++ vim_free(string); ++ } ++ return; ++ } + else if (info == (guint)TARGET_VIMENC) + { + int l = STRLEN(p_enc); +*************** +*** 3464,3469 **** +--- 3521,3527 ---- + + /* Initialise atoms */ + #ifdef FEAT_MBYTE ++ html_atom = gdk_atom_intern("text/html", FALSE); + utf8_string_atom = gdk_atom_intern("UTF8_STRING", FALSE); + #endif + #ifndef HAVE_GTK2 +*************** +*** 6665,6670 **** +--- 6723,6732 ---- + + for (i = 0; i < N_SELECTION_TARGETS; ++i) + { ++ #ifdef FEAT_MBYTE ++ if (!clip_html && selection_targets[i].info == TARGET_HTML) ++ continue; ++ #endif + received_selection = RS_NONE; + target = gdk_atom_intern(selection_targets[i].target, FALSE); + +*** ../vim-7.2.200/src/mbyte.c 2009-06-16 15:12:11.000000000 +0200 +--- src/mbyte.c 2009-06-16 15:01:30.000000000 +0200 +*************** +*** 3265,3271 **** + + # if defined(USE_ICONV) || defined(PROTO) + +! static char_u *iconv_string __ARGS((vimconv_T *vcp, char_u *str, int slen, int *unconvlenp)); + + /* + * Call iconv_open() with a check if iconv() works properly (there are broken +--- 3265,3271 ---- + + # if defined(USE_ICONV) || defined(PROTO) + +! static char_u *iconv_string __ARGS((vimconv_T *vcp, char_u *str, int slen, int *unconvlenp, int *resultlenp)); + + /* + * Call iconv_open() with a check if iconv() works properly (there are broken +*************** +*** 3326,3338 **** + * If "unconvlenp" is not NULL handle the string ending in an incomplete + * sequence and set "*unconvlenp" to the length of it. + * Returns the converted string in allocated memory. NULL for an error. + */ + static char_u * +! iconv_string(vcp, str, slen, unconvlenp) + vimconv_T *vcp; + char_u *str; + int slen; + int *unconvlenp; + { + const char *from; + size_t fromlen; +--- 3326,3340 ---- + * If "unconvlenp" is not NULL handle the string ending in an incomplete + * sequence and set "*unconvlenp" to the length of it. + * Returns the converted string in allocated memory. NULL for an error. ++ * If resultlenp is not NULL, sets it to the result length in bytes. + */ + static char_u * +! iconv_string(vcp, str, slen, unconvlenp, resultlenp) + vimconv_T *vcp; + char_u *str; + int slen; + int *unconvlenp; ++ int *resultlenp; + { + const char *from; + size_t fromlen; +*************** +*** 3418,3423 **** +--- 3420,3428 ---- + /* Not enough room or skipping illegal sequence. */ + done = to - (char *)result; + } ++ ++ if (resultlenp != NULL) ++ *resultlenp = (int)(to - (char *)result); + return result; + } + +*************** +*** 5837,5844 **** +--- 5842,5866 ---- + char_u *from; + char_u *to; + { ++ return convert_setup_ext(vcp, from, TRUE, to, TRUE); ++ } ++ ++ /* ++ * As convert_setup(), but only when from_unicode_is_utf8 is TRUE will all ++ * "from" unicode charsets be considered utf-8. Same for "to". ++ */ ++ int ++ convert_setup_ext(vcp, from, from_unicode_is_utf8, to, to_unicode_is_utf8) ++ vimconv_T *vcp; ++ char_u *from; ++ int from_unicode_is_utf8; ++ char_u *to; ++ int to_unicode_is_utf8; ++ { + int from_prop; + int to_prop; ++ int from_is_utf8; ++ int to_is_utf8; + + /* Reset to no conversion. */ + # ifdef USE_ICONV +*************** +*** 5856,5892 **** + + from_prop = enc_canon_props(from); + to_prop = enc_canon_props(to); +! if ((from_prop & ENC_LATIN1) && (to_prop & ENC_UNICODE)) + { + /* Internal latin1 -> utf-8 conversion. */ + vcp->vc_type = CONV_TO_UTF8; + vcp->vc_factor = 2; /* up to twice as long */ + } +! else if ((from_prop & ENC_LATIN9) && (to_prop & ENC_UNICODE)) + { + /* Internal latin9 -> utf-8 conversion. */ + vcp->vc_type = CONV_9_TO_UTF8; + vcp->vc_factor = 3; /* up to three as long (euro sign) */ + } +! else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN1)) + { + /* Internal utf-8 -> latin1 conversion. */ + vcp->vc_type = CONV_TO_LATIN1; + } +! else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN9)) + { + /* Internal utf-8 -> latin9 conversion. */ + vcp->vc_type = CONV_TO_LATIN9; + } + #ifdef WIN3264 + /* Win32-specific codepage <-> codepage conversion without iconv. */ +! else if (((from_prop & ENC_UNICODE) || encname2codepage(from) > 0) +! && ((to_prop & ENC_UNICODE) || encname2codepage(to) > 0)) + { + vcp->vc_type = CONV_CODEPAGE; + vcp->vc_factor = 2; /* up to twice as long */ +! vcp->vc_cpfrom = (from_prop & ENC_UNICODE) ? 0 : encname2codepage(from); +! vcp->vc_cpto = (to_prop & ENC_UNICODE) ? 0 : encname2codepage(to); + } + #endif + #ifdef MACOS_X +--- 5878,5923 ---- + + from_prop = enc_canon_props(from); + to_prop = enc_canon_props(to); +! if (from_unicode_is_utf8) +! from_is_utf8 = from_prop & ENC_UNICODE; +! else +! from_is_utf8 = from_prop == ENC_UNICODE; +! if (to_unicode_is_utf8) +! to_is_utf8 = to_prop & ENC_UNICODE; +! else +! to_is_utf8 = to_prop == ENC_UNICODE; +! +! if ((from_prop & ENC_LATIN1) && to_is_utf8) + { + /* Internal latin1 -> utf-8 conversion. */ + vcp->vc_type = CONV_TO_UTF8; + vcp->vc_factor = 2; /* up to twice as long */ + } +! else if ((from_prop & ENC_LATIN9) && to_is_utf8) + { + /* Internal latin9 -> utf-8 conversion. */ + vcp->vc_type = CONV_9_TO_UTF8; + vcp->vc_factor = 3; /* up to three as long (euro sign) */ + } +! else if (from_is_utf8 && (to_prop & ENC_LATIN1)) + { + /* Internal utf-8 -> latin1 conversion. */ + vcp->vc_type = CONV_TO_LATIN1; + } +! else if (from_is_utf8 && (to_prop & ENC_LATIN9)) + { + /* Internal utf-8 -> latin9 conversion. */ + vcp->vc_type = CONV_TO_LATIN9; + } + #ifdef WIN3264 + /* Win32-specific codepage <-> codepage conversion without iconv. */ +! else if ((from_is_utf8 || encname2codepage(from) > 0) +! && (to_is_utf8 || encname2codepage(to) > 0)) + { + vcp->vc_type = CONV_CODEPAGE; + vcp->vc_factor = 2; /* up to twice as long */ +! vcp->vc_cpfrom = from_is_utf8 ? 0 : encname2codepage(from); +! vcp->vc_cpto = to_is_utf8 ? 0 : encname2codepage(to); + } + #endif + #ifdef MACOS_X +*************** +*** 5894,5900 **** + { + vcp->vc_type = CONV_MAC_LATIN1; + } +! else if ((from_prop & ENC_MACROMAN) && (to_prop & ENC_UNICODE)) + { + vcp->vc_type = CONV_MAC_UTF8; + vcp->vc_factor = 2; /* up to twice as long */ +--- 5925,5931 ---- + { + vcp->vc_type = CONV_MAC_LATIN1; + } +! else if ((from_prop & ENC_MACROMAN) && to_is_utf8) + { + vcp->vc_type = CONV_MAC_UTF8; + vcp->vc_factor = 2; /* up to twice as long */ +*************** +*** 5903,5909 **** + { + vcp->vc_type = CONV_LATIN1_MAC; + } +! else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_MACROMAN)) + { + vcp->vc_type = CONV_UTF8_MAC; + } +--- 5934,5940 ---- + { + vcp->vc_type = CONV_LATIN1_MAC; + } +! else if (from_is_utf8 && (to_prop & ENC_MACROMAN)) + { + vcp->vc_type = CONV_UTF8_MAC; + } +*************** +*** 5913,5920 **** + { + /* Use iconv() for conversion. */ + vcp->vc_fd = (iconv_t)my_iconv_open( +! (to_prop & ENC_UNICODE) ? (char_u *)"utf-8" : to, +! (from_prop & ENC_UNICODE) ? (char_u *)"utf-8" : from); + if (vcp->vc_fd != (iconv_t)-1) + { + vcp->vc_type = CONV_ICONV; +--- 5944,5951 ---- + { + /* Use iconv() for conversion. */ + vcp->vc_fd = (iconv_t)my_iconv_open( +! to_is_utf8 ? (char_u *)"utf-8" : to, +! from_is_utf8 ? (char_u *)"utf-8" : from); + if (vcp->vc_fd != (iconv_t)-1) + { + vcp->vc_type = CONV_ICONV; +*************** +*** 6170,6178 **** + + # ifdef USE_ICONV + case CONV_ICONV: /* conversion with output_conv.vc_fd */ +! retval = iconv_string(vcp, ptr, len, unconvlenp); +! if (retval != NULL && lenp != NULL) +! *lenp = (int)STRLEN(retval); + break; + # endif + # ifdef WIN3264 +--- 6201,6207 ---- + + # ifdef USE_ICONV + case CONV_ICONV: /* conversion with output_conv.vc_fd */ +! retval = iconv_string(vcp, ptr, len, unconvlenp, lenp); + break; + # endif + # ifdef WIN3264 +*** ../vim-7.2.200/src/option.c 2009-05-17 13:30:58.000000000 +0200 +--- src/option.c 2009-06-12 21:09:51.000000000 +0200 +*************** +*** 7024,7029 **** +--- 7024,7030 ---- + int new_unnamed = FALSE; + int new_autoselect = FALSE; + int new_autoselectml = FALSE; ++ int new_html = FALSE; + regprog_T *new_exclude_prog = NULL; + char_u *errmsg = NULL; + char_u *p; +*************** +*** 7047,7052 **** +--- 7048,7058 ---- + new_autoselectml = TRUE; + p += 12; + } ++ else if (STRNCMP(p, "html", 4) == 0 && (p[4] == ',' || p[4] == NUL)) ++ { ++ new_html = TRUE; ++ p += 4; ++ } + else if (STRNCMP(p, "exclude:", 8) == 0 && new_exclude_prog == NULL) + { + p += 8; +*************** +*** 7068,7073 **** +--- 7074,7080 ---- + clip_unnamed = new_unnamed; + clip_autoselect = new_autoselect; + clip_autoselectml = new_autoselectml; ++ clip_html = new_html; + vim_free(clip_exclude_prog); + clip_exclude_prog = new_exclude_prog; + } +*** ../vim-7.2.200/src/version.c 2009-06-16 15:12:11.000000000 +0200 +--- src/version.c 2009-06-16 15:14:02.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 201, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +13. Go to a poetry recital and ask why the poems don't rhyme. + + /// 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/7.2.202 b/7.2.202 new file mode 100644 index 00000000..2c249093 --- /dev/null +++ b/7.2.202 @@ -0,0 +1,62 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.202 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.202 +Problem: BufWipeout autocommand that edits another buffer causes problems. +Solution: Check for the situation, give an error and quit the operation. +Files: src/fileio.c + + +*** ../vim-7.2.201/src/fileio.c 2009-05-16 17:29:37.000000000 +0200 +--- src/fileio.c 2009-06-11 21:22:37.000000000 +0200 +*************** +*** 4824,4829 **** +--- 4824,4831 ---- + char_u *sfname; + { + #ifdef FEAT_AUTOCMD ++ buf_T *buf = curbuf; ++ + /* It's like the unnamed buffer is deleted.... */ + if (curbuf->b_p_bl) + apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf); +*************** +*** 4832,4837 **** +--- 4834,4845 ---- + if (aborting()) /* autocmds may abort script processing */ + return FAIL; + # endif ++ if (curbuf != buf) ++ { ++ /* We are in another buffer now, don't do the renaming. */ ++ EMSG(_(e_auchangedbuf)); ++ return FAIL; ++ } + #endif + + if (setfname(curbuf, fname, sfname, FALSE) == OK) +*** ../vim-7.2.201/src/version.c 2009-06-16 15:23:07.000000000 +0200 +--- src/version.c 2009-06-16 15:28:31.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 202, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +14. Put mosquito netting around your work area. Play a tape of jungle + sounds all day. + + /// 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/7.2.203 b/7.2.203 new file mode 100644 index 00000000..c1322488 --- /dev/null +++ b/7.2.203 @@ -0,0 +1,1496 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.203 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.203 +Problem: When reloading a buffer or doing anything else with a buffer that + is not displayed in a visible window, autocommands may be applied + to the current window, folds messed up, etc. +Solution: Instead of using the current window for the hidden buffer use a + special window, splitting the current one temporarily. +Files: src/fileio.c, src/globals.h, src/gui.c, src/if_perl.xs, + src/proto/gui.pro, src/proto/window.pro, src/screen.c, + src/structs.h, src/window.c + + +*** ../vim-7.2.202/src/fileio.c 2009-06-16 15:35:46.000000000 +0200 +--- src/fileio.c 2009-06-11 21:22:37.000000000 +0200 +*************** +*** 8365,8371 **** + + /* Execute the modeline settings, but don't set window-local + * options if we are using the current window for another buffer. */ +! do_modelines(aco.save_curwin == NULL ? OPT_NOWIN : 0); + + /* restore the current window */ + aucmd_restbuf(&aco); +--- 8365,8371 ---- + + /* Execute the modeline settings, but don't set window-local + * options if we are using the current window for another buffer. */ +! do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0); + + /* restore the current window */ + aucmd_restbuf(&aco); +*************** +*** 8381,8388 **** + + /* + * Prepare for executing autocommands for (hidden) buffer "buf". +! * Search a window for the current buffer. Save the cursor position and +! * screen offset. + * Set "curbuf" and "curwin" to match "buf". + * When FEAT_AUTOCMD is not defined another version is used, see below. + */ +--- 8381,8388 ---- + + /* + * Prepare for executing autocommands for (hidden) buffer "buf". +! * Search for a visible window containing the current buffer. If there isn't +! * one then use "aucmd_win". + * Set "curbuf" and "curwin" to match "buf". + * When FEAT_AUTOCMD is not defined another version is used, see below. + */ +*************** +*** 8392,8399 **** + buf_T *buf; /* new curbuf */ + { + win_T *win; +! +! aco->new_curbuf = buf; + + /* Find a window that is for the new buffer */ + if (buf == curbuf) /* be quick when buf is curbuf */ +--- 8392,8400 ---- + buf_T *buf; /* new curbuf */ + { + win_T *win; +! #ifdef FEAT_WINDOWS +! int save_ea; +! #endif + + /* Find a window that is for the new buffer */ + if (buf == curbuf) /* be quick when buf is curbuf */ +*************** +*** 8407,8448 **** + win = NULL; + #endif + +! /* +! * Prefer to use an existing window for the buffer, it has the least side +! * effects (esp. if "buf" is curbuf). +! * Otherwise, use curwin for "buf". It might make some items in the +! * window invalid. At least save the cursor and topline. +! */ + if (win != NULL) + { +! /* there is a window for "buf", make it the curwin */ +! aco->save_curwin = curwin; + curwin = win; +- aco->save_buf = win->w_buffer; +- aco->new_curwin = win; + } + else + { +! /* there is no window for "buf", use curwin */ +! aco->save_curwin = NULL; +! aco->save_buf = curbuf; +! --curbuf->b_nwindows; + curwin->w_buffer = buf; + ++buf->b_nwindows; + +! /* save cursor and topline, set them to safe values */ +! aco->save_cursor = curwin->w_cursor; +! curwin->w_cursor.lnum = 1; +! curwin->w_cursor.col = 0; +! aco->save_topline = curwin->w_topline; +! curwin->w_topline = 1; +! #ifdef FEAT_DIFF +! aco->save_topfill = curwin->w_topfill; +! curwin->w_topfill = 0; + #endif + } +- + curbuf = buf; + } + + /* +--- 8408,8460 ---- + win = NULL; + #endif + +! /* Allocate "aucmd_win" when needed. If this fails (out of memory) fall +! * back to using the current window. */ +! if (win == NULL && aucmd_win == NULL) +! { +! win_alloc_aucmd_win(); +! if (aucmd_win == NULL) +! win = curwin; +! } +! +! aco->save_curwin = curwin; +! aco->save_curbuf = curbuf; + if (win != NULL) + { +! /* There is a window for "buf" in the current tab page, make it the +! * curwin. This is preferred, it has the least side effects (esp. if +! * "buf" is curbuf). */ + curwin = win; + } + else + { +! /* There is no window for "buf", use "aucmd_win". To minimize the side +! * effects, insert it in a the current tab page. +! * Anything related to a window (e.g., setting folds) may have +! * unexpected results. */ +! curwin = aucmd_win; + curwin->w_buffer = buf; + ++buf->b_nwindows; + +! #ifdef FEAT_WINDOWS +! /* Split the current window, put the aucmd_win in the upper half. */ +! make_snapshot(SNAP_AUCMD_IDX); +! save_ea = p_ea; +! p_ea = FALSE; +! (void)win_split_ins(0, WSP_TOP, aucmd_win, 0); +! (void)win_comp_pos(); /* recompute window positions */ +! p_ea = save_ea; +! #endif +! /* set cursor and topline to safe values */ +! curwin_init(); +! #ifdef FEAT_VERTSPLIT +! curwin->w_wincol = 0; +! curwin->w_width = Columns; + #endif + } + curbuf = buf; ++ aco->new_curwin = curwin; ++ aco->new_curbuf = curbuf; + } + + /* +*************** +*** 8454,8474 **** + aucmd_restbuf(aco) + aco_save_T *aco; /* structure holding saved values */ + { +! if (aco->save_curwin != NULL) + { + /* restore curwin */ + #ifdef FEAT_WINDOWS + if (win_valid(aco->save_curwin)) + #endif + { +! /* restore the buffer which was previously edited by curwin, if +! * it's still the same window and it's valid */ + if (curwin == aco->new_curwin +! && buf_valid(aco->save_buf) +! && aco->save_buf->b_ml.ml_mfp != NULL) + { + --curbuf->b_nwindows; +! curbuf = aco->save_buf; + curwin->w_buffer = curbuf; + ++curbuf->b_nwindows; + } +--- 8466,8551 ---- + aucmd_restbuf(aco) + aco_save_T *aco; /* structure holding saved values */ + { +! #ifdef FEAT_WINDOWS +! int dummy; +! #endif +! +! if (aco->new_curwin == aucmd_win) +! { +! --curbuf->b_nwindows; +! #ifdef FEAT_WINDOWS +! /* Find "aucmd_win", it can't be closed, but it may be in another tab +! * page. */ +! if (curwin != aucmd_win) +! { +! tabpage_T *tp; +! win_T *wp; +! +! FOR_ALL_TAB_WINDOWS(tp, wp) +! { +! if (wp == aucmd_win) +! { +! if (tp != curtab) +! goto_tabpage_tp(tp); +! win_goto(aucmd_win); +! break; +! } +! } +! } +! +! /* Remove the window and frame from the tree of frames. */ +! (void)winframe_remove(curwin, &dummy, NULL); +! win_remove(curwin, NULL); +! last_status(FALSE); /* may need to remove last status line */ +! restore_snapshot(SNAP_AUCMD_IDX, FALSE); +! (void)win_comp_pos(); /* recompute window positions */ +! +! if (win_valid(aco->save_curwin)) +! curwin = aco->save_curwin; +! else +! /* Hmm, original window disappeared. Just use the first one. */ +! curwin = firstwin; +! # ifdef FEAT_EVAL +! vars_clear(&aucmd_win->w_vars.dv_hashtab); /* free all w: variables */ +! # endif +! #else +! curwin = aco->save_curwin; +! #endif +! curbuf = curwin->w_buffer; +! +! /* the buffer contents may have changed */ +! check_cursor(); +! if (curwin->w_topline > curbuf->b_ml.ml_line_count) +! { +! curwin->w_topline = curbuf->b_ml.ml_line_count; +! #ifdef FEAT_DIFF +! curwin->w_topfill = 0; +! #endif +! } +! #if defined(FEAT_GUI) +! /* Hide the scrollbars from the aucmd_win and update. */ +! gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_LEFT], FALSE); +! gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_RIGHT], FALSE); +! gui_may_update_scrollbars(); +! #endif +! } +! else + { + /* restore curwin */ + #ifdef FEAT_WINDOWS + if (win_valid(aco->save_curwin)) + #endif + { +! /* Restore the buffer which was previously edited by curwin, if +! * it was chagned, we are still the same window and the buffer is +! * valid. */ + if (curwin == aco->new_curwin +! && curbuf != aco->new_curbuf +! && buf_valid(aco->new_curbuf) +! && aco->new_curbuf->b_ml.ml_mfp != NULL) + { + --curbuf->b_nwindows; +! curbuf = aco->new_curbuf; + curwin->w_buffer = curbuf; + ++curbuf->b_nwindows; + } +*************** +*** 8477,8510 **** + curbuf = curwin->w_buffer; + } + } +- else +- { +- /* restore buffer for curwin if it still exists and is loaded */ +- if (buf_valid(aco->save_buf) && aco->save_buf->b_ml.ml_mfp != NULL) +- { +- --curbuf->b_nwindows; +- curbuf = aco->save_buf; +- curwin->w_buffer = curbuf; +- ++curbuf->b_nwindows; +- curwin->w_cursor = aco->save_cursor; +- check_cursor(); +- /* check topline < line_count, in case lines got deleted */ +- if (aco->save_topline <= curbuf->b_ml.ml_line_count) +- { +- curwin->w_topline = aco->save_topline; +- #ifdef FEAT_DIFF +- curwin->w_topfill = aco->save_topfill; +- #endif +- } +- else +- { +- curwin->w_topline = curbuf->b_ml.ml_line_count; +- #ifdef FEAT_DIFF +- curwin->w_topfill = 0; +- #endif +- } +- } +- } + } + + static int autocmd_nested = FALSE; +--- 8554,8559 ---- +*************** +*** 9419,9427 **** + aco_save_T *aco; /* structure to save values in */ + buf_T *buf; /* new curbuf */ + { +! aco->save_buf = curbuf; + curbuf = buf; + curwin->w_buffer = buf; + } + + /* +--- 9468,9478 ---- + aco_save_T *aco; /* structure to save values in */ + buf_T *buf; /* new curbuf */ + { +! aco->save_curbuf = curbuf; +! --curbuf->b_nwindows; + curbuf = buf; + curwin->w_buffer = buf; ++ ++curbuf->b_nwindows; + } + + /* +*************** +*** 9432,9439 **** + aucmd_restbuf(aco) + aco_save_T *aco; /* structure holding saved values */ + { +! curbuf = aco->save_buf; + curwin->w_buffer = curbuf; + } + + #endif /* FEAT_AUTOCMD */ +--- 9483,9492 ---- + aucmd_restbuf(aco) + aco_save_T *aco; /* structure holding saved values */ + { +! --curbuf->b_nwindows; +! curbuf = aco->save_curbuf; + curwin->w_buffer = curbuf; ++ ++curbuf->b_nwindows; + } + + #endif /* FEAT_AUTOCMD */ +*** ../vim-7.2.202/src/globals.h 2009-06-16 15:23:07.000000000 +0200 +--- src/globals.h 2009-06-12 21:10:30.000000000 +0200 +*************** +*** 539,544 **** +--- 539,548 ---- + + EXTERN win_T *curwin; /* currently active window */ + ++ #ifdef FEAT_AUTOCMD ++ EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */ ++ #endif ++ + /* + * The window layout is kept in a tree of frames. topframe points to the top + * of the tree. +*** ../vim-7.2.202/src/gui.c 2009-05-21 23:25:38.000000000 +0200 +--- src/gui.c 2009-06-11 20:58:05.000000000 +0200 +*************** +*** 3879,3884 **** +--- 3879,3899 ---- + * Scrollbar stuff: + */ + ++ /* ++ * Called when something in the window layout has changed. ++ */ ++ void ++ gui_may_update_scrollbars() ++ { ++ if (gui.in_use && starting == 0) ++ { ++ out_flush(); ++ gui_init_which_components(NULL); ++ gui_update_scrollbars(TRUE); ++ } ++ need_mouse_correct = TRUE; ++ } ++ + void + gui_update_scrollbars(force) + int force; /* Force all scrollbars to get updated */ +*** ../vim-7.2.202/src/if_perl.xs 2008-12-03 13:18:16.000000000 +0100 +--- src/if_perl.xs 2009-06-03 17:52:51.000000000 +0200 +*************** +*** 1234,1240 **** + { + ml_delete(lnum, 0); + deleted_lines_mark(lnum, 1L); +! if (aco.save_buf == curbuf) + check_cursor(); + } + +--- 1236,1242 ---- + { + ml_delete(lnum, 0); + deleted_lines_mark(lnum, 1L); +! if (aco.save_curbuf == curbuf) + check_cursor(); + } + +*** ../vim-7.2.202/src/proto/gui.pro 2007-05-05 19:42:19.000000000 +0200 +--- src/proto/gui.pro 2009-06-11 20:58:08.000000000 +0200 +*************** +*** 43,48 **** +--- 43,49 ---- + void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp)); + scrollbar_T *gui_find_scrollbar __ARGS((long ident)); + void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging)); ++ void gui_may_update_scrollbars __ARGS((void)); + void gui_update_scrollbars __ARGS((int force)); + int gui_do_scroll __ARGS((void)); + int gui_do_horiz_scroll __ARGS((void)); +*** ../vim-7.2.202/src/proto/window.pro 2007-07-26 22:57:45.000000000 +0200 +--- src/proto/window.pro 2009-06-10 21:20:39.000000000 +0200 +*************** +*** 1,6 **** +--- 1,7 ---- + /* window.c */ + void do_window __ARGS((int nchar, long Prenum, int xchar)); + int win_split __ARGS((int size, int flags)); ++ int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir)); + int win_valid __ARGS((win_T *win)); + int win_count __ARGS((void)); + int make_windows __ARGS((int count, int vertical)); +*************** +*** 10,18 **** +--- 11,21 ---- + void win_close __ARGS((win_T *win, int free_buf)); + void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp)); + void win_free_all __ARGS((void)); ++ win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); + void close_others __ARGS((int message, int forceit)); + void curwin_init __ARGS((void)); + int win_alloc_first __ARGS((void)); ++ void win_alloc_aucmd_win __ARGS((void)); + void win_init_size __ARGS((void)); + void free_tabpage __ARGS((tabpage_T *tp)); + int win_new_tabpage __ARGS((int after)); +*************** +*** 30,35 **** +--- 33,40 ---- + void win_enter __ARGS((win_T *wp, int undo_sync)); + win_T *buf_jump_open_win __ARGS((buf_T *buf)); + win_T *buf_jump_open_tab __ARGS((buf_T *buf)); ++ void win_append __ARGS((win_T *after, win_T *wp)); ++ void win_remove __ARGS((win_T *wp, tabpage_T *tp)); + int win_alloc_lines __ARGS((win_T *wp)); + void win_free_lsize __ARGS((win_T *wp)); + void shell_new_rows __ARGS((void)); +*************** +*** 58,63 **** +--- 63,70 ---- + int min_rows __ARGS((void)); + int only_one_window __ARGS((void)); + void check_lnums __ARGS((int do_curwin)); ++ void make_snapshot __ARGS((int idx)); ++ void restore_snapshot __ARGS((int idx, int close_curwin)); + int win_hasvertsplit __ARGS((void)); + int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id)); + int match_delete __ARGS((win_T *wp, int id, int perr)); +*** ../vim-7.2.202/src/screen.c 2009-05-17 13:30:58.000000000 +0200 +--- src/screen.c 2009-06-10 16:41:45.000000000 +0200 +*************** +*** 7495,7500 **** +--- 7495,7504 ---- + #endif + } + } ++ #ifdef FEAT_AUTOCMD ++ if (aucmd_win != NULL && win_alloc_lines(aucmd_win) == FAIL) ++ outofmem = TRUE; ++ #endif + #ifdef FEAT_WINDOWS + give_up: + #endif +*** ../vim-7.2.202/src/structs.h 2009-05-16 16:36:25.000000000 +0200 +--- src/structs.h 2009-06-13 12:51:56.000000000 +0200 +*************** +*** 1621,1626 **** +--- 1621,1634 ---- + }; + #endif + ++ #define SNAP_HELP_IDX 0 ++ #ifdef FEAT_AUTOCMD ++ # define SNAP_AUCMD_IDX 1 ++ # define SNAP_COUNT 2 ++ #else ++ # define SNAP_COUNT 1 ++ #endif ++ + /* + * Tab pages point to the top frame of each tab page. + * Note: Most values are NOT valid for the current tab page! Use "curwin", +*************** +*** 1649,1655 **** + buf_T *(tp_diffbuf[DB_COUNT]); + int tp_diff_invalid; /* list of diffs is outdated */ + #endif +! frame_T *tp_snapshot; /* window layout snapshot */ + #ifdef FEAT_EVAL + dictitem_T tp_winvar; /* variable for "t:" Dictionary */ + dict_T tp_vars; /* internal variables, local to tab page */ +--- 1657,1663 ---- + buf_T *(tp_diffbuf[DB_COUNT]); + int tp_diff_invalid; /* list of diffs is outdated */ + #endif +! frame_T *(tp_snapshot[SNAP_COUNT]); /* window layout snapshots */ + #ifdef FEAT_EVAL + dictitem_T tp_winvar; /* variable for "t:" Dictionary */ + dict_T tp_vars; /* internal variables, local to tab page */ +*************** +*** 2276,2291 **** + */ + typedef struct + { +! buf_T *save_buf; /* saved curbuf */ + #ifdef FEAT_AUTOCMD +! buf_T *new_curbuf; /* buffer to be used */ +! win_T *save_curwin; /* saved curwin, NULL if it didn't change */ +! win_T *new_curwin; /* new curwin if save_curwin != NULL */ +! pos_T save_cursor; /* saved cursor pos of save_curwin */ +! linenr_T save_topline; /* saved topline of save_curwin */ +! # ifdef FEAT_DIFF +! int save_topfill; /* saved topfill of save_curwin */ +! # endif + #endif + } aco_save_T; + +--- 2284,2294 ---- + */ + typedef struct + { +! buf_T *save_curbuf; /* saved curbuf */ + #ifdef FEAT_AUTOCMD +! win_T *save_curwin; /* saved curwin */ +! win_T *new_curwin; /* new curwin */ +! buf_T *new_curbuf; /* new curbuf */ + #endif + } aco_save_T; + +*** ../vim-7.2.202/src/window.c 2009-05-21 23:25:38.000000000 +0200 +--- src/window.c 2009-06-12 22:29:33.000000000 +0200 +*************** +*** 11,18 **** + + static int path_is_url __ARGS((char_u *p)); + #if defined(FEAT_WINDOWS) || defined(PROTO) +- static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir)); + static void win_init __ARGS((win_T *newp, win_T *oldp, int flags)); + static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col)); + static void frame_setheight __ARGS((frame_T *curfrp, int height)); + #ifdef FEAT_VERTSPLIT +--- 11,18 ---- + + static int path_is_url __ARGS((char_u *p)); + #if defined(FEAT_WINDOWS) || defined(PROTO) + static void win_init __ARGS((win_T *newp, win_T *oldp, int flags)); ++ static void win_init_some __ARGS((win_T *newp, win_T *oldp)); + static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col)); + static void frame_setheight __ARGS((frame_T *curfrp, int height)); + #ifdef FEAT_VERTSPLIT +*************** +*** 23,30 **** + static void win_totop __ARGS((int size, int flags)); + static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height)); + static int last_window __ARGS((void)); + static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp)); +- static win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); + static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp)); + static tabpage_T *alt_tabpage __ARGS((void)); + static win_T *frame2win __ARGS((frame_T *frp)); +--- 23,30 ---- + static void win_totop __ARGS((int size, int flags)); + static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height)); + static int last_window __ARGS((void)); ++ static int one_window __ARGS((void)); + static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp)); + static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp)); + static tabpage_T *alt_tabpage __ARGS((void)); + static win_T *frame2win __ARGS((frame_T *frp)); +*************** +*** 41,46 **** +--- 41,47 ---- + #endif + #endif + static int win_alloc_firstwin __ARGS((win_T *oldwin)); ++ static void new_frame __ARGS((win_T *wp)); + #if defined(FEAT_WINDOWS) || defined(PROTO) + static tabpage_T *alloc_tabpage __ARGS((void)); + static int leave_tabpage __ARGS((buf_T *new_curbuf)); +*************** +*** 49,56 **** + static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin)); + static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin)); + static void win_free __ARGS((win_T *wp, tabpage_T *tp)); +- static void win_append __ARGS((win_T *, win_T *)); +- static void win_remove __ARGS((win_T *, tabpage_T *tp)); + static void frame_append __ARGS((frame_T *after, frame_T *frp)); + static void frame_insert __ARGS((frame_T *before, frame_T *frp)); + static void frame_remove __ARGS((frame_T *frp)); +--- 50,55 ---- +*************** +*** 62,78 **** + static void frame_add_height __ARGS((frame_T *frp, int n)); + static void last_status_rec __ARGS((frame_T *fr, int statusline)); + +- static void make_snapshot __ARGS((void)); + static void make_snapshot_rec __ARGS((frame_T *fr, frame_T **frp)); +! static void clear_snapshot __ARGS((tabpage_T *tp)); + static void clear_snapshot_rec __ARGS((frame_T *fr)); +- static void restore_snapshot __ARGS((int close_curwin)); + static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); + static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); + + #endif /* FEAT_WINDOWS */ + +! static win_T *win_alloc __ARGS((win_T *after)); + static void win_new_height __ARGS((win_T *, int)); + + #define URL_SLASH 1 /* path_is_url() has found "://" */ +--- 61,75 ---- + static void frame_add_height __ARGS((frame_T *frp, int n)); + static void last_status_rec __ARGS((frame_T *fr, int statusline)); + + static void make_snapshot_rec __ARGS((frame_T *fr, frame_T **frp)); +! static void clear_snapshot __ARGS((tabpage_T *tp, int idx)); + static void clear_snapshot_rec __ARGS((frame_T *fr)); + static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); + static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr)); + + #endif /* FEAT_WINDOWS */ + +! static win_T *win_alloc __ARGS((win_T *after, int hidden)); + static void win_new_height __ARGS((win_T *, int)); + + #define URL_SLASH 1 /* path_is_url() has found "://" */ +*************** +*** 259,265 **** + /* cursor to previous window with wrap around */ + case 'W': + CHECK_CMDWIN +! if (lastwin == firstwin && Prenum != 1) /* just one window */ + beep_flush(); + else + { +--- 256,262 ---- + /* cursor to previous window with wrap around */ + case 'W': + CHECK_CMDWIN +! if (firstwin == lastwin && Prenum != 1) /* just one window */ + beep_flush(); + else + { +*************** +*** 343,349 **** + + /* move window to new tab page */ + case 'T': +! if (firstwin == lastwin) + MSG(_(m_onlyone)); + else + { +--- 340,346 ---- + + /* move window to new tab page */ + case 'T': +! if (one_window()) + MSG(_(m_onlyone)); + else + { +*************** +*** 679,687 **** + /* When creating the help window make a snapshot of the window layout. + * Otherwise clear the snapshot, it's now invalid. */ + if (flags & WSP_HELP) +! make_snapshot(); + else +! clear_snapshot(curtab); + + return win_split_ins(size, flags, NULL, 0); + } +--- 676,684 ---- + /* When creating the help window make a snapshot of the window layout. + * Otherwise clear the snapshot, it's now invalid. */ + if (flags & WSP_HELP) +! make_snapshot(SNAP_HELP_IDX); + else +! clear_snapshot(curtab, SNAP_HELP_IDX); + + return win_split_ins(size, flags, NULL, 0); + } +*************** +*** 692,698 **** + * top/left/right/bottom. + * return FAIL for failure, OK otherwise + */ +! static int + win_split_ins(size, flags, newwin, dir) + int size; + int flags; +--- 689,695 ---- + * top/left/right/bottom. + * return FAIL for failure, OK otherwise + */ +! int + win_split_ins(size, flags, newwin, dir) + int size; + int flags; +*************** +*** 893,906 **** + { + /* new window below/right of current one */ + if (newwin == NULL) +! wp = win_alloc(oldwin); + else + win_append(oldwin, wp); + } + else + { + if (newwin == NULL) +! wp = win_alloc(oldwin->w_prev); + else + win_append(oldwin->w_prev, wp); + } +--- 890,903 ---- + { + /* new window below/right of current one */ + if (newwin == NULL) +! wp = win_alloc(oldwin, FALSE); + else + win_append(oldwin, wp); + } + else + { + if (newwin == NULL) +! wp = win_alloc(oldwin->w_prev, FALSE); + else + win_append(oldwin->w_prev, wp); + } +*************** +*** 910,915 **** +--- 907,919 ---- + if (wp == NULL) + return FAIL; + ++ new_frame(wp); ++ if (wp->w_frame == NULL) ++ { ++ win_free(wp, NULL); ++ return FAIL; ++ } ++ + /* make the contents of the new window the same as the current one */ + win_init(wp, curwin, flags); + } +*************** +*** 970,982 **** + } + + if (newwin == NULL) +! { +! /* Create a frame for the new window. */ +! frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T)); +! frp->fr_layout = FR_LEAF; +! frp->fr_win = wp; +! wp->w_frame = frp; +! } + else + frp = newwin->w_frame; + frp->fr_parent = curfrp->fr_parent; +--- 974,980 ---- + } + + if (newwin == NULL) +! frp = wp->w_frame; + else + frp = newwin->w_frame; + frp->fr_parent = curfrp->fr_parent; +*************** +*** 1156,1161 **** +--- 1154,1160 ---- + return OK; + } + ++ + /* + * Initialize window "newp" from window "oldp". + * Used when splitting a window and when creating a new tab page. +*************** +*** 1204,1217 **** + if (oldp->w_localdir != NULL) + newp->w_localdir = vim_strsave(oldp->w_localdir); + +! /* Use the same argument list. */ +! newp->w_alist = oldp->w_alist; +! ++newp->w_alist->al_refcount; +! newp->w_arg_idx = oldp->w_arg_idx; +! +! /* +! * copy tagstack and options from existing window +! */ + for (i = 0; i < oldp->w_tagstacklen; i++) + { + newp->w_tagstack[i] = oldp->w_tagstack[i]; +--- 1203,1209 ---- + if (oldp->w_localdir != NULL) + newp->w_localdir = vim_strsave(oldp->w_localdir); + +! /* copy tagstack and folds */ + for (i = 0; i < oldp->w_tagstacklen; i++) + { + newp->w_tagstack[i] = oldp->w_tagstack[i]; +*************** +*** 1221,1230 **** + } + newp->w_tagstackidx = oldp->w_tagstackidx; + newp->w_tagstacklen = oldp->w_tagstacklen; +- win_copy_options(oldp, newp); + # ifdef FEAT_FOLDING + copyFoldingState(oldp, newp); + # endif + } + + #endif /* FEAT_WINDOWS */ +--- 1213,1241 ---- + } + newp->w_tagstackidx = oldp->w_tagstackidx; + newp->w_tagstacklen = oldp->w_tagstacklen; + # ifdef FEAT_FOLDING + copyFoldingState(oldp, newp); + # endif ++ ++ win_init_some(newp, oldp); ++ } ++ ++ /* ++ * Initialize window "newp" from window"old". ++ * Only the essential things are copied. ++ */ ++ static void ++ win_init_some(newp, oldp) ++ win_T *newp; ++ win_T *oldp; ++ { ++ /* Use the same argument list. */ ++ newp->w_alist = oldp->w_alist; ++ ++newp->w_alist->al_refcount; ++ newp->w_arg_idx = oldp->w_arg_idx; ++ ++ /* copy options from existing window */ ++ win_copy_options(oldp, newp); + } + + #endif /* FEAT_WINDOWS */ +*************** +*** 1565,1579 **** + #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT) + /* When 'guioptions' includes 'L' or 'R' may have to remove or add + * scrollbars. Have to update them anyway. */ +! if (gui.in_use) +! { +! out_flush(); +! gui_init_which_components(NULL); +! gui_update_scrollbars(TRUE); +! } +! need_mouse_correct = TRUE; + #endif +- + } + + /* +--- 1576,1583 ---- + #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT) + /* When 'guioptions' includes 'L' or 'R' may have to remove or add + * scrollbars. Have to update them anyway. */ +! gui_may_update_scrollbars(); + #endif + } + + /* +*************** +*** 2048,2060 **** + } + + /* +! * Return TRUE if the current window is the only window that exists. + * Returns FALSE if there is a window, possibly in another tab page. + */ + static int + last_window() + { +! return (lastwin == firstwin && first_tabpage->tp_next == NULL); + } + + /* +--- 2052,2091 ---- + } + + /* +! * Return TRUE if the current window is the only window that exists (ignoring +! * "aucmd_win"). + * Returns FALSE if there is a window, possibly in another tab page. + */ + static int + last_window() + { +! return (one_window() && first_tabpage->tp_next == NULL); +! } +! +! /* +! * Return TRUE if there is only one window other than "aucmd_win" in the +! * current tab page. +! */ +! static int +! one_window() +! { +! #ifdef FEAT_AUTOCMD +! win_T *wp; +! int seen_one = FALSE; +! +! FOR_ALL_WINDOWS(wp) +! { +! if (wp != aucmd_win) +! { +! if (seen_one) +! return FALSE; +! seen_one = TRUE; +! } +! } +! return TRUE; +! #else +! return firstwin == lastwin; +! #endif + } + + /* +*************** +*** 2083,2088 **** +--- 2114,2132 ---- + return; + } + ++ #ifdef FEAT_AUTOCMD ++ if (win == aucmd_win) ++ { ++ EMSG(_("E813: Cannot close autocmd window")); ++ return; ++ } ++ if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window()) ++ { ++ EMSG(_("E814: Cannot close window, only autocmd window would remain")); ++ return; ++ } ++ #endif ++ + /* + * When closing the last window in a tab page first go to another tab + * page and then close the window and the tab page. This avoids that +*************** +*** 2112,2118 **** + if (win->w_buffer->b_help) + help_window = TRUE; + else +! clear_snapshot(curtab); + + #ifdef FEAT_AUTOCMD + if (win == curwin) +--- 2156,2162 ---- + if (win->w_buffer->b_help) + help_window = TRUE; + else +! clear_snapshot(curtab, SNAP_HELP_IDX); + + #ifdef FEAT_AUTOCMD + if (win == curwin) +*************** +*** 2229,2235 **** + /* After closing the help window, try restoring the window layout from + * before it was opened. */ + if (help_window) +! restore_snapshot(close_curwin); + + #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT) + /* When 'guioptions' includes 'L' or 'R' may have to remove scrollbars. */ +--- 2273,2279 ---- + /* After closing the help window, try restoring the window layout from + * before it was opened. */ + if (help_window) +! restore_snapshot(SNAP_HELP_IDX, close_curwin); + + #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT) + /* When 'guioptions' includes 'L' or 'R' may have to remove scrollbars. */ +*************** +*** 2344,2349 **** +--- 2388,2401 ---- + + while (firstwin != NULL) + (void)win_free_mem(firstwin, &dummy, NULL); ++ ++ # ifdef FEAT_AUTOCMD ++ if (aucmd_win != NULL) ++ { ++ (void)win_free_mem(aucmd_win, &dummy, NULL); ++ aucmd_win = NULL; ++ } ++ # endif + } + #endif + +*************** +*** 2351,2357 **** + * Remove a window and its frame from the tree of frames. + * Returns a pointer to the window that got the freed up space. + */ +! static win_T * + winframe_remove(win, dirp, tp) + win_T *win; + int *dirp UNUSED; /* set to 'v' or 'h' for direction if 'ea' */ +--- 2403,2409 ---- + * Remove a window and its frame from the tree of frames. + * Returns a pointer to the window that got the freed up space. + */ +! win_T * + winframe_remove(win, dirp, tp) + win_T *win; + int *dirp UNUSED; /* set to 'v' or 'h' for direction if 'ea' */ +*************** +*** 3090,3096 **** + win_T *nextwp; + int r; + +! if (lastwin == firstwin) + { + if (message + #ifdef FEAT_AUTOCMD +--- 3142,3148 ---- + win_T *nextwp; + int r; + +! if (one_window()) + { + if (message + #ifdef FEAT_AUTOCMD +*************** +*** 3194,3202 **** +--- 3246,3275 ---- + first_tabpage->tp_topframe = topframe; + curtab = first_tabpage; + #endif ++ + return OK; + } + ++ #if defined(FEAT_AUTOCMD) || defined(PROTO) ++ /* ++ * Init "aucmd_win". This can only be done after the first ++ * window is fully initialized, thus it can't be in win_alloc_first(). ++ */ ++ void ++ win_alloc_aucmd_win() ++ { ++ aucmd_win = win_alloc(NULL, TRUE); ++ if (aucmd_win != NULL) ++ { ++ win_init_some(aucmd_win, curwin); ++ # ifdef FEAT_SCROLLBIND ++ aucmd_win->w_p_scb = FALSE; ++ # endif ++ new_frame(aucmd_win); ++ } ++ } ++ #endif ++ + /* + * Allocate the first window or the first window in a new tab page. + * When "oldwin" is NULL create an empty buffer for it. +*************** +*** 3208,3214 **** + win_alloc_firstwin(oldwin) + win_T *oldwin; + { +! curwin = win_alloc(NULL); + if (oldwin == NULL) + { + /* Very first window, need to create an empty buffer for it and +--- 3281,3287 ---- + win_alloc_firstwin(oldwin) + win_T *oldwin; + { +! curwin = win_alloc(NULL, FALSE); + if (oldwin == NULL) + { + /* Very first window, need to create an empty buffer for it and +*************** +*** 3236,3256 **** + } + #endif + +! topframe = (frame_T *)alloc_clear((unsigned)sizeof(frame_T)); +! if (topframe == NULL) + return FAIL; +! topframe->fr_layout = FR_LEAF; + #ifdef FEAT_VERTSPLIT + topframe->fr_width = Columns; + #endif + topframe->fr_height = Rows - p_ch; + topframe->fr_win = curwin; +- curwin->w_frame = topframe; + + return OK; + } + + /* + * Initialize the window and frame size to the maximum. + */ + void +--- 3309,3344 ---- + } + #endif + +! new_frame(curwin); +! if (curwin->w_frame == NULL) + return FAIL; +! topframe = curwin->w_frame; + #ifdef FEAT_VERTSPLIT + topframe->fr_width = Columns; + #endif + topframe->fr_height = Rows - p_ch; + topframe->fr_win = curwin; + + return OK; + } + + /* ++ * Create a frame for window "wp". ++ */ ++ static void ++ new_frame(win_T *wp) ++ { ++ frame_T *frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T)); ++ ++ wp->w_frame = frp; ++ if (frp != NULL) ++ { ++ frp->fr_layout = FR_LEAF; ++ frp->fr_win = wp; ++ } ++ } ++ ++ /* + * Initialize the window and frame size to the maximum. + */ + void +*************** +*** 3300,3309 **** + free_tabpage(tp) + tabpage_T *tp; + { + # ifdef FEAT_DIFF + diff_clear(tp); + # endif +! clear_snapshot(tp); + #ifdef FEAT_EVAL + vars_clear(&tp->tp_vars.dv_hashtab); /* free all t: variables */ + #endif +--- 3388,3400 ---- + free_tabpage(tp) + tabpage_T *tp; + { ++ int idx; ++ + # ifdef FEAT_DIFF + diff_clear(tp); + # endif +! for (idx = 0; idx < SNAP_COUNT; ++idx) +! clear_snapshot(tp, idx); + #ifdef FEAT_EVAL + vars_clear(&tp->tp_vars.dv_hashtab); /* free all t: variables */ + #endif +*************** +*** 3370,3381 **** + #if defined(FEAT_GUI) + /* When 'guioptions' includes 'L' or 'R' may have to remove or add + * scrollbars. Have to update them anyway. */ +! if (gui.in_use && starting == 0) +! { +! gui_init_which_components(NULL); +! gui_update_scrollbars(TRUE); +! } +! need_mouse_correct = TRUE; + #endif + + redraw_all_later(CLEAR); +--- 3461,3467 ---- + #if defined(FEAT_GUI) + /* When 'guioptions' includes 'L' or 'R' may have to remove or add + * scrollbars. Have to update them anyway. */ +! gui_may_update_scrollbars(); + #endif + + redraw_all_later(CLEAR); +*************** +*** 3593,3604 **** + #if defined(FEAT_GUI) + /* When 'guioptions' includes 'L' or 'R' may have to remove or add + * scrollbars. Have to update them anyway. */ +! if (gui.in_use && starting == 0) +! { +! gui_init_which_components(NULL); +! gui_update_scrollbars(TRUE); +! } +! need_mouse_correct = TRUE; + #endif + + redraw_all_later(CLEAR); +--- 3679,3685 ---- + #if defined(FEAT_GUI) + /* When 'guioptions' includes 'L' or 'R' may have to remove or add + * scrollbars. Have to update them anyway. */ +! gui_may_update_scrollbars(); + #endif + + redraw_all_later(CLEAR); +*************** +*** 4150,4160 **** + #endif + + /* +! * allocate a window structure and link it in the window list + */ + static win_T * +! win_alloc(after) + win_T *after UNUSED; + { + win_T *newwin; + +--- 4231,4243 ---- + #endif + + /* +! * Allocate a window structure and link it in the window list when "hidden" is +! * FALSE. + */ + static win_T * +! win_alloc(after, hidden) + win_T *after UNUSED; ++ int hidden UNUSED; + { + win_T *newwin; + +*************** +*** 4180,4186 **** + * link the window in the window list + */ + #ifdef FEAT_WINDOWS +! win_append(after, newwin); + #endif + #ifdef FEAT_VERTSPLIT + newwin->w_wincol = 0; +--- 4263,4270 ---- + * link the window in the window list + */ + #ifdef FEAT_WINDOWS +! if (!hidden) +! win_append(after, newwin); + #endif + #ifdef FEAT_VERTSPLIT + newwin->w_wincol = 0; +*************** +*** 4314,4320 **** + /* + * Append window "wp" in the window list after window "after". + */ +! static void + win_append(after, wp) + win_T *after, *wp; + { +--- 4398,4404 ---- + /* + * Append window "wp" in the window list after window "after". + */ +! void + win_append(after, wp) + win_T *after, *wp; + { +*************** +*** 4340,4346 **** + /* + * Remove a window from the window list. + */ +! static void + win_remove(wp, tp) + win_T *wp; + tabpage_T *tp; /* tab page "win" is in, NULL for current */ +--- 4424,4430 ---- + /* + * Remove a window from the window list. + */ +! void + win_remove(wp, tp) + win_T *wp; + tabpage_T *tp; /* tab page "win" is in, NULL for current */ +*************** +*** 6040,6045 **** +--- 6124,6130 ---- + /* + * Return TRUE if there is only one window (in the current tab page), not + * counting a help or preview window, unless it is the current window. ++ * Does not count "aucmd_win". + */ + int + only_one_window() +*************** +*** 6053,6063 **** + return FALSE; + + for (wp = firstwin; wp != NULL; wp = wp->w_next) +! if (!((wp->w_buffer->b_help && !curbuf->b_help) + # ifdef FEAT_QUICKFIX + || wp->w_p_pvw + # endif + ) || wp == curwin) + ++count; + return (count <= 1); + #else +--- 6138,6152 ---- + return FALSE; + + for (wp = firstwin; wp != NULL; wp = wp->w_next) +! if ((!((wp->w_buffer->b_help && !curbuf->b_help) + # ifdef FEAT_QUICKFIX + || wp->w_p_pvw + # endif + ) || wp == curwin) ++ # ifdef FEAT_AUTOCMD ++ && wp != aucmd_win ++ # endif ++ ) + ++count; + return (count <= 1); + #else +*************** +*** 6112,6122 **** + /* + * Create a snapshot of the current frame sizes. + */ +! static void +! make_snapshot() + { +! clear_snapshot(curtab); +! make_snapshot_rec(topframe, &curtab->tp_snapshot); + } + + static void +--- 6201,6212 ---- + /* + * Create a snapshot of the current frame sizes. + */ +! void +! make_snapshot(idx) +! int idx; + { +! clear_snapshot(curtab, idx); +! make_snapshot_rec(topframe, &curtab->tp_snapshot[idx]); + } + + static void +*************** +*** 6144,6154 **** + * Remove any existing snapshot. + */ + static void +! clear_snapshot(tp) + tabpage_T *tp; + { +! clear_snapshot_rec(tp->tp_snapshot); +! tp->tp_snapshot = NULL; + } + + static void +--- 6234,6245 ---- + * Remove any existing snapshot. + */ + static void +! clear_snapshot(tp, idx) + tabpage_T *tp; ++ int idx; + { +! clear_snapshot_rec(tp->tp_snapshot[idx]); +! tp->tp_snapshot[idx] = NULL; + } + + static void +*************** +*** 6168,6193 **** + * This is only done if the screen size didn't change and the window layout is + * still the same. + */ +! static void +! restore_snapshot(close_curwin) + int close_curwin; /* closing current window */ + { + win_T *wp; + +! if (curtab->tp_snapshot != NULL + # ifdef FEAT_VERTSPLIT +! && curtab->tp_snapshot->fr_width == topframe->fr_width + # endif +! && curtab->tp_snapshot->fr_height == topframe->fr_height +! && check_snapshot_rec(curtab->tp_snapshot, topframe) == OK) + { +! wp = restore_snapshot_rec(curtab->tp_snapshot, topframe); + win_comp_pos(); + if (wp != NULL && close_curwin) + win_goto(wp); + redraw_all_later(CLEAR); + } +! clear_snapshot(curtab); + } + + /* +--- 6259,6285 ---- + * This is only done if the screen size didn't change and the window layout is + * still the same. + */ +! void +! restore_snapshot(idx, close_curwin) +! int idx; + int close_curwin; /* closing current window */ + { + win_T *wp; + +! if (curtab->tp_snapshot[idx] != NULL + # ifdef FEAT_VERTSPLIT +! && curtab->tp_snapshot[idx]->fr_width == topframe->fr_width + # endif +! && curtab->tp_snapshot[idx]->fr_height == topframe->fr_height +! && check_snapshot_rec(curtab->tp_snapshot[idx], topframe) == OK) + { +! wp = restore_snapshot_rec(curtab->tp_snapshot[idx], topframe); + win_comp_pos(); + if (wp != NULL && close_curwin) + win_goto(wp); + redraw_all_later(CLEAR); + } +! clear_snapshot(curtab, idx); + } + + /* +*** ../vim-7.2.202/src/version.c 2009-06-16 15:35:46.000000000 +0200 +--- src/version.c 2009-06-16 15:37:16.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 203, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.204 b/7.2.204 new file mode 100644 index 00000000..ef99c519 --- /dev/null +++ b/7.2.204 @@ -0,0 +1,137 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.204 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.204 (extra) +Problem: Win32: Can't build with Visual Studio 2010 beta 1. +Solution: Fix the makefile. (George Reilly) +Files: src/Make_mvc.mak + + +*** ../vim-7.2.203/src/Make_mvc.mak 2009-05-26 22:58:43.000000000 +0200 +--- src/Make_mvc.mak 2009-06-16 16:27:59.000000000 +0200 +*************** +*** 1,18 **** + # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me) + # and Win64, using the Microsoft Visual C++ compilers. Known to work with + # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005), +! # and VC9 (VS2008). + # + # To build using other Windows compilers, see INSTALLpc.txt + # + # This makefile can build the console, GUI, OLE-enable, Perl-enabled and +! # Python-enabled versions of vim for Win32 platforms. + # +! # The basic command line to build vim is: + # + # nmake -f Make_mvc.mak + # +! # This will build the console version of vim with no additional interfaces. + # To add features, define any of the following: + # + # !!!! After changing features do "nmake clean" first !!!! +--- 1,18 ---- + # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me) + # and Win64, using the Microsoft Visual C++ compilers. Known to work with + # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005), +! # VC9 (VS2008), and VC10 (VS2010). + # + # To build using other Windows compilers, see INSTALLpc.txt + # + # This makefile can build the console, GUI, OLE-enable, Perl-enabled and +! # Python-enabled versions of Vim for Win32 platforms. + # +! # The basic command line to build Vim is: + # + # nmake -f Make_mvc.mak + # +! # This will build the console version of Vim with no additional interfaces. + # To add features, define any of the following: + # + # !!!! After changing features do "nmake clean" first !!!! +*************** +*** 358,363 **** +--- 358,366 ---- + !if "$(_NMAKE_VER)" == "9.00.30729.01" + MSVCVER = 9.0 + !endif ++ !if "$(_NMAKE_VER)" == "10.00.20506.01" ++ MSVCVER = 10.0 ++ !endif + !endif + + # Abort bulding VIM if version of VC is unrecognised. +*************** +*** 372,378 **** + !endif + + # Convert processor ID to MVC-compatible number +! !if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") + !if "$(CPUNR)" == "i386" + CPUARG = /G3 + !elseif "$(CPUNR)" == "i486" +--- 375,381 ---- + !endif + + # Convert processor ID to MVC-compatible number +! !if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") + !if "$(CPUNR)" == "i386" + CPUARG = /G3 + !elseif "$(CPUNR)" == "i486" +*************** +*** 405,411 **** + !else # MAXSPEED + OPTFLAG = /Ox + !endif +! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") + # Use link time code generation if not worried about size + !if "$(OPTIMIZE)" != "SPACE" + OPTFLAG = $(OPTFLAG) /GL +--- 408,414 ---- + !else # MAXSPEED + OPTFLAG = /Ox + !endif +! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") + # Use link time code generation if not worried about size + !if "$(OPTIMIZE)" != "SPACE" + OPTFLAG = $(OPTFLAG) /GL +*************** +*** 793,799 **** + + # Report link time code generation progress if used. + !ifdef NODEBUG +! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") + !if "$(OPTIMIZE)" != "SPACE" + LINKARGS1 = $(LINKARGS1) /LTCG:STATUS + !endif +--- 796,802 ---- + + # Report link time code generation progress if used. + !ifdef NODEBUG +! !if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") + !if "$(OPTIMIZE)" != "SPACE" + LINKARGS1 = $(LINKARGS1) /LTCG:STATUS + !endif +*** ../vim-7.2.203/src/version.c 2009-06-16 16:01:34.000000000 +0200 +--- src/version.c 2009-06-16 16:32:41.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 204, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.205 b/7.2.205 new file mode 100644 index 00000000..2af50678 --- /dev/null +++ b/7.2.205 @@ -0,0 +1,81 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.205 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.205 (extra) +Problem: Win32: No support for High DPI awarenes. +Solution: Fix the manifest file. (George Reilly) +Files: src/Make_mvc.mak, src/gvim.exe.mnf + + +*** ../vim-7.2.204/src/Make_mvc.mak 2009-06-16 16:34:12.000000000 +0200 +--- src/Make_mvc.mak 2009-06-16 16:36:32.000000000 +0200 +*************** +*** 1040,1046 **** + $(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c + $(CC) $(CFLAGS) $(XPM_INC) xpm_w32.c + +! $(OUTDIR)/vim.res: $(OUTDIR) vim.rc version.h tools.bmp tearoff.bmp \ + vim.ico vim_error.ico vim_alert.ico vim_info.ico vim_quest.ico + $(RC) /l 0x409 /Fo$(OUTDIR)/vim.res $(RCFLAGS) vim.rc + +--- 1040,1046 ---- + $(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c + $(CC) $(CFLAGS) $(XPM_INC) xpm_w32.c + +! $(OUTDIR)/vim.res: $(OUTDIR) vim.rc gvim.exe.mnf version.h tools.bmp tearoff.bmp \ + vim.ico vim_error.ico vim_alert.ico vim_info.ico vim_quest.ico + $(RC) /l 0x409 /Fo$(OUTDIR)/vim.res $(RCFLAGS) vim.rc + +*** ../vim-7.2.204/src/gvim.exe.mnf 2008-08-09 19:37:29.000000000 +0200 +--- src/gvim.exe.mnf 2009-06-16 16:36:32.000000000 +0200 +*************** +*** 1,5 **** + +! + +! + + + ++ ++ ++ ++ true ++ ++ + +*** ../vim-7.2.204/src/version.c 2009-06-16 16:34:12.000000000 +0200 +--- src/version.c 2009-06-16 16:43:04.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 205, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +17. When the money comes out the ATM, scream "I won!, I won! 3rd + time this week!!!!!" + + /// 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/7.2.206 b/7.2.206 new file mode 100644 index 00000000..e16fb7e1 --- /dev/null +++ b/7.2.206 @@ -0,0 +1,46 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.206 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.206 +Problem: Win32: Can't build netbeans interface with Visual Studio 2010. +Solution: Undefine ECONNREFUSED. (George Reilly) +Files: src/netbeans.c + + +*** ../vim-7.2.205/src/netbeans.c 2009-05-17 23:25:16.000000000 +0200 +--- src/netbeans.c 2009-06-16 16:39:17.000000000 +0200 +*************** +*** 32,37 **** +--- 32,38 ---- + /* WinSock API is separated from C API, thus we can't use read(), write(), + * errno... */ + # define sock_errno WSAGetLastError() ++ # undef ECONNREFUSED + # define ECONNREFUSED WSAECONNREFUSED + # ifdef EINTR + # undef EINTR +*** ../vim-7.2.205/src/version.c 2009-06-16 16:45:14.000000000 +0200 +--- src/version.c 2009-06-16 16:57:45.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 206, + /**/ + +-- +How To Keep A Healthy Level Of Insanity: +18. When leaving the zoo, start running towards the parking lot, + yelling "run for your lives, they're loose!!" + + /// 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/7.2.207 b/7.2.207 new file mode 100644 index 00000000..528d35da --- /dev/null +++ b/7.2.207 @@ -0,0 +1,69 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.207 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.207 +Problem: Using freed memory with ":redrawstatus" when it works recursively. +Solution: Prevent recursively updating the status line. (partly by Dominique + Pelle) +Files: src/screen.c + + +*** ../vim-7.2.206/src/screen.c 2009-06-16 16:01:34.000000000 +0200 +--- src/screen.c 2009-06-16 17:04:53.000000000 +0200 +*************** +*** 5743,5748 **** +--- 5743,5755 ---- + int fillchar; + int attr; + int this_ru_col; ++ static int busy = FALSE; ++ ++ /* It's possible to get here recursively when 'statusline' (indirectly) ++ * invokes ":redrawstatus". Simply ignore the call then. */ ++ if (busy) ++ return; ++ busy = TRUE; + + wp->w_redr_status = FALSE; + if (wp->w_status_height == 0) +*************** +*** 5881,5886 **** +--- 5888,5894 ---- + attr); + } + #endif ++ busy = FALSE; + } + + #ifdef FEAT_STL_OPT +*** ../vim-7.2.206/src/version.c 2009-06-16 16:57:53.000000000 +0200 +--- src/version.c 2009-06-16 17:21:56.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 207, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.208 b/7.2.208 new file mode 100644 index 00000000..930770d0 --- /dev/null +++ b/7.2.208 @@ -0,0 +1,82 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.208 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.208 +Problem: "set novice" gives an error message, it should be ignored. +Solution: Don't see "no" in "novice" as unsetting an option. (Patrick + Texier) +Files: src/option.c + + +*** ../vim-7.2.207/src/option.c 2009-06-16 15:23:07.000000000 +0200 +--- src/option.c 2009-06-16 17:35:08.000000000 +0200 +*************** +*** 4006,4012 **** + else + { + prefix = 1; +! if (STRNCMP(arg, "no", 2) == 0) + { + prefix = 0; + arg += 2; +--- 4006,4012 ---- + else + { + prefix = 1; +! if (STRNCMP(arg, "no", 2) == 0 && STRNCMP(arg, "novice", 6) != 0) + { + prefix = 0; + arg += 2; +*************** +*** 9757,9763 **** + } + --p; + } +! if (STRNCMP(p, "no", 2) == 0) + { + xp->xp_context = EXPAND_BOOL_SETTINGS; + p += 2; +--- 9757,9763 ---- + } + --p; + } +! if (STRNCMP(p, "no", 2) == 0 && STRNCMP(p, "novice", 6) != 0) + { + xp->xp_context = EXPAND_BOOL_SETTINGS; + p += 2; +*** ../vim-7.2.207/src/version.c 2009-06-16 17:22:38.000000000 +0200 +--- src/version.c 2009-06-16 17:50:33.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 208, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.209 b/7.2.209 new file mode 100644 index 00000000..1cc33935 --- /dev/null +++ b/7.2.209 @@ -0,0 +1,82 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.209 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.209 +Problem: For xxd setmode() is undefined on Cygwin. +Solution: Include io.h. (Dominique Pelle) +Files: src/xxd/xxd.c + + +*** ../vim-7.2.208/src/xxd/xxd.c 2007-12-03 21:32:21.000000000 +0100 +--- src/xxd/xxd.c 2009-06-16 18:03:14.000000000 +0200 +*************** +*** 64,69 **** +--- 64,72 ---- + # define _CRT_SECURE_NO_DEPRECATE + # define _CRT_NONSTDC_NO_DEPRECATE + #endif ++ #if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__)) ++ # define CYGWIN ++ #endif + + #include + #ifdef VAXC +*************** +*** 77,83 **** + #if !defined(OS2) && defined(__EMX__) + # define OS2 + #endif +! #if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(__BORLANDC__) + # include /* for setmode() */ + #else + # ifdef UNIX +--- 80,87 ---- + #if !defined(OS2) && defined(__EMX__) + # define OS2 + #endif +! #if defined(MSDOS) || defined(WIN32) || defined(OS2) || defined(__BORLANDC__) \ +! || defined(CYGWIN) + # include /* for setmode() */ + #else + # ifdef UNIX +*************** +*** 150,158 **** + # endif + #endif + +- #if !defined(CYGWIN) && (defined(CYGWIN32) || defined(__CYGWIN__) || defined(__CYGWIN32__)) +- # define CYGWIN +- #endif + #if defined(MSDOS) || defined(WIN32) || defined(OS2) + # define BIN_READ(yes) ((yes) ? "rb" : "rt") + # define BIN_WRITE(yes) ((yes) ? "wb" : "wt") +--- 154,159 ---- +*** ../vim-7.2.208/src/version.c 2009-06-16 17:50:56.000000000 +0200 +--- src/version.c 2009-06-16 18:16:08.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 209, + /**/ + +-- +"So this is it," said Arthur, "we are going to die." +"Yes," said Ford, "except...no! Wait a minute!" He suddenly lunged across +the chamber at something behind Arthur's line of vision. "What's this +switch?" he cried. +"What? Where?" cried Arthur, twisting around. +"No, I was only fooling," said Ford, "we are going to die after all." + -- 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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.210 b/7.2.210 new file mode 100644 index 00000000..9c51a137 --- /dev/null +++ b/7.2.210 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.210 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.210 +Problem: When a file that is being edited has its timestamp updated outside + of Vim and ":checktime" is used still get a warning when writing + the file. (Matt Mueller) +Solution: Store the timestamp in b_mtime_read when the timestamp is the only + thing that changed. +Files: src/fileio.c + + +*** ../vim-7.2.209/src/fileio.c 2009-06-16 16:01:34.000000000 +0200 +--- src/fileio.c 2009-06-20 13:29:41.000000000 +0200 +*************** +*** 6627,6633 **** + mesg = _("W16: Warning: Mode of file \"%s\" has changed since editing started"); + mesg2 = _("See \":help W16\" for more info."); + } +! /* Else: only timestamp changed, ignored */ + } + } + } +--- 6627,6636 ---- + mesg = _("W16: Warning: Mode of file \"%s\" has changed since editing started"); + mesg2 = _("See \":help W16\" for more info."); + } +! else +! /* Only timestamp changed, store it to avoid a warning +! * in check_mtime() later. */ +! buf->b_mtime_read = buf->b_mtime; + } + } + } +*** ../vim-7.2.209/src/version.c 2009-06-16 18:29:37.000000000 +0200 +--- src/version.c 2009-06-24 11:57:08.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 210, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.211 b/7.2.211 new file mode 100644 index 00000000..05101980 --- /dev/null +++ b/7.2.211 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.211 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.211 +Problem: Memory leak when expanding a series of file names. +Solution: Use ga_clear_strings() instead of ga_clear(). +Files: src/misc1.c + + +*** ../vim-7.2.210/src/misc1.c 2009-05-17 13:30:58.000000000 +0200 +--- src/misc1.c 2009-06-24 16:16:17.000000000 +0200 +*************** +*** 9193,9199 **** + else if (vim_strpbrk(p, (char_u *)"$~") != NULL) + { + vim_free(p); +! ga_clear(&ga); + i = mch_expand_wildcards(num_pat, pat, num_file, file, + flags); + recursive = FALSE; +--- 9193,9199 ---- + else if (vim_strpbrk(p, (char_u *)"$~") != NULL) + { + vim_free(p); +! ga_clear_strings(&ga); + i = mch_expand_wildcards(num_pat, pat, num_file, file, + flags); + recursive = FALSE; +*** ../vim-7.2.210/src/version.c 2009-06-24 11:57:53.000000000 +0200 +--- src/version.c 2009-06-24 16:24:32.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 211, + /**/ + +-- +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/7.2.212 b/7.2.212 new file mode 100644 index 00000000..33fcb5c4 --- /dev/null +++ b/7.2.212 @@ -0,0 +1,62 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.212 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.212 (extra) +Problem: Warnings for redefining SIG macros. +Solution: Don't define them if already defined. (Bjorn Winckler) +Files: src/os_mac.h + + +*** ../vim-7.2.211/src/os_mac.h 2008-06-24 22:27:34.000000000 +0200 +--- src/os_mac.h 2009-06-19 21:21:57.000000000 +0200 +*************** +*** 268,276 **** + */ + + #ifdef MACOS_X_UNIX +! # define SIGPROTOARG (int) +! # define SIGDEFARG(s) (s) int s; +! # define SIGDUMMYARG 0 + # undef HAVE_AVAIL_MEM + # ifndef HAVE_CONFIG_H + # define RETSIGTYPE void +--- 268,282 ---- + */ + + #ifdef MACOS_X_UNIX +! # ifndef SIGPROTOARG +! # define SIGPROTOARG (int) +! # endif +! # ifndef SIGDEFARG +! # define SIGDEFARG(s) (s) int s UNUSED; +! # endif +! # ifndef SIGDUMMYARG +! # define SIGDUMMYARG 0 +! # endif + # undef HAVE_AVAIL_MEM + # ifndef HAVE_CONFIG_H + # define RETSIGTYPE void +*** ../vim-7.2.211/src/version.c 2009-06-24 16:25:23.000000000 +0200 +--- src/version.c 2009-06-24 16:40:18.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 212, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.213 b/7.2.213 new file mode 100644 index 00000000..74a0e165 --- /dev/null +++ b/7.2.213 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.213 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.213 +Problem: Warning for using vsprintf(). +Solution: Use vim_vsnprintf(). +Files: src/netbeans.c + + +*** ../vim-7.2.212/src/netbeans.c 2009-06-16 16:57:53.000000000 +0200 +--- src/netbeans.c 2009-06-24 11:26:43.000000000 +0200 +*************** +*** 2586,2592 **** + va_list ap; + + va_start(ap, cmd); +! vsprintf(buf, cmd, ap); + va_end(ap); + + nbdebug((" COLONCMD %s\n", buf)); +--- 2586,2592 ---- + va_list ap; + + va_start(ap, cmd); +! vim_vsnprintf(buf, sizeof(buf), cmd, ap, NULL); + va_end(ap); + + nbdebug((" COLONCMD %s\n", buf)); +*** ../vim-7.2.212/src/version.c 2009-06-24 16:41:01.000000000 +0200 +--- src/version.c 2009-06-24 16:49:06.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 213, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +38. You wake up at 3 a.m. to go to the bathroom and stop and check your e-mail + on the way back to bed. + + /// 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/7.2.214 b/7.2.214 new file mode 100644 index 00000000..17cb1569 --- /dev/null +++ b/7.2.214 @@ -0,0 +1,65 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.214 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.214 +Problem: Crash with complete function for user command. (Andy Wokula) +Solution: Avoid using a NULL pointer (Dominique Pelle) +Files: src/ex_getln.c + + +*** ../vim-7.2.213/src/ex_getln.c 2009-05-16 17:29:37.000000000 +0200 +--- src/ex_getln.c 2009-06-24 16:57:28.000000000 +0200 +*************** +*** 4874,4887 **** + /* Loop over the items in the list. */ + for (li = retlist->lv_first; li != NULL; li = li->li_next) + { +! if (li->li_tv.v_type != VAR_STRING) +! continue; /* Skip non-string items */ + + if (ga_grow(&ga, 1) == FAIL) + break; + + ((char_u **)ga.ga_data)[ga.ga_len] = +! vim_strsave(li->li_tv.vval.v_string); + ++ga.ga_len; + } + list_unref(retlist); +--- 4874,4887 ---- + /* Loop over the items in the list. */ + for (li = retlist->lv_first; li != NULL; li = li->li_next) + { +! if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL) +! continue; /* Skip non-string items and empty strings */ + + if (ga_grow(&ga, 1) == FAIL) + break; + + ((char_u **)ga.ga_data)[ga.ga_len] = +! vim_strsave(li->li_tv.vval.v_string); + ++ga.ga_len; + } + list_unref(retlist); +*** ../vim-7.2.213/src/version.c 2009-06-24 16:49:50.000000000 +0200 +--- src/version.c 2009-06-24 17:03:58.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 214, + /**/ + +-- +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/7.2.215 b/7.2.215 new file mode 100644 index 00000000..90e746ce --- /dev/null +++ b/7.2.215 @@ -0,0 +1,310 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.215 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.215 +Problem: ml_get error when using ":vimgrep". +Solution: Load the memfile for the hidden buffer before putting it in a + window. Correct the order of splitting the window and filling + the window and buffer with data. +Files: src/fileio.c, src/proto/window.pro, src/quickfix.c, src/window.c + + +*** ../vim-7.2.214/src/fileio.c 2009-06-24 11:57:53.000000000 +0200 +--- src/fileio.c 2009-06-24 12:53:19.000000000 +0200 +*************** +*** 710,716 **** + #endif + #ifdef UNIX + /* Set swap file protection bits after creating it. */ +! if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL) + (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); + #endif + } +--- 710,717 ---- + #endif + #ifdef UNIX + /* Set swap file protection bits after creating it. */ +! if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL +! && curbuf->b_ml.ml_mfp->mf_fname != NULL) + (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); + #endif + } +*************** +*** 8435,8443 **** + * effects, insert it in a the current tab page. + * Anything related to a window (e.g., setting folds) may have + * unexpected results. */ +! curwin = aucmd_win; +! curwin->w_buffer = buf; + ++buf->b_nwindows; + + #ifdef FEAT_WINDOWS + /* Split the current window, put the aucmd_win in the upper half. */ +--- 8436,8444 ---- + * effects, insert it in a the current tab page. + * Anything related to a window (e.g., setting folds) may have + * unexpected results. */ +! aucmd_win->w_buffer = buf; + ++buf->b_nwindows; ++ win_init_empty(aucmd_win); /* set cursor and topline to safe values */ + + #ifdef FEAT_WINDOWS + /* Split the current window, put the aucmd_win in the upper half. */ +*************** +*** 8448,8459 **** + (void)win_comp_pos(); /* recompute window positions */ + p_ea = save_ea; + #endif +! /* set cursor and topline to safe values */ +! curwin_init(); +! #ifdef FEAT_VERTSPLIT +! curwin->w_wincol = 0; +! curwin->w_width = Columns; +! #endif + } + curbuf = buf; + aco->new_curwin = curwin; +--- 8449,8455 ---- + (void)win_comp_pos(); /* recompute window positions */ + p_ea = save_ea; + #endif +! curwin = aucmd_win; + } + curbuf = buf; + aco->new_curwin = curwin; +*** ../vim-7.2.214/src/proto/window.pro 2009-06-16 16:01:34.000000000 +0200 +--- src/proto/window.pro 2009-06-24 12:53:13.000000000 +0200 +*************** +*** 14,19 **** +--- 14,20 ---- + win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); + void close_others __ARGS((int message, int forceit)); + void curwin_init __ARGS((void)); ++ void win_init_empty __ARGS((win_T *wp)); + int win_alloc_first __ARGS((void)); + void win_alloc_aucmd_win __ARGS((void)); + void win_init_size __ARGS((void)); +*** ../vim-7.2.214/src/quickfix.c 2009-05-17 13:30:58.000000000 +0200 +--- src/quickfix.c 2009-06-24 15:30:06.000000000 +0200 +*************** +*** 3411,3424 **** + /* Init the options. */ + buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); + +! /* set curwin/curbuf to buf and save a few things */ +! aucmd_prepbuf(&aco, newbuf); + +! /* Need to set the filename for autocommands. */ +! (void)setfname(curbuf, fname, NULL, FALSE); + +- if (ml_open(curbuf) == OK) +- { + /* Create swap file now to avoid the ATTENTION message. */ + check_need_swap(TRUE); + +--- 3411,3425 ---- + /* Init the options. */ + buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); + +! /* need to open the memfile before putting the buffer in a window */ +! if (ml_open(newbuf) == OK) +! { +! /* set curwin/curbuf to buf and save a few things */ +! aucmd_prepbuf(&aco, newbuf); + +! /* Need to set the filename for autocommands. */ +! (void)setfname(curbuf, fname, NULL, FALSE); + + /* Create swap file now to avoid the ATTENTION message. */ + check_need_swap(TRUE); + +*************** +*** 3441,3450 **** + newbuf = curbuf; + } + } +- } + +! /* restore curwin/curbuf and a few other things */ +! aucmd_restbuf(&aco); + + if (!buf_valid(newbuf)) + return NULL; +--- 3442,3451 ---- + newbuf = curbuf; + } + } + +! /* restore curwin/curbuf and a few other things */ +! aucmd_restbuf(&aco); +! } + + if (!buf_valid(newbuf)) + return NULL; +*** ../vim-7.2.214/src/window.c 2009-06-16 16:01:34.000000000 +0200 +--- src/window.c 2009-06-24 14:35:16.000000000 +0200 +*************** +*** 2354,2366 **** + frame_T *frp; + win_T *wp; + +- #ifdef FEAT_FOLDING +- clearFolding(win); +- #endif +- +- /* reduce the reference count to the argument list. */ +- alist_unlink(win->w_alist); +- + /* Remove the window and its frame from the tree of frames. */ + frp = win->w_frame; + wp = winframe_remove(win, dirp, tp); +--- 2354,2359 ---- +*************** +*** 2386,2394 **** + tabpage_close(TRUE); + # endif + +- while (firstwin != NULL) +- (void)win_free_mem(firstwin, &dummy, NULL); +- + # ifdef FEAT_AUTOCMD + if (aucmd_win != NULL) + { +--- 2379,2384 ---- +*************** +*** 2396,2401 **** +--- 2386,2394 ---- + aucmd_win = NULL; + } + # endif ++ ++ while (firstwin != NULL) ++ (void)win_free_mem(firstwin, &dummy, NULL); + } + #endif + +*************** +*** 3204,3230 **** + void + curwin_init() + { +! redraw_win_later(curwin, NOT_VALID); +! curwin->w_lines_valid = 0; +! curwin->w_cursor.lnum = 1; +! curwin->w_curswant = curwin->w_cursor.col = 0; + #ifdef FEAT_VIRTUALEDIT +! curwin->w_cursor.coladd = 0; + #endif +! curwin->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ +! curwin->w_pcmark.col = 0; +! curwin->w_prev_pcmark.lnum = 0; +! curwin->w_prev_pcmark.col = 0; +! curwin->w_topline = 1; + #ifdef FEAT_DIFF +! curwin->w_topfill = 0; + #endif +! curwin->w_botline = 2; + #ifdef FEAT_FKMAP +! if (curwin->w_p_rl) +! curwin->w_farsi = W_CONV + W_R_L; + else +! curwin->w_farsi = W_CONV; + #endif + } + +--- 3197,3230 ---- + void + curwin_init() + { +! win_init_empty(curwin); +! } +! +! void +! win_init_empty(wp) +! win_T *wp; +! { +! redraw_win_later(wp, NOT_VALID); +! wp->w_lines_valid = 0; +! wp->w_cursor.lnum = 1; +! wp->w_curswant = wp->w_cursor.col = 0; + #ifdef FEAT_VIRTUALEDIT +! wp->w_cursor.coladd = 0; + #endif +! wp->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ +! wp->w_pcmark.col = 0; +! wp->w_prev_pcmark.lnum = 0; +! wp->w_prev_pcmark.col = 0; +! wp->w_topline = 1; + #ifdef FEAT_DIFF +! wp->w_topfill = 0; + #endif +! wp->w_botline = 2; + #ifdef FEAT_FKMAP +! if (wp->w_p_rl) +! wp->w_farsi = W_CONV + W_R_L; + else +! wp->w_farsi = W_CONV; + #endif + } + +*************** +*** 4325,4330 **** +--- 4325,4337 ---- + { + int i; + ++ #ifdef FEAT_FOLDING ++ clearFolding(wp); ++ #endif ++ ++ /* reduce the reference count to the argument list. */ ++ alist_unlink(wp->w_alist); ++ + #ifdef FEAT_AUTOCMD + /* Don't execute autocommands while the window is halfway being deleted. + * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */ +*************** +*** 4387,4393 **** + } + #endif /* FEAT_GUI */ + +! win_remove(wp, tp); + vim_free(wp); + + #ifdef FEAT_AUTOCMD +--- 4394,4403 ---- + } + #endif /* FEAT_GUI */ + +! #ifdef FEAT_AUTOCMD +! if (wp != aucmd_win) +! #endif +! win_remove(wp, tp); + vim_free(wp); + + #ifdef FEAT_AUTOCMD +*** ../vim-7.2.214/src/version.c 2009-06-24 17:04:40.000000000 +0200 +--- src/version.c 2009-06-24 17:27:38.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 215, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.216 b/7.2.216 new file mode 100644 index 00000000..5a7afdff --- /dev/null +++ b/7.2.216 @@ -0,0 +1,137 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.216 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.216 +Problem: Two error messages have the same number E812. +Solution: Give one message a different number. +Files: runtime/doc/autocmd.txt, runtime/doc/if_mzsch.txt, src/if_mzsch.c + + +*** ../vim-7.2.215/runtime/doc/autocmd.txt 2008-08-09 19:36:46.000000000 +0200 +--- runtime/doc/autocmd.txt 2009-06-24 17:49:04.000000000 +0200 +*************** +*** 335,340 **** +--- 335,342 ---- + NOTE: When this autocommand is executed, the + current buffer "%" may be different from the + buffer being deleted "" and "". ++ Don't change to another buffer, it will cause ++ problems. + *BufEnter* + BufEnter After entering a buffer. Useful for setting + options for a file type. Also executed when +*************** +*** 397,402 **** +--- 399,406 ---- + NOTE: When this autocommand is executed, the + current buffer "%" may be different from the + buffer being unloaded "". ++ Don't change to another buffer, it will cause ++ problems. + *BufWinEnter* + BufWinEnter After a buffer is displayed in a window. This + can be when the buffer is loaded (after +*************** +*** 428,433 **** +--- 432,439 ---- + NOTE: When this autocommand is executed, the + current buffer "%" may be different from the + buffer being deleted "". ++ Don't change to another buffer, it will cause ++ problems. + *BufWrite* *BufWritePre* + BufWrite or BufWritePre Before writing the whole buffer to a file. + *BufWriteCmd* +*************** +*** 748,755 **** + 'a' abort, like hitting CTRL-C + When set to an empty string the user will be + asked, as if there was no SwapExists autocmd. +! Note: Do not try to change the buffer, the +! results are unpredictable. + *Syntax* + Syntax When the 'syntax' option has been set. The + pattern is matched against the syntax name. +--- 754,763 ---- + 'a' abort, like hitting CTRL-C + When set to an empty string the user will be + asked, as if there was no SwapExists autocmd. +! *E812* +! It is not allowed to change to another buffer, +! change a buffer name or change directory +! here. + *Syntax* + Syntax When the 'syntax' option has been set. The + pattern is matched against the syntax name. +*** ../vim-7.2.215/runtime/doc/if_mzsch.txt 2009-05-26 22:58:43.000000000 +0200 +--- runtime/doc/if_mzsch.txt 2009-06-24 12:08:20.000000000 +0200 +*************** +*** 1,4 **** +! *if_mzsch.txt* For Vim version 7.2. Last change: 2009 May 26 + + + VIM REFERENCE MANUAL by Sergey Khorev +--- 1,4 ---- +! *if_mzsch.txt* For Vim version 7.2. Last change: 2009 Jun 24 + + + VIM REFERENCE MANUAL by Sergey Khorev +*************** +*** 231,237 **** + (set-cursor (line . col) [window]) Set cursor position. + + ============================================================================== +! 5. Dynamic loading *mzscheme-dynamic* *E812* + + On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| + output then includes |+mzscheme/dyn|. +--- 231,237 ---- + (set-cursor (line . col) [window]) Set cursor position. + + ============================================================================== +! 5. Dynamic loading *mzscheme-dynamic* *E815* + + On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version| + output then includes |+mzscheme/dyn|. +*** ../vim-7.2.215/src/if_mzsch.c 2009-05-26 22:58:43.000000000 +0200 +--- src/if_mzsch.c 2009-06-24 12:08:23.000000000 +0200 +*************** +*** 1040,1046 **** + #ifdef DYNAMIC_MZSCHEME + if (!mzscheme_enabled(TRUE)) + { +! EMSG(_("E812: Sorry, this command is disabled, the MzScheme libraries could not be loaded.")); + return -1; + } + #endif +--- 1040,1046 ---- + #ifdef DYNAMIC_MZSCHEME + if (!mzscheme_enabled(TRUE)) + { +! EMSG(_("E815: Sorry, this command is disabled, the MzScheme libraries could not be loaded.")); + return -1; + } + #endif +*** ../vim-7.2.215/src/version.c 2009-06-24 17:31:27.000000000 +0200 +--- src/version.c 2009-06-24 17:46:56.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 216, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.217 b/7.2.217 new file mode 100644 index 00000000..30d8aa6a --- /dev/null +++ b/7.2.217 @@ -0,0 +1,57 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.217 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.217 +Problem: Running tests with valgrind doesn't work as advertised. +Solution: Fix the line in the Makefile. +Files: src/testdir/Makefile + + +*** ../vim-7.2.216/src/testdir/Makefile 2009-03-11 16:26:01.000000000 +0100 +--- src/testdir/Makefile 2009-06-24 14:59:42.000000000 +0200 +*************** +*** 4,12 **** + + VIMPROG = ../vim + +! # Uncomment this line for using valgrind. +! # The output goes into a file "valgrind.$PID" (sorry, no test number). +! # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --logfile=valgrind + + SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \ + test7.out test8.out test9.out test10.out test11.out \ +--- 4,14 ---- + + VIMPROG = ../vim + +! # Uncomment this line to use valgrind for memory leaks and extra warnings. +! # The output goes into a file "valgrind.testN" +! # Vim should be compiled with EXITFREE to avoid false warnings. +! # This will make testing about 10 times as slow. +! # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$* + + SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \ + test7.out test8.out test9.out test10.out test11.out \ +*** ../vim-7.2.216/src/version.c 2009-06-24 17:51:01.000000000 +0200 +--- src/version.c 2009-06-24 18:07:07.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 217, + /**/ + +-- +A day without sunshine is like, well, night. + + /// 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/7.2.218 b/7.2.218 new file mode 100644 index 00000000..b48d7180 --- /dev/null +++ b/7.2.218 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.218 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.218 +Problem: Cannot build GTK with hangul_input feature. (Dominique Pelle) +Solution: Adjuste #ifdef. (SungHyun Nam) +Files: src/gui.c + + +*** ../vim-7.2.217/src/gui.c 2009-06-16 16:01:34.000000000 +0200 +--- src/gui.c 2009-06-24 17:45:01.000000000 +0200 +*************** +*** 959,965 **** + guicolor_T fg, bg; + + if ( +! # ifdef HAVE_GTK2 + preedit_get_status() + # else + im_get_status() +--- 959,965 ---- + guicolor_T fg, bg; + + if ( +! # if defined(HAVE_GTK2) && !defined(FEAT_HANGULIN) + preedit_get_status() + # else + im_get_status() +*** ../vim-7.2.217/src/version.c 2009-06-24 18:07:55.000000000 +0200 +--- src/version.c 2009-06-24 18:31:06.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 218, + /**/ + +-- +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/7.2.219 b/7.2.219 new file mode 100644 index 00000000..f9bbec04 --- /dev/null +++ b/7.2.219 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.219 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.219 (extra) +Problem: Photon GUI is outdated. +Solution: Updates for QNX 6.4.0. (Sean Boudreau) +Files: src/gui_photon.c + + +*** ../vim-7.2.218/src/gui_photon.c 2007-05-10 20:23:35.000000000 +0200 +--- src/gui_photon.c 2009-07-01 16:08:36.000000000 +0200 +*************** +*** 838,844 **** +--- 838,849 ---- + static void + gui_ph_draw_start( void ) + { ++ PhGC_t *gc; ++ ++ gc = PgGetGC(); + PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) ); ++ PgClearClippingsCx( gc ); ++ PgClearTranslationCx( gc ); + + PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset ); + PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) ); +*************** +*** 2970,2976 **** + if( vim_font_name == NULL ) + { + /* Default font */ +! vim_font_name = "PC Term"; + } + + if( STRCMP( vim_font_name, "*" ) == 0 ) +--- 2975,2981 ---- + if( vim_font_name == NULL ) + { + /* Default font */ +! vim_font_name = "PC Terminal"; + } + + if( STRCMP( vim_font_name, "*" ) == 0 ) +*** ../vim-7.2.218/src/version.c 2009-06-24 18:31:36.000000000 +0200 +--- src/version.c 2009-07-01 16:11:34.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 219, + /**/ + +-- +"Oh, no! NOT the Spanish Inquisition!" +"NOBODY expects the Spanish Inquisition!!!" + -- Monty Python sketch -- +"Oh, no! NOT another option!" +"EVERYBODY expects another option!!!" + -- Discussion in vim-dev mailing list -- + + /// 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/7.2.220 b/7.2.220 new file mode 100644 index 00000000..b3d63f35 --- /dev/null +++ b/7.2.220 @@ -0,0 +1,95 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.220 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.220 (after 7.2.215) +Problem: a BufEnter autocommand that changes directory causes problems. + (Ajit Thakkar) +Solution: Disable autocommands when opening a hidden buffer in a window. +Files: src/fileio.c + + +*** ../vim-7.2.219/src/fileio.c 2009-06-24 17:31:27.000000000 +0200 +--- src/fileio.c 2009-07-01 17:02:46.000000000 +0200 +*************** +*** 8441,8453 **** + win_init_empty(aucmd_win); /* set cursor and topline to safe values */ + + #ifdef FEAT_WINDOWS +! /* Split the current window, put the aucmd_win in the upper half. */ + make_snapshot(SNAP_AUCMD_IDX); + save_ea = p_ea; + p_ea = FALSE; + (void)win_split_ins(0, WSP_TOP, aucmd_win, 0); + (void)win_comp_pos(); /* recompute window positions */ + p_ea = save_ea; + #endif + curwin = aucmd_win; + } +--- 8441,8456 ---- + win_init_empty(aucmd_win); /* set cursor and topline to safe values */ + + #ifdef FEAT_WINDOWS +! /* Split the current window, put the aucmd_win in the upper half. +! * We don't want the BufEnter or WinEnter autocommands. */ +! block_autocmds(); + make_snapshot(SNAP_AUCMD_IDX); + save_ea = p_ea; + p_ea = FALSE; + (void)win_split_ins(0, WSP_TOP, aucmd_win, 0); + (void)win_comp_pos(); /* recompute window positions */ + p_ea = save_ea; ++ unblock_autocmds(); + #endif + curwin = aucmd_win; + } +*************** +*** 8474,8480 **** + --curbuf->b_nwindows; + #ifdef FEAT_WINDOWS + /* Find "aucmd_win", it can't be closed, but it may be in another tab +! * page. */ + if (curwin != aucmd_win) + { + tabpage_T *tp; +--- 8477,8484 ---- + --curbuf->b_nwindows; + #ifdef FEAT_WINDOWS + /* Find "aucmd_win", it can't be closed, but it may be in another tab +! * page. Do not trigger autocommands here. */ +! block_autocmds(); + if (curwin != aucmd_win) + { + tabpage_T *tp; +*************** +*** 8498,8503 **** +--- 8502,8508 ---- + last_status(FALSE); /* may need to remove last status line */ + restore_snapshot(SNAP_AUCMD_IDX, FALSE); + (void)win_comp_pos(); /* recompute window positions */ ++ unblock_autocmds(); + + if (win_valid(aco->save_curwin)) + curwin = aco->save_curwin; +*** ../vim-7.2.219/src/version.c 2009-07-01 16:12:54.000000000 +0200 +--- src/version.c 2009-07-01 17:10:22.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 220, + /**/ + +-- +Microsoft is to software what McDonalds is to gourmet cooking + + /// 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/7.2.221 b/7.2.221 new file mode 100644 index 00000000..3c6180e3 --- /dev/null +++ b/7.2.221 @@ -0,0 +1,247 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.221 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.221 +Problem: X cut_buffer0 text is used as-is, it may be in the wrong encoding. +Solution: Convert between 'enc' and latin1. (James Vega) +Files: src/gui_gtk_x11.c, src/message.c, src/ops.c, src/proto/ui.pro, + src/ui.c + + +*** ../vim-7.2.220/src/gui_gtk_x11.c 2009-06-16 15:23:07.000000000 +0200 +--- src/gui_gtk_x11.c 2009-07-01 11:55:34.000000000 +0200 +*************** +*** 6717,6724 **** + { + GdkAtom target; + unsigned i; +- int nbytes; +- char_u *buffer; + time_t start; + + for (i = 0; i < N_SELECTION_TARGETS; ++i) +--- 6717,6722 ---- +*************** +*** 6746,6767 **** + } + + /* Final fallback position - use the X CUT_BUFFER0 store */ +! nbytes = 0; +! buffer = (char_u *)XFetchBuffer(GDK_WINDOW_XDISPLAY(gui.mainwin->window), +! &nbytes, 0); +! if (nbytes > 0) +! { +! /* Got something */ +! clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); +! if (p_verbose > 0) +! { +! verbose_enter(); +! smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); +! verbose_leave(); +! } +! } +! if (buffer != NULL) +! XFree(buffer); + } + + /* +--- 6744,6750 ---- + } + + /* Final fallback position - use the X CUT_BUFFER0 store */ +! yank_cut_buffer0(GDK_WINDOW_XDISPLAY(gui.mainwin->window), cbd); + } + + /* +*** ../vim-7.2.220/src/message.c 2009-05-17 13:30:58.000000000 +0200 +--- src/message.c 2009-07-01 16:43:08.000000000 +0200 +*************** +*** 107,113 **** + } + + #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \ +! || defined(PROTO) + /* + * Like msg() but keep it silent when 'verbosefile' is set. + */ +--- 107,113 ---- + } + + #if defined(FEAT_EVAL) || defined(FEAT_X11) || defined(USE_XSMP) \ +! || defined(FEAT_GUI_GTK) || defined(PROTO) + /* + * Like msg() but keep it silent when 'verbosefile' is set. + */ +*** ../vim-7.2.220/src/ops.c 2009-05-26 18:12:13.000000000 +0200 +--- src/ops.c 2009-07-01 12:15:31.000000000 +0200 +*************** +*** 5591,5596 **** +--- 5591,5619 ---- + if (dpy != NULL && str != NULL && motion_type >= 0 + && len < 1024*1024 && len > 0) + { ++ #ifdef FEAT_MBYTE ++ /* The CUT_BUFFER0 is supposed to always contain latin1. Convert from ++ * 'enc' when it is a multi-byte encoding. When 'enc' is an 8-bit ++ * encoding conversion usually doesn't work, so keep the text as-is. ++ */ ++ if (has_mbyte) ++ { ++ char_u *conv_str = str; ++ vimconv_T vc; ++ ++ vc.vc_type = CONV_NONE; ++ if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK) ++ { ++ conv_str = string_convert(&vc, str, (int*)&len); ++ if (conv_str != NULL) ++ { ++ vim_free(str); ++ str = conv_str; ++ } ++ convert_setup(&vc, NULL, NULL); ++ } ++ } ++ #endif + XStoreBuffer(dpy, (char *)str, (int)len, 0); + XFlush(dpy); + } +*** ../vim-7.2.220/src/proto/ui.pro 2007-05-05 19:58:49.000000000 +0200 +--- src/proto/ui.pro 2009-07-01 11:48:11.000000000 +0200 +*************** +*** 48,53 **** +--- 48,54 ---- + void open_app_context __ARGS((void)); + void x11_setup_atoms __ARGS((Display *dpy)); + void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd)); ++ void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd)); + void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd)); + int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd)); + void clip_x11_set_selection __ARGS((VimClipboard *cbd)); +*** ../vim-7.2.220/src/ui.c 2009-05-17 13:30:58.000000000 +0200 +--- src/ui.c 2009-07-01 15:44:07.000000000 +0200 +*************** +*** 2104,2111 **** + Atom type; + static int success; + int i; +- int nbytes = 0; +- char_u *buffer; + time_t start_time; + int timed_out = FALSE; + +--- 2104,2109 ---- +*************** +*** 2185,2199 **** + } + + /* Final fallback position - use the X CUT_BUFFER0 store */ +! buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0); +! if (nbytes > 0) +! { +! /* Got something */ +! clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); +! XFree((void *)buffer); +! if (p_verbose > 0) +! verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); +! } + } + + static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *)); +--- 2183,2189 ---- + } + + /* Final fallback position - use the X CUT_BUFFER0 store */ +! yank_cut_buffer0(dpy, cbd); + } + + static Boolean clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *)); +*************** +*** 2369,2374 **** +--- 2359,2418 ---- + } + #endif + ++ #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \ ++ || defined(FEAT_GUI_GTK) || defined(PROTO) ++ /* ++ * Get the contents of the X CUT_BUFFER0 and put it in "cbd". ++ */ ++ void ++ yank_cut_buffer0(dpy, cbd) ++ Display *dpy; ++ VimClipboard *cbd; ++ { ++ int nbytes = 0; ++ char_u *buffer = (char_u *)XFetchBuffer(dpy, &nbytes, 0); ++ ++ if (nbytes > 0) ++ { ++ #ifdef FEAT_MBYTE ++ int done = FALSE; ++ ++ /* CUT_BUFFER0 is supposed to be always latin1. Convert to 'enc' when ++ * using a multi-byte encoding. Conversion between two 8-bit ++ * character sets usually fails and the text might actually be in ++ * 'enc' anyway. */ ++ if (has_mbyte) ++ { ++ char_u *conv_buf = buffer; ++ vimconv_T vc; ++ ++ vc.vc_type = CONV_NONE; ++ if (convert_setup(&vc, (char_u *)"latin1", p_enc) == OK) ++ { ++ conv_buf = string_convert(&vc, buffer, &nbytes); ++ if (conv_buf != NULL) ++ { ++ clip_yank_selection(MCHAR, conv_buf, (long)nbytes, cbd); ++ vim_free(conv_buf); ++ done = TRUE; ++ } ++ convert_setup(&vc, NULL, NULL); ++ } ++ } ++ if (!done) /* use the text without conversion */ ++ #endif ++ clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); ++ XFree((void *)buffer); ++ if (p_verbose > 0) ++ { ++ verbose_enter(); ++ verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); ++ verbose_leave(); ++ } ++ } ++ } ++ #endif ++ + #if defined(FEAT_MOUSE) || defined(PROTO) + + /* +*** ../vim-7.2.220/src/version.c 2009-07-01 17:11:40.000000000 +0200 +--- src/version.c 2009-07-01 17:56:02.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 221, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +40. You tell the cab driver you live at + http://123.elm.street/house/bluetrim.html +41. You actually try that 123.elm.street address. + + /// 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/7.2.222 b/7.2.222 new file mode 100644 index 00000000..dcf0b36c --- /dev/null +++ b/7.2.222 @@ -0,0 +1,59 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.222 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.222 +Problem: ":mksession" doesn't work properly with 'acd' set. +Solution: Make it work. (Yakov Lerner) +Files: src/ex_docmd.c + + +*** ../vim-7.2.221/src/ex_docmd.c 2009-05-16 17:29:37.000000000 +0200 +--- src/ex_docmd.c 2009-07-01 20:18:22.000000000 +0200 +*************** +*** 8686,8691 **** +--- 8693,8700 ---- + } + + #ifdef FEAT_SESSION ++ /* Use the short file name until ":lcd" is used. We also don't use the ++ * short file name when 'acd' is set, that is checked later. */ + did_lcd = FALSE; + + /* ":mkview" or ":mkview 9": generate file name with 'viewdir' */ +*************** +*** 10573,10578 **** +--- 10582,10590 ---- + if (buf->b_sfname != NULL + && flagp == &ssop_flags + && (ssop_flags & (SSOP_CURDIR | SSOP_SESDIR)) ++ #ifdef FEAT_AUTOCHDIR ++ && !p_acd ++ #endif + && !did_lcd) + name = buf->b_sfname; + else +*** ../vim-7.2.221/src/version.c 2009-07-01 18:04:30.000000000 +0200 +--- src/version.c 2009-07-01 20:16:19.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 222, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +43. You tell the kids they can't use the computer because "Daddy's got work to + do" and you don't even have a job. + + /// 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/7.2.223 b/7.2.223 new file mode 100644 index 00000000..cac2126c --- /dev/null +++ b/7.2.223 @@ -0,0 +1,165 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.223 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.223 +Problem: When a script is run with ":silent" it is not able to give warning + messages. +Solution: Add the ":unsilent" command. +Files: runtime/doc/various.txt, src/ex_cmds.h, src/ex_docmd.c + + +*** ../vim-7.2.222/runtime/doc/various.txt 2008-08-09 19:36:54.000000000 +0200 +--- runtime/doc/various.txt 2009-07-09 15:52:54.000000000 +0200 +*************** +*** 508,513 **** +--- 508,524 ---- + messages though. Use ":silent" in the command itself + to avoid that: ":silent menu .... :silent command". + ++ *:uns* *:unsilent* ++ :uns[ilent] {command} Execute {command} not silently. Only makes a ++ difference when |:silent| was used to get to this ++ command. ++ Use this for giving a message even when |:silent| was ++ used. In this example |:silent| is used to avoid the ++ message about reading the file and |:unsilent| to be ++ able to list the first line of each file. > ++ :silent argdo unsilent echo expand('%') . ": " . getline(1) ++ < ++ + *:verb* *:verbose* + :[count]verb[ose] {command} + Execute {command} with 'verbose' set to [count]. If +*** ../vim-7.2.222/src/ex_cmds.h 2008-11-09 13:43:25.000000000 +0100 +--- src/ex_cmds.h 2009-07-01 18:12:55.000000000 +0200 +*************** +*** 991,996 **** +--- 991,998 ---- + BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), + EX(CMD_unmenu, "unmenu", ex_menu, + BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), ++ EX(CMD_unsilent, "unsilent", ex_wrongmodifier, ++ NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN), + EX(CMD_update, "update", ex_update, + RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR), + EX(CMD_vglobal, "vglobal", ex_global, +*** ../vim-7.2.222/src/ex_docmd.c 2009-07-01 20:18:43.000000000 +0200 +--- src/ex_docmd.c 2009-07-09 15:24:03.000000000 +0200 +*************** +*** 1677,1684 **** + char_u *errormsg = NULL; /* error message */ + exarg_T ea; /* Ex command arguments */ + long verbose_save = -1; +! int save_msg_scroll = 0; +! int did_silent = 0; + int did_esilent = 0; + #ifdef HAVE_SANDBOX + int did_sandbox = FALSE; +--- 1677,1684 ---- + char_u *errormsg = NULL; /* error message */ + exarg_T ea; /* Ex command arguments */ + long verbose_save = -1; +! int save_msg_scroll = msg_scroll; +! int save_msg_silent = -1; + int did_esilent = 0; + #ifdef HAVE_SANDBOX + int did_sandbox = FALSE; +*************** +*** 1856,1864 **** + } + if (!checkforcmd(&ea.cmd, "silent", 3)) + break; +! ++did_silent; + ++msg_silent; +- save_msg_scroll = msg_scroll; + if (*ea.cmd == '!' && !vim_iswhite(ea.cmd[-1])) + { + /* ":silent!", but not "silent !cmd" */ +--- 1856,1864 ---- + } + if (!checkforcmd(&ea.cmd, "silent", 3)) + break; +! if (save_msg_silent == -1) +! save_msg_silent = msg_silent; + ++msg_silent; + if (*ea.cmd == '!' && !vim_iswhite(ea.cmd[-1])) + { + /* ":silent!", but not "silent !cmd" */ +*************** +*** 1886,1891 **** +--- 1886,1898 ---- + #endif + continue; + ++ case 'u': if (!checkforcmd(&ea.cmd, "unsilent", 3)) ++ break; ++ if (save_msg_silent == -1) ++ save_msg_silent = msg_silent; ++ msg_silent = 0; ++ continue; ++ + case 'v': if (checkforcmd(&ea.cmd, "vertical", 4)) + { + #ifdef FEAT_VERTSPLIT +*************** +*** 2684,2696 **** + + cmdmod = save_cmdmod; + +! if (did_silent > 0) + { + /* messages could be enabled for a serious error, need to check if the + * counters don't become negative */ +! msg_silent -= did_silent; +! if (msg_silent < 0) +! msg_silent = 0; + emsg_silent -= did_esilent; + if (emsg_silent < 0) + emsg_silent = 0; +--- 2691,2702 ---- + + cmdmod = save_cmdmod; + +! if (save_msg_silent != -1) + { + /* messages could be enabled for a serious error, need to check if the + * counters don't become negative */ +! if (!did_emsg) +! msg_silent = save_msg_silent; + emsg_silent -= did_esilent; + if (emsg_silent < 0) + emsg_silent = 0; +*************** +*** 2987,2992 **** +--- 2993,2999 ---- + {"silent", 3, FALSE}, + {"tab", 3, TRUE}, + {"topleft", 2, FALSE}, ++ {"unsilent", 3, FALSE}, + {"verbose", 4, TRUE}, + {"vertical", 4, FALSE}, + }; +*** ../vim-7.2.222/src/version.c 2009-07-01 20:18:43.000000000 +0200 +--- src/version.c 2009-07-09 15:53:05.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 223, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.224 b/7.2.224 new file mode 100644 index 00000000..d988eeda --- /dev/null +++ b/7.2.224 @@ -0,0 +1,88 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.224 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.224 +Problem: Crash when using 'completefunc'. (Ingo Karkat) +Solution: Disallow entering edit() recursively when doing completion. +Files: src/edit.c + + +*** ../vim-7.2.223/src/edit.c 2009-05-26 11:01:43.000000000 +0200 +--- src/edit.c 2009-07-09 18:01:49.000000000 +0200 +*************** +*** 114,119 **** +--- 114,123 ---- + * FALSE the word to be completed must be located. */ + static int compl_started = FALSE; + ++ /* Set when doing something for completion that may call edit() recursively, ++ * which is not allowed. */ ++ static int compl_busy = FALSE; ++ + static int compl_matches = 0; + static char_u *compl_pattern = NULL; + static int compl_direction = FORWARD; +*************** +*** 346,352 **** + + #ifdef FEAT_INS_EXPAND + /* Don't allow recursive insert mode when busy with completion. */ +! if (compl_started || pum_visible()) + { + EMSG(_(e_secure)); + return FALSE; +--- 350,356 ---- + + #ifdef FEAT_INS_EXPAND + /* Don't allow recursive insert mode when busy with completion. */ +! if (compl_started || compl_busy || pum_visible()) + { + EMSG(_(e_secure)); + return FALSE; +*************** +*** 1340,1347 **** +--- 1344,1353 ---- + goto normalchar; + + docomplete: ++ compl_busy = TRUE; + if (ins_complete(c) == FAIL) + compl_cont_status = 0; ++ compl_busy = FALSE; + break; + #endif /* FEAT_INS_EXPAND */ + +*************** +*** 3172,3177 **** +--- 3178,3184 ---- + vim_free(match); + } while (compl_curr_match != NULL && compl_curr_match != compl_first_match); + compl_first_match = compl_curr_match = NULL; ++ compl_shown_match = NULL; + } + + static void +*** ../vim-7.2.223/src/version.c 2009-07-09 15:55:34.000000000 +0200 +--- src/version.c 2009-07-09 18:14:16.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 224, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +77. The phone company asks you to test drive their new PBX system + + /// 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/7.2.225 b/7.2.225 new file mode 100644 index 00000000..32a4d357 --- /dev/null +++ b/7.2.225 @@ -0,0 +1,97 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.225 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.225 +Problem: When using ":normal" a saved character may be executed. +Solution: Also store old_char when saving typeahead. +Files: src/getchar.c, src/structs.h + + +*** ../vim-7.2.224/src/getchar.c 2009-02-22 23:42:08.000000000 +0100 +--- src/getchar.c 2009-07-09 18:09:13.000000000 +0200 +*************** +*** 1309,1314 **** +--- 1309,1317 ---- + return OK; + } + ++ static int old_char = -1; /* character put back by vungetc() */ ++ static int old_mod_mask; /* mod_mask for ungotten character */ ++ + #if defined(FEAT_EVAL) || defined(FEAT_EX_EXTRA) || defined(PROTO) + + /* +*************** +*** 1323,1328 **** +--- 1326,1335 ---- + if (!tp->typebuf_valid) + typebuf = tp->save_typebuf; + ++ tp->old_char = old_char; ++ tp->old_mod_mask = old_mod_mask; ++ old_char = -1; ++ + tp->save_stuffbuff = stuffbuff; + stuffbuff.bh_first.b_next = NULL; + # ifdef USE_INPUT_BUF +*************** +*** 1344,1349 **** +--- 1351,1359 ---- + typebuf = tp->save_typebuf; + } + ++ old_char = tp->old_char; ++ old_mod_mask = tp->old_mod_mask; ++ + free_buff(&stuffbuff); + stuffbuff = tp->save_stuffbuff; + # ifdef USE_INPUT_BUF +*************** +*** 1499,1507 **** + #define KL_PART_KEY -1 /* keylen value for incomplete key-code */ + #define KL_PART_MAP -2 /* keylen value for incomplete mapping */ + +- static int old_char = -1; /* character put back by vungetc() */ +- static int old_mod_mask; /* mod_mask for ungotten character */ +- + /* + * Get the next input character. + * Can return a special key or a multi-byte character. +--- 1509,1514 ---- +*** ../vim-7.2.224/src/structs.h 2009-06-16 16:01:34.000000000 +0200 +--- src/structs.h 2009-07-09 18:09:20.000000000 +0200 +*************** +*** 882,887 **** +--- 882,889 ---- + { + typebuf_T save_typebuf; + int typebuf_valid; /* TRUE when save_typebuf valid */ ++ int old_char; ++ int old_mod_mask; + struct buffheader save_stuffbuff; + #ifdef USE_INPUT_BUF + char_u *save_inputbuf; +*** ../vim-7.2.224/src/version.c 2009-07-09 18:15:19.000000000 +0200 +--- src/version.c 2009-07-09 18:21:56.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 225, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.226 b/7.2.226 new file mode 100644 index 00000000..d922a080 --- /dev/null +++ b/7.2.226 @@ -0,0 +1,268 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.226 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.226 +Problem: ml_get error after deleting the last line. (Xavier de Gaye) +Solution: When adjusting marks a callback may be invoked. Adjust the cursor + position before invoking deleted_lines_mark(). +Files: src/ex_cmds.c, src/ex_docmd.c, src/if_mzsch.c, src/if_python.c, + src/if_perl.xs, src/misc1.c + + +*** ../vim-7.2.225/src/ex_cmds.c 2009-05-17 13:30:58.000000000 +0200 +--- src/ex_cmds.c 2009-07-09 12:56:51.000000000 +0200 +*************** +*** 4013,4018 **** +--- 4013,4021 ---- + break; + ml_delete(eap->line1, FALSE); + } ++ ++ /* make sure the cursor is not beyond the end of the file now */ ++ check_cursor_lnum(); + deleted_lines_mark(eap->line1, (long)(eap->line2 - lnum)); + + /* ":append" on the line above the deleted lines. */ +*** ../vim-7.2.225/src/ex_docmd.c 2009-07-09 15:55:34.000000000 +0200 +--- src/ex_docmd.c 2009-07-09 15:24:03.000000000 +0200 +*************** +*** 7845,7854 **** + if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK) + { + ml_delete(lnum, FALSE); +- deleted_lines_mark(lnum, 1L); + if (curwin->w_cursor.lnum > 1 + && curwin->w_cursor.lnum >= lnum) + --curwin->w_cursor.lnum; + } + } + redraw_curbuf_later(VALID); +--- 7845,7854 ---- + if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK) + { + ml_delete(lnum, FALSE); + if (curwin->w_cursor.lnum > 1 + && curwin->w_cursor.lnum >= lnum) + --curwin->w_cursor.lnum; ++ deleted_lines_mark(lnum, 1L); + } + } + redraw_curbuf_later(VALID); +*** ../vim-7.2.225/src/if_mzsch.c 2009-06-24 17:51:01.000000000 +0200 +--- src/if_mzsch.c 2009-07-09 12:59:17.000000000 +0200 +*************** +*** 2169,2177 **** + curbuf = savebuf; + raise_vim_exn(_("cannot delete line")); + } +- deleted_lines_mark((linenr_T)n, 1L); + if (buf->buf == curwin->w_buffer) + mz_fix_cursor(n, n + 1, -1); + + curbuf = savebuf; + +--- 2169,2177 ---- + curbuf = savebuf; + raise_vim_exn(_("cannot delete line")); + } + if (buf->buf == curwin->w_buffer) + mz_fix_cursor(n, n + 1, -1); ++ deleted_lines_mark((linenr_T)n, 1L); + + curbuf = savebuf; + +*************** +*** 2299,2307 **** + curbuf = savebuf; + raise_vim_exn(_("cannot delete line")); + } +- deleted_lines_mark((linenr_T)lo, (long)old_len); + if (buf->buf == curwin->w_buffer) + mz_fix_cursor(lo, hi, -old_len); + } + + curbuf = savebuf; +--- 2299,2307 ---- + curbuf = savebuf; + raise_vim_exn(_("cannot delete line")); + } + if (buf->buf == curwin->w_buffer) + mz_fix_cursor(lo, hi, -old_len); ++ deleted_lines_mark((linenr_T)lo, (long)old_len); + } + + curbuf = savebuf; +*** ../vim-7.2.225/src/if_python.c 2009-05-21 23:25:38.000000000 +0200 +--- src/if_python.c 2009-07-09 12:59:45.000000000 +0200 +*************** +*** 2497,2505 **** + PyErr_SetVim(_("cannot delete line")); + else + { +- deleted_lines_mark((linenr_T)n, 1L); + if (buf == curwin->w_buffer) + py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1); + } + + curbuf = savebuf; +--- 2497,2505 ---- + PyErr_SetVim(_("cannot delete line")); + else + { + if (buf == curwin->w_buffer) + py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1); ++ deleted_lines_mark((linenr_T)n, 1L); + } + + curbuf = savebuf; +*************** +*** 2596,2605 **** + break; + } + } +- deleted_lines_mark((linenr_T)lo, (long)i); +- + if (buf == curwin->w_buffer) + py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n); + } + + curbuf = savebuf; +--- 2596,2604 ---- + break; + } + } + if (buf == curwin->w_buffer) + py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n); ++ deleted_lines_mark((linenr_T)lo, (long)i); + } + + curbuf = savebuf; +*** ../vim-7.2.225/src/if_perl.xs 2009-06-16 16:01:34.000000000 +0200 +--- src/if_perl.xs 2009-07-09 13:02:16.000000000 +0200 +*************** +*** 1233,1241 **** + if (u_savedel(lnum, 1) == OK) + { + ml_delete(lnum, 0); + deleted_lines_mark(lnum, 1L); +- if (aco.save_curbuf == curbuf) +- check_cursor(); + } + + /* restore curwin/curbuf and a few other things */ +--- 1235,1242 ---- + if (u_savedel(lnum, 1) == OK) + { + ml_delete(lnum, 0); ++ check_cursor(); + deleted_lines_mark(lnum, 1L); + } + + /* restore curwin/curbuf and a few other things */ +*** ../vim-7.2.225/src/misc1.c 2009-06-24 16:25:23.000000000 +0200 +--- src/misc1.c 2009-07-09 13:00:59.000000000 +0200 +*************** +*** 2345,2356 **** + int undo; /* if TRUE, prepare for undo */ + { + long n; + + if (nlines <= 0) + return; + + /* save the deleted lines for undo */ +! if (undo && u_savedel(curwin->w_cursor.lnum, nlines) == FAIL) + return; + + for (n = 0; n < nlines; ) +--- 2345,2357 ---- + int undo; /* if TRUE, prepare for undo */ + { + long n; ++ linenr_T first = curwin->w_cursor.lnum; + + if (nlines <= 0) + return; + + /* save the deleted lines for undo */ +! if (undo && u_savedel(first, nlines) == FAIL) + return; + + for (n = 0; n < nlines; ) +*************** +*** 2358,2375 **** + if (curbuf->b_ml.ml_flags & ML_EMPTY) /* nothing to delete */ + break; + +! ml_delete(curwin->w_cursor.lnum, TRUE); + ++n; + + /* If we delete the last line in the file, stop */ +! if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count) + break; + } +- /* adjust marks, mark the buffer as changed and prepare for displaying */ +- deleted_lines_mark(curwin->w_cursor.lnum, n); + + curwin->w_cursor.col = 0; + check_cursor_lnum(); + } + + int +--- 2359,2379 ---- + if (curbuf->b_ml.ml_flags & ML_EMPTY) /* nothing to delete */ + break; + +! ml_delete(first, TRUE); + ++n; + + /* If we delete the last line in the file, stop */ +! if (first > curbuf->b_ml.ml_line_count) + break; + } + ++ /* Correct the cursor position before calling deleted_lines_mark(), it may ++ * trigger a callback to display the cursor. */ + curwin->w_cursor.col = 0; + check_cursor_lnum(); ++ ++ /* adjust marks, mark the buffer as changed and prepare for displaying */ ++ deleted_lines_mark(first, n); + } + + int +*************** +*** 2621,2626 **** +--- 2625,2632 ---- + + /* + * Like deleted_lines(), but adjust marks first. ++ * Make sure the cursor is on a valid line before calling, a GUI callback may ++ * be triggered to display the cursor. + */ + void + deleted_lines_mark(lnum, count) +*** ../vim-7.2.225/src/version.c 2009-07-09 18:24:24.000000000 +0200 +--- src/version.c 2009-07-09 20:01:16.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 226, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +80. At parties, you introduce your spouse as your "service provider." + + /// 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/7.2.227 b/7.2.227 new file mode 100644 index 00000000..84992128 --- /dev/null +++ b/7.2.227 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.227 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.227 +Problem: When using ":cd" in a script there is no way to track this. +Solution: Display the directory when 'verbose' is 5 or higher. +Files: src/ex_docmd.c + + +*** ../vim-7.2.226/src/ex_docmd.c 2009-07-09 20:06:30.000000000 +0200 +--- src/ex_docmd.c 2009-07-09 15:24:03.000000000 +0200 +*************** +*** 7964,7970 **** + shorten_fnames(TRUE); + + /* Echo the new current directory if the command was typed. */ +! if (KeyTyped) + ex_pwd(eap); + } + vim_free(tofree); +--- 7964,7970 ---- + shorten_fnames(TRUE); + + /* Echo the new current directory if the command was typed. */ +! if (KeyTyped || p_verbose >= 5) + ex_pwd(eap); + } + vim_free(tofree); +*** ../vim-7.2.226/src/version.c 2009-07-09 20:06:30.000000000 +0200 +--- src/version.c 2009-07-09 20:13:13.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 227, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +83. Batteries in the TV remote now last for months. + + /// 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/7.2.228 b/7.2.228 new file mode 100644 index 00000000..a906bef4 --- /dev/null +++ b/7.2.228 @@ -0,0 +1,573 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.228 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.228 +Problem: Cscope is limited to 8 connections. +Solution: Allocated the connection array to handle any number of + connections. (Dominique Pelle) +Files: runtime/doc/if_cscop.txt, src/if_cscope.h, src/if_cscope.c + + +*** ../vim-7.2.227/runtime/doc/if_cscop.txt 2009-03-18 14:30:46.000000000 +0100 +--- runtime/doc/if_cscop.txt 2009-07-09 15:40:48.000000000 +0200 +*************** +*** 355,367 **** + The DJGPP-built version from http://cscope.sourceforge.net is known to not + work with Vim. + +! There are a couple of hard-coded limitations: +! +! 1. The maximum number of cscope connections allowed is 8. Do you +! really need more? +! +! 2. Doing a |:tjump| when |:cstag| searches the tag files is not +! configurable (e.g., you can't do a tselect instead). + + ============================================================================== + 6. Suggested usage *cscope-suggestions* +--- 355,362 ---- + The DJGPP-built version from http://cscope.sourceforge.net is known to not + work with Vim. + +! Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files +! is not configurable (e.g., you can't do a tselect instead). + + ============================================================================== + 6. Suggested usage *cscope-suggestions* +*** ../vim-7.2.227/src/if_cscope.h 2008-08-25 04:35:13.000000000 +0200 +--- src/if_cscope.h 2009-07-09 15:39:32.000000000 +0200 +*************** +*** 25,31 **** + + #define CSCOPE_SUCCESS 0 + #define CSCOPE_FAILURE -1 +- #define CSCOPE_MAX_CONNECTIONS 8 /* you actually need more? */ + + #define CSCOPE_DBFILE "cscope.out" + #define CSCOPE_PROMPT ">> " +--- 25,30 ---- +*** ../vim-7.2.227/src/if_cscope.c 2009-05-16 17:29:37.000000000 +0200 +--- src/if_cscope.c 2009-07-09 15:39:32.000000000 +0200 +*************** +*** 46,52 **** + static int cs_find __ARGS((exarg_T *eap)); + static int cs_find_common __ARGS((char *opt, char *pat, int, int, int)); + static int cs_help __ARGS((exarg_T *eap)); +- static void cs_init __ARGS((void)); + static void clear_csinfo __ARGS((int i)); + static int cs_insert_filelist __ARGS((char *, char *, char *, + struct stat *)); +--- 46,51 ---- +*************** +*** 66,72 **** + static int cs_show __ARGS((exarg_T *eap)); + + +! static csinfo_T csinfo[CSCOPE_MAX_CONNECTIONS]; + static int eap_arg_len; /* length of eap->arg, set in + cs_lookup_cmd() */ + static cscmd_T cs_cmds[] = +--- 65,74 ---- + static int cs_show __ARGS((exarg_T *eap)); + + +! static csinfo_T * csinfo = NULL; +! static int csinfo_size = 0; /* number of items allocated in +! csinfo[] */ +! + static int eap_arg_len; /* length of eap->arg, set in + cs_lookup_cmd() */ + static cscmd_T cs_cmds[] = +*************** +*** 144,166 **** + } + case EXP_CSCOPE_KILL: + { +! static char_u connection[2]; + + /* ":cscope kill" accepts connection numbers or partial names of + * the pathname of the cscope database as argument. Only complete + * with connection numbers. -1 can also be used to kill all + * connections. */ +! for (i = 0, current_idx = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname == NULL) + continue; + if (current_idx++ == idx) + { +! /* Connection number fits in one character since +! * CSCOPE_MAX_CONNECTIONS is < 10 */ +! connection[0] = i + '0'; +! connection[1] = NUL; +! return connection; + } + } + return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL; +--- 146,165 ---- + } + case EXP_CSCOPE_KILL: + { +! static char connection[5]; + + /* ":cscope kill" accepts connection numbers or partial names of + * the pathname of the cscope database as argument. Only complete + * with connection numbers. -1 can also be used to kill all + * connections. */ +! for (i = 0, current_idx = 0; i < csinfo_size; i++) + { + if (csinfo[i].fname == NULL) + continue; + if (current_idx++ == idx) + { +! vim_snprintf(connection, sizeof(connection), "%d", i); +! return (char_u *)connection; + } + } + return (current_idx == idx && idx > 0) ? (char_u *)"-1" : NULL; +*************** +*** 223,229 **** + { + cscmd_T *cmdp; + +- cs_init(); + if ((cmdp = cs_lookup_cmd(eap)) == NULL) + { + cs_help(eap); +--- 222,227 ---- +*************** +*** 284,291 **** + { + int ret = FALSE; + +- cs_init(); +- + if (*eap->arg == NUL) + { + (void)EMSG(_("E562: Usage: cstag ")); +--- 282,287 ---- +*************** +*** 441,447 **** + if (num < 0 || num > 4 || (num > 0 && !dbpath)) + return FALSE; + +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (!csinfo[i].fname) + continue; +--- 437,443 ---- + if (num < 0 || num > 4 || (num > 0 && !dbpath)) + return FALSE; + +! for (i = 0; i < csinfo_size; i++) + { + if (!csinfo[i].fname) + continue; +*************** +*** 684,690 **** + short i; + short cnt = 0; + +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname != NULL) + cnt++; +--- 680,686 ---- + short i; + short cnt = 0; + +! for (i = 0; i < csinfo_size; i++) + { + if (csinfo[i].fname != NULL) + cnt++; +*************** +*** 1112,1118 **** + { + int i; + char *cmd; +! int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches; + #ifdef FEAT_QUICKFIX + char cmdletter; + char *qfpos; +--- 1108,1115 ---- + { + int i; + char *cmd; +! int *nummatches; +! int totmatches; + #ifdef FEAT_QUICKFIX + char cmdletter; + char *qfpos; +*************** +*** 1123,1135 **** + if (cmd == NULL) + return FALSE; + + /* send query to all open connections, then count the total number + * of matches so we can alloc matchesp all in one swell foop + */ +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + nummatches[i] = 0; + totmatches = 0; +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL) + continue; +--- 1120,1136 ---- + if (cmd == NULL) + return FALSE; + ++ nummatches = (int *)alloc(sizeof(int)*csinfo_size); ++ if (nummatches == NULL) ++ return FALSE; ++ + /* send query to all open connections, then count the total number + * of matches so we can alloc matchesp all in one swell foop + */ +! for (i = 0; i < csinfo_size; i++) + nummatches[i] = 0; + totmatches = 0; +! for (i = 0; i < csinfo_size; i++) + { + if (csinfo[i].fname == NULL || csinfo[i].to_fp == NULL) + continue; +*************** +*** 1154,1160 **** +--- 1155,1164 ---- + char *buf; + + if (!verbose) ++ { ++ vim_free(nummatches); + return FALSE; ++ } + + buf = (char *)alloc((unsigned)(strlen(opt) + strlen(pat) + strlen(nf))); + if (buf == NULL) +*************** +*** 1165,1170 **** +--- 1169,1175 ---- + (void)EMSG(buf); + vim_free(buf); + } ++ vim_free(nummatches); + return FALSE; + } + +*************** +*** 1217,1222 **** +--- 1222,1228 ---- + (void)EMSG(buf); + vim_free(buf); + } ++ vim_free(nummatches); + return FALSE; + } + } +*************** +*** 1264,1269 **** +--- 1270,1276 ---- + } + mch_remove(tmp); + vim_free(tmp); ++ vim_free(nummatches); + return TRUE; + } + else +*************** +*** 1275,1280 **** +--- 1282,1288 ---- + /* read output */ + cs_fill_results((char *)pat, totmatches, nummatches, &matches, + &contexts, &matched); ++ vim_free(nummatches); + if (matches == NULL) + return FALSE; + +*************** +*** 1328,1353 **** + } /* cs_help */ + + +- /* +- * PRIVATE: cs_init +- * +- * initialize cscope structure if not already +- */ +- static void +- cs_init() +- { +- short i; +- static int init_already = FALSE; +- +- if (init_already) +- return; +- +- for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) +- clear_csinfo(i); +- +- init_already = TRUE; +- } /* cs_init */ +- + static void + clear_csinfo(i) + int i; +--- 1336,1341 ---- +*************** +*** 1444,1450 **** + #endif + + i = -1; /* can be set to the index of an empty item in csinfo */ +! for (j = 0; j < CSCOPE_MAX_CONNECTIONS; j++) + { + if (csinfo[j].fname != NULL + #if defined(UNIX) +--- 1432,1438 ---- + #endif + + i = -1; /* can be set to the index of an empty item in csinfo */ +! for (j = 0; j < csinfo_size; j++) + { + if (csinfo[j].fname != NULL + #if defined(UNIX) +*************** +*** 1471,1479 **** + + if (i == -1) + { +! if (p_csverbose) +! (void)EMSG(_("E569: maximum number of cscope connections reached")); +! return -1; + } + + if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL) +--- 1459,1483 ---- + + if (i == -1) + { +! i = csinfo_size; +! if (csinfo_size == 0) +! { +! /* First time allocation: allocate only 1 connection. It should +! * be enough for most users. If more is needed, csinfo will be +! * reallocated. */ +! csinfo_size = 1; +! csinfo = (csinfo_T *)alloc_clear(sizeof(csinfo_T)); +! } +! else +! { +! /* Reallocate space for more connections. */ +! csinfo_size *= 2; +! csinfo = vim_realloc(csinfo, sizeof(csinfo_T)*csinfo_size); +! } +! if (csinfo == NULL) +! return -1; +! for (j = csinfo_size/2; j < csinfo_size; j++) +! clear_csinfo(j); + } + + if ((csinfo[i].fname = (char *)alloc((unsigned)strlen(fname)+1)) == NULL) +*************** +*** 1580,1594 **** + /* It must be part of a name. We will try to find a match + * within all the names in the csinfo data structure + */ +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok)) + break; + } + } + +! if ((i >= CSCOPE_MAX_CONNECTIONS || i < -1 || csinfo[i].fname == NULL) +! && i != -1) + { + if (p_csverbose) + (void)EMSG2(_("E261: cscope connection %s not found"), stok); +--- 1584,1597 ---- + /* It must be part of a name. We will try to find a match + * within all the names in the csinfo data structure + */ +! for (i = 0; i < csinfo_size; i++) + { + if (csinfo[i].fname != NULL && strstr(csinfo[i].fname, stok)) + break; + } + } + +! if ((i != -1) && (i >= csinfo_size || i < -1 || csinfo[i].fname == NULL)) + { + if (p_csverbose) + (void)EMSG2(_("E261: cscope connection %s not found"), stok); +*************** +*** 1597,1603 **** + { + if (i == -1) + { +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname) + cs_kill_execute(i, csinfo[i].fname); +--- 1600,1606 ---- + { + if (i == -1) + { +! for (i = 0; i < csinfo_size; i++) + { + if (csinfo[i].fname) + cs_kill_execute(i, csinfo[i].fname); +*************** +*** 1857,1863 **** + if (buf == NULL) + return; + +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (nummatches_a[i] < 1) + continue; +--- 1860,1866 ---- + if (buf == NULL) + return; + +! for (i = 0; i < csinfo_size; i++) + { + if (nummatches_a[i] < 1) + continue; +*************** +*** 1929,1935 **** + if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL) + goto parse_out; + +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (nummatches_a[i] < 1) + continue; +--- 1932,1938 ---- + if ((cntxts = (char **)alloc(sizeof(char *) * totmatches)) == NULL) + goto parse_out; + +! for (i = 0; i < csinfo_size; i++) + { + if (nummatches_a[i] < 1) + continue; +*************** +*** 2383,2392 **** + int i; + char buf[20]; /* for sprintf " (#%d)" */ + + /* malloc our db and ppath list */ +! dblist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *)); +! pplist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *)); +! fllist = (char **)alloc(CSCOPE_MAX_CONNECTIONS * sizeof(char *)); + if (dblist == NULL || pplist == NULL || fllist == NULL) + { + vim_free(dblist); +--- 2386,2398 ---- + int i; + char buf[20]; /* for sprintf " (#%d)" */ + ++ if (csinfo_size == 0) ++ return CSCOPE_SUCCESS; ++ + /* malloc our db and ppath list */ +! dblist = (char **)alloc(csinfo_size * sizeof(char *)); +! pplist = (char **)alloc(csinfo_size * sizeof(char *)); +! fllist = (char **)alloc(csinfo_size * sizeof(char *)); + if (dblist == NULL || pplist == NULL || fllist == NULL) + { + vim_free(dblist); +*************** +*** 2395,2401 **** + return CSCOPE_FAILURE; + } + +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + dblist[i] = csinfo[i].fname; + pplist[i] = csinfo[i].ppath; +--- 2401,2407 ---- + return CSCOPE_FAILURE; + } + +! for (i = 0; i < csinfo_size; i++) + { + dblist[i] = csinfo[i].fname; + pplist[i] = csinfo[i].ppath; +*************** +*** 2405,2411 **** + } + + /* rebuild the cscope connection list */ +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (dblist[i] != NULL) + { +--- 2411,2417 ---- + } + + /* rebuild the cscope connection list */ +! for (i = 0; i < csinfo_size; i++) + { + if (dblist[i] != NULL) + { +*************** +*** 2502,2508 **** + MSG_PUTS_ATTR( + _(" # pid database name prepend path\n"), + hl_attr(HLF_T)); +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + { + if (csinfo[i].fname == NULL) + continue; +--- 2508,2514 ---- + MSG_PUTS_ATTR( + _(" # pid database name prepend path\n"), + hl_attr(HLF_T)); +! for (i = 0; i < csinfo_size; i++) + { + if (csinfo[i].fname == NULL) + continue; +*************** +*** 2531,2538 **** + { + int i; + +! for (i = 0; i < CSCOPE_MAX_CONNECTIONS; i++) + cs_release_csp(i, TRUE); + } + + #endif /* FEAT_CSCOPE */ +--- 2537,2546 ---- + { + int i; + +! for (i = 0; i < csinfo_size; i++) + cs_release_csp(i, TRUE); ++ vim_free(csinfo); ++ csinfo_size = 0; + } + + #endif /* FEAT_CSCOPE */ +*** ../vim-7.2.227/src/version.c 2009-07-09 20:13:59.000000000 +0200 +--- src/version.c 2009-07-09 21:21:48.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 228, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +84. Books in your bookcase bear the names Bongo, WinSock and Inside OLE + + /// 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/7.2.229 b/7.2.229 new file mode 100644 index 00000000..bafaef0b --- /dev/null +++ b/7.2.229 @@ -0,0 +1,60 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.229 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.229 +Problem: Warning for shadowed variable. +Solution: Rename "wait" to "wait_time". +Files: src/os_unix.c + + +*** ../vim-7.2.228/src/os_unix.c 2009-06-16 15:12:11.000000000 +0200 +--- src/os_unix.c 2009-07-09 16:24:14.000000000 +0200 +*************** +*** 1138,1147 **** + * to happen). + */ + { +! long wait; +! for (wait = 0; !sigcont_received && wait <= 3L; wait++) + /* Loop is not entered most of the time */ +! mch_delay(wait, FALSE); + } + # endif + +--- 1138,1147 ---- + * to happen). + */ + { +! long wait_time; +! for (wait_time = 0; !sigcont_received && wait_time <= 3L; wait_time++) + /* Loop is not entered most of the time */ +! mch_delay(wait_time, FALSE); + } + # endif + +*** ../vim-7.2.228/src/version.c 2009-07-09 21:22:36.000000000 +0200 +--- src/version.c 2009-07-14 12:18:21.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 229, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.230 b/7.2.230 new file mode 100644 index 00000000..32379d2c --- /dev/null +++ b/7.2.230 @@ -0,0 +1,87 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.230 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.230 +Problem: A few old lint-style ARGUSED comments. +Solution: Change to the new UNUSED style. +Files: src/getchar.c + + +*** ../vim-7.2.229/src/getchar.c 2009-07-09 18:24:24.000000000 +0200 +--- src/getchar.c 2009-07-09 18:09:13.000000000 +0200 +*************** +*** 3708,3718 **** + * Clear all mappings or abbreviations. + * 'abbr' should be FALSE for mappings, TRUE for abbreviations. + */ +- /*ARGSUSED*/ + void + map_clear(cmdp, arg, forceit, abbr) + char_u *cmdp; +! char_u *arg; + int forceit; + int abbr; + { +--- 3708,3717 ---- + * Clear all mappings or abbreviations. + * 'abbr' should be FALSE for mappings, TRUE for abbreviations. + */ + void + map_clear(cmdp, arg, forceit, abbr) + char_u *cmdp; +! char_u *arg UNUSED; + int forceit; + int abbr; + { +*************** +*** 3741,3753 **** + /* + * Clear all mappings in "mode". + */ +- /*ARGSUSED*/ + void + map_clear_int(buf, mode, local, abbr) +! buf_T *buf; /* buffer for local mappings */ +! int mode; /* mode in which to delete */ +! int local; /* TRUE for buffer-local mappings */ +! int abbr; /* TRUE for abbreviations */ + { + mapblock_T *mp, **mpp; + int hash; +--- 3740,3751 ---- + /* + * Clear all mappings in "mode". + */ + void + map_clear_int(buf, mode, local, abbr) +! buf_T *buf UNUSED; /* buffer for local mappings */ +! int mode; /* mode in which to delete */ +! int local UNUSED; /* TRUE for buffer-local mappings */ +! int abbr; /* TRUE for abbreviations */ + { + mapblock_T *mp, **mpp; + int hash; +*** ../vim-7.2.229/src/version.c 2009-07-14 12:20:28.000000000 +0200 +--- src/version.c 2009-07-14 13:44:05.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 230, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.231 b/7.2.231 new file mode 100644 index 00000000..0f9a6d1e --- /dev/null +++ b/7.2.231 @@ -0,0 +1,49 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.231 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.231 +Problem: Warning for unreacheable code. +Solution: Add #ifdef. +Files: src/if_perl.xs + + +*** ../vim-7.2.230/src/if_perl.xs 2009-07-09 20:06:30.000000000 +0200 +--- src/if_perl.xs 2009-07-09 13:02:16.000000000 +0200 +*************** +*** 720,728 **** +--- 720,730 ---- + #ifdef HAVE_SANDBOX + if (sandbox) + { ++ # ifndef MAKE_TEST /* avoid a warning for unreachable code */ + if ((safe = perl_get_sv( "VIM::safe", FALSE )) == NULL || !SvTRUE(safe)) + EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module")); + else ++ # endif + { + PUSHMARK(SP); + XPUSHs(safe); +*** ../vim-7.2.230/src/version.c 2009-07-14 13:44:43.000000000 +0200 +--- src/version.c 2009-07-14 16:04:07.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 231, + /**/ + +-- +From "know your smileys": + ~#:-( I just washed my hair, and I can't do nuthin' with it. + + /// 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/7.2.232 b/7.2.232 new file mode 100644 index 00000000..02727c74 --- /dev/null +++ b/7.2.232 @@ -0,0 +1,102 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.232 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.232 +Problem: Cannot debug problems with being in a wrong directory. +Solution: When 'verbose' is 5 or higher report directory changes. +Files: src/os_unix.c, src/os_unix.h, src/proto/os_unix.pro + + +*** ../vim-7.2.231/src/os_unix.c 2009-07-14 12:20:28.000000000 +0200 +--- src/os_unix.c 2009-07-14 17:13:15.000000000 +0200 +*************** +*** 319,324 **** +--- 319,341 ---- + {-1, "Unknown!", FALSE} + }; + ++ int ++ mch_chdir(path) ++ char *path; ++ { ++ if (p_verbose >= 5) ++ { ++ verbose_enter(); ++ smsg((char_u *)"chdir(%s)", path); ++ verbose_leave(); ++ } ++ # ifdef VMS ++ return chdir(vms_fixfilename(path)); ++ # else ++ return chdir(path); ++ # endif ++ } ++ + /* + * Write s[len] to the screen. + */ +*************** +*** 2424,2429 **** +--- 2441,2452 ---- + #ifdef HAVE_FCHDIR + if (fd >= 0) + { ++ if (p_verbose >= 5) ++ { ++ verbose_enter(); ++ MSG("fchdir() to previous dir"); ++ verbose_leave(); ++ } + l = fchdir(fd); + close(fd); + } +*** ../vim-7.2.231/src/os_unix.h 2009-05-16 16:36:25.000000000 +0200 +--- src/os_unix.h 2009-07-14 16:55:05.000000000 +0200 +*************** +*** 482,492 **** + # else + int mch_rename __ARGS((const char *src, const char *dest)); + # endif +- # ifdef VMS +- # define mch_chdir(s) chdir(vms_fixfilename(s)) +- # else +- # define mch_chdir(s) chdir(s) +- # endif + # ifndef VMS + # ifdef __MVS__ + /* on OS390 Unix getenv() doesn't return a pointer to persistent +--- 482,487 ---- +*** ../vim-7.2.231/src/proto/os_unix.pro 2008-06-24 23:58:57.000000000 +0200 +--- src/proto/os_unix.pro 2009-07-14 16:58:08.000000000 +0200 +*************** +*** 1,4 **** +--- 1,5 ---- + /* os_unix.c */ ++ int mch_chdir __ARGS((char *path)); + void mch_write __ARGS((char_u *s, int len)); + int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt)); + int mch_char_avail __ARGS((void)); +*** ../vim-7.2.231/src/version.c 2009-07-14 16:05:14.000000000 +0200 +--- src/version.c 2009-07-14 17:37:15.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 232, + /**/ + +-- +From "know your smileys": + O:-) Saint + + /// 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/7.2.233 b/7.2.233 new file mode 100644 index 00000000..f9fbd848 --- /dev/null +++ b/7.2.233 @@ -0,0 +1,96 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.233 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.233 (extra part of 7.2.232) +Problem: Cannot debug problems with being in a wrong directory. +Solution: When 'verbose' is 5 or higher report directory changes. +Files: src/os_msdos.c, src/os_mswin.c, src/os_riscos.c, src/os_mac.h + + +*** ../vim-7.2.232/src/os_msdos.c 2008-06-24 23:30:18.000000000 +0200 +--- src/os_msdos.c 2009-07-14 16:50:57.000000000 +0200 +*************** +*** 2039,2044 **** +--- 2039,2050 ---- + { + if (path[0] == NUL) /* just checking... */ + return 0; ++ if (p_verbose >= 5) ++ { ++ verbose_enter(); ++ smsg((char_u *)"chdir(%s)", path); ++ verbose_leave(); ++ } + if (path[1] == ':') /* has a drive name */ + { + if (change_drive(TOLOWER_ASC(path[0]) - 'a' + 1)) +*** ../vim-7.2.232/src/os_mswin.c 2009-05-14 22:00:37.000000000 +0200 +--- src/os_mswin.c 2009-07-14 16:53:03.000000000 +0200 +*************** +*** 653,658 **** +--- 653,664 ---- + if (path[0] == NUL) /* just checking... */ + return -1; + ++ if (p_verbose >= 5) ++ { ++ verbose_enter(); ++ smsg((char_u *)"chdir(%s)", path); ++ verbose_leave(); ++ } + if (isalpha(path[0]) && path[1] == ':') /* has a drive name */ + { + /* If we can change to the drive, skip that part of the path. If we +*** ../vim-7.2.232/src/os_riscos.c 2006-03-07 23:25:50.000000000 +0100 +--- src/os_riscos.c 2009-07-14 16:53:35.000000000 +0200 +*************** +*** 1203,1208 **** +--- 1203,1214 ---- + int retval; + char_u *new_dir; + ++ if (p_verbose >= 5) ++ { ++ verbose_enter(); ++ smsg((char_u *)"chdir(%s)", dir); ++ verbose_leave(); ++ } + length = strlen(dir); + if (dir[length - 1] != '.') + return chdir(dir); /* No trailing dots - nothing to do. */ +*** ../vim-7.2.232/src/os_mac.h 2009-06-24 16:41:01.000000000 +0200 +--- src/os_mac.h 2009-07-14 16:54:33.000000000 +0200 +*************** +*** 291,297 **** + # define HAVE_SETENV + # define HAVE_RENAME + # endif +- # define mch_chdir(s) chdir(s) + #endif + + #if defined(MACOS_X) && !defined(HAVE_CONFIG_H) +--- 291,296 ---- +*** ../vim-7.2.232/src/version.c 2009-07-14 17:38:51.000000000 +0200 +--- src/version.c 2009-07-14 18:35:30.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 233, + /**/ + +-- +From "know your smileys": + :-O>-o Smiley American tourist (note big mouth and camera) + + /// 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/7.2.234 b/7.2.234 new file mode 100644 index 00000000..dd44d5d0 --- /dev/null +++ b/7.2.234 @@ -0,0 +1,111 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.234 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.234 +Problem: It is not possible to ignore file names without a suffix. +Solution: Use an empty entry in 'suffixes' for file names without a dot. +Files: runtime/doc/cmdline.txt, src/misc1.c + + +*** ../vim-7.2.233/runtime/doc/cmdline.txt 2008-11-09 13:43:25.000000000 +0100 +--- runtime/doc/cmdline.txt 2009-07-14 13:35:56.000000000 +0200 +*************** +*** 441,453 **** + those files with an extension that is in the 'suffixes' option are ignored. + The default is ".bak,~,.o,.h,.info,.swp,.obj", which means that files ending + in ".bak", "~", ".o", ".h", ".info", ".swp" and ".obj" are sometimes ignored. +! It is impossible to ignore suffixes with two dots. Examples: + + pattern: files: match: ~ + test* test.c test.h test.o test.c + test* test.h test.o test.h and test.o + test* test.i test.h test.c test.i and test.c + + If there is more than one matching file (after ignoring the ones matching + the 'suffixes' option) the first file name is inserted. You can see that + there is only one match when you type 'wildchar' twice and the completed +--- 439,458 ---- + those files with an extension that is in the 'suffixes' option are ignored. + The default is ".bak,~,.o,.h,.info,.swp,.obj", which means that files ending + in ".bak", "~", ".o", ".h", ".info", ".swp" and ".obj" are sometimes ignored. +! +! An empty entry, two consecutive commas, match a file name that does not +! contain a ".", thus has no suffix. This is useful to ignore "prog" and prefer +! "prog.c". +! +! Examples: + + pattern: files: match: ~ + test* test.c test.h test.o test.c + test* test.h test.o test.h and test.o + test* test.i test.h test.c test.i and test.c + ++ It is impossible to ignore suffixes with two dots. ++ + If there is more than one matching file (after ignoring the ones matching + the 'suffixes' option) the first file name is inserted. You can see that + there is only one match when you type 'wildchar' twice and the completed +*** ../vim-7.2.233/src/misc1.c 2009-07-09 20:06:30.000000000 +0200 +--- src/misc1.c 2009-07-14 15:51:55.000000000 +0200 +*************** +*** 8533,8543 **** + for (setsuf = p_su; *setsuf; ) + { + setsuflen = copy_option_part(&setsuf, suf_buf, MAXSUFLEN, ".,"); +! if (fnamelen >= setsuflen +! && fnamencmp(suf_buf, fname + fnamelen - setsuflen, +! (size_t)setsuflen) == 0) +! break; +! setsuflen = 0; + } + return (setsuflen != 0); + } +--- 8534,8558 ---- + for (setsuf = p_su; *setsuf; ) + { + setsuflen = copy_option_part(&setsuf, suf_buf, MAXSUFLEN, ".,"); +! if (setsuflen == 0) +! { +! char_u *tail = gettail(fname); +! +! /* empty entry: match name without a '.' */ +! if (vim_strchr(tail, '.') == NULL) +! { +! setsuflen = 1; +! break; +! } +! } +! else +! { +! if (fnamelen >= setsuflen +! && fnamencmp(suf_buf, fname + fnamelen - setsuflen, +! (size_t)setsuflen) == 0) +! break; +! setsuflen = 0; +! } + } + return (setsuflen != 0); + } +*** ../vim-7.2.233/src/version.c 2009-07-14 18:38:09.000000000 +0200 +--- src/version.c 2009-07-14 21:38:30.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 234, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.235 b/7.2.235 new file mode 100644 index 00000000..6aa8338e --- /dev/null +++ b/7.2.235 @@ -0,0 +1,94 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.235 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.235 +Problem: Using CTRL-O z= in Insert mode has a delay before redrawing. +Solution: Reset msg_didout and msg_scroll. +Files: src/misc1.c, src/spell.c + + +*** ../vim-7.2.234/src/misc1.c 2009-07-14 21:40:30.000000000 +0200 +--- src/misc1.c 2009-07-14 15:51:55.000000000 +0200 +*************** +*** 3276,3281 **** +--- 3276,3282 ---- + cmdline_row = msg_row - 1; + need_wait_return = FALSE; + msg_didany = FALSE; ++ msg_didout = FALSE; + } + else + cmdline_row = save_cmdline_row; +*** ../vim-7.2.234/src/spell.c 2009-05-17 13:30:58.000000000 +0200 +--- src/spell.c 2009-07-14 15:57:55.000000000 +0200 +*************** +*** 10252,10257 **** +--- 10252,10258 ---- + int limit; + int selected = count; + int badlen = 0; ++ int msg_scroll_save = msg_scroll; + + if (no_spell_checking(curwin)) + return; +*************** +*** 10416,10422 **** + selected = prompt_for_number(&mouse_used); + if (mouse_used) + selected -= lines_left; +! lines_left = Rows; /* avoid more prompt */ + } + + if (selected > 0 && selected <= sug.su_ga.ga_len && u_save_cursor() == OK) +--- 10417,10425 ---- + selected = prompt_for_number(&mouse_used); + if (mouse_used) + selected -= lines_left; +! lines_left = Rows; /* avoid more prompt */ +! /* don't delay for 'smd' in normal_cmd() */ +! msg_scroll = msg_scroll_save; + } + + if (selected > 0 && selected <= sug.su_ga.ga_len && u_save_cursor() == OK) +*************** +*** 10441,10447 **** + } + + /* Replace the word. */ +! p = alloc((unsigned)STRLEN(line) - stp->st_orglen + stp->st_wordlen + 1); + if (p != NULL) + { + c = (int)(sug.su_badptr - line); +--- 10444,10451 ---- + } + + /* Replace the word. */ +! p = alloc((unsigned)STRLEN(line) - stp->st_orglen +! + stp->st_wordlen + 1); + if (p != NULL) + { + c = (int)(sug.su_badptr - line); +*** ../vim-7.2.234/src/version.c 2009-07-14 21:40:30.000000000 +0200 +--- src/version.c 2009-07-22 11:00:34.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 235, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.236 b/7.2.236 new file mode 100644 index 00000000..aeb1f57d --- /dev/null +++ b/7.2.236 @@ -0,0 +1,81 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.236 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.236 +Problem: Mac: Compiling with Ruby doesn't always work. +Solution: In configure filter out the --arch argument (Bjorn Winckler) +Files: src/configure.in, src/auto/configure + + +*** ../vim-7.2.235/src/configure.in 2009-05-26 22:58:43.000000000 +0200 +--- src/configure.in 2009-07-14 16:09:34.000000000 +0200 +*************** +*** 984,990 **** + fi + rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'` + if test "X$rubyldflags" != "X"; then +! LDFLAGS="$rubyldflags $LDFLAGS" + fi + RUBY_SRC="if_ruby.c" + RUBY_OBJ="objects/if_ruby.o" +--- 984,996 ---- + fi + rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'` + if test "X$rubyldflags" != "X"; then +! dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only +! dnl be included if requested by passing --with-mac-arch to +! dnl configure, so strip these flags first (if present) +! rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//'` +! if test "X$rubyldflags" != "X"; then +! LDFLAGS="$rubyldflags $LDFLAGS" +! fi + fi + RUBY_SRC="if_ruby.c" + RUBY_OBJ="objects/if_ruby.o" +*** ../vim-7.2.235/src/auto/configure 2009-05-26 22:58:43.000000000 +0200 +--- src/auto/configure 2009-07-14 16:11:58.000000000 +0200 +*************** +*** 5780,5786 **** + fi + rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'` + if test "X$rubyldflags" != "X"; then +! LDFLAGS="$rubyldflags $LDFLAGS" + fi + RUBY_SRC="if_ruby.c" + RUBY_OBJ="objects/if_ruby.o" +--- 5780,5789 ---- + fi + rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'` + if test "X$rubyldflags" != "X"; then +! rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//'` +! if test "X$rubyldflags" != "X"; then +! LDFLAGS="$rubyldflags $LDFLAGS" +! fi + fi + RUBY_SRC="if_ruby.c" + RUBY_OBJ="objects/if_ruby.o" +*** ../vim-7.2.235/src/version.c 2009-07-22 11:03:38.000000000 +0200 +--- src/version.c 2009-07-22 11:14:38.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 236, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.237 b/7.2.237 new file mode 100644 index 00000000..3592d3d6 --- /dev/null +++ b/7.2.237 @@ -0,0 +1,76 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.237 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.237 +Problem: Crash on exit when window icon not set. +Solution: Copy terminal name when using it for the icon name. +Files: src/os_unix.c + + +*** ../vim-7.2.236/src/os_unix.c 2009-07-14 17:38:51.000000000 +0200 +--- src/os_unix.c 2009-07-14 18:30:04.000000000 +0200 +*************** +*** 1734,1742 **** + if (oldicon == NULL && !test_only) + { + if (STRNCMP(T_NAME, "builtin_", 8) == 0) +! oldicon = T_NAME + 8; + else +! oldicon = T_NAME; + } + + return retval; +--- 1734,1742 ---- + if (oldicon == NULL && !test_only) + { + if (STRNCMP(T_NAME, "builtin_", 8) == 0) +! oldicon = vim_strsave(T_NAME + 8); + else +! oldicon = vim_strsave(T_NAME); + } + + return retval; +*************** +*** 1939,1947 **** + if (!test_only) + { + if (STRNCMP(T_NAME, "builtin_", 8) == 0) +! oldicon = T_NAME + 8; + else +! oldicon = T_NAME; + } + return FALSE; + } +--- 1939,1947 ---- + if (!test_only) + { + if (STRNCMP(T_NAME, "builtin_", 8) == 0) +! oldicon = vim_strsave(T_NAME + 8); + else +! oldicon = vim_strsave(T_NAME); + } + return FALSE; + } +*** ../vim-7.2.236/src/version.c 2009-07-22 11:16:54.000000000 +0200 +--- src/version.c 2009-07-22 13:26:30.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 237, + /**/ + +-- +Common sense is what tells you that the world is flat. + + /// 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/7.2.238 b/7.2.238 new file mode 100644 index 00000000..a70976d8 --- /dev/null +++ b/7.2.238 @@ -0,0 +1,117 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.238 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.238 +Problem: Leaking memory when setting term to "builtin_dumb". +Solution: Free memory when resetting term option t_Co. +Files: src/option.c, src/proto/option.pro, src/term.c + + +*** ../vim-7.2.237/src/option.c 2009-06-16 17:50:56.000000000 +0200 +--- src/option.c 2009-07-22 12:49:19.000000000 +0200 +*************** +*** 403,410 **** + #define P_NUM 0x02 /* the option is numeric */ + #define P_STRING 0x04 /* the option is a string */ + #define P_ALLOCED 0x08 /* the string option is in allocated memory, +! must use vim_free() when assigning new +! value. Not set if default is the same. */ + #define P_EXPAND 0x10 /* environment expansion. NOTE: P_EXPAND can + never be used for local or hidden options! */ + #define P_NODEFAULT 0x40 /* don't set to default value */ +--- 403,411 ---- + #define P_NUM 0x02 /* the option is numeric */ + #define P_STRING 0x04 /* the option is a string */ + #define P_ALLOCED 0x08 /* the string option is in allocated memory, +! must use free_string_option() when +! assigning new value. Not set if default is +! the same. */ + #define P_EXPAND 0x10 /* environment expansion. NOTE: P_EXPAND can + never be used for local or hidden options! */ + #define P_NODEFAULT 0x40 /* don't set to default value */ +*************** +*** 8927,8932 **** +--- 8928,8955 ---- + } + + /* ++ * Free the string for one term option, if it was allocated. ++ * Set the string to empty_option and clear allocated flag. ++ * "var" points to the option value. ++ */ ++ void ++ free_one_termoption(var) ++ char_u *var; ++ { ++ struct vimoption *p; ++ ++ for (p = &options[0]; p->fullname != NULL; p++) ++ if (p->var == var) ++ { ++ if (p->flags & P_ALLOCED) ++ free_string_option(*(char_u **)(p->var)); ++ *(char_u **)(p->var) = empty_option; ++ p->flags &= ~P_ALLOCED; ++ break; ++ } ++ } ++ ++ /* + * Set the terminal option defaults to the current value. + * Used after setting the terminal name. + */ +*** ../vim-7.2.237/src/proto/option.pro 2009-02-21 20:27:00.000000000 +0100 +--- src/proto/option.pro 2009-07-22 12:52:31.000000000 +0200 +*************** +*** 29,34 **** +--- 29,35 ---- + int makefoldset __ARGS((FILE *fd)); + void clear_termoptions __ARGS((void)); + void free_termoptions __ARGS((void)); ++ void free_one_termoption __ARGS((char_u *var)); + void set_term_defaults __ARGS((void)); + void comp_col __ARGS((void)); + char_u *get_equalprg __ARGS((void)); +*** ../vim-7.2.237/src/term.c 2009-06-16 14:31:56.000000000 +0200 +--- src/term.c 2009-07-22 13:19:59.000000000 +0200 +*************** +*** 2881,2887 **** + + /* if 'Sb' and 'AB' are not defined, reset "Co" */ + if (*T_CSB == NUL && *T_CAB == NUL) +! T_CCO = empty_option; + + /* Set 'weirdinvert' according to value of 't_xs' */ + p_wiv = (*T_XS != NUL); +--- 2881,2887 ---- + + /* if 'Sb' and 'AB' are not defined, reset "Co" */ + if (*T_CSB == NUL && *T_CAB == NUL) +! free_one_termoption(T_CCO); + + /* Set 'weirdinvert' according to value of 't_xs' */ + p_wiv = (*T_XS != NUL); +*** ../vim-7.2.237/src/version.c 2009-07-22 13:27:50.000000000 +0200 +--- src/version.c 2009-07-22 14:25:44.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 238, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +95. Only communication in your household is through email. + + /// 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/7.2.239 b/7.2.239 new file mode 100644 index 00000000..26b80ee2 --- /dev/null +++ b/7.2.239 @@ -0,0 +1,145 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.239 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.239 +Problem: Using :diffpatch twice or when patching fails causes memory + corruption and/or a crash. (Bryan Venteicher) +Solution: Detect missing output file. Avoid using non-existing buffer. +Files: src/diff.c + + +*** ../vim-7.2.238/src/diff.c 2009-05-14 22:19:19.000000000 +0200 +--- src/diff.c 2009-07-22 16:06:21.000000000 +0200 +*************** +*** 893,898 **** +--- 893,899 ---- + char_u *browseFile = NULL; + int browse_flag = cmdmod.browse; + #endif ++ struct stat st; + + #ifdef FEAT_BROWSE + if (cmdmod.browse) +*************** +*** 999,1042 **** + STRCAT(buf, ".rej"); + mch_remove(buf); + +! if (curbuf->b_fname != NULL) + { +! newname = vim_strnsave(curbuf->b_fname, + (int)(STRLEN(curbuf->b_fname) + 4)); +! if (newname != NULL) +! STRCAT(newname, ".new"); +! } + + #ifdef FEAT_GUI +! need_mouse_correct = TRUE; + #endif +! /* don't use a new tab page, each tab page has its own diffs */ +! cmdmod.tab = 0; +! +! if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL) +! { +! /* Pretend it was a ":split fname" command */ +! eap->cmdidx = CMD_split; +! eap->arg = tmp_new; +! do_exedit(eap, old_curwin); + +! if (curwin != old_curwin) /* split must have worked */ + { +! /* Set 'diff', 'scrollbind' on and 'wrap' off. */ +! diff_win_options(curwin, TRUE); +! diff_win_options(old_curwin, TRUE); + +! if (newname != NULL) + { +! /* do a ":file filename.new" on the patched buffer */ +! eap->arg = newname; +! ex_file(eap); + + #ifdef FEAT_AUTOCMD +! /* Do filetype detection with the new name. */ +! if (au_has_group((char_u *)"filetypedetect")) +! do_cmdline_cmd((char_u *)":doau filetypedetect BufRead"); + #endif + } + } + } +--- 1000,1050 ---- + STRCAT(buf, ".rej"); + mch_remove(buf); + +! /* Only continue if the output file was created. */ +! if (mch_stat((char *)tmp_new, &st) < 0 || st.st_size == 0) +! EMSG(_("E816: Cannot read patch output")); +! else + { +! if (curbuf->b_fname != NULL) +! { +! newname = vim_strnsave(curbuf->b_fname, + (int)(STRLEN(curbuf->b_fname) + 4)); +! if (newname != NULL) +! STRCAT(newname, ".new"); +! } + + #ifdef FEAT_GUI +! need_mouse_correct = TRUE; + #endif +! /* don't use a new tab page, each tab page has its own diffs */ +! cmdmod.tab = 0; + +! if (win_split(0, (diff_flags & DIFF_VERTICAL) ? WSP_VERT : 0) != FAIL) + { +! /* Pretend it was a ":split fname" command */ +! eap->cmdidx = CMD_split; +! eap->arg = tmp_new; +! do_exedit(eap, old_curwin); + +! /* check that split worked and editing tmp_new */ +! if (curwin != old_curwin && win_valid(old_curwin)) + { +! /* Set 'diff', 'scrollbind' on and 'wrap' off. */ +! diff_win_options(curwin, TRUE); +! diff_win_options(old_curwin, TRUE); +! +! if (newname != NULL) +! { +! /* do a ":file filename.new" on the patched buffer */ +! eap->arg = newname; +! ex_file(eap); + + #ifdef FEAT_AUTOCMD +! /* Do filetype detection with the new name. */ +! if (au_has_group((char_u *)"filetypedetect")) +! do_cmdline_cmd((char_u *)":doau filetypedetect BufRead"); + #endif ++ } + } + } + } +*** ../vim-7.2.238/src/version.c 2009-07-22 14:27:33.000000000 +0200 +--- src/version.c 2009-07-22 16:21:29.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 239, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.240 b/7.2.240 new file mode 100644 index 00000000..7a1c22e2 --- /dev/null +++ b/7.2.240 @@ -0,0 +1,69 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.240 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.240 +Problem: Crash when using find/replace dialog repeatedly. (Michiel + Hartsuiker) +Solution: Avoid doing the operation while busy or recursively. Also refuse + replace when text is locked. +Files: src/gui.c + + +*** ../vim-7.2.239/src/gui.c 2009-06-24 18:31:36.000000000 +0200 +--- src/gui.c 2009-07-22 16:54:16.000000000 +0200 +*************** +*** 5004,5009 **** +--- 5004,5022 ---- + char_u *p; + regmatch_T regmatch; + int save_did_emsg = did_emsg; ++ static int busy = FALSE; ++ ++ /* When the screen is being updated we should not change buffers and ++ * windows structures, it may cause freed memory to be used. Also don't ++ * do this recursively (pressing "Find" quickly several times. */ ++ if (updating_screen || busy) ++ return FALSE; ++ ++ /* refuse replace when text cannot be changed */ ++ if ((type == FRD_REPLACE || type == FRD_REPLACEALL) && text_locked()) ++ return FALSE; ++ ++ busy = TRUE; + + ga_init2(&ga, 1, 100); + if (type == FRD_REPLACEALL) +*************** +*** 5094,5099 **** +--- 5107,5113 ---- + } + + vim_free(ga.ga_data); ++ busy = FALSE; + return (ga.ga_len > 0); + } + +*** ../vim-7.2.239/src/version.c 2009-07-22 16:22:33.000000000 +0200 +--- src/version.c 2009-07-29 11:09:13.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 240, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +113. You are asked about a bus schedule, you wonder if it is 16 or 32 bits. + + /// 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/7.2.241 b/7.2.241 new file mode 100644 index 00000000..42e9ade3 --- /dev/null +++ b/7.2.241 @@ -0,0 +1,169 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.241 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.241 +Problem: When using a combination of ":bufdo" and "doautoall" we may end up + in the wrong directory. (Ajit Thakkar) + Crash when triggering an autocommand in ":vimgrep". (Yukihiro + Nakadaira) +Solution: Clear w_localdir and globaldir when using the aucmd_win. + Use a separate flag to decide aucmd_win needs to be restored. +Files: src/fileio.c, src/globals.h, src/structs.h + + +*** ../vim-7.2.240/src/fileio.c 2009-07-01 17:11:40.000000000 +0200 +--- src/fileio.c 2009-07-22 19:08:55.000000000 +0200 +*************** +*** 8420,8425 **** +--- 8420,8429 ---- + if (aucmd_win == NULL) + win = curwin; + } ++ if (win == NULL && aucmd_win_used) ++ /* Strange recursive autocommand, fall back to using the current ++ * window. Expect a few side effects... */ ++ win = curwin; + + aco->save_curwin = curwin; + aco->save_curbuf = curbuf; +*************** +*** 8428,8433 **** +--- 8432,8438 ---- + /* There is a window for "buf" in the current tab page, make it the + * curwin. This is preferred, it has the least side effects (esp. if + * "buf" is curbuf). */ ++ aco->use_aucmd_win = FALSE; + curwin = win; + } + else +*************** +*** 8436,8444 **** +--- 8441,8460 ---- + * effects, insert it in a the current tab page. + * Anything related to a window (e.g., setting folds) may have + * unexpected results. */ ++ aco->use_aucmd_win = TRUE; ++ aucmd_win_used = TRUE; + aucmd_win->w_buffer = buf; + ++buf->b_nwindows; + win_init_empty(aucmd_win); /* set cursor and topline to safe values */ ++ vim_free(aucmd_win->w_localdir); ++ aucmd_win->w_localdir = NULL; ++ ++ /* Make sure w_localdir and globaldir are NULL to avoid a chdir() in ++ * win_enter_ext(). */ ++ aucmd_win->w_localdir = NULL; ++ aco->globaldir = globaldir; ++ globaldir = NULL; ++ + + #ifdef FEAT_WINDOWS + /* Split the current window, put the aucmd_win in the upper half. +*************** +*** 8472,8478 **** + int dummy; + #endif + +! if (aco->new_curwin == aucmd_win) + { + --curbuf->b_nwindows; + #ifdef FEAT_WINDOWS +--- 8488,8494 ---- + int dummy; + #endif + +! if (aco->use_aucmd_win) + { + --curbuf->b_nwindows; + #ifdef FEAT_WINDOWS +*************** +*** 8499,8504 **** +--- 8515,8521 ---- + /* Remove the window and frame from the tree of frames. */ + (void)winframe_remove(curwin, &dummy, NULL); + win_remove(curwin, NULL); ++ aucmd_win_used = FALSE; + last_status(FALSE); /* may need to remove last status line */ + restore_snapshot(SNAP_AUCMD_IDX, FALSE); + (void)win_comp_pos(); /* recompute window positions */ +*************** +*** 8517,8522 **** +--- 8534,8542 ---- + #endif + curbuf = curwin->w_buffer; + ++ vim_free(globaldir); ++ globaldir = aco->globaldir; ++ + /* the buffer contents may have changed */ + check_cursor(); + if (curwin->w_topline > curbuf->b_ml.ml_line_count) +*************** +*** 8541,8547 **** + #endif + { + /* Restore the buffer which was previously edited by curwin, if +! * it was chagned, we are still the same window and the buffer is + * valid. */ + if (curwin == aco->new_curwin + && curbuf != aco->new_curbuf +--- 8561,8567 ---- + #endif + { + /* Restore the buffer which was previously edited by curwin, if +! * it was changed, we are still the same window and the buffer is + * valid. */ + if (curwin == aco->new_curwin + && curbuf != aco->new_curbuf +*** ../vim-7.2.240/src/globals.h 2009-06-16 16:01:34.000000000 +0200 +--- src/globals.h 2009-07-22 19:50:53.000000000 +0200 +*************** +*** 541,546 **** +--- 541,547 ---- + + #ifdef FEAT_AUTOCMD + EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */ ++ EXTERN int aucmd_win_used INIT(= FALSE); /* aucmd_win is being used */ + #endif + + /* +*** ../vim-7.2.240/src/structs.h 2009-07-09 18:24:24.000000000 +0200 +--- src/structs.h 2009-07-22 18:58:35.000000000 +0200 +*************** +*** 2288,2296 **** +--- 2288,2298 ---- + { + buf_T *save_curbuf; /* saved curbuf */ + #ifdef FEAT_AUTOCMD ++ int use_aucmd_win; /* using aucmd_win */ + win_T *save_curwin; /* saved curwin */ + win_T *new_curwin; /* new curwin */ + buf_T *new_curbuf; /* new curbuf */ ++ char_u *globaldir; /* saved value of globaldir */ + #endif + } aco_save_T; + +*** ../vim-7.2.240/src/version.c 2009-07-29 11:10:31.000000000 +0200 +--- src/version.c 2009-07-29 12:06:31.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 241, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +114. You are counting items, you go "0,1,2,3,4,5,6,7,8,9,A,B,C,D...". + + /// 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/7.2.242 b/7.2.242 new file mode 100644 index 00000000..22341cd2 --- /dev/null +++ b/7.2.242 @@ -0,0 +1,89 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.242 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.242 +Problem: Setting 'lazyredraw' causes the cursor column to be recomputed. + (Tom Link) +Solution: Only recompute the cursor column for a boolean option if changes + the cursor position. +Files: src/option.c + + +*** ../vim-7.2.241/src/option.c 2009-07-22 14:27:33.000000000 +0200 +--- src/option.c 2009-07-29 10:03:39.000000000 +0200 +*************** +*** 7194,7199 **** +--- 7194,7207 ---- + compatible_set(); + } + ++ /* 'list', 'number' */ ++ else if ((int *)varp == &curwin->w_p_list ++ || (int *)varp == &curwin->w_p_nu) ++ { ++ if (curwin->w_curswant != MAXCOL) ++ curwin->w_set_curswant = TRUE; ++ } ++ + else if ((int *)varp == &curbuf->b_p_ro) + { + /* when 'readonly' is reset globally, also reset readonlymode */ +*************** +*** 7645,7650 **** +--- 7653,7666 ---- + curbuf->b_p_imsearch = B_IMODE_USE_INSERT; + # endif + } ++ if (curwin->w_curswant != MAXCOL) ++ curwin->w_set_curswant = TRUE; ++ } ++ ++ else if ((int *)varp == &p_arshape) ++ { ++ if (curwin->w_curswant != MAXCOL) ++ curwin->w_set_curswant = TRUE; + } + #endif + +*************** +*** 7655,7662 **** + options[opt_idx].flags |= P_WAS_SET; + + comp_col(); /* in case 'ruler' or 'showcmd' changed */ +! if (curwin->w_curswant != MAXCOL) +! curwin->w_set_curswant = TRUE; /* in case 'list' changed */ + check_redraw(options[opt_idx].flags); + + return NULL; +--- 7671,7677 ---- + options[opt_idx].flags |= P_WAS_SET; + + comp_col(); /* in case 'ruler' or 'showcmd' changed */ +! + check_redraw(options[opt_idx].flags); + + return NULL; +*** ../vim-7.2.241/src/version.c 2009-07-29 12:09:49.000000000 +0200 +--- src/version.c 2009-07-29 15:40:43.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 242, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +117. You are more comfortable typing in html. + + /// 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/7.2.243 b/7.2.243 new file mode 100644 index 00000000..92a6580d --- /dev/null +++ b/7.2.243 @@ -0,0 +1,67 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.243 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.243 +Problem: Memory leak when using :vimgrep and resizing. (Dominique Pelle) +Solution: Free memory for aucmd_win when resizing and don't allocate it + twice. +Files: src/screen.c + + +*** ../vim-7.2.242/src/screen.c 2009-06-16 17:22:38.000000000 +0200 +--- src/screen.c 2009-07-29 15:59:37.000000000 +0200 +*************** +*** 7467,7472 **** +--- 7467,7476 ---- + */ + FOR_ALL_TAB_WINDOWS(tp, wp) + win_free_lsize(wp); ++ #ifdef FEAT_AUTOCMD ++ if (aucmd_win != NULL) ++ win_free_lsize(aucmd_win); ++ #endif + + new_ScreenLines = (schar_T *)lalloc((long_u)( + (Rows + 1) * Columns * sizeof(schar_T)), FALSE); +*************** +*** 7504,7510 **** + } + } + #ifdef FEAT_AUTOCMD +! if (aucmd_win != NULL && win_alloc_lines(aucmd_win) == FAIL) + outofmem = TRUE; + #endif + #ifdef FEAT_WINDOWS +--- 7508,7515 ---- + } + } + #ifdef FEAT_AUTOCMD +! if (aucmd_win != NULL && aucmd_win->w_lines == NULL +! && win_alloc_lines(aucmd_win) == FAIL) + outofmem = TRUE; + #endif + #ifdef FEAT_WINDOWS +*** ../vim-7.2.242/src/version.c 2009-07-29 15:41:32.000000000 +0200 +--- src/version.c 2009-07-29 16:07:47.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 243, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +118. You are on a first-name basis with your ISP's staff. + + /// 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/7.2.244 b/7.2.244 new file mode 100644 index 00000000..6c9b1fb8 --- /dev/null +++ b/7.2.244 @@ -0,0 +1,174 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.244 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.244 +Problem: When 'enc' is utf-8 and 'fenc' is latin1, writing a non-latin1 + character gives a conversion error without any hint what is wrong. +Solution: When known add the line number to the error message. +Files: src/fileio.c + + +*** ../vim-7.2.243/src/fileio.c 2009-07-29 12:09:49.000000000 +0200 +--- src/fileio.c 2009-07-29 17:04:06.000000000 +0200 +*************** +*** 121,126 **** +--- 121,128 ---- + char_u *bw_conv_buf; /* buffer for writing converted chars */ + int bw_conv_buflen; /* size of bw_conv_buf */ + int bw_conv_error; /* set for conversion error */ ++ linenr_T bw_conv_error_lnum; /* first line with error or zero */ ++ linenr_T bw_start_lnum; /* line number at start of buffer */ + # ifdef USE_ICONV + iconv_t bw_iconv_fd; /* descriptor for iconv() or -1 */ + # endif +*************** +*** 2924,2929 **** +--- 2925,2931 ---- + linenr_T lnum; + long nchars; + char_u *errmsg = NULL; ++ int errmsg_allocated = FALSE; + char_u *errnum = NULL; + char_u *buffer; + char_u smallbuf[SMBUFSIZE]; +*************** +*** 2987,2992 **** +--- 2989,2995 ---- + /* must init bw_conv_buf and bw_iconv_fd before jumping to "fail" */ + write_info.bw_conv_buf = NULL; + write_info.bw_conv_error = FALSE; ++ write_info.bw_conv_error_lnum = 0; + write_info.bw_restlen = 0; + # ifdef USE_ICONV + write_info.bw_iconv_fd = (iconv_t)-1; +*************** +*** 4243,4248 **** +--- 4245,4251 ---- + nchars += write_info.bw_len; + } + } ++ write_info.bw_start_lnum = start; + #endif + + write_info.bw_len = bufsize; +*************** +*** 4278,4283 **** +--- 4281,4289 ---- + nchars += bufsize; + s = buffer; + len = 0; ++ #ifdef FEAT_MBYTE ++ write_info.bw_start_lnum = lnum; ++ #endif + } + /* write failed or last line has no EOL: stop here */ + if (end == 0 +*************** +*** 4474,4480 **** + { + #ifdef FEAT_MBYTE + if (write_info.bw_conv_error) +! errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)"); + else + #endif + if (got_int) +--- 4480,4496 ---- + { + #ifdef FEAT_MBYTE + if (write_info.bw_conv_error) +! { +! if (write_info.bw_conv_error_lnum == 0) +! errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)"); +! else +! { +! errmsg_allocated = TRUE; +! errmsg = alloc(300); +! vim_snprintf((char *)errmsg, 300, _("E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"), +! (long)write_info.bw_conv_error_lnum); +! } +! } + else + #endif + if (got_int) +*************** +*** 4550,4555 **** +--- 4566,4577 ---- + { + STRCAT(IObuff, _(" CONVERSION ERROR")); + c = TRUE; ++ if (write_info.bw_conv_error_lnum != 0) ++ { ++ int l = STRLEN(IObuff); ++ vim_snprintf((char *)IObuff + l, IOSIZE - l, _(" in line %ld;"), ++ (long)write_info.bw_conv_error_lnum); ++ } + } + else if (notconverted) + { +*************** +*** 4746,4751 **** +--- 4768,4775 ---- + } + STRCAT(IObuff, errmsg); + emsg(IObuff); ++ if (errmsg_allocated) ++ vim_free(errmsg); + + retval = FAIL; + if (end == 0) +*************** +*** 5105,5111 **** + c = buf[wlen]; + } + +! ip->bw_conv_error |= ucs2bytes(c, &p, flags); + } + if (flags & FIO_LATIN1) + len = (int)(p - buf); +--- 5129,5141 ---- + c = buf[wlen]; + } + +! if (ucs2bytes(c, &p, flags) && !ip->bw_conv_error) +! { +! ip->bw_conv_error = TRUE; +! ip->bw_conv_error_lnum = ip->bw_start_lnum; +! } +! if (c == NL) +! ++ip->bw_start_lnum; + } + if (flags & FIO_LATIN1) + len = (int)(p - buf); +*************** +*** 5386,5391 **** +--- 5416,5422 ---- + #ifdef FEAT_MBYTE + /* + * Convert a Unicode character to bytes. ++ * Return TRUE for an error, FALSE when it's OK. + */ + static int + ucs2bytes(c, pp, flags) +*** ../vim-7.2.243/src/version.c 2009-07-29 16:13:35.000000000 +0200 +--- src/version.c 2009-07-29 18:01:27.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 244, + /**/ + +-- +Support your right to bare arms! Wear short sleeves! + + /// 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/7.2.245 b/7.2.245 new file mode 100644 index 00000000..d046c97f --- /dev/null +++ b/7.2.245 @@ -0,0 +1,165 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.245 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.245 +Problem: When 'enc' is "utf-16" and 'fenc' is "utf-8" writing a file does + conversion while none should be done. (Yukihiro Nakadaira) When + 'fenc' is empty the file is written as utf-8 instead of utf-16. +Solution: Do proper comparison of encodings, taking into account that all + Unicode values for 'enc' use utf-8 internally. +Files: src/fileio.c + + +*** ../vim-7.2.244/src/fileio.c 2009-07-29 18:05:57.000000000 +0200 +--- src/fileio.c 2009-07-29 17:04:06.000000000 +0200 +*************** +*** 134,140 **** + #ifdef FEAT_MBYTE + static linenr_T readfile_linenr __ARGS((linenr_T linecnt, char_u *p, char_u *endp)); + static int ucs2bytes __ARGS((unsigned c, char_u **pp, int flags)); +! static int same_encoding __ARGS((char_u *a, char_u *b)); + static int get_fio_flags __ARGS((char_u *ptr)); + static char_u *check_for_bom __ARGS((char_u *p, long size, int *lenp, int flags)); + static int make_bom __ARGS((char_u *buf, char_u *name)); +--- 134,140 ---- + #ifdef FEAT_MBYTE + static linenr_T readfile_linenr __ARGS((linenr_T linecnt, char_u *p, char_u *endp)); + static int ucs2bytes __ARGS((unsigned c, char_u **pp, int flags)); +! static int need_conversion __ARGS((char_u *fenc)); + static int get_fio_flags __ARGS((char_u *ptr)); + static char_u *check_for_bom __ARGS((char_u *p, long size, int *lenp, int flags)); + static int make_bom __ARGS((char_u *buf, char_u *name)); +*************** +*** 1043,1055 **** + } + + /* +! * Conversion is required when the encoding of the file is different +! * from 'encoding' or 'encoding' is UTF-16, UCS-2 or UCS-4 (requires +! * conversion to UTF-8). + */ + fio_flags = 0; +! converted = (*fenc != NUL && !same_encoding(p_enc, fenc)); +! if (converted || enc_unicode != 0) + { + + /* "ucs-bom" means we need to check the first bytes of the file +--- 1043,1054 ---- + } + + /* +! * Conversion may be required when the encoding of the file is different +! * from 'encoding' or 'encoding' is UTF-16, UCS-2 or UCS-4. + */ + fio_flags = 0; +! converted = need_conversion(fenc); +! if (converted) + { + + /* "ucs-bom" means we need to check the first bytes of the file +*************** +*** 3969,3978 **** + fenc = buf->b_p_fenc; + + /* +! * The file needs to be converted when 'fileencoding' is set and +! * 'fileencoding' differs from 'encoding'. + */ +! converted = (*fenc != NUL && !same_encoding(p_enc, fenc)); + + /* + * Check if UTF-8 to UCS-2/4 or Latin1 conversion needs to be done. Or +--- 3968,3976 ---- + fenc = buf->b_p_fenc; + + /* +! * Check if the file needs to be converted. + */ +! converted = need_conversion(fenc); + + /* + * Check if UTF-8 to UCS-2/4 or Latin1 conversion needs to be done. Or +*************** +*** 5502,5521 **** + } + + /* +! * Return TRUE if "a" and "b" are the same 'encoding'. +! * Ignores difference between "ansi" and "latin1", "ucs-4" and "ucs-4be", etc. + */ + static int +! same_encoding(a, b) +! char_u *a; +! char_u *b; + { +! int f; + +! if (STRCMP(a, b) == 0) +! return TRUE; +! f = get_fio_flags(a); +! return (f != 0 && get_fio_flags(b) == f); + } + + /* +--- 5500,5536 ---- + } + + /* +! * Return TRUE if file encoding "fenc" requires conversion from or to +! * 'encoding'. + */ + static int +! need_conversion(fenc) +! char_u *fenc; + { +! int same_encoding; +! int enc_flags; +! int fenc_flags; + +! if (*fenc == NUL || STRCMP(p_enc, fenc) == 0) +! same_encoding = TRUE; +! else +! { +! /* Ignore difference between "ansi" and "latin1", "ucs-4" and +! * "ucs-4be", etc. */ +! enc_flags = get_fio_flags(p_enc); +! fenc_flags = get_fio_flags(fenc); +! same_encoding = (enc_flags != 0 && fenc_flags == enc_flags); +! } +! if (same_encoding) +! { +! /* Specified encoding matches with 'encoding'. This requires +! * conversion when 'encoding' is Unicode but not UTF-8. */ +! return enc_unicode != 0; +! } +! +! /* Encodings differ. However, conversion is not needed when 'enc' is any +! * Unicode encoding and the file is UTF-8. */ +! return !(enc_utf8 && fenc_flags == FIO_UTF8); + } + + /* +*** ../vim-7.2.244/src/version.c 2009-07-29 18:05:57.000000000 +0200 +--- src/version.c 2009-07-29 18:20:08.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 245, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.246 b/7.2.246 new file mode 100644 index 00000000..5b1c9786 --- /dev/null +++ b/7.2.246 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.246 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.246 +Problem: Cscope home page link is wrong. +Solution: Update the URL. (Sergey Khorev) +Files: runtime/doc/if_cscop.txt + + +*** ../vim-7.2.245/runtime/doc/if_cscop.txt 2009-07-09 21:22:36.000000000 +0200 +--- runtime/doc/if_cscop.txt 2009-09-11 11:19:31.000000000 +0200 +*************** +*** 481,487 **** + any problems, suggestions, patches, et al., you have for the usage of + cscope within Vim to him. + *cscope-win32* +! For a cscope version for Win32 see: http://iamphet.nm.ru/cscope/index.html + + Win32 support was added by Sergey Khorev . Contact + him if you have Win32-specific issues. +--- 481,488 ---- + any problems, suggestions, patches, et al., you have for the usage of + cscope within Vim to him. + *cscope-win32* +! For a cscope version for Win32 see: +! http://code.google.com/p/cscope-win32/ + + Win32 support was added by Sergey Khorev . Contact + him if you have Win32-specific issues. +*** ../vim-7.2.245/src/version.c 2009-07-29 18:24:59.000000000 +0200 +--- src/version.c 2009-09-11 11:29:02.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 246, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +221. Your wife melts your keyboard in the oven. + + /// 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/7.2.247 b/7.2.247 new file mode 100644 index 00000000..e18926d9 --- /dev/null +++ b/7.2.247 @@ -0,0 +1,86 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.247 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.247 +Problem: Mzscheme interface minor problem. +Solution: Better error message when build fails. (Sergey Khorev) +Files: src/if_mzsch.c + + +*** ../vim-7.2.246/src/if_mzsch.c 2009-07-09 20:06:30.000000000 +0200 +--- src/if_mzsch.c 2009-09-11 11:20:39.000000000 +0200 +*************** +*** 635,642 **** + #endif /* DYNAMIC_MZSCHEME */ + + /* need to put it here for dynamic stuff to work */ +! #ifdef INCLUDE_MZSCHEME_BASE + # include "mzscheme_base.c" + #endif + + /* +--- 635,644 ---- + #endif /* DYNAMIC_MZSCHEME */ + + /* need to put it here for dynamic stuff to work */ +! #if defined(INCLUDE_MZSCHEME_BASE) + # include "mzscheme_base.c" ++ #elif MZSCHEME_VERSION_MAJOR >= 400 ++ # error MzScheme 4.x must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes + #endif + + /* +*************** +*** 875,888 **** + #ifdef INCLUDE_MZSCHEME_BASE + { + /* +! * versions 4.x do not provide Scheme bindings by defaults + * we need to add them explicitly + */ + Scheme_Object *scheme_base_symbol = NULL; + MZ_GC_DECL_REG(1); + MZ_GC_VAR_IN_REG(0, scheme_base_symbol); + MZ_GC_REG(); +! /* invoke function from generated and included base.c */ + declare_modules(environment); + scheme_base_symbol = scheme_intern_symbol("scheme/base"); + MZ_GC_CHECK(); +--- 877,890 ---- + #ifdef INCLUDE_MZSCHEME_BASE + { + /* +! * versions 4.x do not provide Scheme bindings by default + * we need to add them explicitly + */ + Scheme_Object *scheme_base_symbol = NULL; + MZ_GC_DECL_REG(1); + MZ_GC_VAR_IN_REG(0, scheme_base_symbol); + MZ_GC_REG(); +! /* invoke function from generated and included mzscheme_base.c */ + declare_modules(environment); + scheme_base_symbol = scheme_intern_symbol("scheme/base"); + MZ_GC_CHECK(); +*** ../vim-7.2.246/src/version.c 2009-09-11 11:30:12.000000000 +0200 +--- src/version.c 2009-09-11 11:53:59.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 247, + /**/ + +-- +Your fault: core dumped + + /// 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/7.2.248 b/7.2.248 new file mode 100644 index 00000000..2254101e --- /dev/null +++ b/7.2.248 @@ -0,0 +1,158 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.248 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.248 (extra) +Problem: Mzscheme interface building minor problems. +Solution: Update Win32 makefiles. (Sergey Khorev) +Files: src/Make_cyg.mak, src/Make_ming.mak, src/Make_mvc.mak + + +*** ../vim-7.2.247/src/Make_cyg.mak 2007-09-30 22:28:48.000000000 +0200 +--- src/Make_cyg.mak 2009-09-11 11:23:23.000000000 +0200 +*************** +*** 212,224 **** + MZSCHEME_VER = 209_000 + endif + + ifeq (yes, $(DYNAMIC_MZSCHEME)) + DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\" + else + ifndef MZSCHEME_DLLS + MZSCHEME_DLLS = $(MZSCHEME) + endif +! EXTRA_LIBS += -L$(MZSCHEME_DLLS) -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER) + endif + endif + +--- 212,245 ---- + MZSCHEME_VER = 209_000 + endif + ++ ifndef MZSCHEME_PRECISE_GC ++ MZSCHEME_PRECISE_GC=no ++ endif ++ ++ # for version 4.x we need to generate byte-code for Scheme base ++ ifndef MZSCHEME_GENERATE_BASE ++ MZSCHEME_GENERATE_BASE=no ++ endif ++ + ifeq (yes, $(DYNAMIC_MZSCHEME)) + DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\" + else + ifndef MZSCHEME_DLLS + MZSCHEME_DLLS = $(MZSCHEME) + endif +! ifeq (yes,$(MZSCHEME_PRECISE_GC)) +! MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER) +! else +! MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER) +! endif +! EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB) +! endif +! ifeq (yes,$(MZSCHEME_GENERATE_BASE)) +! DEFINES += -DINCLUDE_MZSCHEME_BASE +! MZ_EXTRA_DEP += mzscheme_base.c +! endif +! ifeq (yes,$(MZSCHEME_PRECISE_GC)) +! DEFINES += -DMZ_PRECISE_GC + endif + endif + +*************** +*** 473,478 **** +--- 494,502 ---- + ifdef PERL + -$(DEL) if_perl.c + endif ++ ifdef MZSCHEME ++ -$(DEL) mzscheme_base.c ++ endif + -$(DEL) pathdef.c + $(MAKE) -C xxd -f Make_cyg.mak clean + $(MAKE) -C GvimExt -f Make_ming.mak clean +*************** +*** 523,531 **** +--- 547,561 ---- + $(OUTDIR)/netbeans.o: netbeans.c $(INCL) $(NBDEBUG_DEP) + $(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o + ++ $(OUTDIR)/if_mzsch.o: if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP) ++ $(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o ++ + $(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h + $(RC) $(RCFLAGS) vim.rc -o $(OUTDIR)/vimrc.o + ++ mzscheme_base.c: ++ $(MZSCHEME)/mzc --c-mods mzscheme_base.c ++lib scheme/base ++ + pathdef.c: $(INCL) + ifneq (sh.exe, $(SHELL)) + @echo creating pathdef.c +*** ../vim-7.2.247/src/Make_ming.mak 2009-05-26 22:58:43.000000000 +0200 +--- src/Make_ming.mak 2009-09-11 11:23:28.000000000 +0200 +*************** +*** 135,141 **** + ifndef MZSCHEME_DLLS + MZSCHEME_DLLS=$(MZSCHEME) + endif +! MZSCHEME_LIBDIR=-L$(MZSCHEME_DLLS) + endif + + endif +--- 135,141 ---- + ifndef MZSCHEME_DLLS + MZSCHEME_DLLS=$(MZSCHEME) + endif +! MZSCHEME_LIBDIR=-L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)\lib + endif + + endif +*************** +*** 563,568 **** +--- 563,571 ---- + ifdef PERL + -$(DEL) if_perl.c + endif ++ ifdef MZSCHEME ++ -$(DEL) mzscheme_base.c ++ endif + $(MAKE) -C GvimExt -f Make_ming.mak clean + $(MAKE) -C xxd -f Make_cyg.mak clean + +*** ../vim-7.2.247/src/Make_mvc.mak 2009-06-16 16:45:14.000000000 +0200 +--- src/Make_mvc.mak 2009-09-11 11:23:28.000000000 +0200 +*************** +*** 865,870 **** +--- 865,871 ---- + - if exist dimm_i.c del dimm_i.c + - if exist dimm.tlb del dimm.tlb + - if exist dosinst.exe del dosinst.exe ++ - if exist mzscheme_base.c del mzscheme_base.c + cd xxd + $(MAKE) /NOLOGO -f Make_mvc.mak clean + cd .. +*** ../vim-7.2.247/src/version.c 2009-09-11 12:20:47.000000000 +0200 +--- src/version.c 2009-09-11 12:48:26.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 248, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +222. You send more than 20 personal e-mails a day. + + /// 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/7.2.249 b/7.2.249 new file mode 100644 index 00000000..33169f77 --- /dev/null +++ b/7.2.249 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.249 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.249 +Problem: The script to check .po files can't handle '%' in plural forms. +Solution: Remove "Plural-Forms:" from the checked string. +Files: src/po/check.vim + + +*** ../vim-7.2.248/src/po/check.vim 2008-06-09 14:45:38.000000000 +0200 +--- src/po/check.vim 2009-09-11 12:37:56.000000000 +0200 +*************** +*** 23,28 **** +--- 23,31 ---- + " remove '%', not used for formatting. + let idline = substitute(idline, "'%'", '', 'g') + ++ " remove '%' used for plural forms. ++ let idline = substitute(idline, '\\nPlural-Forms: .\+;\\n', '', '') ++ + " remove everything but % items. + return substitute(idline, '[^%]*\(%[-+ #''.0-9*]*l\=[dsuxXpoc%]\)\=', '\1', 'g') + endfunc +*** ../vim-7.2.248/src/version.c 2009-09-11 12:48:56.000000000 +0200 +--- src/version.c 2009-09-11 12:59:18.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 249, + /**/ + +-- +If evolution theories are correct, humans will soon grow a third +hand for operating the mouse. + + /// 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/7.2.250 b/7.2.250 new file mode 100644 index 00000000..2f30a240 --- /dev/null +++ b/7.2.250 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.250 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.250 (extra) +Problem: Possible buffer overflow. +Solution: Compute the remaining space. (Dominique Pelle) +Files: src/GvimExt/gvimext.cpp + + +*** ../vim-7.2.249/src/GvimExt/gvimext.cpp 2008-07-24 20:51:11.000000000 +0200 +--- src/GvimExt/gvimext.cpp 2009-09-11 13:26:27.000000000 +0200 +*************** +*** 635,641 **** + } + // Now concatenate + strncpy(temp, _("Edit with existing Vim - "), BUFSIZE - 1); +! strncat(temp, title, BUFSIZE - 1); + InsertMenu(hMenu, + indexMenu++, + MF_STRING|MF_BYPOSITION, +--- 635,643 ---- + } + // Now concatenate + strncpy(temp, _("Edit with existing Vim - "), BUFSIZE - 1); +! temp[BUFSIZE - 1] = '\0'; +! strncat(temp, title, BUFSIZE - 1 - strlen(temp)); +! temp[BUFSIZE - 1] = '\0'; + InsertMenu(hMenu, + indexMenu++, + MF_STRING|MF_BYPOSITION, +*** ../vim-7.2.249/src/version.c 2009-09-11 12:59:57.000000000 +0200 +--- src/version.c 2009-09-11 13:23:45.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 250, + /**/ + + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.251 b/7.2.251 new file mode 100644 index 00000000..00cf0f0f --- /dev/null +++ b/7.2.251 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.251 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.251 (after 7.2.044) +Problem: Compiler adds invalid memory bounds check. +Solution: Remove _FORTIFY_SOURCE=2 from CFLAGS. (Dominique Pelle) +Files: src/auto/configure, src/configure.in + + +*** ../vim-7.2.250/src/auto/configure 2009-07-22 11:16:54.000000000 +0200 +--- src/auto/configure 2009-08-07 14:49:52.000000000 +0200 +*************** +*** 17135,17141 **** + { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5 + $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; } + if test "$gccmajor" -gt "3"; then +! CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" + { $as_echo "$as_me:$LINENO: result: yes" >&5 + $as_echo "yes" >&6; } + else +--- 17135,17141 ---- + { $as_echo "$as_me:$LINENO: checking whether we need -D_FORTIFY_SOURCE=1" >&5 + $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; } + if test "$gccmajor" -gt "3"; then +! CFLAGS=`echo "$CFLAGS -D_FORTIFY_SOURCE=1" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g' -e 's/-D_FORTIFY_SOURCE=2//g'` + { $as_echo "$as_me:$LINENO: result: yes" >&5 + $as_echo "yes" >&6; } + else +*** ../vim-7.2.250/src/configure.in 2009-07-22 11:16:54.000000000 +0200 +--- src/configure.in 2009-08-07 14:49:47.000000000 +0200 +*************** +*** 3233,3239 **** + dnl declared as char x[1] but actually longer. Introduced in gcc 4.0. + AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1) + if test "$gccmajor" -gt "3"; then +! CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=1" + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) +--- 3233,3239 ---- + dnl declared as char x[1] but actually longer. Introduced in gcc 4.0. + AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1) + if test "$gccmajor" -gt "3"; then +! CFLAGS=`echo "$CFLAGS -D_FORTIFY_SOURCE=1" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//g' -e 's/-D_FORTIFY_SOURCE=2//g'` + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) +*** ../vim-7.2.250/src/version.c 2009-09-11 13:26:38.000000000 +0200 +--- src/version.c 2009-09-11 13:43:46.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 251, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +225. You sign up for free subscriptions for all the computer magazines + + /// 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/7.2.252 b/7.2.252 new file mode 100644 index 00000000..b7dc7022 --- /dev/null +++ b/7.2.252 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.252 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.252 +Problem: When using a multi-byte 'enc' the 'iskeyword' option cannot + contain characters above 128. +Solution: Use mb_ptr2char_adv(). +Files: src/charset.c + + +*** ../vim-7.2.251/src/charset.c 2009-05-14 22:19:19.000000000 +0200 +--- src/charset.c 2009-09-09 21:11:46.000000000 +0200 +*************** +*** 174,179 **** +--- 174,184 ---- + if (VIM_ISDIGIT(*p)) + c = getdigits(&p); + else ++ #ifdef FEAT_MBYTE ++ if (has_mbyte) ++ c = mb_ptr2char_adv(&p); ++ else ++ #endif + c = *p++; + c2 = -1; + if (*p == '-' && p[1] != NUL) +*** ../vim-7.2.251/src/version.c 2009-09-11 13:44:33.000000000 +0200 +--- src/version.c 2009-09-11 14:01:48.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 252, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +226. You sit down at the computer right after dinner and your spouse + says "See you in the morning." + + /// 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/7.2.253 b/7.2.253 new file mode 100644 index 00000000..354d444d --- /dev/null +++ b/7.2.253 @@ -0,0 +1,143 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.253 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.253 +Problem: Netbeans interface: getLength always uses current buffer. +Solution: Use ml_get_buf() instead of ml_get(). (Xavier de Gaye) +Files: src/netbeans.c + + +*** ../vim-7.2.252/src/netbeans.c 2009-06-24 16:49:50.000000000 +0200 +--- src/netbeans.c 2009-09-11 13:40:14.000000000 +0200 +*************** +*** 1499,1505 **** + return FAIL; + } + first = *pos; +! nbdebug((" FIRST POS: line %d, col %d\n", first.lnum, first.col)); + pos = off2pos(buf->bufp, off+count-1); + if (!pos) + { +--- 1499,1506 ---- + return FAIL; + } + first = *pos; +! nbdebug((" FIRST POS: line %d, col %d\n", +! first.lnum, first.col)); + pos = off2pos(buf->bufp, off+count-1); + if (!pos) + { +*************** +*** 1510,1516 **** + return FAIL; + } + last = *pos; +! nbdebug((" LAST POS: line %d, col %d\n", last.lnum, last.col)); + del_from_lnum = first.lnum; + del_to_lnum = last.lnum; + doupdate = 1; +--- 1511,1518 ---- + return FAIL; + } + last = *pos; +! nbdebug((" LAST POS: line %d, col %d\n", +! last.lnum, last.col)); + del_from_lnum = first.lnum; + del_to_lnum = last.lnum; + doupdate = 1; +*************** +*** 1521,1527 **** + next = off2pos(buf->bufp, off + count); + + /* Remove part of the first line. */ +! if (first.col != 0 || (next != NULL && first.lnum == next->lnum)) + { + if (first.lnum != last.lnum + || (next != NULL && first.lnum != next->lnum)) +--- 1523,1530 ---- + next = off2pos(buf->bufp, off + count); + + /* Remove part of the first line. */ +! if (first.col != 0 +! || (next != NULL && first.lnum == next->lnum)) + { + if (first.lnum != last.lnum + || (next != NULL && first.lnum != next->lnum)) +*************** +*** 1584,1590 **** + int id = buf_findsign_id(buf->bufp, (linenr_T)i); + if (id > 0) + { +! nbdebug((" Deleting sign %d on line %d\n", id, i)); + buf_delsign(buf->bufp, id); + } + else +--- 1587,1594 ---- + int id = buf_findsign_id(buf->bufp, (linenr_T)i); + if (id > 0) + { +! nbdebug((" Deleting sign %d on line %d\n", +! id, i)); + buf_delsign(buf->bufp, id); + } + else +*************** +*** 1593,1599 **** + } + } + +! nbdebug((" Deleting lines %d through %d\n", del_from_lnum, del_to_lnum)); + curwin->w_cursor.lnum = del_from_lnum; + curwin->w_cursor.col = 0; + del_lines(del_to_lnum - del_from_lnum + 1, FALSE); +--- 1597,1604 ---- + } + } + +! nbdebug((" Deleting lines %d through %d\n", +! del_from_lnum, del_to_lnum)); + curwin->w_cursor.lnum = del_from_lnum; + curwin->w_cursor.col = 0; + del_lines(del_to_lnum - del_from_lnum + 1, FALSE); +*************** +*** 3514,3520 **** + eol_size = 1; + for (lnum = 1; lnum <= bufp->b_ml.ml_line_count; ++lnum) + { +! char_count += (long)STRLEN(ml_get(lnum)) + eol_size; + /* Check for a CTRL-C every 100000 characters */ + if (char_count > last_check) + { +--- 3519,3526 ---- + eol_size = 1; + for (lnum = 1; lnum <= bufp->b_ml.ml_line_count; ++lnum) + { +! char_count += (long)STRLEN(ml_get_buf(bufp, lnum, FALSE)) +! + eol_size; + /* Check for a CTRL-C every 100000 characters */ + if (char_count > last_check) + { +*** ../vim-7.2.252/src/version.c 2009-09-11 14:02:25.000000000 +0200 +--- src/version.c 2009-09-11 14:18:45.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 253, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +227. You sleep next to your monitor. Or on top of it. + + /// 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/7.2.254 b/7.2.254 new file mode 100644 index 00000000..c8c57aff --- /dev/null +++ b/7.2.254 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.254 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.254 +Problem: Compiler warning for assigning size_t to int. +Solution: Use size_t for the variable. (George Reilly) +Files: src/fileio.c + + +*** ../vim-7.2.253/src/fileio.c 2009-07-29 18:24:59.000000000 +0200 +--- src/fileio.c 2009-09-11 13:46:19.000000000 +0200 +*************** +*** 4568,4574 **** + c = TRUE; + if (write_info.bw_conv_error_lnum != 0) + { +! int l = STRLEN(IObuff); + vim_snprintf((char *)IObuff + l, IOSIZE - l, _(" in line %ld;"), + (long)write_info.bw_conv_error_lnum); + } +--- 4568,4574 ---- + c = TRUE; + if (write_info.bw_conv_error_lnum != 0) + { +! size_t l = STRLEN(IObuff); + vim_snprintf((char *)IObuff + l, IOSIZE - l, _(" in line %ld;"), + (long)write_info.bw_conv_error_lnum); + } +*** ../vim-7.2.253/src/version.c 2009-09-11 14:19:41.000000000 +0200 +--- src/version.c 2009-09-11 15:03:42.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 254, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +230. You spend your Friday nights typing away at your keyboard + + /// 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/7.2.255 b/7.2.255 new file mode 100644 index 00000000..1bb85b15 --- /dev/null +++ b/7.2.255 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.255 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.255 (after 7.2.242) +Problem: Setting 'rightleft', 'linebreak' and 'wrap' may cause cursor to be + in wrong place. +Solution: Recompute the cursor column for these options. +Files: src/option.c + + +*** ../vim-7.2.254/src/option.c 2009-07-29 15:41:32.000000000 +0200 +--- src/option.c 2009-09-11 13:59:55.000000000 +0200 +*************** +*** 7430,7435 **** +--- 7430,7437 ---- + { + if (curwin->w_p_wrap) + curwin->w_leftcol = 0; ++ if (curwin->w_curswant != MAXCOL) ++ curwin->w_set_curswant = TRUE; + } + + #ifdef FEAT_WINDOWS +*************** +*** 7664,7669 **** +--- 7666,7687 ---- + } + #endif + ++ #ifdef FEAT_LINEBREAK ++ if ((int *)varp == &curwin->w_p_lbr) ++ { ++ if (curwin->w_curswant != MAXCOL) ++ curwin->w_set_curswant = TRUE; ++ } ++ #endif ++ ++ #ifdef FEAT_RIGHTLEFT ++ if ((int *)varp == &curwin->w_p_rl) ++ { ++ if (curwin->w_curswant != MAXCOL) ++ curwin->w_set_curswant = TRUE; ++ } ++ #endif ++ + /* + * End of handling side effects for bool options. + */ +*** ../vim-7.2.254/src/version.c 2009-09-11 15:04:13.000000000 +0200 +--- src/version.c 2009-09-11 15:19:40.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 255, + /**/ + +-- +A computer without Windows is like a fish without a bicycle. + + /// 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/7.2.256 b/7.2.256 new file mode 100644 index 00000000..17361fbf --- /dev/null +++ b/7.2.256 @@ -0,0 +1,59 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.256 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.256 +Problem: When 'guifont' was not set GTK font dialog doesn't have a default. + (Andreas Metzler) +Solution: Set default to DEFAULT_FONT. (James Vega) +Files: src/gui_gtk_x11.c + + +*** ../vim-7.2.255/src/gui_gtk_x11.c 2009-07-01 18:04:30.000000000 +0200 +--- src/gui_gtk_x11.c 2009-09-11 14:21:32.000000000 +0200 +*************** +*** 4729,4734 **** +--- 4729,4737 ---- + if (oldval != NULL && *oldval != NUL) + gtk_font_selection_dialog_set_font_name( + GTK_FONT_SELECTION_DIALOG(gui.fontdlg), (char *)oldval); ++ else ++ gtk_font_selection_dialog_set_font_name( ++ GTK_FONT_SELECTION_DIALOG(gui.fontdlg), DEFAULT_FONT); + + if (gui.fontname) + { +*************** +*** 4816,4821 **** +--- 4819,4827 ---- + if (oldname != oldval) + vim_free(oldname); + } ++ else ++ gtk_font_selection_dialog_set_font_name( ++ GTK_FONT_SELECTION_DIALOG(dialog), DEFAULT_FONT); + + response = gtk_dialog_run(GTK_DIALOG(dialog)); + +*** ../vim-7.2.255/src/version.c 2009-09-11 15:20:22.000000000 +0200 +--- src/version.c 2009-09-11 15:45:36.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 256, + /**/ + +-- +Get a life? What is the URL where it can be downloaded? + + /// 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/7.2.257 b/7.2.257 new file mode 100644 index 00000000..a856a3ac --- /dev/null +++ b/7.2.257 @@ -0,0 +1,61 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.257 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.257 +Problem: With GTK 2.17 lots of assertion error messages. +Solution: Remove check for static gravity. (Sebastian Droege) +Files: src/gui_gtk_f.c + + +*** ../vim-7.2.256/src/gui_gtk_f.c 2009-05-17 23:25:16.000000000 +0200 +--- src/gui_gtk_f.c 2009-09-11 15:15:41.000000000 +0200 +*************** +*** 860,870 **** + gtk_form_set_static_gravity(GdkWindow *window, gboolean use_static) + { + #ifdef HAVE_GTK2 +! gboolean static_gravity_supported; +! +! static_gravity_supported = gdk_window_set_static_gravities(window, +! use_static); +! g_return_if_fail(static_gravity_supported); + #else + XSetWindowAttributes xattributes; + +--- 860,868 ---- + gtk_form_set_static_gravity(GdkWindow *window, gboolean use_static) + { + #ifdef HAVE_GTK2 +! /* We don't check if static gravity is actually supported, because it +! * results in an annoying assertion error message. */ +! gdk_window_set_static_gravities(window, use_static); + #else + XSetWindowAttributes xattributes; + +*** ../vim-7.2.256/src/version.c 2009-09-11 15:46:20.000000000 +0200 +--- src/version.c 2009-09-11 16:16:52.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 257, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +231. You sprinkle Carpet Fresh on the rugs and put your vacuum cleaner + in the front doorway permanently so it always looks like you are + actually attempting to do something about that mess that has amassed + since you discovered the Internet. + + /// 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/7.2.258 b/7.2.258 new file mode 100644 index 00000000..98ddab58 --- /dev/null +++ b/7.2.258 @@ -0,0 +1,74 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.258 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.258 +Problem: v:beval_col and b:beval_text are wrong in UTF-8 text. (Tony + Mechelynck) +Solution: Use byte number instead of character number for the column. +Files: src/ui.c + + +*** ../vim-7.2.257/src/ui.c 2009-07-01 18:04:30.000000000 +0200 +--- src/ui.c 2009-09-11 16:11:50.000000000 +0200 +*************** +*** 3055,3072 **** + int vcol; + { + /* try to advance to the specified column */ +- int col = 0; + int count = 0; + char_u *ptr; + +! ptr = ml_get_buf(wp->w_buffer, lnum, FALSE); + while (count <= vcol && *ptr != NUL) + { +- ++col; + count += win_lbr_chartabsize(wp, ptr, count, NULL); + mb_ptr_adv(ptr); + } +! return col; + } + #endif + +--- 3055,3071 ---- + int vcol; + { + /* try to advance to the specified column */ + int count = 0; + char_u *ptr; ++ char_u *start; + +! start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE); + while (count <= vcol && *ptr != NUL) + { + count += win_lbr_chartabsize(wp, ptr, count, NULL); + mb_ptr_adv(ptr); + } +! return (int)(ptr - start); + } + #endif + +*** ../vim-7.2.257/src/version.c 2009-09-11 16:17:36.000000000 +0200 +--- src/version.c 2009-09-11 16:45:48.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 258, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +232. You start conversations with, "Have you gotten an ISDN line?" + + /// 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/7.2.259 b/7.2.259 new file mode 100644 index 00000000..0bf0ba13 --- /dev/null +++ b/7.2.259 @@ -0,0 +1,160 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.259 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.259 +Problem: exists() doesn't work properly for an empty aucmd group. +Solution: Change how au_exists() handles a missing pattern. Also add a + test for this. (Bob Hiestand) +Files: src/fileio.c, src/testdir/Makefile, src/testdir/test67.in, + src/testdir/test67.ok + + +*** ../vim-7.2.258/src/fileio.c 2009-09-11 15:04:13.000000000 +0200 +--- src/fileio.c 2009-09-11 16:37:08.000000000 +0200 +*************** +*** 9498,9512 **** + ap = first_autopat[(int)event]; + if (ap == NULL) + goto theend; +- if (pattern == NULL) +- { +- retval = TRUE; +- goto theend; +- } + + /* if pattern is "", special handling is needed which uses curbuf */ + /* for pattern ", fnamecmp() will work fine */ +! if (STRICMP(pattern, "") == 0) + buflocal_buf = curbuf; + + /* Check if there is an autocommand with the given pattern. */ +--- 9498,9507 ---- + ap = first_autopat[(int)event]; + if (ap == NULL) + goto theend; + + /* if pattern is "", special handling is needed which uses curbuf */ + /* for pattern ", fnamecmp() will work fine */ +! if (pattern != NULL && STRICMP(pattern, "") == 0) + buflocal_buf = curbuf; + + /* Check if there is an autocommand with the given pattern. */ +*************** +*** 9515,9523 **** + /* For buffer-local autocommands, fnamecmp() works fine. */ + if (ap->pat != NULL && ap->cmds != NULL + && (group == AUGROUP_ALL || ap->group == group) +! && (buflocal_buf == NULL +! ? fnamecmp(ap->pat, pattern) == 0 +! : ap->buflocal_nr == buflocal_buf->b_fnum)) + { + retval = TRUE; + break; +--- 9510,9519 ---- + /* For buffer-local autocommands, fnamecmp() works fine. */ + if (ap->pat != NULL && ap->cmds != NULL + && (group == AUGROUP_ALL || ap->group == group) +! && (pattern == NULL +! || (buflocal_buf == NULL +! ? fnamecmp(ap->pat, pattern) == 0 +! : ap->buflocal_nr == buflocal_buf->b_fnum))) + { + retval = TRUE; + break; +*** ../vim-7.2.258/src/testdir/Makefile 2009-06-24 18:07:55.000000000 +0200 +--- src/testdir/Makefile 2009-09-11 16:31:33.000000000 +0200 +*************** +*** 22,28 **** + test48.out test49.out test51.out test52.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 test66.out + + SCRIPTS_GUI = test16.out + +--- 22,28 ---- + test48.out test49.out test51.out test52.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 test66.out test67.out + + SCRIPTS_GUI = test16.out + +*** ../vim-7.2.258/src/testdir/test67.in 2009-09-11 17:23:47.000000000 +0200 +--- src/testdir/test67.in 2009-09-11 16:43:11.000000000 +0200 +*************** +*** 0 **** +--- 1,33 ---- ++ Test that groups and patterns are tested correctly when calling exists() for ++ autocommands. ++ ++ STARTTEST ++ :so small.vim ++ :let results=[] ++ :augroup auexists ++ :augroup END ++ :call add(results, "##BufEnter: " . exists("##BufEnter")) ++ :call add(results, "#BufEnter: " . exists("#BufEnter")) ++ :au BufEnter * let g:entered=1 ++ :call add(results, "#BufEnter: " . exists("#BufEnter")) ++ :call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter")) ++ :augroup auexists ++ :au BufEnter * let g:entered=1 ++ :augroup END ++ :call add(results, "#auexists#BufEnter: " . exists("#auexists#BufEnter")) ++ :call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test")) ++ :au BufEnter *.test let g:entered=1 ++ :call add(results, "#BufEnter#*.test: " . exists("#BufEnter#*.test")) ++ :edit testfile.test ++ :call add(results, "#BufEnter#: " . exists("#BufEnter#")) ++ :au BufEnter let g:entered=1 ++ :call add(results, "#BufEnter#: " . exists("#BufEnter#")) ++ :edit testfile2.test ++ :call add(results, "#BufEnter#: " . exists("#BufEnter#")) ++ :e test.out ++ :call append(0, results) ++ :$d ++ :w ++ :qa! ++ ENDTEST ++ +*** ../vim-7.2.258/src/testdir/test67.ok 2009-09-11 17:23:47.000000000 +0200 +--- src/testdir/test67.ok 2009-09-11 16:43:15.000000000 +0200 +*************** +*** 0 **** +--- 1,10 ---- ++ ##BufEnter: 1 ++ #BufEnter: 0 ++ #BufEnter: 1 ++ #auexists#BufEnter: 0 ++ #auexists#BufEnter: 1 ++ #BufEnter#*.test: 0 ++ #BufEnter#*.test: 1 ++ #BufEnter#: 0 ++ #BufEnter#: 1 ++ #BufEnter#: 0 +*** ../vim-7.2.258/src/version.c 2009-09-11 16:48:06.000000000 +0200 +--- src/version.c 2009-09-11 17:23:14.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 259, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +234. You started college as a chemistry major, and walk out four years + later as an Internet provider. + + /// 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/7.2.260 b/7.2.260 new file mode 100644 index 00000000..46d4365c --- /dev/null +++ b/7.2.260 @@ -0,0 +1,155 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.260 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.260 (extra part of 7.2.259) +Problem: exists() doesn't work properly for empty aucmd group. +Solution: Change how au_exists() handles a missing pattern. Also add a + test for this. (Bob Hiestand) +Files: src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak, + src/testdir/Make_ming.mak, src/testdir/Make_os2.mak, + src/testdir/Make_vms.mms + + +*** ../vim-7.2.259/src/testdir/Make_amiga.mak 2009-03-11 16:36:04.000000000 +0100 +--- src/testdir/Make_amiga.mak 2009-09-11 16:29:54.000000000 +0200 +*************** +*** 26,32 **** + 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 \ +! test66.out + + .SUFFIXES: .in .out + +--- 26,32 ---- + 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 \ +! test66.out test67.out + + .SUFFIXES: .in .out + +*************** +*** 112,114 **** +--- 112,115 ---- + test64.out: test64.in + test65.out: test65.in + test66.out: test66.in ++ test67.out: test67.in +*** ../vim-7.2.259/src/testdir/Make_dos.mak 2009-03-11 16:36:04.000000000 +0100 +--- src/testdir/Make_dos.mak 2009-09-11 16:30:17.000000000 +0200 +*************** +*** 26,32 **** + 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 test66.out + + SCRIPTS32 = test50.out + +--- 26,32 ---- + 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 test66.out test67.out + + SCRIPTS32 = test50.out + +*** ../vim-7.2.259/src/testdir/Make_ming.mak 2009-03-11 16:36:04.000000000 +0100 +--- src/testdir/Make_ming.mak 2009-09-11 16:30:37.000000000 +0200 +*************** +*** 45,51 **** + 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 test66.out + + SCRIPTS32 = test50.out + +--- 45,51 ---- + 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 test66.out test67.out + + SCRIPTS32 = test50.out + +*** ../vim-7.2.259/src/testdir/Make_os2.mak 2009-03-11 16:36:04.000000000 +0100 +--- src/testdir/Make_os2.mak 2009-09-11 16:30:52.000000000 +0200 +*************** +*** 26,32 **** + 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 \ +! test66.out + + .SUFFIXES: .in .out + +--- 26,32 ---- + 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 \ +! test66.out test67.out + + .SUFFIXES: .in .out + +*** ../vim-7.2.259/src/testdir/Make_vms.mms 2009-03-11 16:36:04.000000000 +0100 +--- src/testdir/Make_vms.mms 2009-09-11 16:31:06.000000000 +0200 +*************** +*** 4,10 **** + # Authors: Zoltan Arpadffy, + # Sandor Kopanyi, + # +! # Last change: 2009 Mar 05 + # + # 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. +--- 4,10 ---- + # Authors: Zoltan Arpadffy, + # Sandor Kopanyi, + # +! # Last change: 2009 Sep 11 + # + # 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. +*************** +*** 69,75 **** + 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 \ +! test66.out + + .IFDEF WANT_GUI + SCRIPT_GUI = test16.out +--- 69,75 ---- + 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 \ +! test66.out test67.out + + .IFDEF WANT_GUI + SCRIPT_GUI = test16.out +*** ../vim-7.2.259/src/version.c 2009-09-11 17:24:01.000000000 +0200 +--- src/version.c 2009-09-18 14:57:05.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 260, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.261 b/7.2.261 new file mode 100644 index 00000000..4f8e72d7 --- /dev/null +++ b/7.2.261 @@ -0,0 +1,83 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.261 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.261 +Problem: When deleting lines with a specific folding configuration E38 may + appear. (Shahaf) +Solution: When adjusting nested folds for deleted lines take into account + that they don't start at the top of the enclosing fold. +Files: src/fold.c + + +*** ../vim-7.2.260/src/fold.c 2009-01-06 15:01:58.000000000 +0100 +--- src/fold.c 2009-09-18 14:43:23.000000000 +0200 +*************** +*** 1607,1617 **** + } + else + { +- /* 2, 3, or 5: need to correct nested folds too */ +- foldMarkAdjustRecurse(&fp->fd_nested, line1 - fp->fd_top, +- line2 - fp->fd_top, amount, amount_after); + if (fp->fd_top < top) + { + if (last <= line2) + { + /* 2. fold contains line1, line2 is below fold */ +--- 1607,1617 ---- + } + else + { + if (fp->fd_top < top) + { ++ /* 2 or 3: need to correct nested folds too */ ++ foldMarkAdjustRecurse(&fp->fd_nested, line1 - fp->fd_top, ++ line2 - fp->fd_top, amount, amount_after); + if (last <= line2) + { + /* 2. fold contains line1, line2 is below fold */ +*************** +*** 1628,1634 **** + } + else + { +! /* 5. fold is below line1 and contains line2 */ + if (amount == MAXLNUM) + { + fp->fd_len -= line2 - fp->fd_top + 1; +--- 1628,1638 ---- + } + else + { +! /* 5. fold is below line1 and contains line2; need to +! * correct nested folds too */ +! foldMarkAdjustRecurse(&fp->fd_nested, line1 - fp->fd_top, +! line2 - fp->fd_top, amount, +! amount_after + (fp->fd_top - top)); + if (amount == MAXLNUM) + { + fp->fd_len -= line2 - fp->fd_top + 1; +*** ../vim-7.2.260/src/version.c 2009-09-18 14:58:26.000000000 +0200 +--- src/version.c 2009-09-18 15:14:40.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 261, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.262 b/7.2.262 new file mode 100644 index 00000000..dc73c07b --- /dev/null +++ b/7.2.262 @@ -0,0 +1,189 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.262 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.262 +Problem: When using custom completion for a user command the pattern string + goes beyond the cursor position. (Hari Krishna Dara) +Solution: Truncate the string at the cursor position. +Files: src/ex_getln.c, src/structs.h + + +*** ../vim-7.2.261/src/ex_getln.c 2009-06-24 17:04:40.000000000 +0200 +--- src/ex_getln.c 2009-09-18 16:58:16.000000000 +0200 +*************** +*** 3266,3272 **** + int i, j; + char_u *p1; + char_u *p2; +- int oldlen; + int difflen; + int v; + +--- 3266,3271 ---- +*************** +*** 3291,3297 **** + out_flush(); + + i = (int)(xp->xp_pattern - ccline.cmdbuff); +! oldlen = ccline.cmdpos - i; + + if (type == WILD_NEXT || type == WILD_PREV) + { +--- 3290,3296 ---- + out_flush(); + + i = (int)(xp->xp_pattern - ccline.cmdbuff); +! xp->xp_pattern_len = ccline.cmdpos - i; + + if (type == WILD_NEXT || type == WILD_PREV) + { +*************** +*** 3305,3322 **** + /* + * Translate string into pattern and expand it. + */ +! if ((p1 = addstar(&ccline.cmdbuff[i], oldlen, xp->xp_context)) == NULL) + p2 = NULL; + else + { +! p2 = ExpandOne(xp, p1, vim_strnsave(&ccline.cmdbuff[i], oldlen), + WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE + |options, type); + vim_free(p1); + /* longest match: make sure it is not shorter (happens with :help */ + if (p2 != NULL && type == WILD_LONGEST) + { +! for (j = 0; j < oldlen; ++j) + if (ccline.cmdbuff[i + j] == '*' + || ccline.cmdbuff[i + j] == '?') + break; +--- 3304,3323 ---- + /* + * Translate string into pattern and expand it. + */ +! if ((p1 = addstar(xp->xp_pattern, xp->xp_pattern_len, +! xp->xp_context)) == NULL) + p2 = NULL; + else + { +! p2 = ExpandOne(xp, p1, +! vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len), + WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE + |options, type); + vim_free(p1); + /* longest match: make sure it is not shorter (happens with :help */ + if (p2 != NULL && type == WILD_LONGEST) + { +! for (j = 0; j < xp->xp_pattern_len; ++j) + if (ccline.cmdbuff[i + j] == '*' + || ccline.cmdbuff[i + j] == '?') + break; +*************** +*** 3331,3337 **** + + if (p2 != NULL && !got_int) + { +! difflen = (int)STRLEN(p2) - oldlen; + if (ccline.cmdlen + difflen > ccline.cmdbufflen - 4) + { + v = realloc_cmdbuff(ccline.cmdlen + difflen); +--- 3332,3338 ---- + + if (p2 != NULL && !got_int) + { +! difflen = (int)STRLEN(p2) - xp->xp_pattern_len; + if (ccline.cmdlen + difflen > ccline.cmdbufflen - 4) + { + v = realloc_cmdbuff(ccline.cmdlen + difflen); +*************** +*** 3620,3625 **** +--- 3621,3627 ---- + expand_T *xp; + { + xp->xp_pattern = NULL; ++ xp->xp_pattern_len = 0; + xp->xp_backslash = XP_BS_NONE; + #ifndef BACKSLASH_IN_FILENAME + xp->xp_shell = FALSE; +*************** +*** 4311,4318 **** + } + + /* add star to file name, or convert to regexp if not exp. files. */ +! file_str = addstar(xp->xp_pattern, +! (int)(str + col - xp->xp_pattern), xp->xp_context); + if (file_str == NULL) + return EXPAND_UNSUCCESSFUL; + +--- 4313,4320 ---- + } + + /* add star to file name, or convert to regexp if not exp. files. */ +! xp->xp_pattern_len = (int)(str + col - xp->xp_pattern); +! file_str = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context); + if (file_str == NULL) + return EXPAND_UNSUCCESSFUL; + +*************** +*** 4781,4787 **** + sprintf((char *)num, "%d", ccline.cmdpos); + args[1] = ccline.cmdbuff; + } +! args[0] = xp->xp_pattern; + args[2] = num; + + /* Save the cmdline, we don't know what the function may do. */ +--- 4783,4789 ---- + sprintf((char *)num, "%d", ccline.cmdpos); + args[1] = ccline.cmdbuff; + } +! args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); + args[2] = num; + + /* Save the cmdline, we don't know what the function may do. */ +*************** +*** 4797,4802 **** +--- 4799,4805 ---- + if (ccline.cmdbuff != NULL) + ccline.cmdbuff[ccline.cmdlen] = keep; + ++ vim_free(args[0]); + return ret; + } + +*** ../vim-7.2.261/src/structs.h 2009-07-29 12:09:49.000000000 +0200 +--- src/structs.h 2009-09-18 15:33:15.000000000 +0200 +*************** +*** 432,437 **** +--- 432,438 ---- + { + int xp_context; /* type of expansion */ + char_u *xp_pattern; /* start of item to expand */ ++ int xp_pattern_len; /* bytes in xp_pattern before cursor */ + #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL) + char_u *xp_arg; /* completion function */ + int xp_scriptID; /* SID for completion function */ +*** ../vim-7.2.261/src/version.c 2009-09-18 15:16:37.000000000 +0200 +--- src/version.c 2009-09-18 17:23:20.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 262, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.263 b/7.2.263 new file mode 100644 index 00000000..fdbfa406 --- /dev/null +++ b/7.2.263 @@ -0,0 +1,87 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.263 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.263 +Problem: GTK2: when using the -geom argument with an offset from the right + edge and the size is smaller than the default, the Vim window is + not positioned properly. +Solution: Use another function to set the size. (Vitaly Minko) +Files: src/gui_gtk_x11.c + + +*** ../vim-7.2.262/src/gui_gtk_x11.c 2009-09-11 15:46:20.000000000 +0200 +--- src/gui_gtk_x11.c 2009-09-23 15:43:52.000000000 +0200 +*************** +*** 4066,4071 **** +--- 4066,4073 ---- + { + guicolor_T fg_pixel = INVALCOLOR; + guicolor_T bg_pixel = INVALCOLOR; ++ guint pixel_width; ++ guint pixel_height; + + #ifdef HAVE_GTK2 + /* +*************** +*** 4106,4113 **** + unsigned int w, h; + int x = 0; + int y = 0; +- guint pixel_width; +- guint pixel_height; + + mask = XParseGeometry((char *)gui.geom, &x, &y, &w, &h); + +--- 4108,4113 ---- +*************** +*** 4160,4168 **** + } + } + +! gtk_form_set_size(GTK_FORM(gui.formwin), +! (guint)(gui_get_base_width() + Columns * gui.char_width), +! (guint)(gui_get_base_height() + Rows * gui.char_height)); + update_window_manager_hints(0, 0); + + if (foreground_argument != NULL) +--- 4160,4175 ---- + } + } + +! pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width); +! pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height); +! #ifdef HAVE_GTK2 +! /* For GTK2 changing the size of the form widget doesn't cause window +! * resizing. */ +! if (gtk_socket_id == 0) +! gtk_window_resize(GTK_WINDOW(gui.mainwin), pixel_width, pixel_height); +! #else +! gtk_form_set_size(GTK_FORM(gui.formwin), pixel_width, pixel_height); +! #endif + update_window_manager_hints(0, 0); + + if (foreground_argument != NULL) +*** ../vim-7.2.262/src/version.c 2009-09-18 17:24:54.000000000 +0200 +--- src/version.c 2009-09-23 17:34:08.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 263, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.264 b/7.2.264 new file mode 100644 index 00000000..808f2916 --- /dev/null +++ b/7.2.264 @@ -0,0 +1,168 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.264 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.264 +Problem: GTK2: When the Vim window is maximized setting 'columns' or + 'lines' doesn't work. +Solution: Unmaximize the window before setting the size. (Vitaly Minko) +Files: src/gui.c, src/gui_gtk_x11.c, src/proto/gui_gtk_x11.pro + + +*** ../vim-7.2.263/src/gui.c 2009-07-29 11:10:31.000000000 +0200 +--- src/gui.c 2009-09-23 16:28:09.000000000 +0200 +*************** +*** 1386,1391 **** +--- 1386,1395 ---- + int min_height; + int screen_w; + int screen_h; ++ #ifdef HAVE_GTK2 ++ int un_maximize = mustset; ++ int did_adjust = 0; ++ #endif + + if (!gui.shell_created) + return; +*************** +*** 1425,1446 **** + if (Columns < MIN_COLUMNS) + Columns = MIN_COLUMNS; + width = Columns * gui.char_width + base_width; + } + if ((direction & RESIZE_VERT) && height > screen_h) + { + Rows = (screen_h - base_height) / gui.char_height; + check_shellsize(); + height = Rows * gui.char_height + base_height; + } + } + gui.num_cols = Columns; + gui.num_rows = Rows; + + min_width = base_width + MIN_COLUMNS * gui.char_width; + min_height = base_height + MIN_LINES * gui.char_height; +! # ifdef FEAT_WINDOWS + min_height += tabline_height() * gui.char_height; +! # endif + + gui_mch_set_shellsize(width, height, min_width, min_height, + base_width, base_height, direction); +--- 1429,1475 ---- + if (Columns < MIN_COLUMNS) + Columns = MIN_COLUMNS; + width = Columns * gui.char_width + base_width; ++ #ifdef HAVE_GTK2 ++ ++did_adjust; ++ #endif + } + if ((direction & RESIZE_VERT) && height > screen_h) + { + Rows = (screen_h - base_height) / gui.char_height; + check_shellsize(); + height = Rows * gui.char_height + base_height; ++ #ifdef HAVE_GTK2 ++ ++did_adjust; ++ #endif + } ++ #ifdef HAVE_GTK2 ++ if (did_adjust == 2 || (width + gui.char_width >= screen_w ++ && height + gui.char_height >= screen_h)) ++ /* don't unmaximize if at maximum size */ ++ un_maximize = FALSE; ++ #endif + } + gui.num_cols = Columns; + gui.num_rows = Rows; + + min_width = base_width + MIN_COLUMNS * gui.char_width; + min_height = base_height + MIN_LINES * gui.char_height; +! #ifdef FEAT_WINDOWS + min_height += tabline_height() * gui.char_height; +! #endif +! +! #ifdef HAVE_GTK2 +! if (un_maximize) +! { +! /* If the window size is smaller than the screen unmaximize the +! * window, otherwise resizing won't work. */ +! gui_mch_get_screen_dimensions(&screen_w, &screen_h); +! if ((width + gui.char_width < screen_w +! || height + gui.char_height * 2 < screen_h) +! && gui_mch_maximized()) +! gui_mch_unmaximize(); +! } +! #endif + + gui_mch_set_shellsize(width, height, min_width, min_height, + base_width, base_height, direction); +*** ../vim-7.2.263/src/gui_gtk_x11.c 2009-09-23 17:35:17.000000000 +0200 +--- src/gui_gtk_x11.c 2009-09-23 15:43:52.000000000 +0200 +*************** +*** 4376,4381 **** +--- 4376,4404 ---- + #endif + #endif /* HAVE_GTK2 */ + ++ #if defined(HAVE_GTK2) || defined(PROTO) ++ /* ++ * Return TRUE if the main window is maximized. ++ */ ++ int ++ gui_mch_maximized() ++ { ++ return (gui.mainwin != NULL && gui.mainwin->window != NULL ++ && (gdk_window_get_state(gui.mainwin->window) ++ & GDK_WINDOW_STATE_MAXIMIZED)); ++ } ++ ++ /* ++ * Unmaximize the main window ++ */ ++ void ++ gui_mch_unmaximize() ++ { ++ if (gui.mainwin != NULL) ++ gtk_window_unmaximize(GTK_WINDOW(gui.mainwin)); ++ } ++ #endif ++ + /* + * Set the windows size. + */ +*** ../vim-7.2.263/src/proto/gui_gtk_x11.pro 2007-05-05 19:18:54.000000000 +0200 +--- src/proto/gui_gtk_x11.pro 2009-09-23 15:43:45.000000000 +0200 +*************** +*** 16,21 **** +--- 16,23 ---- + void gui_mch_exit __ARGS((int rc)); + int gui_mch_get_winpos __ARGS((int *x, int *y)); + void gui_mch_set_winpos __ARGS((int x, int y)); ++ int gui_mch_maximized __ARGS((void)); ++ void gui_mch_unmaximize __ARGS((void)); + void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction)); + void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h)); + void gui_mch_settitle __ARGS((char_u *title, char_u *icon)); +*** ../vim-7.2.263/src/version.c 2009-09-23 17:35:17.000000000 +0200 +--- src/version.c 2009-09-23 18:12:21.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 264, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +268. You get up in the morning and go online before getting your coffee. + + /// 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/7.2.265 b/7.2.265 new file mode 100644 index 00000000..46851502 --- /dev/null +++ b/7.2.265 @@ -0,0 +1,56 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.265 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.265 +Problem: When using ":silent broken" inside try/catch silency may persist. + (dr-dr xp) +Solution: Set msg_silent when there is an error and it's bigger than the + saved value. +Files: src/ex_docmd.c + + +*** ../vim-7.2.264/src/ex_docmd.c 2009-07-09 20:13:59.000000000 +0200 +--- src/ex_docmd.c 2009-09-30 11:40:53.000000000 +0200 +*************** +*** 2695,2701 **** + { + /* messages could be enabled for a serious error, need to check if the + * counters don't become negative */ +! if (!did_emsg) + msg_silent = save_msg_silent; + emsg_silent -= did_esilent; + if (emsg_silent < 0) +--- 2695,2701 ---- + { + /* messages could be enabled for a serious error, need to check if the + * counters don't become negative */ +! if (!did_emsg || msg_silent > save_msg_silent) + msg_silent = save_msg_silent; + emsg_silent -= did_esilent; + if (emsg_silent < 0) +*** ../vim-7.2.264/src/version.c 2009-09-23 18:14:13.000000000 +0200 +--- src/version.c 2009-09-30 13:22:47.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 265, + /**/ + +-- +FIRST HEAD: Oh! quick! get the sword out I want to cut his head off. +THIRD HEAD: Oh, cut your own head off. +SECOND HEAD: Yes - do us all a favour. + "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/7.2.266 b/7.2.266 new file mode 100644 index 00000000..3a5ba774 --- /dev/null +++ b/7.2.266 @@ -0,0 +1,244 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.266 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.266 +Problem: When an expression abbreviation is triggered, the typed character + is unknown. +Solution: Make the typed character available in v:char. +Files: runtime/doc/map.txt, src/eval.c, src/getchar.c, src/ops.c, + src/proto/eval.pro + + +*** ../vim-7.2.265/runtime/doc/map.txt 2008-08-09 19:36:49.000000000 +0200 +--- runtime/doc/map.txt 2009-09-23 19:39:19.000000000 +0200 +*************** +*** 224,229 **** +--- 224,233 ---- + The result of the InsertDot() function will be inserted. It could check the + text before the cursor and start omni completion when some condition is met. + ++ For abbreviations |v:char| is set to the character that was typed to trigger ++ the abbreviation. You can use this to decide how to expand the {lhs}. You ++ can't change v:char and you should not insert it. ++ + Be very careful about side effects! The expression is evaluated while + obtaining characters, you may very well make the command dysfunctional. + For this reason the following is blocked: +*** ../vim-7.2.265/src/eval.c 2009-06-03 14:25:47.000000000 +0200 +--- src/eval.c 2009-09-23 19:36:32.000000000 +0200 +*************** +*** 18101,18106 **** +--- 18101,18131 ---- + } + + /* ++ * Set v:char to character "c". ++ */ ++ void ++ set_vim_var_char(c) ++ int c; ++ { ++ #ifdef FEAT_MBYTE ++ char_u buf[MB_MAXBYTES]; ++ #else ++ char_u buf[2]; ++ #endif ++ ++ #ifdef FEAT_MBYTE ++ if (has_mbyte) ++ buf[(*mb_char2bytes)(c, buf)] = NUL; ++ else ++ #endif ++ { ++ buf[0] = c; ++ buf[1] = NUL; ++ } ++ set_vim_var_string(VV_CHAR, buf, -1); ++ } ++ ++ /* + * Set v:count to "count" and v:count1 to "count1". + * When "set_prevcount" is TRUE first set v:prevcount from v:count. + */ +*** ../vim-7.2.265/src/getchar.c 2009-07-14 13:44:43.000000000 +0200 +--- src/getchar.c 2009-09-23 19:35:54.000000000 +0200 +*************** +*** 129,135 **** + static void validate_maphash __ARGS((void)); + static void showmap __ARGS((mapblock_T *mp, int local)); + #ifdef FEAT_EVAL +! static char_u *eval_map_expr __ARGS((char_u *str)); + #endif + + /* +--- 129,135 ---- + static void validate_maphash __ARGS((void)); + static void showmap __ARGS((mapblock_T *mp, int local)); + #ifdef FEAT_EVAL +! static char_u *eval_map_expr __ARGS((char_u *str, int c)); + #endif + + /* +*************** +*** 2446,2452 **** + if (tabuf.typebuf_valid) + { + vgetc_busy = 0; +! s = eval_map_expr(mp->m_str); + vgetc_busy = save_vgetc_busy; + } + else +--- 2446,2452 ---- + if (tabuf.typebuf_valid) + { + vgetc_busy = 0; +! s = eval_map_expr(mp->m_str, NUL); + vgetc_busy = save_vgetc_busy; + } + else +*************** +*** 4367,4375 **** + * abbreviation, but is not inserted into the input stream. + */ + j = 0; +- /* special key code, split up */ + if (c != Ctrl_RSB) + { + if (IS_SPECIAL(c) || c == K_SPECIAL) + { + tb[j++] = K_SPECIAL; +--- 4367,4375 ---- + * abbreviation, but is not inserted into the input stream. + */ + j = 0; + if (c != Ctrl_RSB) + { ++ /* special key code, split up */ + if (IS_SPECIAL(c) || c == K_SPECIAL) + { + tb[j++] = K_SPECIAL; +*************** +*** 4398,4404 **** + } + #ifdef FEAT_EVAL + if (mp->m_expr) +! s = eval_map_expr(mp->m_str); + else + #endif + s = mp->m_str; +--- 4398,4404 ---- + } + #ifdef FEAT_EVAL + if (mp->m_expr) +! s = eval_map_expr(mp->m_str, c); + else + #endif + s = mp->m_str; +*************** +*** 4434,4441 **** + * special characters. + */ + static char_u * +! eval_map_expr(str) + char_u *str; + { + char_u *res; + char_u *p; +--- 4434,4442 ---- + * special characters. + */ + static char_u * +! eval_map_expr(str, c) + char_u *str; ++ int c; /* NUL or typed character for abbreviation */ + { + char_u *res; + char_u *p; +*************** +*** 4452,4457 **** +--- 4453,4459 ---- + #ifdef FEAT_EX_EXTRA + ++ex_normal_lock; + #endif ++ set_vim_var_char(c); /* set v:char to the typed character */ + save_cursor = curwin->w_cursor; + p = eval_to_string(str, NULL, FALSE); + --textlock; +*** ../vim-7.2.265/src/ops.c 2009-07-01 18:04:30.000000000 +0200 +--- src/ops.c 2009-09-23 19:11:40.000000000 +0200 +*************** +*** 4473,4483 **** + int use_sandbox = was_set_insecurely((char_u *)"formatexpr", + OPT_LOCAL); + int r; +- #ifdef FEAT_MBYTE +- char_u buf[MB_MAXBYTES]; +- #else +- char_u buf[2]; +- #endif + + /* + * Set v:lnum to the first line number and v:count to the number of lines. +--- 4473,4478 ---- +*************** +*** 4485,4501 **** + */ + set_vim_var_nr(VV_LNUM, lnum); + set_vim_var_nr(VV_COUNT, count); +! +! #ifdef FEAT_MBYTE +! if (has_mbyte) +! buf[(*mb_char2bytes)(c, buf)] = NUL; +! else +! #endif +! { +! buf[0] = c; +! buf[1] = NUL; +! } +! set_vim_var_string(VV_CHAR, buf, -1); + + /* + * Evaluate the function. +--- 4480,4486 ---- + */ + set_vim_var_nr(VV_LNUM, lnum); + set_vim_var_nr(VV_COUNT, count); +! set_vim_var_char(c); + + /* + * Evaluate the function. +*** ../vim-7.2.265/src/proto/eval.pro 2008-11-20 16:11:03.000000000 +0100 +--- src/proto/eval.pro 2009-09-23 19:36:30.000000000 +0200 +*************** +*** 61,66 **** +--- 61,67 ---- + long get_vim_var_nr __ARGS((int idx)); + char_u *get_vim_var_str __ARGS((int idx)); + list_T *get_vim_var_list __ARGS((int idx)); ++ void set_vim_var_char __ARGS((int c)); + void set_vcount __ARGS((long count, long count1, int set_prevcount)); + void set_vim_var_string __ARGS((int idx, char_u *val, int len)); + void set_vim_var_list __ARGS((int idx, list_T *val)); +*** ../vim-7.2.265/src/version.c 2009-09-30 13:23:57.000000000 +0200 +--- src/version.c 2009-09-30 15:11:29.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 266, + /**/ + +-- +Life would be so much easier if we could just look at the source code. + + /// 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/7.2.267 b/7.2.267 new file mode 100644 index 00000000..6df92c94 --- /dev/null +++ b/7.2.267 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.267 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.267 +Problem: Crash for narrow window and double-width character. +Solution: Check for zero width. (Taro Muraoka) +Files: src/charset.c + + +*** ../vim-7.2.266/src/charset.c 2009-09-11 14:02:25.000000000 +0200 +--- src/charset.c 2009-10-07 16:17:27.000000000 +0200 +*************** +*** 1218,1223 **** +--- 1218,1225 ---- + if ((int)vcol == width1 - 1) + return TRUE; + width2 = width1 + win_col_off2(wp); ++ if (width2 <= 0) ++ return FALSE; + return ((vcol - width1) % width2 == width2 - 1); + } + #endif /* FEAT_MBYTE */ +*** ../vim-7.2.266/src/version.c 2009-09-30 15:15:33.000000000 +0200 +--- src/version.c 2009-10-07 16:19:05.000000000 +0200 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 267, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.268 b/7.2.268 new file mode 100644 index 00000000..89c50b04 --- /dev/null +++ b/7.2.268 @@ -0,0 +1,80 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.268 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.268 +Problem: Crash when using Python to set cursor beyond end of line. + (winterTTr) +Solution: Check the column to be valid. +Files: src/if_python.c + + +*** ../vim-7.2.267/src/if_python.c 2009-07-09 20:06:30.000000000 +0200 +--- src/if_python.c 2009-10-10 14:49:10.000000000 +0200 +*************** +*** 2058,2063 **** +--- 2058,2064 ---- + { + long lnum; + long col; ++ long len; + + if (!PyArg_Parse(val, "(ll)", &lnum, &col)) + return -1; +*************** +*** 2072,2081 **** + if (VimErrorCheck()) + return -1; + +! /* NO CHECK ON COLUMN - SEEMS NOT TO MATTER */ + + this->win->w_cursor.lnum = lnum; + this->win->w_cursor.col = col; + update_screen(VALID); + + return 0; +--- 2073,2088 ---- + if (VimErrorCheck()) + return -1; + +! /* When column is out of range silently correct it. */ +! len = STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE)); +! if (col > len) +! col = len; + + this->win->w_cursor.lnum = lnum; + this->win->w_cursor.col = col; ++ #ifdef FEAT_VIRTUALEDIT ++ this->win->w_cursor.coladd = 0; ++ #endif + update_screen(VALID); + + return 0; +*** ../vim-7.2.267/src/version.c 2009-10-07 16:19:52.000000000 +0200 +--- src/version.c 2009-11-03 11:42:08.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 268, + /**/ + +-- +VOICE OVER: As the horrendous Black Beast lunged forward, escape for Arthur + and his knights seemed hopeless, when, suddenly ... the animator + suffered a fatal heart attack. +ANIMATOR: Aaaaagh! +VOICE OVER: The cartoon peril was no more ... The Quest for Holy Grail could + continue. + "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/7.2.269 b/7.2.269 new file mode 100644 index 00000000..ec15f454 --- /dev/null +++ b/7.2.269 @@ -0,0 +1,261 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.269 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.269 +Problem: Many people struggle to find out why Vim startup is slow. +Solution: Add the --startuptime command line flag. +Files: runtime/doc/starting.txt, src/globals.h, src/feature.h, + src/main.c, src/macros.h + + +*** ../vim-7.2.268/runtime/doc/starting.txt 2008-11-09 13:43:25.000000000 +0100 +--- runtime/doc/starting.txt 2009-10-25 11:57:51.000000000 +0100 +*************** +*** 144,149 **** +--- 144,156 ---- + -u NORC no yes + --noplugin yes no + ++ --startuptime={fname} *--startuptime* ++ During startup write timing messages to the file {fname}. ++ This can be used to find out where time is spent while loading ++ your .vimrc and plugins. ++ When {fname} already exists new messages are appended. ++ {only when compiled with this feature} ++ + *--literal* + --literal Take file names literally, don't expand wildcards. Not needed + for Unix, because Vim always takes file names literally (the +*************** +*** 471,476 **** +--- 487,493 ---- + window title and copy/paste using the X clipboard. This + avoids a long startup time when running Vim in a terminal + emulator and the connection to the X server is slow. ++ See |--startuptime| to find out if affects you. + Only makes a difference on Unix or VMS, when compiled with the + |+X11| feature. Otherwise it's ignored. + To disable the connection only for specific terminals, see the +*** ../vim-7.2.268/src/globals.h 2009-07-29 12:09:49.000000000 +0200 +--- src/globals.h 2009-10-10 15:14:31.000000000 +0200 +*************** +*** 1567,1572 **** +--- 1567,1576 ---- + /* For undo we need to know the lowest time possible. */ + EXTERN time_t starttime; + ++ #ifdef STARTUPTIME ++ EXTERN FILE *time_fd INIT(= NULL); /* where to write startup timing */ ++ #endif ++ + /* + * Some compilers warn for not using a return value, but in some situations we + * can't do anything useful with the value. Assign to this variable to avoid +*** ../vim-7.2.268/src/feature.h 2008-11-09 13:43:25.000000000 +0100 +--- src/feature.h 2009-10-10 16:16:19.000000000 +0200 +*************** +*** 844,853 **** + /* #define DEBUG */ + + /* +! * STARTUPTIME Time the startup process. Writes a "vimstartup" file +! * with timestamps. + */ +! /* #define STARTUPTIME "vimstartup" */ + + /* + * MEM_PROFILE Debugging of memory allocation and freeing. +--- 844,857 ---- + /* #define DEBUG */ + + /* +! * STARTUPTIME Time the startup process. Writes a file with +! * timestamps. + */ +! #if defined(FEAT_NORMAL) \ +! && ((defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)) \ +! || defined(WIN3264)) +! # define STARTUPTIME 1 +! #endif + + /* + * MEM_PROFILE Debugging of memory allocation and freeing. +*** ../vim-7.2.268/src/main.c 2009-05-26 22:58:43.000000000 +0200 +--- src/main.c 2009-10-10 16:18:32.000000000 +0200 +*************** +*** 130,139 **** + #endif + + +- #ifdef STARTUPTIME +- static FILE *time_fd = NULL; +- #endif +- + /* + * Different types of error messages. + */ +--- 130,135 ---- +*************** +*** 173,178 **** +--- 169,177 ---- + char_u *fname = NULL; /* file name from command line */ + mparm_T params; /* various parameters passed between + * main() and other functions. */ ++ #ifdef STARTUPTIME ++ int i; ++ #endif + + /* + * Do any system-specific initialisations. These can NOT use IObuff or +*************** +*** 203,210 **** + #endif + + #ifdef STARTUPTIME +! time_fd = mch_fopen(STARTUPTIME, "a"); +! TIME_MSG("--- VIM STARTING ---"); + #endif + starttime = time(NULL); + +--- 202,216 ---- + #endif + + #ifdef STARTUPTIME +! for (i = 1; i < argc; ++i) +! { +! if (STRNICMP(argv[i], "--startuptime=", 14) == 0) +! { +! time_fd = mch_fopen(argv[i] + 14, "a"); +! TIME_MSG("--- VIM STARTING ---"); +! break; +! } +! } + #endif + starttime = time(NULL); + +*************** +*** 1150,1155 **** +--- 1156,1173 ---- + cursor_on(); + + do_redraw = FALSE; ++ ++ #ifdef STARTUPTIME ++ /* Now that we have drawn the first screen all the startup stuff ++ * has been done, close any file for startup messages. */ ++ if (time_fd != NULL) ++ { ++ TIME_MSG("first screen update"); ++ TIME_MSG("--- VIM STARTED ---"); ++ fclose(time_fd); ++ time_fd = NULL; ++ } ++ #endif + } + #ifdef FEAT_GUI + if (need_mouse_correct) +*************** +*** 1743,1748 **** +--- 1761,1770 ---- + /* already processed, skip */ + } + #endif ++ else if (STRNICMP(argv[0] + argv_idx, "startuptime", 11) == 0) ++ { ++ /* already processed, skip */ ++ } + else + { + if (argv[0][argv_idx]) +*************** +*** 3211,3216 **** +--- 3233,3252 ---- + + static struct timeval prev_timeval; + ++ # ifdef WIN3264 ++ /* ++ * Windows doesn't have gettimeofday(), although it does have struct timeval. ++ */ ++ static int ++ gettimeofday(struct timeval *tv, char *dummy) ++ { ++ long t = clock(); ++ tv->tv_sec = t / CLOCKS_PER_SEC; ++ tv->tv_usec = (t - tv->tv_sec * CLOCKS_PER_SEC) * 1000000 / CLOCKS_PER_SEC; ++ return 0; ++ } ++ # endif ++ + /* + * Save the previous time before doing something that could nest. + * set "*tv_rel" to the time elapsed so far. +*************** +*** 3299,3318 **** + } + } + +- # ifdef WIN3264 +- /* +- * Windows doesn't have gettimeofday(), although it does have struct timeval. +- */ +- int +- gettimeofday(struct timeval *tv, char *dummy) +- { +- long t = clock(); +- tv->tv_sec = t / CLOCKS_PER_SEC; +- tv->tv_usec = (t - tv->tv_sec * CLOCKS_PER_SEC) * 1000000 / CLOCKS_PER_SEC; +- return 0; +- } +- # endif +- + #endif + + #if defined(FEAT_CLIENTSERVER) || defined(PROTO) +--- 3335,3340 ---- +*** ../vim-7.2.268/src/macros.h 2009-05-17 13:30:58.000000000 +0200 +--- src/macros.h 2009-10-10 15:19:07.000000000 +0200 +*************** +*** 243,249 **** + #endif + + #ifdef STARTUPTIME +! # define TIME_MSG(s) time_msg(s, NULL) + #else + # define TIME_MSG(s) + #endif +--- 243,249 ---- + #endif + + #ifdef STARTUPTIME +! # define TIME_MSG(s) { if (time_fd != NULL) time_msg(s, NULL); } + #else + # define TIME_MSG(s) + #endif +*** ../vim-7.2.268/src/version.c 2009-11-03 11:43:05.000000000 +0100 +--- src/version.c 2009-11-03 12:06:31.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 269, + /**/ + +-- +BEDEVERE: Look! It's the old man from scene 24 - what's he Doing here? +ARTHUR: He is the keeper of the Bridge. He asks each traveler five + questions ... +GALAHAD: Three questions. + "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/7.2.270 b/7.2.270 new file mode 100644 index 00000000..7ad6458f --- /dev/null +++ b/7.2.270 @@ -0,0 +1,72 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.270 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.270 +Problem: Using ":@c" when the c register contains a CR causes the rest to + be executed later. (Dexter Douglas) +Solution: Don't check for typeahead to start with ':', keep executing + commands until all added typeahead has been used. +Files: src/ex_docmd.c + + +*** ../vim-7.2.269/src/ex_docmd.c 2009-09-30 13:23:57.000000000 +0200 +--- src/ex_docmd.c 2009-10-28 12:06:54.000000000 +0100 +*************** +*** 8358,8363 **** +--- 8358,8364 ---- + exarg_T *eap; + { + int c; ++ int prev_len = typebuf.tb_len; + + curwin->w_cursor.lnum = eap->line2; + +*************** +*** 8383,8393 **** + + /* + * Execute from the typeahead buffer. +! * Originally this didn't check for the typeahead buffer to be empty, +! * thus could read more Ex commands from stdin. It's not clear why, +! * it is certainly unexpected. + */ +! while ((!stuff_empty() || typebuf.tb_len > 0) && vpeekc() == ':') + (void)do_cmdline(NULL, getexline, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE); + + exec_from_reg = save_efr; +--- 8384,8393 ---- + + /* + * Execute from the typeahead buffer. +! * Continue until the stuff buffer is empty and all added characters +! * have been consumed. + */ +! while (!stuff_empty() || typebuf.tb_len > prev_len) + (void)do_cmdline(NULL, getexline, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE); + + exec_from_reg = save_efr; +*** ../vim-7.2.269/src/version.c 2009-11-03 12:10:39.000000000 +0100 +--- src/version.c 2009-11-03 12:32:47.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 270, + /**/ + +-- +To the optimist, the glass is half full. +To the pessimist, the glass is half empty. +To the engineer, the glass is twice as big as it needs to be. + + /// 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/7.2.271 b/7.2.271 new file mode 100644 index 00000000..07427981 --- /dev/null +++ b/7.2.271 @@ -0,0 +1,92 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.271 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.271 +Problem: Using freed memory in Motif GUI version when making a choice. +Solution: Free memory only after using it. (Dominique Pelle) +Files: src/gui_xmdlg.c + + +*** ../vim-7.2.270/src/gui_xmdlg.c 2009-05-21 23:25:38.000000000 +0200 +--- src/gui_xmdlg.c 2009-10-28 21:56:15.000000000 +0100 +*************** +*** 10,16 **** + /* + * (C) 2001,2005 by Marcin Dalecki + * +! * Implementation of dialogue functions for the Motif GUI variant. + * + * Note about Lesstif: Apparently lesstif doesn't get the widget layout right, + * when using a dynamic scrollbar policy. +--- 10,16 ---- + /* + * (C) 2001,2005 by Marcin Dalecki + * +! * Implementation of dialog functions for the Motif GUI variant. + * + * Note about Lesstif: Apparently lesstif doesn't get the widget layout right, + * when using a dynamic scrollbar policy. +*************** +*** 633,648 **** + data->sel[which] = XtNewString(sel); + else + { +- XtFree(data->sel[which]); + if (!strcmp(data->sel[which], sel)) + { + /* unselecting current selection */ + data->sel[which] = NULL; + if (w) + XmListDeselectItem(w, call_data->item); + } + else + data->sel[which] = XtNewString(sel); + } + XtFree(sel); + +--- 633,651 ---- + data->sel[which] = XtNewString(sel); + else + { + if (!strcmp(data->sel[which], sel)) + { + /* unselecting current selection */ ++ XtFree(data->sel[which]); + data->sel[which] = NULL; + if (w) + XmListDeselectItem(w, call_data->item); + } + else ++ { ++ XtFree(data->sel[which]); + data->sel[which] = XtNewString(sel); ++ } + } + XtFree(sel); + +*** ../vim-7.2.270/src/version.c 2009-11-03 12:38:50.000000000 +0100 +--- src/version.c 2009-11-03 12:48:26.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 271, + /**/ + +-- +ROBIN: (warily) And if you get a question wrong? +ARTHUR: You are cast into the Gorge of Eternal Peril. +ROBIN: Oh ... wacho! + "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/7.2.272 b/7.2.272 new file mode 100644 index 00000000..22bebbcc --- /dev/null +++ b/7.2.272 @@ -0,0 +1,82 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.272 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.272 +Problem: "_.svz" is not recognized as a swap file. (David M. Besonen) +Solution: Accept .s[uvw][a-z] as a swap file name extension. +Files: src/memline.c + + +*** ../vim-7.2.271/src/memline.c 2009-04-22 15:56:27.000000000 +0200 +--- src/memline.c 2009-10-29 20:55:08.000000000 +0100 +*************** +*** 864,884 **** + recoverymode = TRUE; + called_from_main = (curbuf->b_ml.ml_mfp == NULL); + attr = hl_attr(HLF_E); +! /* +! * If the file name ends in ".sw?" we use it directly. +! * Otherwise a search is done to find the swap file(s). +! */ + fname = curbuf->b_fname; + if (fname == NULL) /* When there is no file name */ + fname = (char_u *)""; + len = (int)STRLEN(fname); + if (len >= 4 && + #if defined(VMS) || defined(RISCOS) +! STRNICMP(fname + len - 4, "_sw" , 3) + #else +! STRNICMP(fname + len - 4, ".sw" , 3) + #endif +! == 0) + { + directly = TRUE; + fname = vim_strsave(fname); /* make a copy for mf_open() */ +--- 864,887 ---- + recoverymode = TRUE; + called_from_main = (curbuf->b_ml.ml_mfp == NULL); + attr = hl_attr(HLF_E); +! +! /* +! * If the file name ends in ".s[uvw][a-z]" we assume this is the swap file. +! * Otherwise a search is done to find the swap file(s). +! */ + fname = curbuf->b_fname; + if (fname == NULL) /* When there is no file name */ + fname = (char_u *)""; + len = (int)STRLEN(fname); + if (len >= 4 && + #if defined(VMS) || defined(RISCOS) +! STRNICMP(fname + len - 4, "_s" , 2) + #else +! STRNICMP(fname + len - 4, ".s" , 2) + #endif +! == 0 +! && vim_strchr((char_u *)"UVWuvw", fname[len - 2]) != NULL +! && ASCII_ISALPHA(fname[len - 1])) + { + directly = TRUE; + fname = vim_strsave(fname); /* make a copy for mf_open() */ +*** ../vim-7.2.271/src/version.c 2009-11-03 12:53:44.000000000 +0100 +--- src/version.c 2009-11-03 13:02:51.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 272, + /**/ + +-- +Sorry, no fortune 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/7.2.273 b/7.2.273 new file mode 100644 index 00000000..ac00afaa --- /dev/null +++ b/7.2.273 @@ -0,0 +1,130 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.273 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.273 +Problem: Crash with redir to unknown array. (Christian Brabandt) +Solution: Don't assign the redir result when there was an error. +Files: src/eval.c + + +*** ../vim-7.2.272/src/eval.c 2009-09-30 15:15:33.000000000 +0200 +--- src/eval.c 2009-11-03 12:05:07.000000000 +0100 +*************** +*** 988,1000 **** + int err; + typval_T tv; + +! /* Make sure a valid variable name is specified */ + if (!eval_isnamec1(*name)) + { + EMSG(_(e_invarg)); + return FAIL; + } + + redir_varname = vim_strsave(name); + if (redir_varname == NULL) + return FAIL; +--- 988,1001 ---- + int err; + typval_T tv; + +! /* Catch a bad name early. */ + if (!eval_isnamec1(*name)) + { + EMSG(_(e_invarg)); + return FAIL; + } + ++ /* Make a copy of the name, it is used in redir_lval until redir ends. */ + redir_varname = vim_strsave(name); + if (redir_varname == NULL) + return FAIL; +*************** +*** 1019,1024 **** +--- 1020,1026 ---- + EMSG(_(e_trailing)); + else + EMSG(_(e_invarg)); ++ redir_endp = NULL; /* don't store a value, only cleanup */ + var_redir_stop(); + return FAIL; + } +*************** +*** 1037,1042 **** +--- 1039,1045 ---- + did_emsg |= save_emsg; + if (err) + { ++ redir_endp = NULL; /* don't store a value, only cleanup */ + var_redir_stop(); + return FAIL; + } +*************** +*** 1085,1090 **** +--- 1088,1094 ---- + + /* + * Stop redirecting command output to a variable. ++ * Frees the allocated memory. + */ + void + var_redir_stop() +*************** +*** 1093,1106 **** + + if (redir_lval != NULL) + { +! /* Append the trailing NUL. */ +! ga_append(&redir_ga, NUL); + +! /* Assign the text to the variable. */ +! tv.v_type = VAR_STRING; +! tv.vval.v_string = redir_ga.ga_data; +! set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)"."); +! vim_free(tv.vval.v_string); + + clear_lval(redir_lval); + vim_free(redir_lval); +--- 1097,1114 ---- + + if (redir_lval != NULL) + { +! /* If there was no error: assign the text to the variable. */ +! if (redir_endp != NULL) +! { +! ga_append(&redir_ga, NUL); /* Append the trailing NUL. */ +! tv.v_type = VAR_STRING; +! tv.vval.v_string = redir_ga.ga_data; +! set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)"."); +! } + +! /* free the collected output */ +! vim_free(redir_ga.ga_data); +! redir_ga.ga_data = NULL; + + clear_lval(redir_lval); + vim_free(redir_lval); +*** ../vim-7.2.272/src/version.c 2009-11-03 13:06:03.000000000 +0100 +--- src/version.c 2009-11-03 14:24:06.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 273, + /**/ + +-- +Permission is granted to read this message out aloud on Kings Cross Road, +London, under the condition that the orator is properly dressed. + + /// 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/7.2.274 b/7.2.274 new file mode 100644 index 00000000..809cedcf --- /dev/null +++ b/7.2.274 @@ -0,0 +1,130 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.274 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.274 +Problem: Syntax folding doesn't work properly when adding a comment. +Solution: Fix it and add a test. (Lech Lorens) +Files: src/fold.c, src/testdir/test45.in, src/testdir/test45.ok + + +*** ../vim-7.2.273/src/fold.c 2009-09-18 15:16:37.000000000 +0200 +--- src/fold.c 2009-11-03 12:36:37.000000000 +0100 +*************** +*** 2256,2261 **** +--- 2256,2295 ---- + } + } + ++ /* ++ * If folding is defined by the syntax, it is possible that a change in ++ * one line will cause all sub-folds of the current fold to change (e.g., ++ * closing a C-style comment can cause folds in the subsequent lines to ++ * appear). To take that into account we should adjust the value of "bot" ++ * to point to the end of the current fold: ++ */ ++ if (foldlevelSyntax == getlevel) ++ { ++ garray_T *gap = &wp->w_folds; ++ fold_T *fp = NULL; ++ int current_fdl = 0; ++ linenr_T fold_start_lnum = 0; ++ linenr_T lnum_rel = fline.lnum; ++ ++ while (current_fdl < fline.lvl) ++ { ++ if (!foldFind(gap, lnum_rel, &fp)) ++ break; ++ ++current_fdl; ++ ++ fold_start_lnum += fp->fd_top; ++ gap = &fp->fd_nested; ++ lnum_rel -= fp->fd_top; ++ } ++ if (fp != NULL && current_fdl == fline.lvl) ++ { ++ linenr_T fold_end_lnum = fold_start_lnum + fp->fd_len; ++ ++ if (fold_end_lnum > bot) ++ bot = fold_end_lnum; ++ } ++ } ++ + start = fline.lnum; + end = bot; + /* Do at least one line. */ +*** ../vim-7.2.273/src/testdir/test45.in 2007-09-25 17:58:43.000000000 +0200 +--- src/testdir/test45.in 2009-11-03 12:22:38.000000000 +0100 +*************** +*** 28,36 **** + k:call append("$", foldlevel(".")) + :" test syntax folding + :set fdm=syntax fdl=0 +! :syn region Hup start="dd" end="hh" fold + Gzk:call append("$", "folding " . getline(".")) + k:call append("$", getline(".")) + :" test expression folding + :fun Flvl() + let l = getline(v:lnum) +--- 28,41 ---- + k:call append("$", foldlevel(".")) + :" test syntax folding + :set fdm=syntax fdl=0 +! :syn region Hup start="dd" end="ii" fold contains=Fd1,Fd2,Fd3 +! :syn region Fd1 start="ee" end="ff" fold contained +! :syn region Fd2 start="gg" end="hh" fold contained +! :syn region Fd3 start="commentstart" end="commentend" fold contained + Gzk:call append("$", "folding " . getline(".")) + k:call append("$", getline(".")) ++ jAcommentstart Acommentend:set fdl=1 ++ 3j:call append("$", getline(".")) + :" test expression folding + :fun Flvl() + let l = getline(v:lnum) +*** ../vim-7.2.273/src/testdir/test45.ok 2004-06-13 17:47:37.000000000 +0200 +--- src/testdir/test45.ok 2009-11-03 12:22:50.000000000 +0100 +*************** +*** 8,15 **** + 0 + indent 2 + 1 +! folding 8 hh + 3 cc + expr 2 + 1 + 2 +--- 8,16 ---- + 0 + indent 2 + 1 +! folding 9 ii + 3 cc ++ 7 gg + expr 2 + 1 + 2 +*** ../vim-7.2.273/src/version.c 2009-11-03 14:26:29.000000000 +0100 +--- src/version.c 2009-11-03 14:44:21.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 274, + /**/ + +-- +BRIDGEKEEPER: What is your favorite colour? +LAUNCELOT: Blue. +BRIDGEKEEPER: Right. Off you go. + "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/7.2.275 b/7.2.275 new file mode 100644 index 00000000..c6c63264 --- /dev/null +++ b/7.2.275 @@ -0,0 +1,95 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.275 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.275 +Problem: Warning for unused argument and comparing signed and unsigned. +Solution: Add type cast. +Files: src/memline.c + + +*** ../vim-7.2.274/src/memline.c 2009-11-03 13:06:03.000000000 +0100 +--- src/memline.c 2009-10-29 20:55:08.000000000 +0100 +*************** +*** 1285,1291 **** + for (i = 0; i < dp->db_line_count; ++i) + { + txt_start = (dp->db_index[i] & DB_INDEX_MASK); +! if (txt_start <= HEADER_SIZE + || txt_start >= (int)dp->db_txt_end) + { + p = (char_u *)"???"; +--- 1285,1291 ---- + for (i = 0; i < dp->db_line_count; ++i) + { + txt_start = (dp->db_index[i] & DB_INDEX_MASK); +! if (txt_start <= (int)HEADER_SIZE + || txt_start >= (int)dp->db_txt_end) + { + p = (char_u *)"???"; +*************** +*** 1296,1302 **** + ml_append(lnum++, p, (colnr_T)0, TRUE); + } + if (has_error) +! ml_append(lnum++, (char_u *)_("???END"), (colnr_T)0, TRUE); + } + } + } +--- 1296,1303 ---- + ml_append(lnum++, p, (colnr_T)0, TRUE); + } + if (has_error) +! ml_append(lnum++, (char_u *)_("???END"), +! (colnr_T)0, TRUE); + } + } + } +*************** +*** 3576,3586 **** + * Make swap file name out of the file name and a directory name. + * Returns pointer to allocated memory or NULL. + */ +- /*ARGSUSED*/ + char_u * + makeswapname(fname, ffname, buf, dir_name) + char_u *fname; +! char_u *ffname; + buf_T *buf; + char_u *dir_name; + { +--- 3577,3586 ---- + * Make swap file name out of the file name and a directory name. + * Returns pointer to allocated memory or NULL. + */ + char_u * + makeswapname(fname, ffname, buf, dir_name) + char_u *fname; +! char_u *ffname UNUSED; + buf_T *buf; + char_u *dir_name; + { +*** ../vim-7.2.274/src/version.c 2009-11-03 14:46:35.000000000 +0100 +--- src/version.c 2009-11-03 15:28:33.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 275, + /**/ + +-- +BRIDGEKEEPER: What is your favorite colour? +GAWAIN: Blue ... No yelloooooww! + "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/7.2.276 b/7.2.276 new file mode 100644 index 00000000..15dc68b0 --- /dev/null +++ b/7.2.276 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.276 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.276 +Problem: Crash when setting 'isprint' to a small bullet. (Raul Coronado) +Solution: Check for the character to be < 256. Also make it possible to + specify a range of multi-byte characters. (Lech Lorens) +Files: src/charset.c + + +*** ../vim-7.2.275/src/charset.c 2009-10-07 16:19:52.000000000 +0200 +--- src/charset.c 2009-11-03 12:46:12.000000000 +0100 +*************** +*** 187,195 **** + if (VIM_ISDIGIT(*p)) + c2 = getdigits(&p); + else + c2 = *p++; + } +! if (c <= 0 || (c2 < c && c2 != -1) || c2 >= 256 + || !(*p == NUL || *p == ',')) + return FAIL; + +--- 187,200 ---- + if (VIM_ISDIGIT(*p)) + c2 = getdigits(&p); + else ++ #ifdef FEAT_MBYTE ++ if (has_mbyte) ++ c2 = mb_ptr2char_adv(&p); ++ else ++ #endif + c2 = *p++; + } +! if (c <= 0 || c >= 256 || (c2 < c && c2 != -1) || c2 >= 256 + || !(*p == NUL || *p == ',')) + return FAIL; + +*** ../vim-7.2.275/src/version.c 2009-11-03 15:32:58.000000000 +0100 +--- src/version.c 2009-11-03 16:03:18.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 276, + /**/ + +-- +BRIDGEKEEPER: What is your favorite editor? +GAWAIN: Emacs ... No, Viiiiiiiiiiimmmmmmm! + "Monty Python and the Holy editor wars" PYTHON (MONTY) SOFTWARE 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/7.2.277 b/7.2.277 new file mode 100644 index 00000000..ed3caf4d --- /dev/null +++ b/7.2.277 @@ -0,0 +1,66 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.277 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.277 +Problem: CTRL-Y in a diff'ed window may move the cursor outside of the + window. (Lech Lorens) +Solution: Limit the number of filler lines to the height of the window. + Don't reset filler lines to zero for an empty buffer. +Files: src/move.c + + +*** ../vim-7.2.276/src/move.c 2009-05-15 21:31:11.000000000 +0200 +--- src/move.c 2009-11-03 14:39:55.000000000 +0100 +*************** +*** 183,191 **** + if (curwin->w_topline != 1) + redraw_later(NOT_VALID); + curwin->w_topline = 1; +- #ifdef FEAT_DIFF +- curwin->w_topfill = 0; +- #endif + curwin->w_botline = 2; + curwin->w_valid |= VALID_BOTLINE|VALID_BOTLINE_AP; + #ifdef FEAT_SCROLLBIND +--- 183,188 ---- +*************** +*** 1257,1263 **** + while (line_count-- > 0) + { + #ifdef FEAT_DIFF +! if (curwin->w_topfill < diff_check(curwin, curwin->w_topline)) + { + ++curwin->w_topfill; + ++done; +--- 1254,1261 ---- + while (line_count-- > 0) + { + #ifdef FEAT_DIFF +! if (curwin->w_topfill < diff_check(curwin, curwin->w_topline) +! && curwin->w_topfill < curwin->w_height - 1) + { + ++curwin->w_topfill; + ++done; +*** ../vim-7.2.276/src/version.c 2009-11-03 16:03:59.000000000 +0100 +--- src/version.c 2009-11-03 16:22:04.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 277, + /**/ + +-- +SIGFUN -- signature too funny (core dumped) + + /// 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/7.2.278 b/7.2.278 new file mode 100644 index 00000000..edf4e58a --- /dev/null +++ b/7.2.278 @@ -0,0 +1,74 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.278 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.278 +Problem: Using magic number in the folding code. +Solution: Use the defined MAX_LEVEL. +Files: src/fold.c + + +*** ../vim-7.2.277/src/fold.c 2009-11-03 14:46:35.000000000 +0100 +--- src/fold.c 2009-11-03 12:36:37.000000000 +0100 +*************** +*** 1932,1938 **** + #ifdef FEAT_EVAL + if (*wp->w_p_fdt != NUL) + { +! char_u dashes[51]; + win_T *save_curwin; + int level; + char_u *p; +--- 1932,1938 ---- + #ifdef FEAT_EVAL + if (*wp->w_p_fdt != NUL) + { +! char_u dashes[MAX_LEVEL + 2]; + win_T *save_curwin; + int level; + char_u *p; +*************** +*** 1944,1951 **** + /* Set "v:folddashes" to a string of "level" dashes. */ + /* Set "v:foldlevel" to "level". */ + level = foldinfo->fi_level; +! if (level > 50) +! level = 50; + vim_memset(dashes, '-', (size_t)level); + dashes[level] = NUL; + set_vim_var_string(VV_FOLDDASHES, dashes, -1); +--- 1944,1951 ---- + /* Set "v:folddashes" to a string of "level" dashes. */ + /* Set "v:foldlevel" to "level". */ + level = foldinfo->fi_level; +! if (level > (int)sizeof(dashes) - 1) +! level = (int)sizeof(dashes) - 1; + vim_memset(dashes, '-', (size_t)level); + dashes[level] = NUL; + set_vim_var_string(VV_FOLDDASHES, dashes, -1); +*** ../vim-7.2.277/src/version.c 2009-11-03 16:22:59.000000000 +0100 +--- src/version.c 2009-11-03 16:29:08.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 278, + /**/ + +-- +BRIDGEKEEPER: What is the air-speed velocity of an unladen swallow? +ARTHUR: What do you mean? An African or European swallow? +BRIDGEKEEPER: Er ... I don't know that ... Aaaaarrrrrrggghhh! + BRIDGEKEEPER is cast into the gorge. + "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/7.2.279 b/7.2.279 new file mode 100644 index 00000000..bdf58fc8 --- /dev/null +++ b/7.2.279 @@ -0,0 +1,120 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.279 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.279 +Problem: Invalid memory read with visual mode "r". (Dominique Pelle) +Solution: Make sure the cursor position is valid. Don't check the cursor + position but the position being used. And make sure we get the + right line. +Files: src/misc2.c, src/ops.c + + +*** ../vim-7.2.278/src/misc2.c 2009-05-16 21:06:36.000000000 +0200 +--- src/misc2.c 2009-11-03 16:43:10.000000000 +0100 +*************** +*** 156,162 **** + || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL) + #endif + ; +! line = ml_get_curline(); + + if (wcol >= MAXCOL) + { +--- 156,162 ---- + || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL) + #endif + ; +! line = ml_get_buf(curbuf, pos->lnum, FALSE); + + if (wcol >= MAXCOL) + { +*************** +*** 332,340 **** + #endif + + #ifdef FEAT_MBYTE +! /* prevent cursor from moving on the trail byte */ + if (has_mbyte) +! mb_adjust_cursor(); + #endif + + if (col < wcol) +--- 332,340 ---- + #endif + + #ifdef FEAT_MBYTE +! /* prevent from moving onto a trail byte */ + if (has_mbyte) +! mb_adjustpos(pos); + #endif + + if (col < wcol) +*** ../vim-7.2.278/src/ops.c 2009-09-30 15:15:33.000000000 +0200 +--- src/ops.c 2009-11-03 15:18:50.000000000 +0100 +*************** +*** 2020,2025 **** +--- 2020,2026 ---- + bd.is_MAX = (curwin->w_curswant == MAXCOL); + for ( ; curwin->w_cursor.lnum <= oap->end.lnum; ++curwin->w_cursor.lnum) + { ++ curwin->w_cursor.col = 0; /* make sure cursor position is valid */ + block_prep(oap, &bd, curwin->w_cursor.lnum, TRUE); + if (bd.textlen == 0 && (!virtual_op || bd.is_MAX)) + continue; /* nothing to replace */ +*************** +*** 2035,2040 **** +--- 2036,2042 ---- + { + pos_T vpos; + ++ vpos.lnum = curwin->w_cursor.lnum; + getvpos(&vpos, oap->start_vcol); + bd.startspaces += vpos.coladd; + n = bd.startspaces; +*************** +*** 2693,2703 **** + * initial coladd offset as part of "startspaces" */ + if (bd.is_short) + { +! linenr_T lnum = curwin->w_cursor.lnum; +! +! curwin->w_cursor.lnum = linenr; + (void)getvpos(&vpos, oap->start_vcol); +- curwin->w_cursor.lnum = lnum; + } + else + vpos.coladd = 0; +--- 2695,2702 ---- + * initial coladd offset as part of "startspaces" */ + if (bd.is_short) + { +! vpos.lnum = linenr; + (void)getvpos(&vpos, oap->start_vcol); + } + else + vpos.coladd = 0; +*** ../vim-7.2.278/src/version.c 2009-11-03 16:29:48.000000000 +0100 +--- src/version.c 2009-11-03 16:41:53.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 279, + /**/ + +-- +BEDEVERE: How do you know so much about swallows? +ARTHUR: Well you have to know these things when you're a king, you know. + "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/7.2.280 b/7.2.280 new file mode 100644 index 00000000..6223ac45 --- /dev/null +++ b/7.2.280 @@ -0,0 +1,251 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.280 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.280 +Problem: A redraw in a custom statusline with %! may cause a crash. + (Yukihiro Nakadaira) +Solution: Make a copy of 'statusline'. Also fix typo in function name + redraw_custum_statusline. (party by Dominique Pelle) +Files: src/screen.c + + +*** ../vim-7.2.279/src/screen.c 2009-07-29 16:13:35.000000000 +0200 +--- src/screen.c 2009-11-03 17:13:16.000000000 +0100 +*************** +*** 132,138 **** + static void draw_vsep_win __ARGS((win_T *wp, int row)); + #endif + #ifdef FEAT_STL_OPT +! static void redraw_custum_statusline __ARGS((win_T *wp)); + #endif + #ifdef FEAT_SEARCH_EXTRA + #define SEARCH_HL_PRIORITY 0 +--- 132,138 ---- + static void draw_vsep_win __ARGS((win_T *wp, int row)); + #endif + #ifdef FEAT_STL_OPT +! static void redraw_custom_statusline __ARGS((win_T *wp)); + #endif + #ifdef FEAT_SEARCH_EXTRA + #define SEARCH_HL_PRIORITY 0 +*************** +*** 5772,5778 **** + else if (*p_stl != NUL || *wp->w_p_stl != NUL) + { + /* redraw custom status line */ +! redraw_custum_statusline(wp); + } + #endif + else +--- 5794,5800 ---- + else if (*p_stl != NUL || *wp->w_p_stl != NUL) + { + /* redraw custom status line */ +! redraw_custom_statusline(wp); + } + #endif + else +*************** +*** 5897,5914 **** + * errors encountered. + */ + static void +! redraw_custum_statusline(wp) + win_T *wp; + { +! int save_called_emsg = called_emsg; + + called_emsg = FALSE; + win_redr_custom(wp, FALSE); + if (called_emsg) + set_string_option_direct((char_u *)"statusline", -1, + (char_u *)"", OPT_FREE | (*wp->w_p_stl != NUL + ? OPT_LOCAL : OPT_GLOBAL), SID_ERROR); + called_emsg |= save_called_emsg; + } + #endif + +--- 5919,5949 ---- + * errors encountered. + */ + static void +! redraw_custom_statusline(wp) + win_T *wp; + { +! static int entered = FALSE; +! int save_called_emsg = called_emsg; +! +! /* When called recursively return. This can happen when the statusline +! * contains an expression that triggers a redraw. */ +! if (entered) +! return; +! entered = TRUE; + + called_emsg = FALSE; + win_redr_custom(wp, FALSE); + if (called_emsg) ++ { ++ /* When there is an error disable the statusline, otherwise the ++ * display is messed up with errors and a redraw triggers the problem ++ * again and again. */ + set_string_option_direct((char_u *)"statusline", -1, + (char_u *)"", OPT_FREE | (*wp->w_p_stl != NUL + ? OPT_LOCAL : OPT_GLOBAL), SID_ERROR); ++ } + called_emsg |= save_called_emsg; ++ entered = FALSE; + } + #endif + +*************** +*** 6016,6021 **** +--- 6051,6057 ---- + int len; + int fillchar; + char_u buf[MAXPATHL]; ++ char_u *stl; + char_u *p; + struct stl_hlrec hltab[STL_MAX_ITEM]; + struct stl_hlrec tabtab[STL_MAX_ITEM]; +*************** +*** 6025,6031 **** + if (wp == NULL) + { + /* Use 'tabline'. Always at the first line of the screen. */ +! p = p_tal; + row = 0; + fillchar = ' '; + attr = hl_attr(HLF_TPF); +--- 6061,6067 ---- + if (wp == NULL) + { + /* Use 'tabline'. Always at the first line of the screen. */ +! stl = p_tal; + row = 0; + fillchar = ' '; + attr = hl_attr(HLF_TPF); +*************** +*** 6042,6058 **** + + if (draw_ruler) + { +! p = p_ruf; + /* advance past any leading group spec - implicit in ru_col */ +! if (*p == '%') + { +! if (*++p == '-') +! p++; +! if (atoi((char *) p)) +! while (VIM_ISDIGIT(*p)) +! p++; +! if (*p++ != '(') +! p = p_ruf; + } + #ifdef FEAT_VERTSPLIT + col = ru_col - (Columns - W_WIDTH(wp)); +--- 6078,6094 ---- + + if (draw_ruler) + { +! stl = p_ruf; + /* advance past any leading group spec - implicit in ru_col */ +! if (*stl == '%') + { +! if (*++stl == '-') +! stl++; +! if (atoi((char *)stl)) +! while (VIM_ISDIGIT(*stl)) +! stl++; +! if (*stl++ != '(') +! stl = p_ruf; + } + #ifdef FEAT_VERTSPLIT + col = ru_col - (Columns - W_WIDTH(wp)); +*************** +*** 6081,6089 **** + else + { + if (*wp->w_p_stl != NUL) +! p = wp->w_p_stl; + else +! p = p_stl; + # ifdef FEAT_EVAL + use_sandbox = was_set_insecurely((char_u *)"statusline", + *wp->w_p_stl == NUL ? 0 : OPT_LOCAL); +--- 6117,6125 ---- + else + { + if (*wp->w_p_stl != NUL) +! stl = wp->w_p_stl; + else +! stl = p_stl; + # ifdef FEAT_EVAL + use_sandbox = was_set_insecurely((char_u *)"statusline", + *wp->w_p_stl == NUL ? 0 : OPT_LOCAL); +*************** +*** 6098,6107 **** + if (maxwidth <= 0) + return; + + width = build_stl_str_hl(wp == NULL ? curwin : wp, + buf, sizeof(buf), +! p, use_sandbox, + fillchar, maxwidth, hltab, tabtab); + len = (int)STRLEN(buf); + + while (width < maxwidth && len < (int)sizeof(buf) - 1) +--- 6134,6147 ---- + if (maxwidth <= 0) + return; + ++ /* Make a copy, because the statusline may include a function call that ++ * might change the option value and free the memory. */ ++ stl = vim_strsave(stl); + width = build_stl_str_hl(wp == NULL ? curwin : wp, + buf, sizeof(buf), +! stl, use_sandbox, + fillchar, maxwidth, hltab, tabtab); ++ vim_free(stl); + len = (int)STRLEN(buf); + + while (width < maxwidth && len < (int)sizeof(buf) - 1) +*************** +*** 9465,9471 **** + #if defined(FEAT_STL_OPT) && defined(FEAT_WINDOWS) + if ((*p_stl != NUL || *curwin->w_p_stl != NUL) && curwin->w_status_height) + { +! redraw_custum_statusline(curwin); + } + else + #endif +--- 9505,9511 ---- + #if defined(FEAT_STL_OPT) && defined(FEAT_WINDOWS) + if ((*p_stl != NUL || *curwin->w_p_stl != NUL) && curwin->w_status_height) + { +! redraw_custom_statusline(curwin); + } + else + #endif +*** ../vim-7.2.279/src/version.c 2009-11-03 16:44:04.000000000 +0100 +--- src/version.c 2009-11-03 17:15:35.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 280, + /**/ + +-- +Every exit is an entrance into something else. + + /// 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/7.2.281 b/7.2.281 new file mode 100644 index 00000000..f73d7a54 --- /dev/null +++ b/7.2.281 @@ -0,0 +1,81 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.281 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.281 +Problem: 'cursorcolumn' highlighting is wrong in diff mode. +Solution: Adjust the column computation. (Lech Lorens) +Files: src/screen.c + + +*** ../vim-7.2.280/src/screen.c 2009-11-03 17:20:18.000000000 +0100 +--- src/screen.c 2009-11-03 17:13:16.000000000 +0100 +*************** +*** 3008,3018 **** + mb_ptr_adv(ptr); + } + +! #ifdef FEAT_VIRTUALEDIT +! /* When 'virtualedit' is set the end of the line may be before the +! * start of the displayed part. */ +! if (vcol < v && *ptr == NUL && virtual_active()) + vcol = v; + #endif + + /* Handle a character that's not completely on the screen: Put ptr at +--- 3008,3040 ---- + mb_ptr_adv(ptr); + } + +! #if defined(FEAT_SYN_HL) || defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL) +! /* When: +! * - 'cuc' is set, or +! * - 'virtualedit' is set, or +! * - the visual mode is active, +! * the end of the line may be before the start of the displayed part. +! */ +! if (vcol < v && ( +! # ifdef FEAT_SYN_HL +! wp->w_p_cuc +! # if defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL) +! || +! # endif +! # endif +! # ifdef FEAT_VIRTUALEDIT +! virtual_active() +! # ifdef FEAT_VISUAL +! || +! # endif +! # endif +! # ifdef FEAT_VISUAL +! (VIsual_active && wp->w_buffer == curwin->w_buffer) +! # endif +! )) +! { + vcol = v; ++ } + #endif + + /* Handle a character that's not completely on the screen: Put ptr at +*** ../vim-7.2.280/src/version.c 2009-11-03 17:20:18.000000000 +0100 +--- src/version.c 2009-11-03 17:34:54.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 281, + /**/ + +-- +Every person is responsible for the choices he makes. + + /// 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/7.2.282 b/7.2.282 new file mode 100644 index 00000000..dd4dc647 --- /dev/null +++ b/7.2.282 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.282 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.282 +Problem: A fold can't be closed. +Solution: Initialize fd_small to MAYBE. (Lech Lorens) +Files: src/fold.c + + +*** ../vim-7.2.281/src/fold.c 2009-11-03 16:29:48.000000000 +0100 +--- src/fold.c 2009-11-03 17:41:50.000000000 +0100 +*************** +*** 2851,2856 **** +--- 2851,2858 ---- + fp[1].fd_top = bot + 1; + fp[1].fd_len = fp->fd_len - (fp[1].fd_top - fp->fd_top); + fp[1].fd_flags = fp->fd_flags; ++ fp[1].fd_small = MAYBE; ++ fp->fd_small = MAYBE; + + /* Move nested folds below bot to new fold. There can't be + * any between top and bot, they have been removed by the caller. */ +*** ../vim-7.2.281/src/version.c 2009-11-03 17:36:09.000000000 +0100 +--- src/version.c 2009-11-03 17:59:12.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 282, + /**/ + +-- +You can be stopped by the police for biking over 65 miles per hour. +You are not allowed to walk across a street on your hands. + [real standing laws in Connecticut, United States of America] + + /// 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/7.2.283 b/7.2.283 new file mode 100644 index 00000000..0d6f6058 --- /dev/null +++ b/7.2.283 @@ -0,0 +1,73 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.283 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.283 +Problem: Changing font while the window is maximized doesn't keep the + window maximized. +Solution: Recompute number of lines and columns after changing font. (James + Vega) +Files: src/gui_gtk_x11.c + + +*** ../vim-7.2.282/src/gui_gtk_x11.c 2009-09-23 18:14:13.000000000 +0200 +--- src/gui_gtk_x11.c 2009-11-03 17:56:27.000000000 +0100 +*************** +*** 5267,5274 **** + # endif + #endif /* !HAVE_GTK2 */ + +! /* Preserve the logical dimensions of the screen. */ +! update_window_manager_hints(0, 0); + + return OK; + } +--- 5267,5290 ---- + # endif + #endif /* !HAVE_GTK2 */ + +! #ifdef HAVE_GTK2 +! if (gui_mch_maximized()) +! { +! int w, h; +! +! /* Update lines and columns in accordance with the new font, keep the +! * window maximized. */ +! gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h); +! w -= get_menu_tool_width(); +! h -= get_menu_tool_height(); +! gui_resize_shell(w, h); +! } +! else +! #endif +! { +! /* Preserve the logical dimensions of the screen. */ +! update_window_manager_hints(0, 0); +! } + + return OK; + } +*** ../vim-7.2.282/src/version.c 2009-11-03 18:04:26.000000000 +0100 +--- src/version.c 2009-11-03 18:11:53.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 283, + /**/ + +-- +If an elephant is left tied to a parking meter, the parking fee has to be paid +just as it would for a vehicle. + [real standing law in Florida, United States of America] + + /// 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/7.2.284 b/7.2.284 new file mode 100644 index 00000000..5b4336b1 --- /dev/null +++ b/7.2.284 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.284 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.284 +Problem: When editing the same buffer in two windows, one with folding, + display may be wrong after changes. +Solution: Call set_topline() to take care of side effects. (Lech Lorens) +Files: src/misc1.c + + +*** ../vim-7.2.283/src/misc1.c 2009-07-22 11:03:38.000000000 +0200 +--- src/misc1.c 2009-11-03 18:38:15.000000000 +0100 +*************** +*** 2886,2891 **** +--- 2886,2898 ---- + } + #endif + } ++ ++ #ifdef FEAT_FOLDING ++ /* Take care of side effects for setting w_topline when folds have ++ * changed. Esp. when the buffer was changed in another window. */ ++ if (hasAnyFolding(wp)) ++ set_topline(wp, wp->w_topline); ++ #endif + } + } + +*** ../vim-7.2.283/src/version.c 2009-11-03 18:13:36.000000000 +0100 +--- src/version.c 2009-11-03 18:44:12.000000000 +0100 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 284, + /**/ + +-- +Men may not be seen publicly in any kind of strapless gown. + [real standing law in Florida, United States of America] + + /// 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/7.2.285 b/7.2.285 new file mode 100644 index 00000000..2a34e17e --- /dev/null +++ b/7.2.285 @@ -0,0 +1,56 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.285 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.285 (after 7.2.169) +Problem: CTRL-U in Insert mode also deletes indent. (Andrey Voropaev) +Solution: Fix mistake made in patch 7.2.169. +Files: src/edit.c + + +*** ../vim-7.2.284/src/edit.c 2009-07-09 18:15:19.000000000 +0200 +--- src/edit.c 2009-11-05 20:25:15.000000000 +0100 +*************** +*** 8519,8525 **** + { + save_col = curwin->w_cursor.col; + beginline(BL_WHITE); +! if (curwin->w_cursor.col < (colnr_T)temp) + mincol = curwin->w_cursor.col; + curwin->w_cursor.col = save_col; + } +--- 8519,8525 ---- + { + save_col = curwin->w_cursor.col; + beginline(BL_WHITE); +! if (curwin->w_cursor.col < save_col) + mincol = curwin->w_cursor.col; + curwin->w_cursor.col = save_col; + } +*** ../vim-7.2.284/src/version.c 2009-11-03 18:46:53.000000000 +0100 +--- src/version.c 2009-11-11 13:21:25.000000000 +0100 +*************** +*** 678,679 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 285, + /**/ + +-- +(letter from Mark to Mike, about the film's probable certificate) + I would like to get back to the Censor and agree to lose the shits, take + the odd Jesus Christ out and lose Oh fuck off, but to retain 'fart in + your general direction', 'castanets of your testicles' and 'oral sex' + and ask him for an 'A' rating on that basis. + "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/7.2.286 b/7.2.286 new file mode 100644 index 00000000..7577502f --- /dev/null +++ b/7.2.286 @@ -0,0 +1,227 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.286 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.286 (after 7.2.269) +Problem: The "--startuptime=" argument is not consistent with other + arguments. +Solution: Use "--startuptime ". Added the +startuptime feature. +Files: runtime/doc/eval.txt, runtime/doc/starting.txt, + runtime/doc/various.txt, src/eval.c, src/main.c, src/version.c + + +*** ../vim-7.2.285/runtime/doc/eval.txt 2009-04-22 12:53:31.000000000 +0200 +--- runtime/doc/eval.txt 2009-11-11 13:01:58.000000000 +0100 +*************** +*** 5869,5874 **** +--- 5881,5887 ---- + signs Compiled with |:sign| support. + smartindent Compiled with 'smartindent' support. + sniff Compiled with SNiFF interface support. ++ startuptime Compiled with |--startuptime| support. + statusline Compiled with support for 'statusline', 'rulerformat' + and special formats of 'titlestring' and 'iconstring'. + sun_workshop Compiled with support for Sun |workshop|. +*** ../vim-7.2.285/runtime/doc/starting.txt 2009-11-03 12:10:39.000000000 +0100 +--- runtime/doc/starting.txt 2009-11-11 13:20:56.000000000 +0100 +*************** +*** 144,155 **** + -u NORC no yes + --noplugin yes no + +! --startuptime={fname} *--startuptime* + During startup write timing messages to the file {fname}. + This can be used to find out where time is spent while loading +! your .vimrc and plugins. + When {fname} already exists new messages are appended. +! {only when compiled with this feature} + + *--literal* + --literal Take file names literally, don't expand wildcards. Not needed +--- 144,156 ---- + -u NORC no yes + --noplugin yes no + +! --startuptime {fname} *--startuptime* + During startup write timing messages to the file {fname}. + This can be used to find out where time is spent while loading +! your .vimrc, plugins and opening the first file. + When {fname} already exists new messages are appended. +! (Only available when compiled with the |+startuptime| +! feature). + + *--literal* + --literal Take file names literally, don't expand wildcards. Not needed +*** ../vim-7.2.285/runtime/doc/various.txt 2009-07-09 15:55:34.000000000 +0200 +--- runtime/doc/various.txt 2009-11-11 13:03:52.000000000 +0100 +*************** +*** 374,379 **** +--- 374,380 ---- + B *+signs* |:sign| + N *+smartindent* |'smartindent'| + m *+sniff* SniFF interface |sniff| ++ N *+startuptime* |--startuptime| argument + N *+statusline* Options 'statusline', 'rulerformat' and special + formats of 'titlestring' and 'iconstring' + m *+sun_workshop* |workshop| +*** ../vim-7.2.285/src/eval.c 2009-11-03 14:26:29.000000000 +0100 +--- src/eval.c 2009-11-11 12:59:53.000000000 +0100 +*************** +*** 11736,11741 **** +--- 11736,11744 ---- + #ifdef FEAT_SNIFF + "sniff", + #endif ++ #ifdef STARTUPTIME ++ "startuptime", ++ #endif + #ifdef FEAT_STL_OPT + "statusline", + #endif +*** ../vim-7.2.285/src/main.c 2009-11-03 12:10:39.000000000 +0100 +--- src/main.c 2009-11-08 12:57:46.000000000 +0100 +*************** +*** 204,212 **** + #ifdef STARTUPTIME + for (i = 1; i < argc; ++i) + { +! if (STRNICMP(argv[i], "--startuptime=", 14) == 0) + { +! time_fd = mch_fopen(argv[i] + 14, "a"); + TIME_MSG("--- VIM STARTING ---"); + break; + } +--- 204,212 ---- + #ifdef STARTUPTIME + for (i = 1; i < argc; ++i) + { +! if (STRICMP(argv[i], "--startuptime") == 0 && i + 1 < argc) + { +! time_fd = mch_fopen(argv[i + 1], "a"); + TIME_MSG("--- VIM STARTING ---"); + break; + } +*************** +*** 1726,1731 **** +--- 1726,1736 ---- + want_argument = TRUE; + argv_idx += 3; + } ++ else if (STRNICMP(argv[0] + argv_idx, "startuptime", 11) == 0) ++ { ++ want_argument = TRUE; ++ argv_idx += 11; ++ } + #ifdef FEAT_CLIENTSERVER + else if (STRNICMP(argv[0] + argv_idx, "serverlist", 10) == 0) + ; /* already processed -- no arg */ +*************** +*** 1761,1770 **** + /* already processed, skip */ + } + #endif +- else if (STRNICMP(argv[0] + argv_idx, "startuptime", 11) == 0) +- { +- /* already processed, skip */ +- } + else + { + if (argv[0][argv_idx]) +--- 1766,1771 ---- +*************** +*** 2061,2067 **** + mainerr(ME_GARBAGE, (char_u *)argv[0]); + + --argc; +! if (argc < 1 && c != 'S') + mainerr_arg_missing((char_u *)argv[0]); + ++argv; + argv_idx = -1; +--- 2062,2068 ---- + mainerr(ME_GARBAGE, (char_u *)argv[0]); + + --argc; +! if (argc < 1 && c != 'S') /* -S has an optional argument */ + mainerr_arg_missing((char_u *)argv[0]); + ++argv; + argv_idx = -1; +*************** +*** 2102,2112 **** + (char_u *)argv[0]; + break; + +! case '-': /* "--cmd {command}" execute command */ +! if (parmp->n_pre_commands >= MAX_ARG_CMDS) +! mainerr(ME_EXTRA_CMD, NULL); +! parmp->pre_commands[parmp->n_pre_commands++] = + (char_u *)argv[0]; + break; + + /* case 'd': -d {device} is handled in mch_check_win() for the +--- 2103,2118 ---- + (char_u *)argv[0]; + break; + +! case '-': +! if (argv[-1][2] == 'c') +! { +! /* "--cmd {command}" execute command */ +! if (parmp->n_pre_commands >= MAX_ARG_CMDS) +! mainerr(ME_EXTRA_CMD, NULL); +! parmp->pre_commands[parmp->n_pre_commands++] = + (char_u *)argv[0]; ++ } ++ /* "--startuptime " already handled */ + break; + + /* case 'd': -d {device} is handled in mch_check_win() for the +*************** +*** 3144,3149 **** +--- 3150,3158 ---- + main_msg(_("--serverlist\t\tList available Vim server names and exit")); + main_msg(_("--servername \tSend to/become the Vim server ")); + #endif ++ #ifdef STARTUPTIME ++ main_msg(_("--startuptime=\tWrite startup timing messages to ")); ++ #endif + #ifdef FEAT_VIMINFO + main_msg(_("-i \t\tUse instead of .viminfo")); + #endif +*** ../vim-7.2.285/src/version.c 2009-11-11 13:22:09.000000000 +0100 +--- src/version.c 2009-11-11 14:17:28.000000000 +0100 +*************** +*** 494,499 **** +--- 494,504 ---- + #else + "-sniff", + #endif ++ #ifdef STARTUPTIME ++ "+startuptime", ++ #else ++ "-startuptime", ++ #endif + #ifdef FEAT_STL_OPT + "+statusline", + #else +*** ../vim-7.2.285/src/version.c 2009-11-11 13:22:09.000000000 +0100 +--- src/version.c 2009-11-11 14:17:28.000000000 +0100 +*************** +*** 678,679 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 286, + /**/ + +-- +A fool must search for a greater fool to find admiration. + + /// 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/7.2.287 b/7.2.287 new file mode 100644 index 00000000..0f8e170c --- /dev/null +++ b/7.2.287 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.287 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.287 +Problem: Warning from gcc 3.4 about uninitialized variable. +Solution: Move assignment outside of #ifdef. +Files: src/if_perl.xs + + +*** ../vim-7.2.286/src/if_perl.xs 2009-07-14 16:05:14.000000000 +0200 +--- src/if_perl.xs 2009-11-11 12:29:32.000000000 +0100 +*************** +*** 720,727 **** + #ifdef HAVE_SANDBOX + if (sandbox) + { + # ifndef MAKE_TEST /* avoid a warning for unreachable code */ +! if ((safe = perl_get_sv( "VIM::safe", FALSE )) == NULL || !SvTRUE(safe)) + EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module")); + else + # endif +--- 720,728 ---- + #ifdef HAVE_SANDBOX + if (sandbox) + { ++ safe = perl_get_sv( "VIM::safe", FALSE ); + # ifndef MAKE_TEST /* avoid a warning for unreachable code */ +! if (safe == NULL || !SvTRUE(safe)) + EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module")); + else + # endif +*** ../vim-7.2.286/src/version.c 2009-11-11 14:21:48.000000000 +0100 +--- src/version.c 2009-11-11 14:44:49.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 287, + /**/ + +-- +The most powerful force in the universe is gossip. + + /// 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/7.2.288 b/7.2.288 new file mode 100644 index 00000000..ab9ecdaf --- /dev/null +++ b/7.2.288 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.288 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.288 +Problem: Python 2.6 pyconfig.h redefines macros. +Solution: Undefine the macros before including pyconfig.h. +Files: src/if_python.c + + +*** ../vim-7.2.287/src/if_python.c 2009-11-03 11:43:05.000000000 +0100 +--- src/if_python.c 2009-11-11 12:33:37.000000000 +0100 +*************** +*** 37,42 **** +--- 37,48 ---- + #ifdef HAVE_STDARG_H + # undef HAVE_STDARG_H /* Python's config.h defines it as well. */ + #endif ++ #ifdef _POSIX_C_SOURCE ++ # undef _POSIX_C_SOURCE /* pyconfig.h defines it as well. */ ++ #endif ++ #ifdef _XOPEN_SOURCE ++ # undef _XOPEN_SOURCE /* pyconfig.h defines it as well. */ ++ #endif + + #define PY_SSIZE_T_CLEAN + +*** ../vim-7.2.287/src/version.c 2009-11-11 14:45:36.000000000 +0100 +--- src/version.c 2009-11-11 15:05:51.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 288, + /**/ + +-- +I am always surprised in the Linux world how quickly solutions can be +obtained. (Imagine sending an email to Bill Gates, asking why Windows +crashed, and how to fix it... and then getting an answer that fixed the +problem... <0>_<0> !) -- Mark Langdon + + /// 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/7.2.289 b/7.2.289 new file mode 100644 index 00000000..4009bb9b --- /dev/null +++ b/7.2.289 @@ -0,0 +1,120 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.289 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.289 +Problem: Checking wrong struct member. +Solution: Change tb_buf to tb_noremap. (Dominique Pelle) +Files: src/getchar.c + + +*** ../vim-7.2.288/src/getchar.c 2009-09-30 15:15:33.000000000 +0200 +--- src/getchar.c 2009-11-11 12:50:58.000000000 +0100 +*************** +*** 22,28 **** + * These buffers are used for storing: + * - stuffed characters: A command that is translated into another command. + * - redo characters: will redo the last change. +! * - recorded chracters: for the "q" command. + * + * The bytes are stored like in the typeahead buffer: + * - K_SPECIAL introduces a special key (two more bytes follow). A literal +--- 22,28 ---- + * These buffers are used for storing: + * - stuffed characters: A command that is translated into another command. + * - redo characters: will redo the last change. +! * - recorded characters: for the "q" command. + * + * The bytes are stored like in the typeahead buffer: + * - K_SPECIAL introduces a special key (two more bytes follow). A literal +*************** +*** 1283,1289 **** + EMSG2(_(e_intern2), "Free typebuf 1"); + else + vim_free(typebuf.tb_buf); +! if (typebuf.tb_buf == noremapbuf_init) + EMSG2(_(e_intern2), "Free typebuf 2"); + else + vim_free(typebuf.tb_noremap); +--- 1283,1289 ---- + EMSG2(_(e_intern2), "Free typebuf 1"); + else + vim_free(typebuf.tb_buf); +! if (typebuf.tb_noremap == noremapbuf_init) + EMSG2(_(e_intern2), "Free typebuf 2"); + else + vim_free(typebuf.tb_noremap); +*************** +*** 1516,1522 **** + * wanted. + * This translates escaped K_SPECIAL and CSI bytes to a K_SPECIAL or CSI byte. + * Collects the bytes of a multibyte character into the whole character. +! * Returns the modifers in the global "mod_mask". + */ + int + vgetc() +--- 1516,1522 ---- + * wanted. + * This translates escaped K_SPECIAL and CSI bytes to a K_SPECIAL or CSI byte. + * Collects the bytes of a multibyte character into the whole character. +! * Returns the modifiers in the global "mod_mask". + */ + int + vgetc() +*************** +*** 3320,3326 **** + retval = 1; + goto theend; + } +! /* An abbrevation cannot contain white space. */ + for (n = 0; n < len; ++n) + if (vim_iswhite(keys[n])) + { +--- 3320,3326 ---- + retval = 1; + goto theend; + } +! /* An abbreviation cannot contain white space. */ + for (n = 0; n < len; ++n) + if (vim_iswhite(keys[n])) + { +*************** +*** 4272,4278 **** + + /* + * Check for word before the cursor: If it ends in a keyword char all +! * chars before it must be al keyword chars or non-keyword chars, but not + * white space. If it ends in a non-keyword char we accept any characters + * before it except white space. + */ +--- 4272,4278 ---- + + /* + * Check for word before the cursor: If it ends in a keyword char all +! * chars before it must be keyword chars or non-keyword chars, but not + * white space. If it ends in a non-keyword char we accept any characters + * before it except white space. + */ +*** ../vim-7.2.288/src/version.c 2009-11-11 15:06:59.000000000 +0100 +--- src/version.c 2009-11-11 16:19:12.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 289, + /**/ + +-- +A M00se once bit my sister ... + "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/7.2.290 b/7.2.290 new file mode 100644 index 00000000..ba4fd62d --- /dev/null +++ b/7.2.290 @@ -0,0 +1,157 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.290 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.290 +Problem: Not freeing memory from ":lmap", ":xmap" and ":menutranslate". +Solution: Free the memory when exiting. (Dominique Pelle) +Files: src/misc2.c + + +*** ../vim-7.2.289/src/misc2.c 2009-11-03 16:44:04.000000000 +0100 +--- src/misc2.c 2009-11-11 16:49:13.000000000 +0100 +*************** +*** 1005,1013 **** +--- 1005,1018 ---- + # ifdef FEAT_MENU + /* Clear menus. */ + do_cmdline_cmd((char_u *)"aunmenu *"); ++ # ifdef FEAT_MULTI_LANG ++ do_cmdline_cmd((char_u *)"menutranslate clear"); ++ # endif + # endif + + /* Clear mappings, abbreviations, breakpoints. */ ++ do_cmdline_cmd((char_u *)"lmapclear"); ++ do_cmdline_cmd((char_u *)"xmapclear"); + do_cmdline_cmd((char_u *)"mapclear"); + do_cmdline_cmd((char_u *)"mapclear!"); + do_cmdline_cmd((char_u *)"abclear"); +*************** +*** 1282,1288 **** + + /* + * Escape "string" for use as a shell argument with system(). +! * This uses single quotes, except when we know we need to use double qoutes + * (MS-DOS and MS-Windows without 'shellslash' set). + * Escape a newline, depending on the 'shell' option. + * When "do_special" is TRUE also replace "!", "%", "#" and things starting +--- 1287,1293 ---- + + /* + * Escape "string" for use as a shell argument with system(). +! * This uses single quotes, except when we know we need to use double quotes + * (MS-DOS and MS-Windows without 'shellslash' set). + * Escape a newline, depending on the 'shell' option. + * When "do_special" is TRUE also replace "!", "%", "#" and things starting +*************** +*** 1537,1543 **** + #if defined(FEAT_VISUALEXTRA) || defined(PROTO) + /* + * Copy a character a number of times. +! * Does not work for multi-byte charactes! + */ + void + copy_chars(ptr, count, c) +--- 1542,1548 ---- + #if defined(FEAT_VISUALEXTRA) || defined(PROTO) + /* + * Copy a character a number of times. +! * Does not work for multi-byte characters! + */ + void + copy_chars(ptr, count, c) +*************** +*** 4260,4266 **** + * or '**76' is transposed to '**N'( 'N' is ASCII value 76). + * For EBCDIC you get different character values. + * If no restrict is given after '**' the default is used. +! * Due to this technic the path looks awful if you print it as a + * string. + */ + len = 0; +--- 4265,4271 ---- + * or '**76' is transposed to '**N'( 'N' is ASCII value 76). + * For EBCDIC you get different character values. + * If no restrict is given after '**' the default is used. +! * Due to this technique the path looks awful if you print it as a + * string. + */ + len = 0; +*************** +*** 4649,4655 **** + && !mch_isdir(stackp->ffs_filearray[i])) + continue; /* not a directory */ + +! /* prepare the filename to be checked for existance + * below */ + STRCPY(file_path, stackp->ffs_filearray[i]); + add_pathsep(file_path); +--- 4654,4660 ---- + && !mch_isdir(stackp->ffs_filearray[i])) + continue; /* not a directory */ + +! /* prepare the filename to be checked for existence + * below */ + STRCPY(file_path, stackp->ffs_filearray[i]); + add_pathsep(file_path); +*************** +*** 5438,5444 **** + #if defined(MSWIN) || defined(MSDOS) || defined(OS2) + /* handle "\tmp" as absolute path */ + || vim_ispathsep(ff_file_to_find[0]) +! /* handle "c:name" as absulute path */ + || (ff_file_to_find[0] != NUL && ff_file_to_find[1] == ':') + #endif + #ifdef AMIGA +--- 5443,5449 ---- + #if defined(MSWIN) || defined(MSDOS) || defined(OS2) + /* handle "\tmp" as absolute path */ + || vim_ispathsep(ff_file_to_find[0]) +! /* handle "c:name" as absolute path */ + || (ff_file_to_find[0] != NUL && ff_file_to_find[1] == ':') + #endif + #ifdef AMIGA +*************** +*** 5681,5687 **** + p2 = (char_u *)base + (j + gap) * elm_size; + if ((*cmp)((void *)p1, (void *)p2) <= 0) + break; +! /* Exchange the elemets. */ + mch_memmove(buf, p1, elm_size); + mch_memmove(p1, p2, elm_size); + mch_memmove(p2, buf, elm_size); +--- 5686,5692 ---- + p2 = (char_u *)base + (j + gap) * elm_size; + if ((*cmp)((void *)p1, (void *)p2) <= 0) + break; +! /* Exchange the elements. */ + mch_memmove(buf, p1, elm_size); + mch_memmove(p1, p2, elm_size); + mch_memmove(p2, buf, elm_size); +*** ../vim-7.2.289/src/version.c 2009-11-11 16:23:37.000000000 +0100 +--- src/version.c 2009-11-11 16:54:53.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 290, + /**/ + +-- +ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of Camelot. + King of all Britons, defeator of the Saxons, sovereign of all England! + [Pause] +SOLDIER: Get away! + "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/7.2.291 b/7.2.291 new file mode 100644 index 00000000..bab6e3bf --- /dev/null +++ b/7.2.291 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.291 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.291 +Problem: Reading uninitialised memory in arabic mode. +Solution: Use utfc_ptr2char_len() rather than utfc_ptr2char(). (Dominique + Pelle) +Files: src/screen.c + + +*** ../vim-7.2.290/src/screen.c 2009-11-03 17:36:09.000000000 +0100 +--- src/screen.c 2009-11-11 17:04:53.000000000 +0100 +*************** +*** 6413,6419 **** + } + else + { +! nc = utfc_ptr2char(ptr + mbyte_blen, pcc); + nc1 = pcc[0]; + } + pc = prev_c; +--- 6413,6420 ---- + } + else + { +! nc = utfc_ptr2char_len(ptr + mbyte_blen, pcc, +! (int)((text + len) - ptr - mbyte_blen)); + nc1 = pcc[0]; + } + pc = prev_c; +*** ../vim-7.2.290/src/version.c 2009-11-11 16:56:13.000000000 +0100 +--- src/version.c 2009-11-11 17:06:48.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 291, + /**/ + +-- +The problem with political jokes is that they get elected. + + /// 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/7.2.292 b/7.2.292 new file mode 100644 index 00000000..c5761904 --- /dev/null +++ b/7.2.292 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.292 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.292 +Problem: Block right-shift doesn't work properly with multi-byte encoding + and 'list' set. +Solution: Add the missing "else". (Lech Lorens) +Files: src/ops.c + + +*** ../vim-7.2.291/src/ops.c 2009-11-03 16:44:04.000000000 +0100 +--- src/ops.c 2009-11-11 17:15:04.000000000 +0100 +*************** +*** 422,429 **** + #ifdef FEAT_MBYTE + if (has_mbyte) + bd.textstart += (*mb_ptr2len)(bd.textstart); + #endif +! ++bd.textstart; + } + for ( ; vim_iswhite(*bd.textstart); ) + { +--- 422,430 ---- + #ifdef FEAT_MBYTE + if (has_mbyte) + bd.textstart += (*mb_ptr2len)(bd.textstart); ++ else + #endif +! ++bd.textstart; + } + for ( ; vim_iswhite(*bd.textstart); ) + { +*** ../vim-7.2.291/src/version.c 2009-11-11 17:07:25.000000000 +0100 +--- src/version.c 2009-11-11 17:21:31.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 292, + /**/ + +-- +Computers make very fast, very accurate, mistakes. + + /// 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/7.2.293 b/7.2.293 new file mode 100644 index 00000000..0f41435a --- /dev/null +++ b/7.2.293 @@ -0,0 +1,66 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.293 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.293 +Problem: When setting 'comments' option it may be used in a wrong way. +Solution: Don't increment after skipping over digets. (Yukihiro Nakadaira) +Files: src/misc1.c + + +*** ../vim-7.2.292/src/misc1.c 2009-11-03 18:46:53.000000000 +0100 +--- src/misc1.c 2009-11-11 17:27:38.000000000 +0100 +*************** +*** 1026,1037 **** + int c = 0; + int off = 0; + +! for (p = lead_flags; *p && *p != ':'; ++p) + { + if (*p == COM_RIGHT || *p == COM_LEFT) +! c = *p; + else if (VIM_ISDIGIT(*p) || *p == '-') + off = getdigits(&p); + } + if (c == COM_RIGHT) /* right adjusted leader */ + { +--- 1026,1039 ---- + int c = 0; + int off = 0; + +! for (p = lead_flags; *p != NUL && *p != ':'; ) + { + if (*p == COM_RIGHT || *p == COM_LEFT) +! c = *p++; + else if (VIM_ISDIGIT(*p) || *p == '-') + off = getdigits(&p); ++ else ++ ++p; + } + if (c == COM_RIGHT) /* right adjusted leader */ + { +*** ../vim-7.2.292/src/version.c 2009-11-11 17:22:30.000000000 +0100 +--- src/version.c 2009-11-11 17:29:24.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 293, + /**/ + +-- +SOLDIER: What? Ridden on a horse? +ARTHUR: Yes! +SOLDIER: You're using coconuts! + "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/7.2.294 b/7.2.294 new file mode 100644 index 00000000..fef1e6bf --- /dev/null +++ b/7.2.294 @@ -0,0 +1,285 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.294 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.294 +Problem: When using TEMPDIRS dir name could get too long. +Solution: Overwrite tail instead of appending each time. Use mkdtemp() when + available. (James Vega) +Files: src/auto/configure, src/config.h.in, src/configure.in, src/fileio.c + + +*** ../vim-7.2.293/src/auto/configure 2009-09-11 13:44:33.000000000 +0200 +--- src/auto/configure 2009-11-17 12:03:15.000000000 +0100 +*************** +*** 14019,14027 **** + + + + for ac_func in bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ + getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \ +! memset nanosleep opendir putenv qsort readlink select setenv \ + setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ + sigvec strcasecmp strerror strftime stricmp strncasecmp \ + strnicmp strpbrk strtol tgetent towlower towupper iswupper \ +--- 14019,14028 ---- + + + ++ + for ac_func in bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ + getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \ +! memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \ + setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ + sigvec strcasecmp strerror strftime stricmp strncasecmp \ + strnicmp strpbrk strtol tgetent towlower towupper iswupper \ +*** ../vim-7.2.293/src/config.h.in 2009-05-21 23:25:38.000000000 +0200 +--- src/config.h.in 2009-11-11 17:40:21.000000000 +0100 +*************** +*** 157,162 **** +--- 157,163 ---- + #undef HAVE_LSTAT + #undef HAVE_MEMCMP + #undef HAVE_MEMSET ++ #undef HAVE_MKDTEMP + #undef HAVE_NANOSLEEP + #undef HAVE_OPENDIR + #undef HAVE_FLOAT_FUNCS +*** ../vim-7.2.293/src/configure.in 2009-09-11 13:44:33.000000000 +0200 +--- src/configure.in 2009-11-11 17:40:21.000000000 +0100 +*************** +*** 2635,2641 **** + dnl Check for functions in one big call, to reduce the size of configure + AC_CHECK_FUNCS(bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ + getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \ +! memset nanosleep opendir putenv qsort readlink select setenv \ + setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ + sigvec strcasecmp strerror strftime stricmp strncasecmp \ + strnicmp strpbrk strtol tgetent towlower towupper iswupper \ +--- 2635,2641 ---- + dnl Check for functions in one big call, to reduce the size of configure + AC_CHECK_FUNCS(bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \ + getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \ +! memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \ + setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \ + sigvec strcasecmp strerror strftime stricmp strncasecmp \ + strnicmp strpbrk strtol tgetent towlower towupper iswupper \ +*** ../vim-7.2.293/src/fileio.c 2009-09-11 17:24:01.000000000 +0200 +--- src/fileio.c 2009-11-11 18:01:22.000000000 +0100 +*************** +*** 146,151 **** +--- 146,152 ---- + # endif + #endif + static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf)); ++ static void vim_settempdir __ARGS((char_u *tempdir)); + #ifdef FEAT_AUTOCMD + static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name"); + #endif +*************** +*** 6987,6992 **** +--- 6988,7020 ---- + #endif + + /* ++ * Directory "tempdir" was created. Expand this name to a full path and put ++ * it in "vim_tempdir". This avoids that using ":cd" would confuse us. ++ * "tempdir" must be no longer than MAXPATHL. ++ */ ++ static void ++ vim_settempdir(tempdir) ++ char_u *tempdir; ++ { ++ char_u *buf; ++ ++ buf = alloc((unsigned)MAXPATHL + 2); ++ if (buf != NULL) ++ { ++ if (vim_FullName(tempdir, buf, MAXPATHL, FALSE) == FAIL) ++ STRCPY(buf, tempdir); ++ # ifdef __EMX__ ++ if (vim_strchr(buf, '/') != NULL) ++ STRCAT(buf, "/"); ++ else ++ # endif ++ add_pathsep(buf); ++ vim_tempdir = vim_strsave(buf); ++ vim_free(buf); ++ } ++ } ++ ++ /* + * vim_tempname(): Return a unique name that can be used for a temp file. + * + * The temp file is NOT created. +*************** +*** 7007,7014 **** + #ifdef TEMPDIRNAMES + static char *(tempdirs[]) = {TEMPDIRNAMES}; + int i; +- long nr; +- long off; + # ifndef EEXIST + struct stat st; + # endif +--- 7035,7040 ---- +*************** +*** 7027,7032 **** +--- 7053,7064 ---- + */ + for (i = 0; i < (int)(sizeof(tempdirs) / sizeof(char *)); ++i) + { ++ size_t itmplen; ++ # ifndef HAVE_MKDTEMP ++ long nr; ++ long off; ++ # endif ++ + /* expand $TMP, leave room for "/v1100000/999999999" */ + expand_env((char_u *)tempdirs[i], itmp, TEMPNAMELEN - 20); + if (mch_isdir(itmp)) /* directory exists */ +*************** +*** 7040,7046 **** +--- 7072,7085 ---- + else + # endif + add_pathsep(itmp); ++ itmplen = STRLEN(itmp); + ++ # ifdef HAVE_MKDTEMP ++ /* Leave room for filename */ ++ STRCAT(itmp, "vXXXXXX"); ++ if (mkdtemp((char *)itmp) != NULL) ++ vim_settempdir(itmp); ++ # else + /* Get an arbitrary number of up to 6 digits. When it's + * unlikely that it already exists it will be faster, + * otherwise it doesn't matter. The use of mkdir() avoids any +*************** +*** 7052,7110 **** + for (off = 0; off < 10000L; ++off) + { + int r; +! #if defined(UNIX) || defined(VMS) + mode_t umask_save; +! #endif + +! sprintf((char *)itmp + STRLEN(itmp), "v%ld", nr + off); +! # ifndef EEXIST + /* If mkdir() does not set errno to EEXIST, check for + * existing file here. There is a race condition then, + * although it's fail-safe. */ + if (mch_stat((char *)itmp, &st) >= 0) + continue; +! # endif +! #if defined(UNIX) || defined(VMS) + /* Make sure the umask doesn't remove the executable bit. + * "repl" has been reported to use "177". */ + umask_save = umask(077); +! #endif + r = vim_mkdir(itmp, 0700); +! #if defined(UNIX) || defined(VMS) + (void)umask(umask_save); +! #endif + if (r == 0) + { +! char_u *buf; +! +! /* Directory was created, use this name. +! * Expand to full path; When using the current +! * directory a ":cd" would confuse us. */ +! buf = alloc((unsigned)MAXPATHL + 1); +! if (buf != NULL) +! { +! if (vim_FullName(itmp, buf, MAXPATHL, FALSE) +! == FAIL) +! STRCPY(buf, itmp); +! # ifdef __EMX__ +! if (vim_strchr(buf, '/') != NULL) +! STRCAT(buf, "/"); +! else +! # endif +! add_pathsep(buf); +! vim_tempdir = vim_strsave(buf); +! vim_free(buf); +! } + break; + } +! # ifdef EEXIST + /* If the mkdir() didn't fail because the file/dir exists, + * we probably can't create any dir here, try another + * place. */ + if (errno != EEXIST) +! # endif + break; + } + if (vim_tempdir != NULL) + break; + } +--- 7091,7131 ---- + for (off = 0; off < 10000L; ++off) + { + int r; +! # if defined(UNIX) || defined(VMS) + mode_t umask_save; +! # endif + +! sprintf((char *)itmp + itmplen, "v%ld", nr + off); +! # ifndef EEXIST + /* If mkdir() does not set errno to EEXIST, check for + * existing file here. There is a race condition then, + * although it's fail-safe. */ + if (mch_stat((char *)itmp, &st) >= 0) + continue; +! # endif +! # if defined(UNIX) || defined(VMS) + /* Make sure the umask doesn't remove the executable bit. + * "repl" has been reported to use "177". */ + umask_save = umask(077); +! # endif + r = vim_mkdir(itmp, 0700); +! # if defined(UNIX) || defined(VMS) + (void)umask(umask_save); +! # endif + if (r == 0) + { +! vim_settempdir(itmp); + break; + } +! # ifdef EEXIST + /* If the mkdir() didn't fail because the file/dir exists, + * we probably can't create any dir here, try another + * place. */ + if (errno != EEXIST) +! # endif + break; + } ++ # endif /* HAVE_MKDTEMP */ + if (vim_tempdir != NULL) + break; + } +*** ../vim-7.2.293/src/version.c 2009-11-11 17:30:05.000000000 +0100 +--- src/version.c 2009-11-17 11:54:49.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 294, + /**/ + +-- +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/7.2.295 b/7.2.295 new file mode 100644 index 00000000..331498ff --- /dev/null +++ b/7.2.295 @@ -0,0 +1,142 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.295 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.295 +Problem: When using map() on a List the index is not known. +Solution: Set v:key to the index. (Hari Krishna Dara) +Files: runtime/doc/eval.txt, src/eval.c + + +*** ../vim-7.2.294/runtime/doc/eval.txt 2009-11-11 14:21:48.000000000 +0100 +--- runtime/doc/eval.txt 2009-11-11 18:22:54.000000000 +0100 +*************** +*** 3802,3808 **** + Replace each item in {expr} with the result of evaluating + {string}. + Inside {string} |v:val| has the value of the current item. +! For a |Dictionary| |v:key| has the key of the current item. + Example: > + :call map(mylist, '"> " . v:val . " <"') + < This puts "> " before and " <" after each item in "mylist". +--- 3812,3819 ---- + Replace each item in {expr} with the result of evaluating + {string}. + Inside {string} |v:val| has the value of the current item. +! For a |Dictionary| |v:key| has the key of the current item +! and for a |List| |v:key| has the index of the current item. + Example: > + :call map(mylist, '"> " . v:val . " <"') + < This puts "> " before and " <" after each item in "mylist". +*** ../vim-7.2.294/src/eval.c 2009-11-11 14:21:48.000000000 +0100 +--- src/eval.c 2009-11-11 18:22:49.000000000 +0100 +*************** +*** 9928,9933 **** +--- 9928,9934 ---- + int todo; + char_u *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()"; + int save_did_emsg; ++ int index = 0; + + if (argvars[0].v_type == VAR_LIST) + { +*************** +*** 9961,9969 **** + save_did_emsg = did_emsg; + did_emsg = FALSE; + + if (argvars[0].v_type == VAR_DICT) + { +- prepare_vimvar(VV_KEY, &save_key); + vimvars[VV_KEY].vv_type = VAR_STRING; + + ht = &d->dv_hashtab; +--- 9962,9970 ---- + save_did_emsg = did_emsg; + did_emsg = FALSE; + ++ prepare_vimvar(VV_KEY, &save_key); + if (argvars[0].v_type == VAR_DICT) + { + vimvars[VV_KEY].vv_type = VAR_STRING; + + ht = &d->dv_hashtab; +*************** +*** 9987,10010 **** + } + } + hash_unlock(ht); +- +- restore_vimvar(VV_KEY, &save_key); + } + else + { + for (li = l->lv_first; li != NULL; li = nli) + { + if (tv_check_lock(li->li_tv.v_lock, ermsg)) + break; + nli = li->li_next; + if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL + || did_emsg) + break; + if (!map && rem) + listitem_remove(l, li); + } + } + + restore_vimvar(VV_VAL, &save_val); + + did_emsg |= save_did_emsg; +--- 9988,10014 ---- + } + } + hash_unlock(ht); + } + else + { ++ vimvars[VV_KEY].vv_type = VAR_NUMBER; ++ + for (li = l->lv_first; li != NULL; li = nli) + { + if (tv_check_lock(li->li_tv.v_lock, ermsg)) + break; + nli = li->li_next; ++ vimvars[VV_KEY].vv_nr = index; + if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL + || did_emsg) + break; + if (!map && rem) + listitem_remove(l, li); ++ ++index; + } + } + ++ restore_vimvar(VV_KEY, &save_key); + restore_vimvar(VV_VAL, &save_val); + + did_emsg |= save_did_emsg; +*** ../vim-7.2.294/src/version.c 2009-11-17 12:08:48.000000000 +0100 +--- src/version.c 2009-11-17 12:18:08.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 295, + /**/ + +-- +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/7.2.296 b/7.2.296 new file mode 100644 index 00000000..5fc3cb3c --- /dev/null +++ b/7.2.296 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.296 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.296 +Problem: Help message about startuptime is wrong. (Dominique Pelle) +Solution: Remove the equal sign. +Files: src/main.c + + +*** ../vim-7.2.295/src/main.c 2009-11-11 14:21:48.000000000 +0100 +--- src/main.c 2009-11-11 22:51:04.000000000 +0100 +*************** +*** 3151,3157 **** + main_msg(_("--servername \tSend to/become the Vim server ")); + #endif + #ifdef STARTUPTIME +! main_msg(_("--startuptime=\tWrite startup timing messages to ")); + #endif + #ifdef FEAT_VIMINFO + main_msg(_("-i \t\tUse instead of .viminfo")); +--- 3151,3157 ---- + main_msg(_("--servername \tSend to/become the Vim server ")); + #endif + #ifdef STARTUPTIME +! main_msg(_("--startuptime \tWrite startup timing messages to ")); + #endif + #ifdef FEAT_VIMINFO + main_msg(_("-i \t\tUse instead of .viminfo")); +*** ../vim-7.2.295/src/version.c 2009-11-17 12:20:30.000000000 +0100 +--- src/version.c 2009-11-17 12:30:29.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 296, + /**/ + +-- +BLACK KNIGHT: I'm invincible! +ARTHUR: You're a looney. + "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/7.2.297 b/7.2.297 new file mode 100644 index 00000000..cc8d7899 --- /dev/null +++ b/7.2.297 @@ -0,0 +1,70 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.297 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.297 +Problem: Reading freed memory when writing ":reg" output to a register. + (Dominique Pelle) +Solution: Skip the register being written to. +Files: src/ops.c + + +*** ../vim-7.2.296/src/ops.c 2009-11-11 17:22:30.000000000 +0100 +--- src/ops.c 2009-11-11 19:30:47.000000000 +0100 +*************** +*** 3991,3996 **** +--- 3991,4004 ---- + } + else + yb = &(y_regs[i]); ++ ++ #ifdef FEAT_EVAL ++ if (name == MB_TOLOWER(redir_reg) ++ || (redir_reg == '"' && yb == y_previous)) ++ continue; /* do not list register being written to, the ++ * pointer can be freed */ ++ #endif ++ + if (yb->y_array != NULL) + { + msg_putchar('\n'); +*************** +*** 6090,6096 **** + long maxlen; + #endif + +! if (y_ptr->y_array == NULL) /* NULL means emtpy register */ + y_ptr->y_size = 0; + + /* +--- 6098,6104 ---- + long maxlen; + #endif + +! if (y_ptr->y_array == NULL) /* NULL means empty register */ + y_ptr->y_size = 0; + + /* +*** ../vim-7.2.296/src/version.c 2009-11-17 12:31:30.000000000 +0100 +--- src/version.c 2009-11-17 12:42:28.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 297, + /**/ + +-- +"Beware of bugs in the above code; I have only proved +it correct, not tried it." -- Donald Knuth + + /// 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/7.2.298 b/7.2.298 new file mode 100644 index 00000000..0aabd7ac --- /dev/null +++ b/7.2.298 @@ -0,0 +1,48 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.298 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.298 +Problem: ":vimgrep" crashes when there is an autocommand that sets a + window-local variable. +Solution: Initialize the w: hashtab for re-use. (Yukihiro Nakadaira) +Files: src/fileio.c + + +*** ../vim-7.2.297/src/fileio.c 2009-11-17 12:08:48.000000000 +0100 +--- src/fileio.c 2009-11-17 13:22:06.000000000 +0100 +*************** +*** 8597,8602 **** +--- 8605,8611 ---- + curwin = firstwin; + # ifdef FEAT_EVAL + vars_clear(&aucmd_win->w_vars.dv_hashtab); /* free all w: variables */ ++ hash_init(&aucmd_win->w_vars.dv_hashtab); /* re-use the hashtab */ + # endif + #else + curwin = aco->save_curwin; +*** ../vim-7.2.297/src/version.c 2009-11-17 12:43:19.000000000 +0100 +--- src/version.c 2009-11-17 14:56:19.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 298, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.299 b/7.2.299 new file mode 100644 index 00000000..88f9e705 --- /dev/null +++ b/7.2.299 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.299 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.299 +Problem: Crash when comment middle is longer than start. +Solution: Fix size computation. (Lech Lorens) +Files: src/misc1.c + + +*** ../vim-7.2.298/src/misc1.c 2009-11-11 17:30:05.000000000 +0100 +--- src/misc1.c 2009-11-17 15:59:28.000000000 +0100 +*************** +*** 1121,1127 **** + if (i != lead_repl_len) + { + mch_memmove(p + lead_repl_len, p + i, +! (size_t)(lead_len - i - (leader - p))); + lead_len += lead_repl_len - i; + } + } +--- 1121,1127 ---- + if (i != lead_repl_len) + { + mch_memmove(p + lead_repl_len, p + i, +! (size_t)(lead_len - i - (p - leader))); + lead_len += lead_repl_len - i; + } + } +*** ../vim-7.2.298/src/version.c 2009-11-17 14:57:19.000000000 +0100 +--- src/version.c 2009-11-17 16:01:07.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 299, + /**/ + +-- +BLACK KNIGHT: The Black Knight always triumphs. Have at you! + ARTHUR takes his last leg off. The BLACK KNIGHT's body lands upright. +BLACK KNIGHT: All right, we'll call it a draw. + "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/7.2.300 b/7.2.300 new file mode 100644 index 00000000..f88035e6 --- /dev/null +++ b/7.2.300 @@ -0,0 +1,201 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.300 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.300 +Problem: Vim doesn't close file descriptors when forking and executing + another command, e.g., ":shell". +Solution: Use FD_CLOEXEC when available. (James Vega) +Files: src/auto/configure, src/config.h.in, src/configure.in, + src/ex_cmdds2.c, src/fileio.c, src/memfile.c, src/memline.c + + +*** ../vim-7.2.299/src/auto/configure 2009-11-17 12:08:48.000000000 +0100 +--- src/auto/configure 2009-11-17 13:09:03.000000000 +0100 +*************** +*** 15174,15179 **** +--- 15174,15231 ---- + $as_echo "yes" >&6; } + fi + ++ { $as_echo "$as_me:$LINENO: checking for FD_CLOEXEC" >&5 ++ $as_echo_n "checking for FD_CLOEXEC... " >&6; } ++ cat >conftest.$ac_ext <<_ACEOF ++ /* confdefs.h. */ ++ _ACEOF ++ cat confdefs.h >>conftest.$ac_ext ++ cat >>conftest.$ac_ext <<_ACEOF ++ /* end confdefs.h. */ ++ #if HAVE_FCNTL_H ++ # include ++ #endif ++ int ++ main () ++ { ++ int flag = FD_CLOEXEC; ++ ; ++ return 0; ++ } ++ _ACEOF ++ rm -f conftest.$ac_objext ++ if { (ac_try="$ac_compile" ++ case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++ esac ++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++ $as_echo "$ac_try_echo") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ { $as_echo "$as_me:$LINENO: result: yes" >&5 ++ $as_echo "yes" >&6; }; cat >>confdefs.h <<\_ACEOF ++ #define HAVE_FD_CLOEXEC 1 ++ _ACEOF ++ ++ else ++ $as_echo "$as_me: failed program was:" >&5 ++ sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ { $as_echo "$as_me:$LINENO: result: not usable" >&5 ++ $as_echo "not usable" >&6; } ++ fi ++ ++ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ + { $as_echo "$as_me:$LINENO: checking for rename" >&5 + $as_echo_n "checking for rename... " >&6; } + cat >conftest.$ac_ext <<_ACEOF +*** ../vim-7.2.299/src/config.h.in 2009-11-17 12:08:48.000000000 +0100 +--- src/config.h.in 2009-11-17 13:01:36.000000000 +0100 +*************** +*** 388,390 **** +--- 388,393 ---- + + /* Define if you want XSMP interaction as well as vanilla swapfile safety */ + #undef USE_XSMP_INTERACT ++ ++ /* Define if fcntl()'s F_SETFD command knows about FD_CLOEXEC */ ++ #undef HAVE_FD_CLOEXEC +*** ../vim-7.2.299/src/configure.in 2009-11-17 12:08:48.000000000 +0100 +--- src/configure.in 2009-11-17 13:01:36.000000000 +0100 +*************** +*** 2855,2860 **** +--- 2855,2870 ---- + AC_MSG_RESULT(yes) + fi + ++ dnl make sure the FD_CLOEXEC flag for fcntl()'s F_SETFD command is known ++ AC_MSG_CHECKING(for FD_CLOEXEC) ++ AC_TRY_COMPILE( ++ [#if HAVE_FCNTL_H ++ # include ++ #endif], ++ [ int flag = FD_CLOEXEC;], ++ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FD_CLOEXEC), ++ AC_MSG_RESULT(not usable)) ++ + dnl rename needs to be checked separately to work on Nextstep with cc + AC_MSG_CHECKING(for rename) + AC_TRY_LINK([#include ], [rename("this", "that")], +*** ../vim-7.2.299/src/fileio.c 2009-11-17 14:57:19.000000000 +0100 +--- src/fileio.c 2009-11-17 13:22:06.000000000 +0100 +*************** +*** 2254,2259 **** +--- 2254,2267 ---- + + if (!read_buffer && !read_stdin) + close(fd); /* errors are ignored */ ++ #ifdef HAVE_FD_CLOEXEC ++ else ++ { ++ int fdflags = fcntl(fd, F_GETFD); ++ if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) ++ fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC); ++ } ++ #endif + vim_free(buffer); + + #ifdef HAVE_DUP +*** ../vim-7.2.299/src/memfile.c 2008-07-13 19:39:39.000000000 +0200 +--- src/memfile.c 2009-11-17 13:22:15.000000000 +0100 +*************** +*** 1343,1348 **** +--- 1343,1353 ---- + } + else + { ++ #ifdef HAVE_FD_CLOEXEC ++ int fdflags = fcntl(mfp->mf_fd, F_GETFD); ++ if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) ++ fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC); ++ #endif + #ifdef HAVE_SELINUX + mch_copy_sec(fname, mfp->mf_fname); + #endif +*** ../vim-7.2.299/src/memline.c 2009-11-03 15:32:58.000000000 +0100 +--- src/memline.c 2009-11-17 13:21:40.000000000 +0100 +*************** +*** 382,388 **** + dp->db_index[0] = --dp->db_txt_start; /* at end of block */ + dp->db_free -= 1 + INDEX_SIZE; + dp->db_line_count = 1; +! *((char_u *)dp + dp->db_txt_start) = NUL; /* emtpy line */ + + return OK; + +--- 382,388 ---- + dp->db_index[0] = --dp->db_txt_start; /* at end of block */ + dp->db_free -= 1 + INDEX_SIZE; + dp->db_line_count = 1; +! *((char_u *)dp + dp->db_txt_start) = NUL; /* empty line */ + + return OK; + +*************** +*** 490,495 **** +--- 490,502 ---- + EMSG(_("E301: Oops, lost the swap file!!!")); + return; + } ++ #ifdef HAVE_FD_CLOEXEC ++ { ++ int fdflags = fcntl(mfp->mf_fd, F_GETFD); ++ if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) ++ fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC); ++ } ++ #endif + } + if (!success) + EMSG(_("E302: Could not rename swap file")); +*** ../vim-7.2.299/src/version.c 2009-11-17 16:08:12.000000000 +0100 +--- src/version.c 2009-11-17 17:09:43.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 300, + /**/ + +-- + | + +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.301 b/7.2.301 new file mode 100644 index 00000000..e63cc088 --- /dev/null +++ b/7.2.301 @@ -0,0 +1,777 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.301 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +NOTE: some mail and patch programs may have a problem with the non-ASCII +characters in this patch. You can fetch the patch from +ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.301 and/or fetch the updated +files from CVS. http://www.vim.org/cvs.php + + +Patch 7.2.301 +Problem: Formatting is wrong when 'tw' is set to a small value. +Solution: Fix it and add tests. Also fix behavior of "1" in 'fo'. (Yukihiro + Nakadaira) +Files: src/edit.c, src/testdir/Makefile, src/testdir/test68.in, + src/testdir/test68.ok, src/testdir/test69.in, + src/testdir/test69.ok + + +*** ../vim-7.2.300/src/edit.c 2009-11-11 13:22:32.000000000 +0100 +--- src/edit.c 2009-11-17 15:34:47.000000000 +0100 +*************** +*** 181,187 **** + static void ins_ctrl_v __ARGS((void)); + static void undisplay_dollar __ARGS((void)); + static void insert_special __ARGS((int, int, int)); +! static void internal_format __ARGS((int textwidth, int second_indent, int flags, int format_only)); + static void check_auto_format __ARGS((int)); + static void redo_literal __ARGS((int c)); + static void start_arrow __ARGS((pos_T *end_insert_pos)); +--- 181,187 ---- + static void ins_ctrl_v __ARGS((void)); + static void undisplay_dollar __ARGS((void)); + static void insert_special __ARGS((int, int, int)); +! static void internal_format __ARGS((int textwidth, int second_indent, int flags, int format_only, int c)); + static void check_auto_format __ARGS((int)); + static void redo_literal __ARGS((int c)); + static void start_arrow __ARGS((pos_T *end_insert_pos)); +*************** +*** 2164,2170 **** + int i, c; + int actual_len; /* Take multi-byte characters */ + int actual_compl_length; /* into account. */ +! int *wca; /* Wide character array. */ + int has_lower = FALSE; + int was_letter = FALSE; + +--- 2164,2170 ---- + int i, c; + int actual_len; /* Take multi-byte characters */ + int actual_compl_length; /* into account. */ +! int *wca; /* Wide character array. */ + int has_lower = FALSE; + int was_letter = FALSE; + +*************** +*** 5558,5564 **** + } + if (do_internal) + #endif +! internal_format(textwidth, second_indent, flags, c == NUL); + } + + if (c == NUL) /* only formatting was wanted */ +--- 5558,5564 ---- + } + if (do_internal) + #endif +! internal_format(textwidth, second_indent, flags, c == NUL, c); + } + + if (c == NUL) /* only formatting was wanted */ +*************** +*** 5738,5748 **** + * Format text at the current insert position. + */ + static void +! internal_format(textwidth, second_indent, flags, format_only) + int textwidth; + int second_indent; + int flags; + int format_only; + { + int cc; + int save_char = NUL; +--- 5738,5749 ---- + * Format text at the current insert position. + */ + static void +! internal_format(textwidth, second_indent, flags, format_only, c) + int textwidth; + int second_indent; + int flags; + int format_only; ++ int c; /* character to be inserted (can be NUL) */ + { + int cc; + int save_char = NUL; +*************** +*** 5763,5769 **** + * When 'ai' is off we don't want a space under the cursor to be + * deleted. Replace it with an 'x' temporarily. + */ +! if (!curbuf->b_p_ai) + { + cc = gchar_cursor(); + if (vim_iswhite(cc)) +--- 5764,5774 ---- + * When 'ai' is off we don't want a space under the cursor to be + * deleted. Replace it with an 'x' temporarily. + */ +! if (!curbuf->b_p_ai +! #ifdef FEAT_VREPLACE +! && !(State & VREPLACE_FLAG) +! #endif +! ) + { + cc = gchar_cursor(); + if (vim_iswhite(cc)) +*************** +*** 5789,5797 **** + char_u *saved_text = NULL; + #endif + colnr_T col; + +! virtcol = get_nolist_virtcol(); +! if (virtcol < (colnr_T)textwidth) + break; + + #ifdef FEAT_COMMENTS +--- 5794,5804 ---- + char_u *saved_text = NULL; + #endif + colnr_T col; ++ colnr_T end_col; + +! virtcol = get_nolist_virtcol() +! + char2cells(c != NUL ? c : gchar_cursor()); +! if (virtcol <= (colnr_T)textwidth) + break; + + #ifdef FEAT_COMMENTS +*************** +*** 5831,5842 **** + coladvance((colnr_T)textwidth); + wantcol = curwin->w_cursor.col; + +! curwin->w_cursor.col = startcol - 1; +! #ifdef FEAT_MBYTE +! /* Correct cursor for multi-byte character. */ +! if (has_mbyte) +! mb_adjust_cursor(); +! #endif + foundcol = 0; + + /* +--- 5838,5844 ---- + coladvance((colnr_T)textwidth); + wantcol = curwin->w_cursor.col; + +! curwin->w_cursor.col = startcol; + foundcol = 0; + + /* +*************** +*** 5847,5857 **** + || curwin->w_cursor.lnum != Insstart.lnum + || curwin->w_cursor.col >= Insstart.col) + { +! cc = gchar_cursor(); + if (WHITECHAR(cc)) + { + /* remember position of blank just before text */ +! end_foundcol = curwin->w_cursor.col; + + /* find start of sequence of blanks */ + while (curwin->w_cursor.col > 0 && WHITECHAR(cc)) +--- 5849,5862 ---- + || curwin->w_cursor.lnum != Insstart.lnum + || curwin->w_cursor.col >= Insstart.col) + { +! if (curwin->w_cursor.col == startcol && c != NUL) +! cc = c; +! else +! cc = gchar_cursor(); + if (WHITECHAR(cc)) + { + /* remember position of blank just before text */ +! end_col = curwin->w_cursor.col; + + /* find start of sequence of blanks */ + while (curwin->w_cursor.col > 0 && WHITECHAR(cc)) +*************** +*** 5871,5877 **** + /* do not break after one-letter words */ + if (curwin->w_cursor.col == 0) + break; /* one-letter word at begin */ +! + col = curwin->w_cursor.col; + dec_cursor(); + cc = gchar_cursor(); +--- 5876,5886 ---- + /* do not break after one-letter words */ + if (curwin->w_cursor.col == 0) + break; /* one-letter word at begin */ +! #ifdef FEAT_COMMENTS +! /* do not break "#a b" when 'tw' is 2 */ +! if (curwin->w_cursor.col <= leader_len) +! break; +! #endif + col = curwin->w_cursor.col; + dec_cursor(); + cc = gchar_cursor(); +*************** +*** 5880,5905 **** + continue; /* one-letter, continue */ + curwin->w_cursor.col = col; + } +! #ifdef FEAT_MBYTE +! if (has_mbyte) +! foundcol = curwin->w_cursor.col +! + (*mb_ptr2len)(ml_get_cursor()); +! else +! #endif +! foundcol = curwin->w_cursor.col + 1; +! if (curwin->w_cursor.col < (colnr_T)wantcol) + break; + } + #ifdef FEAT_MBYTE +! else if (cc >= 0x100 && fo_multibyte +! && curwin->w_cursor.col <= (colnr_T)wantcol) + { + /* Break after or before a multi-byte character. */ + foundcol = curwin->w_cursor.col; +- if (curwin->w_cursor.col < (colnr_T)wantcol) +- foundcol += (*mb_char2len)(cc); + end_foundcol = foundcol; +! break; + } + #endif + if (curwin->w_cursor.col == 0) +--- 5889,5948 ---- + continue; /* one-letter, continue */ + curwin->w_cursor.col = col; + } +! +! inc_cursor(); +! +! end_foundcol = end_col + 1; +! foundcol = curwin->w_cursor.col; +! if (curwin->w_cursor.col <= (colnr_T)wantcol) + break; + } + #ifdef FEAT_MBYTE +! else if (cc >= 0x100 && fo_multibyte) + { + /* Break after or before a multi-byte character. */ ++ if (curwin->w_cursor.col != startcol) ++ { ++ #ifdef FEAT_COMMENTS ++ /* Don't break until after the comment leader */ ++ if (curwin->w_cursor.col < leader_len) ++ break; ++ #endif ++ col = curwin->w_cursor.col; ++ inc_cursor(); ++ /* Don't change end_foundcol if already set. */ ++ if (foundcol != curwin->w_cursor.col) ++ { ++ foundcol = curwin->w_cursor.col; ++ end_foundcol = foundcol; ++ if (curwin->w_cursor.col <= (colnr_T)wantcol) ++ break; ++ } ++ curwin->w_cursor.col = col; ++ } ++ ++ if (curwin->w_cursor.col == 0) ++ break; ++ ++ col = curwin->w_cursor.col; ++ ++ dec_cursor(); ++ cc = gchar_cursor(); ++ ++ if (WHITECHAR(cc)) ++ continue; /* break with space */ ++ #ifdef FEAT_COMMENTS ++ /* Don't break until after the comment leader */ ++ if (curwin->w_cursor.col < leader_len) ++ break; ++ #endif ++ ++ curwin->w_cursor.col = col; ++ + foundcol = curwin->w_cursor.col; + end_foundcol = foundcol; +! if (curwin->w_cursor.col <= (colnr_T)wantcol) +! break; + } + #endif + if (curwin->w_cursor.col == 0) +*************** +*** 5926,5939 **** + orig_col = startcol; /* Will start backspacing from here */ + else + #endif +! replace_offset = startcol - end_foundcol - 1; + + /* + * adjust startcol for spaces that will be deleted and + * characters that will remain on top line + */ + curwin->w_cursor.col = foundcol; +! while (cc = gchar_cursor(), WHITECHAR(cc)) + inc_cursor(); + startcol -= curwin->w_cursor.col; + if (startcol < 0) +--- 5969,5983 ---- + orig_col = startcol; /* Will start backspacing from here */ + else + #endif +! replace_offset = startcol - end_foundcol; + + /* + * adjust startcol for spaces that will be deleted and + * characters that will remain on top line + */ + curwin->w_cursor.col = foundcol; +! while ((cc = gchar_cursor(), WHITECHAR(cc)) +! && (!fo_white_par || curwin->w_cursor.col < startcol)) + inc_cursor(); + startcol -= curwin->w_cursor.col; + if (startcol < 0) +*************** +*** 8509,8515 **** + if (mode == BACKSPACE_LINE + && (curbuf->b_p_ai + #ifdef FEAT_CINDENT +! || cindent_on() + #endif + ) + #ifdef FEAT_RIGHTLEFT +--- 8553,8559 ---- + if (mode == BACKSPACE_LINE + && (curbuf->b_p_ai + #ifdef FEAT_CINDENT +! || cindent_on() + #endif + ) + #ifdef FEAT_RIGHTLEFT +*** ../vim-7.2.300/src/testdir/Makefile 2009-11-17 17:36:13.000000000 +0100 +--- src/testdir/Makefile 2009-11-17 15:11:26.000000000 +0100 +*************** +*** 22,28 **** + test48.out test49.out test51.out test52.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 test66.out test67.out + + SCRIPTS_GUI = test16.out + +--- 22,29 ---- + test48.out test49.out test51.out test52.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 test66.out test67.out test68.out \ +! test69.out + + SCRIPTS_GUI = test16.out + +*** ../vim-7.2.300/src/testdir/test68.in 2009-11-17 17:39:36.000000000 +0100 +--- src/testdir/test68.in 2009-11-17 15:39:09.000000000 +0100 +*************** +*** 0 **** +--- 1,56 ---- ++ Test for text formatting. ++ ++ Results of test68: ++ ++ STARTTEST ++ :so small.vim ++ /^{/+1 ++ :set noai tw=2 fo=t ++ gRa b ++ ENDTEST ++ ++ { ++ ++ ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set ai tw=2 fo=tw ++ gqgqjjllab ++ ENDTEST ++ ++ { ++ a b ++ ++ a ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=3 fo=t ++ gqgqo ++ a  ++ ENDTEST ++ ++ { ++ a  ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=2 fo=tcq1 comments=:# ++ gqgqjgqgqo ++ a b ++ #a b ++ ENDTEST ++ ++ { ++ a b ++ #a b ++ } ++ ++ STARTTEST ++ :g/^STARTTEST/.,/^ENDTEST/d ++ :1;/^Results/,$wq! test.out ++ ENDTEST +*** ../vim-7.2.300/src/testdir/test68.ok 2009-11-17 17:39:36.000000000 +0100 +--- src/testdir/test68.ok 2009-11-17 15:11:26.000000000 +0100 +*************** +*** 0 **** +--- 1,35 ---- ++ Results of test68: ++ ++ ++ { ++ a ++ b ++ } ++ ++ ++ { ++ a ++ b ++ ++ a ++ b ++ } ++ ++ ++ { ++ a ++  ++ ++ a ++  ++ } ++ ++ ++ { ++ a b ++ #a b ++ ++ a b ++ #a b ++ } ++ +*** ../vim-7.2.300/src/testdir/test69.in 2009-11-17 17:39:36.000000000 +0100 +--- src/testdir/test69.in 2009-11-17 15:11:26.000000000 +0100 +*************** +*** 0 **** +--- 1,139 ---- ++ Test for multi-byte text formatting. ++ ++ STARTTEST ++ :so mbyte.vim ++ :set encoding=utf-8 ++ ENDTEST ++ ++ Results of test69: ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=2 fo=t ++ gqgqjgqgqo ++ XYZ ++ abc XYZ ++ ENDTEST ++ ++ { ++ XYZ ++ abc XYZ ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=1 fo=tm ++ gqgqjgqgqjgqgqjgqgqjgqgqo ++ X ++ Xa ++ X a ++ XY ++ X ï¼¹ ++ ENDTEST ++ ++ { ++ X ++ Xa ++ X a ++ XY ++ X ï¼¹ ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=2 fo=tm ++ gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqo ++ X ++ Xa ++ X a ++ XY ++ X ï¼¹ ++ aX ++ abX ++ abcX ++ abX c ++ abXY ++ ENDTEST ++ ++ { ++ X ++ Xa ++ X a ++ XY ++ X ï¼¹ ++ aX ++ abX ++ abcX ++ abX c ++ abXY ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set ai tw=2 fo=tm ++ gqgqjgqgqo ++ X ++ Xa ++ ENDTEST ++ ++ { ++ X ++ Xa ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set noai tw=2 fo=tm ++ gqgqjgqgqo ++ X ++ Xa ++ ENDTEST ++ ++ { ++ X ++ Xa ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=2 fo=cqm comments=n:X ++ gqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqjgqgqo ++ X ++ Xa ++ Xaï¼¹ ++ XY ++ XYZ ++ X ï¼¹ ++ X YZ ++ XX ++ XXa ++ XXY ++ ENDTEST ++ ++ { ++ X ++ Xa ++ Xaï¼¹ ++ XY ++ XYZ ++ X ï¼¹ ++ X YZ ++ XX ++ XXa ++ XXY ++ } ++ ++ STARTTEST ++ /^{/+1 ++ :set tw=2 fo=tm ++ RXa ++ ENDTEST ++ ++ { ++ ++ } ++ ++ STARTTEST ++ :g/^STARTTEST/.,/^ENDTEST/d ++ :1;/^Results/,$wq! test.out ++ ENDTEST +*** ../vim-7.2.300/src/testdir/test69.ok 2009-11-17 17:39:36.000000000 +0100 +--- src/testdir/test69.ok 2009-11-17 15:11:26.000000000 +0100 +*************** +*** 0 **** +--- 1,142 ---- ++ Results of test69: ++ ++ ++ { ++ XYZ ++ abc ++ XYZ ++ ++ XYZ ++ abc ++ XYZ ++ } ++ ++ ++ { ++ X ++ X ++ a ++ X ++ a ++ X ++ ï¼¹ ++ X ++ ï¼¹ ++ ++ X ++ X ++ a ++ X ++ a ++ X ++ ï¼¹ ++ X ++ ï¼¹ ++ } ++ ++ ++ { ++ X ++ X ++ a ++ X ++ a ++ X ++ ï¼¹ ++ X ++ ï¼¹ ++ a ++ X ++ ab ++ X ++ abc ++ X ++ ab ++ X ++ c ++ ab ++ X ++ ï¼¹ ++ ++ X ++ X ++ a ++ X ++ a ++ X ++ ï¼¹ ++ X ++ ï¼¹ ++ a ++ X ++ ab ++ X ++ abc ++ X ++ ab ++ X ++ c ++ ab ++ X ++ ï¼¹ ++ } ++ ++ ++ { ++ X ++ X ++ a ++ ++ X ++ X ++ a ++ } ++ ++ ++ { ++ X ++ X ++ a ++ ++ X ++ X ++ a ++ } ++ ++ ++ { ++ X ++ Xa ++ Xa ++ XY ++ XY ++ XY ++ XZ ++ X ï¼¹ ++ X ï¼¹ ++ X Z ++ XX ++ XXa ++ XXY ++ ++ X ++ Xa ++ Xa ++ XY ++ XY ++ XY ++ XZ ++ X ï¼¹ ++ X ï¼¹ ++ X Z ++ XX ++ XXa ++ XXY ++ } ++ ++ ++ { ++ X ++ a ++ } ++ +*** ../vim-7.2.300/src/version.c 2009-11-17 17:37:34.000000000 +0100 +--- src/version.c 2009-11-17 17:26:35.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 301, + /**/ diff --git a/7.2.302 b/7.2.302 new file mode 100644 index 00000000..c4d5a99d --- /dev/null +++ b/7.2.302 @@ -0,0 +1,140 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.302 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.302 (extra part of 7.2.301) +Problem: Formatting wrong with small 'tw' value. +Solution: Add build rules for tests. +Files: src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak, + src/testdir/Make_ming.mak, src/testdir/Make_os2.mak, + src/testdir/Make_vms.mms + + +*** ../vim-7.2.301/src/testdir/Make_amiga.mak 2009-09-18 14:58:26.000000000 +0200 +--- src/testdir/Make_amiga.mak 2009-11-17 15:29:05.000000000 +0100 +*************** +*** 26,32 **** + 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 \ +! test66.out test67.out + + .SUFFIXES: .in .out + +--- 26,32 ---- + 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 \ +! test66.out test67.out test68.out test69.out + + .SUFFIXES: .in .out + +*************** +*** 113,115 **** +--- 113,117 ---- + test65.out: test65.in + test66.out: test66.in + test67.out: test67.in ++ test68.out: test68.in ++ test69.out: test69.in +*** ../vim-7.2.301/src/testdir/Make_dos.mak 2009-09-18 14:58:26.000000000 +0200 +--- src/testdir/Make_dos.mak 2009-11-17 15:29:54.000000000 +0100 +*************** +*** 26,32 **** + 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 test66.out test67.out + + SCRIPTS32 = test50.out + +--- 26,33 ---- + 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 test66.out test67.out \ +! test68.out test69.out + + SCRIPTS32 = test50.out + +*** ../vim-7.2.301/src/testdir/Make_ming.mak 2009-09-18 14:58:26.000000000 +0200 +--- src/testdir/Make_ming.mak 2009-11-17 15:30:07.000000000 +0100 +*************** +*** 45,51 **** + 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 test66.out test67.out + + SCRIPTS32 = test50.out + +--- 45,52 ---- + 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 test66.out test67.out \ +! test68.out test69.out + + SCRIPTS32 = test50.out + +*** ../vim-7.2.301/src/testdir/Make_os2.mak 2009-09-18 14:58:26.000000000 +0200 +--- src/testdir/Make_os2.mak 2009-11-17 15:11:26.000000000 +0100 +*************** +*** 26,32 **** + 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 \ +! test66.out test67.out + + .SUFFIXES: .in .out + +--- 26,32 ---- + 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 \ +! test66.out test67.out test68.out test69.out + + .SUFFIXES: .in .out + +*** ../vim-7.2.301/src/testdir/Make_vms.mms 2009-09-18 14:58:26.000000000 +0200 +--- src/testdir/Make_vms.mms 2009-11-17 15:11:26.000000000 +0100 +*************** +*** 69,75 **** + 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 \ +! test66.out test67.out + + .IFDEF WANT_GUI + SCRIPT_GUI = test16.out +--- 69,75 ---- + 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 \ +! test66.out test67.out test68.out test69.out + + .IFDEF WANT_GUI + SCRIPT_GUI = test16.out +*** ../vim-7.2.301/src/version.c 2009-11-17 17:40:34.000000000 +0100 +--- src/version.c 2009-11-17 17:43:26.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 302, + /**/ + +-- +Hacker: Someone skilled in computer programming (good guy). +Cracker: A hacker that uses his skills to crack software (bad guy). + + /// 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/7.2.303 b/7.2.303 new file mode 100644 index 00000000..b53d1981 --- /dev/null +++ b/7.2.303 @@ -0,0 +1,70 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.303 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.303 (after 7.2.294) +Problem: Can't build on MS-Windows. +Solution: Add #ifdef around vim_settempdir(). (James Vega) +Files: src/fileio.c + + +*** ../vim-7.2.302/src/fileio.c 2009-11-17 17:13:03.000000000 +0100 +--- src/fileio.c 2009-11-18 20:06:55.000000000 +0100 +*************** +*** 146,152 **** +--- 146,154 ---- + # endif + #endif + static int move_lines __ARGS((buf_T *frombuf, buf_T *tobuf)); ++ #ifdef TEMPDIRNAMES + static void vim_settempdir __ARGS((char_u *tempdir)); ++ #endif + #ifdef FEAT_AUTOCMD + static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name"); + #endif +*************** +*** 6995,7000 **** +--- 6997,7003 ---- + } + #endif + ++ #ifdef TEMPDIRNAMES + /* + * Directory "tempdir" was created. Expand this name to a full path and put + * it in "vim_tempdir". This avoids that using ":cd" would confuse us. +*************** +*** 7021,7026 **** +--- 7024,7030 ---- + vim_free(buf); + } + } ++ #endif + + /* + * vim_tempname(): Return a unique name that can be used for a temp file. +*** ../vim-7.2.302/src/version.c 2009-11-17 17:57:10.000000000 +0100 +--- src/version.c 2009-11-18 20:07:58.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 303, + /**/ + +-- +BEDEVERE: Why do you think she is a witch? +SECOND VILLAGER: She turned me into a newt. +BEDEVERE: A newt? +SECOND VILLAGER: (After looking at himself for some time) I got better. + "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/7.2.304 b/7.2.304 new file mode 100644 index 00000000..8a138c04 --- /dev/null +++ b/7.2.304 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.304 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.304 +Problem: Compiler warning for bad pointer cast. +Solution: Use another variable for int pointer. +Files: src/ops.c + + +*** ../vim-7.2.303/src/ops.c 2009-11-17 12:43:19.000000000 +0100 +--- src/ops.c 2009-11-18 15:40:26.000000000 +0100 +*************** +*** 5597,5603 **** + vc.vc_type = CONV_NONE; + if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK) + { +! conv_str = string_convert(&vc, str, (int*)&len); + if (conv_str != NULL) + { + vim_free(str); +--- 5597,5606 ---- + vc.vc_type = CONV_NONE; + if (convert_setup(&vc, p_enc, (char_u *)"latin1") == OK) + { +! int intlen = len; +! +! conv_str = string_convert(&vc, str, &intlen); +! len = intlen; + if (conv_str != NULL) + { + vim_free(str); +*** ../vim-7.2.303/src/version.c 2009-11-18 20:12:15.000000000 +0100 +--- src/version.c 2009-11-25 12:37:36.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 304, + /**/ + +-- +I recommend ordering large cargo containers of paper towels to make up +whatever budget underruns you have. Paper products are always useful and they +have the advantage of being completely flushable if you need to make room in +the storage area later. + (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/7.2.305 b/7.2.305 new file mode 100644 index 00000000..c8ad7084 --- /dev/null +++ b/7.2.305 @@ -0,0 +1,105 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.305 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.305 +Problem: Recursively redrawing causes a memory leak. (Dominique Pelle) +Solution: Disallow recursive screen updating. +Files: src/screen.c + + +*** ../vim-7.2.304/src/screen.c 2009-11-11 17:07:25.000000000 +0100 +--- src/screen.c 2009-11-17 16:30:53.000000000 +0100 +*************** +*** 323,328 **** +--- 323,329 ---- + int did_one; + #endif + ++ /* Don't do anything if the screen structures are (not yet) valid. */ + if (!screen_valid(TRUE)) + return; + +*************** +*** 342,348 **** + if (curwin->w_lines_valid == 0 && type < NOT_VALID) + type = NOT_VALID; + +! if (!redrawing()) + { + redraw_later(type); /* remember type for next time */ + must_redraw = type; +--- 343,351 ---- + if (curwin->w_lines_valid == 0 && type < NOT_VALID) + type = NOT_VALID; + +! /* Postpone the redrawing when it's not needed and when being called +! * recursively. */ +! if (!redrawing() || updating_screen) + { + redraw_later(type); /* remember type for next time */ + must_redraw = type; +*************** +*** 582,587 **** +--- 585,591 ---- + + /* + * Prepare for updating one or more windows. ++ * Caller must check for "updating_screen" already set to avoid recursiveness. + */ + static void + update_prepare() +*************** +*** 663,669 **** + doit = TRUE; + } + +! if (!doit) + return; + + /* update all windows that need updating */ +--- 667,675 ---- + doit = TRUE; + } + +! /* Return when there is nothing to do or screen updating already +! * happening. */ +! if (!doit || updating_screen) + return; + + /* update all windows that need updating */ +*************** +*** 696,701 **** +--- 702,711 ---- + updateWindow(wp) + win_T *wp; + { ++ /* return if already busy updating */ ++ if (updating_screen) ++ return; ++ + update_prepare(); + + #ifdef FEAT_CLIPBOARD +*** ../vim-7.2.304/src/version.c 2009-11-25 12:38:49.000000000 +0100 +--- src/version.c 2009-11-25 13:01:48.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 305, + /**/ + +-- +If the Universe is constantly expanding, why can't I ever find a parking space? + + /// 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/7.2.306 b/7.2.306 new file mode 100644 index 00000000..d54e90d3 --- /dev/null +++ b/7.2.306 @@ -0,0 +1,48 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.306 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.306 +Problem: shellescape("10%%", 1) only escapes first %. (Christian Brabandt) +Solution: Don't copy the character after the escaped one. +Files: src/misc2.c + + +*** ../vim-7.2.305/src/misc2.c 2009-11-11 16:56:13.000000000 +0100 +--- src/misc2.c 2009-11-25 17:11:49.000000000 +0100 +*************** +*** 1390,1395 **** +--- 1390,1396 ---- + *d++ = '\\'; /* insert backslash */ + while (--l >= 0) /* copy the var */ + *d++ = *p++; ++ continue; + } + + MB_COPY_CHAR(p, d); +*** ../vim-7.2.305/src/version.c 2009-11-25 13:03:29.000000000 +0100 +--- src/version.c 2009-11-25 17:13:54.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 306, + /**/ + +-- +Article in the first Free Software Magazine: "Bram Moolenaar studied electrical +engineering at the Technical University of Delft and graduated in 1985 on a +multi-processor Unix architecture." +Response by "dimator": Could the school not afford a proper stage for the +ceremony? + + /// 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/7.2.307 b/7.2.307 new file mode 100644 index 00000000..23504e2c --- /dev/null +++ b/7.2.307 @@ -0,0 +1,181 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.307 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.307 +Problem: Crash with a very long syntax match statement. (Guy Gur Ari) +Solution: When the offset does not fit in the two bytes available give an + error instead of continuing with invalid pointers. +Files: src/regexp.c + + +*** ../vim-7.2.306/src/regexp.c 2009-05-15 21:31:11.000000000 +0200 +--- src/regexp.c 2009-11-25 18:13:03.000000000 +0100 +*************** +*** 583,588 **** +--- 583,589 ---- + #endif + static char_u *regcode; /* Code-emit pointer, or JUST_CALC_SIZE */ + static long regsize; /* Code size. */ ++ static int reg_toolong; /* TRUE when offset out of range */ + static char_u had_endbrace[NSUBEXP]; /* flags, TRUE if end of () found */ + static unsigned regflags; /* RF_ flags for prog */ + static long brace_min[10]; /* Minimums for complex brace repeats */ +*************** +*** 1028,1036 **** + regcomp_start(expr, re_flags); + regcode = r->program; + regc(REGMAGIC); +! if (reg(REG_NOPAREN, &flags) == NULL) + { + vim_free(r); + return NULL; + } + +--- 1029,1039 ---- + regcomp_start(expr, re_flags); + regcode = r->program; + regc(REGMAGIC); +! if (reg(REG_NOPAREN, &flags) == NULL || reg_toolong) + { + vim_free(r); ++ if (reg_toolong) ++ EMSG_RET_NULL(_("E339: Pattern too long")); + return NULL; + } + +*************** +*** 1141,1146 **** +--- 1144,1150 ---- + re_has_z = 0; + #endif + regsize = 0L; ++ reg_toolong = FALSE; + regflags = 0; + #if defined(FEAT_SYN_HL) || defined(PROTO) + had_eol = FALSE; +*************** +*** 1228,1234 **** + { + skipchr(); + br = regbranch(&flags); +! if (br == NULL) + return NULL; + regtail(ret, br); /* BRANCH -> BRANCH. */ + if (!(flags & HASWIDTH)) +--- 1232,1238 ---- + { + skipchr(); + br = regbranch(&flags); +! if (br == NULL || reg_toolong) + return NULL; + regtail(ret, br); /* BRANCH -> BRANCH. */ + if (!(flags & HASWIDTH)) +*************** +*** 1313,1318 **** +--- 1317,1324 ---- + break; + skipchr(); + regtail(latest, regnode(END)); /* operand ends */ ++ if (reg_toolong) ++ break; + reginsert(MATCH, latest); + chain = latest; + } +*************** +*** 1382,1388 **** + break; + default: + latest = regpiece(&flags); +! if (latest == NULL) + return NULL; + *flagp |= flags & (HASWIDTH | HASNL | HASLOOKBH); + if (chain == NULL) /* First piece. */ +--- 1388,1394 ---- + break; + default: + latest = regpiece(&flags); +! if (latest == NULL || reg_toolong) + return NULL; + *flagp |= flags & (HASWIDTH | HASNL | HASLOOKBH); + if (chain == NULL) /* First piece. */ +*************** +*** 2540,2547 **** + offset = (int)(scan - val); + else + offset = (int)(val - scan); +! *(scan + 1) = (char_u) (((unsigned)offset >> 8) & 0377); +! *(scan + 2) = (char_u) (offset & 0377); + } + + /* +--- 2546,2561 ---- + offset = (int)(scan - val); + else + offset = (int)(val - scan); +! /* When the offset uses more than 16 bits it can no longer fit in the two +! * bytes avaliable. Use a global flag to avoid having to check return +! * values in too many places. */ +! if (offset > 0xffff) +! reg_toolong = TRUE; +! else +! { +! *(scan + 1) = (char_u) (((unsigned)offset >> 8) & 0377); +! *(scan + 2) = (char_u) (offset & 0377); +! } + } + + /* +*************** +*** 5764,5769 **** +--- 5778,5785 ---- + + /* + * regnext - dig the "next" pointer out of a node ++ * Returns NULL when calculating size, when there is no next item and when ++ * there is an error. + */ + static char_u * + regnext(p) +*************** +*** 5771,5777 **** + { + int offset; + +! if (p == JUST_CALC_SIZE) + return NULL; + + offset = NEXT(p); +--- 5787,5793 ---- + { + int offset; + +! if (p == JUST_CALC_SIZE || reg_toolong) + return NULL; + + offset = NEXT(p); +*** ../vim-7.2.306/src/version.c 2009-11-25 17:15:16.000000000 +0100 +--- src/version.c 2009-11-25 18:14:32.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 307, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.308 b/7.2.308 new file mode 100644 index 00000000..1e19b21d --- /dev/null +++ b/7.2.308 @@ -0,0 +1,182 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.308 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.308 +Problem: When using a regexp in the "\=" expression of a substitute + command, submatch() returns empty strings for further lines. + (Clockwork Jam) +Solution: Save and restore the line number and line count when calling + reg_getline(). +Files: src/regexp.c + + +*** ../vim-7.2.307/src/regexp.c 2009-11-25 18:21:48.000000000 +0100 +--- src/regexp.c 2009-11-25 19:45:07.000000000 +0100 +*************** +*** 6828,6833 **** +--- 6828,6835 ---- + * that contains a call to substitute() and submatch(). */ + static regmatch_T *submatch_match; + static regmmatch_T *submatch_mmatch; ++ static linenr_T submatch_firstlnum; ++ static linenr_T submatch_maxline; + #endif + + #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO) +*************** +*** 6941,6947 **** + } + else + { +- linenr_T save_reg_maxline; + win_T *save_reg_win; + int save_ireg_ic; + +--- 6943,6948 ---- +*************** +*** 6953,6959 **** + * vim_regexec_multi() can't be called recursively. */ + submatch_match = reg_match; + submatch_mmatch = reg_mmatch; +! save_reg_maxline = reg_maxline; + save_reg_win = reg_win; + save_ireg_ic = ireg_ic; + can_f_submatch = TRUE; +--- 6954,6961 ---- + * vim_regexec_multi() can't be called recursively. */ + submatch_match = reg_match; + submatch_mmatch = reg_mmatch; +! submatch_firstlnum = reg_firstlnum; +! submatch_maxline = reg_maxline; + save_reg_win = reg_win; + save_ireg_ic = ireg_ic; + can_f_submatch = TRUE; +*************** +*** 6976,6982 **** + + reg_match = submatch_match; + reg_mmatch = submatch_mmatch; +! reg_maxline = save_reg_maxline; + reg_win = save_reg_win; + ireg_ic = save_ireg_ic; + can_f_submatch = FALSE; +--- 6978,6985 ---- + + reg_match = submatch_match; + reg_mmatch = submatch_mmatch; +! reg_firstlnum = submatch_firstlnum; +! reg_maxline = submatch_maxline; + reg_win = save_reg_win; + ireg_ic = save_ireg_ic; + can_f_submatch = FALSE; +*************** +*** 7212,7217 **** +--- 7215,7243 ---- + + #ifdef FEAT_EVAL + /* ++ * Call reg_getline() with the line numbers from the submatch. If a ++ * substitute() was used the reg_maxline and other values have been ++ * overwritten. ++ */ ++ static char_u * ++ reg_getline_submatch(lnum) ++ linenr_T lnum; ++ { ++ char_u *s; ++ linenr_T save_first = reg_firstlnum; ++ linenr_T save_max = reg_maxline; ++ ++ reg_firstlnum = submatch_firstlnum; ++ reg_maxline = submatch_maxline; ++ ++ s = reg_getline(lnum); ++ ++ reg_firstlnum = save_first; ++ reg_maxline = save_max; ++ return s; ++ } ++ ++ /* + * Used for the submatch() function: get the string from the n'th submatch in + * allocated memory. + * Returns NULL when not in a ":s" command and for a non-existing submatch. +*************** +*** 7241,7247 **** + if (lnum < 0 || submatch_mmatch->endpos[no].lnum < 0) + return NULL; + +! s = reg_getline(lnum) + submatch_mmatch->startpos[no].col; + if (s == NULL) /* anti-crash check, cannot happen? */ + break; + if (submatch_mmatch->endpos[no].lnum == lnum) +--- 7267,7273 ---- + if (lnum < 0 || submatch_mmatch->endpos[no].lnum < 0) + return NULL; + +! s = reg_getline_submatch(lnum) + submatch_mmatch->startpos[no].col; + if (s == NULL) /* anti-crash check, cannot happen? */ + break; + if (submatch_mmatch->endpos[no].lnum == lnum) +*************** +*** 7267,7273 **** + ++lnum; + while (lnum < submatch_mmatch->endpos[no].lnum) + { +! s = reg_getline(lnum++); + if (round == 2) + STRCPY(retval + len, s); + len += (int)STRLEN(s); +--- 7293,7299 ---- + ++lnum; + while (lnum < submatch_mmatch->endpos[no].lnum) + { +! s = reg_getline_submatch(lnum++); + if (round == 2) + STRCPY(retval + len, s); + len += (int)STRLEN(s); +*************** +*** 7276,7282 **** + ++len; + } + if (round == 2) +! STRNCPY(retval + len, reg_getline(lnum), + submatch_mmatch->endpos[no].col); + len += submatch_mmatch->endpos[no].col; + if (round == 2) +--- 7302,7308 ---- + ++len; + } + if (round == 2) +! STRNCPY(retval + len, reg_getline_submatch(lnum), + submatch_mmatch->endpos[no].col); + len += submatch_mmatch->endpos[no].col; + if (round == 2) +*** ../vim-7.2.307/src/version.c 2009-11-25 18:21:48.000000000 +0100 +--- src/version.c 2009-11-25 19:50:16.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 308, + /**/ + +-- +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/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.2.309 b/7.2.309 new file mode 100644 index 00000000..a1713b75 --- /dev/null +++ b/7.2.309 @@ -0,0 +1,48 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.309 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.309 (after 7.2.308) +Problem: Warning for missing function prototype. (Patrick Texier) +Solution: Add the prototype. +Files: src/regexp.c + + +*** ../vim-7.2.308/src/regexp.c 2009-11-25 19:51:56.000000000 +0100 +--- src/regexp.c 2009-11-26 20:39:18.000000000 +0100 +*************** +*** 7214,7219 **** +--- 7214,7221 ---- + } + + #ifdef FEAT_EVAL ++ static char_u *reg_getline_submatch __ARGS((linenr_T lnum)); ++ + /* + * Call reg_getline() with the line numbers from the submatch. If a + * substitute() was used the reg_maxline and other values have been +*** ../vim-7.2.308/src/version.c 2009-11-25 19:51:56.000000000 +0100 +--- src/version.c 2009-11-26 20:40:11.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 309, + /**/ + +-- +Female engineers become irresistible at the age of consent and remain that +way until about thirty minutes after their clinical death. Longer if it's a +warm day. + (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/7.2.310 b/7.2.310 new file mode 100644 index 00000000..52734ddf --- /dev/null +++ b/7.2.310 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.310 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.310 +Problem: When a filetype plugin in ~/.vim/ftdetect uses ":setfiletype" and + the file starts with a "# comment" it gets "conf" filetype. +Solution: Check for "conf" filetype after using ftdetect plugins. +Files: runtime/filetype.vim + + +*** ../vim-7.2.309/runtime/filetype.vim 2008-08-06 18:56:36.000000000 +0200 +--- runtime/filetype.vim 2009-12-02 12:08:42.000000000 +0100 +*************** +*** 2400,2405 **** +--- 2435,2446 ---- + au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh') + + ++ ++ " Use the filetype detect plugins. They may overrule any of the previously ++ " detected filetypes. ++ runtime! ftdetect/*.vim ++ ++ + " Generic configuration file (check this last, it's just guessing!) + au BufNewFile,BufRead,StdinReadPost * + \ if !did_filetype() && expand("") !~ g:ft_ignore_pat +*************** +*** 2408,2417 **** + \ setf conf | + \ endif + +- " Use the plugin-filetype checks last, they may overrule any of the previously +- " detected filetypes. +- runtime! ftdetect/*.vim +- + augroup END + + +--- 2449,2454 ---- +*** ../vim-7.2.309/src/version.c 2009-11-26 20:41:19.000000000 +0100 +--- src/version.c 2009-12-02 12:05:27.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 310, + /**/ + +-- +A)bort, R)etry, P)lease don't bother me again + + /// 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/7.2.311 b/7.2.311 new file mode 100644 index 00000000..9e27a739 --- /dev/null +++ b/7.2.311 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.311 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.311 +Problem: Can't compile with FreeMiNT. +Solution: Change #ifdef for limits.h. (Alan Hourihane) +Files: src/fileio.c + + +*** ../vim-7.2.310/src/fileio.c 2009-11-18 20:12:15.000000000 +0100 +--- src/fileio.c 2009-12-02 13:30:07.000000000 +0100 +*************** +*** 21,27 **** + + #include "vim.h" + +! #ifdef __TANDEM + # include /* for SSIZE_MAX */ + #endif + +--- 21,27 ---- + + #include "vim.h" + +! #if defined(__TANDEM) || defined(__MINT__) + # include /* for SSIZE_MAX */ + #endif + +*** ../vim-7.2.310/src/version.c 2009-12-02 12:08:57.000000000 +0100 +--- src/version.c 2009-12-02 13:31:46.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 311, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +3. Your bookmark takes 15 minutes to scroll from top to bottom. + + /// 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/7.2.312 b/7.2.312 new file mode 100644 index 00000000..8b95868d --- /dev/null +++ b/7.2.312 @@ -0,0 +1,312 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.312 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.312 +Problem: iconv() returns an invalid character sequence when conversion + fails. It should return an empty string. (Yongwei Wu) +Solution: Be more strict about invalid characters in the input. +Files: src/mbyte.c + + +*** ../vim-7.2.311/src/mbyte.c 2009-06-16 15:23:07.000000000 +0200 +--- src/mbyte.c 2009-11-25 16:10:44.000000000 +0100 +*************** +*** 133,154 **** + static int dbcs_ptr2cells_len __ARGS((char_u *p, int size)); + static int dbcs_ptr2char __ARGS((char_u *p)); + +! /* Lookup table to quickly get the length in bytes of a UTF-8 character from +! * the first byte of a UTF-8 string. Bytes which are illegal when used as the +! * first byte have a one, because these will be used separately. */ + static char utf8len_tab[256] = + { + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /*bogus*/ +! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /*bogus*/ + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1, + }; + + /* + * XIM often causes trouble. Define XIM_DEBUG to get a log of XIM callbacks + * in the "xim.log" file. + */ +--- 133,172 ---- + static int dbcs_ptr2cells_len __ARGS((char_u *p, int size)); + static int dbcs_ptr2char __ARGS((char_u *p)); + +! /* +! * Lookup table to quickly get the length in bytes of a UTF-8 character from +! * the first byte of a UTF-8 string. +! * Bytes which are illegal when used as the first byte have a 1. +! * The NUL byte has length 1. +! */ + static char utf8len_tab[256] = + { + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +! 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1, + }; + + /* ++ * Like utf8len_tab above, but using a zero for illegal lead bytes. ++ */ ++ static char utf8len_tab_zero[256] = ++ { ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, ++ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,0,0, ++ }; ++ ++ /* + * XIM often causes trouble. Define XIM_DEBUG to get a log of XIM callbacks + * in the "xim.log" file. + */ +*************** +*** 1352,1358 **** + if (size > 0 && *p >= 0x80) + { + if (utf_ptr2len_len(p, size) < utf8len_tab[*p]) +! return 1; + c = utf_ptr2char(p); + /* An illegal byte is displayed as . */ + if (utf_ptr2len(p) == 1 || c == NUL) +--- 1370,1376 ---- + if (size > 0 && *p >= 0x80) + { + if (utf_ptr2len_len(p, size) < utf8len_tab[*p]) +! return 1; /* truncated */ + c = utf_ptr2char(p); + /* An illegal byte is displayed as . */ + if (utf_ptr2len(p) == 1 || c == NUL) +*************** +*** 1473,1479 **** + if (p[0] < 0x80) /* be quick for ASCII */ + return p[0]; + +! len = utf8len_tab[p[0]]; + if (len > 1 && (p[1] & 0xc0) == 0x80) + { + if (len == 2) +--- 1491,1497 ---- + if (p[0] < 0x80) /* be quick for ASCII */ + return p[0]; + +! len = utf8len_tab_zero[p[0]]; + if (len > 1 && (p[1] & 0xc0) == 0x80) + { + if (len == 2) +*************** +*** 1723,1728 **** +--- 1741,1747 ---- + /* + * Return length of UTF-8 character, obtained from the first byte. + * "b" must be between 0 and 255! ++ * Returns 1 for an invalid first byte value. + */ + int + utf_byte2len(b) +*************** +*** 1737,1742 **** +--- 1756,1762 ---- + * Returns 1 for "". + * Returns 1 for an illegal byte sequence (also in incomplete byte seq.). + * Returns number > "size" for an incomplete byte sequence. ++ * Never returns zero. + */ + int + utf_ptr2len_len(p, size) +*************** +*** 1747,1757 **** + int i; + int m; + +! if (*p == NUL) +! return 1; +! m = len = utf8len_tab[*p]; + if (len > size) + m = size; /* incomplete byte sequence. */ + for (i = 1; i < m; ++i) + if ((p[i] & 0xc0) != 0x80) + return 1; +--- 1767,1779 ---- + int i; + int m; + +! len = utf8len_tab[*p]; +! if (len == 1) +! return 1; /* NUL, ascii or illegal lead byte */ + if (len > size) + m = size; /* incomplete byte sequence. */ ++ else ++ m = len; + for (i = 1; i < m; ++i) + if ((p[i] & 0xc0) != 0x80) + return 1; +*************** +*** 2505,2510 **** +--- 2527,2533 ---- + /* + * mb_head_off() function pointer. + * Return offset from "p" to the first byte of the character it points into. ++ * If "p" points to the NUL at the end of the string return 0. + * Returns 0 when already at the first byte of a character. + */ + int +*************** +*** 2524,2530 **** + + /* It can't be a trailing byte when not using DBCS, at the start of the + * string or the previous byte can't start a double-byte. */ +! if (p <= base || MB_BYTE2LEN(p[-1]) == 1) + return 0; + + /* This is slow: need to start at the base and go forward until the +--- 2547,2553 ---- + + /* It can't be a trailing byte when not using DBCS, at the start of the + * string or the previous byte can't start a double-byte. */ +! if (p <= base || MB_BYTE2LEN(p[-1]) == 1 || *p == NUL) + return 0; + + /* This is slow: need to start at the base and go forward until the +*************** +*** 2552,2558 **** + * lead byte in the current cell. */ + if (p <= base + || (enc_dbcs == DBCS_JPNU && p[-1] == 0x8e) +! || MB_BYTE2LEN(p[-1]) == 1) + return 0; + + /* This is slow: need to start at the base and go forward until the +--- 2575,2582 ---- + * lead byte in the current cell. */ + if (p <= base + || (enc_dbcs == DBCS_JPNU && p[-1] == 0x8e) +! || MB_BYTE2LEN(p[-1]) == 1 +! || *p == NUL) + return 0; + + /* This is slow: need to start at the base and go forward until the +*************** +*** 2578,2583 **** +--- 2602,2608 ---- + char_u *q; + char_u *s; + int c; ++ int len; + #ifdef FEAT_ARABIC + char_u *j; + #endif +*************** +*** 2597,2604 **** + --q; + /* Check for illegal sequence. Do allow an illegal byte after where we + * started. */ +! if (utf8len_tab[*q] != (int)(s - q + 1) +! && utf8len_tab[*q] != (int)(p - q + 1)) + return 0; + + if (q <= base) +--- 2622,2629 ---- + --q; + /* Check for illegal sequence. Do allow an illegal byte after where we + * started. */ +! len = utf8len_tab[*q]; +! if (len != (int)(s - q + 1) && len != (int)(p - q + 1)) + return 0; + + if (q <= base) +*************** +*** 2810,2818 **** + + while (end == NULL ? *p != NUL : p < end) + { +! if ((*p & 0xc0) == 0x80) + return FALSE; /* invalid lead byte */ +- l = utf8len_tab[*p]; + if (end != NULL && p + l > end) + return FALSE; /* incomplete byte sequence */ + ++p; +--- 2835,2843 ---- + + while (end == NULL ? *p != NUL : p < end) + { +! l = utf8len_tab_zero[*p]; +! if (l == 0) + return FALSE; /* invalid lead byte */ + if (end != NULL && p + l > end) + return FALSE; /* incomplete byte sequence */ + ++p; +*************** +*** 6117,6128 **** + d = retval; + for (i = 0; i < len; ++i) + { +! l = utf_ptr2len(ptr + i); + if (l == 0) + *d++ = NUL; + else if (l == 1) + { +! if (unconvlenp != NULL && utf8len_tab[ptr[i]] > len - i) + { + /* Incomplete sequence at the end. */ + *unconvlenp = len - i; +--- 6142,6161 ---- + d = retval; + for (i = 0; i < len; ++i) + { +! l = utf_ptr2len_len(ptr + i, len - i); + if (l == 0) + *d++ = NUL; + else if (l == 1) + { +! int l_w = utf8len_tab_zero[ptr[i]]; +! +! if (l_w == 0) +! { +! /* Illegal utf-8 byte cannot be converted */ +! vim_free(retval); +! return NULL; +! } +! if (unconvlenp != NULL && l_w > len - i) + { + /* Incomplete sequence at the end. */ + *unconvlenp = len - i; +*** ../vim-7.2.311/src/version.c 2009-12-02 13:32:10.000000000 +0100 +--- src/version.c 2009-12-02 15:00:23.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 312, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +6. You refuse to go to a vacation spot with no electricity and no phone lines. + + /// 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/7.2.313 b/7.2.313 new file mode 100644 index 00000000..77b9103a --- /dev/null +++ b/7.2.313 @@ -0,0 +1,117 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.313 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.313 +Problem: Command line completion doesn't work after "%:h" and similar. +Solution: Expand these items before doing the completion. +Files: src/ex_getln.c, src/misc1.c, src/proto/misc1.pro + + +*** ../vim-7.2.312/src/ex_getln.c 2009-09-18 17:24:54.000000000 +0200 +--- src/ex_getln.c 2009-12-02 16:40:06.000000000 +0100 +*************** +*** 4422,4428 **** + flags |= EW_FILE; + else + flags = (flags | EW_DIR) & ~EW_FILE; +! ret = expand_wildcards(1, &pat, num_file, file, flags); + if (free_pat) + vim_free(pat); + return ret; +--- 4422,4429 ---- + flags |= EW_FILE; + else + flags = (flags | EW_DIR) & ~EW_FILE; +! /* Expand wildcards, supporting %:h and the like. */ +! ret = expand_wildcards_eval(&pat, num_file, file, flags); + if (free_pat) + vim_free(pat); + return ret; +*** ../vim-7.2.312/src/misc1.c 2009-11-17 16:08:12.000000000 +0100 +--- src/misc1.c 2009-12-02 17:06:49.000000000 +0100 +*************** +*** 8447,8452 **** +--- 8447,8492 ---- + } + + /* ++ * Invoke expand_wildcards() for one pattern. ++ * Expand items like "%:h" before the expansion. ++ * Returns OK or FAIL. ++ */ ++ int ++ expand_wildcards_eval(pat, num_file, file, flags) ++ char_u **pat; /* pointer to input pattern */ ++ int *num_file; /* resulting number of files */ ++ char_u ***file; /* array of resulting files */ ++ int flags; /* EW_DIR, etc. */ ++ { ++ int ret = FAIL; ++ char_u *eval_pat = NULL; ++ char_u *exp_pat = *pat; ++ char_u *ignored_msg; ++ int usedlen; ++ ++ if (*exp_pat == '%' || *exp_pat == '#' || *exp_pat == '<') ++ { ++ ++emsg_off; ++ eval_pat = eval_vars(exp_pat, exp_pat, &usedlen, ++ NULL, &ignored_msg, NULL); ++ --emsg_off; ++ if (eval_pat != NULL) ++ exp_pat = concat_str(eval_pat, exp_pat + usedlen); ++ } ++ ++ if (exp_pat != NULL) ++ ret = expand_wildcards(1, &exp_pat, num_file, file, flags); ++ ++ if (eval_pat != NULL) ++ { ++ vim_free(exp_pat); ++ vim_free(eval_pat); ++ } ++ ++ return ret; ++ } ++ ++ /* + * Expand wildcards. Calls gen_expand_wildcards() and removes files matching + * 'wildignore'. + * Returns OK or FAIL. +*** ../vim-7.2.312/src/proto/misc1.pro 2007-09-26 22:36:32.000000000 +0200 +--- src/proto/misc1.pro 2009-12-02 16:41:52.000000000 +0100 +*************** +*** 85,90 **** +--- 85,91 ---- + int vim_fexists __ARGS((char_u *fname)); + void line_breakcheck __ARGS((void)); + void fast_breakcheck __ARGS((void)); ++ int expand_wildcards_eval __ARGS((char_u **pat, int *num_file, char_u ***file, int flags)); + int expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags)); + int match_suffix __ARGS((char_u *fname)); + int unix_expandpath __ARGS((garray_T *gap, char_u *path, int wildoff, int flags, int didstar)); +*** ../vim-7.2.312/src/version.c 2009-12-02 15:03:24.000000000 +0100 +--- src/version.c 2009-12-02 17:14:02.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 313, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +8. You spend half of the plane trip with your laptop on your lap...and your + child in the overhead compartment. + + /// 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/7.2.314 b/7.2.314 new file mode 100644 index 00000000..490605d0 --- /dev/null +++ b/7.2.314 @@ -0,0 +1,56 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.314 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.314 +Problem: Missing function in small build. +Solution: Always include concat_str. +Files: src/misc1.c + + +*** ../vim-7.2.313/src/misc1.c 2009-12-02 17:15:04.000000000 +0100 +--- src/misc1.c 2009-12-02 17:44:55.000000000 +0100 +*************** +*** 4666,4672 **** + return dest; + } + +- #if defined(FEAT_EVAL) || defined(FEAT_GETTEXT) || defined(PROTO) + /* + * Concatenate two strings and return the result in allocated memory. + * Returns NULL when out of memory. +--- 4666,4671 ---- +*************** +*** 4687,4693 **** + } + return dest; + } +- #endif + + /* + * Add a path separator to a file name, unless it already ends in a path +--- 4686,4691 ---- +*** ../vim-7.2.313/src/version.c 2009-12-02 17:15:04.000000000 +0100 +--- src/version.c 2009-12-02 17:47:18.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 314, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +9. All your daydreaming is preoccupied with getting a faster connection to the + net: 28.8...ISDN...cable modem...T1...T3. + + /// 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/7.2.315 b/7.2.315 new file mode 100644 index 00000000..6a5e7c7b --- /dev/null +++ b/7.2.315 @@ -0,0 +1,134 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.315 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.315 +Problem: Python libs can't be found on 64 bit system. +Solution: Add lib64 to the list of directories. (Michael Henry) +Files: src/auto/configure, src/configure.in + + +*** ../vim-7.2.314/src/auto/configure 2009-11-17 17:13:03.000000000 +0100 +--- src/auto/configure 2009-12-02 17:21:20.000000000 +0100 +*************** +*** 5126,5132 **** + + vi_cv_path_python_conf= + for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do +! for subdir in lib share; do + d="${path}/${subdir}/python${vi_cv_var_python_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python_conf="$d" +--- 5126,5132 ---- + + vi_cv_path_python_conf= + for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do +! for subdir in lib64 lib share; do + d="${path}/${subdir}/python${vi_cv_var_python_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python_conf="$d" +*************** +*** 13718,13725 **** + $as_echo "pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group" >&6; } + else + vim_cv_tty_group=world +! { $as_echo "$as_me:$LINENO: result: ptys are world accessable" >&5 +! $as_echo "ptys are world accessable" >&6; } + fi + + else +--- 13718,13725 ---- + $as_echo "pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group" >&6; } + else + vim_cv_tty_group=world +! { $as_echo "$as_me:$LINENO: result: ptys are world accessible" >&5 +! $as_echo "ptys are world accessible" >&6; } + fi + + else +*************** +*** 13730,13737 **** + ( exit $ac_status ) + + vim_cv_tty_group=world +! { $as_echo "$as_me:$LINENO: result: can't determine - assume ptys are world accessable" >&5 +! $as_echo "can't determine - assume ptys are world accessable" >&6; } + + fi + rm -rf conftest.dSYM +--- 13730,13737 ---- + ( exit $ac_status ) + + vim_cv_tty_group=world +! { $as_echo "$as_me:$LINENO: result: can't determine - assume ptys are world accessible" >&5 +! $as_echo "can't determine - assume ptys are world accessible" >&6; } + + fi + rm -rf conftest.dSYM +*** ../vim-7.2.314/src/configure.in 2009-11-17 17:13:03.000000000 +0100 +--- src/configure.in 2009-12-02 17:21:10.000000000 +0100 +*************** +*** 686,692 **** + [ + vi_cv_path_python_conf= + for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do +! for subdir in lib share; do + d="${path}/${subdir}/python${vi_cv_var_python_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python_conf="$d" +--- 686,692 ---- + [ + vi_cv_path_python_conf= + for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do +! for subdir in lib64 lib share; do + d="${path}/${subdir}/python${vi_cv_var_python_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python_conf="$d" +*************** +*** 2557,2567 **** + AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group]) + else + vim_cv_tty_group=world +! AC_MSG_RESULT([ptys are world accessable]) + fi + ],[ + vim_cv_tty_group=world +! AC_MSG_RESULT([can't determine - assume ptys are world accessable]) + ],[ + AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode') + ]) +--- 2557,2567 ---- + AC_MSG_RESULT([pty mode: $vim_cv_tty_mode, group: $vim_cv_tty_group]) + else + vim_cv_tty_group=world +! AC_MSG_RESULT([ptys are world accessible]) + fi + ],[ + vim_cv_tty_group=world +! AC_MSG_RESULT([can't determine - assume ptys are world accessible]) + ],[ + AC_MSG_ERROR(cross-compiling: please set 'vim_cv_tty_group' and 'vim_cv_tty_mode') + ]) +*** ../vim-7.2.314/src/version.c 2009-12-02 17:47:46.000000000 +0100 +--- src/version.c 2009-12-02 17:57:39.000000000 +0100 +*************** +*** 683,684 **** +--- 683,686 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 315, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +10. And even your night dreams are in HTML. + + /// 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/Changelog.rpm b/Changelog.rpm new file mode 100644 index 00000000..b49d6ddf --- /dev/null +++ b/Changelog.rpm @@ -0,0 +1,415 @@ +* Fri Jul 04 2008 Karsten Hopp 7.1.330-2 +- new rpm doesn't like zero filled, 3 digit patch numbers + +* Fri Jul 04 2008 Karsten Hopp 7.1.330-1 +- patchlevel 330 + +* Wed Jun 04 2008 Karsten Hopp 7.1.309-1 +- Patchlevel 309 + +* Wed Jun 04 2008 Karsten Hopp 7.1.306-1 +- patchlevel 306, fixes some unicode characters + +* Tue Jun 03 2008 Karsten Hopp 7.1.305-1 +- patchlevel 305 +- put /etc/vimrc autocmd's into fedora augroup (similar to #241308) + +* Thu May 15 2008 Karsten Hopp 7.1.298-1 +- patchlevel 298 + +* Fri Apr 11 2008 Karsten Hopp 7.1.293-1 +- patchlevel 293 +- update forth syntax file (Benjamin Krill) + +* Wed Apr 02 2008 Karsten Hopp 7.1.291-1 +- patchlevel 291, more fixes for leftover /tmp/cscope* files + +* Tue Mar 18 2008 Tom "spot" Callaway 7.1.283-2 +- add Requires for versioned perl (libperl.so) + +* Mon Mar 17 2008 Karsten Hopp 7.1.283-1 +- patchlevel 283, fixes leftover cscope files in /tmp + +* Wed Mar 12 2008 Karsten Hopp 7.1.273-1 +- update to patchlevel 273, this fixes #436902 + +* Tue Mar 11 2008 Karsten Hopp 7.1.270-1 +- patchlevel 270 +- don't write swapfile on most common locations for USB-sticks (#436752) +- add spec file template + +* Mon Mar 10 2008 Tom "spot" Callaway 7.1.269-2 +- BR: ExtUtils::Embed to find perl headers + +* Mon Mar 10 2008 Karsten Hopp 7.1.269-1 +- patchlevel 269 +- rebuild with new perl (#436731) + +* Mon Mar 03 2008 Karsten Hopp 7.1.266-1 +- patchlevel 266 +- add minimal help page for /bin/vi (#173974) + +* Mon Feb 25 2008 Karsten Hopp 7.1.262-1 +- patchlevel 262 +- add fix for #231124, BOM was ignored +- enable ruby interpreter (#215207) +- add filetype for Erlang header files (#417371) + +* Mon Feb 11 2008 Karsten Hopp 7.1.245-1 +- patchlevel 245 + +* Sun Jan 27 2008 Karsten Hopp 7.1.242-1 +- patchlevel 242 + +* Fri Jan 18 2008 Karsten Hopp 7.1.233-2 +- silence taglist plugin (#429200) + +* Fri Jan 18 2008 Karsten Hopp 7.1.233-1 +- patchlevel 233 +- fix ada patch + +* Wed Jan 16 2008 Karsten Hopp 7.1.230-2 +- add newer ada runtime files to fix bugzilla #246378 + +* Wed Jan 16 2008 Karsten Hopp 7.1.230-1 +- patchlevel 230, fixes memory leak + +* Mon Jan 14 2008 Karsten Hopp 7.1.228-1 +- patchlevel 228 +- allow overwriting WITH_SELING at build time (#427710) + +* Thu Jan 10 2008 Karsten Hopp 7.1.214-1 +- patchlevel 214 + +* Mon Jan 07 2008 Karsten Hopp 7.1.211-1 +- patchlevel 211 + +* Sat Dec 22 2007 Karsten Hopp 7.1.175-1 +- patchlevel 175 + +* Thu Nov 22 2007 Karsten Hopp 7.1.159-1 +- patchlevel 159 +- vim-enhanced requires which for vimtutor (#395371) + +* Thu Oct 04 2007 Karsten Hopp 7.1.135-1 +- patchlevel 135 + +* Wed Sep 26 2007 Karsten Hopp 7.1.122-1 +- patchlevel 122 + +* Tue Sep 25 2007 Karsten Hopp 7.1.119-1 +- patchlevel 119 + +* Mon Sep 24 2007 Karsten Hopp 7.1.116-1 +- patchlevel 116 + +* Fri Sep 07 2007 Karsten Hopp 7.1.100-1 +- patchlevel 100 + +* Fri Aug 24 2007 Karsten Hopp 7.1.87-1 +- add build requirement perl-devel +- fix tarball unpacking +- patchlevel 87 + +* Wed Aug 15 2007 Karsten Hopp 7.1.77-1 +- patchlevel 77 + +* Mon Aug 13 2007 Karsten Hopp 7.1.68-1 +- patchlevel 68 + +* Thu Aug 02 2007 Karsten Hopp 7.1.47-1 +- patchlevel 47 + +* Wed Jul 11 2007 Karsten Hopp 7.1.28-1 +- patchlevel 28 + +* Wed Jun 27 2007 Karsten Hopp 7.1.12-1 +- Patchlevel 12 + +* Mon Jun 04 2007 Karsten Hopp 7.1.2-1 +- vim 7.1 +- drop 240 patches + +* Tue May 22 2007 Karsten Hopp 7.0.235-1 +- Don't wake up system with blinking gvim cursor: + http://www.linuxpowertop.org/known.php + +* Mon Apr 30 2007 Karsten Hopp 7.0.235-1 +- update to patchlevel 235, fixes modeline issues + +* Tue Apr 17 2007 Karsten Hopp 7.0.224-3 +- fix typo in require line (vim-X11 - 2:7.0.224-2.fc7.i386 requires 4) + +* Mon Apr 16 2007 Karsten Hopp 7.0.224-2 +- use more macros +- drop BR perl +- move license to main doc directory +- set vendor to 'fedora' (desktop-file) +- don't own man directories +- preserve timestamps of non-generated files +- run update-desktop-database + +* Thu Apr 05 2007 Karsten Hopp 7.0.224-1 +- vim-X11 provides gvim + +* Fri Mar 30 2007 Karsten Hopp 7.0.224-1 +- patchlevel 224 + +* Wed Feb 21 2007 Karsten Hopp 7.0.195-2 +- rpmlint fixes (#226526) + +* Tue Feb 13 2007 Karsten Hopp 7.0.195-1 +- patchlevel 195 + +* Mon Feb 12 2007 Karsten Hopp 7.0.192-1 +- patchlevel 192 +- test fix for highlighting problems with curly brackets in #define (#203577) + +* Tue Feb 06 2007 Karsten Hopp 7.0.191-2 +- uses ncurses instead of ncursesw + +* Tue Feb 06 2007 Karsten Hopp 7.0.191-1 +- patchlevel 191 +- clean up spec file for rpmlint +- drop cvim stuff + +* Tue Jan 23 2007 Karsten Hopp 7.0.188-3 +- patchlevel 188 + +* Mon Jan 08 2007 Karsten Hopp 7.0.178-3 +- enable filetype plugin + +* Thu Dec 14 2006 Karsten Hopp 7.0.178-2 +- build vim-minimal with features=small instead of tiny (#219605) + +* Tue Dec 12 2006 Karsten Hopp 7.0.178-1 +- add vimfiles/after to list of owned directories + +* Tue Dec 12 2006 Karsten Hopp 7.0.178-1 +- patchlevel 178 +- use macros +- Resolves: #219154 + add directory /usr/share/vim/vimfiles for plugins + +* Thu Dec 7 2006 Jeremy Katz +- rebuild for python 2.5 + +* Wed Nov 22 2006 Karsten Hopp 7.0.168-1 +- patchlevel 168 +- link with ncurses + +* Tue Nov 21 2006 Karsten Hopp 7.0.164-2 +- patchlevel 164 + +* Mon Nov 13 2006 Karsten Hopp 7.0.162-2 +- fix lang problem in spec file mode +- use old g:packager variable when set + +* Fri Nov 10 2006 Karsten Hopp 7.0.162-1 +- patchlevel 162 + +* Mon Nov 06 2006 Karsten Hopp 7.0.158-1 +- patchlevel 158 + +* Tue Oct 17 2006 Karsten Hopp 7.0.139-1 +- patchlevel 139 +- provide vim, vi (#210950) + +* Thu Sep 28 2006 Jeremy Katz - 7.0.109-3 +- disable vim-spell subpackage as it pushes us over CD boundaries + +* Tue Sep 28 2006 Karsten Hopp 7.0.109-2 +- fix typo in vimspell.sh (#203178) + +* Tue Sep 19 2006 Karsten Hopp 7.0.109-1 +- update to patchlevel 109 to fix some redraw problems +- fix invisible comments in diff mode (#204042) + +* Tue Sep 12 2006 Karsten Hopp 7.0.100-1 +- Patchlevel 100 +- replace runtime files with newer ones + +* Mon Sep 11 2006 Karsten Hopp 7.0.099-1 +- Patchlevel 99 + +* Mon Sep 05 2006 Karsten Hopp 7.0.086-1 +- Patchlevel 86 + +* Mon Sep 04 2006 Karsten Hopp 7.0.083-1 +- Patchlevel 83 + +* Wed Aug 30 2006 Karsten Hopp 7.0.076-1 +- Patchlevel 76 + +* Thu Aug 25 2006 Karsten Hopp 7.0.066-2 +- fix vimdiff colors (#204042) + +* Thu Aug 24 2006 Karsten Hopp 7.0.066-1 +- fix syntax patch (#203798) +- patchlevel 66 + +* Wed Aug 17 2006 Karsten Hopp 7.0.063-1 +- Patchlevel 63 + +* Wed Aug 15 2006 Karsten Hopp 7.0.053-1 +- Patchlevel 53 +- Buildrequires libXpm-devel + +* Wed Aug 09 2006 Karsten Hopp 7.0.050-1 +- Patchlevel 50 + +* Thu Aug 03 2006 Karsten Hopp 7.0.042-2 +- clean up spec file + +* Mon Jul 24 2006 Karsten Hopp 7.0.042-1 +- patchlevel 42 + +* Wed Jul 20 2006 Karsten Hopp 7.0.039-1 +- patchlevel 39 +- allow usage of $VIM variable (#199465) + +* Wed Jul 12 2006 Jesse Keating - 2:7.0.035-1.1 +- rebuild + +* Tue Jun 27 2006 Karsten Hopp 7.0.035-1 +- patchlevel 35 + +* Wed Jun 21 2006 Karsten Hopp 7.0.022-2 +- add binfmt_misc rpc_pipefs to fstypes for better mtab highlighting + +* Tue Jun 20 2006 Karsten Hopp 7.0.022-1 +- patchlevel 22 + +* Tue Jun 20 2006 Karsten Hopp 7.0.020-1 +- patchlevel 20 + +* Tue Jun 20 2006 Karsten Hopp 7.0.019-1 +- patchlevel 19 +- buildrequire autoconf + +* Tue May 30 2006 Karsten Hopp 7.0.017-1 +- patchlevel 17, although it affects just the Motif version +- own some directories (#192787) + +* Sat May 13 2006 Karsten Hopp 7.0.016-1 +- patchlevel 016 + +* Fri May 12 2006 Karsten Hopp 7.0.012-1 +- patchlevel 012 + +* Thu May 11 2006 Karsten Hopp 7.0.010-1 +- patchlevel 010 + +* Wed May 10 2006 Karsten Hopp 7.0.005-2 +- patchlevel 005 +- move older changelogs (<7.0) into a file, no need to keep them + in the rpm database + +* Tue May 09 2006 Karsten Hopp 7.0.000-2 +- bump epoch, the buildsystem thinks 7.0.000-2 is older than 7.0.g001-1 + although rpm is quite happy with it. + +* Mon May 08 2006 Karsten Hopp 7.0.000-1 +- vim-7.0 +- Spell checking support for about 50 languages +- Intelligent completion for C, HTML, Ruby, Python, PHP, etc. +- Tab pages, each containing multiple windows +- Undo branches: never accidentally lose text again +- Vim script supports Lists and Dictionaries (similar to Python) +- Vim script profiling +- Improved Unicode support +- Highlighting of cursor line, cursor column and matching braces +- Translated manual pages support. +- Internal grep; works on all platforms, searches compressed files +- Browsing remote directories, zip and tar archives +- Printing multi-byte text +- find details about the changes since vim-6.4 with :help version7 + +- fix SE Linux context of temporary (.swp) files (#189968) +- /bin/vi /vim-minimal is now using /etc/virc to avoid .rpmnew files + when updating + +* Tue May 02 2006 Karsten Hopp 7.0.g001-1 +- vim-7.0g BETA + +* Fri Apr 28 2006 Karsten Hopp 7.0.f001-1 +- vim-7.0f3 BETA + +* Thu Apr 20 2006 Karsten Hopp 7.0.e001-1 +- vim-7.0e BETA + +* Tue Apr 11 2006 Karsten Hopp 7.0.d001-1 +- vim-7.0d BETA + +* Fri Apr 07 2006 Karsten Hopp 7.0c.000-3 +- fix vimrc filename + +* Thu Apr 06 2006 Karsten Hopp 7.0c.000-2 +- new snapshot + +* Tue Apr 04 2006 Karsten Hopp 7.0c.000-1 +- vim-7.0c BETA + +* Wed Mar 22 2006 Karsten Hopp 7.0aa.000-3 +- Rawhide build as vim, opposed to vim7 (prerelease) +- conflict with older man-pages-{it,fr} packages +- cleanup lang stuff + +* Thu Mar 16 2006 Karsten Hopp 7.0aa.000-2 +- make it coexist with vim-6 (temporarily) +- new CVS snapshot + +* Tue Mar 14 2006 Karsten Hopp 7.0aa.000-1 +- vim7 pre Release +- older changelogs available in Changelog.rpm +* Thu Mar 09 2006 Karsten Hopp 6.4.007-4 +- fix configure check for python (#184478) + +* Thu Mar 09 2006 Karsten Hopp 6.4.007-3 +- rebuild + +* Mon Feb 20 2006 Karsten Hopp 6.4.007-2 +- gtk-update-icon-cache --ignore-theme-index + (avoids %%post failures when hicolor-icon-theme isn't installed) + +* Wed Feb 15 2006 Karsten Hopp 6.4.007-1 +- fix vim.csh script (#180429) +- patchlevel 7 + +* Fri Feb 10 2006 Jesse Keating - 1:6.4.006-1.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 1:6.4.006-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Jan 02 2006 Karsten Hopp 6.4.006-1 +- patchlevel 6, fixes bz# 175048 + +* Tue Dec 20 2005 Karsten Hopp 6.4.004-2 +- disable templates when editing new .c / .h files (#175878) + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Dec 08 2005 Karsten Hopp 6.4.004-1 +- fix fstab syntax file (#174735) +- patchlevel 4 + +* Wed Nov 30 2005 Karsten Hopp 6.4.003-1 +- patchlevel 3 +- remove withgui switch as we include vim-X11 in all our distributions now + (#174271) + +* Fri Nov 25 2005 Karsten Hopp 6.4.000-4 +- enable tmpfile patch + +* Thu Oct 27 2005 Karsten Hopp 6.4.000-3 +- test build + +* Tue Oct 25 2005 Karsten Hopp 6.4.000-2 +- use %%{_sysconfdir} (#171556) +- add syntax highlighting rule for %%check (Ralf Ertzinger, #165277) + +* Mon Oct 17 2005 Karsten Hopp 6.4.000-1 +- vim-6.4 patchlevel 0 + diff --git a/README.patches b/README.patches new file mode 100644 index 00000000..c7e422a3 --- /dev/null +++ b/README.patches @@ -0,0 +1,179 @@ +Patches for Vim - Vi IMproved 7.2 + +The files in this directory contain source code changes to fix +problems in released versions of Vim. Each file also contains an +explanation of the problem that is fixed, like the message that +was sent to the vim-dev maillist. + +The best is to apply the patches in sequence. This avoids problems +when a patch depends on a previous patch. If you did not unpack the +extra archive, you may want to skip patches marked with "(extra)". +Similarly for the "lang" archive. Or ignore errors for missing files. + +Before patching, change to the top Vim directory, where the "src" +and "runtime" directories are located. +Depending on the version of "patch" that you use, you may have add +an argument to make it patch the right file: + patch -p < 7.2.001 + patch -p0 < 7.2.001 + +After applying a patch, you need to compile Vim. There are no +patches for binaries. + +Checksums for the patch files can be found in the file MD5. + +Collection of patches for Vim 7.2: + SIZE NAME INCLUDES +108889 7.2.001-100.gz patches 7.2.001 to 7.2.100, gzip'ed + +Individual patches for Vim 7.2: + + SIZE NAME FIXES + 1877 7.2.001 Mac: pseudo-ttys don't work properly on Leopard + 1462 7.2.002 leaking memory when displaying menus + 3663 7.2.003 typo in translated message, message not translated + 3413 7.2.004 Cscope help message is not translated + 4638 7.2.005 a few problems when profiling + 1552 7.2.006 HTML files are not recognized by contents + 16735 7.2.007 (extra) minor issues for VMS + 1947 7.2.008 wrong window count when using :bunload in a BufHidden autocmd + 2245 7.2.009 can't compile with Perl 5.10 on MS-aindows + 5415 7.2.010 "K" in Visual mode does not properly escape all characters + 2873 7.2.011 error when inserting a float value from expression register + 1444 7.2.012 compiler warnings when building with startup timing + 4157 7.2.013 hang when waiting for X selection, consuming lots of CPU time + 1769 7.2.014 synstack() doesn't work in an emptly line + 1943 7.2.015 "make all test install" doesn't stop when the test fails + 4536 7.2.016 cmdline completion pattern can be in freed memory + 5319 7.2.017 X11: strlen() used wrongly, pasting very big selection fails + 1390 7.2.018 memory leak when substitute is aborted + 2269 7.2.019 completion and exists() don't work for ":noautocmd" + 1521 7.2.020 "kvim" starts the GUI even though KDE is no longer supported + 4806 7.2.021 getting full file name when executing autocmds may be slow + 3823 7.2.022 (extra) cannot run tests with the MingW compiler + 2062 7.2.023 'cursorcolumn' wrong in a closed fold when display is shifted + 1452 7.2.024 'history' can be made negative, causes out-of-memory error + 1470 7.2.025 a CursorHold event that invokes system() is retriggered + 2969 7.2.026 (after 7.2.010) 'K' uses the rest of the line + 3235 7.2.027 can use cscope commands in the sandbox, might not be safe + 1466 7.2.028 confusing error message for missing () + 1291 7.2.029 no completion for ":doautoall" like for ":doautocmd" + 1546 7.2.030 (after 7.2.027) can't compile, ex_oldfiles undefined + 39400 7.2.031 file names from viminfo are not available to the user + 1583 7.2.032 (after 7.2.031) can't compile with EXITFREE defined + 2270 7.2.033 using "ucs-2le" for two-byte BOM, but text might be "utf-16le" + 2372 7.2.034 memory leak in spell info when deleting a buffer + 3522 7.2.035 mismatches for library and Vim alloc/free functions + 7545 7.2.036 (extra) mismatches for library and Vim alloc/free functions + 1576 7.2.037 double free with GTK 1 and compiled with EXITFREE + 2438 7.2.038 overlapping arguments to memcpy() + 1378 7.2.039 accessing freed memory on exit when EXITFREE is defined + 1836 7.2.040 ":e ++ff=dos foo" gets "unix" 'ff' when CR before NL missing + 22993 7.2.041 (extra) diff wrong when edit diff buffer in another tab page + 4987 7.2.042 restoring view in autocmd sometimes doesn't work completely + 2550 7.2.043 VMS: Too many chars escaped in filename and shell commands + 5639 7.2.044 crash because of gcc 4 being over protective for strcpy() + 2056 7.2.045 the Python interface has an empty entry in sys.path + 1704 7.2.046 wrong check for filling buffer with encoding + 2470 7.2.047 using -nb while it is not supported makes other side hang + 4758 7.2.048 v:count and v:prevcount are not set correctly + 32552 7.2.049 (extra) Win32: the clipboard doesn't support UTF-16 + 8484 7.2.050 compiler warnings for not using return value of fwrite() + 15179 7.2.051 can't avoid 'wig' and 'suffixes' for glob() and globpath() + 2611 7.2.052 synIDattr() doesn't support "sp" for special color + 1754 7.2.053 crash when using WorkShop command ":ws foo" + 2006 7.2.054 compilation warnings for fprintf format + 34319 7.2.055 various compiler warnings with strict checking + 1635 7.2.056 (after 7.2.050) tests 58 and 59 fail + 3210 7.2.057 (after 7.2.056) trying to put size_t in int variable + 2338 7.2.058 can't add a feature name in the :version output + 1847 7.2.059 diff is not always displayed properly + 34772 7.2.060 spell checking doesn't work well for compound words + 1886 7.2.061 creating funcref requires loading the autoload script first + 1657 7.2.062 "[Scratch]" is not translated + 3558 7.2.063 warning for NULL argument of Perl_sys_init3() + 1942 7.2.064 repeating "~" on a Visual block doesn't always update screen + 5149 7.2.065 GTK GUI: cursor disappears doing ":vsp" when maximized + 2759 7.2.066 not easy to check if 'encoding' is a multi-byte encoding + 1683 7.2.067 can't load sesison extra file when it contains special chars + 2598 7.2.068 error when Emacs tags file line is too long + 1726 7.2.069 (after 7.2.060) compiler warning for putting size_t in int + 17606 7.2.070 crash when a function returns a:000 + 2353 7.2.071 (extra) Win32: Handling netbeans events may cause a crash + 1615 7.2.072 (extra, fixed patch) compiler warning in Sniff code + 4121 7.2.073 ":set " has the same output as ":set " + 1832 7.2.074 (extra, after 7.2.073) extra part of 7.2.073 + 2218 7.2.075 (after 7.2.058) unclear comment about making a diff + 2666 7.2.076 rename(from, to) deletes file if names refer to the same file + 4745 7.2.077 (after 7.2.076) rename() fails if names differ only in case + 3298 7.2.078 problems with deleting folds + 6947 7.2.079 "killed" netbeans events are not handled correctly + 9942 7.2.080 accessing wrong memory with completion and composing char + 1728 7.2.081 compiler warning for float overflow on VAX + 2134 7.2.082 if 'ff' is "mac" then "ga" on a ^J shows 0x0d instead of 0x0a + 1733 7.2.083 ":tag" doesn't return to the right tag entry in the tag stack + 4331 7.2.084 Python: vim.eval() is wrong for recursive structures + 1862 7.2.085 ":set =b" does not work when 'encoding' is utf-8 + 3045 7.2.086 using ":diffget 1" in buffer 1 corrupts the text + 1570 7.2.087 adding URL to 'path' doesn't work to edit a file + 2895 7.2.088 (extra) Win32: Using the clipboard sometimes fails + 2473 7.2.089 (extra) Win32: crash when using Ultramon buttons + 3286 7.2.090 user command containing 0x80 does not work properly + 2113 7.2.091 ":cs help" output is not aligned for some languages + 4538 7.2.092 some error messages are not translated + 7287 7.2.093 (extra) dialogs can't always handle multi-byte text + 3430 7.2.094 compiler warning for signed/unsigned compare, typos + 1902 7.2.095 using "r" and then CTRL-C Visual highlighting is not removed + 1464 7.2.096 after ":number" "Press Enter" msg may be on the wrong screen + 1692 7.2.097 "!xterm&" doesn't work when 'shell' is "bash" + 1864 7.2.098 warning for signed/unsigned pointer + 3498 7.2.099 unnecessary redraw when changing GUI options in terminal + 3846 7.2.100 missing first three bytes on sourced FIFO + 1362 7.2.101 (extra) MSVC version not recognized + 1496 7.2.102 (after 7.2.100) BOM at start of Vim script not removed + 5153 7.2.103 tab page line isn't always updated, e.g. when 'bomb' is set + 1523 7.2.104 after ":saveas foo" the tab label isn't updated right away + 2159 7.2.105 modeline setting for 'foldmethod' overrules diff options + 3422 7.2.106 endless loop for "]s" in HTML when there are no misspellings + 1825 7.2.107 After a GUI dialog ":echo" messages are deleted + 1622 7.2.108 (after 7.2.105) can't compile without the diff feature + 11901 7.2.109 'langmap' does not work for multi-byte characters + 1407 7.2.110 compiler warning for unused variable + 2724 7.2.111 selection unclear for Visual block mode with 'cursorcolumn' + 1509 7.2.112 cursor invisible in first col in Visual mode if 'number' set + 2700 7.2.113 crash when using submatch() in substitute() + 2531 7.2.114 using wrong printf format: %d instead of %ld + 2716 7.2.115 some debugging code is never used + 1619 7.2.116 not all memory is freed when EXITFREE is defined + 2592 7.2.117 location list incorrectly labelled "Quickfix List" + 2068 7.2.118 at the more prompt only does half a page + 1550 7.2.119 status line is redrawn too often + 8305 7.2.120 location list is copied and then deleted when opening window + 4993 7.2.121 can't stop output of "!grep a *.c" in gvim with CTRL-C + 2472 7.2.122 invalid mem access if VimResized autocmd changes screen size + 1568 7.2.123 ":map" output continues after typing 'q' at more prompt + 3127 7.2.124 ":tselect" output continues after typing 'q' at more prompt + 3936 7.2.125 leaking memory when reading XPM bitmap for a sign + 4326 7.2.126 when EXITFREE is defined signs and keymaps are not freed + 1708 7.2.127 get another more prompt after typing 'q' + 1537 7.2.128 (after 7.2.055) ":lcd" causes invalid session file + 2229 7.2.129 opening command window from input() uses the search history + 12852 7.2.130 Vim may haing until CTRL-C is typed when using CTRL-Z + 2612 7.2.131 using wrong cursor highlighting after clearing 'keymap' + 7823 7.2.132 accessing freed memory when changing dir in SwapExists autocmd + 1665 7.2.133 ":diffoff!" changes settings in windows not in diff mode + 2314 7.2.134 compiler warnings for discarding "const" from pointer + 1991 7.2.135 memory leak when redefining user command with complete arg + 1326 7.2.136 (after 7.2.132) ":cd" still possible in SwapExists autocmd + 11328 7.2.137 wrong left shift of blockwise selection in tab when 've' set + 5428 7.2.138 extra part of 7.2.137 + 2229 7.2.139 crash when 'virtualedit' is "all" + 1974 7.2.140 diff highlighting missing if Visual area starts at cursor pos + 6622 7.2.141 fixing bold spill redraws too many characters + 1753 7.2.142 Motif and Athena balloons don't use tooltip colors + 6830 7.2.143 no command line completion for ":cscope" command + 2304 7.2.144 colorscheme is reloaded when 't_Co' is set to the same value + 3379 7.2.145 white space in ":cscope find" is not ignored + 3394 7.2.146 v:warningmsg isn't used for all warnings + 1548 7.2.147 cursor in wrong position after Tab for small version + 4275 7.2.148 highlighting a character after the line doesn't always work diff --git a/ci.fmf b/ci.fmf deleted file mode 100644 index c5aa0e08..00000000 --- a/ci.fmf +++ /dev/null @@ -1 +0,0 @@ -resultsdb-testcase: separate diff --git a/filetype.vim b/filetype.vim new file mode 100644 index 00000000..81d4db30 --- /dev/null +++ b/filetype.vim @@ -0,0 +1,2449 @@ +" Vim support file to detect file types +" +" Maintainer: Bram Moolenaar +" Last Change: 2008 Nov 01 + +" Listen very carefully, I will say this only once +if exists("did_load_filetypes") + finish +endif +let did_load_filetypes = 1 + +" Line continuation is used here, remove 'C' from 'cpoptions' +let s:cpo_save = &cpo +set cpo&vim + +augroup filetypedetect + +" Ignored extensions +if exists("*fnameescape") +au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew + \ exe "doau filetypedetect BufRead " . fnameescape(expand(":r")) +au BufNewFile,BufRead *~ + \ let s:name = expand("") | + \ let s:short = substitute(s:name, '\~$', '', '') | + \ if s:name != s:short && s:short != "" | + \ exe "doau filetypedetect BufRead " . fnameescape(s:short) | + \ endif | + \ unlet! s:name s:short +au BufNewFile,BufRead ?\+.in + \ if expand(":t") != "configure.in" | + \ exe "doau filetypedetect BufRead " . fnameescape(expand(":r")) | + \ endif +elseif &verbose > 0 + echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()" +endif + +" Pattern used to match file names which should not be inspected. +" Currently finds compressed files. +if !exists("g:ft_ignore_pat") + let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$' +endif + +" Function used for patterns that end in a star: don't set the filetype if the +" file name matches ft_ignore_pat. +func! s:StarSetf(ft) + if expand("") !~ g:ft_ignore_pat + exe 'setf ' . a:ft + endif +endfunc + +" Abaqus or Trasys +au BufNewFile,BufRead *.inp call s:Check_inp() + +func! s:Check_inp() + if getline(1) =~ '^\*' + setf abaqus + else + let n = 1 + if line("$") > 500 + let nmax = 500 + else + let nmax = line("$") + endif + while n <= nmax + if getline(n) =~? "^header surface data" + setf trasys + break + endif + let n = n + 1 + endwhile + endif +endfunc + +" A-A-P recipe +au BufNewFile,BufRead *.aap setf aap + +" A2ps printing utility +au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps + +" ABAB/4 +au BufNewFile,BufRead *.abap setf abap + +" ABC music notation +au BufNewFile,BufRead *.abc setf abc + +" ABEL +au BufNewFile,BufRead *.abl setf abel + +" AceDB +au BufNewFile,BufRead *.wrm setf acedb + +" Ada (83, 9X, 95) +au BufNewFile,BufRead *.adb,*.ads,*.ada setf ada +if has("vms") + au BufNewFile,BufRead *.gpr,*.ada_m,*.adc setf ada +else + au BufNewFile,BufRead *.gpr setf ada +endif + +" AHDL +au BufNewFile,BufRead *.tdf setf ahdl + +" AMPL +au BufNewFile,BufRead *.run setf ampl + +" Ant +au BufNewFile,BufRead build.xml setf ant + +" Apache style config file +au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle') + +" Apache config file +au BufNewFile,BufRead .htaccess setf apache +au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf* call s:StarSetf('apache') + +" XA65 MOS6510 cross assembler +au BufNewFile,BufRead *.a65 setf a65 + +" Applescript +au BufNewFile,BufRead *.scpt setf applescript + +" Applix ELF +au BufNewFile,BufRead *.am + \ if expand("") !~? 'Makefile.am\>' | setf elf | endif + +" ALSA configuration +au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf setf alsaconf + +" Arc Macro Language +au BufNewFile,BufRead *.aml setf aml + +" Arch Inventory file +au BufNewFile,BufRead .arch-inventory,=tagging-method setf arch + +" ART*Enterprise (formerly ART-IM) +au BufNewFile,BufRead *.art setf art + +" ASN.1 +au BufNewFile,BufRead *.asn,*.asn1 setf asn + +" Active Server Pages (with Visual Basic Script) +au BufNewFile,BufRead *.asa + \ if exists("g:filetype_asa") | + \ exe "setf " . g:filetype_asa | + \ else | + \ setf aspvbs | + \ endif + +" Active Server Pages (with Perl or Visual Basic Script) +au BufNewFile,BufRead *.asp + \ if exists("g:filetype_asp") | + \ exe "setf " . g:filetype_asp | + \ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" | + \ setf aspperl | + \ else | + \ setf aspvbs | + \ endif + +" Grub (must be before catch *.lst) +au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf setf grub + +" Assembly (all kinds) +" *.lst is not pure assembly, it has two extra columns (address, byte codes) +au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst call s:FTasm() + +" This function checks for the kind of assembly that is wanted by the user, or +" can be detected from the first five lines of the file. +func! s:FTasm() + " make sure b:asmsyntax exists + if !exists("b:asmsyntax") + let b:asmsyntax = "" + endif + + if b:asmsyntax == "" + call s:FTasmsyntax() + endif + + " if b:asmsyntax still isn't set, default to asmsyntax or GNU + if b:asmsyntax == "" + if exists("g:asmsyntax") + let b:asmsyntax = g:asmsyntax + else + let b:asmsyntax = "asm" + endif + endif + + exe "setf " . fnameescape(b:asmsyntax) +endfunc + +func! s:FTasmsyntax() + " see if file contains any asmsyntax=foo overrides. If so, change + " b:asmsyntax appropriately + let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4). + \" ".getline(5)." " + let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s') + if match != '' + let b:asmsyntax = match + elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library')) + let b:asmsyntax = "vmasm" + endif +endfunc + +" Macro (VAX) +au BufNewFile,BufRead *.mar setf vmasm + +" Atlas +au BufNewFile,BufRead *.atl,*.as setf atlas + +" Autoit v3 +au BufNewFile,BufRead *.au3 setf autoit + +" Autohotkey +au BufNewFile,BufRead *.ahk setf autohotkey + +" Automake +au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am setf automake + +" Autotest .at files are actually m4 +au BufNewFile,BufRead *.at setf m4 + +" Avenue +au BufNewFile,BufRead *.ave setf ave + +" Awk +au BufNewFile,BufRead *.awk setf awk + +" B +au BufNewFile,BufRead *.mch,*.ref,*.imp setf b + +" BASIC or Visual Basic +au BufNewFile,BufRead *.bas call s:FTVB("basic") + +" Check if one of the first five lines contains "VB_Name". In that case it is +" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype. +func! s:FTVB(alt) + if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)' + setf vb + else + exe "setf " . a:alt + endif +endfunc + +" Visual Basic Script (close to Visual Basic) +au BufNewFile,BufRead *.vbs,*.dsm,*.ctl setf vb + +" IBasic file (similar to QBasic) +au BufNewFile,BufRead *.iba,*.ibi setf ibasic + +" FreeBasic file (similar to QBasic) +au BufNewFile,BufRead *.fb,*.bi setf freebasic + +" Batch file for MSDOS. +au BufNewFile,BufRead *.bat,*.sys setf dosbatch +" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd. +au BufNewFile,BufRead *.cmd + \ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif + +" Batch file for 4DOS +au BufNewFile,BufRead *.btm call s:FTbtm() +func! s:FTbtm() + if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm + setf dosbatch + else + setf btm + endif +endfunc + +" BC calculator +au BufNewFile,BufRead *.bc setf bc + +" BDF font +au BufNewFile,BufRead *.bdf setf bdf + +" BibTeX bibliography database file +au BufNewFile,BufRead *.bib setf bib + +" BibTeX Bibliography Style +au BufNewFile,BufRead *.bst setf bst + +" BIND configuration +au BufNewFile,BufRead named.conf,rndc.conf setf named + +" BIND zone +au BufNewFile,BufRead named.root setf bindzone +au BufNewFile,BufRead *.db call s:BindzoneCheck('') + +func! s:BindzoneCheck(default) + if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA' + setf bindzone + elseif a:default != '' + exe 'setf ' . a:default + endif +endfunc + +" Blank +au BufNewFile,BufRead *.bl setf blank + +" Blkid cache file +au BufNewFile,BufRead /etc/blkid.tab,/etc/blkid.tab.old setf xml + +" C or lpc +au BufNewFile,BufRead *.c call s:FTlpc() + +func! s:FTlpc() + if exists("g:lpc_syntax_for_c") + let lnum = 1 + while lnum <= 12 + if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)' + setf lpc + return + endif + let lnum = lnum + 1 + endwhile + endif + setf c +endfunc + +" Calendar +au BufNewFile,BufRead calendar setf calendar +au BufNewFile,BufRead */.calendar/*, + \*/share/calendar/*/calendar.*,*/share/calendar/calendar.* + \ call s:StarSetf('calendar') + +" C# +au BufNewFile,BufRead *.cs setf cs + +" Cdrdao TOC +au BufNewFile,BufRead *.toc setf cdrtoc + +" Cdrdao config +au BufNewFile,BufRead etc/cdrdao.conf,etc/defaults/cdrdao,etc/default/cdrdao,~/.cdrdao setf cdrdaoconf + +" Cfengine +au BufNewFile,BufRead cfengine.conf setf cfengine + +" Comshare Dimension Definition Language +au BufNewFile,BufRead *.cdl setf cdl + +" Conary Recipe +au BufNewFile,BufRead *.recipe setf conaryrecipe + +" Controllable Regex Mutilator +au BufNewFile,BufRead *.crm setf crm + +" Cyn++ +au BufNewFile,BufRead *.cyn setf cynpp + +" Cynlib +" .cc and .cpp files can be C++ or Cynlib. +au BufNewFile,BufRead *.cc + \ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif +au BufNewFile,BufRead *.cpp + \ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif + +" C++ +au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp +if has("fname_case") + au BufNewFile,BufRead *.C,*.H setf cpp +endif + +" .h files can be C, Ch C++, ObjC or ObjC++. +" Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is +" detected automatically. +au BufNewFile,BufRead *.h call s:FTheader() + +func! s:FTheader() + if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1 + setf objc + elseif exists("g:c_syntax_for_h") + setf c + elseif exists("g:ch_syntax_for_h") + setf ch + else + setf cpp + endif +endfunc + +" Ch (CHscript) +au BufNewFile,BufRead *.chf setf ch + +" TLH files are C++ headers generated by Visual C++'s #import from typelibs +au BufNewFile,BufRead *.tlh setf cpp + +" Cascading Style Sheets +au BufNewFile,BufRead *.css setf css + +" Century Term Command Scripts (*.cmd too) +au BufNewFile,BufRead *.con setf cterm + +" Changelog +au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch + \ setf debchangelog + +au BufNewFile,BufRead [cC]hange[lL]og + \ if getline(1) =~ '; urgency=' + \| setf debchangelog + \| else + \| setf changelog + \| endif + +au BufNewFile,BufRead NEWS + \ if getline(1) =~ '; urgency=' + \| setf debchangelog + \| endif + +" CHILL +au BufNewFile,BufRead *..ch setf chill + +" Changes for WEB and CWEB or CHILL +au BufNewFile,BufRead *.ch call s:FTchange() + +" This function checks if one of the first ten lines start with a '@'. In +" that case it is probably a change file. +" If the first line starts with # or ! it's probably a ch file. +" If a line has "main", "include", "//" ir "/*" it's probably ch. +" Otherwise CHILL is assumed. +func! s:FTchange() + let lnum = 1 + while lnum <= 10 + if getline(lnum)[0] == '@' + setf change + return + endif + if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!') + setf ch + return + endif + if getline(lnum) =~ "MODULE" + setf chill + return + endif + if getline(lnum) =~ 'main\s*(\|#\s*include\|//' + setf ch + return + endif + let lnum = lnum + 1 + endwhile + setf chill +endfunc + +" ChordPro +au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro setf chordpro + +" Clean +au BufNewFile,BufRead *.dcl,*.icl setf clean + +" Clever +au BufNewFile,BufRead *.eni setf cl + +" Clever or dtd +au BufNewFile,BufRead *.ent call s:FTent() + +func! s:FTent() + " This function checks for valid cl syntax in the first five lines. + " Look for either an opening comment, '#', or a block start, '{". + " If not found, assume SGML. + let lnum = 1 + while lnum < 6 + let line = getline(lnum) + if line =~ '^\s*[#{]' + setf cl + return + elseif line !~ '^\s*$' + " Not a blank line, not a comment, and not a block start, + " so doesn't look like valid cl code. + break + endif + let lnum = lnum + 1 + endw + setf dtd +endfunc + +" Clipper (or FoxPro; could also be eviews) +au BufNewFile,BufRead *.prg + \ if exists("g:filetype_prg") | + \ exe "setf " . g:filetype_prg | + \ else | + \ setf clipper | + \ endif + +" Cmake +au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in setf cmake + +" Cmusrc +au BufNewFile,BufRead ~/.cmus/{autosave,rc,command-history,*.theme} setf cmusrc +au BufNewFile,BufRead */cmus/{rc,*.theme} setf cmusrc + +" Cobol +au BufNewFile,BufRead *.cbl,*.cob,*.lib setf cobol +" cobol or zope form controller python script? (heuristic) +au BufNewFile,BufRead *.cpy + \ if getline(1) =~ '^##' | + \ setf python | + \ else | + \ setf cobol | + \ endif + +" Coco/R +au BufNewFile,BufRead *.atg setf coco + +" Cold Fusion +au BufNewFile,BufRead *.cfm,*.cfi,*.cfc setf cf + +" Configure scripts +au BufNewFile,BufRead configure.in,configure.ac setf config + +" CUDA Cumpute Unified Device Architecture +au BufNewFile,BufRead *.cu setf cuda + +" WildPackets EtherPeek Decoder +au BufNewFile,BufRead *.dcd setf dcd + +" Enlightenment configuration files +au BufNewFile,BufRead *enlightenment/*.cfg setf c + +" Eterm +au BufNewFile,BufRead *Eterm/*.cfg setf eterm + +" Lynx config files +au BufNewFile,BufRead lynx.cfg setf lynx + +" Quake +au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg setf quake +au BufNewFile,BufRead *quake[1-3]/*.cfg setf quake + +" Quake C +au BufNewFile,BufRead *.qc setf c + +" Configure files +au BufNewFile,BufRead *.cfg setf cfg + +" Communicating Sequential Processes +au BufNewFile,BufRead *.csp,*.fdr setf csp + +" CUPL logic description and simulation +au BufNewFile,BufRead *.pld setf cupl +au BufNewFile,BufRead *.si setf cuplsim + +" Debian Control +au BufNewFile,BufRead */debian/control setf debcontrol +au BufNewFile,BufRead control + \ if getline(1) =~ '^Source:' + \| setf debcontrol + \| endif + +" Debian Sources.list +au BufNewFile,BufRead /etc/apt/sources.list setf debsources + +" Deny hosts +au BufNewFile,BufRead denyhosts.conf setf denyhosts + +" ROCKLinux package description +au BufNewFile,BufRead *.desc setf desc + +" the D language or dtrace +au BufNewFile,BufRead *.d call s:DtraceCheck() + +func! s:DtraceCheck() + let lines = getline(1, min([line("$"), 100])) + if match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1 + setf dtrace + else + setf d + endif +endfunc + +" Desktop files +au BufNewFile,BufRead *.desktop,.directory setf desktop + +" Dict config +au BufNewFile,BufRead dict.conf,.dictrc setf dictconf + +" Dictd config +au BufNewFile,BufRead dictd.conf setf dictdconf + +" Diff files +au BufNewFile,BufRead *.diff,*.rej,*.patch setf diff + +" Dircolors +au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS setf dircolors + +" Diva (with Skill) or InstallShield +au BufNewFile,BufRead *.rul + \ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' | + \ setf ishd | + \ else | + \ setf diva | + \ endif + +" DCL (Digital Command Language - vms) or DNS zone file +au BufNewFile,BufRead *.com call s:BindzoneCheck('dcl') + +" DOT +au BufNewFile,BufRead *.dot setf dot + +" Dylan - lid files +au BufNewFile,BufRead *.lid setf dylanlid + +" Dylan - intr files (melange) +au BufNewFile,BufRead *.intr setf dylanintr + +" Dylan +au BufNewFile,BufRead *.dylan setf dylan + +" Microsoft Module Definition +au BufNewFile,BufRead *.def setf def + +" Dracula +au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe setf dracula + +" dsl +au BufNewFile,BufRead *.dsl setf dsl + +" DTD (Document Type Definition for XML) +au BufNewFile,BufRead *.dtd setf dtd + +" EDIF (*.edf,*.edif,*.edn,*.edo) +au BufNewFile,BufRead *.ed\(f\|if\|n\|o\) setf edif + +" Embedix Component Description +au BufNewFile,BufRead *.ecd setf ecd + +" Eiffel or Specman +au BufNewFile,BufRead *.e,*.E call s:FTe() + +" Elinks configuration +au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks + +func! s:FTe() + let n = 1 + while n < 100 && n < line("$") + if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$" + setf specman + return + endif + let n = n + 1 + endwhile + setf eiffel +endfunc + +" ERicsson LANGuage; Yaws is erlang too +au BufNewFile,BufRead *.erl,*.hrl,*.yaws setf erlang + +" Elm Filter Rules file +au BufNewFile,BufRead filter-rules setf elmfilt + +" ESMTP rc file +au BufNewFile,BufRead *esmtprc setf esmtprc + +" ESQL-C +au BufNewFile,BufRead *.ec,*.EC setf esqlc + +" Esterel +au BufNewFile,BufRead *.strl setf esterel + +" Essbase script +au BufNewFile,BufRead *.csc setf csc + +" Exim +au BufNewFile,BufRead exim.conf setf exim + +" Expect +au BufNewFile,BufRead *.exp setf expect + +" Exports +au BufNewFile,BufRead exports setf exports + +" Factor +au BufNewFile,BufRead *.factor setf factor + +" Fetchmail RC file +au BufNewFile,BufRead .fetchmailrc setf fetchmail + +" FlexWiki +au BufNewFile,BufRead *.wiki setf flexwiki + +" Focus Executable +au BufNewFile,BufRead *.fex,*.focexec setf focexec + +" Focus Master file (but not for auto.master) +au BufNewFile,BufRead auto.master setf conf +au BufNewFile,BufRead *.mas,*.master setf master + +" Forth +au BufNewFile,BufRead *.fs,*.ft setf forth + +" Reva Forth +au BufNewFile,BufRead *.frt setf reva + +" Fortran +if has("fname_case") + au BufNewFile,BufRead *.F,*.FOR,*.FPP,*.FTN,*.F77,*.F90,*.F95 setf fortran +endif +au BufNewFile,BufRead *.f,*.for,*.fortran,*.fpp,*.ftn,*.f77,*.f90,*.f95 setf fortran + +" Framescript +au BufNewFile,BufRead *.fsl setf framescript + +" FStab +au BufNewFile,BufRead fstab,mtab setf fstab + +" GDB command files +au BufNewFile,BufRead .gdbinit setf gdb + +" GDMO +au BufNewFile,BufRead *.mo,*.gdmo setf gdmo + +" Gedcom +au BufNewFile,BufRead *.ged setf gedcom + +" Git +autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit +autocmd BufNewFile,BufRead *.git/config,.gitconfig setf gitconfig +autocmd BufNewFile,BufRead git-rebase-todo setf gitrebase +autocmd BufNewFile,BufRead .msg.[0-9]* + \ if getline(1) =~ '^From.*# This line is ignored.$' | + \ setf gitsendemail | + \ endif +autocmd BufNewFile,BufRead *.git/** + \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' | + \ setf git | + \ endif + +" Gkrellmrc +au BufNewFile,BufRead gkrellmrc,gkrellmrc_? setf gkrellmrc + +" GP scripts (2.0 and onward) +au BufNewFile,BufRead *.gp,.gprc setf gp + +" GPG +au BufNewFile,BufRead */.gnupg/options setf gpg +au BufNewFile,BufRead */.gnupg/gpg.conf setf gpg +au BufNewFile,BufRead /usr/**/gnupg/options.skel setf gpg + +" Gnuplot scripts +au BufNewFile,BufRead *.gpi setf gnuplot + +" GrADS scripts +au BufNewFile,BufRead *.gs setf grads + +" Gretl +au BufNewFile,BufRead *.gretl setf gretl + +" Groovy +au BufNewFile,BufRead *.groovy setf groovy + +" GNU Server Pages +au BufNewFile,BufRead *.gsp setf gsp + +" Group file +au BufNewFile,BufRead /etc/group,/etc/group-,/etc/group.edit,/etc/gshadow,/etc/gshadow-,/etc/gshadow.edit,/var/backups/group.bak,/var/backups/gshadow.bak setf group + +" GTK RC +au BufNewFile,BufRead .gtkrc,gtkrc setf gtkrc + +" Haml +au BufNewFile,BufRead *.haml setf haml + +" Hamster Classic | Playground files +au BufNewFile,BufRead *.hsc,*.hsm setf hamster + +" Haskell +au BufNewFile,BufRead *.hs setf haskell +au BufNewFile,BufRead *.lhs setf lhaskell +au BufNewFile,BufRead *.chs setf chaskell + +" Haste +au BufNewFile,BufRead *.ht setf haste +au BufNewFile,BufRead *.htpp setf hastepreproc + +" Hercules +au BufNewFile,BufRead *.vc,*.ev,*.rs,*.sum,*.errsum setf hercules + +" HEX (Intel) +au BufNewFile,BufRead *.hex,*.h32 setf hex + +" Tilde (must be before HTML) +au BufNewFile,BufRead *.t.html setf tilde + +" HTML (.shtml and .stm for server side) +au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm call s:FThtml() + +" Distinguish between HTML, XHTML and Django +func! s:FThtml() + let n = 1 + while n < 10 && n < line("$") + if getline(n) =~ '\' + setf htmldjango + return + endif + let n = n + 1 + endwhile + setf html +endfunc + +" HTML with Ruby - eRuby +au BufNewFile,BufRead *.erb,*.rhtml setf eruby + +" HTML with M4 +au BufNewFile,BufRead *.html.m4 setf htmlm4 + +" HTML Cheetah template +au BufNewFile,BufRead *.tmpl setf htmlcheetah + +" Host config +au BufNewFile,BufRead /etc/host.conf setf hostconf + +" Hosts access +au BufNewFile,BufRead /etc/hosts.allow,/etc/hosts.deny setf hostsaccess + +" Hyper Builder +au BufNewFile,BufRead *.hb setf hb + +" Icon +au BufNewFile,BufRead *.icn setf icon + +" IDL (Interface Description Language) +au BufNewFile,BufRead *.idl call s:FTidl() + +" Distinguish between standard IDL and MS-IDL +func! s:FTidl() + let n = 1 + while n < 50 && n < line("$") + if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"' + setf msidl + return + endif + let n = n + 1 + endwhile + setf idl +endfunc + +" Microsoft IDL (Interface Description Language) Also *.idl +" MOF = WMI (Windows Management Instrumentation) Managed Object Format +au BufNewFile,BufRead *.odl,*.mof setf msidl + +" Icewm menu +au BufNewFile,BufRead */.icewm/menu setf icemenu + +" Indent profile (must come before IDL *.pro!) +au BufNewFile,BufRead .indent.pro setf indent +au BufNewFile,BufRead indent.pro call s:ProtoCheck('indent') + +" IDL (Interactive Data Language) +au BufNewFile,BufRead *.pro call s:ProtoCheck('idlang') + +" Distinguish between "default" and Cproto prototype file. */ +func! s:ProtoCheck(default) + " Cproto files have a comment in the first line and a function prototype in + " the second line, it always ends in ";". Indent files may also have + " comments, thus we can't match comments to see the difference. + if getline(2) =~ ';$' + setf cpp + else + exe 'setf ' . a:default + endif +endfunc + + +" Indent RC +au BufNewFile,BufRead indentrc setf indent + +" Inform +au BufNewFile,BufRead *.inf,*.INF setf inform + +" Initng +au BufNewFile,BufRead /etc/initng/**/*.i,*.ii setf initng + +" Ipfilter +au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules setf ipfilter + +" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.) +au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl setf fgl + +" .INI file for MSDOS +au BufNewFile,BufRead *.ini setf dosini + +" SysV Inittab +au BufNewFile,BufRead inittab setf inittab + +" Inno Setup +au BufNewFile,BufRead *.iss setf iss + +" JAL +au BufNewFile,BufRead *.jal,*.JAL setf jal + +" Jam +au BufNewFile,BufRead *.jpl,*.jpr setf jam + +" Java +au BufNewFile,BufRead *.java,*.jav setf java + +" JavaCC +au BufNewFile,BufRead *.jj,*.jjt setf javacc + +" JavaScript, ECMAScript +au BufNewFile,BufRead *.js,*.javascript,*.es setf javascript + +" Java Server Pages +au BufNewFile,BufRead *.jsp setf jsp + +" Java Properties resource file (note: doesn't catch font.properties.pl) +au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_?? setf jproperties +au BufNewFile,BufRead *.properties_??_??_* call s:StarSetf('jproperties') + +" Jess +au BufNewFile,BufRead *.clp setf jess + +" Jgraph +au BufNewFile,BufRead *.jgr setf jgraph + +" Kixtart +au BufNewFile,BufRead *.kix setf kix + +" Kimwitu[++] +au BufNewFile,BufRead *.k setf kwt + +" KDE script +au BufNewFile,BufRead *.ks setf kscript + +" Kconfig +au BufNewFile,BufRead Kconfig,Kconfig.debug setf kconfig + +" Lace (ISE) +au BufNewFile,BufRead *.ace,*.ACE setf lace + +" Latte +au BufNewFile,BufRead *.latte,*.lte setf latte + +" Limits +au BufNewFile,BufRead /etc/limits setf limits + +" LambdaProlog (*.mod too, see Modsim) +au BufNewFile,BufRead *.sig setf lprolog + +" LDAP LDIF +au BufNewFile,BufRead *.ldif setf ldif + +" Ld loader +au BufNewFile,BufRead *.ld setf ld + +" Lex +au BufNewFile,BufRead *.lex,*.l setf lex + +" Libao +au BufNewFile,BufRead /etc/libao.conf,*/.libao setf libao + +" Libsensors +au BufNewFile,BufRead /etc/sensors.conf setf sensors + +" LFTP +au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc setf lftp + +" Lifelines (or Lex for C++!) +au BufNewFile,BufRead *.ll setf lifelines + +" Lilo: Linux loader +au BufNewFile,BufRead lilo.conf* call s:StarSetf('lilo') + +" Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp) +if has("fname_case") + au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc setf lisp +else + au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc setf lisp +endif + +" SBCL implementation of Common Lisp +au BufNewFile,BufRead sbclrc,.sbclrc setf lisp + +" Lite +au BufNewFile,BufRead *.lite,*.lt setf lite + +" LiteStep RC files +au BufNewFile,BufRead */LiteStep/*/*.rc setf litestep + +" Login access +au BufNewFile,BufRead /etc/login.access setf loginaccess + +" Login defs +au BufNewFile,BufRead /etc/login.defs setf logindefs + +" Logtalk +au BufNewFile,BufRead *.lgt setf logtalk + +" LOTOS +au BufNewFile,BufRead *.lot,*.lotos setf lotos + +" Lout (also: *.lt) +au BufNewFile,BufRead *.lou,*.lout setf lout + +" Lua +au BufNewFile,BufRead *.lua setf lua + +" Linden Scripting Language (Second Life) +au BufNewFile,BufRead *.lsl setf lsl + +" Lynx style file (or LotusScript!) +au BufNewFile,BufRead *.lss setf lss + +" M4 +au BufNewFile,BufRead *.m4 + \ if expand("") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif + +" MaGic Point +au BufNewFile,BufRead *.mgp setf mgp + +" Mail (for Elm, trn, mutt, muttng, rn, slrn) +au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail + +" Mail aliases +au BufNewFile,BufRead /etc/mail/aliases,/etc/aliases setf mailaliases + +" Mailcap configuration file +au BufNewFile,BufRead .mailcap,mailcap setf mailcap + +" Makefile +au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make + +" MakeIndex +au BufNewFile,BufRead *.ist,*.mst setf ist + +" Manpage +au BufNewFile,BufRead *.man setf man + +" Man config +au BufNewFile,BufRead /etc/man.conf,man.config setf manconf + +" Maple V +au BufNewFile,BufRead *.mv,*.mpl,*.mws setf maple + +" Map (UMN mapserver config file) +au BufNewFile,BufRead *.map setf map + +" Mason +au BufNewFile,BufRead *.mason,*.mhtml setf mason + +" Matlab or Objective C +au BufNewFile,BufRead *.m call s:FTm() + +func! s:FTm() + let n = 1 + while n < 10 + let line = getline(n) + if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)' + setf objc + return + endif + if line =~ '^\s*%' + setf matlab + return + endif + if line =~ '^\s*(\*' + setf mma + return + endif + let n = n + 1 + endwhile + if exists("g:filetype_m") + exe "setf " . g:filetype_m + else + setf matlab + endif +endfunc + +" Mathematica notebook +au BufNewFile,BufRead *.nb setf mma + +" Maya Extension Language +au BufNewFile,BufRead *.mel setf mel + +" Messages +au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9] setf messages + +" Metafont +au BufNewFile,BufRead *.mf setf mf + +" MetaPost +au BufNewFile,BufRead *.mp setf mp + +" MGL +au BufNewFile,BufRead *.mgl setf mgl + +" MMIX or VMS makefile +au BufNewFile,BufRead *.mms call s:FTmms() + +" Symbian meta-makefile definition (MMP) +au BufNewFile,BufRead *.mmp setf mmp + +func! s:FTmms() + let n = 1 + while n < 10 + let line = getline(n) + if line =~ '^\s*\(%\|//\)' || line =~ '^\*' + setf mmix + return + endif + if line =~ '^\s*#' + setf make + return + endif + let n = n + 1 + endwhile + setf mmix +endfunc + + +" Modsim III (or LambdaProlog) +au BufNewFile,BufRead *.mod + \ if getline(1) =~ '\' | + \ setf lprolog | + \ else | + \ setf modsim3 | + \ endif + +" Modula 2 +au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2 + +" Modula 3 (.m3, .i3, .mg, .ig) +au BufNewFile,BufRead *.[mi][3g] setf modula3 + +" Monk +au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc setf monk + +" MOO +au BufNewFile,BufRead *.moo setf moo + +" Modconf +au BufNewFile,BufRead /etc/modules.conf,/etc/conf.modules setf modconf +au BufNewFile,BufRead /etc/modutils/* + \ if executable(expand("")) != 1 + \| call s:StarSetf('modconf') + \|endif + +" Mplayer config +au BufNewFile,BufRead mplayer.conf,*/.mplayer/config setf mplayerconf + +" Moterola S record +au BufNewFile,BufRead *.s19,*.s28,*.s37 setf srec + +" Mrxvtrc +au BufNewFile,BufRead mrxvtrc,.mrxvtrc setf mrxvtrc + +" Msql +au BufNewFile,BufRead *.msql setf msql + +" Mysql +au BufNewFile,BufRead *.mysql setf mysql + +" M$ Resource files +au BufNewFile,BufRead *.rc setf rc + +" MuPAD source +au BufRead,BufNewFile *.mu setf mupad + +" Mush +au BufNewFile,BufRead *.mush setf mush + +" Mutt setup file (also for Muttng) +au BufNewFile,BufRead Mutt{ng,}rc setf muttrc + +" Nano +au BufNewFile,BufRead /etc/nanorc,.nanorc setf nanorc + +" Nastran input/DMAP +"au BufNewFile,BufRead *.dat setf nastran + +" Natural +au BufNewFile,BufRead *.NS[ACGLMNPS] setf natural + +" Netrc +au BufNewFile,BufRead .netrc setf netrc + +" Novell netware batch files +au BufNewFile,BufRead *.ncf setf ncf + +" Nroff/Troff (*.ms and *.t are checked below) +au BufNewFile,BufRead *.me + \ if expand("") != "read.me" && expand("") != "click.me" | + \ setf nroff | + \ endif +au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff +au BufNewFile,BufRead *.[1-9] call s:FTnroff() + +" This function checks if one of the first five lines start with a dot. In +" that case it is probably an nroff file: 'filetype' is set and 1 is returned. +func! s:FTnroff() + if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.' + setf nroff + return 1 + endif + return 0 +endfunc + +" Nroff or Objective C++ +au BufNewFile,BufRead *.mm call s:FTmm() + +func! s:FTmm() + let n = 1 + while n < 10 + let line = getline(n) + if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)' + setf objcpp + return + endif + let n = n + 1 + endwhile + setf nroff +endfunc + +" Not Quite C +au BufNewFile,BufRead *.nqc setf nqc + +" NSIS +au BufNewFile,BufRead *.nsi setf nsis + +" OCAML +au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly setf ocaml + +" Occam +au BufNewFile,BufRead *.occ setf occam + +" Omnimark +au BufNewFile,BufRead *.xom,*.xin setf omnimark + +" OpenROAD +au BufNewFile,BufRead *.or setf openroad + +" OPL +au BufNewFile,BufRead *.[Oo][Pp][Ll] setf opl + +" Oracle config file +au BufNewFile,BufRead *.ora setf ora + +" Packet filter conf +au BufNewFile,BufRead pf.conf setf pf + +" Pam conf +au BufNewFile,BufRead /etc/pam.conf setf pamconf + +" PApp +au BufNewFile,BufRead *.papp,*.pxml,*.pxsl setf papp + +" Password file +au BufNewFile,BufRead /etc/passwd,/etc/passwd-,/etc/passwd.edit,/etc/shadow,/etc/shadow-,/var/backups/passwd.bak,/var/backups/shadow.bak setf passwd + +" Pascal (also *.p) +au BufNewFile,BufRead *.pas setf pascal + +" Delphi project file +au BufNewFile,BufRead *.dpr setf pascal + +" PDF +au BufNewFile,BufRead *.pdf setf pdf + +" Perl +if has("fname_case") + au BufNewFile,BufRead *.pl,*.PL call s:FTpl() +else + au BufNewFile,BufRead *.pl call s:FTpl() +endif +au BufNewFile,BufRead *.plx,*.al setf perl + +func! s:FTpl() + if exists("g:filetype_pl") + exe "setf " . g:filetype_pl + else + " recognize Prolog by specific text in the first non-empty line + " require a blank after the '%' because Perl uses "%list" and "%translate" + let l = getline(nextnonblank(1)) + if l =~ '\' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-' + setf prolog + else + setf perl + endif + endif +endfunc + +" Perl, XPM or XPM2 +au BufNewFile,BufRead *.pm + \ if getline(1) =~ "XPM2" | + \ setf xpm2 | + \ elseif getline(1) =~ "XPM" | + \ setf xpm | + \ else | + \ setf perl | + \ endif + +" Perl POD +au BufNewFile,BufRead *.pod setf pod + +" Php, php3, php4, etc. +" Also Phtml (was used for PHP 2 in the past) +" Also .ctp for Cake template file +au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php + +" Pike +au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike + +" Pinfo config +au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo + +" Palm Resource compiler +au BufNewFile,BufRead *.rcp setf pilrc + +" Pine config +au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex setf pine + +" PL/M (also: *.inp) +au BufNewFile,BufRead *.plm,*.p36,*.pac setf plm + +" PL/SQL +au BufNewFile,BufRead *.pls,*.plsql setf plsql + +" PLP +au BufNewFile,BufRead *.plp setf plp + +" PO and PO template (GNU gettext) +au BufNewFile,BufRead *.po,*.pot setf po + +" Postfix main config +au BufNewFile,BufRead main.cf setf pfmain + +" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator) +au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai setf postscr + +" PostScript Printer Description +au BufNewFile,BufRead *.ppd setf ppd + +" Povray +au BufNewFile,BufRead *.pov setf pov + +" Povray configuration +au BufNewFile,BufRead .povrayrc setf povini + +" Povray, PHP or assembly +au BufNewFile,BufRead *.inc call s:FTinc() + +func! s:FTinc() + if exists("g:filetype_inc") + exe "setf " . g:filetype_inc + else + let lines = getline(1).getline(2).getline(3) + if lines =~? "perlscript" + setf aspperl + elseif lines =~ "<%" + setf aspvbs + elseif lines =~ "' + \ || line =~ '^\s*{' || line =~ '^\s*(\*' + setf pascal + return + elseif line !~ '^\s*$' || line =~ '^/\*' + " Not an empty line: Doesn't look like valid Pascal code. + " Or it looks like a Progress /* comment + break + endif + let lnum = lnum + 1 + endw + setf progress +endfunc + + +" Software Distributor Product Specification File (POSIX 1387.2-1995) +au BufNewFile,BufRead *.psf setf psf +au BufNewFile,BufRead INDEX,INFO + \ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' | + \ setf psf | + \ endif + +" Prolog +au BufNewFile,BufRead *.pdb setf prolog + +" Promela +au BufNewFile,BufRead *.pml setf promela + +" Protocols +au BufNewFile,BufRead /etc/protocols setf protocols + +" Pyrex +au BufNewFile,BufRead *.pyx,*.pxd setf pyrex + +" Python +au BufNewFile,BufRead *.py,*.pyw setf python + +" Quixote (Python-based web framework) +au BufNewFile,BufRead *.ptl setf python + +" Radiance +au BufNewFile,BufRead *.rad,*.mat setf radiance + +" Ratpoison config/command files +au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison + +" RCS file +au BufNewFile,BufRead *\,v setf rcs + +" Readline +au BufNewFile,BufRead .inputrc,inputrc setf readline + +" Registry for MS-Windows +au BufNewFile,BufRead *.reg + \ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif + +" Renderman Interface Bytestream +au BufNewFile,BufRead *.rib setf rib + +" Rexx +au BufNewFile,BufRead *.rexx,*.rex,*.jrexx,*.rxj,*.orx setf rexx + +" R (Splus) +if has("fname_case") + au BufNewFile,BufRead *.s,*.S setf r +else + au BufNewFile,BufRead *.s setf r +endif + +" R Help file +if has("fname_case") + au BufNewFile,BufRead *.rd,*.Rd setf rhelp +else + au BufNewFile,BufRead *.rd setf rhelp +endif + +" R noweb file +if has("fname_case") + au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw setf rnoweb +else + au BufNewFile,BufRead *.rnw,*.snw setf rnoweb +endif + +" Rexx, Rebol or R +au BufNewFile,BufRead *.r,*.R call s:FTr() + +func! s:FTr() + let max = line("$") > 50 ? 50 : line("$") + + for n in range(1, max) + " Rebol is easy to recognize, check for that first + if getline(n) =~? '\' + setf rebol + return + endif + endfor + + for n in range(1, max) + " R has # comments + if getline(n) =~ '^\s*#' + setf r + return + endif + " Rexx has /* comments */ + if getline(n) =~ '^\s*/\*' + setf rexx + return + endif + endfor + + " Nothing recognized, assume Rexx + setf rexx +endfunc + +" Remind +au BufNewFile,BufRead .reminders* call s:StarSetf('remind') + +" Resolv.conf +au BufNewFile,BufRead resolv.conf setf resolv + +" Relax NG Compact +au BufNewFile,BufRead *.rnc setf rnc + +" RPL/2 +au BufNewFile,BufRead *.rpl setf rpl + +" Robots.txt +au BufNewFile,BufRead robots.txt setf robots + +" Rpcgen +au BufNewFile,BufRead *.x setf rpcgen + +" reStructuredText Documentation Format +au BufNewFile,BufRead *.rst setf rst + +" RTF +au BufNewFile,BufRead *.rtf setf rtf + +" Interactive Ruby shell +au BufNewFile,BufRead .irbrc,irbrc setf ruby + +" Ruby +au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec setf ruby + +" Ruby on Rails +au BufNewFile,BufRead *.builder,*.rxml,*.rjs setf ruby + +" Rantfile and Rakefile is like Ruby +au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake setf ruby + +" S-lang (or shader language!) +au BufNewFile,BufRead *.sl setf slang + +" Samba config +au BufNewFile,BufRead smb.conf setf samba + +" SAS script +au BufNewFile,BufRead *.sas setf sas + +" Sass +au BufNewFile,BufRead *.sass setf sass + +" Sather +au BufNewFile,BufRead *.sa setf sather + +" Scilab +au BufNewFile,BufRead *.sci,*.sce setf scilab + +" SD: Streaming Descriptors +au BufNewFile,BufRead *.sd setf sd + +" SDL +au BufNewFile,BufRead *.sdl,*.pr setf sdl + +" sed +au BufNewFile,BufRead *.sed setf sed + +" Sieve (RFC 3028) +au BufNewFile,BufRead *.siv setf sieve + +" Sendmail +au BufNewFile,BufRead sendmail.cf setf sm + +" Sendmail .mc files are actually m4. Could also be MS Message text file. +au BufNewFile,BufRead *.mc call s:McSetf() + +func! s:McSetf() + " Rely on the file to start with a comment. + " MS message text files use ';', Sendmail files use '#' or 'dnl' + for lnum in range(1, min([line("$"), 20])) + let line = getline(lnum) + if line =~ '^\s*\(#\|dnl\)' + setf m4 " Sendmail .mc file + return + elseif line =~ '^\s*;' + setf msmessages " MS Message text file + return + endif + endfor + setf m4 " Default: Sendmail .mc file +endfunc + +" Services +au BufNewFile,BufRead /etc/services setf services + +" Service Location config +au BufNewFile,BufRead /etc/slp.conf setf slpconf + +" Service Location registration +au BufNewFile,BufRead /etc/slp.reg setf slpreg + +" Service Location SPI +au BufNewFile,BufRead /etc/slp.spi setf slpspi + +" Setserial config +au BufNewFile,BufRead /etc/serial.conf setf setserial + +" SGML +au BufNewFile,BufRead *.sgm,*.sgml + \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' | + \ setf sgmllnx | + \ elseif getline(1) =~ '") =~ g:ft_ignore_pat + return + endif + if a:name =~ '\' + let b:is_kornshell = 1 + if exists("b:is_bash") + unlet b:is_bash + endif + if exists("b:is_sh") + unlet b:is_sh + endif + elseif exists("g:bash_is_sh") || a:name =~ '\' || a:name =~ '\' + let b:is_bash = 1 + if exists("b:is_kornshell") + unlet b:is_kornshell + endif + if exists("b:is_sh") + unlet b:is_sh + endif + elseif a:name =~ '\' + let b:is_sh = 1 + if exists("b:is_kornshell") + unlet b:is_kornshell + endif + if exists("b:is_bash") + unlet b:is_bash + endif + endif + call SetFileTypeShell("sh") +endfunc + +" For shell-like file types, check for an "exec" command hidden in a comment, +" as used for Tcl. +" Also called from scripts.vim, thus can't be local to this script. +func! SetFileTypeShell(name) + if expand("") =~ g:ft_ignore_pat + return + endif + let l = 2 + while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)' + " Skip empty and comment lines. + let l = l + 1 + endwhile + if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$' + " Found an "exec" line after a comment with continuation + let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '') + if n =~ '\' | + \ setf xml | + \ else | + \ setf smil | + \ endif + +" SMIL or SNMP MIB file +au BufNewFile,BufRead *.smi + \ if getline(1) =~ '\' | + \ setf smil | + \ else | + \ setf mib | + \ endif + +" SMITH +au BufNewFile,BufRead *.smt,*.smith setf smith + +" Snobol4 and spitbol +au BufNewFile,BufRead *.sno,*.spt setf snobol4 + +" SNMP MIB files +au BufNewFile,BufRead *.mib,*.my setf mib + +" Snort Configuration +au BufNewFile,BufRead *.hog,snort.conf,vision.conf setf hog +au BufNewFile,BufRead *.rules call s:FTRules() + +let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*' +func! s:FTRules() + if expand(':p') =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$' + setf udevrules + return + endif + try + let config_lines = readfile('/etc/udev/udev.conf') + catch /^Vim\%((\a\+)\)\=:E484/ + setf hog + return + endtry + let dir = expand(':p:h') + for line in config_lines + if line =~ s:ft_rules_udev_rules_pattern + let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "") + if dir == udev_rules + setf udevrules + endif + break + endif + endfor + setf hog +endfunc + + +" Spec (Linux RPM) +au BufNewFile,BufRead *.spec setf spec + +" Speedup (AspenTech plant simulator) +au BufNewFile,BufRead *.speedup,*.spdata,*.spd setf spup + +" Slice +au BufNewFile,BufRead *.ice setf slice + +" Spice +au BufNewFile,BufRead *.sp,*.spice setf spice + +" Spyce +au BufNewFile,BufRead *.spy,*.spi setf spyce + +" Squid +au BufNewFile,BufRead squid.conf setf squid + +" SQL for Oracle Designer +au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks setf sql + +" SQL +au BufNewFile,BufRead *.sql call s:SQL() + +func! s:SQL() + if exists("g:filetype_sql") + exe "setf " . g:filetype_sql + else + setf sql + endif +endfunc + +" SQLJ +au BufNewFile,BufRead *.sqlj setf sqlj + +" SQR +au BufNewFile,BufRead *.sqr,*.sqi setf sqr + +" OpenSSH configuration +au BufNewFile,BufRead ssh_config,*/.ssh/config setf sshconfig + +" OpenSSH server configuration +au BufNewFile,BufRead sshd_config setf sshdconfig + +" Stata +au BufNewFile,BufRead *.ado,*.class,*.do,*.imata,*.mata setf stata + +" SMCL +au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl setf smcl + +" Stored Procedures +au BufNewFile,BufRead *.stp setf stp + +" Standard ML +au BufNewFile,BufRead *.sml setf sml + +" Sratus VOS command macro +au BufNewFile,BufRead *.cm setf voscm + +" Sysctl +au BufNewFile,BufRead /etc/sysctl.conf setf sysctl + +" Sudoers +au BufNewFile,BufRead /etc/sudoers,sudoers.tmp setf sudoers + +" If the file has an extension of 't' and is in a directory 't' then it is +" almost certainly a Perl test file. +" If the first line starts with '#' and contains 'perl' it's probably a Perl +" file. +" (Slow test) If a file contains a 'use' statement then it is almost certainly +" a Perl file. +func! s:FTperl() + if expand("%:e") == 't' && expand("%:p:h:t") == 't' + setf perl + return 1 + endif + if getline(1)[0] == '#' && getline(1) =~ 'perl' + setf perl + return 1 + endif + if search('^use\s\s*\k', 'nc', 30) + setf perl + return 1 + endif + return 0 +endfunc + +" Tads (or Nroff or Perl test file) +au BufNewFile,BufRead *.t + \ if !s:FTnroff() && !s:FTperl() | setf tads | endif + +" Tags +au BufNewFile,BufRead tags setf tags + +" TAK +au BufNewFile,BufRead *.tak setf tak + +" Tcl (JACL too) +au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl setf tcl + +" TealInfo +au BufNewFile,BufRead *.tli setf tli + +" Telix Salt +au BufNewFile,BufRead *.slt setf tsalt + +" Terminfo +au BufNewFile,BufRead *.ti setf terminfo + +" TeX +au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl setf tex +au BufNewFile,BufRead *.tex call s:FTtex() + +" Choose context, plaintex, or tex (LaTeX) based on these rules: +" 1. Check the first line of the file for "%&". +" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords. +" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc. +func! s:FTtex() + let firstline = getline(1) + if firstline =~ '^%&\s*\a\+' + let format = tolower(matchstr(firstline, '\a\+')) + let format = substitute(format, 'pdf', '', '') + if format == 'tex' + let format = 'plain' + endif + else + " Default value, may be changed later: + let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain' + " Save position, go to the top of the file, find first non-comment line. + let save_cursor = getpos('.') + call cursor(1,1) + let firstNC = search('^\s*[^[:space:]%]', 'c', 1000) + if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword. + let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>' + let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>' + let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)', + \ 'cnp', firstNC + 1000) + if kwline == 1 " lpat matched + let format = 'latex' + elseif kwline == 2 " cpat matched + let format = 'context' + endif " If neither matched, keep default set above. + " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000) + " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000) + " if cline > 0 + " let format = 'context' + " endif + " if lline > 0 && (cline == 0 || cline > lline) + " let format = 'tex' + " endif + endif " firstNC + call setpos('.', save_cursor) + endif " firstline =~ '^%&\s*\a\+' + + " Translation from formats to file types. TODO: add AMSTeX, RevTex, others? + if format == 'plain' + setf plaintex + elseif format == 'context' + setf context + else " probably LaTeX + setf tex + endif + return +endfunc + +" ConTeXt +au BufNewFile,BufRead tex/context/*/*.tex,*.mkii,*.mkiv setf context + +" Texinfo +au BufNewFile,BufRead *.texinfo,*.texi,*.txi setf texinfo + +" TeX configuration +au BufNewFile,BufRead texmf.cnf setf texmf + +" Tidy config +au BufNewFile,BufRead .tidyrc,tidyrc setf tidy + +" TF mud client +au BufNewFile,BufRead *.tf,.tfrc,tfrc setf tf + +" TPP - Text Presentation Program +au BufNewFile,BufReadPost *.tpp setf tpp + +" Trustees +au BufNewFile,BufRead trustees.conf setf trustees + +" TSS - Geometry +au BufNewFile,BufReadPost *.tssgm setf tssgm + +" TSS - Optics +au BufNewFile,BufReadPost *.tssop setf tssop + +" TSS - Command Line (temporary) +au BufNewFile,BufReadPost *.tsscl setf tsscl + +" Motif UIT/UIL files +au BufNewFile,BufRead *.uit,*.uil setf uil + +" Udev conf +au BufNewFile,BufRead /etc/udev/udev.conf setf udevconf + +" Udev permissions +au BufNewFile,BufRead /etc/udev/permissions.d/*.permissions setf udevperm +" +" Udev symlinks config +au BufNewFile,BufRead /etc/udev/cdsymlinks.conf setf sh + +" UnrealScript +au BufNewFile,BufRead *.uc setf uc + +" Updatedb +au BufNewFile,BufRead /etc/updatedb.conf setf updatedb + +" Vera +au BufNewFile,BufRead *.vr,*.vri,*.vrh setf vera + +" Verilog HDL +au BufNewFile,BufRead *.v setf verilog + +" Verilog-AMS HDL +au BufNewFile,BufRead *.va,*.vams setf verilogams + +" VHDL +au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl +au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl') + +" Vim script +au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc setf vim + +" Viminfo file +au BufNewFile,BufRead .viminfo,_viminfo setf viminfo + +" Virata Config Script File or Drupal module +au BufRead,BufNewFile *.hw,*.module,*.pkg + \ if getline(1) =~ '' | + \ let b:xf86c_xfree86_version = 3 | + \ endif | + \ setf xf86conf + +" Xorg config +au BufNewFile,BufRead xorg.conf,xorg.conf-4 let b:xf86c_xfree86_version = 4 | setf xf86conf + +" Xinetd conf +au BufNewFile,BufRead /etc/xinetd.conf setf xinetd + +" XS Perl extension interface language +au BufNewFile,BufRead *.xs setf xs + +" X resources file +au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults + +" Xmath +au BufNewFile,BufRead *.msc,*.msf setf xmath +au BufNewFile,BufRead *.ms + \ if !s:FTnroff() | setf xmath | endif + +" XML specific variants: docbk and xbl +au BufNewFile,BufRead *.xml call s:FTxml() + +func! s:FTxml() + let n = 1 + while n < 100 && n < line("$") + let line = getline(n) + if line =~ '\)' && getline(n) !~ '^\s*#\s*include' + setf racc + return + endif + let n = n + 1 + endwhile + setf yacc +endfunc + + +" Yaml +au BufNewFile,BufRead *.yaml,*.yml setf yaml + +" Zope +" dtml (zope dynamic template markup language), pt (zope page template), +" cpt (zope form controller page template) +au BufNewFile,BufRead *.dtml,*.pt,*.cpt call s:FThtml() +" zsql (zope sql method) +au BufNewFile,BufRead *.zsql call s:SQL() + +" Z80 assembler asz80 +au BufNewFile,BufRead *.z8a setf z8a + +augroup END + + +" Source the user-specified filetype file, for backwards compatibility with +" Vim 5.x. +if exists("myfiletypefile") && filereadable(expand(myfiletypefile)) + execute "source " . myfiletypefile +endif + + +" Check for "*" after loading myfiletypefile, so that scripts.vim is only used +" when there are no matching file name extensions. +" Don't do this for compressed files. +augroup filetypedetect +au BufNewFile,BufRead * + \ if !did_filetype() && expand("") !~ g:ft_ignore_pat + \ | runtime! scripts.vim | endif +au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif + + +" Extra checks for when no filetype has been detected now. Mostly used for +" patterns that end in "*". E.g., "zsh*" matches "zsh.vim", but that's a Vim +" script file. +" Most of these should call s:StarSetf() to avoid names ending in .gz and the +" like are used. + +" More Apache files. +au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/* call s:StarSetf('apache') + +" Asterisk config file +au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk') +au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm') + +" Bazaar version control +au BufNewFile,BufRead bzr_log.* setf bzr + +" BIND zone +au BufNewFile,BufRead */named/db.*,*/bind/db.* call s:StarSetf('bindzone') + +" Changelog +au BufNewFile,BufRead [cC]hange[lL]og* + \ if getline(1) =~ '; urgency=' + \| call s:StarSetf('debchangelog') + \|else + \| call s:StarSetf('changelog') + \|endif + +" Crontab +au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/* call s:StarSetf('crontab') + +" Debian Sources.list +au BufNewFile,BufRead /etc/apt/sources.list.d/* call s:StarSetf('debsources') + +" Dracula +au BufNewFile,BufRead drac.* call s:StarSetf('dracula') + +" Fvwm +au BufNewFile,BufRead */.fvwm/* call s:StarSetf('fvwm') +au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook + \ let b:fvwm_version = 1 | call s:StarSetf('fvwm') +au BufNewFile,BufRead *fvwm2rc* + \ if expand(":e") == "m4" + \| call s:StarSetf('fvwm2m4') + \|else + \| let b:fvwm_version = 2 | call s:StarSetf('fvwm') + \|endif + +" GTK RC +au BufNewFile,BufRead .gtkrc*,gtkrc* call s:StarSetf('gtkrc') + +" Jam +au BufNewFile,BufRead Prl*.*,JAM*.* call s:StarSetf('jam') + +" Jargon +au! BufNewFile,BufRead *jarg* + \ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE' + \| call s:StarSetf('jargon') + \|endif + +" Kconfig +au BufNewFile,BufRead Kconfig.* call s:StarSetf('kconfig') + +" Makefile +au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make') + +" Ruby Makefile +au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby') + +" Mail (also matches muttrc.vim, so this is below the other checks) +au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\} setf mail + +" Modconf +au BufNewFile,BufRead /etc/modprobe.* call s:StarSetf('modconf') + +" Mutt setup file +au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc* call s:StarSetf('muttrc') +au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc* call s:StarSetf('muttrc') + +" Nroff macros +au BufNewFile,BufRead tmac.* call s:StarSetf('nroff') + +" Pam conf +au BufNewFile,BufRead /etc/pam.d/* call s:StarSetf('pamconf') + +" Printcap and Termcap +au BufNewFile,BufRead *printcap* + \ if !did_filetype() + \| let b:ptcap_type = "print" | call s:StarSetf('ptcap') + \|endif +au BufNewFile,BufRead *termcap* + \ if !did_filetype() + \| let b:ptcap_type = "term" | call s:StarSetf('ptcap') + \|endif + +" Vim script +au BufNewFile,BufRead *vimrc* call s:StarSetf('vim') + +" Subversion commit file +au BufNewFile,BufRead svn-commit*.tmp setf svn + +" X resources file +au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults') + +" XFree86 config +au BufNewFile,BufRead XF86Config-4* + \ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf') +au BufNewFile,BufRead XF86Config* + \ if getline(1) =~ '\' + \| let b:xf86c_xfree86_version = 3 + \|endif + \|call s:StarSetf('xf86conf') + +" X11 xmodmap +au BufNewFile,BufRead *xmodmap* call s:StarSetf('xmodmap') + +" Xinetd conf +au BufNewFile,BufRead /etc/xinetd.d/* call s:StarSetf('xinetd') + +" Z-Shell script +au BufNewFile,BufRead zsh*,zlog* call s:StarSetf('zsh') + + +" Generic configuration file (check this last, it's just guessing!) +au BufNewFile,BufRead,StdinReadPost * + \ if !did_filetype() && expand("") !~ g:ft_ignore_pat + \ && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#' + \ || getline(4) =~ '^#' || getline(5) =~ '^#') | + \ setf conf | + \ endif + +" Use the plugin-filetype checks last, they may overrule any of the previously +" detected filetypes. +runtime! ftdetect/*.vim + +augroup END + + +" If the GUI is already running, may still need to install the Syntax menu. +" Don't do it when the 'M' flag is included in 'guioptions'. +if has("menu") && has("gui_running") + \ && !exists("did_install_syntax_menu") && &guioptions !~# "M" + source :p:h/menu.vim +endif + +" Function called for testing all functions defined here. These are +" script-local, thus need to be executed here. +" Returns a string with error messages (hopefully empty). +func! TestFiletypeFuncs(testlist) + let output = '' + for f in a:testlist + try + exe f + catch + let output = output . "\n" . f . ": " . v:exception + endtry + endfor + return output +endfunc + +" Restore 'cpoptions' +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/forth.vim b/forth.vim new file mode 100644 index 00000000..8713a721 --- /dev/null +++ b/forth.vim @@ -0,0 +1,329 @@ +" Vim syntax file +" Language: FORTH +" Maintainer: Christian V. J. Brüssow +" Last Change: Sa 09 Feb 2008 13:27:29 CET +" Filenames: *.fs,*.ft +" URL: http://www.cvjb.de/comp/vim/forth.vim + +" $Id$ + +" The list of keywords is incomplete, compared with the offical ANS +" wordlist. If you use this language, please improve it, and send me +" the patches. +" +" Before sending me patches, please download the newest version of this file +" from http://www.cvjb.de/comp/vim/forth.vim or http://www.vim.org/ (search +" for forth.vim). + +" Many Thanks to... +" +" 2008-02-09: +" Shawn K. Quinn send a big patch with +" new words commonly used in Forth programs or defined by GNU Forth. +" +" 2007-07-11: +" Benjamin Krill send me a patch +" to highlight space errors. +" You can toggle this feature on through setting the +" flag forth_space_errors in you vimrc. If you have switched it on, +" you can turn off highlighting of trailing spaces in comments by +" setting forth_no_trail_space_error in your vimrc. If you do not want +" the highlighting of a tabulator following a space in comments, you +" can turn this off by setting forth_no_tab_space_error. +" +" 2006-05-25: +" Bill McCarthy and Ilya Sher +" Who found a bug in the ccomment line in 2004!!! +" I'm really very sorry, that it has taken two years to fix that +" in the offical version of this file. Shame on me. +" I think my face will be red the next ten years... +" +" 2006-05-21: +" Thomas E. Vaughan send me a patch +" for the parenthesis comment word, so words with a trailing +" parenthesis will not start the highlighting for such comments. +" +" 2003-05-10: +" Andrew Gaul send me a patch for +" forthOperators. +" +" 2003-04-03: +" Ron Aaron made updates for an +" improved Win32Forth support. +" +" 2002-04-22: +" Charles Shattuck helped me to settle up with the +" binary and hex number highlighting. +" +" 2002-04-20: +" Charles Shattuck send me some code for correctly +" highlighting char and [char] followed by an opening paren. He also added +" some words for operators, conditionals, and definitions; and added the +" highlighting for s" and c". +" +" 2000-03-28: +" John Providenza made improvements for the +" highlighting of strings, and added the code for highlighting hex numbers. +" + + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" Synchronization method +syn sync ccomment +syn sync maxlines=200 + +" I use gforth, so I set this to case ignore +syn case ignore + +" Some special, non-FORTH keywords +syn keyword forthTodo contained TODO FIXME XXX +syn match forthTodo contained 'Copyright\(\s([Cc])\)\=\(\s[0-9]\{2,4}\)\=' + +" Characters allowed in keywords +" I don't know if 128-255 are allowed in ANS-FORTH +if version >= 600 + setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255 +else + set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255 +endif + +" when wanted, highlight trailing white space +if exists("forth_space_errors") + if !exists("forth_no_trail_space_error") + syn match forthSpaceError display excludenl "\s\+$" + endif + if !exists("forth_no_tab_space_error") + syn match forthSpaceError display " \+\t"me=e-1 + endif +endif + +" Keywords + +" basic mathematical and logical operators +syn keyword forthOperators + - * / MOD /MOD NEGATE ABS MIN MAX +syn keyword forthOperators AND OR XOR NOT LSHIFT RSHIFT INVERT 2* 2/ 1+ +syn keyword forthOperators 1- 2+ 2- 8* UNDER+ +syn keyword forthOperators M+ */ */MOD M* UM* M*/ UM/MOD FM/MOD SM/REM +syn keyword forthOperators D+ D- DNEGATE DABS DMIN DMAX D2* D2/ +syn keyword forthOperators F+ F- F* F/ FNEGATE FABS FMAX FMIN FLOOR FROUND +syn keyword forthOperators F** FSQRT FEXP FEXPM1 FLN FLNP1 FLOG FALOG FSIN +syn keyword forthOperators FCOS FSINCOS FTAN FASIN FACOS FATAN FATAN2 FSINH +syn keyword forthOperators FCOSH FTANH FASINH FACOSH FATANH F2* F2/ 1/F +syn keyword forthOperators F~REL F~ABS F~ +syn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >= U< U<= +syn keyword forthOperators U> U>= D0< D0<= D0<> D0= D0> D0>= D< D<= D<> +syn keyword forthOperators D= D> D>= DU< DU<= DU> DU>= WITHIN ?NEGATE +syn keyword forthOperators ?DNEGATE + +" stack manipulations +syn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL +syn keyword forthStack 2DROP 2NIP 2DUP 2OVER 2TUCK 2SWAP 2ROT 2-ROT +syn keyword forthStack 3DUP 4DUP 5DUP 3DROP 4DROP 5DROP 8DROP 4SWAP 4ROT +syn keyword forthStack 4-ROT 4TUCK 8SWAP 8DUP +syn keyword forthRStack >R R> R@ RDROP 2>R 2R> 2R@ 2RDROP +syn keyword forthRstack 4>R 4R> 4R@ 4RDROP +syn keyword forthFStack FDROP FNIP FDUP FOVER FTUCK FSWAP FROT + +" stack pointer manipulations +syn keyword forthSP SP@ SP! FP@ FP! RP@ RP! LP@ LP! + +" address operations +syn keyword forthMemory @ ! +! C@ C! 2@ 2! F@ F! SF@ SF! DF@ DF! +syn keyword forthAdrArith CHARS CHAR+ CELLS CELL+ CELL ALIGN ALIGNED FLOATS +syn keyword forthAdrArith FLOAT+ FLOAT FALIGN FALIGNED SFLOATS SFLOAT+ +syn keyword forthAdrArith SFALIGN SFALIGNED DFLOATS DFLOAT+ DFALIGN DFALIGNED +syn keyword forthAdrArith MAXALIGN MAXALIGNED CFALIGN CFALIGNED +syn keyword forthAdrArith ADDRESS-UNIT-BITS ALLOT ALLOCATE HERE +syn keyword forthMemBlks MOVE ERASE CMOVE CMOVE> FILL BLANK + +" conditionals +syn keyword forthCond IF ELSE ENDIF THEN CASE OF ENDOF ENDCASE ?DUP-IF +syn keyword forthCond ?DUP-0=-IF AHEAD CS-PICK CS-ROLL CATCH THROW WITHIN + +" iterations +syn keyword forthLoop BEGIN WHILE REPEAT UNTIL AGAIN +syn keyword forthLoop ?DO LOOP I J K +DO U+DO -DO U-DO DO +LOOP -LOOP +syn keyword forthLoop UNLOOP LEAVE ?LEAVE EXIT DONE FOR NEXT + +" new words +syn match forthClassDef '\<:class\s*[^ \t]\+\>' +syn match forthObjectDef '\<:object\s*[^ \t]\+\>' +syn match forthColonDef '\<:m\?\s*[^ \t]\+\>' +syn keyword forthEndOfColonDef ; ;M ;m +syn keyword forthEndOfClassDef ;class +syn keyword forthEndOfObjectDef ;object +syn keyword forthDefine CONSTANT 2CONSTANT FCONSTANT VARIABLE 2VARIABLE +syn keyword forthDefine FVARIABLE CREATE USER VALUE TO DEFER IS DOES> IMMEDIATE +syn keyword forthDefine COMPILE-ONLY COMPILE RESTRICT INTERPRET POSTPONE EXECUTE +syn keyword forthDefine LITERAL CREATE-INTERPRET/COMPILE INTERPRETATION> +syn keyword forthDefine INT NAME?INT NAME>COMP +syn keyword forthDefine NAME>STRING STATE C; CVARIABLE +syn keyword forthDefine , 2, F, C, +syn match forthDefine "\[IFDEF]" +syn match forthDefine "\[IFUNDEF]" +syn match forthDefine "\[THEN]" +syn match forthDefine "\[ENDIF]" +syn match forthDefine "\[ELSE]" +syn match forthDefine "\[?DO]" +syn match forthDefine "\[DO]" +syn match forthDefine "\[LOOP]" +syn match forthDefine "\[+LOOP]" +syn match forthDefine "\[NEXT]" +syn match forthDefine "\[BEGIN]" +syn match forthDefine "\[UNTIL]" +syn match forthDefine "\[AGAIN]" +syn match forthDefine "\[WHILE]" +syn match forthDefine "\[REPEAT]" +syn match forthDefine "\[COMP']" +syn match forthDefine "'" +syn match forthDefine '\<\[\>' +syn match forthDefine "\[']" +syn match forthDefine '\[COMPILE]' + +" debugging +syn keyword forthDebug PRINTDEBUGDATA PRINTDEBUGLINE +syn match forthDebug "\<\~\~\>" + +" Assembler +syn keyword forthAssembler ASSEMBLER CODE END-CODE ;CODE FLUSH-ICACHE C, + +" basic character operations +syn keyword forthCharOps (.) CHAR EXPECT FIND WORD TYPE -TRAILING EMIT KEY +syn keyword forthCharOps KEY? TIB CR +" recognize 'char (' or '[char] (' correctly, so it doesn't +" highlight everything after the paren as a comment till a closing ')' +syn match forthCharOps '\ #>> #S (NUMBER) (NUMBER?) CONVERT D>F +syn keyword forthConversion D>S DIGIT DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER +syn keyword forthConversion F>S S>F + +" interptreter, wordbook, compiler +syn keyword forthForth (LOCAL) BYE COLD ABORT >BODY >NEXT >LINK CFA >VIEW HERE +syn keyword forthForth PAD WORDS VIEW VIEW> N>LINK NAME> LINK> L>NAME FORGET +syn keyword forthForth BODY> ASSERT( ASSERT0( ASSERT1( ASSERT2( ASSERT3( ) +syn region forthForth start=+ABORT"\s+ skip=+\\"+ end=+"+ + +" vocabularies +syn keyword forthVocs ONLY FORTH ALSO ROOT SEAL VOCS ORDER CONTEXT #VOCS +syn keyword forthVocs VOCABULARY DEFINITIONS + +" File keywords +syn keyword forthFileMode R/O R/W W/O BIN +syn keyword forthFileWords OPEN-FILE CREATE-FILE CLOSE-FILE DELETE-FILE +syn keyword forthFileWords RENAME-FILE READ-FILE READ-LINE KEY-FILE +syn keyword forthFileWords KEY?-FILE WRITE-FILE WRITE-LINE EMIT-FILE +syn keyword forthFileWords FLUSH-FILE FILE-STATUS FILE-POSITION +syn keyword forthFileWords REPOSITION-FILE FILE-SIZE RESIZE-FILE +syn keyword forthFileWords SLURP-FILE SLURP-FID STDIN STDOUT STDERR +syn keyword forthBlocks OPEN-BLOCKS USE LOAD --> BLOCK-OFFSET +syn keyword forthBlocks GET-BLOCK-FID BLOCK-POSITION LIST SCR BLOCK +syn keyword forthBlocks BUFER EMPTY-BUFFERS EMPTY-BUFFER UPDATE UPDATED? +syn keyword forthBlocks SAVE-BUFFERS SAVE-BUFFER FLUSH THRU +LOAD +THRU +syn keyword forthBlocks BLOCK-INCLUDED + +" numbers +syn keyword forthMath DECIMAL HEX BASE +syn match forthInteger '\<-\=[0-9.]*[0-9.]\+\>' +syn match forthInteger '\<&-\=[0-9.]*[0-9.]\+\>' +" recognize hex and binary numbers, the '$' and '%' notation is for gforth +syn match forthInteger '\<\$\x*\x\+\>' " *1* --- dont't mess +syn match forthInteger '\<\x*\d\x*\>' " *2* --- this order! +syn match forthInteger '\<%[0-1]*[0-1]\+\>' +syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe]\d\+\>' +syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe][-+]\d\+\>' + +" XXX If you find this overkill you can remove it. this has to come after the +" highlighting for numbers otherwise it has no effect. +syn region forthComment start='0 \[if\]' end='\[endif\]' end='\[then\]' contains=forthTodo + +" Strings +syn region forthString start=+\.*\"+ end=+"+ end=+$+ +" XXX +syn region forthString start=+s\"+ end=+"+ end=+$+ +syn region forthString start=+c\"+ end=+"+ end=+$+ + +" Comments +syn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError +syn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError +syn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError +syn region forthComment start='\s(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError +syn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError + +" Include files +syn match forthInclude '^INCLUDE\s\+\k\+' +syn match forthInclude '^require\s\+\k\+' +syn match forthInclude '^fload\s\+' +syn match forthInclude '^needs\s\+' + +" Locals definitions +syn region forthLocals start='{\s' start='{$' end='\s}' end='^}' +syn match forthLocals '{ }' " otherwise, at least two spaces between +syn region forthDeprecated start='locals|' end='|' + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_forth_syn_inits") + if version < 508 + let did_forth_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + " The default methods for highlighting. Can be overriden later. + HiLink forthTodo Todo + HiLink forthOperators Operator + HiLink forthMath Number + HiLink forthInteger Number + HiLink forthFloat Float + HiLink forthStack Special + HiLink forthRstack Special + HiLink forthFStack Special + HiLink forthSP Special + HiLink forthMemory Function + HiLink forthAdrArith Function + HiLink forthMemBlks Function + HiLink forthCond Conditional + HiLink forthLoop Repeat + HiLink forthColonDef Define + HiLink forthEndOfColonDef Define + HiLink forthDefine Define + HiLink forthDebug Debug + HiLink forthAssembler Include + HiLink forthCharOps Character + HiLink forthConversion String + HiLink forthForth Statement + HiLink forthVocs Statement + HiLink forthString String + HiLink forthComment Comment + HiLink forthClassDef Define + HiLink forthEndOfClassDef Define + HiLink forthObjectDef Define + HiLink forthEndOfObjectDef Define + HiLink forthInclude Include + HiLink forthLocals Type " nothing else uses type and locals must stand out + HiLink forthDeprecated Error " if you must, change to Type + HiLink forthFileMode Function + HiLink forthFileWords Statement + HiLink forthBlocks Statement + HiLink forthSpaceError Error + + delcommand HiLink +endif + +let b:current_syntax = "forth" + +" vim:ts=8:sw=4:nocindent:smartindent: diff --git a/gating.yaml b/gating.yaml deleted file mode 100644 index 80852883..00000000 --- a/gating.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- !Policy -product_versions: - - fedora-* -decision_context: bodhi_update_push_testing -subject_type: koji_build -rules: - - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional} - -#Rawhide ---- !Policy -product_versions: - - fedora-* -decision_context: bodhi_update_push_stable -subject_type: koji_build -rules: - - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/tier1-public.functional} - -#gating rhel ---- !Policy -product_versions: - - rhel-* -decision_context: osci_compose_gate -rules: - - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-public.functional} - - !PassingTestCaseRule {test_case_name: osci.brew-build./plans/tier1-internal.functional} diff --git a/gvim.desktop b/gvim.desktop new file mode 100644 index 00000000..4f0d294e --- /dev/null +++ b/gvim.desktop @@ -0,0 +1,64 @@ +[Desktop Entry] +Name=Vi IMproved +Name[bg]=Vi Ãåäàêòîð +Name[ca]=Vi Millorat +Name[da]=Vi forbedret +Name[eo]=VIM +Name[et]=Täiustatud Vi (vim) +Name[fr]=Vi étendu (VIM) +Name[he]=רפושמ Vi +Name[hu]=Vi +Name[is]=Vi IMproved ritillinn +Name[it]=Vi iMproved +Name[no]=Vi IMproved (forbedret VI) +Name[pl]=Poprawiony VI (vim) +Name[ro]=VIM +Name[ru]=Улучшенный VI +Name[sk]=Vi IMpreved +Name[sl]=IzboljÅ¡ani vi (vim) +Name[sv]=Förbättrad Vi +Name[zh_CN.GB2312]=改进的 Vi +Comment=Powerful text editor with scripting functions and macro recorder +Comment[bg]=Ãåäàêòîð ñ ìíîãî âúçìîæíîñòè +Comment[ca]=Editor vi potent +Comment[cs]=Mocný textový editor vi +Comment[da]=En kraftig vi tekstbehandler +Comment[de]=Ein leistungsfähiger vi-Editor +Comment[el]=ΠανίσχυÏος διοÏθωτής vi +Comment[eo]=VIM similas al redaktilo "vi", sed havas aldonajn ecojn +Comment[es]=Una versión mejorada del editor vi +Comment[et]=Võimas tekstiredaktor vi +Comment[fi]=Tehokas vi-tekstieditori +Comment[fr]=Éditeur vi puissant +Comment[gl]=Potente editor vi +Comment[he]=Vi המצועה בר ךרועה +Comment[hr]=Napredni vi ureÄ‘ivaÄ +Comment[hu]=Vi szövegszerkesztÅ‘ +Comment[is]=Öflug útgáfa vi ritilsins +Comment[it]=Un editor vi potenziato +Comment[ja]=強力ãªViエディタ +Comment[lt]=Galingas vi redaktorius +Comment[mk]=Моќен VI уредувач +Comment[nl]=Krachtige vi-editor +Comment[no]=En kraftig vi-redigerer +Comment[no_NY]=Kraftig vi-tekstredigeringsprogram +Comment[pl]=Edytor vi +Comment[pt]=Um poderoso editor de texto +Comment[ro]=Un editor de texte VI, puternic +Comment[ru]=Мощный текÑтовый редактор vi +Comment[sk]=Silný textový procesor vi +Comment[sl]=Zmogljivi urejevalnik vi +Comment[sr]=Moćni vi editor +Comment[sv]=En kraftfull texteditor +Comment[ta]=ºì¾¢Å¡öó¾ vi ¦¾¡ÌôÀ¡Ç÷ +Comment[tr]=Güçlü vi düzenleyicisi +Comment[uk]=Потужний редактор vi +Comment[zh_CN.GB2312]=功能强大的 vi 编辑器 +MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; +Exec=gvim -f %F +Icon=gvim +Type=Application +Terminal=0 +X-XClassHintResName=VIM +MapNotify=false +Categories=Utility;TextEditor; diff --git a/gvim16.png b/gvim16.png index fb45d22a..b0859d66 100644 Binary files a/gvim16.png and b/gvim16.png differ diff --git a/gvim32.png b/gvim32.png index c6e04fab..961040c5 100644 Binary files a/gvim32.png and b/gvim32.png differ diff --git a/gvim48.png b/gvim48.png index 4bac67e6..71876645 100644 Binary files a/gvim48.png and b/gvim48.png differ diff --git a/gvim64.png b/gvim64.png index 5dcd4d33..2bdc8bd8 100644 Binary files a/gvim64.png and b/gvim64.png differ diff --git a/gzip.vim b/gzip.vim new file mode 100644 index 00000000..65602387 --- /dev/null +++ b/gzip.vim @@ -0,0 +1,36 @@ +" Vim plugin for editing compressed files. +" Maintainer: Bram Moolenaar +" Last Change: 2005 Jul 26 + +" Exit quickly when: +" - this plugin was already loaded +" - when 'compatible' is set +" - some autocommands are already taking care of compressed files +if exists("loaded_gzip") || &cp || exists("#BufReadPre#*.gz") + finish +endif +let loaded_gzip = 1 + +augroup gzip + " Remove all gzip autocommands + au! + + " Enable editing of gzipped files. + " The functions are defined in autoload/gzip.vim. + " + " Set binary mode before reading the file. + " Use "gzip -d", gunzip isn't always available. + autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z setlocal bin + autocmd BufReadPost,FileReadPost *.gz call gzip#read("gzip -dn") + autocmd BufReadPost,FileReadPost *.bz2 call gzip#read("bzip2 -d") + autocmd BufReadPost,FileReadPost *.Z call gzip#read("uncompress") + autocmd BufWritePost,FileWritePost *.gz call gzip#write("gzip") + autocmd BufWritePost,FileWritePost *.bz2 call gzip#write("bzip2") + autocmd BufWritePost,FileWritePost *.Z call gzip#write("compress -f") + autocmd FileAppendPre *.gz call gzip#appre("gzip -dn") + autocmd FileAppendPre *.bz2 call gzip#appre("bzip2 -d") + autocmd FileAppendPre *.Z call gzip#appre("uncompress") + autocmd FileAppendPost *.gz call gzip#write("gzip") + autocmd FileAppendPost *.bz2 call gzip#write("bzip2") + autocmd FileAppendPost *.Z call gzip#write("compress -f") +augroup END diff --git a/macros.vim b/macros.vim deleted file mode 100644 index a43156e7..00000000 --- a/macros.vim +++ /dev/null @@ -1 +0,0 @@ -%vimfiles_root %{_datadir}/vim/vimfiles diff --git a/netrw.vim b/netrw.vim new file mode 100644 index 00000000..7b688659 --- /dev/null +++ b/netrw.vim @@ -0,0 +1,8011 @@ +" netrw.vim: Handles file transfer and remote directory listing across +" AUTOLOAD SECTION +" Date: Oct 23, 2008 +" Version: 134 +" Maintainer: Charles E Campbell, Jr +" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim +" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided +" *as is* and come with no warranty of any kind, either +" expressed or implied. By using this plugin, you agree that +" in no event will the copyright holder be liable for any damages +" resulting from the use of this software. +"redraw!|call DechoSep()|call inputsave()|call input("Press to continue")|call inputrestore() +" +" But be doers of the Word, and not only hearers, deluding your own selves {{{1 +" (James 1:22 RSV) +" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +" Load Once: {{{1 +if &cp || exists("g:loaded_netrw") + finish +endif +let g:loaded_netrw = "v134" +if v:version < 702 + echohl WarningMsg + echo "***warning*** this version of netrw needs vim 7.2" + echohl Normal + finish +endif +if !exists("s:NOTE") + let s:NOTE = 0 + let s:WARNING = 1 + let s:ERROR = 2 +endif + +" sanity checks +if v:version < 700 + call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1) + finish +endif + +let s:keepcpo= &cpo +setlocal cpo&vim +"DechoTabOn +"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw) + +" ====================== +" Netrw Variables: {{{1 +" ====================== + +" --------------------------------------------------------------------- +" Netrw Constants: {{{2 +if !exists("g:netrw_dirhist_cnt") + let g:netrw_dirhist_cnt= 0 +endif +if !exists("s:LONGLIST") + let s:THINLIST = 0 + let s:LONGLIST = 1 + let s:WIDELIST = 2 + let s:TREELIST = 3 + let s:MAXLIST = 4 +endif + +" --------------------------------------------------------------------- +" Default values for netrw's global protocol variables {{{2 +if !exists("g:netrw_dav_cmd") + if executable("cadaver") + let g:netrw_dav_cmd = "cadaver" + elseif executable("curl") + let g:netrw_dav_cmd = "curl" + else + let g:netrw_dav_cmd = "" + endif +endif +if !exists("g:netrw_fetch_cmd") + if executable("fetch") + let g:netrw_fetch_cmd = "fetch -o" + else + let g:netrw_fetch_cmd = "" + endif +endif +if !exists("g:netrw_ftp_cmd") + let g:netrw_ftp_cmd = "ftp" +endif +if !exists("g:netrw_http_cmd") + if executable("elinks") + let g:netrw_http_cmd = "elinks" + if !exists("g:netrw_http_xcmd") + let g:netrw_http_xcmd= "-dump >" + endif + elseif executable("links") + let g:netrw_http_cmd = "links" + if !exists("g:netrw_http_xcmd") + let g:netrw_http_xcmd= "-dump >" + endif + elseif executable("curl") + let g:netrw_http_cmd = "curl" + if !exists("g:netrw_http_xcmd") + let g:netrw_http_xcmd= "-o" + endif + elseif executable("wget") + let g:netrw_http_cmd = "wget" + if !exists("g:netrw_http_xcmd") + let g:netrw_http_xcmd= "-q -O" + endif + elseif executable("fetch") + let g:netrw_http_cmd = "fetch" + if !exists("g:netrw_http_xcmd") + let g:netrw_http_xcmd= "-o" + endif + else + let g:netrw_http_cmd = "" + endif +endif +if !exists("g:netrw_rcp_cmd") + let g:netrw_rcp_cmd = "rcp" +endif +if !exists("g:netrw_rsync_cmd") + let g:netrw_rsync_cmd = "rsync" +endif +if !exists("g:netrw_scp_cmd") + let g:netrw_scp_cmd = "scp -q" +endif +if !exists("g:netrw_sftp_cmd") + let g:netrw_sftp_cmd = "sftp" +endif +if !exists("g:netrw_ssh_cmd") + let g:netrw_ssh_cmd= "ssh" +endif + +if (has("win32") || has("win95") || has("win64") || has("win16")) + \ && exists("g:netrw_use_nt_rcp") + \ && g:netrw_use_nt_rcp + \ && executable( $SystemRoot .'/system32/rcp.exe') + let s:netrw_has_nt_rcp = 1 + let s:netrw_rcpmode = '-b' +else + let s:netrw_has_nt_rcp = 0 + let s:netrw_rcpmode = '' +endif + +" --------------------------------------------------------------------- +" Default values for netrw's global variables {{{2 +" Cygwin Detection ------- {{{3 +if !exists("g:netrw_cygwin") + if has("win32") || has("win95") || has("win64") || has("win16") + if &shell =~ '\%(\\|\\)\%(\.exe\)\=$' + let g:netrw_cygwin= 1 + else + let g:netrw_cygwin= 0 + endif + else + let g:netrw_cygwin= 0 + endif +endif +" Default values - a-c ---------- {{{3 +if !exists("g:netrw_alto") + let g:netrw_alto= &sb +endif +if !exists("g:netrw_altv") + let g:netrw_altv= &spr +endif +if !exists("g:netrw_browse_split") + let g:netrw_browse_split= 0 +endif +if !exists("g:netrw_chgwin") + let g:netrw_chgwin = -1 +endif +if !exists("g:netrw_compress") + let g:netrw_compress= "gzip" +endif +if !exists("g:netrw_ctags") + let g:netrw_ctags= "ctags" +endif +if !exists("g:netrw_cursorline") + let g:netrw_cursorline= 1 + let s:netrw_usercul = &cursorline + let s:netrw_usercuc = &cursorcolumn +endif +" Default values - d-g ---------- {{{3 +if !exists("g:netrw_dirhist_cnt") + let g:netrw_dirhist_cnt= 0 +endif +if !exists("g:netrw_decompress") + let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"} +endif +if !exists("g:netrw_dirhistmax") + let g:netrw_dirhistmax= 10 +endif +if !exists("g:netrw_fastbrowse") + let g:netrw_fastbrowse= 1 +endif +if !exists("g:netrw_ftp_browse_reject") + let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$' +endif +if !exists("g:netrw_ftp_list_cmd") + if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin) + let g:netrw_ftp_list_cmd = "ls -lF" + let g:netrw_ftp_timelist_cmd = "ls -tlF" + let g:netrw_ftp_sizelist_cmd = "ls -slF" + else + let g:netrw_ftp_list_cmd = "dir" + let g:netrw_ftp_timelist_cmd = "dir" + let g:netrw_ftp_sizelist_cmd = "dir" + endif +endif +if !exists("g:netrw_ftpmode") + let g:netrw_ftpmode= "binary" +endif +" Default values - h-lh ---------- {{{3 +if !exists("g:netrw_hide") + let g:netrw_hide= 1 +endif +if !exists("g:netrw_ignorenetrc") + if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$' + let g:netrw_ignorenetrc= 1 + else + let g:netrw_ignorenetrc= 0 + endif +endif +if !exists("g:netrw_keepdir") + let g:netrw_keepdir= 1 +endif +if !exists("g:netrw_list_cmd") + if g:netrw_scp_cmd =~ '^pscp' && executable("pscp") + " provide a 'pscp' listing command + if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk") + let g:netrw_scp_cmd ="pscp -i C:\\private.ppk" + endif + let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:" + elseif executable(g:netrw_ssh_cmd) + " provide a default listing command + let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa" + else +" call Decho(g:netrw_ssh_cmd." is not executable") + let g:netrw_list_cmd= "" + endif +endif +if !exists("g:netrw_list_hide") + let g:netrw_list_hide= "" +endif +" Default values - lh-lz ---------- {{{3 +if !exists("g:netrw_localcopycmd") + if has("win32") || has("win95") || has("win64") || has("win16") + if g:netrw_cygwin + let g:netrw_localcopycmd= "cp" + else + let g:netrw_localcopycmd= "copy" + endif + elseif has("unix") || has("macunix") + let g:netrw_localcopycmd= "cp" + else + let g:netrw_localcopycmd= "" + endif +endif +if !exists("g:netrw_local_mkdir") + let g:netrw_local_mkdir= "mkdir" +endif +if !exists("g:netrw_localmovecmd") + if has("win32") || has("win95") || has("win64") || has("win16") + if g:netrw_cygwin + let g:netrw_localmovecmd= "mv" + else + let g:netrw_localmovecmd= "move" + endif + elseif has("unix") || has("macunix") + let g:netrw_localmovecmd= "mv" + else + let g:netrw_localmovecmd= "" + endif +endif +if !exists("g:netrw_local_rmdir") + let g:netrw_local_rmdir= "rmdir" +endif +if !exists("g:netrw_liststyle") + let g:netrw_liststyle= s:THINLIST +endif +if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST + " sanity check + let g:netrw_liststyle= s:THINLIST +endif +if g:netrw_liststyle == s:LONGLIST && g:netrw_scp_cmd !~ '^pscp' + let g:netrw_list_cmd= g:netrw_list_cmd." -l" +endif +" Default values - m-r ---------- {{{3 +if !exists("g:netrw_markfileesc") + let g:netrw_markfileesc= '*./[\~' +endif +if !exists("g:netrw_maxfilenamelen") + let g:netrw_maxfilenamelen= 32 +endif +if !exists("g:netrw_menu") + let g:netrw_menu= 1 +endif +if !exists("g:netrw_mkdir_cmd") + let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir" +endif +if !exists("g:netrw_mousemaps") + if exists("&mouse") && &mouse =~ '[anh]' + let g:netrw_mousemaps= 1 + else + let g:netrw_mousemaps= 0 + endif +endif +if !exists("g:netrw_retmap") + let g:netrw_retmap= 0 +endif +if !exists("g:netrw_preview") + let g:netrw_preview= 0 +endif +if !exists("g:netrw_scpport") + let g:netrw_scpport= "-P" +endif +if !exists("g:netrw_sshport") + let g:netrw_sshport= "-p" +endif +if !exists("g:netrw_rename_cmd") + let g:netrw_rename_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mv" +endif +if !exists("g:netrw_rm_cmd") + let g:netrw_rm_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rm" +endif +if !exists("g:netrw_rmdir_cmd") + let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir" +endif +if !exists("g:netrw_rmf_cmd") + let g:netrw_rmf_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f" +endif +" Default values - s ---------- {{{3 + " set up shell quoting character +if exists("g:netrw_silent") && g:netrw_silent != 0 + let s:netrw_silentxfer= "silent " +else + let s:netrw_silentxfer= "" +endif +if !exists("g:netrw_sort_by") + " alternatives: date size + let g:netrw_sort_by= "name" +endif +if !exists("g:netrw_sort_options") + let g:netrw_sort_options= "" +endif +if !exists("g:netrw_sort_direction") + " alternative: reverse (z y x ...) + let g:netrw_sort_direction= "normal" +endif +if !exists("g:netrw_sort_sequence") + let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$' +endif +if !exists("g:netrw_special_syntax") + let g:netrw_special_syntax= 0 +endif +if !exists("g:netrw_ssh_browse_reject") + let g:netrw_ssh_browse_reject='^total\s\+\d\+$' +endif +if !has("patch192") + if !exists("g:netrw_use_noswf") + let g:netrw_use_noswf= 1 + endif +else + let g:netrw_use_noswf= 0 +endif +" Default values - t-w ---------- {{{3 +if !exists("g:netrw_timefmt") + let g:netrw_timefmt= "%c" +endif +if !exists("g:netrw_xstrlen") + let g:netrw_xstrlen= 1 +endif +if !exists("g:NetrwTopLvlMenu") + let g:NetrwTopLvlMenu= "Netrw." +endif +if !exists("g:netrw_use_errorwindow") + let g:netrw_use_errorwindow= 1 +endif +if !exists("g:netrw_win95ftp") + let g:netrw_win95ftp= 1 +endif +if !exists("g:netrw_winsize") + let g:netrw_winsize= "" +endif +" --------------------------------------------------------------------- +" Default values for netrw's script variables: {{{2 +if !exists("g:netrw_fname_escape") + let g:netrw_fname_escape= ' ?&;%' +endif +if !exists("g:netrw_glob_escape") + let g:netrw_glob_escape= '[]*?`{~$' +endif +if !exists("g:netrw_tmpfile_escape") + let g:netrw_tmpfile_escape= ' &;' +endif +let s:netrw_map_escape = "<|\n\r\\\\"" + +" BufEnter event ignored by decho when following variable is true +" Has a side effect that doau BufReadPost doesn't work, so +" files read by network transfer aren't appropriately highlighted. +"let g:decho_bufenter = 1 "Decho + +" ============================== +" Netrw Utility Functions: {{{1 +" ============================== + +" ------------------------------------------------------------------------ +" s:NetrwOptionSave: save options and set to "standard" form {{{2 +" 06/08/07 : removed call to NetrwSafeOptions(), either placed +" immediately after NetrwOptionSave() calls in NetRead +" and NetWrite, or after the s:NetrwEnew() call in +" NetrwBrowse. +" vt: normally its "w:" or "s:" (a variable type) +fun! s:NetrwOptionSave(vt) +" call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">") + +" call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist")) + if !exists("{a:vt}netrw_optionsave") + let {a:vt}netrw_optionsave= 1 + else +" call Dret("s:NetrwOptionSave : options already saved") + return + endif +" call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")) + + " Save current settings and current directory + let s:yykeep = @@ + if exists("&l:acd") + let {a:vt}netrw_acdkeep = &l:acd + endif + let {a:vt}netrw_aikeep = &l:ai + let {a:vt}netrw_awkeep = &l:aw + let {a:vt}netrw_cikeep = &l:ci + let {a:vt}netrw_cinkeep = &l:cin + let {a:vt}netrw_cinokeep = &l:cino + let {a:vt}netrw_comkeep = &l:com + let {a:vt}netrw_cpokeep = &l:cpo + if g:netrw_keepdir + let {a:vt}netrw_dirkeep = getcwd() + endif + let {a:vt}netrw_fokeep = &l:fo " formatoptions + let {a:vt}netrw_gdkeep = &l:gd " gdefault + let {a:vt}netrw_hidkeep = &l:hidden + let {a:vt}netrw_magickeep = &l:magic + let {a:vt}netrw_repkeep = &l:report + let {a:vt}netrw_spellkeep = &l:spell + let {a:vt}netrw_twkeep = &l:tw " textwidth + let {a:vt}netrw_wigkeep = &l:wig " wildignore + if has("win32") && !has("win95") + let {a:vt}netrw_swfkeep = &l:swf " swapfile + endif + if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif + silent! let {a:vt}netrw_regslash= @/ + +" call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%")) +endfun + +" ------------------------------------------------------------------------ +" s:NetrwOptionRestore: restore options {{{2 +fun! s:NetrwOptionRestore(vt) +" call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")) + if !exists("{a:vt}netrw_optionsave") +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist") + return + endif + unlet {a:vt}netrw_optionsave + + if exists("&acd") + if exists("{a:vt}netrw_acdkeep") +" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) + let curdir = getcwd() + let &l:acd = {a:vt}netrw_acdkeep + unlet {a:vt}netrw_acdkeep + if &l:acd +" call Decho("exe keepjumps lcd ".fnameescape(curdir)) " NOTE: was g:netrw_fname_escape for some reason + try + if !exists("&l:acd") && !&l:acd + exe 'keepjumps lcd '.fnameescape(curdir) + endif + catch /^Vim\%((\a\+)\)\=:E472/ + call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".curdir."> (permissions?)",61) + endtry + endif + endif + endif + if exists("{a:vt}netrw_aikeep") |let &l:ai = {a:vt}netrw_aikeep |unlet {a:vt}netrw_aikeep |endif + if exists("{a:vt}netrw_awkeep") |let &l:aw = {a:vt}netrw_awkeep |unlet {a:vt}netrw_awkeep |endif + if exists("{a:vt}netrw_cikeep") |let &l:ci = {a:vt}netrw_cikeep |unlet {a:vt}netrw_cikeep |endif + if exists("{a:vt}netrw_cinkeep") |let &l:cin = {a:vt}netrw_cinkeep |unlet {a:vt}netrw_cinkeep |endif + if exists("{a:vt}netrw_cinokeep") |let &l:cino = {a:vt}netrw_cinokeep |unlet {a:vt}netrw_cinokeep |endif + if exists("{a:vt}netrw_comkeep") |let &l:com = {a:vt}netrw_comkeep |unlet {a:vt}netrw_comkeep |endif + if exists("{a:vt}netrw_cpokeep") |let &l:cpo = {a:vt}netrw_cpokeep |unlet {a:vt}netrw_cpokeep |endif + if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir + let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g') + if exists("{a:vt}netrw_dirkeep") |exe "keepjumps lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep |endif + endif + if exists("{a:vt}netrw_fokeep") |let &l:fo = {a:vt}netrw_fokeep |unlet {a:vt}netrw_fokeep |endif + if exists("{a:vt}netrw_gdkeep") |let &l:gd = {a:vt}netrw_gdkeep |unlet {a:vt}netrw_gdkeep |endif + if exists("{a:vt}netrw_hidkeep") |let &l:hidden = {a:vt}netrw_hidkeep |unlet {a:vt}netrw_hidkeep |endif + if exists("{a:vt}netrw_magic") |let &l:magic = {a:vt}netrw_magic |unlet {a:vt}netrw_magic |endif + if exists("{a:vt}netrw_repkeep") |let &l:report = {a:vt}netrw_repkeep |unlet {a:vt}netrw_repkeep |endif + if exists("{a:vt}netrw_spellkeep")|let &l:spell = {a:vt}netrw_spellkeep |unlet {a:vt}netrw_spellkeep|endif + if exists("{a:vt}netrw_twkeep") |let &l:tw = {a:vt}netrw_twkeep |unlet {a:vt}netrw_twkeep |endif + if exists("{a:vt}netrw_wigkeep") |let &l:wig = {a:vt}netrw_wigkeep |unlet {a:vt}netrw_wigkeep |endif + if exists("s:yykeep") |let @@ = s:yykeep |unlet s:yykeep |endif + if exists("{a:vt}netrw_swfkeep") + if &directory == "" + " user hasn't specified a swapfile directory; + " netrw will temporarily set the swapfile directory + " to the current directory as returned by getcwd(). + let &l:directory = getcwd() + silent! let &l:swf = {a:vt}netrw_swfkeep + setlocal directory= + unlet {a:vt}netrw_swfkeep + elseif &l:swf != {a:vt}netrw_swfkeep + " following line causes a Press ENTER in windows -- can't seem to work around it!!! + silent! let &l:swf= {a:vt}netrw_swfkeep + unlet {a:vt}netrw_swfkeep + endif + endif + if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif + if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif + +" call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) +" call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%")) +endfun + +" --------------------------------------------------------------------- +" s:NetrwSafeOptions: sets options to help netrw do its job {{{2 +fun! s:NetrwSafeOptions() +" call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">") +" call Decho("window's ft=".&ft) + setlocal cino= + setlocal com= + setlocal cpo-=aA + if exists("&acd") | setlocal noacd | endif + setlocal nocin noai noci magic nospell nohid wig= noaw + setlocal fo=nroql2 + setlocal tw=0 + setlocal report=10000 + setlocal isk+=@ isk+=* isk+=/ + if g:netrw_use_noswf && has("win32") && !has("win95") + setlocal noswf + endif +" call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")) +" call Dret("s:NetrwSafeOptions") +endfun + +" --------------------------------------------------------------------- +" netrw#NetrwClean: remove netrw {{{2 +" supports :NetrwClean -- remove netrw from first directory on runtimepath +" :NetrwClean! -- remove netrw from all directories on runtimepath +fun! netrw#NetrwClean(sys) +" call Dfunc("netrw#NetrwClean(sys=".a:sys.")") + + if a:sys + let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No") + else + let choice= confirm("Remove personal copy of netrw?","&Yes\n&No") + endif +" call Decho("choice=".choice) + let diddel= 0 + let diddir= "" + + if choice == 1 + for dir in split(&rtp,',') + if filereadable(dir."/plugin/netrwPlugin.vim") +" call Decho("removing netrw-related files from ".dir) + if s:NetrwDelete(dir."/plugin/netrwPlugin.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55) |endif + if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif + if s:NetrwDelete(dir."/autoload/netrwSettings.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55) |endif + if s:NetrwDelete(dir."/autoload/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55) |endif + if s:NetrwDelete(dir."/syntax/netrw.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55) |endif + if s:NetrwDelete(dir."/syntax/netrwlist.vim") |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55) |endif + let diddir= dir + let diddel= diddel + 1 + if !a:sys|break|endif + endif + endfor + endif + + echohl WarningMsg + if diddel == 0 + echomsg "netrw is either not installed or not removable" + elseif diddel == 1 + echomsg "removed one copy of netrw from <".diddir.">" + else + echomsg "removed ".diddel." copies of netrw" + endif + echohl None + +" call Dret("netrw#NetrwClean") +endfun + +" ------------------------------------------------------------------------ +" Netrw Transfer Functions: {{{1 +" =============================== + +" ------------------------------------------------------------------------ +" netrw#NetRead: responsible for reading a file over the net {{{2 +" mode: =0 read remote file and insert before current line +" =1 read remote file and insert after current line +" =2 replace with remote file +" =3 obtain file, but leave in temporary format +fun! netrw#NetRead(mode,...) +" call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw) + + " save options {{{3 + call s:NetrwOptionSave("w:") + call s:NetrwSafeOptions() + + " interpret mode into a readcmd {{{3 + if a:mode == 0 " read remote file before current line + let readcmd = "0r" + elseif a:mode == 1 " read file after current line + let readcmd = "r" + elseif a:mode == 2 " replace with remote file + let readcmd = "%r" + elseif a:mode == 3 " skip read of file (leave as temporary) + let readcmd = "t" + else + exe a:mode + let readcmd = "r" + endif + let ichoice = (a:0 == 0)? 0 : 1 +" call Decho("readcmd<".readcmd."> ichoice=".ichoice) + + " Get Temporary Filename {{{3 + let tmpfile= s:GetTempfile("") + if tmpfile == "" +" call Dret("netrw#NetRead : unable to get a tempfile!") + return + endif + + while ichoice <= a:0 + + " attempt to repeat with previous host-file-etc + if exists("b:netrw_lastfile") && a:0 == 0 +" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">") + let choice = b:netrw_lastfile + let ichoice= ichoice + 1 + + else + exe "let choice= a:" . ichoice +" call Decho("no lastfile: choice<" . choice . ">") + + if match(choice,"?") == 0 + " give help + echomsg 'NetRead Usage:' + echomsg ':Nread machine:path uses rcp' + echomsg ':Nread "machine path" uses ftp with <.netrc>' + echomsg ':Nread "machine id password path" uses ftp' + echomsg ':Nread dav://machine[:port]/path uses cadaver' + echomsg ':Nread fetch://machine/path uses fetch' + echomsg ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' + echomsg ':Nread http://[user@]machine/path uses http wget' + echomsg ':Nread rcp://[user@]machine/path uses rcp' + echomsg ':Nread rsync://machine[:port]/path uses rsync' + echomsg ':Nread scp://[user@]machine[[:#]port]/path uses scp' + echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp' + sleep 4 + break + + elseif match(choice,'^"') != -1 + " Reconstruct Choice if choice starts with '"' +" call Decho("reconstructing choice") + if match(choice,'"$') != -1 + " case "..." + let choice=strpart(choice,1,strlen(choice)-2) + else + " case "... ... ..." + let choice = strpart(choice,1,strlen(choice)-1) + let wholechoice = "" + + while match(choice,'"$') == -1 + let wholechoice = wholechoice . " " . choice + let ichoice = ichoice + 1 + if ichoice > a:0 + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3) + endif +" call Dret("netrw#NetRead :2 getcwd<".getcwd().">") + return + endif + let choice= a:{ichoice} + endwhile + let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1) + endif + endif + endif + +" call Decho("choice<" . choice . ">") + let ichoice= ichoice + 1 + + " Determine method of read (ftp, rcp, etc) {{{3 + call s:NetrwMethod(choice) + if !exists("b:netrw_method") || b:netrw_method < 0 +" call Dfunc("netrw#NetRead : unsupported method") + return + endif + let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix + + " Check if NetrwBrowse() should be handling this request +" call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">") + if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://' +" call Decho("yes, choice matches '^.*[\/]$'") + keepjumps call s:NetrwBrowse(0,choice) +" call Dret("netrw#NetRead :3 getcwd<".getcwd().">") + return + endif + + " ============ + " Perform Protocol-Based Read {{{3 + " =========================== + if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 + echo "(netrw) Processing your read request..." + endif + + "......................................... + " rcp: NetRead Method #1 {{{3 + if b:netrw_method == 1 " read with rcp +" call Decho("read via rcp (method #1)") + " ER: nothing done with g:netrw_uid yet? + " ER: on Win2K" rcp machine[.user]:file tmpfile + " ER: if machine contains '.' adding .user is required (use $USERNAME) + " ER: the tmpfile is full path: rcp sees C:\... as host C + if s:netrw_has_nt_rcp == 1 + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_machine .'.'. g:netrw_uid + else + " Any way needed it machine contains a '.' + let uid_machine = g:netrw_machine .'.'. $USERNAME + endif + else + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_uid .'@'. g:netrw_machine + else + let uid_machine = g:netrw_machine + endif + endif +" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1) + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " ftp + <.netrc>: NetRead Method #2 {{{3 + elseif b:netrw_method == 2 " read with ftp + <.netrc> +" call Decho("read via ftp+.netrc (method #2)") + let netrw_fname= b:netrw_fname + call s:SaveBufVars()|new|call s:RestoreBufVars() + let filtbuf= bufnr("%") + setlocal ff=unix + put =g:netrw_ftpmode +" call Decho("filter input: ".getline(line("$"))) + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline(line("$"))) + endif + call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile) +" call Decho("filter input: ".getline(line("$"))) + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1) + else +" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' + let debugkeep = &debug + setlocal debug=msg + call netrw#ErrorMsg(s:ERROR,getline(1),4) + let &debug = debugkeep + endif + call s:SaveBufVars() + bd! + if bufname("%") == "" && getline("$") == "" && line('$') == 1 + " needed when one sources a file in a nolbl setting window via ftp + q! + endif + call s:RestoreBufVars() + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " ftp + machine,id,passwd,filename: NetRead Method #3 {{{3 + elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname + " Construct execution string (four lines) which will be passed through filter +" call Decho("read via ftp+mipf (method #3)") + let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) + call s:SaveBufVars()|new|call s:RestoreBufVars() + let filtbuf= bufnr("%") + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port +" call Decho("filter input: ".getline('.')) + else + put ='open '.g:netrw_machine +" call Decho("filter input: ".getline('.')) + endif + + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + put =g:netrw_uid +" call Decho("filter input: ".getline('.')) + put ='\"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('.')) + else + put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('.')) + endif + + if exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" + put =g:netrw_ftpmode +" call Decho("filter input: ".getline('.')) + endif + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + put ='get \"'.netrw_fname.'\" '.tmpfile +" call Decho("filter input: ".getline('.')) + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password + norm! 1Gdd +" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n") + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + if getline(1) !~ "^$" +" call Decho("error<".getline(1).">") + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,getline(1),5) + endif + endif + call s:SaveBufVars()|bd!|call s:RestoreBufVars() + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " scp: NetRead Method #4 {{{3 + elseif b:netrw_method == 4 " read with scp +" call Decho("read via scp (method #4)") + if exists("g:netrw_port") && g:netrw_port != "" + let useport= " ".g:netrw_scpport." ".g:netrw_port + else + let useport= "" + endif +" call Decho("exe s:netrw_silentxfer.!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1) + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " http: NetRead Method #5 (wget) {{{3 + elseif b:netrw_method == 5 +" call Decho("read via http (method #5)") + if g:netrw_http_cmd == "" + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6) + endif +" call Dret("netrw#NetRead :4 getcwd<".getcwd().">") + return + endif + + if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd") + " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch) +" call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)") + if exists("g:netrw_http_xcmd") +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1) + else +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1) + endif + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + + else + " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker) +" call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)") + let netrw_html= substitute(b:netrw_fname,"#.*$","","") + let netrw_tag = substitute(b:netrw_fname,"^.*#","","") +" call Decho("netrw_html<".netrw_html.">") +" call Decho("netrw_tag <".netrw_tag.">") +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)) + exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1) + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) +" call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/') + exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\" + endif + let b:netrw_lastfile = choice + setlocal ro + + "......................................... + " dav: NetRead Method #6 {{{3 + elseif b:netrw_method == 6 +" call Decho("read via cadaver (method #6)") + + if !executable(g:netrw_dav_cmd) + call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73) +" call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable") + return + endif + if g:netrw_dav_cmd =~ "curl" +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1) + else + " Construct execution string (four lines) which will be passed through filter + let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + else + put ='open '.g:netrw_machine + endif + put ='user '.g:netrw_uid.' '.s:netrw_passwd + put ='get '.netrw_fname.' '.tmpfile + put ='quit' + + " perform cadaver operation: + norm! 1Gdd +" call Decho("executing: %!".g:netrw_dav_cmd) + exe s:netrw_silentxfer."%!".g:netrw_dav_cmd + bd! + endif + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " rsync: NetRead Method #7 {{{3 + elseif b:netrw_method == 7 +" call Decho("read via rsync (method #7)") +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)) + exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1) + let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " fetch: NetRead Method #8 {{{3 + " fetch://[user@]host[:http]/path + elseif b:netrw_method == 8 +" call Decho("read via fetch (method #8)") + if g:netrw_fetch_cmd == "" + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"fetch command not available",7) + endif +" call Dret("NetRead") + endif + if exists("g:netrw_option") && g:netrw_option == ":http" + let netrw_option= "http" + else + let netrw_option= "ftp" + endif +" call Decho("read via fetch for ".netrw_option) + + if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != "" +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1) + else +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1) + endif + + let result = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + setlocal ro + + "......................................... + " sftp: NetRead Method #9 {{{3 + elseif b:netrw_method == 9 +" call Decho("read via sftp (method #9)") +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile) + exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile + let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method) + let b:netrw_lastfile = choice + + "......................................... + " Complain {{{3 + else + call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8) + endif + endwhile + + " cleanup {{{3 + if exists("b:netrw_method") +" call Decho("cleanup b:netrw_method and b:netrw_fname") + unlet b:netrw_method + unlet b:netrw_fname + endif + if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' +" call Decho("cleanup by deleting tmpfile<".tmpfile.">") + call s:NetrwDelete(tmpfile) + endif + call s:NetrwOptionRestore("w:") + +" call Dret("netrw#NetRead :5 getcwd<".getcwd().">") +endfun + +" ------------------------------------------------------------------------ +" netrw#NetWrite: responsible for writing a file over the net {{{2 +fun! netrw#NetWrite(...) range +" call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw) + + " option handling + let mod= 0 + call s:NetrwOptionSave("w:") + call s:NetrwSafeOptions() + + " Get Temporary Filename {{{3 + let tmpfile= s:GetTempfile("") + if tmpfile == "" +" call Dret("netrw#NetWrite : unable to get a tempfile!") + return + endif + + if a:0 == 0 + let ichoice = 0 + else + let ichoice = 1 + endif + + let curbufname= expand("%") +" call Decho("curbufname<".curbufname.">") + if &binary + " For binary writes, always write entire file. + " (line numbers don't really make sense for that). + " Also supports the writing of tar and zip files. +" call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)) + silent exe "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile) + elseif g:netrw_cygwin + " write (selected portion of) file to temporary + let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','') +" call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)) + silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile) + else + " write (selected portion of) file to temporary +" call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)) + silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile) + endif + + if curbufname == "" + " if the file is [No Name], and one attempts to Nwrite it, the buffer takes + " on the temporary file's name. Deletion of the temporary file during + " cleanup then causes an error message. + 0file! + endif + + " While choice loop: {{{3 + while ichoice <= a:0 + + " Process arguments: {{{4 + " attempt to repeat with previous host-file-etc + if exists("b:netrw_lastfile") && a:0 == 0 +" call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">") + let choice = b:netrw_lastfile + let ichoice= ichoice + 1 + else + exe "let choice= a:" . ichoice + + " Reconstruct Choice if choice starts with '"' + if match(choice,"?") == 0 + echomsg 'NetWrite Usage:"' + echomsg ':Nwrite machine:path uses rcp' + echomsg ':Nwrite "machine path" uses ftp with <.netrc>' + echomsg ':Nwrite "machine id password path" uses ftp' + echomsg ':Nwrite dav://[user@]machine/path uses cadaver' + echomsg ':Nwrite fetch://[user@]machine/path uses fetch' + echomsg ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)' + echomsg ':Nwrite rcp://machine/path uses rcp' + echomsg ':Nwrite rsync://[user@]machine/path uses rsync' + echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp' + echomsg ':Nwrite sftp://[user@]machine/path uses sftp' + sleep 4 + break + + elseif match(choice,"^\"") != -1 + if match(choice,"\"$") != -1 + " case "..." + let choice=strpart(choice,1,strlen(choice)-2) + else + " case "... ... ..." + let choice = strpart(choice,1,strlen(choice)-1) + let wholechoice = "" + + while match(choice,"\"$") == -1 + let wholechoice= wholechoice . " " . choice + let ichoice = ichoice + 1 + if choice > a:0 + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13) + endif +" call Dret("netrw#NetWrite") + return + endif + let choice= a:{ichoice} + endwhile + let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1) + endif + endif + endif + let ichoice= ichoice + 1 +" call Decho("choice<" . choice . "> ichoice=".ichoice) + + " Determine method of write (ftp, rcp, etc) {{{4 + call s:NetrwMethod(choice) + if !exists("b:netrw_method") || b:netrw_method < 0 +" call Dfunc("netrw#NetWrite : unsupported method") + return + endif + + " ============= + " Perform Protocol-Based Write {{{4 + " ============================ + if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 + echo "(netrw) Processing your write request..." +" call Decho("(netrw) Processing your write request...") + endif + + "......................................... + " rcp: NetWrite Method #1 {{{4 + if b:netrw_method == 1 +" call Decho("write via rcp (method #1)") + if s:netrw_has_nt_rcp == 1 + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_machine .'.'. g:netrw_uid + else + let uid_machine = g:netrw_machine .'.'. $USERNAME + endif + else + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_uid .'@'. g:netrw_machine + else + let uid_machine = g:netrw_machine + endif + endif +" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1) + let b:netrw_lastfile = choice + + "......................................... + " ftp + <.netrc>: NetWrite Method #2 {{{4 + elseif b:netrw_method == 2 +" call Decho("write via ftp+.netrc (method #2)") + let netrw_fname= b:netrw_fname + new +" call Decho("filter input window#".winnr()) + setlocal ff=unix + put =g:netrw_ftpmode +" call Decho("filter input: ".getline('$')) + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline("$")) + endif + call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"') +" call Decho("filter input: ".getline("$")) + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) + else +" call Decho("filter input window#".winnr()) +" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + if getline(1) !~ "^$" + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,getline(1),14) + endif + let mod=1 + endif + bd! + let b:netrw_lastfile = choice + + "......................................... + " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{4 + elseif b:netrw_method == 3 + " Construct execution string (four lines) which will be passed through filter +" call Decho("read via ftp+mipf (method #3)") + let netrw_fname= b:netrw_fname + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port +" call Decho("filter input: ".getline('.')) + else + put ='open '.g:netrw_machine +" call Decho("filter input: ".getline('.')) + endif + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + put =g:netrw_uid +" call Decho("filter input: ".getline('.')) + put ='\"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('.')) + else + put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('.')) + endif + put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"' +" call Decho("filter input: ".getline('.')) + " save choice/id/password for future use + let b:netrw_lastfile = choice + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password + norm! 1Gdd +" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n") + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + if getline(1) !~ "^$" + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,getline(1),15) + endif + let mod=1 + endif + bd! + + "......................................... + " scp: NetWrite Method #4 {{{4 + elseif b:netrw_method == 4 +" call Decho("write via scp (method #4)") + if exists("g:netrw_port") && g:netrw_port != "" + let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port) + else + let useport= "" + endif +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1) + let b:netrw_lastfile = choice + + "......................................... + " http: NetWrite Method #5 {{{4 + elseif b:netrw_method == 5 +" call Decho("write via http (method #5)") + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"currently does not support writing using http:",16) + endif + + "......................................... + " dav: NetWrite Method #6 (cadaver) {{{4 + elseif b:netrw_method == 6 +" call Decho("write via cadaver (method #6)") + + " Construct execution string (four lines) which will be passed through filter + let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) + new + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + else + put ='open '.g:netrw_machine + endif + if exists("g:netrw_uid") && exists("s:netrw_passwd") + put ='user '.g:netrw_uid.' '.s:netrw_passwd + endif + put ='put '.tmpfile.' '.netrw_fname + + " perform cadaver operation: + norm! 1Gdd +" call Decho("executing: %!".g:netrw_dav_cmd) + exe s:netrw_silentxfer."%!".g:netrw_dav_cmd + bd! + let b:netrw_lastfile = choice + + "......................................... + " rsync: NetWrite Method #7 {{{4 + elseif b:netrw_method == 7 +" call Decho("write via rsync (method #7)") +" call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)) + exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1) + let b:netrw_lastfile = choice + + "......................................... + " sftp: NetWrite Method #9 {{{4 + elseif b:netrw_method == 9 +" call Decho("read via sftp (method #9)") + let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape) + if exists("g:netrw_uid") && ( g:netrw_uid != "" ) + let uid_machine = g:netrw_uid .'@'. g:netrw_machine + else + let uid_machine = g:netrw_machine + endif + new + setlocal ff=unix + put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname +" call Decho("filter input: ".getline('.')) + norm! 1Gdd +" call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)) + exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1) + bd! + let b:netrw_lastfile= choice + + "......................................... + " Complain {{{4 + else + call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17) + endif + endwhile + + " Cleanup: {{{3 +" call Decho("cleanup") + if s:FileReadable(tmpfile) +" call Decho("tmpfile<".tmpfile."> readable, will now delete it") + call s:NetrwDelete(tmpfile) + endif + call s:NetrwOptionRestore("w:") + + if a:firstline == 1 && a:lastline == line("$") + " restore modifiability; usually equivalent to set nomod + let &mod= mod + endif + +" call Dret("netrw#NetWrite") +endfun + +" --------------------------------------------------------------------- +" netrw#NetSource: source a remotely hosted vim script {{{2 +" uses NetRead to get a copy of the file into a temporarily file, +" then sources that file, +" then removes that file. +fun! netrw#NetSource(...) +" call Dfunc("netrw#NetSource() a:0=".a:0) + if a:0 > 0 && a:1 == '?' + " give help + echomsg 'NetSource Usage:' + echomsg ':Nsource dav://machine[:port]/path uses cadaver' + echomsg ':Nsource fetch://machine/path uses fetch' + echomsg ':Nsource ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>' + echomsg ':Nsource http://[user@]machine/path uses http wget' + echomsg ':Nsource rcp://[user@]machine/path uses rcp' + echomsg ':Nsource rsync://machine[:port]/path uses rsync' + echomsg ':Nsource scp://[user@]machine[[:#]port]/path uses scp' + echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp' + sleep 4 + else + let i= 1 + while i <= a:0 + call netrw#NetRead(3,a:{i}) +" call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">") + if s:FileReadable(s:netrw_tmpfile) +" call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile)) + exe "so ".fnameescape(s:netrw_tmpfile) +" call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")") + call delete(s:netrw_tmpfile) + unlet s:netrw_tmpfile + else + call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48) + endif + let i= i + 1 + endwhile + endif +" call Dret("netrw#NetSource") +endfun + +" =========================================== +" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2 +" readcmd == %r : replace buffer with newly read file +" == 0r : read file at top of buffer +" == r : read file after current line +" == t : leave file in temporary form (ie. don't read into buffer) +fun! s:NetrwGetFile(readcmd, tfile, method) +" call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)") + + " readcmd=='t': simply do nothing + if a:readcmd == 't' +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("NetrwGetFile : skip read of <".a:tfile.">") + return + endif + + " get name of remote filename (ie. url and all) + let rfile= bufname("%") +" call Decho("rfile<".rfile.">") + + if exists("*NetReadFixup") + " for the use of NetReadFixup (not otherwise used internally) + let line2= line("$") + endif + + if a:readcmd[0] == '%' + " get file into buffer +" call Decho("get file into buffer") + + " rename the current buffer to the temp file (ie. tfile) + if g:netrw_cygwin + let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','') + else + let tfile= a:tfile + endif +" call Decho("exe silent! keepalt file ".fnameescape(tfile)) + exe "silent! keepalt file ".fnameescape(tfile) + + " edit temporary file (ie. read the temporary file in) + if rfile =~ '\.zip$' +" call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)") + call zip#Browse(tfile) + elseif rfile =~ '\.tar$' +" call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)") + call tar#Browse(tfile) + elseif rfile =~ '\.tar\.gz' +" call Decho("handling remote gzip-compressed tar file") + call tar#Browse(tfile) + elseif rfile =~ '\.tar\.bz2' +" call Decho("handling remote bz2-compressed tar file") + call tar#Browse(tfile) + else +" call Decho("edit temporary file") + e! + endif + + " rename buffer back to remote filename +" call Decho("exe silent! keepalt file ".fnameescape(rfile)) + exe "silent! keepalt file ".fnameescape(rfile) + if a:method == 5 + set ft=html + else + filetype detect + endif +" call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!") + let line1 = 1 + let line2 = line("$") + + elseif s:FileReadable(a:tfile) + " read file after current line +" call Decho("read file<".a:tfile."> after current line") + let curline = line(".") + let lastline= line("$") +" call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)."> line#".curline) + exe a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile) + let line1= curline + 1 + let line2= line("$") - lastline + 1 + + else + " not readable +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Decho("tfile<".a:tfile."> not readable") + call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9) +" call Dret("NetrwGetFile : tfile<".a:tfile."> not readable") + return + endif + + " User-provided (ie. optional) fix-it-up command + if exists("*NetReadFixup") +" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")") + call NetReadFixup(a:method, line1, line2) +" else " Decho +" call Decho("NetReadFixup() not called, doesn't exist (line1=".line1." line2=".line2.")") + endif + + if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' + " update the Buffers menu + call s:UpdateBuffersMenu() + endif + +" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile)) + + " make sure file is being displayed +" redraw! + +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("NetrwGetFile") +endfun + +" ------------------------------------------------------------------------ +" s:NetrwMethod: determine method of transfer {{{2 +" Input: +" choice = url [protocol:]//[userid@]hostname[:port]/[path-to-file] +" Output: +" b:netrw_method= 1: rcp +" 2: ftp + <.netrc> +" 3: ftp + machine, id, password, and [path]filename +" 4: scp +" 5: http (wget) +" 6: dav +" 7: rsync +" 8: fetch +" 9: sftp +" g:netrw_machine= hostname +" b:netrw_fname = filename +" g:netrw_port = optional port number (for ftp) +" g:netrw_choice = copy of input url (choice) +fun! s:NetrwMethod(choice) +" call Dfunc("NetrwMethod(a:choice<".a:choice.">)") + + " record current g:netrw_machine, if any + " curmachine used if protocol == ftp and no .netrc + if exists("g:netrw_machine") + let curmachine= g:netrw_machine +" call Decho("curmachine<".curmachine.">") + else + let curmachine= "N O T A HOST" + endif + + " initialization + let b:netrw_method = 0 + let g:netrw_machine = "" + let b:netrw_fname = "" + let g:netrw_port = "" + let g:netrw_choice = a:choice + + " Patterns: + " mipf : a:machine a:id password filename Use ftp + " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd + " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd + " rcpurm : rcp://[user@]host/filename Use rcp + " rcphf : [user@]host:filename Use rcp + " scpurm : scp://[user@]host[[#:]port]/filename Use scp + " httpurm : http://[user@]host/filename Use wget + " davurm : dav[s]://host[:port]/path Use cadaver/curl + " rsyncurm : rsync://host[:port]/path Use rsync + " fetchurm : fetch://[user@]host[:http]/filename Use fetch (defaults to ftp, override for http) + " sftpurm : sftp://[user@]host/filename Use scp + let mipf = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$' + let mf = '^\(\S\+\)\s\+\(\S\+\)$' + let ftpurm = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$' + let rcpurm = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$' + let rcphf = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$' + let scpurm = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$' + let httpurm = '^http://\([^/]\{-}\)\(/.*\)\=$' + let davurm = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$' + let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$' + let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$' + let sftpurm = '^sftp://\([^/]\{-}\)/\(.*\)\=$' + +" call Decho("determine method:") + " Determine Method + " rcp://user@hostname/...path-to-file + if match(a:choice,rcpurm) == 0 +" call Decho("rcp://...") + let b:netrw_method = 1 + let userid = substitute(a:choice,rcpurm,'\1',"") + let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"") + let b:netrw_fname = substitute(a:choice,rcpurm,'\3',"") + if userid != "" + let g:netrw_uid= userid + endif + + " scp://user@hostname/...path-to-file + elseif match(a:choice,scpurm) == 0 +" call Decho("scp://...") + let b:netrw_method = 4 + let g:netrw_machine = substitute(a:choice,scpurm,'\1',"") + let g:netrw_port = substitute(a:choice,scpurm,'\2',"") + let b:netrw_fname = substitute(a:choice,scpurm,'\3',"") + + " http://user@hostname/...path-to-file + elseif match(a:choice,httpurm) == 0 +" call Decho("http://...") + let b:netrw_method = 5 + let g:netrw_machine= substitute(a:choice,httpurm,'\1',"") + let b:netrw_fname = substitute(a:choice,httpurm,'\2',"") + + " dav://hostname[:port]/..path-to-file.. + elseif match(a:choice,davurm) == 0 +" call Decho("dav://...") + let b:netrw_method= 6 + if a:choice =~ '^s' + let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"") + else + let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"") + endif + let b:netrw_fname = substitute(a:choice,davurm,'\3',"") + + " rsync://user@hostname/...path-to-file + elseif match(a:choice,rsyncurm) == 0 +" call Decho("rsync://...") + let b:netrw_method = 7 + let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"") + let b:netrw_fname = substitute(a:choice,rsyncurm,'\2',"") + + " ftp://[user@]hostname[[:#]port]/...path-to-file + elseif match(a:choice,ftpurm) == 0 +" call Decho("ftp://...") + let userid = substitute(a:choice,ftpurm,'\2',"") + let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"") + let g:netrw_port = substitute(a:choice,ftpurm,'\4',"") + let b:netrw_fname = substitute(a:choice,ftpurm,'\5',"") +" call Decho("g:netrw_machine<".g:netrw_machine.">") + if userid != "" + let g:netrw_uid= userid + endif + if exists("s:netrw_passwd") && curmachine != g:netrw_machine + " if there's a change in hostname, require password re-entry + unlet s:netrw_passwd + endif + if exists("g:netrw_uid") && exists("s:netrw_passwd") + let b:netrw_method = 3 + else + if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc + let b:netrw_method= 2 + else + if !exists("g:netrw_uid") || g:netrw_uid == "" + call NetUserPass() + elseif !exists("s:netrw_passwd") || s:netrw_passwd == "" + call NetUserPass(g:netrw_uid) + " else just use current g:netrw_uid and s:netrw_passwd + endif + let b:netrw_method= 3 + endif + endif + + elseif match(a:choice,fetchurm) == 0 +" call Decho("fetch://...") + let b:netrw_method = 8 + let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"") + let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"") + let b:netrw_option = substitute(a:choice,fetchurm,'\4',"") + let b:netrw_fname = substitute(a:choice,fetchurm,'\5',"") + + " Issue an ftp : "machine id password [path/]filename" + elseif match(a:choice,mipf) == 0 +" call Decho("(ftp) host id pass file") + let b:netrw_method = 3 + let g:netrw_machine = substitute(a:choice,mipf,'\1',"") + let g:netrw_uid = substitute(a:choice,mipf,'\2',"") + let s:netrw_passwd = substitute(a:choice,mipf,'\3',"") + let b:netrw_fname = substitute(a:choice,mipf,'\4',"") + + " Issue an ftp: "hostname [path/]filename" + elseif match(a:choice,mf) == 0 +" call Decho("(ftp) host file") + if exists("g:netrw_uid") && exists("s:netrw_passwd") + let b:netrw_method = 3 + let g:netrw_machine = substitute(a:choice,mf,'\1',"") + let b:netrw_fname = substitute(a:choice,mf,'\2',"") + + elseif s:FileReadable(expand("$HOME/.netrc")) + let b:netrw_method = 2 + let g:netrw_machine = substitute(a:choice,mf,'\1',"") + let b:netrw_fname = substitute(a:choice,mf,'\2',"") + endif + + " sftp://user@hostname/...path-to-file + elseif match(a:choice,sftpurm) == 0 +" call Decho("sftp://...") + let b:netrw_method = 9 + let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"") + let b:netrw_fname = substitute(a:choice,sftpurm,'\2',"") + + " Issue an rcp: hostname:filename" (this one should be last) + elseif match(a:choice,rcphf) == 0 +" call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">") + let b:netrw_method = 1 + let userid = substitute(a:choice,rcphf,'\2',"") + let g:netrw_machine = substitute(a:choice,rcphf,'\3',"") + let b:netrw_fname = substitute(a:choice,rcphf,'\4',"") +" call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">") +" call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">") +" call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">") +" call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">") + if userid != "" + let g:netrw_uid= userid + endif + + else + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45) + endif + let b:netrw_method = -1 + endif + + " remove any leading [:#] from port number + if g:netrw_port != "" + let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','') + endif + +" call Decho("a:choice <".a:choice.">") +" call Decho("b:netrw_method <".b:netrw_method.">") +" call Decho("g:netrw_machine<".g:netrw_machine.">") +" call Decho("g:netrw_port <".g:netrw_port.">") +" if exists("g:netrw_uid") "Decho +" call Decho("g:netrw_uid <".g:netrw_uid.">") +" endif "Decho +" if exists("s:netrw_passwd") "Decho +" call Decho("s:netrw_passwd <".s:netrw_passwd.">") +" endif "Decho +" call Decho("b:netrw_fname <".b:netrw_fname.">") +" call Dret("NetrwMethod : b:netrw_method=".b:netrw_method) +endfun + +" ------------------------------------------------------------------------ +" NetReadFixup: this sort of function is typically written by the user {{{2 +" to handle extra junk that their system's ftp dumps +" into the transfer. This function is provided as an +" example and as a fix for a Windows 95 problem: in my +" experience, win95's ftp always dumped four blank lines +" at the end of the transfer. +if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp + fun! NetReadFixup(method, line1, line2) +" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")") + + " sanity checks -- attempt to convert inputs to integers + let method = a:method + 0 + let line1 = a:line1 + 0 + let line2 = a:line2 + 0 + if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0 +" call Dret("NetReadFixup") + return + endif + + if method == 3 " ftp (no <.netrc>) + let fourblanklines= line2 - 3 + if fourblanklines >= line1 + exe "silent ".fourblanklines.",".line2."g/^\s*$/d" + endif + endif + +" call Dret("NetReadFixup") + endfun +endif + +" --------------------------------------------------------------------- +" NetUserPass: set username and password for subsequent ftp transfer {{{2 +" Usage: :call NetUserPass() -- will prompt for userid and password +" :call NetUserPass("uid") -- will prompt for password +" :call NetUserPass("uid","password") -- sets global userid and password +fun! NetUserPass(...) + + " get/set userid + if a:0 == 0 +" call Dfunc("NetUserPass(a:0<".a:0.">)") + if !exists("g:netrw_uid") || g:netrw_uid == "" + " via prompt + let g:netrw_uid= input('Enter username: ') + endif + else " from command line +" call Dfunc("NetUserPass(a:1<".a:1.">) {") + let g:netrw_uid= a:1 + endif + + " get password + if a:0 <= 1 " via prompt +" call Decho("a:0=".a:0." case <=1:") + let s:netrw_passwd= inputsecret("Enter Password: ") + else " from command line +" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") + let s:netrw_passwd=a:2 + endif + +" call Dret("NetUserPass") +endfun + +" =========================================== +" Shared Browsing Support: {{{1 +" =========================================== + +" --------------------------------------------------------------------- +" s:BrowserMaps: {{{2 +fun! s:BrowserMaps(islocal) +" call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") + if a:islocal +" call Decho("make local maps") + nnoremap :call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,NetrwGetWord())) + nnoremap - :exe "norm! 0"call netrw#LocalBrowseCheck(NetrwBrowseChgDir(1,'../')) + nnoremap a :call NetrwHide(1) + nnoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) + nnoremap mc :call NetrwMarkFileCopy(1) + nnoremap md :call NetrwMarkFileDiff(1) + nnoremap me :call NetrwMarkFileEdit(1) + nnoremap mf :call NetrwMarkFile(1,NetrwGetWord()) + nnoremap mg :call NetrwMarkFileGrep(1) + nnoremap mh :call NetrwMarkHideSfx(1) + nnoremap mm :call NetrwMarkFileMove(1) + nnoremap mp :call NetrwMarkFilePrint(1) + nnoremap mr :call NetrwMarkFileRegexp(1) + nnoremap ms :call NetrwMarkFileSource(1) + nnoremap mT :call NetrwMarkFileTag(1) + nnoremap mt :call NetrwMarkFileTgt(1) + nnoremap mu :call NetrwUnMarkFile(1) + nnoremap mx :call NetrwMarkFileExe(1) + nnoremap mz :call NetrwMarkFileCompress(1) + nnoremap gb :call NetrwBookHistHandler(1,b:netrw_curdir) + nnoremap gh :call NetrwHidden(1) + nnoremap c :exe "keepjumps lcd ".fnameescape(b:netrw_curdir) + nnoremap C :let g:netrw_chgwin= winnr() + nnoremap d :call NetrwMakeDir("") + nnoremap i :call NetrwListStyle(1) + nnoremap o :call NetrwSplit(3) + nnoremap O :call NetrwObtain(1) + nnoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) + nnoremap P :call NetrwPrevWinOpen(1) + nnoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) + nnoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) + nnoremap qf :call NetrwFileInfo(1,NetrwGetWord()) + nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) + nnoremap s :call NetrwSortStyle(1) + nnoremap S :call NetSortSequence(1) + nnoremap t :call NetrwSplit(4) + nnoremap u :call NetrwBookHistHandler(4,expand("%")) + nnoremap U :call NetrwBookHistHandler(5,expand("%")) + nnoremap v :call NetrwSplit(5) + nnoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(1,NetrwGetWord(),0),0)" + nnoremap % :call NetrwOpenFile(1) + if !hasmapto('NetrwHideEdit') + nmap NetrwHideEdit + endif + nnoremap NetrwHideEdit :call NetrwHideEdit(1) + if !hasmapto('NetrwRefresh') + nmap NetrwRefresh + endif + nnoremap NetrwRefresh :call NetrwRefresh(1,NetrwBrowseChgDir(1,'./')) + if s:didstarstar || !mapcheck("","n") + nnoremap :Nexplore + endif + if s:didstarstar || !mapcheck("","n") + nnoremap :Pexplore + endif + let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape) + if g:netrw_mousemaps == 1 + nnoremap :call NetrwLeftmouse(1) + nnoremap :call NetrwPrevWinOpen(1) + nnoremap :call NetrwMarkFile(1,NetrwGetWord()) + exe 'nnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'vnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + endif + exe 'nnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'vnoremap :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'nnoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'vnoremap D :call NetrwLocalRm("'.mapsafecurdir.'")' + exe 'nnoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' + exe 'vnoremap R :call NetrwLocalRename("'.mapsafecurdir.'")' + exe 'nnoremap m :call NetrwMakeDir("")' + nnoremap :he netrw-quickhelp + + else " remote +" call Decho("make remote maps") + call s:RemotePathAnalysis(b:netrw_curdir) + nnoremap :call NetrwBrowse(0,NetrwBrowseChgDir(0,NetrwGetWord())) + nnoremap :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) + nnoremap - :exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'../')) + nnoremap a :call NetrwHide(0) + nnoremap mb :call NetrwBookHistHandler(0,b:netrw_curdir) + nnoremap mc :call NetrwMarkFileCopy(0) + nnoremap md :call NetrwMarkFileDiff(0) + nnoremap me :call NetrwMarkFileEdit(0) + nnoremap mf :call NetrwMarkFile(0,NetrwGetWord()) + nnoremap mg :call NetrwMarkFileGrep(0) + nnoremap mh :call NetrwMarkHideSfx(0) + nnoremap mm :call NetrwMarkFileMove(0) + nnoremap mp :call NetrwMarkFilePrint(0) + nnoremap mr :call NetrwMarkFileRegexp(0) + nnoremap ms :call NetrwMarkFileSource(0) + nnoremap mT :call NetrwMarkFileTag(0) + nnoremap mt :call NetrwMarkFileTgt(0) + nnoremap mu :call NetrwUnMarkFile(0) + nnoremap mx :call NetrwMarkFileExe(0) + nnoremap mz :call NetrwMarkFileCompress(0) + nnoremap gb :call NetrwBookHistHandler(1,b:netrw_cur) + nnoremap gh :call NetrwHidden(0) + nnoremap C :let g:netrw_chgwin= winnr() + nnoremap i :call NetrwListStyle(0) + nnoremap o :call NetrwSplit(0) + nnoremap O :call NetrwObtain(0) + nnoremap p :call NetrwPreview(NetrwBrowseChgDir(1,NetrwGetWord(),1)) + nnoremap P :call NetrwPrevWinOpen(0) + nnoremap qb :call NetrwBookHistHandler(2,b:netrw_curdir) + nnoremap mB :call NetrwBookHistHandler(6,b:netrw_curdir) + nnoremap qf :call NetrwFileInfo(0,NetrwGetWord()) + nnoremap r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'exe "norm! 0"call NetrwBrowse(0,NetrwBrowseChgDir(0,'./')) + nnoremap s :call NetrwSortStyle(0) + nnoremap S :call NetSortSequence(0) + nnoremap t :call NetrwSplit(1) + nnoremap u :call NetrwBookHistHandler(4,b:netrw_curdir) + nnoremap U :call NetrwBookHistHandler(5,b:netrw_curdir) + nnoremap v :call NetrwSplit(2) + nnoremap x :call netrw#NetrwBrowseX(NetrwBrowseChgDir(0,NetrwGetWord()),1) + nnoremap % :call NetrwOpenFile(0) + if !hasmapto('NetrwHideEdit') + nmap NetrwHideEdit + endif + nnoremap NetrwHideEdit :call NetrwHideEdit(0) + if !hasmapto('NetrwRefresh') + nmap NetrwRefresh + endif + + let mapsafepath = escape(s:path, s:netrw_map_escape) + let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape) + + nnoremap NetrwRefresh :call NetrwRefresh(0,NetrwBrowseChgDir(0,'./')) + if g:netrw_mousemaps == 1 + nnoremap :call NetrwLeftmouse(0) + nnoremap :call NetrwPrevWinOpen(0) + nnoremap :call NetrwMarkFile(0,NetrwGetWord()) + exe 'nnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + endif + exe 'nnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'nnoremap d :call NetrwMakeDir("'.mapsafeusermach.'")' + exe 'nnoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap D :call NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'nnoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' + exe 'vnoremap R :call NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")' + nnoremap :he netrw-quickhelp + endif + call s:SetRexDir(a:islocal,b:netrw_curdir) +" call Dret("s:BrowserMaps") +endfun + +" --------------------------------------------------------------------- +" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2 +fun! s:ExplorePatHls(pattern) +" call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)") + let repat= substitute(a:pattern,'^**/\{1,2}','','') +" call Decho("repat<".repat.">") + let repat= escape(repat,'][.\') +" call Decho("repat<".repat.">") + let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>' +" call Dret("s:ExplorePatHls repat<".repat.">") + return repat +endfun + +" --------------------------------------------------------------------- +" s:NetrwBookHistHandler: {{{2 +" 0: (user: ) bookmark current directory +" 1: (user: ) change to the bookmarked directory +" 2: (user: ) list bookmarks +" 3: (browsing) record current directory history +" 4: (user: ) go up (previous) bookmark +" 5: (user: ) go down (next) bookmark +" 6: (user: ) delete bookmark +fun! s:NetrwBookHistHandler(chg,curdir) +" call Dfunc("NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax) + + if a:chg == 0 + " bookmark the current directory +" call Decho("(user: ) bookmark the current directory") + if !exists("g:netrw_bookmarklist") + let g:netrw_bookmarklist= [] + endif + if index(g:netrw_bookmarklist,a:curdir) == -1 + " curdir not currently in g:netrw_bookmarklist, so include it + call add(g:netrw_bookmarklist,a:curdir) + call sort(g:netrw_bookmarklist) + endif + echo "bookmarked the current directory" + + elseif a:chg == 1 + " change to the bookmarked directory +" call Decho("(user: <".v:count."mb>) change to the bookmarked directory") + if exists("g:netrw_bookmarklist[v:count-1]") + exe "e ".fnameescape(g:netrw_bookmarklist[v:count-1]) + else + echomsg "Sorry, bookmark#".v:count." doesn't exist!" + endif + + elseif a:chg == 2 +" redraw! + let didwork= 0 + " list user's bookmarks +" call Decho("(user: ) list user's bookmarks") + if exists("g:netrw_bookmarklist") +" call Decho('list '.len(g:netrw_bookmarklist).' bookmarks') + let cnt= 1 + for bmd in g:netrw_bookmarklist +" call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]) + echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1] + let didwork = 1 + let cnt = cnt + 1 + endfor + endif + + " list directory history + let cnt = g:netrw_dirhist_cnt + let first = 1 + let histcnt = 0 + while ( first || cnt != g:netrw_dirhist_cnt ) +" call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt) + let histcnt= histcnt + 1 + if exists("g:netrw_dirhist_{cnt}") +" call Decho("Netrw History#".histcnt.": ".g:netrw_dirhist_{cnt}) + echo "Netrw History#".histcnt.": ".g:netrw_dirhist_{cnt} + let didwork= 1 + endif + let first = 0 + let cnt = ( cnt - 1 ) % g:netrw_dirhistmax + if cnt < 0 + let cnt= cnt + g:netrw_dirhistmax + endif + endwhile + if didwork + call inputsave()|call input("Press to continue")|call inputrestore() + endif + + elseif a:chg == 3 + " saves most recently visited directories (when they differ) +" call Decho("(browsing) record curdir history") + if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir + let g:netrw_dirhist_cnt = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax + let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir +" call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") + endif + + elseif a:chg == 4 + " u: change to the previous directory stored on the history list +" call Decho("(user: ) chg to prev dir from history") + let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax + if g:netrw_dirhist_cnt < 0 + let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax + endif + if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") +" call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") + setlocal ma noro +" call Decho("setlocal ma noro") + %d + setlocal nomod +" call Decho("setlocal nomod") + endif +" " call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) + exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}) + else + let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax + echo "Sorry, no predecessor directory exists yet" + endif + + elseif a:chg == 5 + " U: change to the subsequent directory stored on the history list +" call Decho("(user: ) chg to next dir from history") + let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax + if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") +" call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") + setlocal ma noro +" call Decho("setlocal ma noro") + %d +" call Decho("removed all lines from buffer (%d)") + setlocal nomod +" call Decho("setlocal nomod") + endif +" call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})) + exe "e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}) + else + let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax + if g:netrw_dirhist_cnt < 0 + let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax + endif + echo "Sorry, no successor directory exists yet" + endif + + elseif a:chg == 6 + " delete the v:count'th bookmark +" call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">") + let savefile= s:NetrwHome()."/.netrwbook" + if filereadable(savefile) + call s:NetrwBookHistSave() " done here to merge bookmarks first + call delete(savefile) + endif + call remove(g:netrw_bookmarklist,v:count-1) + endif + call s:NetrwBookmarkMenu() +" call Dret("NetrwBookHistHandler") +endfun + +" --------------------------------------------------------------------- +" s:NetrwBookHistRead: this function reads bookmarks and history {{{2 +" Sister function: s:NetrwBookHistSave() +fun! s:NetrwBookHistRead() +" call Dfunc("s:NetrwBookHistRead()") + if !exists("s:netrw_initbookhist") + let savefile= s:NetrwHome()."/.netrwbook" + if filereadable(savefile) +" call Decho("sourcing .netrwbook") + exe "so ".savefile + endif + let savefile= s:NetrwHome()."/.netrwhist" + if filereadable(savefile) +" call Decho("sourcing .netrwhist") + exe "so ".savefile + endif + let s:netrw_initbookhist= 1 + au VimLeave * call s:NetrwBookHistSave() + endif +" call Dret("s:NetrwBookHistRead") +endfun + +" --------------------------------------------------------------------- +" s:NetrwBookHistSave: this function saves bookmarks and history {{{2 +" Sister function: s:NetrwBookHistRead() +" I used to do this via viminfo but that appears to +" be unreliable for long-term storage +" COMBAK: does $HOME work under windows??? +fun! s:NetrwBookHistSave() +" call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax) + let savefile= s:NetrwHome()."/.netrwhist" + 1split + enew + setlocal noswf + + " save .netrwhist -- no attempt to merge + file .netrwhist + call setline(1,"let g:netrw_dirhistmax =".g:netrw_dirhistmax) + call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt) + let lastline = line("$") + let cnt = 1 + while cnt <= g:netrw_dirhist_cnt + call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'") + let cnt= cnt + 1 + endwhile + exe "silent! w! ".savefile + %d + + if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] + " merge and write .netrwbook + let savefile= s:NetrwHome()."/.netrwbook" + + if filereadable(savefile) + let booklist= deepcopy(g:netrw_bookmarklist) + exe "silent so ".savefile + for bdm in booklist + if index(g:netrw_bookmarklist,bdm) == -1 + call add(g:netrw_bookmarklist,bdm) + endif + endfor + call sort(g:netrw_bookmarklist) + exe "silent! w! ".savefile + endif + + " construct and save .netrwbook + call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist)) + exe "silent! w! ".savefile + endif + let bgone= bufnr("%") + q! + exe bgone."bwipe!" + +" call Dret("s:NetrwBookHistSave") +endfun + +" --------------------------------------------------------------------- +" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2 +" list of the contents of a local or remote directory. It is assumed that the +" g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted +" with the requested remote hostname first. +fun! s:NetrwBrowse(islocal,dirname) + if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif +" call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%").">") +" call Decho("tab#".tabpagenr()." win#".winnr()) +" call Dredir("ls!") + if !exists("s:netrw_initbookhist") + call s:NetrwBookHistRead() + endif + + if exists("s:netrw_skipbrowse") + unlet s:netrw_skipbrowse +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse) + return + endif + if !exists("*shellescape") + call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69) +" call Dret("s:NetrwBrowse : missing shellescape()") + return + endif + if !exists("*fnameescape") + call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70) +" call Dret("s:NetrwBrowse : missing fnameescape()") + return + endif + + call s:NetrwOptionSave("w:") + call s:NetrwSafeOptions() + + " re-instate any marked files + if exists("s:netrwmarkfilelist_{bufnr('%')}") +" call Decho("clearing marked files") + exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" + endif + + if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep +" call Decho("handle w:netrw_acdkeep:") +" call Decho("keepjumps lcd ".fnameescape(a:dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")") + exe 'keepjumps lcd '.fnameescape(a:dirname) +" call Decho("getcwd<".getcwd().">") + + elseif !a:islocal && a:dirname !~ '[\/]$' && a:dirname !~ '^"' + " looks like a regular file, attempt transfer +" call Decho("attempt transfer as regular file<".a:dirname.">") + + " remove any filetype indicator from end of dirname, except for the {{{3 + " "this is a directory" indicator (/). + " There shouldn't be one of those here, anyway. + let path= substitute(a:dirname,'[*=@|]\r\=$','','e') +" call Decho("new path<".path.">") + call s:RemotePathAnalysis(a:dirname) + + " remote-read the requested file into current buffer {{{3 + mark ' + call s:NetrwEnew(a:dirname) + setlocal ma noro +" call Decho("setlocal ma noro") + let b:netrw_curdir= a:dirname +" call Decho("exe silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")") + exe "silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path) + exe "silent keepalt doau BufReadPre ".fnameescape(s:fname) + silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path) + if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' + " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error + exe "silent keepalt doau BufReadPost ".fnameescape(s:fname) + endif + + " save certain window-oriented variables into buffer-oriented variables {{{3 + call s:SetBufWinVars() + call s:NetrwOptionRestore("w:") + setlocal ma nomod + +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwBrowse : file<".s:fname.">") + return + endif + + " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3 + call s:UseBufWinVars() + + " set up some variables {{{3 + let b:netrw_browser_active = 1 + let dirname = a:dirname + let s:last_sort_by = g:netrw_sort_by + + " set up menu {{{3 + call s:NetrwMenu(1) + + " set up buffer {{{3 + let reusing= s:NetrwGetBuffer(a:islocal,dirname) + " maintain markfile highlighting + if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" +" call Decho("bufnr(%)=".bufnr('%')) +" call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") + exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" + else +" call Decho("2match none") + 2match none + endif + if reusing + call s:NetrwOptionRestore("w:") + setlocal noma nomod nowrap +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwBrowse : re-using buffer") + return + endif + + " set b:netrw_curdir to the new directory name {{{3 +" call Decho("set b:netrw_curdir to the new directory name:") + let b:netrw_curdir= dirname + if b:netrw_curdir =~ '[/\\]$' + let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e') + endif + if b:netrw_curdir == '' + if has("amiga") + " On the Amiga, the empty string connotes the current directory + let b:netrw_curdir= getcwd() + else + " under unix, when the root directory is encountered, the result + " from the preceding substitute is an empty string. + let b:netrw_curdir= '/' + endif + endif + if !a:islocal && b:netrw_curdir !~ '/$' + let b:netrw_curdir= b:netrw_curdir.'/' + endif +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") + + " ------------ + " (local only) {{{3 + " ------------ + if a:islocal +" call Decho("local only:") + + " Set up ShellCmdPost handling. Append current buffer to browselist + call s:LocalFastBrowser() + + " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3 + if !g:netrw_keepdir +" call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd) +" call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist")) + if !exists("&l:acd") || !&l:acd +" call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir)) + try + exe 'keepjumps lcd '.fnameescape(b:netrw_curdir) + catch /^Vim\%((\a\+)\)\=:E472/ + call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61) + if exists("w:netrw_prvdir") + let b:netrw_curdir= w:netrw_prvdir + else + call s:NetrwOptionRestore("w:") + setlocal noma nomod nowrap + let b:netrw_curdir= dirname +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">") + return + endif + endtry + endif + endif + + " -------------------------------- + " remote handling: {{{3 + " -------------------------------- + else +" call Decho("remote only:") + + " analyze a:dirname and g:netrw_list_cmd {{{4 +" call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> a:dirname<".a:dirname.">") + if a:dirname =~ "^NetrwTreeListing\>" + let dirname= b:netrw_curdir +" call Decho("(dirname was ".a:dirname.") dirname<".dirname.">") + elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir") + let dirname= substitute(b:netrw_curdir,'\\','/','g') + if dirname !~ '/$' + let dirname= dirname.'/' + endif + let b:netrw_curdir = dirname +" call Decho("(liststyle is TREELIST) dirname<".dirname.">") + else + let dirname = substitute(a:dirname,'\\','/','g') +" call Decho("(normal) dirname<".dirname.">") + endif + + let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$' + if dirname !~ dirpat + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20) + endif + call s:NetrwOptionRestore("w:") + setlocal noma nomod nowrap +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">") + return + endif + let b:netrw_curdir= dirname +" call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)") + endif " (additional remote handling) + + " ----------------------- + " Directory Listing: {{{3 + " ----------------------- + call s:BrowserMaps(a:islocal) + call s:PerformListing(a:islocal) + + " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd + " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed). + " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting + " the variable below avoids that second refresh of the screen. The s:LocalBrowseShellCmdRefresh() + " function gets called due to that autocmd; it notices that the following variable is set + " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008 + let s:locbrowseshellcmd= 1 + +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:NetrwBrowse : did PerformListing") + return +endfun + +" --------------------------------------------------------------------- +" s:NetrwFileInfo: supports qf (query for file information) {{{2 +fun! s:NetrwFileInfo(islocal,fname) +" call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)") + if a:islocal + if (has("unix") || has("macunix")) && executable("/bin/ls") + if exists("b:netrw_curdir") +" call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>') + if b:netrw_curdir =~ '/$' + echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname)) + else + echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname)) + endif + else +" call Decho('using ls '.a:fname." using cwd<".getcwd().">") + echo system("/bin/ls -lsad ".shellescape(a:fname)) + endif + else + " use vim functions to return information about file below cursor +" call Decho("using vim functions to query for file info") + if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]' + let fname= substitute(a:fname,".$","","") + else + let fname= a:fname + endif + let t = getftime(fname) + let sz = getfsize(fname) + echo a:fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname)) +" call Decho(fname.": ".sz." ".strftime(g:netrw_timefmt,getftime(fname))) + endif + else + echo "sorry, \"qf\" not supported yet for remote files" + endif +" call Dret("s:NetrwFileInfo") +endfun + +" --------------------------------------------------------------------- +" s:NetrwGetBuffer: {{{2 +" returns 0=cleared buffer +" 1=re-used buffer +fun! s:NetrwGetBuffer(islocal,dirname) +" call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle) + let dirname= a:dirname + + " re-use buffer if possible {{{3 +" call Decho("--re-use a buffer if possible--") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST + " find NetrwTreeList buffer if there is one + if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0 +" call Decho(" re-use w:netrw_treebufnr=".w:netrw_treebufnr) + let eikeep= &ei + set ei=all + exe "b ".w:netrw_treebufnr + let &ei= eikeep +" call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."") + return + endif + let bufnum= -1 +" call Decho(" liststyle=TREE but w:netrw_treebufnr doesn't exist") + + else + " find buffer number of buffer named precisely the same as dirname {{{3 +" call Decho("--find buffer numnber of buffer named precisely the same as dirname--") +" call Dredir("ls!") + + " get dirname and associated buffer number + let bufnum = bufnr(escape(dirname,'\')) +" call Decho(" find buffer<".dirname.">'s number ") +" call Decho(" bufnr(dirname<".escape(dirname,'\').">)=".bufnum) + + if bufnum < 0 && dirname !~ '/$' + " trying appending a trailing / +" call Decho(" try appending a trailing / to dirname<".dirname.">") + let bufnum= bufnr(escape(dirname.'/','\')) + if bufnum > 0 + let dirname= dirname.'/' + endif + endif + + if bufnum < 0 && dirname =~ '/$' + " trying removing a trailing / +" call Decho(" try removing a trailing / from dirname<".dirname.">") + let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\')) + if bufnum > 0 + let dirname= substitute(dirname,'/$','','') + endif + endif + +" call Decho(" findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)") + " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/ and abc/ matches) + if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.' + " handle approximate matches +" call Decho(" handling approx match: bufnum#%d<".bufname(bufnum)."> approx=dirname<".dirname.">") + let ibuf = 1 + let buflast = bufnr("$") +" call Decho(" findbuf2: buflast=".buflast) + while ibuf <= buflast + let bname= substitute(bufname(ibuf),'\\','/','g') + let bname= substitute(bname,'.\zs/$','','') +" call Decho(" findbuf3: dirname<".dirname."> bufname(".ibuf.")<".bname.">") + if bname != '' && dirname =~ '/'.bname.'/\=$' | break | endif + if bname =~ '^'.dirname.'/\=$' | break | endif + if dirname =~ '^'.bname.'/$' | break | endif + let ibuf= ibuf + 1 + endwhile + if ibuf > buflast + let bufnum= -1 + else + let bufnum= ibuf + endif +" call Decho(" findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")") + endif + endif + + " get enew buffer and name it -or- re-use buffer {{{3 +" call Decho("--get enew buffer and name it OR re-use buffer-- (bufnum=".bufnum.")") + mark ' + if bufnum < 0 || !bufexists(bufnum) + call s:NetrwEnew(dirname) +" call Decho(" got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)") + " name the buffer + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST + " Got enew buffer; transform into a NetrwTreeListing +" call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --") + if !exists("s:netrw_treelistnum") + let s:netrw_treelistnum= 1 + else + let s:netrw_treelistnum= s:netrw_treelistnum + 1 + endif + let w:netrw_treebufnr= bufnr("%") +" call Decho(" exe silent! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum)) + exe 'silent! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum) + nnoremap [ :silent call TreeListMove('[') + nnoremap ] :silent call TreeListMove(']') + nnoremap [[ :silent call TreeListMove('[') + nnoremap ]] :silent call TreeListMove(']') +" call Decho(" tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr) + else +" let v:errmsg= "" " Decho + let escdirname= fnameescape(dirname) +" call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") +" call Decho(' exe silent! keepalt file '.escdirname) + exe 'silent! keepalt file '.escdirname +" call Decho(" errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">") + endif +" call Decho(" named enew buffer#".bufnr("%")."<".bufname("%").">") + + else " Re-use the buffer +" call Decho("--re-use buffer#".bufnum.": --") + let eikeep= &ei + set ei=all + if getline(2) =~ '^" Netrw Directory Listing' +" call Decho(" re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using: keepalt b ".bufnum) + exe "keepalt b ".bufnum + else +" call Decho(" reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using: b ".bufnum) + exe "b ".bufnum + endif + if bufname("%") == '.' +" call Decho("exe silent! keepalt file ".fnameescape(getcwd())) + exe "silent! keepalt file ".fnameescape(getcwd()) + endif + let &ei= eikeep + if line("$") <= 1 + call s:NetrwListSettings(a:islocal) +" call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it") + return 0 + elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST +" call Decho("--re-use tree listing--") +" call Decho(" clear buffer<".expand("%")."> with :%d") + silent %d + call s:NetrwListSettings(a:islocal) +" call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh") + return 0 + else +" call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%")) + return 1 + endif + endif + + " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3 + " fastbrowse Local Remote Hiding a buffer implies it may be re-used (fast) + " slow 0 D D Deleting a buffer implies it will not be re-used (slow) + " med 1 D H + " fast 2 H H +" call Decho("--do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc--") + let fname= expand("%") + call s:NetrwListSettings(a:islocal) +" call Decho("exe keepalt file ".fnameescape(fname)) + exe "keepalt file ".fnameescape(fname) + + " delete all lines from buffer {{{3 +" call Decho("--delete all lines from buffer--") +" call Decho(" clear buffer<".expand("%")."> with :%d") + keepalt silent! %d + +" call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%")) + return 0 +endfun + +" --------------------------------------------------------------------- +" s:NetrwGetcwd: get the current directory. {{{2 +" Change backslashes to forward slashes, if any. +" If doesc is true, escape certain troublesome characters +fun! s:NetrwGetcwd(doesc) +" call Dfunc("NetrwGetcwd(doesc=".a:doesc.")") + let curdir= substitute(getcwd(),'\\','/','ge') + if curdir !~ '[\/]$' + let curdir= curdir.'/' + endif + if a:doesc + let curdir= fnameescape(curdir) + endif +" call Dret("NetrwGetcwd <".curdir.">") + return curdir +endfun + +" --------------------------------------------------------------------- +" s:NetrwGetWord: it gets the directory/file named under the cursor {{{2 +fun! s:NetrwGetWord() +" call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol(".")) + call s:UseBufWinVars() + + " insure that w:netrw_liststyle is set up + if !exists("w:netrw_liststyle") + if exists("g:netrw_liststyle") + let w:netrw_liststyle= g:netrw_liststyle + else + let w:netrw_liststyle= s:THINLIST + endif +" call Decho("w:netrw_liststyle=".w:netrw_liststyle) + endif + + if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt + " Active Banner support +" call Decho("active banner handling") + norm! 0 + let dirname= "./" + let curline= getline('.') + + if curline =~ '"\s*Sorted by\s' + norm s + let s:netrw_skipbrowse= 1 + echo 'Pressing "s" also works' + + elseif curline =~ '"\s*Sort sequence:' + let s:netrw_skipbrowse= 1 + echo 'Press "S" to edit sorting sequence' + + elseif curline =~ '"\s*Quick Help:' + norm ? + let s:netrw_skipbrowse= 1 + echo 'Pressing "?" also works' + + elseif curline =~ '"\s*\%(Hiding\|Showing\):' + norm a + let s:netrw_skipbrowse= 1 + echo 'Pressing "a" also works' + + elseif line("$") > w:netrw_bannercnt + exe 'silent keepjumps '.w:netrw_bannercnt + endif + + elseif w:netrw_liststyle == s:THINLIST +" call Decho("thin column handling") + norm! 0 + let dirname= getline('.') + + elseif w:netrw_liststyle == s:LONGLIST +" call Decho("long column handling") + norm! 0 + let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e') + + elseif w:netrw_liststyle == s:TREELIST +" call Decho("treelist handling") + let dirname= substitute(getline('.'),'^\(| \)*','','e') + + else +" call Decho("obtain word from wide listing") + let dirname= getline('.') + + if !exists("b:netrw_cpf") + let b:netrw_cpf= 0 + exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif' +" call Decho("computed cpf=".b:netrw_cpf) + endif + +" call Decho("buf#".bufnr("%")."<".bufname("%").">") + let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf +" call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart." bannercnt=".w:netrw_bannercnt) +" call Decho("1: dirname<".dirname.">") + if filestart == 0 + norm! 0ma + else + call cursor(line("."),filestart+1) + norm! ma + endif + let rega= @a + let eofname= filestart + b:netrw_cpf + 1 + if eofname <= col("$") + call cursor(line("."),filestart+b:netrw_cpf+1) + norm! "ay`a + else + norm! "ay$ + endif + let dirname = @a + let @a = rega +" call Decho("2: dirname<".dirname.">") + let dirname= substitute(dirname,'\s\+$','','e') +" call Decho("3: dirname<".dirname.">") + endif + + " symlinks are indicated by a trailing "@". Remove it before further processing. + let dirname= substitute(dirname,"@$","","") + + " executables are indicated by a trailing "*". Remove it before further processing. + let dirname= substitute(dirname,"\*$","","") + +" call Dret("s:NetrwGetWord <".dirname.">") + return dirname +endfun + +" --------------------------------------------------------------------- +" s:NetrwListSettings: {{{2 +fun! s:NetrwListSettings(islocal) +" call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")") + let fname= bufname("%") +" call Decho("setlocal bt=nofile nobl ma nonu nowrap noro") + setlocal bt=nofile nobl ma nonu nowrap noro +" call Decho("exe keepalt file ".fnameescape(fname)) + exe "keepalt file ".fnameescape(fname) + if g:netrw_use_noswf + setlocal noswf + endif +" call Dredir("ls!") +" call Decho("exe setlocal ts=".g:netrw_maxfilenamelen) + exe "setlocal ts=".g:netrw_maxfilenamelen + setlocal isk+=.,~,- + if g:netrw_fastbrowse > a:islocal + setlocal bh=hide + else + setlocal bh=delete + endif +" call Dret("s:NetrwListSettings") +endfun + +" --------------------------------------------------------------------- +" s:NetrwListStyle: {{{2 +" islocal=0: remote browsing +" =1: local browsing +fun! s:NetrwListStyle(islocal) +" call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle) + let fname = s:NetrwGetWord() + if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif + let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST +" call Decho("fname<".fname.">") +" call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle) +" call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">") + + if w:netrw_liststyle == s:THINLIST + " use one column listing +" call Decho("use one column list") + let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') + + elseif w:netrw_liststyle == s:LONGLIST + " use long list +" call Decho("use long list") + let g:netrw_list_cmd = g:netrw_list_cmd." -l" + + elseif w:netrw_liststyle == s:WIDELIST + " give wide list +" call Decho("use wide list") + let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') + + elseif w:netrw_liststyle == s:TREELIST +" call Decho("use tree list") + let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') + + else + call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46) + let g:netrw_liststyle = s:THINLIST + let w:netrw_liststyle = g:netrw_liststyle + let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') + endif + setlocal ma noro +" call Decho("setlocal ma noro") + + " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh +" call Decho("clear buffer<".expand("%")."> with :%d") + %d + + " refresh the listing + let svpos= netrw#NetrwSavePosn() + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + if w:netrw_liststyle != s:WIDELIST + if g:netrw_cursorline == 2 + setlocal cursorline + let &cursorcolumn= s:netrw_usercuc + elseif g:netrw_cursorline + setlocal cursorline +" call Decho("setlocal cursorline") + endif + else + if g:netrw_cursorline == 2 + setlocal cursorline cursorcolumn +" call Decho("setlocal cursorline cursorcolumn") + elseif g:netrw_cursorline + let &cursorline= s:netrw_usercul + endif + endif + + " keep cursor on the filename + silent keepjumps $ + let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc') +" call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A')) + if result <= 0 && exists("w:netrw_bannercnt") + exe "keepjumps ".w:netrw_bannercnt + endif + +" call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : "")) +endfun + +" --------------------------------------------------------------------- +" s:NetrwBookmarkMenu: Uses menu priorities {{{2 +" .2.[cnt] for bookmarks, and +" .3.[cnt] for history +" (see s:NetrwMenu()) +fun! s:NetrwBookmarkMenu() + if !exists("s:netrw_menucnt") + return + endif +" call Dfunc("NetrwBookmarkMenu() histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt) + + " the following test assures that gvim is running, has menus available, and has menus enabled. + if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu + if exists("g:NetrwTopLvlMenu") +" call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)") + exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks' + exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete' + endif + if !exists("s:netrw_initbookhist") + call s:NetrwBookHistRead() + endif + + " show bookmarked places + if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] + let cnt= 1 + for bmd in g:netrw_bookmarklist +" call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.' :e '.bmd) + let bmd= escape(bmd,'. ') + + " show bookmarks for goto menu + exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.' :e '.bmd."\" + + " show bookmarks for deletion menu + exe 'silent! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.' '.cnt."mB" + let cnt= cnt + 1 + endfor + + endif + + " show directory browsing history + let cnt = g:netrw_dirhist_cnt + let first = 1 + let histcnt = 0 + while ( first || cnt != g:netrw_dirhist_cnt ) + let histcnt = histcnt + 1 + let priority = g:netrw_dirhist_cnt + histcnt + if exists("g:netrw_dirhist_{cnt}") + let histdir= escape(g:netrw_dirhist_{cnt},'./&? ') +" call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.' :e '.histdir) + exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.' :e '.histdir."\" + endif + let first = 0 + let cnt = ( cnt - 1 ) % g:netrw_dirhistmax + if cnt < 0 + let cnt= cnt + g:netrw_dirhistmax + endif + endwhile + + endif +" call Dret("NetrwBookmarkMenu") +endfun + +" --------------------------------------------------------------------- +" s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2 +" directory and a new directory name. Also, if the +" "new directory name" is actually a file, +" NetrwBrowseChgDir() edits the file. +fun! s:NetrwBrowseChgDir(islocal,newdir,...) +" call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">") + + if !exists("b:netrw_curdir") + " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called + " and the current window is the NetrwMessage window. +" call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!") +" call Decho("getcwd<".getcwd().">") +" call Dredir("ls!") +" call Dret("s:NetrwBrowseChgDir") + return + endif + + call s:NetrwOptionSave("s:") + call s:NetrwSafeOptions() + let nbcd_curpos = netrw#NetrwSavePosn() + let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos + let dirname = substitute(b:netrw_curdir,'\\','/','ge') + let newdir = a:newdir + let dolockout = 0 + + " set up o/s-dependent directory recognition pattern + if has("amiga") + let dirpat= '[\/:]$' + else + let dirpat= '[\/]$' + endif +" call Decho("dirname<".dirname."> dirpat<".dirpat.">") + + if dirname !~ dirpat + " apparently vim is "recognizing" that it is in a directory and + " is removing the trailing "/". Bad idea, so I put it back. + let dirname= dirname.'/' +" call Decho("adjusting dirname<".dirname.">") + endif + + if newdir !~ dirpat + " ------------ + " edit a file: + " ------------ +" call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)' + let dirname= s:NetrwTreeDir() + if dirname =~ '/$' + let dirname= dirname.newdir + else + let dirname= s:NetrwTreeDir()."/".newdir + endif +" call Decho("tree listing") + elseif newdir =~ '^\(/\|\a:\)' + let dirname= newdir + else + let dirname= s:ComposePath(dirname,newdir) + endif +" call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")") + " this lets NetrwBrowseX avoid the edit + if a:0 < 1 +" call Decho("set up windows for editing<".fnameescape(dirname)."> didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist")) + call s:NetrwOptionRestore("s:") + if !exists("s:didsplit") + if g:netrw_browse_split == 1 + new + wincmd _ + elseif g:netrw_browse_split == 2 + rightb vert new + wincmd | + elseif g:netrw_browse_split == 3 + tabnew + elseif g:netrw_browse_split == 4 + if s:NetrwPrevWinOpen(2) == 3 +" call Dret("s:NetrwBrowseChgDir") + return + endif + else + " handling a file, didn't split, so remove menu +" call Decho("handling a file+didn't split, so remove menu") + call s:NetrwMenu(0) + " optional change to window + if g:netrw_chgwin >= 1 + exe "keepjumps ".g:netrw_chgwin."wincmd w" + endif + endif + endif + " the point where netrw actually edits the (local) file + " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will + if a:islocal +" call Decho("edit local file: exe e! ".fnameescape(dirname)) + exe "e! ".fnameescape(dirname) + else +" call Decho("remote file: NetrwBrowse will edit it") + endif + let dolockout= 1 + endif + + elseif newdir =~ '^/' + " --------------------------------- + " just go to the new directory spec + " --------------------------------- +" call Decho('case "just go to new directory spec": newdir<'.newdir.'>') + let dirname= newdir + call s:SetRexDir(a:islocal,dirname) + call s:NetrwOptionRestore("s:") + + elseif newdir == './' + " -------------------------- + " refresh the directory list + " -------------------------- +" call Decho('case "refresh directory listing": newdir == "./"') + call s:SetRexDir(a:islocal,dirname) + + elseif newdir == '../' + " ------------------- + " go up one directory + " ------------------- +" call Decho('case "go up one directory": newdir == "../"') + + if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") + " force a refresh +" call Decho("clear buffer<".expand("%")."> with :%d") + setlocal noro ma +" call Decho("setlocal noro ma") + keepjumps %d + endif + + if has("amiga") + " amiga +" call Decho('case "go up one directory": newdir == "../" and amiga') + if a:islocal + let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','') + let dirname= substitute(dirname,'/$','','') + else + let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','') + endif +" call Decho("amiga: dirname<".dirname."> (go up one dir)") + + else + " unix or cygwin +" call Decho('case "go up one directory": newdir == "../" and unix or cygwin') + if a:islocal + let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','') + if dirname == "" + let dirname= '/' + endif + else + let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','') + endif +" call Decho("unix: dirname<".dirname."> (go up one dir)") + endif + call s:SetRexDir(a:islocal,dirname) + + elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") +" call Decho('case liststyle is TREELIST and w:netrw_treedict exists') + " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh) + setlocal noro ma +" call Decho("setlocal noro ma") + if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")) +" call Decho("clear buffer<".expand("%")."> with :%d") + keepjumps %d + endif + let treedir = s:NetrwTreeDir() + let s:treecurpos = nbcd_curpos + let haskey= 0 +" call Decho("w:netrw_treedict<".string(w:netrw_treedict).">") + + " search treedict for tree dir as-is + if has_key(w:netrw_treedict,treedir) +" call Decho('....searched for treedir<'.treedir.'> : found it!') + let haskey= 1 + else +" call Decho('....searched for treedir<'.treedir.'> : not found') + endif + + " search treedict for treedir with a / appended + if !haskey && treedir !~ '/$' + if has_key(w:netrw_treedict,treedir."/") + let treedir= treedir."/" +" call Decho('....searched.for treedir<'.treedir.'> found it!') + let haskey = 1 + else +" call Decho('....searched for treedir<'.treedir.'/> : not found') + endif + endif + + " search treedict for treedir with any trailing / elided + if !haskey && treedir =~ '/$' + let treedir= substitute(treedir,'/$','','') + if has_key(w:netrw_treedict,treedir) +" call Decho('....searched.for treedir<'.treedir.'> found it!') + let haskey = 1 + else +" call Decho('....searched for treedir<'.treedir.'> : not found') + endif + endif + + if haskey + " close tree listing for selected subdirectory +" call Decho("closing selected subdirectory<".dirname.">") + call remove(w:netrw_treedict,treedir) +" call Decho("removed entry<".dirname."> from treedict") +" call Decho("yielding treedict<".string(w:netrw_treedict).">") + let dirname= w:netrw_treetop + else + " go down one directory + let dirname= substitute(treedir,'/*$','/','') +" call Decho("go down one dir: treedir<".treedir.">") + endif + call s:SetRexDir(a:islocal,dirname) + + else + " go down one directory + let dirname= s:ComposePath(dirname,newdir) +" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") + call s:SetRexDir(a:islocal,dirname) + endif + + call s:NetrwOptionRestore("s:") + if dolockout +" call Decho("doing modification lockout settings: ma nomod noro") + setlocal ma nomod noro +" call Decho("setlocal ma nomod noro") + endif + +" call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">") + return dirname +endfun + +" --------------------------------------------------------------------- +" s:NetrwBrowseX: allows users to write custom functions to operate on {{{2 +" files given their extension. Passes 0=local, 1=remote +fun! netrw#NetrwBrowseX(fname,remote) +" call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")") + + " set up the filename + " (lower case the extension, make a local copy of a remote file) + let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') + if has("win32") || has("win95") || has("win64") || has("win16") + let exten= substitute(exten,'^.*$','\L&\E','') + endif +" call Decho("exten<".exten.">") + + " seems kde systems often have gnome-open due to dependencies, even though + " gnome-open's subsidiary display tools are largely absent. Kde systems + " usually have "kdeinit" running, though... (tnx Mikolaj Machowski) + if !exists("s:haskdeinit") + if has("unix") + let s:haskdeinit= system("ps -e") =~ 'kdeinit' + if v:shell_error + let s:haskdeinit = 0 + endif + else + let s:haskdeinit= 0 + endif +" call Decho("setting s:haskdeinit=".s:haskdeinit) + endif + + if a:remote == 1 + " create a local copy +" call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">") + setlocal bh=delete + call netrw#NetRead(3,a:fname) + " attempt to rename tempfile + let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','') + let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','') +" call Decho("basename<".basename.">") +" call Decho("newname <".newname.">") + if rename(s:netrw_tmpfile,newname) == 0 + " renaming succeeded + let fname= newname + else + " renaming failed + let fname= s:netrw_tmpfile + endif + else + let fname= a:fname + endif +" call Decho("fname<".fname.">") +" call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten)) + + " set up redirection + if &srr =~ "%s" + if (has("win32") || has("win95") || has("win64") || has("win16")) + let redir= substitute(&srr,"%s","nul","") + else + let redir= substitute(&srr,"%s","/dev/null","") + endif + elseif (has("win32") || has("win95") || has("win64") || has("win16")) + let redir= &srr . "nul" + else + let redir= &srr . "/dev/null" + endif +" call Decho("redir{".redir."} srr{".&srr."}") + + " extract any viewing options. Assumes that they're set apart by quotes. + if exists("g:netrw_browsex_viewer") + if g:netrw_browsex_viewer =~ '\s' + let viewer = substitute(g:netrw_browsex_viewer,'\s.*$','','') + let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." " + let oviewer = '' + let cnt = 1 + while !executable(viewer) && viewer != oviewer + let viewer = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','') + let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." " + let cnt = cnt + 1 + let oviewer = viewer +" call Decho("!exe: viewer<".viewer."> viewopt<".viewopt.">") + endwhile + else + let viewer = g:netrw_browsex_viewer + let viewopt = "" + endif +" call Decho("viewer<".viewer."> viewopt<".viewopt.">") + endif + + " execute the file handler + if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-' +" call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") + let ret= netrwFileHandlers#Invoke(exten,fname) + + elseif exists("g:netrw_browsex_viewer") && executable(viewer) +" call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">") +" call Decho("exe silent !".viewer." ".viewopt.shellescape(fname,1).redir) + exe "silent !".viewer." ".viewopt.shellescape(fname,1).redir + let ret= v:shell_error + + elseif has("win32") || has("win64") +" call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)) + exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1) + call inputsave()|call input("Press to continue")|call inputrestore() + let ret= v:shell_error + + elseif has("unix") && executable("gnome-open") && !s:haskdeinit +" call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir) + exe "silent !gnome-open ".shellescape(fname,1).redir + let ret= v:shell_error + + elseif has("unix") && executable("kfmclient") && s:haskdeinit +" call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir) + exe "silent !kfmclient exec ".shellescape(fname,1)." ".redir + let ret= v:shell_error + + elseif has("macunix") && executable("open") +" call Decho("exe silent !open ".shellescape(fname,1)." ".redir) + exe "silent !open ".shellescape(fname,1)." ".redir + let ret= v:shell_error + + else + " netrwFileHandlers#Invoke() always returns 0 + let ret= netrwFileHandlers#Invoke(exten,fname) + endif + + " if unsuccessful, attempt netrwFileHandlers#Invoke() + if ret + let ret= netrwFileHandlers#Invoke(exten,fname) + endif + + " restoring redraw! after external file handlers + redraw! + + " cleanup: remove temporary file, + " delete current buffer if success with handler, + " return to prior buffer (directory listing) + " Feb 12, 2008: had to de-activiate removal of + " temporary file because it wasn't getting seen. +" if a:remote == 1 && fname != a:fname +" call Decho("deleting temporary file<".fname.">") +" call s:NetrwDelete(fname) +" endif + + if a:remote == 1 + setlocal bh=delete bt=nofile + if g:netrw_use_noswf + setlocal noswf + endif + exe "norm! \" +" redraw! + endif + +" call Dret("NetrwBrowseX") +endfun + +" --------------------------------------------------------------------- +" netrw#Explore: launch the local browser in the directory of the current file {{{2 +" indx: == -1: Nexplore +" == -2: Pexplore +" == +: this is overloaded: +" * If Nexplore/Pexplore is in use, then this refers to the +" indx'th item in the w:netrw_explore_list[] of items which +" matched the */pattern **/pattern *//pattern **//pattern +" * If Hexplore or Vexplore, then this will override +" g:netrw_winsize to specify the qty of rows or columns the +" newly split window should have. +" dosplit==0: the window will be split iff the current file has been modified +" dosplit==1: the window will be split before running the local browser +" style == 0: Explore style == 1: Explore! +" == 2: Hexplore style == 3: Hexplore! +" == 4: Vexplore style == 5: Vexplore! +" == 6: Texplore +"DechoTabOn +fun! netrw#Explore(indx,dosplit,style,...) +" call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0) + if !exists("b:netrw_curdir") + let b:netrw_curdir= getcwd() +" call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)") + endif + let curfile= b:netrw_curdir +" call Decho("curfile<".curfile.">") + + " save registers + silent! let keepregstar = @* + silent! let keepregplus = @+ + silent! let keepregslash= @/ + + " if dosplit or file has been modified + if a:dosplit || &modified || a:style == 6 +" call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style) + call s:SaveWinVars() + let winsize= g:netrw_winsize + if a:indx > 0 + let winsize= a:indx + endif + + if a:style == 0 " Explore, Sexplore +" call Decho("style=0: Explore or Sexplore") + exe winsize."wincmd s" + + elseif a:style == 1 "Explore!, Sexplore! +" call Decho("style=1: Explore! or Sexplore!") + exe winsize."wincmd v" + + elseif a:style == 2 " Hexplore +" call Decho("style=2: Hexplore") + exe "bel ".winsize."wincmd s" + + elseif a:style == 3 " Hexplore! +" call Decho("style=3: Hexplore!") + exe "abo ".winsize."wincmd s" + + elseif a:style == 4 " Vexplore +" call Decho("style=4: Vexplore") + exe "lefta ".winsize."wincmd v" + + elseif a:style == 5 " Vexplore! +" call Decho("style=5: Vexplore!") + exe "rightb ".winsize."wincmd v" + + elseif a:style == 6 " Texplore + call s:SaveBufVars() +" call Decho("style = 6: Texplore") + tabnew + call s:RestoreBufVars() + endif + call s:RestoreWinVars() + endif + norm! 0 + + if a:0 > 0 +" call Decho("case [a:0=".a:0."]>0: a:1<".a:1.">") + if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)) + let dirname= substitute(a:1,'\~',expand("$HOME"),'') +" call Decho("using dirname<".dirname."> (case: ~ && unix||cygwin)") + elseif a:1 == '.' + let dirname= exists("b:netrw_curdir")? b:netrw_curdir : getcwd() + if dirname !~ '/$' + let dirname= dirname."/" + endif +" call Decho("using dirname<".dirname."> (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")") + elseif a:1 =~ '\$' + let dirname= expand(a:1) + else + let dirname= a:1 +" call Decho("using dirname<".dirname.">") + endif + else + " clear explore +" call Decho("clearing explore variables") + 2match none + if exists("s:explore_match") |unlet s:explore_match |endif + if exists("s:explore_indx") |unlet s:explore_indx |endif + if exists("s:dirstarstar") |unlet s:dirstarstar |endif + if exists("s:dirstarstar") |unlet s:dirstarstar |endif + if exists("w:netrw_explore_indx") |unlet w:netrw_explore_indx |endif + if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif + if exists("w:netrw_explore_list") |unlet w:netrw_explore_list |endif + if exists("w:netrw_explore_bufnr") |unlet w:netrw_explore_bufnr |endif +" redraw! + echo " " + echo " " +" call Dret("netrw#Explore : cleared list") + return + endif + + if dirname =~ '/\*\*/' + " handle .../**/.../filepat +" call Decho("case Explore .../**/.../filepat") + let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','') + if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16"))) + let b:netrw_curdir = prefixdir + else + let b:netrw_curdir= getcwd().'/'.prefixdir + endif + let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','') + let starpat= 4; +" call Decho("pwd<".getcwd()."> dirname<".dirname.">") +" call Decho("case Explore ../**/../filepat (starpat=".starpat.")") + + elseif dirname =~ '^\*//' + " starpat=1: Explore *//pattern (current directory only search for files containing pattern) +" call Decho("case Explore *//pattern") + let pattern= substitute(dirname,'^\*//\(.*\)$','\1','') + let starpat= 1 +" call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") + if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif + + elseif dirname =~ '^\*\*//' + " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) +" call Decho("case Explore **//pattern") + let pattern= substitute(dirname,'^\*\*//','','') + let starpat= 2 +" call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">") + + elseif dirname =~ '^\*/' + " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) + let starpat= 3 +" call Decho("case Explore */filepat (starpat=".starpat.")") + + elseif dirname=~ '^\*\*/' + " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) + let starpat= 4 +" call Decho("case Explore **/filepat (starpat=".starpat.")") + else + let starpat= 0 + endif + + if starpat == 0 && a:indx >= 0 + " [Explore Hexplore Vexplore Sexplore] [dirname] +" call Decho("case dirname<".dirname."> a:indx=".a:indx.": Explore Hexplore Vexplore Sexplore") + if dirname == "" + let dirname= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e') + endif + if dirname =~ '^scp:' || dirname =~ '^ftp:' +" call Decho("calling NetrwBrowse(0,dirname<".dirname.">)") + call s:NetrwBrowse(0,dirname) + else + if dirname == ""|let dirname= getcwd()|endif +" call Decho("calling LocalBrowseCheck(dirname<".dirname.">)") + call netrw#LocalBrowseCheck(dirname) + endif + +" call Decho("curfile<".curfile.">") + if has("win32") || has("win95") || has("win64") || has("win16") + call search('\<'.substitute(curfile,'^.*[/\\]','','e').'\>','cW') + else + call search('\<'.substitute(curfile,'^.*/','','e').'\>','cW') + endif + + " starpat=1: Explore *//pattern (current directory only search for files containing pattern) + " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) + " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) + " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) + elseif a:indx <= 0 + " Nexplore, Pexplore, Explore: handle starpat +" call Decho("case Nexplore, Pexplore, , : starpat=".starpat." a:indx=".a:indx) + if !mapcheck("","n") && !mapcheck("","n") && exists("b:netrw_curdir") +" call Decho("set up and maps") + let s:didstarstar= 1 + nnoremap :Pexplore + nnoremap :Nexplore + endif + + if has("path_extra") +" call Decho("starpat=".starpat.": has +path_extra") + if !exists("w:netrw_explore_indx") + let w:netrw_explore_indx= 0 + endif + + let indx = a:indx +" call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]") + + if indx == -1 + " Nexplore +" call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")") + if !exists("w:netrw_explore_list") " sanity check + call netrw#ErrorMsg(s:WARNING,"using Nexplore or improperly; see help for netrw-starstar",40) + silent! let @* = keepregstar + silent! let @+ = keepregstar + silent! let @/ = keepregslash +" call Dret("netrw#Explore") + return + endif + let indx= w:netrw_explore_indx + if indx < 0 | let indx= 0 | endif + if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif + let curfile= w:netrw_explore_list[indx] +" call Decho("indx=".indx." curfile<".curfile.">") + while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx] + let indx= indx + 1 +" call Decho("indx=".indx." (Nexplore while loop)") + endwhile + if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif +" call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) + + elseif indx == -2 + " Pexplore +" call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")") + if !exists("w:netrw_explore_list") " sanity check + call netrw#ErrorMsg(s:WARNING,"using Pexplore or improperly; see help for netrw-starstar",41) + silent! let @* = keepregstar + silent! let @+ = keepregstar + silent! let @/ = keepregslash +" call Dret("netrw#Explore") + return + endif + let indx= w:netrw_explore_indx + if indx < 0 | let indx= 0 | endif + if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif + let curfile= w:netrw_explore_list[indx] +" call Decho("indx=".indx." curfile<".curfile.">") + while indx >= 0 && curfile == w:netrw_explore_list[indx] + let indx= indx - 1 +" call Decho("indx=".indx." (Pexplore while loop)") + endwhile + if indx < 0 | let indx= 0 | endif +" call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx) + + else + " Explore -- initialize + " build list of files to Explore with Nexplore/Pexplore +" call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")") + let w:netrw_explore_indx= 0 + if !exists("b:netrw_curdir") + let b:netrw_curdir= getcwd() + endif +" call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">") + + " switch on starpat to build the w:netrw_explore_list of files + if starpat == 1 + " starpat=1: Explore *//pattern (current directory only search for files containing pattern) +" call Decho("starpat=".starpat.": build *//pattern list") +" call Decho("pattern<".pattern.">") + exe "vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*" + let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)') + if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif + + elseif starpat == 2 + " starpat=2: Explore **//pattern (recursive descent search for files containing pattern) +" call Decho("starpat=".starpat.": build **//pattern list") + try + exe "silent vimgrep /".pattern."/gj "."**/*" + catch /^Vim\%((\a\+)\)\=:E480/ + call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45) + if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif + silent! let @* = keepregstar + silent! let @+ = keepregstar + silent! let @/ = keepregslash +" call Dret("netrw#Explore : no files matched pattern") + return + endtry + let s:netrw_curdir = b:netrw_curdir + let w:netrw_explore_list = getqflist() + let w:netrw_explore_list = map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)') + + elseif starpat == 3 + " starpat=3: Explore */filepat (search in current directory for filenames matching filepat) +" call Decho("starpat=".starpat.": build */filepat list") + let filepat= substitute(dirname,'^\*/','','') + let filepat= substitute(filepat,'^[%#<]','\\&','') +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") +" call Decho("filepat<".filepat.">") + let w:netrw_explore_list= split(expand(b:netrw_curdir."/".filepat),'\n') + if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif + + elseif starpat == 4 + " starpat=4: Explore **/filepat (recursive descent search for filenames matching filepat) +" call Decho("starpat=".starpat.": build **/filepat list") + let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n') + if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif + endif " switch on starpat to build w:netrw_explore_list + + let w:netrw_explore_listlen = len(w:netrw_explore_list) +" call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">") +" call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen) + + if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/') + call netrw#ErrorMsg(s:WARNING,"no files matched",42) + silent! let @* = keepregstar + silent! let @+ = keepregstar + silent! let @/ = keepregslash +" call Dret("netrw#Explore : no files matched") + return + endif + endif " if indx ... endif + + " NetrwStatusLine support - for exploring support + let w:netrw_explore_indx= indx +" call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen) + + " wrap the indx around, but issue a note + if indx >= w:netrw_explore_listlen || indx < 0 +" call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")") + let indx = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0 + let w:netrw_explore_indx= indx + call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43) + endif + + exe "let dirfile= w:netrw_explore_list[".indx."]" +" call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">") + let newdir= substitute(dirfile,'/[^/]*$','','e') +" call Decho("newdir<".newdir.">") + +" call Decho("calling LocalBrowseCheck(newdir<".newdir.">)") + call netrw#LocalBrowseCheck(newdir) + if !exists("w:netrw_liststyle") + let w:netrw_liststyle= g:netrw_liststyle + endif + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST + call search('^'.substitute(dirfile,"^.*/","","").'\>',"W") + else + call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w") + endif + let w:netrw_explore_mtchcnt = indx + 1 + let w:netrw_explore_bufnr = bufnr("%") + let w:netrw_explore_line = line(".") + call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}') +" call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line) + + else +" call Decho("your vim does not have +path_extra") + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44) + endif + silent! let @* = keepregstar + silent! let @+ = keepregstar + silent! let @/ = keepregslash +" call Dret("netrw#Explore : missing +path_extra") + return + endif + + else +" call Decho("case Explore newdir<".dirname.">") + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/' + silent! unlet w:netrw_treedict + silent! unlet w:netrw_treetop + endif + let newdir= dirname + if !exists("b:netrw_curdir") + call netrw#LocalBrowseCheck(getcwd()) + else + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir)) + endif + endif + + " visual display of **/ **// */ Exploration files + if exists("w:netrw_explore_indx") && exists("b:netrw_curdir") + if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir + " only update match list if current directory isn't the same as before + let s:explore_prvdir = b:netrw_curdir + let s:explore_match = "" + let dirlen = strlen(b:netrw_curdir) + if b:netrw_curdir !~ '/$' + let dirlen= dirlen + 1 + endif + let prvfname= "" + for fname in w:netrw_explore_list +" call Decho("fname<".fname.">") +"COMBAK -- g:netrw_markfileesc."'".g:netrw_markfileesc."'" ??? + if fname =~ '^'.b:netrw_curdir + if s:explore_match == "" + let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>' + else + let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>' + endif + elseif fname !~ '^/' && fname != prvfname + if s:explore_match == "" + let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>' + else + let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>' + endif + endif + let prvfname= fname + endfor +" call Decho("explore_match<".s:explore_match.">") + exe "2match netrwMarkFile /".s:explore_match."/" + endif + echo "==Pexplore ==Nexplore" + else + 2match none + if exists("s:explore_match") | unlet s:explore_match | endif + if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif + echo " " +" call Decho("cleared explore match list") + endif + + silent! let @* = keepregstar + silent! let @+ = keepregstar + silent! let @/ = keepregslash +" call Dret("netrw#Explore : @/<".@/.">") +endfun + +" --------------------------------------------------------------------- +" s:NetrwHide: this function is invoked by the "a" map for browsing {{{2 +" and switches the hiding mode. The actual hiding is done by +" s:NetrwListHide(). +" g:netrw_hide= 0: show all +" 1: show not-hidden files +" 2: show hidden files only +fun! s:NetrwHide(islocal) +" call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide) + let svpos= netrw#NetrwSavePosn() + + if exists("s:netrwmarkfilelist_{bufnr('%')}") +" call Decho(((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">") +" call Decho("g:netrw_list_hide<".g:netrw_list_hide.">") + + " hide the files in the markfile list + for fname in s:netrwmarkfilelist_{bufnr("%")} +" call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk) + if match(g:netrw_list_hide,'\<'.fname.'\>') != -1 + " remove fname from hiding list + let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','') + let g:netrw_list_hide= substitute(g:netrw_list_hide,',,',',','g') + let g:netrw_list_hide= substitute(g:netrw_list_hide,'^,\|,$','','') +" call Decho("unhide: g:netrw_list_hide<".g:netrw_list_hide.">") + else + " append fname to hiding list + if exists("g:netrw_list_hide") && g:netrw_list_hide != "" + let g:netrw_list_hide= g:netrw_list_hide.',\<'.escape(fname,g:netrw_fname_escape).'\>' + else + let g:netrw_list_hide= '\<'.escape(fname,g:netrw_fname_escape).'\>' + endif +" call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">") + endif + endfor + call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir) + let g:netrw_hide= 1 + + else + + " switch between show-all/show-not-hidden/show-hidden + let g:netrw_hide=(g:netrw_hide+1)%3 + exe "norm! 0" + if g:netrw_hide && g:netrw_list_hide == "" + call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49) +" call Dret("NetrwHide") + return + endif + endif + + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) +" call Dret("NetrwHide") +endfun + +" --------------------------------------------------------------------- +" s:NetrwHidden: invoked by "gh" {{{2 +fun! s:NetrwHidden(islocal) +" call Dfunc("s:NetrwHidden()") + " save current position + let svpos= netrw#NetrwSavePosn() + + if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+' + " remove pattern from hiding list + let g:netrw_list_hide= substitute(g:netrw_list_hide,'\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+','','') + elseif strlen(g:netrw_list_hide) >= 1 + let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+' + else + let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+' + endif + + " refresh screen and return to saved position + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) +" call Dret("s:NetrwHidden") +endfun + +" --------------------------------------------------------------------- +" s:NetrwHome: this function determines a "home" for saving bookmarks and history {{{2 +fun! s:NetrwHome() +" call Dfunc("s:NetrwHome()") + if exists("g:netrw_home") + let home= g:netrw_home + else + " go to vim plugin home + for home in split(&rtp,',') + [''] + if isdirectory(home) && filewritable(home) | break | endif + let basehome= substitute(home,'[/\\]\.vim$','','') + if isdirectory(basehome) && filewritable(basehome) + let home= basehome."/.vim" + break + endif + endfor + if home == "" + " just pick the first directory +" call Decho("just pick first directory in &rtp") + let home= substitute(&rtp,',.*$','','') + endif + if (has("win32") || has("win95") || has("win64") || has("win16")) + let home= substitute(home,'/','\\','g') + endif + endif + " insure that the home directory exists +" call Decho("picked home<".home.">") + if !isdirectory(home) + if exists("g:netrw_mkdir") +" call Decho("home<".home."> isn't a directory -- making it now with g:netrw_mkdir<".g:netrw_mkdir.">") +" call Decho("system(".g:netrw_mkdir." ".s:Escape(home).")") + call system(g:netrw_mkdir." ".s:Escape(home)) + else +" call Decho("home<".home."> isn't a directory -- making it now with mkdir()") + call mkdir(home) + endif + endif + let g:netrw_home= home +" call Dret("s:NetrwHome <".home.">") + return home +endfun + +" --------------------------------------------------------------------- +" s:NetrwLeftmouse: handles the when in a netrw browsing window {{{2 +fun! s:NetrwLeftmouse(islocal) +" call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")") + if a:islocal + if exists("b:netrw_curdir") + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) + endif + else + if exists("b:netrw_curdir") + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) + endif + endif +" call Dret("s:NetrwLeftmouse") +endfun + +" --------------------------------------------------------------------- +" s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 +" separated patterns given in g:netrw_list_hide +fun! s:NetrwListHide() +" call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">") + + " find a character not in the "hide" string to use as a separator for :g and :v commands + " How-it-works: take the hiding command, convert it into a range. Duplicate + " characters don't matter. Remove all such characters from the '/~...90' + " string. Use the first character left as a separator character. + let listhide= g:netrw_list_hide + let sep = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1) +" call Decho("sep=".sep) + + while listhide != "" + if listhide =~ ',' + let hide = substitute(listhide,',.*$','','e') + let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e') + else + let hide = listhide + let listhide = "" + endif + + " Prune the list by hiding any files which match + if g:netrw_hide == 1 +" call Decho("hiding<".hide."> listhide<".listhide.">") + exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d' + elseif g:netrw_hide == 2 +" call Decho("showing<".hide."> listhide<".listhide.">") + exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @' + endif + endwhile + if g:netrw_hide == 2 + exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d' + exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e' + endif + +" call Dret("NetrwListHide") +endfun + +" --------------------------------------------------------------------- +" NetrwHideEdit: allows user to edit the file/directory hiding list +fun! s:NetrwHideEdit(islocal) +" call Dfunc("NetrwHideEdit(islocal=".a:islocal.")") + + " save current cursor position + let svpos= netrw#NetrwSavePosn() + + " get new hiding list from user + call inputsave() + let newhide= input("Edit Hiding List: ",g:netrw_list_hide) + call inputrestore() + let g:netrw_list_hide= newhide +" call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">") + + " refresh the listing + silent call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./")) + + " restore cursor position + call netrw#NetrwRestorePosn(svpos) + +" call Dret("NetrwHideEdit") +endfun + +" --------------------------------------------------------------------- +" NetSortSequence: allows user to edit the sorting sequence +fun! s:NetSortSequence(islocal) +" call Dfunc("NetSortSequence(islocal=".a:islocal.")") + + let svpos= netrw#NetrwSavePosn() + call inputsave() + let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence) + call inputrestore() + + " refresh the listing + let g:netrw_sort_sequence= newsortseq + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + +" call Dret("NetSortSequence") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2 +fun! s:NetrwMakeDir(usrhost) +" call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)") + + " get name of new directory from user. A bare will skip. + " if its currently a directory, also request will be skipped, but with + " a message. + call inputsave() + let newdirname= input("Please give directory name: ") + call inputrestore() +" call Decho("newdirname<".newdirname.">") + + if newdirname == "" +" call Dret("NetrwMakeDir : user aborted with bare ") + return + endif + + if a:usrhost == "" +" call Decho("local mkdir") + + " Local mkdir: + " sanity checks + let fullnewdir= b:netrw_curdir.'/'.newdirname +" call Decho("fullnewdir<".fullnewdir.">") + if isdirectory(fullnewdir) + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24) + endif +" call Dret("NetrwMakeDir : directory<".newdirname."> exists previously") + return + endif + if s:FileReadable(fullnewdir) + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25) + endif +" call Dret("NetrwMakeDir : file<".newdirname."> exists previously") + return + endif + + " requested new local directory is neither a pre-existing file or + " directory, so make it! + if exists("*mkdir") + call mkdir(fullnewdir,"p") + else + let netrw_origdir= s:NetrwGetcwd(1) + exe 'keepjumps lcd '.fnameescape(b:netrw_curdir) +" call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">") +" call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)) + exe "silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1) + if !g:netrw_keepdir + exe 'keepjumps lcd '.fnameescape(netrw_origdir) +" call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">") + endif + endif + + if v:shell_error == 0 + " refresh listing +" call Decho("refresh listing") + let svpos= netrw#NetrwSavePosn() + call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) + call netrw#NetrwRestorePosn(svpos) + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26) + endif +" redraw! + + elseif !exists("b:netrw_method") || b:netrw_method == 4 + " Remote mkdir: +" call Decho("remote mkdir") + let mkdircmd = s:MakeSshCmd(g:netrw_mkdir_cmd) + let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname +" call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1)) + exe "silent! !".mkdircmd." ".shellescape(newdirname,1) + if v:shell_error == 0 + " refresh listing + let svpos= netrw#NetrwSavePosn() + call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) + call netrw#NetrwRestorePosn(svpos) + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27) + endif +" redraw! + + elseif b:netrw_method == 2 + " COMBAK -- future work + call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68) + elseif b:netrw_method == 3 + " COMBAK -- future work + call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68) + endif + +" call Dret("NetrwMakeDir") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFile: (invoked by mf) This function is used to both {{{2 +" mark and unmark files. If a markfile list exists, +" then the rename and delete functions will use it instead +" of whatever may happen to be under the cursor at that +" moment. When the mouse and gui are available, +" shift-leftmouse may also be used to mark files. +" +" Creates two lists +" s:netrwmarkfilelist -- holds complete paths to all marked files +" s:netrwmarkfilelist_# -- holds list of marked files in current-buffer's directory (#==bufnr()) +" +" Creates a marked file match string +" s:netrwmarfilemtch_# -- used with 2match to display marked files +" +" Creates a buffer version of islocal +" b:netrw_islocal +" +fun! s:NetrwMarkFile(islocal,fname) +" call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)") + let curbufnr= bufnr("%") + let curdir = b:netrw_curdir + if exists("s:netrwmarkfilelist_{curbufnr}") + " markfile list exists +" call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">") +" call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">") + let b:netrw_islocal= a:islocal + + if index(s:netrwmarkfilelist_{curbufnr},a:fname) == -1 + " append filename to buffer's markfilelist +" call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") + call add(s:netrwmarkfilelist_{curbufnr},a:fname) + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>' + + else + " remove filename from buffer's markfilelist +" call Decho("remove filename<".a:fname."> from local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") + call filter(s:netrwmarkfilelist_{curbufnr},'v:val != a:fname') + if s:netrwmarkfilelist_{curbufnr} == [] + " local markfilelist is empty; remove it entirely +" call Decho("markfile list now empty") + call s:NetrwUnmarkList(curbufnr,curdir) + else + " rebuild match list to display markings correctly +" call Decho("rebuild s:netrwmarkfilemtch_".curbufnr) + let s:netrwmarkfilemtch_{curbufnr}= "" + let first = 1 + for fname in s:netrwmarkfilelist_{curbufnr} + if first + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>' + else + let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>' + endif + let first= 0 + endfor +" call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">") +" call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">") + endif + endif + + else + " initialize new markfilelist + +" call Decho("add fname<".a:fname."> to new markfilelist_".curbufnr) + let s:netrwmarkfilelist_{curbufnr}= [] + call add(s:netrwmarkfilelist_{curbufnr},a:fname) +" call Decho("ending s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">") + + " build initial markfile matching pattern + if a:fname =~ '/$' + let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc) + else + let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).'\>' + endif +" call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">") + endif + + " handle global markfilelist + if exists("s:netrwmarkfilelist") + let dname= s:ComposePath(b:netrw_curdir,a:fname) + if index(s:netrwmarkfilelist,dname) == -1 + " append new filename to global markfilelist + call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname)) +" call Decho("append filename<".a:fname."> to global markfilelist<".string(s:netrwmarkfilelist).">") + else + " remove new filename from global markfilelist +" call Decho("filter(".string(s:netrwmarkfilelist).",'v:val != '.".dname.")") + call filter(s:netrwmarkfilelist,'v:val != "'.dname.'"') +" call Decho("ending s:netrwmarkfilelist <".string(s:netrwmarkfilelist).">") + if s:netrwmarkfilelist == [] + unlet s:netrwmarkfilelist + endif + endif + else + " initialize new global-directory markfilelist + let s:netrwmarkfilelist= [] + call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname)) +" call Decho("init s:netrwmarkfilelist<".string(s:netrwmarkfilelist).">") + endif + + " set up 2match'ing to netrwmarkfilemtch list + if exists("s:netrwmarkfilemtch_{curbufnr}") && s:netrwmarkfilemtch_{curbufnr} != "" +" call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/") + exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/" + else +" call Decho("2match none") + 2match none + endif +" call Dret("s:NetrwMarkFile : netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileCompress: (invoked by mz) This function is used to {{{2 +" compress/decompress files using the programs +" in g:netrw_compress and g:netrw_uncompress, +" using g:netrw_compress_suffix to know which to +" do. By default: +" g:netrw_compress = "gzip" +" g:netrw_decompress = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"} +fun! s:NetrwMarkFileCompress(islocal) +" call Dfunc("s:NetrwMarkFileCompress(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curdir = b:netrw_curdir + let curbufnr = bufnr("%") + + if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress") + for fname in s:netrwmarkfilelist_{curbufnr} + " for every filename in the marked list + for sfx in sort(keys(g:netrw_decompress)) + if fname =~ '\'.sfx.'$' + " fname has a suffix indicating that its compressed; apply associated decompression routine + let exe= s:WinPath(g:netrw_decompress[sfx]) +" call Decho("fname<".fname."> is compressed so decompress with <".exe.">") + if a:islocal + if g:netrw_keepdir + let fname= shellescape(s:ComposePath(curdir,fname)) + endif + else + let fname= shellescape(b:netrw_curdir.fname,1) + endif + if executable(exe) + if a:islocal + call system(exe." ".fname) + else + call s:RemoteSystem(exe." ".fname) + endif + else + call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50) + endif + break + endif + endfor + if exists("exe") + unlet exe + elseif a:islocal + " fname not a compressed file, so compress it + call system(s:WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname))) + else + " fname not a compressed file, so compress it + call s:RemoteSystem(s:WinPath(g:netrw_compress)." ".shellescape(fname)) + endif + endfor + call s:NetrwUnmarkList(curbufnr,curdir) + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + endif +" call Dret("s:NetrwMarkFileCompress") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileCopy: (invoked by mc) copy marked files to target {{{2 +" If no marked files, then set up directory as the +" target. Currently does not support copying entire +" directories. Uses the local-buffer marked file list. +" Returns 1=success (used by NetrwMarkFileMove()) +" 0=failure +fun! s:NetrwMarkFileCopy(islocal) +" call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">") + + " sanity checks + if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')}) + call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66) +" call Dret("s:NetrwMarkFileCopy 0") + return 0 + endif +" call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')})) + if !exists("s:netrwmftgt") + call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67) +" call Dret("s:NetrwMarkFileCopy 0") + return 0 + endif +" call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">") + let curdir = b:netrw_curdir + let curbufnr = bufnr("%") + + if a:islocal && s:netrwmftgt_islocal + " Copy marked files, local directory to local directory +" call Decho("copy from local to local") + let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)")) +" call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")") + call system(s:WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt)) + + elseif a:islocal && !s:netrwmftgt_islocal + " Copy marked files, local directory to remote directory +" call Decho("copy from local to remote") + call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) + + elseif !a:islocal && s:netrwmftgt_islocal +" call Decho("copy from remote to local") + call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt) + + elseif !a:islocal && !s:netrwmftgt_islocal +" call Decho("copy from remote to remote") + let curdir = getcwd() + let tmpdir = s:GetTempfile("") + if tmpdir !~ '/' + let tmpdir= curdir."/".tmpdir + endif + if exists("*mkdir") + call mkdir(tmpdir) + else + exe "silent! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1) + endif + if isdirectory(tmpdir) + exe "keepjumps lcd ".fnameescape(tmpdir) + call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir) + let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")') + call s:NetrwUpload(localfiles,s:netrwmftgt) + if getcwd() == tmpdir + for fname in s:netrwmarkfilelist_{bufnr('%')} + call s:NetrwDelete(fname) + endfor + exe "keepjumps lcd ".fnameescape(curdir) + exe "silent !".g:netrw_local_rmdir." ".shellescape(tmpdir,1) + else + exe "keepjumps lcd ".fnameescape(curdir) + endif + endif + endif + + " ------- + " cleanup + " ------- +" call Decho("cleanup") + + " remove markings from local buffer + call s:NetrwUnmarkList(curbufnr,curdir) + + " refresh buffers + if !s:netrwmftgt_islocal + call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt) + endif + if a:islocal + call s:NetrwRefreshDir(a:islocal,b:netrw_curdir) + endif + if g:netrw_fastbrowse <= 1 + call s:LocalBrowseShellCmdRefresh() + endif + +" call Dret("s:NetrwMarkFileCopy 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileDiff: (invoked by md) This function is used to {{{2 +" invoke vim's diff mode on the marked files. +" Either two or three files can be so handled. +" Uses the global marked file list. +fun! s:NetrwMarkFileDiff(islocal) +" call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">") + let curbufnr= bufnr("%") + + if exists("s:netrwmarkfilelist_{curbufnr}") + let cnt = 0 + let curdir = b:netrw_curdir + for fname in s:netrwmarkfilelist + let cnt= cnt + 1 + if cnt == 1 +" call Decho("diffthis: fname<".fname.">") + exe "e ".fnameescape(fname) + diffthis + elseif cnt == 2 || cnt == 3 + vsplit + wincmd l +" call Decho("diffthis: ".fname) + exe "e ".fnameescape(fname) + diffthis + else + break + endif + endfor + call s:NetrwUnmarkList(curbufnr,curdir) + endif + +" call Dret("s:NetrwMarkFileDiff") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileEdit: (invoked by me) put marked files on arg list and start editing them {{{2 +" Uses global markfilelist +fun! s:NetrwMarkFileEdit(islocal) +" call Dfunc("s:NetrwMarkFileEdit(islocal=".a:islocal.")") + + let curdir = b:netrw_curdir + let curbufnr = bufnr("%") + if exists("s:netrwmarkfilelist_{curbufnr}") + call s:SetRexDir(a:islocal,curdir) + let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)")) + " unmark markedfile list +" call s:NetrwUnmarkList(curbufnr,curdir) + call s:NetrwUnmarkAll() +" call Decho("exe silent args ".flist) + exe "silent args ".flist + endif + +" call Dret("s:NetrwMarkFileEdit") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2 +" Uses the local marked-file list. +fun! s:NetrwMarkFileExe(islocal) +" call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curdir = b:netrw_curdir + let curbufnr = bufnr("%") + + if exists("s:netrwmarkfilelist_{curbufnr}") + " get the command + call inputsave() + let cmd= input("Enter command: ","","file") + call inputrestore() +" call Decho("cmd<".cmd.">") + + " apply command to marked files. Substitute: filename -> % + " If no %, then append a space and the filename to the command + for fname in s:netrwmarkfilelist_{curbufnr} + if a:islocal + if g:netrw_keepdir + let fname= shellescape(s:WinPath(s:ComposePath(curdir,fname))) + endif + else + let fname= shellescape(s:WinPath(b:netrw_curdir.fname)) + endif + if cmd =~ '%' + let xcmd= substitute(cmd,'%',fname,'g') + else + let xcmd= cmd.' '.fname + endif + if a:islocal +" call Decho("local: xcmd<".xcmd.">") + let ret= system(xcmd) + else +" call Decho("remote: xcmd<".xcmd.">") + let ret= s:RemoteSystem(xcmd) + endif + if v:shell_error < 0 + call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54) + break + else + echo ret + endif + endfor + + " unmark marked file list + call s:NetrwUnmarkList(curbufnr,curdir) + + " refresh the listing + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + else + call netrw#ErrorMsg(s:ERROR,"no files marked!",59) + endif + +" call Dret("s:NetrwMarkFileExe") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix +" as the marked file(s) (toggles suffix presence) +" Uses the local marked file list. +fun! s:NetrwMarkHideSfx(islocal) +" call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curbufnr = bufnr("%") + + " s:netrwmarkfilelist_{curbufnr}: the List of marked files + if exists("s:netrwmarkfilelist_{curbufnr}") + + for fname in s:netrwmarkfilelist_{curbufnr} +" call Decho("s:NetrwMarkFileCopy: fname<".fname.">") + " construct suffix pattern + if fname =~ '\.' + let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','') + else + let sfxpat= '^\%(\%(\.\)\@!.\)*$' + endif + " determine if its in the hiding list or not + let inhidelist= 0 + if g:netrw_list_hide != "" + let itemnum = 0 + let hidelist= split(g:netrw_list_hide,',') + for hidepat in hidelist + if sfxpat == hidepat + let inhidelist= 1 + break + endif + let itemnum= itemnum + 1 + endfor + endif +" call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">") + if inhidelist + " remove sfxpat from list + call remove(hidelist,itemnum) + let g:netrw_list_hide= join(hidelist,",") + elseif g:netrw_list_hide != "" + " append sfxpat to non-empty list + let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat + else + " set hiding list to sfxpat + let g:netrw_list_hide= sfxpat + endif + endfor + + " refresh the listing + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + else + call netrw#ErrorMsg(s:ERROR,"no files marked!",59) + endif + +" call Dret("s:NetrwMarkHideSfx") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileGrep: (invoked by mg) This function applies vimgrep to marked files {{{2 +" Uses the global markfilelist +fun! s:NetrwMarkFileGrep(islocal) +" call Dfunc("s:NetrwMarkFileGrep(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curbufnr = bufnr("%") + + if exists("s:netrwmarkfilelist") +" call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">") + let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)")) + call s:NetrwUnmarkAll() + + " ask user for pattern + call inputsave() + let pat= input("Enter pattern: ","") + call inputrestore() + if pat !~ '^\s' + if pat !~ '^/' + let pat= '/'.pat.'/' + endif + let pat= " ".pat + endif + + " use vimgrep for both local and remote +" call Decho("exe vimgrep".pat." ".netrwmarkfilelist) + exe "vimgrep".pat." ".netrwmarkfilelist + + 2match none + call netrw#NetrwRestorePosn(svpos) + endif + +" call Dret("s:NetrwMarkFileGrep") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileMove: (invoked by mm) execute arbitrary command on marked files, one at a time {{{2 +" uses the global marked file list +" s:netrwmfloc= 0: target directory is remote +" = 1: target directory is local +fun! s:NetrwMarkFileMove(islocal) +" call Dfunc("s:NetrwMarkFileMove(islocal=".a:islocal.")") + let curdir = b:netrw_curdir + let curbufnr = bufnr("%") + + " sanity check + if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')}) + call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66) +" call Dret("s:NetrwMarkFileMove") + return + endif +" call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')})) + if !exists("s:netrwmftgt") + call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67) +" call Dret("s:NetrwMarkFileCopy 0") + return 0 + endif +" call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">") + + if a:islocal && s:netrwmftgt_islocal + " move: local -> local +" call Decho("move from local to local") +" call Decho("(s:NetrwMarkFileMove) local to local move") + if executable(g:netrw_localmovecmd) + for fname in s:netrwmarkfilelist_{bufnr("%")} +" call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")") + let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt)) + if v:shell_error < 0 + call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54) + break + endif + endfor + else + call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57) + endif + + elseif a:islocal && !s:netrwmftgt_islocal + " move: local -> remote +" call Decho("move from local to remote") +" call Decho("copy") + let mflist= s:netrwmarkfilelist_{bufnr("%")} + call s:NetrwMarkFileCopy(a:islocal) +" call Decho("remove") + for fname in mflist + let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','') + let ok = s:NetrwLocalRmFile(b:netrw_curdir,barefname,1) + endfor + unlet mflist + + elseif !a:islocal && s:netrwmftgt_islocal + " move: remote -> local +" call Decho("move from remote to local") +" call Decho("copy") + let mflist= s:netrwmarkfilelist_{bufnr("%")} + call s:NetrwMarkFileCopy(a:islocal) +" call Decho("remove") + for fname in mflist + let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','') + let ok = s:NetrwRemoteRmFile(b:netrw_curdir,barefname,1) + endfor + unlet mflist + + elseif !a:islocal && !s:netrwmftgt_islocal + " move: remote -> remote +" call Decho("move from remote to remote") +" call Decho("copy") + let mflist= s:netrwmarkfilelist_{bufnr("%")} + call s:NetrwMarkFileCopy(a:islocal) +" call Decho("remove") + for fname in mflist + let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','') + let ok = s:NetrwRemoteRmFile(b:netrw_curdir,barefname,1) + endfor + unlet mflist + endif + + " ------- + " cleanup + " ------- +" call Decho("cleanup") + + " remove markings from local buffer + call s:NetrwUnmarkList(curbufnr,curdir) " remove markings from local buffer + + " refresh buffers + if !s:netrwmftgt_islocal + call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt) + endif + if a:islocal + call s:NetrwRefreshDir(a:islocal,b:netrw_curdir) + endif + if g:netrw_fastbrowse <= 1 + call s:LocalBrowseShellCmdRefresh() + endif + +" call Dret("s:NetrwMarkFileMove") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFilePrint: (invoked by mp) This function prints marked files {{{2 +" using the hardcopy command. Local marked-file list only. +fun! s:NetrwMarkFilePrint(islocal) +" call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")") + let curbufnr= bufnr("%") + if exists("s:netrwmarkfilelist_{curbufnr}") + let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr} + let curdir = b:netrw_curdir + call s:NetrwUnmarkList(curbufnr,curdir) + for fname in netrwmarkfilelist + if a:islocal + if g:netrw_keepdir + let fname= s:ComposePath(curdir,fname) + endif + else + let fname= curdir.fname + endif + 1split + " the autocmds will handle both local and remote files +" call Decho("exe silent e ".escape(fname,' ')) + exe "silent e ".fnameescape(fname) +" call Decho("hardcopy") + hardcopy + q + endfor + 2match none + endif +" call Dret("s:NetrwMarkFilePrint") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2 +" files when given a regexp (for which a prompt is +" issued). +fun! s:NetrwMarkFileRegexp(islocal) +" call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")") + + " get the regular expression + call inputsave() + let regexp= input("Enter regexp: ","","file") + call inputrestore() + + if a:islocal + " get the matching list of files using local glob() +" call Decho("handle local regexp") + let dirname = escape(b:netrw_curdir,g:netrw_glob_escape) + let filelist = glob(s:ComposePath(dirname,regexp)) + if filelist != "" + let filelist= filelist."\n" + endif + + " mark the list of files + while filelist != "" + if filelist =~ '\n' + let filename = substitute(filelist,'\n.*$','','e') + let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e') + else + let filename = filelist + let filelist = "" + endif +" call Decho("filelist<".filelist.">") +" call Decho("filename<".filename.">") + call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','','')) + endwhile + + else +" call Decho("handle remote regexp") + + " convert displayed listing into a filelist + let eikeep = &ei + let areg = @a + silent %y a + set ei=all ma +" call Decho("set ei=all ma") + 1split + enew + silent norm! "ap + 2 + let bannercnt= search('^" =====','W') + exe "silent 1,".bannercnt."d" + set bt=nofile + if g:netrw_liststyle == s:LONGLIST + silent %s/\s\{2,}\S.*$//e + elseif g:netrw_liststyle == s:WIDELIST + silent %s/\s\{2,}/\r/ge + elseif g:netrw_liststyle == s:TREELIST + silent %s/^| //e + silent! g/^ .*$/d + endif + " convert regexp into the more usual glob-style format + let regexp= substitute(regexp,'\*','.*','g') +" call Decho("regexp<".regexp.">") + exe "silent! v/".escape(regexp,'/')."/d" + let filelist= getline(1,line("$")) + q! + for filename in filelist + call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','','')) + endfor + unlet filelist + let @a = areg + let &ei = eikeep + endif + +" call Dret("s:NetrwMarkFileRegexp") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileSource: (invoked by ms) This function sources marked files {{{2 +" Uses the local marked file list. +fun! s:NetrwMarkFileSource(islocal) +" call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")") + let curbufnr= bufnr("%") + if exists("s:netrwmarkfilelist_{curbufnr}") + let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")} + let curdir = b:netrw_curdir + call s:NetrwUnmarkList(curbufnr,curdir) + for fname in netrwmarkfilelist + if a:islocal + if g:netrw_keepdir + let fname= s:ComposePath(curdir,fname) + endif + else + let fname= curdir.fname + endif + " the autocmds will handle sourcing both local and remote files +" call Decho("exe so ".fnameescape(fname)) + exe "so ".fnameescape(fname) + endfor + 2match none + endif +" call Dret("s:NetrwMarkFileSource") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileTag: (invoked by mT) This function applies g:netrw_ctags to marked files {{{2 +" Uses the global markfilelist +fun! s:NetrwMarkFileTag(islocal) +" call Dfunc("s:NetrwMarkFileTag(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curdir = b:netrw_curdir + let curbufnr = bufnr("%") + + if exists("s:netrwmarkfilelist") +" call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">") + let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")")) + call s:NetrwUnmarkAll() + + if a:islocal + if executable(g:netrw_ctags) +" call Decho("call system(".g:netrw_ctags." ".netrwmarkfilelist.")") + call system(g:netrw_ctags." ".netrwmarkfilelist) + else + call netrw#ErrorMsg(s:ERROR,"g:netrw_ctags<".g:netrw_ctags."> is not executable!",51) + endif + else + let cmd = s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist) + call netrw#NetrwObtain(a:islocal,"tags") + let curdir= b:netrw_curdir + 1split + e tags + let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','') +" call Decho("curdir<".curdir."> path<".path.">") + exe '%s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e' + wq! + endif + 2match none + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + endif + +" call Dret("s:NetrwMarkFileTag") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMarkFileTgt: (invoked by mt) This function sets up a marked file target {{{2 +" Sets up two variables, +" s:netrwmftgt : holds the target directory +" s:netrwmftgt_islocal : 0=target directory is remote +" 1=target directory is local +fun! s:NetrwMarkFileTgt(islocal) +" call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curdir = b:netrw_curdir + let hadtgt = exists("s:netrwmftgt") + if !exists("w:netrw_bannercnt") + let w:netrw_bannercnt= b:netrw_bannercnt + endif + + " set up target + if line(".") < w:netrw_bannercnt + " if cursor in banner region, use b:netrw_curdir for the target + let s:netrwmftgt= b:netrw_curdir +" call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">") + + else + " get word under cursor. + " * If directory, use it for the target. + " * If file, use b:netrw_curdir for the target + let curword= s:NetrwGetWord() + let tgtdir = s:ComposePath(curdir,curword) + if a:islocal && isdirectory(tgtdir) + let s:netrwmftgt = tgtdir +" call Decho("local isdir: s:netrwmftgt<".s:netrwmftgt.">") + elseif !a:islocal && tgtdir =~ '/$' + let s:netrwmftgt = tgtdir +" call Decho("remote isdir: s:netrwmftgt<".s:netrwmftgt.">") + else + let s:netrwmftgt = curdir +" call Decho("isfile: s:netrwmftgt<".s:netrwmftgt.">") + endif + endif + if a:islocal + " simplify the target (eg. /abc/def/../ghi -> /abc/ghi) + let s:netrwmftgt= simplify(s:netrwmftgt) +" call Decho("simplify: s:netrwmftgt<".s:netrwmftgt.">") + endif + if g:netrw_cygwin + let s:netrwmftgt= substitute(system("cygpath ".shellescape(s:netrwmftgt)),'\n$','','') + let s:netrwmftgt= substitute(s:netrwmftgt,'\n$','','') + endif + let s:netrwmftgt_islocal= a:islocal + + if g:netrw_fastbrowse <= 1 + call s:LocalBrowseShellCmdRefresh() + endif + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + if !hadtgt + norm! j + endif + +" call Dret("s:NetrwMarkFileTgt : netrwmftgt<".(exists("s:netrwmftgt")? s:netrwmftgt : "").">") +endfun + +" --------------------------------------------------------------------- +" s:NetrwOpenFile: query user for a filename and open it {{{2 +fun! s:NetrwOpenFile(islocal) +" call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")") + call inputsave() + let fname= input("Enter filename: ") + call inputrestore() + if fname !~ '[/\\]' + if exists("b:netrw_curdir") + if exists("g:netrw_quiet") + let netrw_quiet_keep = g:netrw_quiet + endif + let g:netrw_quiet = 1 + if b:netrw_curdir =~ '/$' + exe "e ".fnameescape(b:netrw_curdir.fname) + else + exe "e ".fnameescape(b:netrw_curdir."/".fname) + endif + if exists("netrw_quiet_keep") + let g:netrw_quiet= netrw_quiet_keep + else + unlet g:netrw_quiet + endif + endif + else + exe "e ".fnameescape(fname) + endif +" call Dret("s:NetrwOpenFile") +endfun + +" --------------------------------------------------------------------- +" s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2 +fun! s:NetrwUnmarkList(curbufnr,curdir) +" call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)") + + " remove all files in local marked-file list from global list + if exists("s:netrwmarkfilelist_{a:curbufnr}") + for mfile in s:netrwmarkfilelist_{a:curbufnr} + let dfile = s:ComposePath(a:curdir,mfile) " prepend directory to mfile + let idx = index(s:netrwmarkfilelist,dfile) " get index in list of dfile + call remove(s:netrwmarkfilelist,idx) " remove from global list + endfor + if s:netrwmarkfilelist == [] + unlet s:netrwmarkfilelist + endif + + " getting rid of the local marked-file lists is easy + unlet s:netrwmarkfilelist_{a:curbufnr} + endif + if exists("s:netrwmarkfilemtch_{a:curbufnr}") + unlet s:netrwmarkfilemtch_{a:curbufnr} + endif + 2match none +" call Dret("s:NetrwUnmarkList") +endfun + +" --------------------------------------------------------------------- +" s:NetrwUnmarkAll: remove the global marked file list and all local ones {{{2 +fun! s:NetrwUnmarkAll() +" call Dfunc("s:NetrwUnmarkAll()") + if exists("s:netrwmarkfilelist") + unlet s:netrwmarkfilelist + endif + silent call s:NetrwUnmarkAll2() + 2match none +" call Dret("s:NetrwUnmarkAll") +endfun + +" --------------------------------------------------------------------- +" s:NetrwUnmarkAll2: {{{2 +fun! s:NetrwUnmarkAll2() +" call Dfunc("s:NetrwUnmarkAll2()") + redir => netrwmarkfilelist_let + let + redir END + let netrwmarkfilelist_list= split(netrwmarkfilelist_let,'\n') " convert let string into a let list + call filter(netrwmarkfilelist_list,"v:val =~ '^s:netrwmarkfilelist_'") " retain only those vars that start as s:netrwmarkfilelist_ + call map(netrwmarkfilelist_list,"substitute(v:val,'\\s.*$','','')") " remove what the entries are equal to + for flist in netrwmarkfilelist_list + let curbufnr= substitute(flist,'s:netrwmarkfilelist_','','') + unlet s:netrwmarkfilelist_{curbufnr} + unlet s:netrwmarkfilemtch_{curbufnr} + endfor +" call Dret("s:NetrwUnmarkAll2") +endfun + +" --------------------------------------------------------------------- +" s:NetrwUnMarkFile: {{{2 +fun! s:NetrwUnMarkFile(islocal) +" call Dfunc("s:NetrwUnMarkFile(islocal=".a:islocal.")") + let svpos = netrw#NetrwSavePosn() + let curbufnr = bufnr("%") + + " unmark marked file list (although I expect s:NetrwUpload() + " to do it, I'm just making sure) + if exists("s:netrwmarkfilelist_{bufnr('%')}") +" call Decho("unlet'ing: s:netrwmarkfile[list|mtch]_".bufnr("%")) + unlet s:netrwmarkfilelist + unlet s:netrwmarkfilelist_{curbufnr} + unlet s:netrwmarkfilemtch_{curbufnr} + 2match none + endif + +" call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) +" call Dret("s:NetrwUnMarkFile") +endfun + +" --------------------------------------------------------------------- +" s:NetrwMenu: generates the menu for gvim and netrw {{{2 +fun! s:NetrwMenu(domenu) + + if !exists("g:NetrwMenuPriority") + let g:NetrwMenuPriority= 80 + endif + + if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu +" call Dfunc("NetrwMenu(domenu=".a:domenu.")") + + if !exists("s:netrw_menu_enabled") && a:domenu +" call Decho("initialize menu") + let s:netrw_menu_enabled= 1 + exe 'silent! menu '.g:NetrwMenuPriority.'.1 '.g:NetrwTopLvlMenu.'Help ' + exe 'silent! menu '.g:NetrwMenuPriority.'.5 '.g:NetrwTopLvlMenu.'-Sep1- :' + exe 'silent! menu '.g:NetrwMenuPriority.'.6 '.g:NetrwTopLvlMenu.'Go\ Up\ Directory- -' + exe 'silent! menu '.g:NetrwMenuPriority.'.7 '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewerx x' + exe 'silent! menu '.g:NetrwMenuPriority.'.8.1 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directorymb mb' + exe 'silent! menu '.g:NetrwMenuPriority.'.8.4 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)u u' + exe 'silent! menu '.g:NetrwMenuPriority.'.8.5 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)U U' + exe 'silent! menu '.g:NetrwMenuPriority.'.8.6 '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Listqb qb' + exe 'silent! menu '.g:NetrwMenuPriority.'.9.1 '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List'." \'" + exe 'silent! menu '.g:NetrwMenuPriority.'.9.2 '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ SequenceS S' + exe 'silent! menu '.g:NetrwMenuPriority.'.9.3 '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files'."gh gh" + exe 'silent! menu '.g:NetrwMenuPriority.'.9.4 '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing'." \" + exe 'silent! menu '.g:NetrwMenuPriority.'.9.5 '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options:NetrwSettings '.":NetrwSettings\" + exe 'silent! menu '.g:NetrwMenuPriority.'.10 '.g:NetrwTopLvlMenu.'Delete\ File/DirectoryD D' + exe 'silent! menu '.g:NetrwMenuPriority.'.11.1 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window '."\" + exe 'silent! menu '.g:NetrwMenuPriority.'.11.2 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directoryp p' + exe 'silent! menu '.g:NetrwMenuPriority.'.11.3 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ WindowP P' + exe 'silent! menu '.g:NetrwMenuPriority.'.11.4 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Windowo o' + exe 'silent! menu '.g:NetrwMenuPriority.'.11.5 '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Windowv v' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.1 '.g:NetrwTopLvlMenu.'Explore.Directory\ Name :Explore ' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.2 '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only):Explore\ */ :Explore */' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.2 '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs):Explore\ **/ :Explore **/' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.3 '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (curdir\ only):Explore\ *// :Explore *//' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.4 '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (+subdirs):Explore\ **// :Explore **//' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.4 '.g:NetrwTopLvlMenu.'Explore.Next\ Match:Nexplore :Nexplore' + exe 'silent! menu '.g:NetrwMenuPriority.'.12.4 '.g:NetrwTopLvlMenu.'Explore.Prev\ Match:Pexplore :Pexplore' + exe 'silent! menu '.g:NetrwMenuPriority.'.13 '.g:NetrwTopLvlMenu.'Make\ Subdirectoryd d' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.1 '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Filemf mf' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.2 '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexpmr mr' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.3 '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Controla a' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.4 '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Targetmc mc' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.5 '.g:NetrwTopLvlMenu.'Marked\ Files.DeleteD D' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.6 '.g:NetrwTopLvlMenu.'Marked\ Files.Diffmd md' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.7 '.g:NetrwTopLvlMenu.'Marked\ Files.Editme me' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.8 '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmdmx mx' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.9 '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Targetmm mm' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.ObtainO O' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Printmp mp' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.ReplaceR R' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Targetmt mt' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.TagmT mT' + exe 'silent! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompressmz mz' + exe 'silent! menu '.g:NetrwMenuPriority.'.15 '.g:NetrwTopLvlMenu.'Obtain\ FileO O' + exe 'silent! menu '.g:NetrwMenuPriority.'.16.1 '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)i i' + exe 'silent! menu '.g:NetrwMenuPriority.'.16.2 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Showa a' + exe 'silent! menu '.g:NetrwMenuPriority.'.16.3 '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order'."r r" + exe 'silent! menu '.g:NetrwMenuPriority.'.16.4 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)s s' + exe 'silent! menu '.g:NetrwMenuPriority.'.17 '.g:NetrwTopLvlMenu.'Rename\ File/DirectoryR R' + exe 'silent! menu '.g:NetrwMenuPriority.'.18 '.g:NetrwTopLvlMenu.'Set\ Current\ Directoryc c' + call s:NetrwBookmarkMenu() " provide some history! uses priorities 2,3, reserves 4, 8.2.x + let s:netrw_menucnt= 28 + + elseif !a:domenu + let s:netrwcnt = 0 + let curwin = winnr() + windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif + exe curwin."wincmd w" + + if s:netrwcnt <= 1 +" call Decho("clear menus") + exe 'silent! unmenu '.g:NetrwTopLvlMenu +" call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*') + silent! unlet s:netrw_menu_enabled + endif + endif +" call Dret("NetrwMenu") + endif + +endfun + +" --------------------------------------------------------------------- +" s:NetrwObtain: obtain file under cursor or from markfile list {{{2 +" Used by the O maps (as NetrwObtain()) +fun! s:NetrwObtain(islocal) +" call Dfunc("NetrwObtain(islocal=".a:islocal.")") + + if exists("s:netrwmarkfilelist_{bufnr('%')}") + let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://' + call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')}) + call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir) + else + call netrw#NetrwObtain(a:islocal,expand("")) + endif + +" call Dret("NetrwObtain") +endfun + +" --------------------------------------------------------------------- +" netrw#NetrwObtain: {{{2 +" netrw#NetrwObtain(islocal,fname[,tgtdirectory]) +" islocal=0 obtain from remote source +" =1 obtain from local source +" fname : a filename or a list of filenames +" tgtdir : optional place where files are to go (not present, uses getcwd()) +fun! netrw#NetrwObtain(islocal,fname,...) +" call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0) + " NetrwStatusLine support - for obtaining support + + if type(a:fname) == 1 + let fnamelist= [ a:fname ] + elseif type(a:fname) == 3 + let fnamelist= a:fname + else + call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62) +" call Dret("netrw#NetrwObtain") + return + endif +" call Decho("fnamelist<".string(fnamelist).">") + if a:0 > 0 + let tgtdir= a:1 + else + let tgtdir= getcwd() + endif +" call Decho("tgtdir<".tgtdir.">") + + if exists("b:netrw_islocal") && b:netrw_islocal + " obtain a file from local b:netrw_curdir to (local) tgtdir +" call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir) + if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir + let topath= s:ComposePath(tgtdir,"") + if (has("win32") || has("win95") || has("win64") || has("win16")) + " transfer files one at time +" call Decho("transfer files one at a time") + for fname in fnamelist +" call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")") + call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath)) + endfor + else + " transfer files with one command +" call Decho("transfer files with one command") + let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)")) +" call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")") + call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath)) + endif + elseif !exists("b:netrw_curdir") + call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36) + else + call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37) + endif + + else + " obtain files from remote b:netrw_curdir to local tgtdir +" call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir) + if type(a:fname) == 1 + call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname) + endif + call s:NetrwMethod(b:netrw_curdir) + + if b:netrw_method == 4 + " obtain file using scp +" call Decho("obtain via scp (method#4)") + if exists("g:netrw_port") && g:netrw_port != "" + let useport= " ".g:netrw_scpport." ".g:netrw_port + else + let useport= "" + endif + if b:netrw_fname =~ '/' + let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','') + else + let path= "" + endif + let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)')) +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)) + exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1) + + elseif b:netrw_method == 2 + " obtain file using ftp + .netrc +" call Decho("obtain via ftp+.netrc (method #2)") + call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars() + let tmpbufnr= bufnr("%") + setlocal ff=unix + if exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" + put =g:netrw_ftpmode +" call Decho("filter input: ".getline('$')) + endif + + if exists("b:netrw_fname") && b:netrw_fname != "" + call setline(line("$")+1,'cd "'.b:netrw_fname.'"') +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('$')) + endif + for fname in fnamelist + call setline(line("$")+1,'get "'.fname.'"') +" call Decho("filter input: ".getline('$')) + endfor + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) + else +" call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' + let debugkeep= &debug + setlocal debug=msg + call netrw#ErrorMsg(s:ERROR,getline(1),4) + let &debug= debugkeep + endif + + elseif b:netrw_method == 3 + " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc) +" call Decho("obtain via ftp+mipf (method #3)") + call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars() + let tmpbufnr= bufnr("%") + setlocal ff=unix + + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port +" call Decho("filter input: ".getline('$')) + else + put ='open '.g:netrw_machine +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + put =g:netrw_uid +" call Decho("filter input: ".getline('$')) + put ='\"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('$')) + else + put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftpmode") && g:netrw_ftpmode != "" + put =g:netrw_ftpmode +" call Decho("filter input: ".getline('$')) + endif + + if exists("b:netrw_fname") && b:netrw_fname != "" + call setline(line("$")+1,'cd "'.b:netrw_fname.'"') +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('$')) + endif + for fname in fnamelist + call setline(line("$")+1,'get "'.fname.'"') + endfor +" call Decho("filter input: ".getline('$')) + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password + norm! 1Gdd +" call Decho("executing: %!".g:netrw_ftp_cmd." -i -n") + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + if getline(1) !~ "^$" +" call Decho("error<".getline(1).">") + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,getline(1),5) + endif + endif + elseif !exists("b:netrw_method") || b:netrw_method < 0 +" call Dfunc("netrw#NetrwObtain : unsupported method") + return + endif + + " restore status line + if type(a:fname) == 1 && exists("s:netrw_users_stl") + call s:SetupNetrwStatusLine(s:netrw_users_stl) + endif + + endif + + " cleanup + if exists("tmpbufnr") + if bufnr("%") != tmpbufnr + exe tmpbufnr."bw!" + else + q! + endif + endif + +" call Dret("netrw#NetrwObtain") +endfun + +" --------------------------------------------------------------------- +" s:NetrwPrevWinOpen: open file/directory in previous window. {{{2 +" If there's only one window, then the window will first be split. +" Returns: +" choice = 0 : didn't have to choose +" choice = 1 : saved modified file in window first +" choice = 2 : didn't save modified file, opened window +" choice = 3 : cancel open +fun! s:NetrwPrevWinOpen(islocal) +" call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")") + + " grab a copy of the b:netrw_curdir to pass it along to newly split windows + let curdir = b:netrw_curdir + + " get last window number and the word currently under the cursor + let lastwinnr = winnr("$") + let curword = s:NetrwGetWord() + let choice = 0 +" call Decho("lastwinnr=".lastwinnr." curword<".curword.">") + + let didsplit = 0 + if lastwinnr == 1 + " if only one window, open a new one first +" call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")") + if g:netrw_preview +" call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s") + exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s" + else +" call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s") + exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" + endif + let didsplit = 1 + + else + call s:SaveBufVars() +" call Decho("wincmd p") + wincmd p + call s:RestoreBufVars() + " if the previous window's buffer has been changed (is modified), + " and it doesn't appear in any other extant window, then ask the + " user if s/he wants to abandon modifications therein. + let bnr = winbufnr(0) + let bnrcnt = 0 + if &mod +" call Decho("detected: prev window's buffer has been modified: bnr=".bnr." winnr#".winnr()) + let eikeep= &ei + set ei=all + windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif + exe bnr."wincmd p" + let &ei= eikeep +" call Decho("bnr=".bnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr#".winnr()) + if bnrcnt == 1 + let bufname= bufname(winbufnr(winnr())) + let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel") +" call Decho("bufname<".bufname."> choice=".choice." winnr#".winnr()) + + if choice == 1 + " Yes -- write file & then browse + let v:errmsg= "" + silent w + if v:errmsg != "" + call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30) + if didsplit + q + else + wincmd p + endif +" call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">") + return choice + endif + + elseif choice == 2 + " No -- don't worry about changed file, just browse anyway + setlocal nomod + call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31) + wincmd p + + else + " Cancel -- don't do this + if didsplit + q + else + wincmd p + endif +" call Dret("NetrwPrevWinOpen ".choice." : cancelled") + return choice + endif + endif + endif + endif + + " restore b:netrw_curdir (window split/enew may have lost it) + let b:netrw_curdir= curdir + if a:islocal < 2 + if a:islocal + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(a:islocal,curword)) + else + call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword)) + endif + endif +" call Dret("NetrwPrevWinOpen ".choice) + return choice +endfun + +" --------------------------------------------------------------------- +" s:NetrwUpload: load fname to tgt (used by NetrwMarkFileCopy()) {{{2 +" Always assumed to be local -> remote +" call s:NetrwUpload(filename, target) +" call s:NetrwUpload(filename, target, fromdirectory) +fun! s:NetrwUpload(fname,tgt,...) +" call Dfunc("s:NetrwUpload(fname<".((type(a:fname) == 1)? a:fname : string(a:fname))."> tgt<".a:tgt.">) a:0=".a:0) + + if a:tgt =~ '^\a\+://' + let tgtdir= substitute(a:tgt,'^\a\+://[^/]\+/\(.\{-}\)$','\1','') + else + let tgtdir= substitute(a:tgt,'^\(.*\)/[^/]*$','\1','') + endif +" call Decho("tgtdir<".tgtdir.">") + + if a:0 > 0 + let fromdir= a:1 + else + let fromdir= getcwd() + endif +" call Decho("fromdir<".fromdir.">") + + if type(a:fname) == 1 + " handle uploading a single file using NetWrite +" call Decho("handle uploading a single file via NetWrite") + 1split +" call Decho("exe e ".fnameescape(a:fname)) + exe "e ".fnameescape(a:fname) +" call Decho("now locally editing<".expand("%").">, has ".line("$")." lines") + if a:tgt =~ '/$' + let wfname= substitute(a:fname,'^.*/','','') +" call Decho("exe w! ".fnameescape(wfname)) + exe "w! ".fnameescape(a:tgt.wfname) + else +" call Decho("writing local->remote: exe w ".fnameescape(a:tgt)) + exe "w ".fnameescape(a:tgt) +" call Decho("done writing local->remote") + endif + q! + + elseif type(a:fname) == 3 + " handle uploading a list of files via scp +" call Decho("handle uploading a list of files via scp") + let curdir= getcwd() + if a:tgt =~ '^scp:' + exe "keepjumps silent lcd ".fnameescape(fromdir) + let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')}) + let args = join(map(filelist,"shellescape(v:val, 1)")) + if exists("g:netrw_port") && g:netrw_port != "" + let useport= " ".g:netrw_scpport." ".g:netrw_port + else + let useport= "" + endif + let machine = substitute(a:tgt,'^scp://\([^/:]\+\).*$','\1','') + let tgt = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','') +" call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)) + exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1) + exe "keepjumps silent lcd ".fnameescape(curdir) + + elseif a:tgt =~ '^ftp:' + call s:NetrwMethod(a:tgt) + + if b:netrw_method == 2 + " handle uploading a list of files via ftp+.netrc + let netrw_fname = b:netrw_fname + silent keepjumps new +" call Decho("filter input window#".winnr()) + + put =g:netrw_ftpmode +" call Decho("filter input: ".getline('$')) + + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('$')) + endif + + call setline(line("$")+1,'lcd "'.fromdir.'"') +" call Decho("filter input: ".getline('$')) + + call setline(line("$")+1,'cd "'.tgtdir.'"') +" call Decho("filter input: ".getline('$')) + + for fname in a:fname + call setline(line("$")+1,'put "'.fname.'"') +" call Decho("filter input: ".getline('$')) + endfor + + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) + else +" call Decho("filter input window#".winnr()) +" call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + silent g/Local directory now/d + if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' + call netrw#ErrorMsg(s:ERROR,getline(1),14) + else + bw!|q + endif + + elseif b:netrw_method == 3 + " upload with ftp + machine, id, passwd, and fname (ie. no .netrc) + let netrw_fname= b:netrw_fname + call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars() + let tmpbufnr= bufnr("%") + setlocal ff=unix + + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port +" call Decho("filter input: ".getline('$')) + else + put ='open '.g:netrw_machine +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + put =g:netrw_uid +" call Decho("filter input: ".getline('$')) + call setline(line("$")+1,'"'.s:netrw_passwd.'"') +" call Decho("filter input: ".getline('$')) + else + put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' +" call Decho("filter input: ".getline('$')) + endif + + call setline(line("$")+1,'lcd "'.fromdir.'"') +" call Decho("filter input: ".getline('$')) + + if exists("b:netrw_fname") && b:netrw_fname != "" + call setline(line("$")+1,'cd "'.b:netrw_fname.'"') +" call Decho("filter input: ".getline('$')) + endif + + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('$')) + endif + + for fname in a:fname + call setline(line("$")+1,'put "'.fname.'"') +" call Decho("filter input: ".getline('$')) + endfor + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password + norm! 1Gdd +" call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n") + exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n" + " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar) + silent g/Local directory now/d + if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying ' + let debugkeep= &debug + setlocal debug=msg + call netrw#ErrorMsg(s:ERROR,getline(1),15) + let &debug = debugkeep + let mod = 1 + else + bw!|q + endif + elseif !exists("b:netrw_method") || b:netrw_method < 0 +" call Dfunc("netrw#NetrwUpload : unsupported method") + return + endif + else + call netrw#ErrorMsg(s:ERROR,"can't obtain files with protocol from<".a:tgt.">",63) + endif + endif + +" call Dret("s:NetrwUpload") +endfun + +" --------------------------------------------------------------------- +" s:NetrwPreview: {{{2 +fun! s:NetrwPreview(path) range +" call Dfunc("NetrwPreview(path<".a:path.">)") + call s:NetrwOptionSave("s:") + call s:NetrwSafeOptions() + if has("quickfix") + if !isdirectory(a:path) + exe (g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path) + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38) + endif + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39) + endif + call s:NetrwOptionRestore("s:") +" call Dret("NetrwPreview") +endfun + +" --------------------------------------------------------------------- +" s:NetrwRefresh: {{{2 +fun! s:NetrwRefresh(islocal,dirname) +" call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction) + " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first. + " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here. + " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself. + setlocal ma noro +" call Decho("setlocal ma noro") +" call Decho("clear buffer<".expand("%")."> with :%d") + %d + if a:islocal + call netrw#LocalBrowseCheck(a:dirname) + else + call s:NetrwBrowse(a:islocal,a:dirname) + endif + call netrw#NetrwRestorePosn() + + " restore file marks + if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != "" +" call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/") + exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/" + else +" call Decho("2match none") + 2match none + endif + +" redraw! +" call Dret("NetrwRefresh") +endfun + +" --------------------------------------------------------------------- +" s:NetrwRefreshDir: refreshes a directory by name {{{2 +" Called by NetrwMarkFileCopy() +" Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh() +fun! s:NetrwRefreshDir(islocal,dirname) +" call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) fastbrowse=".g:netrw_fastbrowse) + if g:netrw_fastbrowse == 0 + " slowest mode (keep buffers refreshed, local or remote) +" call Decho("slowest mode: keep buffers refreshed, local or remote") + let tgtwin= bufwinnr(a:dirname) +" call Decho("tgtwin= bufwinnr(".a:dirname.")=".tgtwin) + + if tgtwin > 0 + " tgtwin is being displayed, so refresh it + let curwin= winnr() +" call Decho("refresh tgtwin#".tgtwin." (curwin#".curwin.")") + exe tgtwin."wincmd w" + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + exe curwin."wincmd w" + + elseif bufnr(a:dirname) > 0 + let bn= bufnr(a:dirname) +" call Decho("bd bufnr(".a:dirname.")=".bn) + exe "silent bd ".bn + endif + + elseif g:netrw_fastbrowse <= 1 +" call Decho("medium-speed mode: refresh local buffers only") + call s:LocalBrowseShellCmdRefresh() + endif +" call Dret("s:NetrwRefreshDir") +endfun + +" --------------------------------------------------------------------- +" s:NetrwSetSort: sets up the sort based on the g:netrw_sort_sequence {{{2 +" What this function does is to compute a priority for the patterns +" in the g:netrw_sort_sequence. It applies a substitute to any +" "files" that satisfy each pattern, putting the priority / in +" front. An "*" pattern handles the default priority. +fun! s:NetrwSetSort() +" call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt) + if w:netrw_liststyle == s:LONGLIST + let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge') + else + let seqlist = g:netrw_sort_sequence + endif + " sanity check -- insure that * appears somewhere + if seqlist == "" + let seqlist= '*' + elseif seqlist !~ '\*' + let seqlist= seqlist.',*' + endif + let priority = 1 + while seqlist != "" + if seqlist =~ ',' + let seq = substitute(seqlist,',.*$','','e') + let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e') + else + let seq = seqlist + let seqlist = "" + endif + let sepchr= "\" + if priority < 10 + let spriority= "00".priority.sepchr + elseif priority < 100 + let spriority= "0".priority.sepchr + else + let spriority= priority.sepchr + endif +" call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">") + + " sanity check + if w:netrw_bannercnt > line("$") + " apparently no files were left after a Hiding pattern was used +" call Dret("SetSort : no files left after hiding") + return + endif + if seq == '*' + let starpriority= spriority + else + exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/' + " sometimes multiple sorting patterns will match the same file or directory. + " The following substitute is intended to remove the excess matches. + exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.sepchr.'\d\{3}\//s/^\d\{3}'.sepchr.'\(\d\{3}\/\).\@=/\1/e' + endif + let priority = priority + 1 + endwhile + if exists("starpriority") + exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.sepchr.'/s/^/'.starpriority.'/' + endif + + " Following line associated with priority -- items that satisfy a priority + " pattern get prefixed by ###/ which permits easy sorting by priority. + " Sometimes files can satisfy multiple priority patterns -- only the latest + " priority pattern needs to be retained. So, at this point, these excess + " priority prefixes need to be removed, but not directories that happen to + " be just digits themselves. + exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.sepchr.'\)\%(\d\{3}'.sepchr.'\)\+\ze./\1/e' + +" call Dret("SetSort") +endfun + +" ===================================================================== +" s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2 +fun! s:NetrwSortStyle(islocal) +" call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">") + call s:NetrwSaveWordPosn() + let svpos= netrw#NetrwSavePosn() + + let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name' + norm! 0 + call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) + call netrw#NetrwRestorePosn(svpos) + +" call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">") +endfun + +" --------------------------------------------------------------------- +" s:NetrwSplit: mode {{{2 +" =0 : net and o +" =1 : net and t +" =2 : net and v +" =3 : local and o +" =4 : local and t +" =5 : local and v +fun! s:NetrwSplit(mode) +" call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv) + + call s:SaveWinVars() + + if a:mode == 0 + " remote and o +" call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s") + exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" + let s:didsplit= 1 + call s:RestoreWinVars() + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) + unlet s:didsplit + + elseif a:mode == 1 + " remote and t + let newdir = s:NetrwBrowseChgDir(0,s:NetrwGetWord()) +" call Decho("tabnew") + tabnew + let s:didsplit= 1 + call s:RestoreWinVars() + call s:NetrwBrowse(0,newdir) + unlet s:didsplit + + elseif a:mode == 2 + " remote and v +" call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v") + exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v" + let s:didsplit= 1 + call s:RestoreWinVars() + call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord())) + unlet s:didsplit + + elseif a:mode == 3 + " local and o +" call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s") + exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s" + let s:didsplit= 1 + call s:RestoreWinVars() + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) + unlet s:didsplit + + elseif a:mode == 4 + " local and t + let netrw_curdir= b:netrw_curdir + let cursorword = s:NetrwGetWord() +" call Decho("tabnew") + tabnew + let b:netrw_curdir= netrw_curdir + let s:didsplit= 1 + call s:RestoreWinVars() + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword)) + unlet s:didsplit + + elseif a:mode == 5 + " local and v +" call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v") + exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v" + let s:didsplit= 1 + call s:RestoreWinVars() + call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord())) + unlet s:didsplit + + else + call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45) + endif + +" call Dret("s:NetrwSplit") +endfun + +" --------------------------------------------------------------------- +" NetrwStatusLine: {{{2 +fun! NetrwStatusLine() + +" vvv NetrwStatusLine() debugging vvv +" let g:stlmsg="" +" if !exists("w:netrw_explore_bufnr") +" let g:stlmsg="!X" +" elseif w:netrw_explore_bufnr != bufnr("%") +" let g:stlmsg="explore_bufnr!=".bufnr("%") +" endif +" if !exists("w:netrw_explore_line") +" let g:stlmsg=" !X" +" elseif w:netrw_explore_line != line(".") +" let g:stlmsg=" explore_line!={line(.)<".line(".").">" +" endif +" if !exists("w:netrw_explore_list") +" let g:stlmsg=" !X" +" endif +" ^^^ NetrwStatusLine() debugging ^^^ + + if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list") + " restore user's status line + let &stl = s:netrw_users_stl + let &laststatus = s:netrw_users_ls + if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif + if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif + return "" + else + return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen + endif +endfun + +" --------------------------------------------------------------------- +" s:NetrwTreeDir: determine tree directory given current cursor position {{{2 +" (full path directory with trailing slash returned) +fun! s:NetrwTreeDir() +" call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">") + + let treedir= b:netrw_curdir +" call Decho("set initial treedir<".treedir.">") + let s:treecurpos= netrw#NetrwSavePosn() + + if w:netrw_liststyle == s:TREELIST +" call Decho("w:netrrw_liststyle is TREELIST:") +" call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">") + if getline('.') =~ '/$' + let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e') + else + let treedir= "" + endif + +" call Decho("treedir<".treedir.">") + + " detect user attempting to close treeroot + if getline('.') !~ '|' && getline('.') != '..' +" call Decho("user attempted to close treeroot") + " now force a refresh +" call Decho("clear buffer<".expand("%")."> with :%d") + keepjumps %d +" call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") + return b:netrw_curdir + endif + + " elide all non-depth information + let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e') +" call Decho("depth<".depth."> 1st subst") + + " elide first depth + let depth = substitute(depth,'^| ','','') +" call Decho("depth<".depth."> 2nd subst") + + " construct treedir by searching backwards at correct depth +" call Decho("constructing treedir<".treedir."> depth<".depth.">") + while depth != "" && search('^'.depth.'[^|].\{-}/$','bW') + let dirname= substitute(getline('.'),'^\(| \)*','','e') + let treedir= dirname.treedir + let depth = substitute(depth,'^| ','','') +" call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">") + endwhile + if w:netrw_treetop =~ '/$' + let treedir= w:netrw_treetop.treedir + else + let treedir= w:netrw_treetop.'/'.treedir + endif +" call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line(".")) + endif + let treedir= substitute(treedir,'//$','/','') + +" " now force a refresh +"" call DECHO("clear buffer<".expand("%")."> with :%d") +" setlocal ma noro +" keepjumps %d + +" call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">") + return treedir +endfun + +" --------------------------------------------------------------------- +" s:NetrwTreeDisplay: recursive tree display {{{2 +fun! s:NetrwTreeDisplay(dir,depth) +" call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)") + + " insure that there are no folds + setlocal nofen + + " install ../ and shortdir + if a:depth == "" + call setline(line("$")+1,'../') +" call Decho("setline#".line("$")." ../ (depth is zero)") + endif + if a:dir =~ '^\a\+://' + if a:dir == w:netrw_treetop + let shortdir= a:dir + else + let shortdir= substitute(a:dir,'^.*/\([^/]\+\)/$','\1/','e') + endif + call setline(line("$")+1,a:depth.shortdir) + else + let shortdir= substitute(a:dir,'^.*/','','e') + call setline(line("$")+1,a:depth.shortdir.'/') + endif +" call Decho("setline#".line("$")." shortdir<".a:depth.shortdir.">") + + " append a / to dir if its missing one + let dir= a:dir + if dir !~ '/$' + let dir= dir.'/' + endif + + " display subtrees (if any) + let depth= "| ".a:depth + +" call Decho("display subtrees with depth<".depth."> and current leaves") + for entry in w:netrw_treedict[a:dir] + let direntry= substitute(dir.entry,'/$','','e') +" call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">") + if entry =~ '/$' && has_key(w:netrw_treedict,direntry) +" call Decho("<".direntry."> is a key in treedict - display subtree for it") + call s:NetrwTreeDisplay(direntry,depth) + elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/') +" call Decho("<".direntry."/> is a key in treedict - display subtree for it") + call s:NetrwTreeDisplay(direntry.'/',depth) + else +" call Decho("<".entry."> is not a key in treedict (no subtree)") + call setline(line("$")+1,depth.entry) + endif + endfor +" call Dret("NetrwTreeDisplay") +endfun + +" --------------------------------------------------------------------- +" s:NetrwTreeListing: displays tree listing from treetop on down, using NetrwTreeDisplay() {{{2 +fun! s:NetrwTreeListing(dirname) + if w:netrw_liststyle == s:TREELIST +" call Dfunc("NetrwTreeListing() bufname<".expand("%").">") +" call Decho("curdir<".a:dirname.">") +" call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exit")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit")) + + " update the treetop +" call Decho("update the treetop") + if !exists("w:netrw_treetop") + let w:netrw_treetop= a:dirname +" call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)") + elseif (w:netrw_treetop =~ ('^'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop) + let w:netrw_treetop= a:dirname +" call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)") + endif + + " insure that we have at least an empty treedict + if !exists("w:netrw_treedict") + let w:netrw_treedict= {} + endif + + " update the directory listing for the current directory +" call Decho("updating dictionary with ".a:dirname.":[..directory listing..]") +" call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$")) + exe "silent! keepjumps ".w:netrw_bannercnt.',$g@^\.\.\=/$@d' + let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$")) +" call Decho("w:treedict[".a:dirname."]= ".w:netrw_treedict[a:dirname]) + exe "silent! keepjumps ".w:netrw_bannercnt.",$d" + + " if past banner, record word + if exists("w:netrw_bannercnt") && line(".") > w:netrw_bannercnt + let fname= expand("") + else + let fname= "" + endif +" call Decho("fname<".fname.">") + + " display from treetop on down + call s:NetrwTreeDisplay(w:netrw_treetop,"") + +" call Dret("NetrwTreeListing : bufname<".expand("%").">") + endif +endfun + +" --------------------------------------------------------------------- +" s:NetrwWideListing: {{{2 +fun! s:NetrwWideListing() + + if w:netrw_liststyle == s:WIDELIST +" call Dfunc("NetrwWideListing() w:netrw_liststyle=".w:netrw_liststyle.' fo='.&fo.' l:fo='.&l:fo) + " look for longest filename (cpf=characters per filename) + " cpf: characters per file + " fpl: files per line + " fpc: files per column + setlocal ma noro +" call Decho("setlocal ma noro") + let b:netrw_cpf= 0 + if line("$") >= w:netrw_bannercnt + exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif' + else +" call Dret("NetrwWideListing") + return + endif +" call Decho("max file strlen+1=".b:netrw_cpf) + let b:netrw_cpf= b:netrw_cpf + 1 + + " determine qty files per line (fpl) + let w:netrw_fpl= winwidth(0)/b:netrw_cpf + if w:netrw_fpl <= 0 + let w:netrw_fpl= 1 + endif +" call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl) + + " make wide display + exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/' + let fpc = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl + let newcolstart = w:netrw_bannercnt + fpc + let newcolend = newcolstart + fpc - 1 +" call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]") + silent! let keepregstar = @* + while line("$") >= newcolstart + if newcolend > line("$") | let newcolend= line("$") | endif + let newcolqty= newcolend - newcolstart + exe newcolstart + if newcolqty == 0 + exe "silent keepjumps norm! 0\$hx".w:netrw_bannercnt."G$p" + else + exe "silent keepjumps norm! 0\".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p' + endif + exe "silent keepjumps ".newcolstart.','.newcolend.'d' + exe 'silent keepjumps '.w:netrw_bannercnt + endwhile + silent! let @*= keepregstar + exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e' + setlocal noma nomod ro +" call Dret("NetrwWideListing") + endif + +endfun + +" --------------------------------------------------------------------- +" s:PerformListing: {{{2 +fun! s:PerformListing(islocal) +" call Dfunc("s:PerformListing(islocal=".a:islocal.") buf(%)=".bufnr("%")."<".bufname("%").">") + + call s:NetrwSafeOptions() + setlocal noro ma +" call Decho("setlocal noro ma") + +" if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1 " Decho +" call Decho("(netrw) Processing your browsing request...") +" endif " Decho + +" call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a')) + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") + " force a refresh for tree listings +" call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d") + keepjumps %d + endif + + " save current directory on directory history list + call s:NetrwBookHistHandler(3,b:netrw_curdir) + + " Set up the banner {{{3 +" call Decho("set up banner") + keepjumps put ='\" ============================================================================' + keepjumps put ='\" Netrw Directory Listing (netrw '.g:loaded_netrw.')' + keepjumps put ='\" '.b:netrw_curdir + keepjumps 1d + let w:netrw_bannercnt= 3 + exe "keepjumps ".w:netrw_bannercnt + + let sortby= g:netrw_sort_by + if g:netrw_sort_direction =~ "^r" + let sortby= sortby." reversed" + endif + + " Sorted by... {{{3 +" call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">") + if g:netrw_sort_by =~ "^n" +" call Decho("directories will be sorted by name") + " sorted by name + keepjumps put ='\" Sorted by '.sortby + keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence + let w:netrw_bannercnt= w:netrw_bannercnt + 2 + else +" call Decho("directories will be sorted by size or time") + " sorted by size or date + keepjumps put ='\" Sorted by '.sortby + let w:netrw_bannercnt= w:netrw_bannercnt + 1 + endif + exe "keepjumps ".w:netrw_bannercnt + + " show copy/move target, if any + if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") +" call Decho("show copy/move target<".s:netrwmftgt.">") + keepjumps put ='' + if s:netrwmftgt_islocal + call setline(line("."),'" Copy/Move Tgt: '.s:netrwmftgt.' (local)') + else + call setline(line("."),'" Copy/Move Tgt: '.s:netrwmftgt.' (remote)') + endif + let w:netrw_bannercnt= w:netrw_bannercnt + 1 + else +" call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt") + endif + exe "keepjumps ".w:netrw_bannercnt + + " Hiding... -or- Showing... {{{3 +" call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)") + if g:netrw_list_hide != "" && g:netrw_hide + if g:netrw_hide == 1 + keepjumps put ='\" Hiding: '.g:netrw_list_hide + else + keepjumps put ='\" Showing: '.g:netrw_list_hide + endif + let w:netrw_bannercnt= w:netrw_bannercnt + 1 + endif + exe "keepjumps ".w:netrw_bannercnt + keepjumps put ='\" Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:exec' + keepjumps put ='\" ============================================================================' + let w:netrw_bannercnt= w:netrw_bannercnt + 2 + + " bannercnt should index the line just after the banner + let w:netrw_bannercnt= w:netrw_bannercnt + 1 + exe "keepjumps ".w:netrw_bannercnt +" call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$")) + + " set up syntax highlighting {{{3 +" call Decho("set up syntax highlighting") + if has("syntax") + setlocal ft=netrw + if !exists("g:syntax_on") || !g:syntax_on + setlocal ft= + endif + endif + + " get list of files +" call Decho("Get list of files - islocal=".a:islocal) + if a:islocal + call s:LocalListing() + else " remote + call s:NetrwRemoteListing() + endif +" call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)") + + " manipulate the directory listing (hide, sort) {{{3 + if line("$") >= w:netrw_bannercnt +" call Decho("manipulate directory listing (hide)") +" call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">") + if g:netrw_hide && g:netrw_list_hide != "" + call s:NetrwListHide() + endif + if line("$") >= w:netrw_bannercnt +" call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">") + + if g:netrw_sort_by =~ "^n" + " sort by name + call s:NetrwSetSort() + + if w:netrw_bannercnt < line("$") +" call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")") + if g:netrw_sort_direction =~ 'n' + " normal direction sorting + exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options + else + " reverse direction sorting + exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options + endif + endif + " remove priority pattern prefix +" call Decho("remove priority pattern prefix") + let sepchr= "\" + exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.sepchr.'//e' + + elseif a:islocal + if w:netrw_bannercnt < line("$") +" call Decho("g:netrw_sort_direction=".g:netrw_sort_direction) + if g:netrw_sort_direction =~ 'n' +" call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort') + exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options + else +" call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!') + exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options + endif + endif + exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e' + endif + + elseif g:netrw_sort_direction =~ 'r' +" call Decho('reverse the sorted listing') + exe 'silent keepjumps '.w:netrw_bannercnt.'g/^/m '.w:netrw_bannercnt + endif + endif + + " convert to wide/tree listing {{{3 +" call Decho("modify display if wide/tree listing style") + call s:NetrwWideListing() + call s:NetrwTreeListing(b:netrw_curdir) + + if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt + " place cursor on the top-left corner of the file listing +" call Decho("place cursor on top-left corner of file listing") + exe 'silent keepjumps '.w:netrw_bannercnt + norm! 0 + endif + + " record previous current directory + let w:netrw_prvdir= b:netrw_curdir +" call Decho("record netrw_prvdir<".w:netrw_prvdir.">") + + " save certain window-oriented variables into buffer-oriented variables {{{3 + call s:SetBufWinVars() + call s:NetrwOptionRestore("w:") + + " set display to netrw display settings +" call Decho("set display to netrw display settings (noma nomod etc)") + setlocal noma nomod nonu nobl nowrap ro + if exists("s:treecurpos") + + call netrw#NetrwRestorePosn(s:treecurpos) + unlet s:treecurpos + endif + +" call Dret("s:PerformListing : curpos<".string(getpos(".")).">") +endfun + +" --------------------------------------------------------------------- +" s:SetupNetrwStatusLine: {{{2 +fun! s:SetupNetrwStatusLine(statline) +" call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)") + + if !exists("s:netrw_setup_statline") + let s:netrw_setup_statline= 1 +" call Decho("do first-time status line setup") + + if !exists("s:netrw_users_stl") + let s:netrw_users_stl= &stl + endif + if !exists("s:netrw_users_ls") + let s:netrw_users_ls= &laststatus + endif + + " set up User9 highlighting as needed + let keepa= @a + redir @a + try + hi User9 + catch /^Vim\%((\a\+)\)\=:E411/ + if &bg == "dark" + hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue + else + hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue + endif + endtry + redir END + let @a= keepa + endif + + " set up status line (may use User9 highlighting) + " insure that windows have a statusline + " make sure statusline is displayed + let &stl=a:statline + setlocal laststatus=2 +" call Decho("stl=".&stl) + redraw + +" call Dret("SetupNetrwStatusLine : stl=".&stl) +endfun + +" --------------------------------------------------------------------- +" Remote Directory Browsing Support: {{{1 +" =========================================== + +" --------------------------------------------------------------------- +" s:NetrwRemoteListing: {{{2 +fun! s:NetrwRemoteListing() +" call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)") + + call s:RemotePathAnalysis(b:netrw_curdir) + + " sanity check: + if exists("b:netrw_method") && b:netrw_method =~ '[235]' +" call Decho("b:netrw_method=".b:netrw_method) + if !executable("ftp") + if !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18) + endif + call s:NetrwOptionRestore("w:") +" call Dret("s:NetrwRemoteListing") + return + endif + + elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == '' + if !exists("g:netrw_quiet") + if g:netrw_list_cmd == "" + call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47) + else + call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19) + endif + endif + + call s:NetrwOptionRestore("w:") +" call Dret("s:NetrwRemoteListing") + return + endif " (remote handling sanity check) + + if exists("b:netrw_method") +" call Decho("setting w:netrw_method<".b:netrw_method.">") + let w:netrw_method= b:netrw_method + endif + + if s:method == "ftp" + " use ftp to get remote file listing +" call Decho("use ftp to get remote file listing") + let s:method = "ftp" + let listcmd = g:netrw_ftp_list_cmd + if g:netrw_sort_by =~ '^t' + let listcmd= g:netrw_ftp_timelist_cmd + elseif g:netrw_sort_by =~ '^s' + let listcmd= g:netrw_ftp_sizelist_cmd + endif +" call Decho("listcmd<".listcmd."> (using g:netrw_ftp_list_cmd)") + call s:NetrwRemoteFtpCmd(s:path,listcmd) +" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))' + + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST + " shorten the listing +" call Decho("generate short listing") + exe "keepjumps ".w:netrw_bannercnt + + " cleanup + if g:netrw_ftp_browse_reject != "" + exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d" + endif + silent! keepjumps %s/\r$//e + + " if there's no ../ listed, then put ./ and ../ in + let line1= line(".") + exe "keepjumps ".w:netrw_bannercnt + let line2= search('^\.\.\/\%(\s\|$\)','cnW') + if line2 == 0 +" call Decho("netrw is putting ./ and ../ into listing") + keepjumps put='../' + keepjumps put='./' + endif + exe "keepjumps ".line1 + keepjumps norm! 0 + +" call Decho("line1=".line1." line2=".line2." line(.)=".line(".")) + if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup +" call Decho("M$ ftp cleanup") + exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(\|\d\+\)\s\+//' + else " normal ftp cleanup +" call Decho("normal ftp cleanup") + exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e' + exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e' + exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e' + endif + endif + + else + " use ssh to get remote file listing {{{3 +" call Decho("use ssh to get remote file listing: s:path<".s:path.">") + let listcmd= s:MakeSshCmd(g:netrw_list_cmd) +" call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)") + if g:netrw_scp_cmd =~ '^pscp' +" call Decho("1: exe silent r! ".shellescape(listcmd.s:path, 1)) + exe "silent r! ".listcmd.shellescape(s:path, 1) + " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like + g/^Listing directory/d + g/^d[-rwx][-rwx][-rwx]/s+$+/+e + silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e + if g:netrw_liststyle != s:LONGLIST + g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e + endif + else + if s:path == "" +" call Decho("2: exe silent r! ".listcmd) + exe "silent r! ".listcmd + else +" call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1)) + exe "silent r! ".listcmd.' '.shellescape(s:path,1) +" call Decho("listcmd<".listcmd."> path<".s:path.">") + endif + endif + + " cleanup + if g:netrw_ftp_browse_reject != "" +" call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d") + exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d" + endif + endif + + if w:netrw_liststyle == s:LONGLIST + " do a long listing; these substitutions need to be done prior to sorting {{{3 +" call Decho("fix long listing:") + + if s:method == "ftp" + " cleanup + exe "keepjumps ".w:netrw_bannercnt + while getline('.') =~ g:netrw_ftp_browse_reject + keepjumps d + endwhile + " if there's no ../ listed, then put ./ and ../ in + let line1= line(".") + keepjumps 1 + silent keepjumps call search('^\.\.\/\%(\s\|$\)','W') + let line2= line(".") + if line2 == 0 + exe 'keepjumps '.w:netrw_bannercnt."put='./'" + if b:netrw_curdir != '/' + exe 'keepjumps '.w:netrw_bannercnt."put='../'" + endif + endif + exe "keepjumps ".line1 + keepjumps norm! 0 + endif + + if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup +" call Decho("M$ ftp site listing cleanup") + exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/' + elseif exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") +" call Decho("normal ftp site listing cleanup: bannercnt=".w:netrw_bannercnt." line($)=".line("$")) + exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e' + exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e' + exe 'silent keepjumps '.w:netrw_bannercnt + endif + endif + +" if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho +" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))' +" endif " Decho +" call Dret("s:NetrwRemoteListing") +endfun + +" --------------------------------------------------------------------- +" s:NetrwRemoteRm: remove/delete a remote file or directory {{{2 +fun! s:NetrwRemoteRm(usrhost,path) range +" call Dfunc("s:NetrwRemoteRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol(".")) +" call Decho("firstline=".a:firstline." lastline=".a:lastline) + let svpos= netrw#NetrwSavePosn() + + let all= 0 + if exists("s:netrwmarkfilelist_{bufnr('%')}") + " remove all marked files +" call Decho("remove all marked files with bufnr#".bufnr("%")) + for fname in s:netrwmarkfilelist_{bufnr("%")} + let ok= s:NetrwRemoteRmFile(a:path,fname,all) + if ok =~ 'q\%[uit]' + break + elseif ok =~ 'a\%[ll]' + let all= 1 + endif + endfor + call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir) + + else + " remove files specified by range +" call Decho("remove files specified by range") + + " preparation for removing multiple files/directories + let ctr= a:firstline + + " remove multiple files and directories + while ctr <= a:lastline + exe ctr + let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all) + if ok =~ 'q\%[uit]' + break + elseif ok =~ 'a\%[ll]' + let all= 1 + endif + let ctr= ctr + 1 + endwhile + endif + + " refresh the (remote) directory listing +" call Decho("refresh remote directory listing") + call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) + call netrw#NetrwRestorePosn(svpos) + +" call Dret("s:NetrwRemoteRm") +endfun + +" --------------------------------------------------------------------- +" s:NetrwRemoteRmFile: {{{2 +fun! s:NetrwRemoteRmFile(path,rmfile,all) +" call Dfunc("s:NetrwRemoteRmFile(path<".a:path."> rmfile<".a:rmfile.">) all=".a:all) + + let all= a:all + let ok = "" + + if a:rmfile !~ '^"' && (a:rmfile =~ '@$' || a:rmfile !~ '[\/]$') + " attempt to remove file +" call Decho("attempt to remove file (all=".all.")") + if !all + echohl Statement +" call Decho("case all=0:") + call inputsave() + let ok= input("Confirm deletion of file<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + echohl NONE + if ok == "" + let ok="no" + endif + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + + if all || ok =~ 'y\%[es]' || ok == "" +" call Decho("case all=".all." or ok<".ok.">".(exists("w:netrw_method")? ': netrw_method='.w:netrw_method : "")) + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) +" call Decho("case ftp:") + let path= a:path + if path =~ '^\a\+://' + let path= substitute(path,'^\a\+://[^/]\+/','','') + endif + silent! keepjumps .,$d + call s:NetrwRemoteFtpCmd(path,"delete ".'"'.a:rmfile.'"') + else +" call Decho("case ssh: g:netrw_rm_cmd<".g:netrw_rm_cmd.">") + let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd) +" call Decho("netrw_rm_cmd<".netrw_rm_cmd.">") + if !exists("b:netrw_curdir") + call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53) + let ok="q" + else + let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','') +" call Decho("netrw_rm_cmd<".netrw_rm_cmd.">") +" call Decho("remotedir<".remotedir.">") +" call Decho("rmfile<".a:rmfile.">") + if remotedir != "" + let netrw_rm_cmd= netrw_rm_cmd." ".shellescape(fnameescape(remotedir.a:rmfile)) + else + let netrw_rm_cmd= netrw_rm_cmd." ".shellescape(fnameescape(a:rmfile)) + endif +" call Decho("call system(".netrw_rm_cmd.")") + let ret= system(netrw_rm_cmd) + if ret != 0 + call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60) + endif +" call Decho("returned=".ret." errcode=".v:shell_error) + endif + endif + elseif ok =~ 'q\%[uit]' +" call Decho("ok==".ok) + break + endif + + else + " attempt to remove directory +" call Decho("attempt to remove directory") + if !all + call inputsave() + let ok= input("Confirm deletion of directory<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + if ok == "" + let ok="no" + endif + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + + if all || ok =~ 'y\%[es]' || ok == "" + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) + call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile) + else + let rmfile = substitute(a:path.a:rmfile,'/$','','') + let netrw_rmdir_cmd = s:MakeSshCmd(s:WinPath(g:netrw_rmdir_cmd)).' '.shellescape(s:WinPath(rmfile)) +" call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")") + let ret= system(netrw_rmdir_cmd) +" call Decho("returned=".ret." errcode=".v:shell_error) + + if v:shell_error != 0 +" call Decho("v:shell_error not 0") + let netrw_rmf_cmd= s:MakeSshCmd(s:WinPath(g:netrw_rmf_cmd)).' '.shellescape(s:WinPath(substitute(rmfile,'[\/]$','','e'))) +" call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")") + let ret= system(netrw_rmf_cmd) +" call Decho("returned=".ret." errcode=".v:shell_error) + + if v:shell_error != 0 && !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22) + endif + endif + endif + + elseif ok =~ 'q\%[uit]' + break + endif + endif + +" call Dret("s:NetrwRemoteRmFile ".ok) + return ok +endfun + +" --------------------------------------------------------------------- +" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2 +" This function assumes that a long listing will be received. Size, time, +" and reverse sorts will be requested of the server but not otherwise +" enforced here. +fun! s:NetrwRemoteFtpCmd(path,listcmd) +" call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method) +" call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt) + + " because WinXX ftp uses unix style input + let ffkeep= &ff + setlocal ma ff=unix noro +" call Decho("setlocal ma ff=unix noro") + + " clear off any older non-banner lines + " note that w:netrw_bannercnt indexes the line after the banner +" call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d (clear off old non-banner lines)") + exe "silent! keepjumps ".w:netrw_bannercnt.",$d" + + "......................................... + if w:netrw_method == 2 || w:netrw_method == 5 + " ftp + <.netrc>: Method #2 + if a:path != "" + put ='cd \"'.a:path.'\"' + endif + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + call setline(line("$")+1,a:listcmd) +" exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' + if exists("g:netrw_port") && g:netrw_port != "" +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)) + exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1) + else +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)) + exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1) + endif + + "......................................... + elseif w:netrw_method == 3 + " ftp + machine,id,passwd,filename: Method #3 + setlocal ff=unix + if exists("g:netrw_port") && g:netrw_port != "" + put ='open '.g:netrw_machine.' '.g:netrw_port + else + put ='open '.g:netrw_machine + endif + + if exists("g:netrw_ftp") && g:netrw_ftp == 1 + put =g:netrw_uid + put ='\"'.s:netrw_passwd.'\"' + else + put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"' + endif + + if a:path != "" + put ='cd \"'.a:path.'\"' + endif + if exists("g:netrw_ftpextracmd") + put =g:netrw_ftpextracmd +" call Decho("filter input: ".getline('.')) + endif + call setline(line("$")+1,a:listcmd) + + " perform ftp: + " -i : turns off interactive prompting from ftp + " -n unix : DON'T use <.netrc>, even though it exists + " -n win32: quit being obnoxious about password +" exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))' +" call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n") + exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n" + + "......................................... + else + call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23) + endif + + " cleanup for Windows + if has("win32") || has("win95") || has("win64") || has("win16") + silent! keepjumps %s/\r$//e + endif + if a:listcmd == "dir" + " infer directory/link based on the file permission string + silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@ + silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/ + if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST + exe "silent! keepjumps ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e' + endif + endif + + " ftp's listing doesn't seem to include ./ or ../ + if !search('^\.\/$\|\s\.\/$','wn') + exe 'keepjumps '.w:netrw_bannercnt + put ='./' + endif + if !search('^\.\.\/$\|\s\.\.\/$','wn') + exe 'keepjumps '.w:netrw_bannercnt + put ='../' + endif + + " restore settings + let &ff= ffkeep +" call Dret("NetrwRemoteFtpCmd") +endfun + +" --------------------------------------------------------------------- +" s:NetrwRemoteRename: rename a remote file or directory {{{2 +fun! s:NetrwRemoteRename(usrhost,path) range +" call Dfunc("NetrwRemoteRename(usrhost<".a:usrhost."> path<".a:path.">)") + + " preparation for removing multiple files/directories + let svpos = netrw#NetrwSavePosn() + let ctr = a:firstline + let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd) + + " rename files given by the markfilelist + if exists("s:netrwmarkfilelist_{bufnr('%')}") + for oldname in s:netrwmarkfilelist_{bufnr("%")} +" call Decho("oldname<".oldname.">") + if exists("subfrom") + let newname= substitute(oldname,subfrom,subto,'') +" call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") + else + call inputsave() + let newname= input("Moving ".oldname." to : ",oldname) + call inputrestore() + if newname =~ '^s/' + let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','') + let subto = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','') + let newname = substitute(oldname,subfrom,subto,'') +" call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") + endif + endif + + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) + call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname) + else + let oldname= shellescape(a:path.oldname) + let newname= shellescape(a:path.newname) +" call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")") + let ret = system(s:WinPath(rename_cmd).' '.oldname.' '.newname) + endif + + endfor + call s:NetrwUnMarkFile(1) + + else + + " attempt to rename files/directories + while ctr <= a:lastline + exe "keepjumps ".ctr + + let oldname= s:NetrwGetWord() +" call Decho("oldname<".oldname.">") + + call inputsave() + let newname= input("Moving ".oldname." to : ",oldname) + call inputrestore() + + if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3) + call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname) + else + let oldname= shellescape(a:path.oldname) + let newname= shellescape(a:path.newname) +" call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")") + let ret = system(s:WinPath(rename_cmd).' '.oldname.' '.newname) + endif + + let ctr= ctr + 1 + endwhile + endif + + " refresh the directory + call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./')) + call netrw#NetrwRestorePosn(svpos) + +" call Dret("NetrwRemoteRename") +endfun + +" --------------------------------------------------------------------- +" Local Directory Browsing Support: {{{1 +" ========================================== + +" --------------------------------------------------------------------- +" netrw#LocalBrowseCheck: {{{2 +fun! netrw#LocalBrowseCheck(dirname) + " unfortunate interaction -- split window debugging can't be + " used here, must use D-echoRemOn or D-echoTabOn -- the BufEnter + " event triggers another call to LocalBrowseCheck() when attempts + " to write to the DBG buffer are made. + " The &ft == "netrw" test was installed because the BufEnter event + " would hit when re-entering netrw windows, creating unexpected + " refreshes (and would do so in the middle of NetrwSaveOptions(), too) +" call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname)) + if isdirectory(a:dirname) +" call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")) + if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) + silent! call s:NetrwBrowse(1,a:dirname) + elseif &ft == "netrw" && line("$") == 1 + silent! call s:NetrwBrowse(1,a:dirname) + endif + endif + " not a directory, ignore it +endfun + +" --------------------------------------------------------------------- +" s:LocalListing: does the job of "ls" for local directories {{{2 +fun! s:LocalListing() +" call Dfunc("s:LocalListing()") +" call Decho("&ma=".&ma) +" call Decho("&mod=".&mod) +" call Decho("&ro=".&ro) +" call Decho("bufname(%)<".bufname("%").">") + +" if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">") |else|call Decho("b:netrw_curdir doesn't exist") |endif +" if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif + + " get the list of files contained in the current directory + let dirname = escape(b:netrw_curdir,g:netrw_glob_escape) + let dirnamelen = strlen(b:netrw_curdir) + let filelist = glob(s:ComposePath(dirname,"*")) +" call Decho("glob(dirname<".dirname."/*>)=".filelist) + if filelist != "" + let filelist= filelist."\n" + endif + let filelist= filelist.glob(s:ComposePath(dirname,".*")) +" call Decho("glob(dirname<".dirname."/.*>)=".filelist) + + " Coding choice: either elide ./ if present + " or include ./ if not present + if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)' + " elide /path/. from glob() entries if present +" call Decho("elide /path/. from glob entries if present") + let filelist = substitute(filelist,'\n','\t','g') + let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','') + let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','') + let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','') + let filelist = substitute(filelist,'\t','\n','g') + endif +" call Decho("filelist<".filelist.">") + if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)' + " include ../ in the glob() entry if its missing +" call Decho("forcibly tacking on ..") + let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../") +" call Decho("filelist<".filelist.">") + endif + if b:netrw_curdir == '/' + " remove .. from filelist when current directory is root directory +" call Decho("remove .. from filelist") + let filelist= substitute(filelist,'/\.\.\n','','') + endif + " remove multiple contiguous newlines + let filelist= substitute(filelist,'\n\{2,}','\n','ge') + if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) + " change all \s to /s +" call Decho('change all \s to /s') + let filelist= substitute(filelist,'\','/','g') + else + " escape all \s to \\ +" call Decho('escape all \s to \\') + let filelist= substitute(filelist,'\','\\','g') + endif + +" call Decho("(before while) dirname<".dirname.">") +" call Decho("(before while) dirnamelen<".dirnamelen.">") +" call Decho("(before while) filelist<".filelist.">") + + while filelist != "" + if filelist =~ '\n' + let filename = substitute(filelist,'\n.*$','','e') + let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e') + else + let filename = filelist + let filelist = "" + endif +" call Decho(" ") +" call Decho("(while) filelist<".filelist.">") +" call Decho("(while) filename<".filename.">") + + if getftype(filename) == "link" + " indicate a symbolic link +" call Decho("indicate <".filename."> is a symbolic link with trailing @") + let pfile= filename."@" + + elseif getftype(filename) == "socket" + " indicate a socket +" call Decho("indicate <".filename."> is a socket with trailing =") + let pfile= filename."=" + + elseif getftype(filename) == "fifo" + " indicate a fifo +" call Decho("indicate <".filename."> is a fifo with trailing |") + let pfile= filename."|" + + elseif isdirectory(filename) + " indicate a directory +" call Decho("indicate <".filename."> is a directory with trailing /") + let pfile= filename."/" + + elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename) + if (has("win32") || has("win95") || has("win64") || has("win16")) + if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$' + " indicate an executable +" call Decho("indicate <".filename."> is executable with trailing *") + let pfile= filename."*" + else + " normal file + let pfile= filename + endif + elseif executable(filename) + " indicate an executable +" call Decho("indicate <".filename."> is executable with trailing *") + let pfile= filename."*" + else + " normal file + let pfile= filename + endif + + else + " normal file + let pfile= filename + endif +" call Decho("pfile<".pfile."> (after *@/ appending)") + + if pfile =~ '//$' + let pfile= substitute(pfile,'//$','/','e') +" call Decho("change // to /: pfile<".pfile.">") + endif + let pfile= strpart(pfile,dirnamelen) + let pfile= substitute(pfile,'^[/\\]','','e') +" call Decho("filename<".filename.">") +" call Decho("pfile <".pfile.">") + + if w:netrw_liststyle == s:LONGLIST + let sz = getfsize(filename) + let fsz = strpart(" ",1,15-s:Strlen(sz)).sz + let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename)) +" call Decho("sz=".sz." fsz=".fsz) + endif + + if g:netrw_sort_by =~ "^t" + " sort by time (handles time up to 1 quintillion seconds, US) +" call Decho("getftime(".filename.")=".getftime(filename)) + let t = getftime(filename) + let ft = strpart("000000000000000000",1,18-s:Strlen(t)).t +" call Decho("exe keepjumps put ='".ft.'/'.filename."'") + let ftpfile= ft.'/'.pfile + keepjumps silent! put=ftpfile + + elseif g:netrw_sort_by =~ "^s" + " sort by size (handles file sizes up to 1 quintillion bytes, US) +" call Decho("getfsize(".filename.")=".getfsize(filename)) + let sz = getfsize(filename) + let fsz = strpart("000000000000000000",1,18-s:Strlen(sz)).sz +" call Decho("exe keepjumps put ='".fsz.'/'.filename."'") + let fszpfile= fsz.'/'.pfile + keepjumps silent! put =fszpfile + + else + " sort by name +" call Decho("exe keepjumps put ='".pfile."'") + keepjumps silent! put=pfile + endif + endwhile + + " cleanup any windows mess at end-of-line + silent! keepjumps %s/\r$//e + exe "setlocal ts=".g:netrw_maxfilenamelen +" call Decho("setlocal ts=".g:netrw_maxfilenamelen) + +" call Dret("s:LocalListing") +endfun + +" --------------------------------------------------------------------- +" s:LocalBrowseShellCmdRefresh: this function is called after a user has {{{2 +" performed any shell command. The idea is to cause all local-browsing +" buffers to be refreshed after a user has executed some shell command, +" on the chance that s/he removed/created a file/directory with it. +fun! s:LocalBrowseShellCmdRefresh() +" call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs") + " determine which buffers currently reside in a tab + if !exists("s:netrw_browselist") +" call Dret("LocalBrowseShellCmdRefresh : browselist is empty") + return + endif + if !exists("w:netrw_bannercnt") +" call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw windwo") + return + endif + if exists("s:locbrowseshellcmd") + if s:locbrowseshellcmd + let s:locbrowseshellcmd= 0 +" call Dret("LocalBrowseShellCmdRefresh : NetrwBrowse itself caused the refresh") + return + endif + let s:locbrowseshellcmd= 0 + endif + let itab = 1 + let buftablist = [] + while itab <= tabpagenr("$") + let buftablist = buftablist + tabpagebuflist() + let itab = itab + 1 + tabn + endwhile +" call Decho("buftablist".string(buftablist)) +" call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">") + " GO through all buffers on netrw_browselist (ie. just local-netrw buffers): + " | refresh any netrw window + " | wipe out any non-displaying netrw buffer + let curwin = winnr() + let ibl = 0 + for ibuf in s:netrw_browselist +" call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf)) + if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1 + " wipe out any non-displaying netrw buffer +" call Decho("wiping buf#".ibuf,"<".bufname(ibuf).">") + exe "silent! bd ".fnameescape(ibuf) + call remove(s:netrw_browselist,ibl) +" call Decho("browselist=".string(s:netrw_browselist)) + continue + elseif index(tabpagebuflist(),ibuf) != -1 + " refresh any netrw buffer +" call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf)) + exe bufwinnr(ibuf)."wincmd w" + call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) + endif + let ibl= ibl + 1 + endfor + exe curwin."wincmd w" + +" call Dret("LocalBrowseShellCmdRefresh") +endfun + +" --------------------------------------------------------------------- +" s:NetrwLocalRm: {{{2 +fun! s:NetrwLocalRm(path) range +" call Dfunc("s:NetrwLocalRm(path<".a:path.">)") +" call Decho("firstline=".a:firstline." lastline=".a:lastline) + + " preparation for removing multiple files/directories + let ret = 0 + let all = 0 + let svpos = netrw#NetrwSavePosn() + + if exists("s:netrwmarkfilelist_{bufnr('%')}") + " remove all marked files +" call Decho("remove all marked files") + for fname in s:netrwmarkfilelist_{bufnr("%")} + let ok= s:NetrwLocalRmFile(a:path,fname,all) + if ok =~ 'q\%[uit]' || ok == "no" + break + elseif ok =~ 'a\%[ll]' + let all= 1 + endif + endfor + call s:NetrwUnMarkFile(1) + + else + " remove (multiple) files and directories +" call Decho("remove files in range [".a:firstline.",".a:lastline."]") + + let ctr = a:firstline + while ctr <= a:lastline + exe "keepjumps ".ctr + + " sanity checks + if line(".") < w:netrw_bannercnt + let ctr= ctr + 1 + continue + endif + let curword= s:NetrwGetWord() + if curword == "./" || curword == "../" + let ctr= ctr + 1 + continue + endif + let ok= s:NetrwLocalRmFile(a:path,curword,all) + if ok =~ 'q\%[uit]' || ok == "no" + break + elseif ok =~ 'a\%[ll]' + let all= 1 + endif + let ctr= ctr + 1 + endwhile + endif + + " refresh the directory +" call Decho("bufname<".bufname("%").">") + if bufname("%") != "NetrwMessage" + call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) + call netrw#NetrwRestorePosn(svpos) + endif + +" call Dret("s:NetrwLocalRm") +endfun + +" --------------------------------------------------------------------- +" s:NetrwLocalRmFile: remove file fname given the path {{{2 +" Give confirmation prompt unless all==1 +fun! s:NetrwLocalRmFile(path,fname,all) +" call Dfunc("s:NetrwLocalRmFile(path<".a:path."> fname<".a:fname."> all=".a:all) + + let all= a:all + let ok = "" + norm! 0 + let rmfile= s:ComposePath(a:path,a:fname) +" call Decho("rmfile<".rmfile.">") + + if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$') + " attempt to remove file +" call Decho("attempt to remove file<".rmfile.">") + if !all + echohl Statement + call inputsave() + let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + echohl NONE + if ok == "" + let ok="no" + endif +" call Decho("response: ok<".ok.">") + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') +" call Decho("response: ok<".ok."> (after sub)") + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + + if all || ok =~ 'y\%[es]' || ok == "" + let ret= s:NetrwDelete(rmfile) +" call Decho("errcode=".v:shell_error." ret=".ret) + endif + + else + " attempt to remove directory + if !all + echohl Statement + call inputsave() + let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ") + call inputrestore() + let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e') + if ok == "" + let ok="no" + endif + if ok =~ 'a\%[ll]' + let all= 1 + endif + endif + let rmfile= substitute(rmfile,'[\/]$','','e') + + if all || ok =~ 'y\%[es]' || ok == "" +" call Decho("1st attempt: system(s:WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')') + call system(s:WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile)) +" call Decho("v:shell_error=".v:shell_error) + + if v:shell_error != 0 +" call Decho("2nd attempt to remove directory<".rmfile.">") + let errcode= s:NetrwDelete(rmfile) +" call Decho("errcode=".errcode) + + if errcode != 0 + if has("unix") +" call Decho("3rd attempt to remove directory<".rmfile.">") + call system("rm ".shellescape(rmfile)) + if v:shell_error != 0 && !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34) + let ok="no" + endif + elseif !exists("g:netrw_quiet") + call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35) + let ok="no" + endif + endif + endif + endif + endif + +" call Dret("s:NetrwLocalRmFile ".ok) + return ok +endfun + +" --------------------------------------------------------------------- +" s:NetrwLocalRename: rename a remote file or directory {{{2 +fun! s:NetrwLocalRename(path) range +" call Dfunc("NetrwLocalRename(path<".a:path.">)") + + " preparation for removing multiple files/directories + let ctr = a:firstline + let svpos= netrw#NetrwSavePosn() + + " rename files given by the markfilelist + if exists("s:netrwmarkfilelist_{bufnr('%')}") + for oldname in s:netrwmarkfilelist_{bufnr("%")} +" call Decho("oldname<".oldname.">") + if exists("subfrom") + let newname= substitute(oldname,subfrom,subto,'') +" call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") + else + call inputsave() + let newname= input("Moving ".oldname." to : ",oldname) + call inputrestore() + if newname =~ '^s/' + let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','') + let subto = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','') +" call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">") + let newname = substitute(oldname,subfrom,subto,'') + endif + endif + call rename(oldname,newname) + endfor + call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir) + + else + + " attempt to rename files/directories + while ctr <= a:lastline + exe "keepjumps ".ctr + + " sanity checks + if line(".") < w:netrw_bannercnt + let ctr= ctr + 1 + continue + endif + let curword= s:NetrwGetWord() + if curword == "./" || curword == "../" + let ctr= ctr + 1 + continue + endif + + norm! 0 + let oldname= s:ComposePath(a:path,curword) +" call Decho("oldname<".oldname.">") + + call inputsave() + let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e')) + call inputrestore() + + call rename(oldname,newname) +" call Decho("renaming <".oldname."> to <".newname.">") + + let ctr= ctr + 1 + endwhile + endif + + " refresh the directory +" call Decho("refresh the directory listing") + call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./')) + call netrw#NetrwRestorePosn(svpos) + +" call Dret("NetrwLocalRename") +endfun + +" --------------------------------------------------------------------- +" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2 +" +" g:netrw_ Directory Is +" fastbrowse Local Remote +" slow 0 D D D=Deleting a buffer implies it will not be re-used (slow) +" med 1 D H H=Hiding a buffer implies it may be re-used (fast) +" fast 2 H H +" +" Deleting a buffer means that it will be re-loaded when examined, hence "slow". +" Hiding a buffer means that it will be re-used when examined, hence "fast". +" (re-using a buffer may not be as accurate) +fun! s:LocalFastBrowser() +" call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse) + + " initialize browselist, a list of buffer numbers that the local browser has used + if !exists("s:netrw_browselist") +" call Decho("initialize s:netrw_browselist") + let s:netrw_browselist= [] + endif + + " append current buffer to fastbrowse list + if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1] +" call Decho("appendng current buffer to browselist") + call add(s:netrw_browselist,bufnr("%")) +" call Decho("browselist=".string(s:netrw_browselist)) + endif + + " enable autocmd events to handle refreshing/removing local browser buffers + " If local browse buffer is currently showing: refresh it + " If local browse buffer is currently hidden : wipe it + if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1 +" call Decho("setting up local-browser shell command refresh") + let s:netrw_browser_shellcmd= 1 + augroup AuNetrwShellCmd + au! + if (has("win32") || has("win95") || has("win64") || has("win16")) +" call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()") + au ShellCmdPost * call s:LocalBrowseShellCmdRefresh() + else + au ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh() +" call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()") + endif + augroup END + endif + + " user must have changed fastbrowse to its fast setting, so remove + " the associated autocmd events + if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd") +" call Decho("remove AuNetrwShellCmd autcmd group") + unlet s:netrw_browser_shellcmd + augroup AuNetrwShellCmd + au! + augroup END + augroup! AuNetrwShellCmd + endif + +" call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">") +endfun + +" --------------------------------------------------------------------- +" Support Functions: {{{1 + +" --------------------------------------------------------------------- +" netrw#ErrorMsg: {{{2 +" 0=note = s:NOTE +" 1=warning = s:WARNING +" 2=error = s:ERROR +" Oct 12, 2008 : max errnum currently is 73 +fun! netrw#ErrorMsg(level,msg,errnum) +" call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow) + + if a:level == 1 + let level= "**warning** (netrw) " + elseif a:level == 2 + let level= "**error** (netrw) " + else + let level= "**note** (netrw) " + endif +" call Decho("level=".level) + + if g:netrw_use_errorwindow + " (default) netrw creates a one-line window to show error/warning + " messages (reliably displayed) + + " record current window number for NetrwRestorePosn()'s benefit + let s:winBeforeErr= winnr() +" call Decho("s:winBeforeErr=".s:winBeforeErr) + + " getting messages out reliably is just plain difficult! + " This attempt splits the current window, creating a one line window. + if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0 +" call Decho("write to NetrwMessage buffer") + exe bufwinnr("NetrwMessage")."wincmd w" +" call Decho("setlocal ma noro") + setlocal ma noro + call setline(line("$")+1,level.a:msg) + $ + else +" call Decho("create a NetrwMessage buffer window") + bo 1split + enew + setlocal bt=nofile + file NetrwMessage +" call Decho("setlocal ma noro") + setlocal ma noro + call setline(line("$"),level.a:msg) + endif +" call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr()) + if &fo !~ '[ta]' + syn clear + syn match netrwMesgNote "^\*\*note\*\*" + syn match netrwMesgWarning "^\*\*warning\*\*" + syn match netrwMesgError "^\*\*error\*\*" + hi link netrwMesgWarning WarningMsg + hi link netrwMesgError Error + endif + setlocal noma ro bh=wipe + + else + " (optional) netrw will show messages using echomsg. Even if the + " message doesn't appear, at least it'll be recallable via :messages +" redraw! + if a:level == s:WARNING + echohl WarningMsg + elseif a:level == s:ERROR + echohl Error + endif + echomsg level.a:msg +" call Decho("echomsg ***netrw*** ".a:msg) + echohl None + endif + +" call Dret("netrw#ErrorMsg") +endfun + +" --------------------------------------------------------------------- +" netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2 +fun! netrw#NetrwRestorePosn(...) +" call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1)) + let eikeep= &ei + set ei=all + if expand("%") == "NetrwMessage" + exe s:winBeforeErr."wincmd w" + endif + + if a:0 > 0 + exe a:1 + endif + + " restore window + if exists("w:netrw_winnr") +" call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w") + exe "silent! ".w:netrw_winnr."wincmd w" + endif + if v:shell_error == 0 + " as suggested by Bram M: redraw on no error + " allows protocol error messages to remain visible +" redraw! + endif + + " restore top-of-screen line + if exists("w:netrw_hline") +" call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z") + exe "norm! ".w:netrw_hline."G0z\" + endif + + " restore position + if exists("w:netrw_line") && exists("w:netrw_col") +" call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|") + exe "norm! ".w:netrw_line."G0".w:netrw_col."\" + endif + + let &ei= eikeep +" call Dret("netrw#NetrwRestorePosn") +endfun + +" --------------------------------------------------------------------- +" netrw#NetrwSavePosn: saves position of cursor on screen {{{2 +fun! netrw#NetrwSavePosn() +" call Dfunc("netrw#NetrwSavePosn()") + " Save current line and column + let w:netrw_winnr= winnr() + let w:netrw_line = line(".") + let w:netrw_col = virtcol(".") + + " Save top-of-screen line + norm! H0 + let w:netrw_hline= line(".") + + " set up string holding position parameters + let ret = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline + + call netrw#NetrwRestorePosn() +" call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline) + return ret +endfun + +" ------------------------------------------------------------------------ +" netrw#RFC2396: converts %xx into characters {{{2 +fun! netrw#RFC2396(fname) +" call Dfunc("netrw#RFC2396(fname<".a:fname.">)") + let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t") +" call Dret("netrw#RFC2396 ".fname) + return fname +endfun + +" --------------------------------------------------------------------- +" s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2 +fun! s:ComposePath(base,subdir) +" call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)") + + if(has("amiga")) +" call Decho("amiga") + let ec = a:base[strlen(a:base)-1] + if ec != '/' && ec != ':' + let ret = a:base . "/" . a:subdir + else + let ret = a:base . a:subdir + endif + + elseif a:subdir =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16")) +" call Decho("windows") + let ret= a:subdir + + elseif a:base =~ '^\a\+://' +" call Decho("remote linux/macos") + let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','') + let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','') + if a:subdir == '../' + if curpath =~ '[^/]/[^/]\+/$' + let curpath= substitute(curpath,'[^/]\+/$','','') + else + let curpath="" + endif + let ret= urlbase.curpath + else + let ret= urlbase.curpath.a:subdir + endif +" call Decho("urlbase<".urlbase.">") +" call Decho("curpath<".curpath.">") +" call Decho("ret<".ret.">") + + else +" call Decho("local linux/macos") + let ret = substitute(a:base."/".a:subdir,"//","/","g") + if a:base =~ '^//' + " keeping initial '//' for the benefit of network share listing support + let ret= '/'.ret + endif + let ret= simplify(ret) + endif + +" call Dret("s:ComposePath ".ret) + return ret +endfun + +" --------------------------------------------------------------------- +" s:FileReadable: o/s independent filereadable {{{2 +fun! s:FileReadable(fname) +" call Dfunc("s:FileReadable(fname<".a:fname.">)") + + if g:netrw_cygwin + let ret= filereadable(substitute(a:fname,'/cygdrive/\(.\)','\1:/','')) + else + let ret= filereadable(a:fname) + endif + +" call Dret("s:FileReadable ".ret) + return ret +endfun + +" --------------------------------------------------------------------- +" s:GetTempfile: gets a tempname that'll work for various o/s's {{{2 +" Places correct suffix on end of temporary filename, +" using the suffix provided with fname +fun! s:GetTempfile(fname) +" call Dfunc("s:GetTempfile(fname<".a:fname.">)") + + if !exists("b:netrw_tmpfile") + " get a brand new temporary filename + let tmpfile= tempname() +" call Decho("tmpfile<".tmpfile."> : from tempname()") + + let tmpfile= substitute(tmpfile,'\','/','ge') +" call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /") + + " sanity check -- does the temporary file's directory exist? + if !isdirectory(substitute(tmpfile,'[^/]\+$','','e')) +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) + call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2) +" call Dret("s:GetTempfile getcwd<".getcwd().">") + return "" + endif + + " let netrw#NetSource() know about the tmpfile + let s:netrw_tmpfile= tmpfile " used by netrw#NetSource() and netrw#NetrwBrowseX() +" call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">") + + " o/s dependencies + if g:netrw_cygwin != 0 + let tmpfile = substitute(tmpfile,'^\(\a\):','/cygdrive/\1','e') + elseif has("win32") || has("win95") || has("win64") || has("win16") + if !exists("+shellslash") || !&ssl + let tmpfile = substitute(tmpfile,'/','\','g') + endif + else + let tmpfile = tmpfile + endif + let b:netrw_tmpfile= tmpfile +" call Decho("o/s dependent fixed tempname<".tmpfile.">") + else + " re-use temporary filename + let tmpfile= b:netrw_tmpfile +" call Decho("tmpfile<".tmpfile."> re-using") + endif + + " use fname's suffix for the temporary file + if a:fname != "" + if a:fname =~ '\.[^./]\+$' +" call Decho("using fname<".a:fname.">'s suffix") + if a:fname =~ '.tar.gz' || a:fname =~ '.tar.bz2' + let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') + else + let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e') + endif +" call Decho("suffix<".suffix.">") + let tmpfile= substitute(tmpfile,'\.tmp$','','e') +" call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)") + let tmpfile .= suffix +" call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">") + let s:netrw_tmpfile= tmpfile " supports netrw#NetSource() + endif + endif + +" call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap) +" call Dret("s:GetTempfile <".tmpfile.">") + return tmpfile +endfun + +" --------------------------------------------------------------------- +" s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2 +" a correct command for use with a system() call +fun! s:MakeSshCmd(sshcmd) +" call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">") + let sshcmd = substitute(a:sshcmd,'\',s:user.s:machine,'') + if exists("g:netrw_port") && g:netrw_port != "" + let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'') + elseif exists("s:port") && s:port != "" + let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.s:port,'') + else + let sshcmd= substitute(sshcmd,"USEPORT ",'','') + endif +" call Dret("s:MakeSshCmd <".sshcmd.">") + return sshcmd +endfun + +" --------------------------------------------------------------------- +" s:NetrwBMShow: {{{2 +fun! s:NetrwBMShow() +" call Dfunc("s:NetrwBMShow()") + redir => bmshowraw + menu + redir END + let bmshowlist = split(bmshowraw,'\n') + if bmshowlist != [] + let bmshowfuncs= filter(bmshowlist,'v:val =~ "\\d\\+_BMShow()"') + if bmshowfuncs != [] + let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','') + if bmshowfunc =~ '^call.*BMShow()' + exe "silent! ".bmshowfunc + endif + endif + endif +" call Dret("s:NetrwBMShow : bmshowfunc<".(exists("bmshowfunc")? bmshowfunc : 'n/a').">") +endfun + +" --------------------------------------------------------------------- +" s:NetrwDelete: Deletes a file. {{{2 +" Uses Steve Hall's idea to insure that Windows paths stay +" acceptable. No effect on Unix paths. +" Examples of use: let result= s:NetrwDelete(path) +fun! s:NetrwDelete(path) +" call Dfunc("s:NetrwDelete(path<".a:path.">)") + + let path = s:WinPath(a:path) + if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) + if exists("+shellslash") + let sskeep= &shellslash + setlocal noshellslash + let result = delete(path) + let &shellslash = sskeep + else +" call Decho("exe let result= ".a:cmd."('".path."')") + let result= delete(path) + endif + else +" call Decho("let result= delete(".path.")") + let result= delete(path) + endif + if result < 0 + call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71) + endif + +" call Dret("s:NetrwDelete ".result) + return result +endfun + +" --------------------------------------------------------------------- +" s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2 +fun! s:NetrwEnew(curdir) +" call Dfunc("s:NetrwEnew(curdir<".a:curdir.">) buf#".bufnr("%")."<".bufname("%").">") + + " grab a function-local-variable copy of buffer variables + if exists("b:netrw_bannercnt") |let netrw_bannercnt = b:netrw_bannercnt |endif + if exists("b:netrw_browser_active") |let netrw_browser_active = b:netrw_browser_active |endif + if exists("b:netrw_cpf") |let netrw_cpf = b:netrw_cpf |endif + if exists("b:netrw_curdir") |let netrw_curdir = b:netrw_curdir |endif + if exists("b:netrw_explore_bufnr") |let netrw_explore_bufnr = b:netrw_explore_bufnr |endif + if exists("b:netrw_explore_indx") |let netrw_explore_indx = b:netrw_explore_indx |endif + if exists("b:netrw_explore_line") |let netrw_explore_line = b:netrw_explore_line |endif + if exists("b:netrw_explore_list") |let netrw_explore_list = b:netrw_explore_list |endif + if exists("b:netrw_explore_listlen")|let netrw_explore_listlen = b:netrw_explore_listlen|endif + if exists("b:netrw_explore_mtchcnt")|let netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif + if exists("b:netrw_fname") |let netrw_fname = b:netrw_fname |endif + if exists("b:netrw_lastfile") |let netrw_lastfile = b:netrw_lastfile |endif + if exists("b:netrw_liststyle") |let netrw_liststyle = b:netrw_liststyle |endif + if exists("b:netrw_method") |let netrw_method = b:netrw_method |endif + if exists("b:netrw_option") |let netrw_option = b:netrw_option |endif + if exists("b:netrw_prvdir") |let netrw_prvdir = b:netrw_prvdir |endif + + call s:NetrwOptionRestore("w:") +" call Decho("generate a buffer with keepjumps keepalt enew!") + keepjumps keepalt enew! + call s:NetrwOptionSave("w:") + + " copy function-local-variables to buffer variable equivalents + if exists("netrw_bannercnt") |let b:netrw_bannercnt = netrw_bannercnt |endif + if exists("netrw_browser_active") |let b:netrw_browser_active = netrw_browser_active |endif + if exists("netrw_cpf") |let b:netrw_cpf = netrw_cpf |endif + if exists("netrw_curdir") |let b:netrw_curdir = netrw_curdir |endif + if exists("netrw_explore_bufnr") |let b:netrw_explore_bufnr = netrw_explore_bufnr |endif + if exists("netrw_explore_indx") |let b:netrw_explore_indx = netrw_explore_indx |endif + if exists("netrw_explore_line") |let b:netrw_explore_line = netrw_explore_line |endif + if exists("netrw_explore_list") |let b:netrw_explore_list = netrw_explore_list |endif + if exists("netrw_explore_listlen")|let b:netrw_explore_listlen = netrw_explore_listlen|endif + if exists("netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = netrw_explore_mtchcnt|endif + if exists("netrw_fname") |let b:netrw_fname = netrw_fname |endif + if exists("netrw_lastfile") |let b:netrw_lastfile = netrw_lastfile |endif + if exists("netrw_liststyle") |let b:netrw_liststyle = netrw_liststyle |endif + if exists("netrw_method") |let b:netrw_method = netrw_method |endif + if exists("netrw_option") |let b:netrw_option = netrw_option |endif + if exists("netrw_prvdir") |let b:netrw_prvdir = netrw_prvdir |endif + + let b:netrw_curdir= a:curdir + if b:netrw_curdir =~ '/$' + if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST + file NetrwTreeListing + nno [ :silent call TreeListMove('[') + nno ] :silent call TreeListMove(']') + else + exe "silent! keepalt file ".fnameescape(b:netrw_curdir) + endif + endif + +" call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">") +endfun + +" ------------------------------------------------------------------------ +" s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2 +" changed sorting, etc. Also see s:NetrwRestoreWordPosn(). +fun! s:NetrwSaveWordPosn() +" call Dfunc("NetrwSaveWordPosn()") + let s:netrw_saveword= '^'.fnameescape(getline('.')).'$' +" call Dret("NetrwSaveWordPosn : saveword<".s:netrw_saveword.">") +endfun + +" --------------------------------------------------------------------- +" s:NetrwRestoreWordPosn: used to keep cursor on same word after refresh, {{{2 +" changed sorting, etc. Also see s:NetrwSaveWordPosn(). +fun! s:NetrwRestoreWordPosn() +" call Dfunc("NetrwRestoreWordPosn()") + silent! call search(s:netrw_saveword,'w') +" call Dret("NetrwRestoreWordPosn") +endfun + +" --------------------------------------------------------------------- +" s:RestoreBufVars: {{{2 +fun! s:RestoreBufVars() +" call Dfunc("s:RestoreBufVars()") + + if exists("s:netrw_curdir") |let b:netrw_curdir = s:netrw_curdir |endif + if exists("s:netrw_lastfile") |let b:netrw_lastfile = s:netrw_lastfile |endif + if exists("s:netrw_method") |let b:netrw_method = s:netrw_method |endif + if exists("s:netrw_fname") |let b:netrw_fname = s:netrw_fname |endif + if exists("s:netrw_machine") |let b:netrw_machine = s:netrw_machine |endif + if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif + +" call Dret("s:RestoreBufVars") +endfun + +" --------------------------------------------------------------------- +" s:RemotePathAnalysis: {{{2 +fun! s:RemotePathAnalysis(dirname) +" call Dfunc("s:RemotePathAnalysis()") + + let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$' + let s:method = substitute(a:dirname,dirpat,'\1','') + let s:user = substitute(a:dirname,dirpat,'\2','') + let s:machine = substitute(a:dirname,dirpat,'\3','') + let s:port = substitute(a:dirname,dirpat,'\4','') + let s:path = substitute(a:dirname,dirpat,'\5','') + let s:fname = substitute(a:dirname,'^.*/\ze.','','') + +" call Decho("set up s:method <".s:method .">") +" call Decho("set up s:user <".s:user .">") +" call Decho("set up s:machine<".s:machine.">") +" call Decho("set up s:port <".s:port.">") +" call Decho("set up s:path <".s:path .">") +" call Decho("set up s:fname <".s:fname .">") + +" call Dret("s:RemotePathAnalysis") +endfun + +" --------------------------------------------------------------------- +" s:RemoteSystem: runs a command on a remote host using ssh {{{2 +" Returns status +" Runs system() on +" [cd REMOTEDIRPATH;] a:cmd +" Note that it doesn't do shellescape(a:cmd)! +fun! s:RemoteSystem(cmd) +" call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)") + if !executable(g:netrw_ssh_cmd) + call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52) + elseif !exists("b:netrw_curdir") + call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53) + else + let cmd = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME") + let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','') + if remotedir != "" + let cmd= cmd.' cd '.shellescape(remotedir).";" + else + let cmd= cmd.' ' + endif + let cmd= cmd.a:cmd +" call Decho("call system(".cmd.")") + let ret= system(cmd) + endif +" call Dret("s:RemoteSystem ".ret) + return ret +endfun + +" --------------------------------------------------------------------- +" s:RestoreWinVars: (used by Explore() and NetrwSplit()) {{{2 +fun! s:RestoreWinVars() +" call Dfunc("s:RestoreWinVars()") + if exists("s:bannercnt") |let w:netrw_bannercnt = s:bannercnt |unlet s:bannercnt |endif + if exists("s:col") |let w:netrw_col = s:col |unlet s:col |endif + if exists("s:curdir") |let w:netrw_curdir = s:curdir |unlet s:curdir |endif + if exists("s:explore_bufnr") |let w:netrw_explore_bufnr = s:explore_bufnr |unlet s:explore_bufnr |endif + if exists("s:explore_indx") |let w:netrw_explore_indx = s:explore_indx |unlet s:explore_indx |endif + if exists("s:explore_line") |let w:netrw_explore_line = s:explore_line |unlet s:explore_line |endif + if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif + if exists("s:explore_list") |let w:netrw_explore_list = s:explore_list |unlet s:explore_list |endif + if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif + if exists("s:fpl") |let w:netrw_fpl = s:fpl |unlet s:fpl |endif + if exists("s:hline") |let w:netrw_hline = s:hline |unlet s:hline |endif + if exists("s:line") |let w:netrw_line = s:line |unlet s:line |endif + if exists("s:liststyle") |let w:netrw_liststyle = s:liststyle |unlet s:liststyle |endif + if exists("s:method") |let w:netrw_method = s:method |unlet s:method |endif + if exists("s:prvdir") |let w:netrw_prvdir = s:prvdir |unlet s:prvdir |endif + if exists("s:treedict") |let w:netrw_treedict = s:treedict |unlet s:treedict |endif + if exists("s:treetop") |let w:netrw_treetop = s:treetop |unlet s:treetop |endif + if exists("s:winnr") |let w:netrw_winnr = s:winnr |unlet s:winnr |endif +" call Dret("s:RestoreWinVars") +endfun + +" --------------------------------------------------------------------- +" s:Rexplore: implements returning from a buffer to a netrw directory {{{2 +" +" s:SetRexDir() sets up <2-leftmouse> maps (if g:netrw_retmap +" is true) and a command, :Rexplore, which call this function. +" +" s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir() +fun! s:NetrwRexplore(islocal,dirname) +" call Dfunc("s:NetrwRexplore(islocal=".a:islocal." dirname<".a:dirname.">)") + if a:islocal + call netrw#LocalBrowseCheck(a:dirname) + else + call s:NetrwBrowse(0,a:dirname) + endif + if exists("s:nbcd_curpos_{bufnr('%')}") + call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')}) + unlet s:nbcd_curpos_{bufnr('%')} + endif +" call Dret("s:NetrwRexplore") +endfun + +" --------------------------------------------------------------------- +" s:SaveBufVars: {{{2 +fun! s:SaveBufVars() +" call Dfunc("s:SaveBufVars()") + + if exists("b:netrw_curdir") |let s:netrw_curdir = b:netrw_curdir |endif + if exists("b:netrw_lastfile") |let s:netrw_lastfile = b:netrw_lastfile |endif + if exists("b:netrw_method") |let s:netrw_method = b:netrw_method |endif + if exists("b:netrw_fname") |let s:netrw_fname = b:netrw_fname |endif + if exists("b:netrw_machine") |let s:netrw_machine = b:netrw_machine |endif + if exists("b:netrw_browser_active")|let s:netrw_browser_active = b:netrw_browser_active|endif + +" call Dret("s:SaveBufVars") +endfun + +" --------------------------------------------------------------------- +" s:SaveWinVars: (used by Explore() and NetrwSplit()) {{{2 +fun! s:SaveWinVars() +" call Dfunc("s:SaveWinVars()") + if exists("w:netrw_bannercnt") |let s:bannercnt = w:netrw_bannercnt |endif + if exists("w:netrw_col") |let s:col = w:netrw_col |endif + if exists("w:netrw_curdir") |let s:curdir = w:netrw_curdir |endif + if exists("w:netrw_explore_bufnr") |let s:explore_bufnr = w:netrw_explore_bufnr |endif + if exists("w:netrw_explore_indx") |let s:explore_indx = w:netrw_explore_indx |endif + if exists("w:netrw_explore_line") |let s:explore_line = w:netrw_explore_line |endif + if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif + if exists("w:netrw_explore_list") |let s:explore_list = w:netrw_explore_list |endif + if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif + if exists("w:netrw_fpl") |let s:fpl = w:netrw_fpl |endif + if exists("w:netrw_hline") |let s:hline = w:netrw_hline |endif + if exists("w:netrw_line") |let s:line = w:netrw_line |endif + if exists("w:netrw_liststyle") |let s:liststyle = w:netrw_liststyle |endif + if exists("w:netrw_method") |let s:method = w:netrw_method |endif + if exists("w:netrw_prvdir") |let s:prvdir = w:netrw_prvdir |endif + if exists("w:netrw_treedict") |let s:treedict = w:netrw_treedict |endif + if exists("w:netrw_treetop") |let s:treetop = w:netrw_treetop |endif + if exists("w:netrw_winnr") |let s:winnr = w:netrw_winnr |endif +" call Dret("s:SaveWinVars") +endfun + +" --------------------------------------------------------------------- +" s:SetBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck()) {{{2 +" To allow separate windows to have their own activities, such as +" Explore **/pattern, several variables have been made window-oriented. +" However, when the user splits a browser window (ex: ctrl-w s), these +" variables are not inherited by the new window. SetBufWinVars() and +" UseBufWinVars() get around that. +fun! s:SetBufWinVars() +" call Dfunc("s:SetBufWinVars()") + if exists("w:netrw_liststyle") |let b:netrw_liststyle = w:netrw_liststyle |endif + if exists("w:netrw_bannercnt") |let b:netrw_bannercnt = w:netrw_bannercnt |endif + if exists("w:netrw_method") |let b:netrw_method = w:netrw_method |endif + if exists("w:netrw_prvdir") |let b:netrw_prvdir = w:netrw_prvdir |endif + if exists("w:netrw_explore_indx") |let b:netrw_explore_indx = w:netrw_explore_indx |endif + if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif + if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif + if exists("w:netrw_explore_bufnr") |let b:netrw_explore_bufnr = w:netrw_explore_bufnr |endif + if exists("w:netrw_explore_line") |let b:netrw_explore_line = w:netrw_explore_line |endif + if exists("w:netrw_explore_list") |let b:netrw_explore_list = w:netrw_explore_list |endif +" call Dret("s:SetBufWinVars") +endfun + +" --------------------------------------------------------------------- +" s:SetRexDir: set directory for :Rexplore {{{2 +fun! s:SetRexDir(islocal,dirname) +" call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)") + " set up Rex and leftmouse-double-click + if a:islocal + exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")' + if g:netrw_retmap + if !hasmapto("NetrwReturn") && maparg("<2-leftmouse>","n") == "" + nmap <2-leftmouse> NetrwReturn + endif + let dir = escape(a:dirname, s:netrw_map_escape) + exe 'nnoremap NetrwReturn :call NetrwRexplore(1,"'.dir.'")' + endif + else + exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")' + if g:netrw_retmap + if !hasmapto("NetrwReturn") && maparg("<2-leftmouse>","n") == "" + nmap <2-leftmouse> NetrwReturn + endif + let dir = escape(a:dirname, s:netrw_map_escape) + exe 'nnoremap NetrwReturn :call NetrwRexplore(0,"'.dir.'")' + endif + endif +" call Dret("s:SetRexDir") +endfun + +" --------------------------------------------------------------------- +" s:Strlen: this function returns the length of a string, even if its {{{2 +" using two-byte etc characters. +" Currently, its only used if g:Align_xstrlen is set to a +" nonzero value. Solution from Nicolai Weibull, vim docs +" (:help strlen()), Tony Mechelynck, and my own invention. +fun! s:Strlen(x) +" call Dfunc("s:Strlen(x<".a:x.">") + if g:netrw_xstrlen == 1 + " number of codepoints (Latin a + combining circumflex is two codepoints) + " (comment from TM, solution from NW) + let ret= strlen(substitute(a:x,'.','c','g')) + + elseif g:netrw_xstrlen == 2 + " number of spacing codepoints (Latin a + combining circumflex is one spacing + " codepoint; a hard tab is one; wide and narrow CJK are one each; etc.) + " (comment from TM, solution from TM) + let ret=strlen(substitute(a:x, '.\Z', 'x', 'g')) + + elseif g:netrw_xstrlen == 3 + " virtual length (counting, for instance, tabs as anything between 1 and + " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately + " preceded by lam, one otherwise, etc.) + " (comment from TM, solution from me) + let modkeep= &mod + exe "norm! o\" + call setline(line("."),a:x) + let ret= virtcol("$") - 1 + d + let &mod= modkeep + + else + " at least give a decent default + ret= strlen(a:x) + endif +" call Dret("s:Strlen ".ret) + return ret +endfun + +" --------------------------------------------------------------------- +" s:TreeListMove: {{{2 +fun! s:TreeListMove(dir) +" call Dfunc("s:TreeListMove(dir<".a:dir.">)") + let curline = getline('.') + let prvline = (line(".") > 1)? getline(line(".")-1) : '' + let nxtline = (line(".") < line("$"))? getline(line(".")+1) : '' + let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','') + let indentm1 = substitute(curindent,'^| ','','') +" call Decho("prvline <".prvline."> #".line(".")-1) +" call Decho("curline <".curline."> #".line(".")) +" call Decho("nxtline <".nxtline."> #".line(".")+1) +" call Decho("curindent<".curindent.">") +" call Decho("indentm1 <".indentm1.">") + + if curline !~ '/$' +" call Decho('regfile') + if a:dir == '[' && prvline != '' + norm! 0 + let nl = search('^'.indentm1.'[^|]','bWe') " search backwards from regular file +" call Decho("regfile srch back: ".nl) + elseif a:dir == ']' && nxtline != '' + norm! $ + let nl = search('^'.indentm1.'[^|]','We') " search forwards from regular file +" call Decho("regfile srch fwd: ".nl) + endif + + elseif a:dir == '[' && prvline != '' + norm! 0 + let curline= line(".") + let nl = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation +" call Decho("dir srch back ind: ".nl) + if nl != 0 + if line(".") == curline-1 + let nl= search('^'.indentm1.'[^|]','bWe') " search backwards from directory, indentation - 1 +" call Decho("dir srch back ind-1: ".nl) + endif + endif + + elseif a:dir == ']' && nxtline != '' + norm! $ + let curline = line(".") + let nl = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation +" call Decho("dir srch fwd ind: ".nl) + if nl != 0 + if line(".") == curline+1 + let nl= search('^'.indentm1.'[^|]','We') " search forwards from directory, indentation - 1 +" call Decho("dir srch fwd ind-1: ".nl) + endif + endif + + endif + +" call Dret("s:TreeListMove") +endfun + +" --------------------------------------------------------------------- +" s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2 +" The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function +" can't be called except via emenu. But due to locale, that menu line may not be called +" Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway. +fun! s:UpdateBuffersMenu() +" call Dfunc("s:UpdateBuffersMenu()") + if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' + try + silent emenu Buffers.Refresh\ menu + catch /^Vim\%((\a\+)\)\=:E/ + let v:errmsg= "" + silent call s:NetrwBMShow() + endtry + endif +" call Dret("s:UpdateBuffersMenu") +endfun + +" --------------------------------------------------------------------- +" s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2 +" Matching function to BufferWinVars() +fun! s:UseBufWinVars() +" call Dfunc("s:UseBufWinVars()") + if exists("b:netrw_liststyle") && !exists("w:netrw_liststyle") |let w:netrw_liststyle = b:netrw_liststyle |endif + if exists("b:netrw_bannercnt") && !exists("w:netrw_bannercnt") |let w:netrw_bannercnt = b:netrw_bannercnt |endif + if exists("b:netrw_method") && !exists("w:netrw_method") |let w:netrw_method = b:netrw_method |endif + if exists("b:netrw_prvdir") && !exists("w:netrw_prvdir") |let w:netrw_prvdir = b:netrw_prvdir |endif + if exists("b:netrw_explore_indx") && !exists("w:netrw_explore_indx") |let w:netrw_explore_indx = b:netrw_explore_indx |endif + if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif + if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif + if exists("b:netrw_explore_bufnr") && !exists("w:netrw_explore_bufnr") |let w:netrw_explore_bufnr = b:netrw_explore_bufnr |endif + if exists("b:netrw_explore_line") && !exists("w:netrw_explore_line") |let w:netrw_explore_line = b:netrw_explore_line |endif + if exists("b:netrw_explore_list") && !exists("w:netrw_explore_list") |let w:netrw_explore_list = b:netrw_explore_list |endif +" call Dret("s:UseBufWinVars") +endfun + +" --------------------------------------------------------------------- +" s:WinPath: {{{2 +fun! s:WinPath(path) +" call Dfunc("s:WinPath(path<".a:path.">)") + if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16")) + " remove trailing slash (Win95) + let path = substitute(a:path, '\(\\\|/\)$', '', 'g') + " remove escaped spaces + let path = substitute(path, '\ ', ' ', 'g') + " convert slashes to backslashes + let path = substitute(path, '/', '\', 'g') + else + let path= a:path + endif +" call Dret("s:WinPath <".path.">") + return path +endfun + +" --------------------------------------------------------------------- +" Settings Restoration: {{{2 +let &cpo= s:keepcpo +unlet s:keepcpo + +" ------------------------------------------------------------------------ +" Modelines: {{{1 +" vim:ts=8 fdm=marker diff --git a/netrwFileHandlers.vim b/netrwFileHandlers.vim new file mode 100644 index 00000000..1515b009 --- /dev/null +++ b/netrwFileHandlers.vim @@ -0,0 +1,361 @@ +" netrwFileHandlers: contains various extension-based file handlers for +" netrw's browsers' x command ("eXecute launcher") +" Author: Charles E. Campbell, Jr. +" Date: Sep 30, 2008 +" Version: 10 +" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" netrwFileHandlers.vim is provided *as is* and comes with no +" warranty of any kind, either expressed or implied. In no +" event will the copyright holder be liable for any damages +" resulting from the use of this software. +" +" Rom 6:23 (WEB) For the wages of sin is death, but the free gift of God {{{1 +" is eternal life in Christ Jesus our Lord. + +" --------------------------------------------------------------------- +" Load Once: {{{1 +if exists("g:loaded_netrwFileHandlers") || &cp + finish +endif +let g:loaded_netrwFileHandlers= "v10" +if v:version < 702 + echohl WarningMsg + echo "***warning*** this version of netrwFileHandlers needs vim 7.2" + echohl Normal + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" --------------------------------------------------------------------- +" netrwFileHandlers#Invoke: {{{1 +fun! netrwFileHandlers#Invoke(exten,fname) +" call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)") + let fname= a:fname + " list of supported special characters. Consider rcs,v --- that can be + " supported with a NFH_rcsCOMMAv() handler + if a:fname =~ '[@:,$!=\-+%?;~]' + let specials= { +\ '@' : 'AT', +\ ':' : 'COLON', +\ ',' : 'COMMA', +\ '$' : 'DOLLAR', +\ '!' : 'EXCLAMATION', +\ '=' : 'EQUAL', +\ '-' : 'MINUS', +\ '+' : 'PLUS', +\ '%' : 'PERCENT', +\ '?' : 'QUESTION', +\ ';' : 'SEMICOLON', +\ '~' : 'TILDE'} + let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge') +" call Decho('fname<'.fname.'> done with dictionary') + endif + + if a:exten != "" && exists("*NFH_".a:exten) + " support user NFH_*() functions +" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")') + exe "let ret= NFH_".a:exten.'("'.fname.'")' + elseif a:exten != "" && exists("*s:NFH_".a:exten) + " use builtin-NFH_*() functions +" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")') + exe "let ret= s:NFH_".a:exten.'("'.fname.'")' + endif + +" call Dret("netrwFileHandlers#Invoke 0 : ret=".ret) + return 0 +endfun + +" --------------------------------------------------------------------- +" s:NFH_html: handles html when the user hits "x" when the {{{1 +" cursor is atop a *.html file +fun! s:NFH_html(pagefile) +" call Dfunc("s:NFH_html(".a:pagefile.")") + + let page= substitute(a:pagefile,'^','file://','') + + if executable("mozilla") +" call Decho("executing !mozilla ".page) + exe "!mozilla ".shellescape(page,1) + elseif executable("netscape") +" call Decho("executing !netscape ".page) + exe "!netscape ".shellescape(page,1) + else +" call Dret("s:NFH_html 0") + return 0 + endif + +" call Dret("s:NFH_html 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_htm: handles html when the user hits "x" when the {{{1 +" cursor is atop a *.htm file +fun! s:NFH_htm(pagefile) +" call Dfunc("s:NFH_htm(".a:pagefile.")") + + let page= substitute(a:pagefile,'^','file://','') + + if executable("mozilla") +" call Decho("executing !mozilla ".page) + exe "!mozilla ".shellescape(page,1) + elseif executable("netscape") +" call Decho("executing !netscape ".page) + exe "!netscape ".shellescape(page,1) + else +" call Dret("s:NFH_htm 0") + return 0 + endif + +" call Dret("s:NFH_htm 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_jpg: {{{1 +fun! s:NFH_jpg(jpgfile) +" call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)") + + if executable("gimp") + exe "silent! !gimp -s ".shellescape(a:jpgfile,1) + elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE") +" call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'")) + exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:jpgfile,1) + else +" call Dret("s:NFH_jpg 0") + return 0 + endif + +" call Dret("s:NFH_jpg 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_gif: {{{1 +fun! s:NFH_gif(giffile) +" call Dfunc("s:NFH_gif(giffile<".a:giffile.">)") + + if executable("gimp") + exe "silent! !gimp -s ".shellescape(a:giffile,1) + elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE") + exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:giffile,1) + else +" call Dret("s:NFH_gif 0") + return 0 + endif + +" call Dret("s:NFH_gif 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_png: {{{1 +fun! s:NFH_png(pngfile) +" call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)") + + if executable("gimp") + exe "silent! !gimp -s ".shellescape(a:pngfile,1) + elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE") + exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pngfile,1) + else +" call Dret("s:NFH_png 0") + return 0 + endif + +" call Dret("s:NFH_png 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_pnm: {{{1 +fun! s:NFH_pnm(pnmfile) +" call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)") + + if executable("gimp") + exe "silent! !gimp -s ".shellescape(a:pnmfile,1) + elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE") + exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pnmfile,1) + else +" call Dret("s:NFH_pnm 0") + return 0 + endif + +" call Dret("s:NFH_pnm 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_bmp: visualize bmp files {{{1 +fun! s:NFH_bmp(bmpfile) +" call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)") + + if executable("gimp") + exe "silent! !gimp -s ".a:bmpfile + elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE") + exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:bmpfile,1) + else +" call Dret("s:NFH_bmp 0") + return 0 + endif + +" call Dret("s:NFH_bmp 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_pdf: visualize pdf files {{{1 +fun! s:NFH_pdf(pdf) +" call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)") + if executable("gs") + exe 'silent! !gs '.shellescape(a:pdf,1) + elseif executable("pdftotext") + exe 'silent! pdftotext -nopgbrk '.shellescape(a:pdf,1) + else +" call Dret("s:NFH_pdf 0") + return 0 + endif + +" call Dret("s:NFH_pdf 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_doc: visualize doc files {{{1 +fun! s:NFH_doc(doc) +" call Dfunc("s:NFH_doc(doc<".a:doc.">)") + + if executable("oowriter") + exe 'silent! !oowriter '.shellescape(a:doc,1) + redraw! + else +" call Dret("s:NFH_doc 0") + return 0 + endif + +" call Dret("s:NFH_doc 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_sxw: visualize sxw files {{{1 +fun! s:NFH_sxw(sxw) +" call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)") + + if executable("oowriter") + exe 'silent! !oowriter '.shellescape(a:sxw,1) + redraw! + else +" call Dret("s:NFH_sxw 0") + return 0 + endif + +" call Dret("s:NFH_sxw 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_xls: visualize xls files {{{1 +fun! s:NFH_xls(xls) +" call Dfunc("s:NFH_xls(xls<".a:xls.">)") + + if executable("oocalc") + exe 'silent! !oocalc '.shellescape(a:xls,1) + redraw! + else +" call Dret("s:NFH_xls 0") + return 0 + endif + +" call Dret("s:NFH_xls 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_ps: handles PostScript files {{{1 +fun! s:NFH_ps(ps) +" call Dfunc("s:NFH_ps(ps<".a:ps.">)") + if executable("gs") +" call Decho("exe silent! !gs ".a:ps) + exe "silent! !gs ".shellescape(a:ps,1) + redraw! + elseif executable("ghostscript") +" call Decho("exe silent! !ghostscript ".a:ps) + exe "silent! !ghostscript ".shellescape(a:ps,1) + redraw! + elseif executable("gswin32") +" call Decho("exe silent! !gswin32 ".shellescape(a:ps,1)) + exe "silent! !gswin32 ".shellescape(a:ps,1) + redraw! + else +" call Dret("s:NFH_ps 0") + return 0 + endif + +" call Dret("s:NFH_ps 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_eps: handles encapsulated PostScript files {{{1 +fun! s:NFH_eps(eps) +" call Dfunc("s:NFH_eps()") + if executable("gs") + exe "silent! !gs ".shellescape(a:eps,1) + redraw! + elseif executable("ghostscript") + exe "silent! !ghostscript ".shellescape(a:eps,1) + redraw! + elseif executable("ghostscript") + exe "silent! !ghostscript ".shellescape(a:eps,1) + redraw! + elseif executable("gswin32") + exe "silent! !gswin32 ".shellescape(a:eps,1) + redraw! + else +" call Dret("s:NFH_eps 0") + return 0 + endif +" call Dret("s:NFH_eps 0") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_fig: handles xfig files {{{1 +fun! s:NFH_fig(fig) +" call Dfunc("s:NFH_fig()") + if executable("xfig") + exe "silent! !xfig ".a:fig + redraw! + else +" call Dret("s:NFH_fig 0") + return 0 + endif + +" call Dret("s:NFH_fig 1") + return 1 +endfun + +" --------------------------------------------------------------------- +" s:NFH_obj: handles tgif's obj files {{{1 +fun! s:NFH_obj(obj) +" call Dfunc("s:NFH_obj()") + if has("unix") && executable("tgif") + exe "silent! !tgif ".a:obj + redraw! + else +" call Dret("s:NFH_obj 0") + return 0 + endif + +" call Dret("s:NFH_obj 1") + return 1 +endfun + +let &cpo= s:keepcpo +" --------------------------------------------------------------------- +" Modelines: {{{1 +" vim: fdm=marker diff --git a/netrwPlugin.vim b/netrwPlugin.vim new file mode 100644 index 00000000..73c5e2c6 --- /dev/null +++ b/netrwPlugin.vim @@ -0,0 +1,159 @@ +" netrwPlugin.vim: Handles file transfer and remote directory listing across a network +" PLUGIN SECTION +" Date: Aug 10, 2008 +" Maintainer: Charles E Campbell, Jr +" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim +" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided +" *as is* and comes with no warranty of any kind, either +" expressed or implied. By using this plugin, you agree that +" in no event will the copyright holder be liable for any damages +" resulting from the use of this software. +" +" But be doers of the Word, and not only hearers, deluding your own selves {{{1 +" (James 1:22 RSV) +" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +" Load Once: {{{1 +if &cp || exists("g:loaded_netrwPlugin") + finish +endif +let g:loaded_netrwPlugin = "v134" +if v:version < 702 + echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None + finish +endif +let s:keepcpo = &cpo +set cpo&vim + +" --------------------------------------------------------------------- +" Public Interface: {{{1 + +" Local Browsing: {{{2 +augroup FileExplorer + au! + au BufEnter * silent! call s:LocalBrowse(expand("")) + if has("win32") || has("win95") || has("win64") || has("win16") + au BufEnter .* silent! call s:LocalBrowse(expand("")) + endif +augroup END + +" Network Browsing Reading Writing: {{{2 +augroup Network + au! + if has("win32") || has("win95") || has("win64") || has("win16") + au BufReadCmd file://* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand(""))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand(""))) + else + au BufReadCmd file://* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand(""))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand(""))) + au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand(""),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand(""))) + endif + au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufReadPre ".fnameescape(expand(""))|exe '2Nread '.fnameescape(expand(""))|exe "silent doau BufReadPost ".fnameescape(expand("")) + au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau FileReadPre ".fnameescape(expand(""))|exe 'Nread '.fnameescape(expand(""))|exe "silent doau FileReadPost ".fnameescape(expand("")) + au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufWritePre ".fnameescape(expand(""))|exe 'Nwrite '.fnameescape(expand(""))|exe "silent doau BufWritePost ".fnameescape(expand("")) + au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau FileWritePre ".fnameescape(expand(""))|exe "'[,']".'Nwrite '.fnameescape(expand(""))|exe "silent doau FileWritePost ".fnameescape(expand("")) + try + au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("")) + catch /^Vim\%((\a\+)\)\=:E216/ + au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("")) + endtry +augroup END + +" Commands: :Nread, :Nwrite, :NetUserPass {{{2 +com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()call netrw#NetRead(,)call netrw#NetrwRestorePosn() +com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn(),call netrw#NetWrite()call netrw#NetrwRestorePosn() +com! -nargs=* NetUserPass call NetUserPass() +com! -nargs=* Nsource call netrw#NetrwSavePosn()call netrw#NetSource()call netrw#NetrwRestorePosn() + +" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 +com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(,0,0+0,) +com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(,1,0+0,) +com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(,1,2+0,) +com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(,1,4+0,) +com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(,0,6 ,) +com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,) +com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,) + +" Commands: NetrwSettings {{{2 +com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings() +com! -bang NetrwClean call netrw#NetrwClean(0) + +" Maps: +if !exists("g:netrw_nogx") && maparg('g','n') == "" + if !hasmapto('NetrwBrowseX') + nmap gx NetrwBrowseX + endif + nno NetrwBrowseX :call netrw#NetrwBrowseX(expand(""),0) +endif + +" --------------------------------------------------------------------- +" LocalBrowse: {{{2 +fun! s:LocalBrowse(dirname) + " unfortunate interaction -- debugging calls can't be used here; + " the BufEnter event causes triggering when attempts to write to + " the DBG buffer are made. +" echomsg "dirname<".a:dirname.">" + if has("amiga") + " The check against '' is made for the Amiga, where the empty + " string is the current directory and not checking would break + " things such as the help command. + if a:dirname != '' && isdirectory(a:dirname) + silent! call netrw#LocalBrowseCheck(a:dirname) + endif + elseif isdirectory(a:dirname) +" echomsg "dirname<".dirname."> isdir" + silent! call netrw#LocalBrowseCheck(a:dirname) + endif + " not a directory, ignore it +endfun + +" --------------------------------------------------------------------- +" NetrwStatusLine: {{{1 +fun! NetrwStatusLine() +" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") + if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list") + let &stl= s:netrw_explore_stl + if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif + if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif + return "" + else + return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen + endif +endfun + +" ------------------------------------------------------------------------ +" NetUserPass: set username and password for subsequent ftp transfer {{{1 +" Usage: :call NetUserPass() -- will prompt for userid and password +" :call NetUserPass("uid") -- will prompt for password +" :call NetUserPass("uid","password") -- sets global userid and password +fun! NetUserPass(...) + + " get/set userid + if a:0 == 0 +" call Dfunc("NetUserPass(a:0<".a:0.">)") + if !exists("g:netrw_uid") || g:netrw_uid == "" + " via prompt + let g:netrw_uid= input('Enter username: ') + endif + else " from command line +" call Dfunc("NetUserPass(a:1<".a:1.">) {") + let g:netrw_uid= a:1 + endif + + " get password + if a:0 <= 1 " via prompt +" call Decho("a:0=".a:0." case <=1:") + let g:netrw_passwd= inputsecret("Enter Password: ") + else " from command line +" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") + let g:netrw_passwd=a:2 + endif +" call Dret("NetUserPass") +endfun + +" ------------------------------------------------------------------------ +" Modelines And Restoration: {{{1 +let &cpo= s:keepcpo +unlet s:keepcpo +" vim:ts=8 fdm=marker diff --git a/netrwSettings.vim b/netrwSettings.vim new file mode 100644 index 00000000..daf9e21a --- /dev/null +++ b/netrwSettings.vim @@ -0,0 +1,207 @@ +" netrwSettings.vim: makes netrw settings simpler +" Date: Sep 03, 2008 +" Maintainer: Charles E Campbell, Jr +" Version: 13 +" Copyright: Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" netrwSettings.vim is provided *as is* and comes with no +" warranty of any kind, either expressed or implied. By using +" this plugin, you agree that in no event will the copyright +" holder be liable for any damages resulting from the use +" of this software. +" +" Mat 4:23 (WEB) Jesus went about in all Galilee, teaching in their {{{1 +" synagogues, preaching the gospel of the kingdom, and healing +" every disease and every sickness among the people. +" Load Once: {{{1 +if exists("g:loaded_netrwSettings") || &cp + finish +endif +let g:loaded_netrwSettings = "v13" +if v:version < 700 + echohl WarningMsg + echo "***warning*** this version of netrwSettings needs vim 7.0" + echohl Normal + finish +endif + +" --------------------------------------------------------------------- +" NetrwSettings: {{{1 +fun! netrwSettings#NetrwSettings() + " this call is here largely just to insure that netrw has been loaded + call netrw#NetrwSavePosn() + if !exists("g:loaded_netrw") + echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None + return + endif + + above wincmd s + enew + setlocal noswapfile bh=wipe + set ft=vim + file Netrw\ Settings + + " these variables have the following default effects when they don't + " exist (ie. have not been set by the user in his/her .vimrc) + if !exists("g:netrw_liststyle") + let g:netrw_liststyle= 0 + let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa" + endif + if !exists("g:netrw_silent") + let g:netrw_silent= 0 + endif + if !exists("g:netrw_use_nt_rcp") + let g:netrw_use_nt_rcp= 0 + endif + if !exists("g:netrw_ftp") + let g:netrw_ftp= 0 + endif + if !exists("g:netrw_ignorenetrc") + let g:netrw_ignorenetrc= 0 + endif + + put ='+ ---------------------------------------------' + put ='+ NetrwSettings: by Charles E. Campbell, Jr.' + put ='+ Press with cursor atop any line for help' + put ='+ ---------------------------------------------' + let s:netrw_settings_stop= line(".") + + put ='' + put ='+ Netrw Protocol Commands' + put = 'let g:netrw_dav_cmd = '.g:netrw_dav_cmd + put = 'let g:netrw_fetch_cmd = '.g:netrw_fetch_cmd + put = 'let g:netrw_ftp_cmd = '.g:netrw_ftp_cmd + put = 'let g:netrw_http_cmd = '.g:netrw_http_cmd + put = 'let g:netrw_rcp_cmd = '.g:netrw_rcp_cmd + put = 'let g:netrw_rsync_cmd = '.g:netrw_rsync_cmd + put = 'let g:netrw_scp_cmd = '.g:netrw_scp_cmd + put = 'let g:netrw_sftp_cmd = '.g:netrw_sftp_cmd + put = 'let g:netrw_ssh_cmd = '.g:netrw_ssh_cmd + let s:netrw_protocol_stop= line(".") + put = '' + + put ='+Netrw Transfer Control' + put = 'let g:netrw_cygwin = '.g:netrw_cygwin + put = 'let g:netrw_ftp = '.g:netrw_ftp + put = 'let g:netrw_ftpmode = '.g:netrw_ftpmode + put = 'let g:netrw_ignorenetrc = '.g:netrw_ignorenetrc + put = 'let g:netrw_sshport = '.g:netrw_sshport + put = 'let g:netrw_use_nt_rcp = '.g:netrw_use_nt_rcp + put = 'let g:netrw_win95ftp = '.g:netrw_win95ftp + let s:netrw_xfer_stop= line(".") + put ='' + put ='+ Netrw Messages' + put ='let g:netrw_use_errorwindow = '.g:netrw_use_errorwindow + + put = '' + put ='+ Netrw Browser Control' + put = 'let g:netrw_alto = '.g:netrw_alto + put = 'let g:netrw_altv = '.g:netrw_altv + put = 'let g:netrw_browse_split = '.g:netrw_browse_split + if exists("g:netrw_browsex_viewer") + put = 'let g:netrw_browsex_viewer = '.g:netrw_browsex_viewer + else + put = 'let g:netrw_browsex_viewer = (not defined)' + endif + put = 'let g:netrw_compress = '.g:netrw_compress + put = 'let g:netrw_cursorline = '.g:netrw_cursorline + let decompressline= line("$") + put ='let g:netrw_decompress...' + put = 'let g:netrw_dirhistmax = '.g:netrw_dirhistmax + put = 'let g:netrw_fastbrowse = '.g:netrw_fastbrowse + let fnameescline= line("$") + put = 'let g:netrw_fname_escape...' + put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject + put = 'let g:netrw_ftp_list_cmd = '.g:netrw_ftp_list_cmd + put = 'let g:netrw_ftp_sizelist_cmd = '.g:netrw_ftp_sizelist_cmd + put = 'let g:netrw_ftp_timelist_cmd = '.g:netrw_ftp_timelist_cmd + let globescline= line("$") + put ='let g:netrw_glob_escape...' + put = 'let g:netrw_hide = '.g:netrw_hide + put = 'let g:netrw_keepdir = '.g:netrw_keepdir + put = 'let g:netrw_list_cmd = '.g:netrw_list_cmd + put = 'let g:netrw_list_hide = '.g:netrw_list_hide + put = 'let g:netrw_liststyle = '.g:netrw_liststyle + put = 'let g:netrw_localcopycmd = '.g:netrw_localcopycmd + put = 'let g:netrw_local_mkdir = '.g:netrw_local_mkdir + put = 'let g:netrw_localmovecmd = '.g:netrw_localmovecmd + put = 'let g:netrw_local_rmdir = '.g:netrw_local_rmdir + put = 'let g:netrw_maxfilenamelen = '.g:netrw_maxfilenamelen + put = 'let g:netrw_menu = '.g:netrw_menu + put = 'let g:netrw_mkdir_cmd = '.g:netrw_mkdir_cmd + put = 'let g:netrw_preview = '.g:netrw_preview + put = 'let g:netrw_rename_cmd = '.g:netrw_rename_cmd + put = 'let g:netrw_retmap = '.g:netrw_retmap + put = 'let g:netrw_rm_cmd = '.g:netrw_rm_cmd + put = 'let g:netrw_rmdir_cmd = '.g:netrw_rmdir_cmd + put = 'let g:netrw_rmf_cmd = '.g:netrw_rmf_cmd + put = 'let g:netrw_silent = '.g:netrw_silent + put = 'let g:netrw_sort_by = '.g:netrw_sort_by + put = 'let g:netrw_sort_direction = '.g:netrw_sort_direction + put = 'let g:netrw_sort_options = '.g:netrw_sort_options + put = 'let g:netrw_sort_sequence = '.g:netrw_sort_sequence + put = 'let g:netrw_special_syntax = '.g:netrw_special_syntax + put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject + put = 'let g:netrw_scpport = '.g:netrw_scpport + put = 'let g:netrw_sshport = '.g:netrw_sshport + put = 'let g:netrw_timefmt = '.g:netrw_timefmt + let tmpfileescline= line("$") + put ='let g:netrw_tmpfile_escape...' + put = 'let g:netrw_use_noswf = '.g:netrw_use_noswf + put = 'let g:netrw_xstrlen = '.g:netrw_xstrlen + put = 'let g:netrw_winsize = '.g:netrw_winsize + + put ='' + put ='+ For help, place cursor on line and press ' + + 1d + silent %s/^+/"/e + res 99 + silent %s/= \([^0-9].*\)$/= '\1'/e + silent %s/= $/= ''/e + 1 + + call setline(decompressline,"let g:netrw_decompress = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1','')) + call setline(fnameescline, "let g:netrw_fname_escape = '".escape(g:netrw_fname_escape,"'")."'") + call setline(globescline, "let g:netrw_glob_escape = '".escape(g:netrw_glob_escape,"'")."'") + call setline(tmpfileescline,"let g:netrw_tmpfile_escape = '".escape(g:netrw_tmpfile_escape,"'")."'") + + set nomod + + nmap :call NetrwSettingHelp() + nnoremap :call NetrwSettingHelp() + let tmpfile= tempname() + exe 'au BufWriteCmd Netrw\ Settings silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod' +endfun + +" --------------------------------------------------------------------- +" NetrwSettingHelp: {{{2 +fun! NetrwSettingHelp() +" call Dfunc("NetrwSettingHelp()") + let curline = getline(".") + if curline =~ '=' + let varhelp = substitute(curline,'^\s*let ','','e') + let varhelp = substitute(varhelp,'\s*=.*$','','e') +" call Decho("trying help ".varhelp) + try + exe "he ".varhelp + catch /^Vim\%((\a\+)\)\=:E149/ + echo "***sorry*** no help available for <".varhelp.">" + endtry + elseif line(".") < s:netrw_settings_stop + he netrw-settings + elseif line(".") < s:netrw_protocol_stop + he netrw-externapp + elseif line(".") < s:netrw_xfer_stop + he netrw-variables + else + he netrw-browse-var + endif +" call Dret("NetrwSettingHelp") +endfun + +" --------------------------------------------------------------------- +" Modelines: {{{1 +" vim:ts=8 fdm=marker diff --git a/plans.fmf b/plans.fmf deleted file mode 100644 index 0b2564f3..00000000 --- a/plans.fmf +++ /dev/null @@ -1,35 +0,0 @@ -/tier1-internal: - plan: - import: - url: https://gitlab.com/redhat/centos-stream/tests/vim.git - name: /plans/tier1/internal - -/tier1-public: - plan: - import: - url: https://gitlab.com/redhat/centos-stream/tests/vim.git - name: /plans/tier1/public - -/tier2-tier3-internal: - plan: - import: - url: https://gitlab.com/redhat/centos-stream/tests/vim.git - name: /plans/tier2-tier3/internal - -/tier2-tier3-public: - plan: - import: - url: https://gitlab.com/redhat/centos-stream/tests/vim.git - name: /plans/tier2-tier3/public - -/others-internal: - plan: - import: - url: https://gitlab.com/redhat/centos-stream/tests/vim.git - name: /plans/others/internal - -/others-public: - plan: - import: - url: https://gitlab.com/redhat/centos-stream/tests/vim.git - name: /plans/others/public \ No newline at end of file diff --git a/sources b/sources index 14532821..10578951 100644 --- a/sources +++ b/sources @@ -1 +1,3 @@ -SHA512 (vim-9.1-2068.tar.bz2) = f19ae5898f7c388f437fe03af23d956ef66706c2a629a3389622e0b583d9bd831dd4e250badb181fceacb2b52b1f8a6bda4f72fbece122b5f5097153daf774f3 +35e04482f07c57221c9a751aaa3b8dac vim-7.2-extra.tar.gz +d8884786979e0e520c112faf2e176f05 vim-7.2-lang.tar.gz +556572edfda7a319541a3bc860c7fd36 vim-7.2.tar.bz2 diff --git a/spec-template b/spec-template new file mode 100644 index 00000000..a5363cc6 --- /dev/null +++ b/spec-template @@ -0,0 +1,42 @@ +Name: +Version: +Release: 1%{?dist} +Summary: + +Group: +License: +URL: +Source0: +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) + +BuildRequires: +Requires: + +%description + + +%prep +%setup -q + + +%build +%configure +make %{?_smp_mflags} + + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%defattr(-,root,root,-) +%doc + + + +%changelog diff --git a/spec-template.new b/spec-template.new deleted file mode 100644 index 2a558fb7..00000000 --- a/spec-template.new +++ /dev/null @@ -1,41 +0,0 @@ -# SPEC file overview: -# https://docs.fedoraproject.org/en-US/quick-docs/creating-rpm-packages/#con_rpm-spec-file-overview -# Fedora packaging guidelines: -# https://docs.fedoraproject.org/en-US/packaging-guidelines/ - - -Name: -Version: -Release: 0%{?dist} -Summary: - -License: -URL: -Source0: - -BuildRequires: -Requires: - -%description - - -%prep -%setup -q - - -%build -%configure -make %{?_smp_mflags} - - -%install -%make_install - - -%files -%doc -%license - - - -%changelog diff --git a/tar.vim b/tar.vim new file mode 100644 index 00000000..af6fbca2 --- /dev/null +++ b/tar.vim @@ -0,0 +1,500 @@ +" tar.vim: Handles browsing tarfiles +" AUTOLOAD PORTION +" Date: Aug 08, 2008 +" Version: 23 + modifications by Bram +" Maintainer: Charles E Campbell, Jr +" License: Vim License (see vim's :help license) +" +" Contains many ideas from Michael Toren's +" +" Copyright: Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" tar.vim and tarPlugin.vim are provided *as is* and comes +" with no warranty of any kind, either expressed or implied. +" By using this plugin, you agree that in no event will the +" copyright holder be liable for any damages resulting from +" the use of this software. + +" --------------------------------------------------------------------- +" Load Once: {{{1 +let s:keepcpo= &cpo +set cpo&vim +if &cp || exists("g:loaded_tar") || v:version < 700 + finish +endif +let g:loaded_tar= "v23b" +"call Decho("loading autoload/tar.vim") +if v:version < 701 || (v:version == 701 && !has("patch299")) + echoerr "(autoload/tar.vim) need vim v7.1 with patchlevel 299" +endif + +" --------------------------------------------------------------------- +" Default Settings: {{{1 +if !exists("g:tar_browseoptions") + let g:tar_browseoptions= "Ptf" +endif +if !exists("g:tar_readoptions") + let g:tar_readoptions= "OPxf" +endif +if !exists("g:tar_cmd") + let g:tar_cmd= "tar" +endif +if !exists("g:tar_writeoptions") + let g:tar_writeoptions= "uf" +endif + +if !exists("g:netrw_cygwin") + if has("win32") || has("win95") || has("win64") || has("win16") + if &shell =~ '\%(\\|\\)\%(\.exe\)\=$' + let g:netrw_cygwin= 1 + else + let g:netrw_cygwin= 0 + endif + else + let g:netrw_cygwin= 0 + endif +endif + +" set up shell quoting character +if !exists("g:tar_shq") + if exists("&shq") && &shq != "" + let g:tar_shq= &shq + elseif has("win32") || has("win95") || has("win64") || has("win16") + if exists("g:netrw_cygwin") && g:netrw_cygwin + let g:tar_shq= "'" + else + let g:tar_shq= '"' + endif + else + let g:tar_shq= "'" + endif +" call Decho("g:tar_shq<".g:tar_shq.">") +endif + +" ---------------- +" Functions: {{{1 +" ---------------- + +" --------------------------------------------------------------------- +" tar#Browse: {{{2 +fun! tar#Browse(tarfile) +" call Dfunc("tar#Browse(tarfile<".a:tarfile.">)") + let repkeep= &report + set report=10 + + " sanity checks + if !executable(g:tar_cmd) + redraw! + echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system' +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("tar#Browse") + return + endif + if !filereadable(a:tarfile) +" call Decho('a:tarfile<'.a:tarfile.'> not filereadable') + if a:tarfile !~# '^\a\+://' + " if its an url, don't complain, let url-handlers such as vim do its thing + redraw! + echohl Error | echo "***error*** (tar#Browse) File not readable<".a:tarfile.">" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + endif + let &report= repkeep +" call Dret("tar#Browse : file<".a:tarfile."> not readable") + return + endif + if &ma != 1 + set ma + endif + let w:tarfile= a:tarfile + + setlocal noswapfile + setlocal buftype=nofile + setlocal bufhidden=hide + setlocal nobuflisted + setlocal nowrap + set ft=tar + + " give header +" call Decho("printing header") + let lastline= line("$") + call setline(lastline+1,'" tar.vim version '.g:loaded_tar) + call setline(lastline+2,'" Browsing tarfile '.a:tarfile) + call setline(lastline+3,'" Select a file with cursor and press ENTER') + $put ='' + 0d + $ + + let tarfile= a:tarfile + if has("win32") && executable("cygpath") + " assuming cygwin + let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e') + endif + let curlast= line("$") + if tarfile =~# '\.\(gz\|tgz\)$' +" call Decho("1: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ") + exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " + elseif tarfile =~# '\.lrp' +" call Decho("2: exe silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ") + exe "silent r! cat -- ".s:Escape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - " + elseif tarfile =~# '\.bz2$' +" call Decho("3: exe silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ") + exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - " + else + if tarfile =~ '^\s*-' + " A file name starting with a dash may be taken as an option. Prepend ./ to avoid that. + let tarfile = substitute(tarfile, '-', './-', '') + endif +" call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1)) + exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".s:Escape(tarfile,1) + endif + if v:shell_error != 0 + redraw! + echohl WarningMsg | echo "***warning*** (tar#Browse) please check your g:tar_browseoptions<".g:tar_browseoptions.">" +" call inputsave()|call input("Press to continue")|call inputrestore() +" call Dret("tar#Browse : a:tarfile<".a:tarfile.">") + return + endif + if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)') + redraw! + echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + silent %d + let eikeep= &ei + set ei=BufReadCmd,FileReadCmd + exe "r ".fnameescape(a:tarfile) + let &ei= eikeep + 1d +" call Dret("tar#Browse : a:tarfile<".a:tarfile.">") + return + endif + + setlocal noma nomod ro + noremap :call TarBrowseSelect() + + let &report= repkeep +" call Dret("tar#Browse : w:tarfile<".w:tarfile.">") +endfun + +" --------------------------------------------------------------------- +" TarBrowseSelect: {{{2 +fun! s:TarBrowseSelect() +" call Dfunc("TarBrowseSelect() w:tarfile<".w:tarfile."> curfile<".expand("%").">") + let repkeep= &report + set report=10 + let fname= getline(".") +" call Decho("fname<".fname.">") + + if !exists("g:tar_secure") && fname =~ '^\s*-\|\s\+-' + redraw! + echohl WarningMsg | echo '***error*** (tar#BrowseSelect) rejecting tarfile member<'.fname.'> because of embedded "-"; See :help tar-options' +" call Dret('tar#BrowseSelect : rejecting tarfile member<'.fname.'> because of embedded "-"') + return + endif + + " sanity check + if fname =~ '^"' + let &report= repkeep +" call Dret("TarBrowseSelect") + return + endif + + " about to make a new window, need to use w:tarfile + let tarfile= w:tarfile + let curfile= expand("%") + if has("win32") && executable("cygpath") + " assuming cygwin + let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e') + endif + + new + if !exists("g:tar_nomax") || g:tar_nomax == 0 + wincmd _ + endif + let s:tblfile_{winnr()}= curfile + call tar#Read("tarfile:".tarfile.'::'.fname,1) + filetype detect + + let &report= repkeep +" call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">") +endfun + +" --------------------------------------------------------------------- +" tar#Read: {{{2 +fun! tar#Read(fname,mode) +" call Dfunc("tar#Read(fname<".a:fname.">,mode=".a:mode.")") + let repkeep= &report + set report=10 + let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','') + let fname = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','') + if has("win32") && executable("cygpath") + " assuming cygwin + let tarfile=substitute(system("cygpath -u ".s:Escape(tarfile,0)),'\n$','','e') + endif +" call Decho("tarfile<".tarfile.">") +" call Decho("fname<".fname.">") + + if fname =~ '\.gz$' && executable("zcat") + let decmp= "|zcat" + let doro = 1 + elseif fname =~ '\.bz2$' && executable("bzcat") + let decmp= "|bzcat" + let doro = 1 + else + let decmp="" + let doro = 0 + if fname =~ '\.gz$\|\.bz2$\|\.Z$\|\.zip$' + setlocal bin + endif + endif + + if exists("g:tar_secure") + let tar_secure= " -- " + else + let tar_secure= " " + endif + if tarfile =~# '\.\(gz\|tgz\)$' +" call Decho("5: exe silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.s:Escape(fname,1)) + exe "silent r! gzip -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp + elseif tarfile =~# '\.lrp$' +" call Decho("6: exe silent r! cat ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp) + exe "silent r! cat -- ".s:Escape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp + elseif tarfile =~# '\.bz2$' +" call Decho("7: exe silent r! bzip2 -d -c ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp) + exe "silent r! bzip2 -d -c -- ".s:Escape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.s:Escape(fname,1).decmp + else + if tarfile =~ '^\s*-' + " A file name starting with a dash may be taken as an option. Prepend ./ to avoid that. + let tarfile = substitute(tarfile, '-', './-', '') + endif +" call Decho("8: exe silent r! ".g:tar_cmd." -".g:tar_readoptions." "s:Escape(tarfile,1).tar_secure..s:Escape(fname,1).decmp) + exe "silent r! ".g:tar_cmd." -".g:tar_readoptions." ".s:Escape(tarfile,1).tar_secure.s:Escape(fname,1).decmp + endif + + if doro + " because the reverse process of compressing changed files back into the tarball is not currently supported + setlocal ro + endif + + let w:tarfile= a:fname + exe "file tarfile::".fnameescape(fname) + + " cleanup + 0d + set nomod + + let &report= repkeep +" call Dret("tar#Read : w:tarfile<".w:tarfile.">") +endfun + +" --------------------------------------------------------------------- +" tar#Write: {{{2 +fun! tar#Write(fname) +" call Dfunc("tar#Write(fname<".a:fname.">) w:tarfile<".w:tarfile."> tblfile_".winnr()."<".s:tblfile_{winnr()}.">") + let repkeep= &report + set report=10 + + if !exists("g:tar_secure") && a:fname =~ '^\s*-\|\s\+-' + redraw! + echohl WarningMsg | echo '***error*** (tar#Write) rejecting tarfile member<'.a:fname.'> because of embedded "-"; See :help tar-options' +" call Dret('tar#Write : rejecting tarfile member<'.fname.'> because of embedded "-"') + return + endif + + " sanity checks + if !executable(g:tar_cmd) + redraw! + echohl Error | echo '***error*** (tar#Browse) "'.g:tar_cmd.'" not available on your system' +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("tar#Write") + return + endif + if !exists("*mkdir") + redraw! + echohl Error | echo "***error*** (tar#Write) sorry, mkdir() doesn't work on your system" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("tar#Write") + return + endif + + let curdir= getcwd() + let tmpdir= tempname() +" call Decho("orig tempname<".tmpdir.">") + if tmpdir =~ '\.' + let tmpdir= substitute(tmpdir,'\.[^.]*$','','e') + endif +" call Decho("tmpdir<".tmpdir.">") + call mkdir(tmpdir,"p") + + " attempt to change to the indicated directory + try + exe "cd ".fnameescape(tmpdir) + catch /^Vim\%((\a\+)\)\=:E344/ + redraw! + echohl Error | echo "***error*** (tar#Write) cannot cd to temporary directory" | Echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("tar#Write") + return + endtry +" call Decho("current directory now: ".getcwd()) + + " place temporary files under .../_ZIPVIM_/ + if isdirectory("_ZIPVIM_") + call s:Rmdir("_ZIPVIM_") + endif + call mkdir("_ZIPVIM_") + cd _ZIPVIM_ +" call Decho("current directory now: ".getcwd()) + + let tarfile = substitute(w:tarfile,'tarfile:\(.\{-}\)::.*$','\1','') + let fname = substitute(w:tarfile,'tarfile:.\{-}::\(.*\)$','\1','') + + " handle compressed archives + if tarfile =~# '\.gz' + call system("gzip -d -- ".s:Escape(tarfile,0)) + let tarfile = substitute(tarfile,'\.gz','','e') + let compress= "gzip -- ".s:Escape(tarfile,0) +" call Decho("compress<".compress.">") + elseif tarfile =~# '\.tgz' + call system("gzip -d -- ".s:Escape(tarfile,0)) + let tarfile = substitute(tarfile,'\.tgz','.tar','e') + let compress= "gzip -- ".s:Escape(tarfile,0) + let tgz = 1 +" call Decho("compress<".compress.">") + elseif tarfile =~# '\.bz2' + call system("bzip2 -d -- ".s:Escape(tarfile,0)) + let tarfile = substitute(tarfile,'\.bz2','','e') + let compress= "bzip2 -- ".s:Escape(tarfile,0) +" call Decho("compress<".compress.">") + endif +" call Decho("tarfile<".tarfile.">") + + if v:shell_error != 0 + redraw! + echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".tarfile." with ".fname | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + else + +" call Decho("tarfile<".tarfile."> fname<".fname.">") + + if fname =~ '/' + let dirpath = substitute(fname,'/[^/]\+$','','e') + if executable("cygpath") + let dirpath = substitute(system("cygpath ".s:Escape(dirpath, 0)),'\n','','e') + endif + call mkdir(dirpath,"p") + endif + if tarfile !~ '/' + let tarfile= curdir.'/'.tarfile + endif + if tarfile =~ '^\s*-' + " A file name starting with a dash may be taken as an option. Prepend ./ to avoid that. + let tarfile = substitute(tarfile, '-', './-', '') + endif +" call Decho("tarfile<".tarfile."> fname<".fname.">") + + if exists("g:tar_secure") + let tar_secure= " -- " + else + let tar_secure= " " + endif + exe "w! ".fnameescape(fname) + if executable("cygpath") + let tarfile = substitute(system("cygpath ".s:Escape(tarfile,0)),'\n','','e') + endif + + " delete old file from tarfile +" call Decho("system(".g:tar_cmd." --delete -f ".s:Escape(tarfile,0)." -- ".s:Escape(fname,0).")") + call system(g:tar_cmd." --delete -f ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0)) + if v:shell_error != 0 + redraw! + echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + else + + " update tarfile with new file +" call Decho(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0)) + call system(g:tar_cmd." -".g:tar_writeoptions." ".s:Escape(tarfile,0).tar_secure.s:Escape(fname,0)) + if v:shell_error != 0 + redraw! + echohl Error | echo "***error*** (tar#Write) sorry, unable to update ".fnameescape(tarfile)." with ".fnameescape(fname) | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + elseif exists("compress") +" call Decho("call system(".compress.")") + call system(compress) + if exists("tgz") +" call Decho("rename(".tarfile.".gz,".substitute(tarfile,'\.tar$','.tgz','e').")") + call rename(tarfile.".gz",substitute(tarfile,'\.tar$','.tgz','e')) + endif + endif + endif + + " support writing tarfiles across a network + if s:tblfile_{winnr()} =~ '^\a\+://' +" call Decho("handle writing <".tarfile."> across network to <".s:tblfile_{winnr()}.">") + let tblfile= s:tblfile_{winnr()} + 1split|enew + let binkeep= &binary + let eikeep = &ei + set binary ei=all + exe "e! ".fnameescape(tarfile) + call netrw#NetWrite(tblfile) + let &ei = eikeep + let &binary = binkeep + q! + unlet s:tblfile_{winnr()} + endif + endif + + " cleanup and restore current directory + cd .. + call s:Rmdir("_ZIPVIM_") + exe "cd ".fnameescape(curdir) + setlocal nomod + + let &report= repkeep +" call Dret("tar#Write") +endfun + +" --------------------------------------------------------------------- +" Rmdir: {{{2 +fun! s:Rmdir(fname) +" call Dfunc("Rmdir(fname<".a:fname.">)") + if has("unix") + call system("/bin/rm -rf -- ".s:Escape(a:fname,0)) + elseif has("win32") || has("win95") || has("win64") || has("win16") + if &shell =~? "sh$" + call system("/bin/rm -rf -- ".s:Escape(a:fname,0)) + else + call system("del /S ".s:Escape(a:fname,0)) + endif + endif +" call Dret("Rmdir") +endfun + +" --------------------------------------------------------------------- +" s:Escape: {{{2 +fun s:Escape(name,isfilt) + " shellescape() was added by patch 7.0.111 + if exists("*shellescape") + if a:isfilt + let qnameq= shellescape(a:name,1) + else + let qnameq= shellescape(a:name) + endif + else + let qnameq= g:tar_shq . a:name . g:tar_shq + endif + return qnameq +endfun + +" --------------------------------------------------------------------- +" Modelines And Restoration: {{{1 +let &cpo= s:keepcpo +unlet s:keepcpo +" vim:ts=8 fdm=marker diff --git a/vi_help.txt b/vi_help.txt new file mode 100644 index 00000000..23e5fe9e --- /dev/null +++ b/vi_help.txt @@ -0,0 +1,126 @@ +*vi-help.txt* For Vim version 7.1. Last change: 2008 Mar 03 + + VIM - minimal help file + (NOTE: This is a minimal help file and many tags won't work. Use 'vim' or + 'gvim' to read the complete help docs.) + k + Move around: Use the cursor keys, or "h" to go left, h l + "j" to go down, "k" to go up, "l" to go right. j +Close this window: Use ":q". + Get out of Vim: Use ":qa!" (careful, all changes are lost!). + +Jump to a subject: Position the cursor on a tag between |bars| and hit CTRL-]. + Jump back: Type CTRL-T or CTRL-O (repeat to go further back). + +Get specific help: It is possible to go directly to whatever you want help + on, by giving an argument to the ":help" command |:help|. + It is possible to further specify the context: + *vi-help-context* + WHAT PREPEND EXAMPLE ~ + Normal mode command (nothing) :help x + Insert mode command i_ :help i_ + Command-line command : :help :quit + Command-line editing c_ :help c_ + Vim command argument - :help -r + Option ' :help 'textwidth' + Search for help: Type ":help word", then hit CTRL-D to see matching + help entries for "word". + +VIM stands for Vi IMproved. Most of VIM was made by Bram Moolenaar, but only +through the help of many others. See |vi-credits|. +------------------------------------------------------------------------------ +3. Credits *vi-credits* *vi-author* *vi-Bram* *vi-Moolenaar* + +Most of Vim was written by Bram Moolenaar . + +Parts of the documentation come from several Vi manuals, written by: + W.N. Joy + Alan P.W. Hewett + Mark Horton + +The Vim editor is based on Stevie and includes (ideas from) other software, +worked on by the people mentioned here. Other people helped by sending me +patches, suggestions and giving feedback about what is good and bad in Vim. + +Vim would never have become what it is now, without the help of these people! + + Ron Aaron Win32 GUI changes + Zoltan Arpadffy work on VMS port + Tony Andrews Stevie + Gert van Antwerpen changes for DJGPP on MS-DOS + Berkeley DB(3) ideas for swap file implementation + Keith Bostic Nvi + Walter Briscoe Makefile updates, various patches + Ralf Brown SPAWNO library for MS-DOS + Robert Colon many useful remarks + Marcin Dalecki GTK+ GUI port, toolbar icons, gettext() + Kayhan Demirel sent me news in Uganda + Chris & John Downey xvi (ideas for multi-windows version) + Henk Elbers first VMS port + Daniel Elstner GTK+ 2 port + Eric Fischer Mac port, 'cindent', and other improvements + Benji Fisher Answering lots of user questions + Bill Foster Athena GUI port + Loic Grenie xvim (ideas for multi windows version) + Sven Guckes Vim promotor and previous WWW page maintainer + Darren Hiebert Exuberant ctags + Jason Hildebrand GTK+ 2 port + Bruce Hunsaker improvements for VMS port + Andy Kahn Cscope support, GTK+ GUI port + Oezguer Kesim Maintainer of Vim Mailing Lists + Axel Kielhorn work on the Macintosh port + Steve Kirkendall Elvis + Roger Knobbe original port to Windows NT + Sergey Laskavy Vim's help from Moscow + Felix von Leitner Maintainer of Vim Mailing Lists + David Leonard Port of Python extensions to Unix + Avner Lottem Edit in right-to-left windows + Flemming Madsen X11 client-server, various features and patches + MicroSoft Gave me a copy of DevStudio to compile Vim with + Paul Moore Python interface extensions, many patches + Katsuhito Nagano Work on multi-byte versions + Sung-Hyun Nam Work on multi-byte versions + Vince Negri Win32 GUI and generic console enhancements + Steve Oualline Author of the first Vim book |frombook| + George V. Reilly Win32 port, Win32 GUI start-off + Stephen Riehm bug collector + Stefan Roemer various patches and help to users + Ralf Schandl IBM OS/390 port + Olaf Seibert DICE and BeBox version, regexp improvements + Mortaza Shiran Farsi patches + Peter da Silva termlib + Paul Slootman OS/2 port + Henry Spencer regular expressions + Dany St-Amant Macintosh port + Tim Thompson Stevie + G. R. (Fred) Walter Stevie + Sven Verdoolaege Perl interface + Robert Webb Command-line completion, GUI versions, and + lots of patches + Ingo Wilken Tcl interface + Mike Williams PostScript printing + Juergen Weigert Lattice version, AUX improvements, UNIX and + MS-DOS ports, autoconf + Stefan 'Sec' Zehl Maintainer of vim.org + +I wish to thank all the people that sent me bug reports and suggestions. The +list is too long to mention them all here. Vim would not be the same without +the ideas from all these people: They keep Vim alive! + + +------------------------------------------------------------------------------ + *vi-doc-file-list* *V_ct* +BASIC: +|copying| About copyrights +|iccf| Helping poor children in Uganda +|sponsor| Sponsor Vim development, become a registered Vim user +|www| Vim on the World Wide Web +|bugs| Where to send bug reports + + +------------------------------------------------------------------------------ + +Now that you've jumped here with CTRL-] or a double mouse click, you can use +CTRL-T, CTRL-O, g, or to go back to where you were. +------------------------------------------------------------------------------ + vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl: diff --git a/vi_wrapper b/vi_wrapper deleted file mode 100644 index 1bb1aece..00000000 --- a/vi_wrapper +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/sh - -# run vim if: -# - 'vi' command is used and 'vim' binary is available -# - 'vim' command is used -# NOTE: Set up a local alias if you want vim -> vi functionality. We will not -# do it globally, because it messes up with available startup options (see -# ':help starting', 'vi' is not capable of '-d'). The introducing an environment -# variable, which an user must set to get the feature, will do the same trick -# as setting an alias (needs user input, does not work with sudo), so it is left -# on user whether he decides to use an alias: -# -# alias vim=vi -# -# in bashrc file. - -if test -f /usr/bin/vim -then - exec /usr/bin/vim "$@" -fi - -# run vi otherwise -exec /usr/libexec/vi "$@" diff --git a/view_wrapper b/view_wrapper deleted file mode 100644 index 9e8d7207..00000000 --- a/view_wrapper +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/sh - -# run vim -R if available -if test -f /usr/bin/vim -then - exec /usr/bin/vim -R "$@" -fi - -# run vi otherwise -exec /usr/libexec/vi -R "$@" diff --git a/vim-6.1-rh3.patch b/vim-6.1-rh3.patch new file mode 100644 index 00000000..5d3b8cfc --- /dev/null +++ b/vim-6.1-rh3.patch @@ -0,0 +1,11 @@ +--- vim61/runtime/scripts.vim.rh3 2003-02-12 13:00:49.000000000 +0100 ++++ vim61/runtime/scripts.vim 2003-02-12 13:01:37.000000000 +0100 +@@ -22,6 +22,8 @@ + endif + endif + ++set formatoptions=tcql nocindent comments& ++ + " Line continuation is used here, remove 'C' from 'cpoptions' + let s:cpo_save = &cpo + set cpo&vim diff --git a/vim-6.2-specsyntax.patch b/vim-6.2-specsyntax.patch new file mode 100644 index 00000000..334d8a17 --- /dev/null +++ b/vim-6.2-specsyntax.patch @@ -0,0 +1,32 @@ +--- vim62d/runtime/syntax/spec.vim.highlite 2003-05-13 14:48:55.000000000 +0200 ++++ vim62d/runtime/syntax/spec.vim 2003-05-13 14:52:51.000000000 +0200 +@@ -38,7 +38,7 @@ + syn match specManpageFile '[a-zA-Z]\.1' + + "Day, Month and most used license acronyms +-syn keyword specLicense contained GPL LGPL BSD MIT GNU ++syn keyword specLicense contained GPL LGPL BSD MIT GNU distributable + syn keyword specWeekday contained Mon Tue Wed Thu Fri Sat Sun + syn keyword specMonth contained Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec + syn keyword specMonth contained January February March April May June July August September October November December +@@ -61,9 +61,9 @@ + + "specComands + syn match specConfigure contained '\./configure' +-syn match specTarCommand contained '\ ++" Taylor Venable + " Neil Bird +-" $Author: vimboss $ +-" $Date: 2007/05/05 18:02:22 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $ ++" Ned Okie ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $ + " History: 24.05.2006 MK Unified Headers + " 26.05.2006 MK ' should not be in iskeyword. + " 16.07.2006 MK Ada-Mode as vim-ball +@@ -17,6 +19,10 @@ + " 05.11.2006 MK Bram suggested not to use include protection for + " autoload + " 05.11.2006 MK Bram suggested to save on spaces ++" 08.07.2007 TV fix mapleader problems. ++" 09.05.2007 MK Session just won't work no matter how much ++" tweaking is done ++" 19.09.2007 NO still some mapleader problems + " Help Page: ft-ada-functions + "------------------------------------------------------------------------------ + +@@ -425,7 +431,15 @@ + execute '!ctags --excmd=number ' . l:Filename + endfunction ada#Create_Tags + +-function ada#Switch_Session (New_Session) "{{{1 ++" Section: ada#Switch_Session {{{1 ++" ++function ada#Switch_Session (New_Session) ++ " ++ " you should not save to much date into the seession since they will ++ " be sourced ++ " ++ set sessionoptions=buffers,curdir,folds,globals,resize,slash,tabpages,tabpages,unix,winpos,winsize ++ + if a:New_Session != v:this_session + " + " We actualy got a new session - otherwise there +@@ -437,18 +451,23 @@ + + let v:this_session = a:New_Session + +- if filereadable (v:this_session) +- execute 'source ' . v:this_session +- endif ++ "if filereadable (v:this_session) ++ "execute 'source ' . v:this_session ++ "endif + + augroup ada_session + autocmd! + autocmd VimLeavePre * execute 'mksession! ' . v:this_session + augroup END ++ " ++ "if exists ("g:Tlist_Auto_Open") && g:Tlist_Auto_Open ++ "TlistOpen ++ "endif ++ + endif + + return +-endfunction ada#Switch_Session "}}}1 ++endfunction ada#Switch_Session + + " Section: GNAT Pretty Printer folding {{{1 + " +@@ -546,18 +565,23 @@ + \ a:Keys . + \" :" . a:Command . "" + else ++ if exists("g:mapleader") ++ let l:leader = g:mapleader ++ else ++ let l:leader = '\' ++ endif + execute + \ "50amenu " . + \ "Ada." . escape(a:Text, ' ') . +- \ "" . escape(g:mapleader . "a" . a:Keys , '\') . ++ \ "" . escape(l:leader . "a" . a:Keys , '\') . + \ " :" . a:Command . "" + execute + \ "nnoremap " . +- \ escape(g:mapleader . "a" . a:Keys , '\') . ++ \ escape(l:leader . "a" . a:Keys , '\') . + \" :" . a:Command + execute + \ "inoremap " . +- \ escape(g:mapleader . "a" . a:Keys , '\') . ++ \ escape(l:leader . "a" . a:Keys , '\') . + \" :" . a:Command + endif + return +@@ -566,10 +590,15 @@ + " Section: ada#Map_Popup {{{2 + " + function ada#Map_Popup (Text, Keys, Command) ++ if exists("g:mapleader") ++ let l:leader = g:mapleader ++ else ++ let l:leader = '\' ++ endif + execute + \ "50amenu " . + \ "PopUp." . escape(a:Text, ' ') . +- \ "" . escape(g:mapleader . "a" . a:Keys , '\') . ++ \ "" . escape(l:leader . "a" . a:Keys , '\') . + \ " :" . a:Command . "" + + call ada#Map_Menu (a:Text, a:Keys, a:Command) +diff -urN vim71/runtime/autoload/decada.vim vim71_ada/runtime/autoload/decada.vim +--- vim71/runtime/autoload/decada.vim 2007-05-05 19:25:32.000000000 +0200 ++++ vim71_ada/runtime/autoload/decada.vim 2008-01-16 16:46:41.000000000 +0100 +@@ -1,14 +1,14 @@ + "------------------------------------------------------------------------------ + " Description: Vim Ada/Dec Ada compiler file + " Language: Ada (Dec Ada) +-" $Id: decada.vim,v 1.1 2007/05/05 17:25:32 vimboss Exp $ ++" $Id: decada.vim 774 2007-09-17 09:11:59Z krischik $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: vimboss $ +-" $Date: 2007/05/05 17:25:32 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/decada.vim $ ++" Maintainer: Martin Krischik ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/decada.vim $ + " History: 21.07.2006 MK New Dec Ada + " 15.10.2006 MK Bram's suggestion for runtime integration + " 05.11.2006 MK Bram suggested not to use include protection for +@@ -45,7 +45,7 @@ + call ada#Switch_Session (a:1) + elseif argc() == 0 && strlen (v:servername) > 0 + call ada#Switch_Session ( +- \ expand('~')[0:-2] . ".vimfiles.session]" . ++ \ expand('~')[0:-2] . ".vimfiles.session]decada_" . + \ v:servername . ".vim") + endif + return +diff -urN vim71/runtime/autoload/gnat.vim vim71_ada/runtime/autoload/gnat.vim +--- vim71/runtime/autoload/gnat.vim 2007-05-05 20:18:20.000000000 +0200 ++++ vim71_ada/runtime/autoload/gnat.vim 2008-01-16 16:46:46.000000000 +0100 +@@ -1,14 +1,15 @@ + "------------------------------------------------------------------------------ + " Description: Vim Ada/GNAT compiler file + " Language: Ada (GNAT) +-" $Id: gnat.vim,v 1.1 2007/05/05 18:18:20 vimboss Exp $ ++" $Id: gnat.vim 774 2007-09-17 09:11:59Z krischik $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: vimboss $ +-" $Date: 2007/05/05 18:18:20 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/gnat.vim $ ++" Maintainer: Martin Krischi k ++" Ned Okie ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/gnat.vim $ + " History: 24.05.2006 MK Unified Headers + " 16.07.2006 MK Ada-Mode as vim-ball + " 05.08.2006 MK Add session support +@@ -16,6 +17,7 @@ + " 05.11.2006 MK Bram suggested not to use include protection for + " autoload + " 05.11.2006 MK Bram suggested to save on spaces ++" 19.09.2007 NO use project file only when there is a project + " Help Page: compiler-gnat + "------------------------------------------------------------------------------ + +@@ -71,13 +73,19 @@ + execute 'mksession! ' . v:this_session + endif + +- if strlen (self.Project_File) > 0 +- call ada#Switch_Session ( +- \ expand('~') . "/vimfiles/session/" . +- \ fnamemodify (self.Project_File, ":t:r") . ".vim") +- else +- call ada#Switch_Session ('') +- endif ++ "if strlen (self.Project_File) > 0 ++ "if has("vms") ++ "call ada#Switch_Session ( ++ "\ expand('~')[0:-2] . ".vimfiles.session]gnat_" . ++ "\ fnamemodify (self.Project_File, ":t:r") . ".vim") ++ "else ++ "call ada#Switch_Session ( ++ "\ expand('~') . "/vimfiles/session/gnat_" . ++ "\ fnamemodify (self.Project_File, ":t:r") . ".vim") ++ "endif ++ "else ++ "call ada#Switch_Session ('') ++ "endif + + return + endfunction gnat#Set_Project_File " }}}1 +diff -urN vim71/runtime/compiler/decada.vim vim71_ada/runtime/compiler/decada.vim +--- vim71/runtime/compiler/decada.vim 2007-05-05 20:09:54.000000000 +0200 ++++ vim71_ada/runtime/compiler/decada.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -1,16 +1,17 @@ + "------------------------------------------------------------------------------ + " Description: Vim Ada/Dec Ada compiler file + " Language: Ada (Dec Ada) +-" $Id: decada.vim,v 1.1 2007/05/05 18:09:54 vimboss Exp $ ++" $Id: decada.vim 774 2007-09-17 09:11:59Z krischik $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: vimboss $ +-" $Date: 2007/05/05 18:09:54 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/decada.vim $ ++" Maintainer: Martin Krischik ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/decada.vim $ + " History: 21.07.2006 MK New Dec Ada + " 15.10.2006 MK Bram's suggestion for runtime integration ++" 08.09.2006 MK Correct double load protection. + " Help Page: compiler-decada + "------------------------------------------------------------------------------ + +@@ -24,6 +25,13 @@ + + if !exists("g:decada") + let g:decada = decada#New () ++ ++ call ada#Map_Menu ( ++ \'Dec Ada.Build', ++ \'', ++ \'call decada.Make ()') ++ ++ call g:decada.Set_Session () + endif + + if exists(":CompilerSet") != 2 +@@ -33,16 +41,9 @@ + command -nargs=* CompilerSet setlocal + endif + +-call g:decada.Set_Session () +- + execute "CompilerSet makeprg=" . escape (g:decada.Make_Command, ' ') + execute "CompilerSet errorformat=" . escape (g:decada.Error_Format, ' ') + +-call ada#Map_Menu ( +- \'Dec Ada.Build', +- \'', +- \'call decada.Make ()') +- + finish " 1}}} + + "------------------------------------------------------------------------------ +diff -urN vim71/runtime/compiler/gnat.vim vim71_ada/runtime/compiler/gnat.vim +--- vim71/runtime/compiler/gnat.vim 2007-05-05 20:04:19.000000000 +0200 ++++ vim71_ada/runtime/compiler/gnat.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -1,17 +1,19 @@ + "------------------------------------------------------------------------------ + " Description: Vim Ada/GNAT compiler file + " Language: Ada (GNAT) +-" $Id: gnat.vim,v 1.1 2007/05/05 18:04:19 vimboss Exp $ ++" $Id: gnat.vim 774 2007-09-17 09:11:59Z krischik $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: vimboss $ +-" $Date: 2007/05/05 18:04:19 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/gnat.vim $ ++" Maintainer: Martin Krischi k ++" Ned Okie ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/gnat.vim $ + " History: 24.05.2006 MK Unified Headers + " 16.07.2006 MK Ada-Mode as vim-ball + " 15.10.2006 MK Bram's suggestion for runtime integration ++" 19.09.2007 NO use project file only when there is a project + " Help Page: compiler-gnat + "------------------------------------------------------------------------------ + +@@ -46,6 +48,8 @@ + \ 'GNAT.Set Projectfile\.\.\.', + \ ':SetProject', + \ 'call gnat.Set_Project_File ()') ++ ++ call g:gnat.Set_Session () + endif + + if exists(":CompilerSet") != 2 +@@ -55,8 +59,6 @@ + command -nargs=* CompilerSet setlocal + endif + +-call g:gnat.Set_Session () +- + execute "CompilerSet makeprg=" . escape (g:gnat.Get_Command('Make'), ' ') + execute "CompilerSet errorformat=" . escape (g:gnat.Error_Format, ' ') + +diff -urN vim71/runtime/doc/ft_ada.txt vim71_ada/runtime/doc/ft_ada.txt +--- vim71/runtime/doc/ft_ada.txt 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/doc/ft_ada.txt 2008-01-16 16:37:03.000000000 +0100 +@@ -0,0 +1,516 @@ ++*ft_ada.txt* Ada File type Plug-ins Last change: 2007 Seb 17 ++ ++ ++ ADA FILE TYPE PLUG-INS REFERENCE MANUAL~ ++ ++ADA *ada.vim* ++ ++1. Syntax Highlighting |ft-ada-syntax| ++2. Plug-in |ft-ada-plugin| ++3. Omni Completion |ft-ada-omni| ++ 3.1 Omni Completion with "gnat xref" |gnat-xref| ++ 3.2 Omni Completion with "ctags" |ada-ctags| ++4. Compiler Support |ada-compiler| ++ 4.1 GNAT |compiler-gnat| ++ 4.1 Dec Ada |compiler-decada| ++5. References |ada-reference| ++ 5.1 Options |ft-ada-options| ++ 5.2 Functions |ft-ada-functions| ++ 5.3 Commands |ft-ada-commands| ++ 5.4 Variables |ft-ada-variables| ++ 5.5 Constants |ft-ada-contstants| ++8. Extra Plug-ins |ada-extra-plugins| ++ ++============================================================================== ++1. Syntax Highlighting ~ ++ *ft-ada-syntax* ++ ++This mode is designed for the 2005 edition of Ada ("Ada 2005"), which includes ++support for objected-programming, protected types, and so on. It handles code ++written for the original Ada language ("Ada83", "Ada87", "Ada95") as well, ++though code which uses Ada 2005-only keywords will be wrongly colored (such ++code should be fixed anyway). For more information about Ada, see ++http://www.adapower.com. ++ ++The Ada mode handles a number of situations cleanly. ++ ++For example, it knows that the "-" in "-5" is a number, but the same character ++in "A-5" is an operator. Normally, a "with" or "use" clause referencing ++another compilation unit is coloured the same way as C's "#include" is coloured. ++If you have "Conditional" or "Repeat" groups coloured differently, then "end ++if" and "end loop" will be coloured as part of those respective groups. ++ ++You can set these to different colours using vim's "highlight" command (e.g., ++to change how loops are displayed, enter the command ":hi Repeat" followed by ++the colour specification; on simple terminals the colour specification ++ctermfg=White often shows well). ++ ++There are several options you can select in this Ada mode. See|ft-ada-options| ++for a complete list. ++ ++To enable them, assign a value to the option. For example, to turn one on: ++ > ++ > let g:ada_standard_types = 1 ++> ++To disable them use ":unlet". Example: ++> ++ > unlet g:ada_standard_types ++ ++You can just use ":" and type these into the command line to set these ++temporarily before loading an Ada file. You can make these option settings ++permanent by adding the "let" command(s), without a colon, to your "~/.vimrc" ++file. ++ ++Even on a slow (90Mhz) PC this mode works quickly, but if you find the ++performance unacceptable, turn on |g:ada_withuse_ordinary|. ++ ++Syntax folding instructions (|fold-syntax|) are added when |g:ada_folding| is ++set. ++ ++============================================================================== ++2. File type Plug-in ~ ++ *ft-ada-indent* *ft-ada-plugin* ++ ++The Ada plug-in provides support for: ++ ++ - auto indenting (|indent.txt|) ++ - insert completion (|i_CTRL-N|) ++ - user completion (|i_CTRL-X_CTRL-U|) ++ - tag searches (|tagsrch.txt|) ++ - Quick Fix (|quickfix.txt|) ++ - backspace handling (|'backspace'|) ++ - comment handling (|'comments'|, |'commentstring'|) ++ ++The plug-in only activates the features of the Ada mode whenever an Ada ++files is opened and add adds Ada related entries to the main and pop-up menu. ++ ++============================================================================== ++3. Omni Completion ~ ++ *ft-ada-omni* ++ ++The Ada omni-completions (|i_CTRL-X_CTRL-O|) uses tags database created either ++by "gnat xref -v" or the "exuberant Ctags (http://ctags.sourceforge.net). The ++complete function will automatically detect which tool was used to create the ++tags file. ++ ++------------------------------------------------------------------------------ ++3.1 Omni Completion with "gnat xref" ~ ++ *gnat-xref* ++ ++GNAT XREF uses the compiler internal information (ali-files) to produce the ++tags file. This has the advantage to be 100% correct and the option of deep ++nested analysis. However the code must compile, the generator is quite ++slow and the created tags file contains only the basic Ctags information for ++each entry - not enough for some of the more advanced Vim code browser ++plug-ins. ++ ++NOTE: "gnat xref -v" is very tricky to use as it has almost no diagnostic ++ output - If nothing is printed then usually the parameters are wrong. ++ Here some important tips: ++ ++1) You need to compile your code first and use the "-aO" option to point to ++ your .ali files. ++2) "gnat xref -v ../Include/adacl.ads" won't work - use the "gnat xref -v ++ -aI../Include adacl.ads" instead. ++3) "gnat xref -v -aI../Include *.ad?" won't work - use "cd ../Include" and ++ then "gnat xref -v *.ad?" ++4) Project manager support is completely broken - don't even try "gnat xref ++ -Padacl.gpr". ++5) VIM is faster when the tags file is sorted - use "sort --unique ++ --ignore-case --output=tags tags" . ++6) Remember to insert "!_TAG_FILE_SORTED 2 %sort ui" as first line to mark ++ the file assorted. ++ ++------------------------------------------------------------------------------ ++3.2 Omni Completion with "ctags"~ ++ *ada-ctags* ++ ++Exuberant Ctags uses it's own multi-language code parser. The parser is quite ++fast, produces a lot of extra informations (hence the name "Exuberant Ctags") ++and can run on files which currently do not compile. ++ ++There are also lots of other Vim-tools which use exuberant Ctags. ++ ++You will need to install a version of the Exuberant Ctags which has Ada ++support patched in. Such a version is available from the GNU Ada Project ++(http://gnuada.sourceforge.net). ++ ++The Ada parser for Exuberant Ctags is fairly new - don't expect complete ++support yet. ++ ++============================================================================== ++4. Compiler Support ~ ++ *ada-compiler* ++ ++The Ada mode supports more then one Ada compiler and will automatically load the ++compiler set in|g:ada_default_compiler|whenever an Ada source is opened. The ++provided compiler plug-ins are split into the actual compiler plug-in and a ++collection of support functions and variables. This allows the easy ++development of specialized compiler plug-ins fine tuned to your development ++environment. ++ ++------------------------------------------------------------------------------ ++4.1 GNAT ~ ++ *compiler-gnat* ++ ++GNAT is the only free (beer and speech) Ada compiler available. There are ++several version available which differentiate in the licence terms used. ++ ++The GNAT compiler plug-in will perform a compile on pressing and then ++immediately shows the result. You can set the project file to be used by ++setting: ++ > ++ > call g:gnat.Set_Project_File ('my_project.gpr') ++ ++Setting a project file will also create a Vim session (|views-sessions|) so - ++like with the GPS - opened files, window positions etc. will remembered ++separately for all projects. ++ ++ *gnat_members* ++GNAT OBJECT ~ ++ ++ *g:gnat.Make()* ++g:gnat.Make() ++ Calls|g:gnat.Make_Command|and displays the result inside a ++ |quickfix| window. ++ ++ *g:gnat.Pretty()* ++g:gnat.Pretty() ++ Calls|g:gnat.Pretty_Command| ++ ++ *g:gnat.Find()* ++g:gnat.Find() ++ Calls|g:gnat.Find_Command| ++ ++ *g:gnat.Tags()* ++g:gnat.Tags() ++ Calls|g:gnat.Tags_Command| ++ ++ *g:gnat.Set_Project_File()* ++g:gnat.Set_Project_File([{file}]) ++ Set gnat project file and load associated session. An open ++ project will be closed and the session written. If called ++ without file name the file selector opens for selection of a ++ project file. If called with an empty string then the project ++ and associated session are closed. ++ ++ *g:gnat.Project_File* ++g:gnat.Project_File string ++ Current project file. ++ ++ *g:gnat.Make_Command* ++g:gnat.Make_Command string ++ External command used for|g:gnat.Make()| (|'makeprg'|). ++ ++ *g:gnat.Pretty_Program* ++g:gnat.Pretty_Program string ++ External command used for|g:gnat.Pretty()| ++ ++ *g:gnat.Find_Program* ++g:gnat.Find_Program string ++ External command used for|g:gnat.Find()| ++ ++ *g:gnat.Tags_Command* ++g:gnat.Tags_Command string ++ External command used for|g:gnat.Tags()| ++ ++ *g:gnat.Error_Format* ++g:gnat.Error_Format string ++ Error format (|'errorformat'|) ++ ++------------------------------------------------------------------------------ ++4.2 Dec Ada ~ ++ *compiler-hpada* *compiler-decada* ++ *compiler-vaxada* *compiler-compaqada* ++ ++Dec Ada (also known by - in chronological order - VAX Ada, Dec Ada, Compaq Ada ++and HP Ada) is a fairly dated Ada 83 compiler. Support is basic: will ++compile the current unit. ++ ++The Dec Ada compiler expects the package name and not the file name to be ++passed a parameter. The compiler plug-in supports the usual file name ++convention to convert the file into a unit name. For separates both '-' and ++'__' are allowed. ++ ++ *decada_members* ++DEC ADA OBJECT ~ ++ ++ *g:decada.Make()* ++g:decada.Make() function ++ Calls|g:decada.Make_Command|and displays the result inside a ++ |quickfix| window. ++ ++ *g:decada.Unit_Name()* ++g:decada.Unit_Name() function ++ Get the Unit name for the current file. ++ ++ *g:decada.Make_Command* ++g:decada.Make_Command string ++ External command used for|g:decadat.Make()| (|'makeprg'|). ++ ++ *g:decada.Error_Format* ++g:decada.Error_Format| string ++ Error format (|'errorformat'|). ++ ++============================================================================== ++5. References ~ ++ *ada-reference* ++ ++------------------------------------------------------------------------------ ++5.1 Options ~ ++ *ft-ada-options* ++ ++ *g:ada_standard_types* ++g:ada_standard_types bool (true when exists) ++ Highlight types in package Standard (e.g., "Float") ++ ++ *g:ada_space_errors* ++ *g:ada_no_trail_space_error* ++ *g:ada_no_tab_space_error* ++ *g:ada_all_tab_usage* ++g:ada_space_errors bool (true when exists) ++ Highlight extraneous errors in spaces ... ++ g:ada_no_trail_space_error ++ - but ignore trailing spaces at the end of a line ++ g:ada_no_tab_space_error ++ - but ignore tabs after spaces ++ g:ada_all_tab_usage ++ - highlight all tab use ++ ++ *g:ada_line_errors* ++g:ada_line_errors bool (true when exists) ++ Highlight lines which are to long. Note: This highlighting ++ option is quite CPU intensive. ++ ++ *g:ada_rainbow_color* ++g:ada_rainbow_color bool (true when exists) ++ Use rainbow colours for '(' and ')'. You need the ++ rainbow_parenthesis for this to work ++ ++ *g:ada_folding* ++g:ada_folding set ('sigpft') ++ Use folding for Ada sources. ++ 's': activate syntax folding on load ++ 'p': fold packages ++ 'f': fold functions and procedures ++ 't': fold types ++ 'c': fold conditionals ++ 'g': activate gnat pretty print folding on load ++ 'i': lone 'is' folded with line above ++ 'b': lone 'begin' folded with line above ++ 'p': lone 'private' folded with line above ++ 'x': lone 'exception' folded with line above ++ 'i': activate indent folding on load ++ ++ Note: Syntax folding is in an early (unuseable) stage and ++ indent or gnat pretty folding is suggested. ++ ++ For gnat pretty folding to work the following settings are ++ suggested: -cl3 -M79 -c2 -c3 -c4 -A1 -A2 -A3 -A4 -A5 ++ ++ For indent folding to work the following settings are ++ suggested: shiftwidth=3 softtabstop=3 ++ ++ *g:ada_abbrev* ++g:ada_abbrev bool (true when exists) ++ Add some abbreviations. This feature more or less superseded ++ by the various completion methods. ++ ++ *g:ada_withuse_ordinary* ++g:ada_withuse_ordinary bool (true when exists) ++ Show "with" and "use" as ordinary keywords (when used to ++ reference other compilation units they're normally highlighted ++ specially). ++ ++ *g:ada_begin_preproc* ++g:ada_begin_preproc bool (true when exists) ++ Show all begin-like keywords using the colouring of C ++ preprocessor commands. ++ ++ *g:ada_omni_with_keywords* ++g:ada_omni_with_keywords ++ Add Keywords, Pragmas, Attributes to omni-completions ++ (|compl-omni|). Note: You can always complete then with user ++ completion (|i_CTRL-X_CTRL-U|). ++ ++ *g:ada_extended_tagging* ++g:ada_extended_tagging enum ('jump', 'list') ++ use extended tagging, two options are available ++ 'jump': use tjump to jump. ++ 'list': add tags quick fix list. ++ Normal tagging does not support function or operator ++ overloading as these features are not available in C and ++ tagging was originally developed for C. ++ ++ *g:ada_extended_completion* ++g:ada_extended_completion ++ Uses extended completion for and completions ++ (|i_CTRL-N|). In this mode the '.' is used as part of the ++ identifier so that 'Object.Method' or 'Package.Procedure' are ++ completed together. ++ ++ *g:ada_gnat_extensions* ++g:ada_gnat_extensions bool (true when exists) ++ Support GNAT extensions. ++ ++ *g:ada_with_gnat_project_files* ++g:ada_with_gnat_project_files bool (true when exists) ++ Add gnat project file keywords and Attributes. ++ ++ *g:ada_default_compiler* ++g:ada_default_compiler string ++ set default compiler. Currently supported is 'gnat' and ++ 'decada'. ++ ++An "exists" type is a boolean is considered true when the variable is defined ++and false when the variable is undefined. The value which the variable is ++set makes no difference. ++ ++------------------------------------------------------------------------------ ++5.3 Commands ~ ++ *ft-ada-commands* ++ ++:AdaRainbow *:AdaRainbow* ++ Toggles rainbow colour (|g:ada_rainbow_color|) mode for ++ '(' and ')' ++ ++:AdaLines *:AdaLines* ++ Toggles line error (|g:ada_line_errors|) display ++ ++:AdaSpaces *:AdaSpaces* ++ Toggles space error (|g:ada_space_errors|) display. ++ ++:AdaTagDir *:AdaTagDir* ++ Creates tags file for the directory of the current file. ++ ++:AdaTagFile *:AdaTagFile* ++ Creates tags file for the current file. ++ ++:AdaTypes *:AdaTypes* ++ Toggles standard types (|g:ada_standard_types|) colour. ++ ++:GnatFind *:GnatFind* ++ Calls |g:gnat.Find()| ++ ++:GnatPretty *:GnatPretty* ++ Calls |g:gnat.Pretty()| ++ ++:GnatTags *:GnatTags* ++ Calls |g:gnat.Tags()| ++ ++------------------------------------------------------------------------------ ++5.3 Variables ~ ++ *ft-ada-variables* ++ ++ *g:gnat* ++g:gnat object ++ Control object which manages GNAT compiles. The object ++ is created when the first Ada source code is loaded provided ++ that |g:ada_default_compiler|is set to 'gnat'. See|gnat_members| ++ for details. ++ ++ *g:decada* ++g:decada object ++ Control object which manages Dec Ada compiles. The object ++ is created when the first Ada source code is loaded provided ++ that |g:ada_default_compiler|is set to 'decada'. See ++ |decada_members|for details. ++ ++------------------------------------------------------------------------------ ++5.4 Constants ~ ++ *ft-ada-constants* ++ ft-ada-constants ++ ++All constants are locked. See |:lockvar| for details. ++ ++ *g:ada#WordRegex* ++g:ada#WordRegex string ++ Regular expression to search for Ada words ++ ++ *g:ada#DotWordRegex* ++g:ada#DotWordRegex string ++ Regular expression to search for Ada words separated by dots. ++ ++ *g:ada#Comment* ++g:ada#Comment string ++ Regular expression to search for Ada comments ++ ++ *g:ada#Keywords* ++g:ada#Keywords list of dictionaries ++ List of keywords, attributes etc. pp. in the format used by ++ omni completion. See |complete-items| for details. ++ ++ *g:ada#Ctags_Kinds* ++g:ada#Ctags_Kinds dictionary of lists ++ Dictionary of the various kinds of items which the Ada support ++ for Ctags generates. ++ ++------------------------------------------------------------------------------ ++5.2 Functions ~ ++ *ft-ada-functions* ++ ++ada#Word([{line}, {col}]) *ada#Word()* ++ Return full name of Ada entity under the cursor (or at given ++ line/column), stripping white space/newlines as necessary. ++ ++ada#List_Tag([{line}, {col}]) *ada#Listtags()* ++ List all occurrences of the Ada entity under the cursor (or at ++ given line/column) inside the quick-fix window ++ ++ada#Jump_Tag ({ident}, {mode}) *ada#Jump_Tag()* ++ List all occurrences of the Ada entity under the cursor (or at ++ given line/column) in the tag jump list. Mode can either be ++ 'tjump' or 'stjump'. ++ ++ada#Create_Tags ({option}) *ada#Create_Tags()* ++ Creates tag file using Ctags. The option can either be 'file' ++ for the current file, 'dir' for the directory of the current ++ file or a file name. ++ ++gnat#Insert_Tags_Header() *gnat#Insert_Tags_Header()* ++ Adds the tag file header (!_TAG_) information to the current ++ file which are missing from the GNAT XREF output. ++ ++ada#Switch_Syntax_Option ({option}) *ada#Switch_Syntax_Option()* ++ Toggles highlighting options on or off. Used for the Ada menu. ++ ++ *gnat#New()* ++gnat#New () ++ Create a new gnat object. See |g:gnat| for details. ++ ++ ++============================================================================== ++8. Extra Plugins ~ ++ *ada-extra-plugins* ++ ++You can optionally install the following extra plug-in. They work well with Ada ++and enhance the ability of the Ada mode.: ++ ++backup.vim ++ http://www.vim.org/scripts/script.php?script_id=1537 ++ Keeps as many backups as you like so you don't have to. ++ ++rainbow_parenthsis.vim ++ http://www.vim.org/scripts/script.php?script_id=1561 ++ Very helpful since Ada uses only '(' and ')'. ++ ++nerd_comments.vim ++ http://www.vim.org/scripts/script.php?script_id=1218 ++ Excellent commenting and uncommenting support for almost any ++ programming language. ++ ++matchit.vim ++ http://www.vim.org/scripts/script.php?script_id=39 ++ '%' jumping for any language. The normal '%' jump only works for '{}' ++ style languages. The Ada mode will set the needed search patters. ++ ++taglist.vim ++ http://www.vim.org/scripts/script.php?script_id=273 ++ Source code explorer sidebar. There is a patch for Ada available. ++ ++The GNU Ada Project distribution (http://gnuada.sourceforge.net) of Vim ++contains all of the above. ++ ++============================================================================== ++vim: textwidth=78 nowrap tabstop=8 shiftwidth=4 softtabstop=4 noexpandtab ++vim: filetype=help +diff -urN vim71/runtime/ftplugin/ada.vim vim71_ada/runtime/ftplugin/ada.vim +--- vim71/runtime/ftplugin/ada.vim 2007-05-05 19:17:45.000000000 +0200 ++++ vim71_ada/runtime/ftplugin/ada.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -1,14 +1,15 @@ + "------------------------------------------------------------------------------ + " Description: Perform Ada specific completion & tagging. + " Language: Ada (2005) +-" $Id: ada.vim,v 1.3 2007/05/05 17:17:45 vimboss Exp $ +-" Maintainer: Martin Krischik ++" $Id: ada.vim 774 2007-09-17 09:11:59Z krischik $ ++" Maintainer: Martin Krischik ++" Taylor Venable + " Neil Bird +-" $Author: vimboss $ +-" $Date: 2007/05/05 17:17:45 $ +-" Version: 4.2 +-" $Revision: 1.3 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $ ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $ + " History: 24.05.2006 MK Unified Headers + " 26.05.2006 MK ' should not be in iskeyword. + " 16.07.2006 MK Ada-Mode as vim-ball +@@ -17,6 +18,7 @@ + " 05.11.2006 MK Bram suggested not to use include protection for + " autoload + " 05.11.2006 MK Bram suggested to save on spaces ++" 08.07.2007 TV fix default compiler problems. + " Help Page: ft-ada-plugin + "------------------------------------------------------------------------------ + " Provides mapping overrides for tag jumping that figure out the current +@@ -30,7 +32,7 @@ + endif + + " Don't load another plugin for this buffer +-let b:did_ftplugin = 38 ++let b:did_ftplugin = 45 + + " + " Temporarily set cpoptions to ensure the script loads OK +@@ -104,8 +106,17 @@ + \ s:notend . '\:\\s\+\' + endif + ++ + " Section: Compiler {{{1 + " ++if ! exists("g:ada_default_compiler") ++ if has("vms") ++ let g:ada_default_compiler = 'decada' ++ else ++ let g:ada_default_compiler = 'gnat' ++ endif ++endif ++ + if ! exists("current_compiler") || + \ current_compiler != g:ada_default_compiler + execute "compiler " . g:ada_default_compiler +diff -urN vim71/runtime/indent/ada.vim vim71_ada/runtime/indent/ada.vim +--- vim71/runtime/indent/ada.vim 2007-05-05 19:25:37.000000000 +0200 ++++ vim71_ada/runtime/indent/ada.vim 2008-01-16 16:37:02.000000000 +0100 +@@ -1,19 +1,21 @@ + "------------------------------------------------------------------------------ + " Description: Vim Ada indent file + " Language: Ada (2005) +-" $Id: ada.vim,v 1.4 2007/05/05 17:25:37 vimboss Exp $ ++" $Id: ada.vim 774 2007-09-17 09:11:59Z krischik $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik ++" Maintainer: Martin Krischik + " Neil Bird +-" $Author: vimboss $ +-" $Date: 2007/05/05 17:25:37 $ +-" Version: 4.2 +-" $Revision: 1.4 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/indent/ada.vim $ ++" Ned Okie ++" $Author: krischik $ ++" $Date: 2007-09-17 11:11:59 +0200 (Mo, 17 Sep 2007) $ ++" Version: 4.5 ++" $Revision: 774 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/indent/ada.vim $ + " History: 24.05.2006 MK Unified Headers + " 16.07.2006 MK Ada-Mode as vim-ball + " 15.10.2006 MK Bram's suggestion for runtime integration + " 05.11.2006 MK Bram suggested to save on spaces ++" 19.09.2007 NO g: missing before ada#Comment + " Help Page: ft-vim-indent + "------------------------------------------------------------------------------ + " ToDo: +@@ -27,7 +29,7 @@ + finish + endif + +-let b:did_indent = 1 ++let b:did_indent = 45 + + setlocal indentexpr=GetAdaIndent() + setlocal indentkeys-=0{,0} +@@ -58,7 +60,7 @@ + " Seems to work OK as it 'starts' with the indent of the /previous/ line. + function s:MainBlockIndent (prev_indent, prev_lnum, blockstart, stop_at) + let lnum = a:prev_lnum +- let line = substitute( getline(lnum), ada#Comment, '', '' ) ++ let line = substitute( getline(lnum), g:ada#Comment, '', '' ) + while lnum > 1 + if a:stop_at != '' && line =~ '^\s*' . a:stop_at && indent(lnum) < a:prev_indent + return a:prev_indent +@@ -72,7 +74,7 @@ + let lnum = prevnonblank(lnum - 1) + " Get previous non-blank/non-comment-only line + while 1 +- let line = substitute( getline(lnum), ada#Comment, '', '' ) ++ let line = substitute( getline(lnum), g:ada#Comment, '', '' ) + if line !~ '^\s*$' && line !~ '^\s*#' + break + endif +@@ -116,7 +118,7 @@ + " Get previous non-blank/non-comment-only line + while 1 + let line = getline(lnum) +- let line = substitute( line, ada#Comment, '', '' ) ++ let line = substitute( line, g:ada#Comment, '', '' ) + if line !~ '^\s*$' + break + endif +@@ -143,7 +145,8 @@ + let lnum = prevnonblank(lnum - 1) + " Get previous non-blank/non-comment-only line + while 1 +- let line = substitute( getline(lnum), ada#Comment, '', '' ) ++ let line = substitute( getline(lnum), g:ada#Comment, '', '' ) ++ + if line !~ '^\s*$' && line !~ '^\s*#' + break + endif +@@ -222,7 +225,7 @@ + exe lnum + exe 'normal! $F)%' + if getline('.') =~ '^\s*(' +- " Dire layout - use previous indent (could check for ada#Comment here) ++ " Dire layout - use previous indent (could check for g:ada#Comment here) + let ind = indent( prevnonblank( line('.')-1 ) ) + else + let ind = indent('.') +diff -urN vim71/runtime/macros/svnignore.bash vim71_ada/runtime/macros/svnignore.bash +--- vim71/runtime/macros/svnignore.bash 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/macros/svnignore.bash 2008-01-16 16:37:02.000000000 +0100 +@@ -0,0 +1,9 @@ ++#!/bin/bash ++ ++svn propedit \ ++ --editor-cmd="gvim -f" \ ++ svn:ignore \ ++ "${@}" ; ++ ++# vim: textwidth=0 nowrap tabstop=8 shiftwidth=4 softtabstop=4 expandtab ++# vim: filetype=sh encoding=utf-8 fileformat=unix foldmethod=marker nospell +diff -urN vim71/runtime/macros/svnignore.btm vim71_ada/runtime/macros/svnignore.btm +--- vim71/runtime/macros/svnignore.btm 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/macros/svnignore.btm 2008-01-16 16:37:02.000000000 +0100 +@@ -0,0 +1,27 @@ ++::!C:\Bin\4Portable\App\4\4nt.EXE ++:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ++:: Description: Works like "tail -f" . ++:: $Id: svnignore.btm 806 2007-11-21 09:35:26Z krischik $ ++:: Maintainer: Martin Krischik ++:: Jason Heddings (vim at heddway dot com) ++:: $Author: krischik $ ++:: $Date: 2007-11-21 10:35:26 +0100 (Mi, 21 Nov 2007) $ ++:: Version: 3.0 ++:: $Revision: 806 $ ++:: $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/macros/svnignore.btm $ ++:: History: 17.11.2007 Edit svn:ignore data ++:: Help Page: tail.txt ++:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ ++svn propedit ^ ++ --editor-cmd="gvim -f" ^ ++ svn:ignore ^ ++ "%[$]" ++ ++:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ++:: Copyright (C) 2006 Martin Krischik ++:: ++:: Vim is Charityware - see ":help license" or uganda.txt for licence details. ++:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ++:: vim: textwidth=0 nowrap tabstop=8 shiftwidth=4 softtabstop=4 noexpandtab ++:: vim: filetype=btm encoding=utf-8 fileformat=unix foldmethod=marker nospell +diff -urN vim71/runtime/macros/svnignore.zsh vim71_ada/runtime/macros/svnignore.zsh +--- vim71/runtime/macros/svnignore.zsh 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/macros/svnignore.zsh 2008-01-16 16:37:02.000000000 +0100 +@@ -0,0 +1,29 @@ ++#!/bin/zsh ++#------------------------------------------------------------------------------ ++# Description: Works like "tail -f" . ++# $Id: svnignore.zsh 818 2007-12-03 21:21:48Z krischik $ ++# Maintainer: Martin Krischik ++# Jason Heddings (vim at heddway dot com) ++# $Author: krischik $ ++# $Date: 2007-12-03 22:21:48 +0100 (Mo, 03 Dez 2007) $ ++# Version: 3.0 ++# $Revision: 818 $ ++# $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/macros/svnignore.zsh $ ++# History: 17.11.2007 Edit svn:ignore data ++# Help Page: tail.txt ++#------------------------------------------------------------------------------ ++ ++setopt No_X_Trace; ++ ++svn propedit \ ++ --editor-cmd="gvim -f" \ ++ svn:ignore \ ++ "${=@}" ; ++ ++#------------------------------------------------------------------------------ ++# Copyright (C) 2006 Martin Krischik ++# ++# Vim is Charityware - see ":help license" or uganda.txt for licence details. ++#------------------------------------------------------------------------------ ++# vim: textwidth=0 nowrap tabstop=8 shiftwidth=4 softtabstop=4 noexpandtab ++# vim: filetype=zsh encoding=utf-8 fileformat=unix foldmethod=marker nospell +diff -urN vim71/runtime/macros/vim.bash vim71_ada/runtime/macros/vim.bash +--- vim71/runtime/macros/vim.bash 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/macros/vim.bash 2008-01-16 16:37:02.000000000 +0100 +@@ -0,0 +1,191 @@ ++#!/bin/echo usage: source ++########################################################### {{{1 ########### ++# Description: Set alias names for a custom installed vim/ctags. ++# Language: Bash Shell Script ++# $Id: vim.bash 820 2007-12-08 11:05:30Z krischik $ ++# Maintainer: Martin Krischik ++# $Author: krischik $ ++# $Date: 2007-12-08 12:05:30 +0100 (Sa, 08 Dez 2007) $ ++# Version: 3.6 ++# $Revision: 820 $ ++# $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/macros/vim.bash $ ++# History: 26.07.2006 MK pretty new ++# Usage: copy to /etc/profile.d and make world executable ++########################################################### }}}1 ########### ++ ++ ++if ! type lxpm 2>/dev/null 1>/dev/null; then ++ ++ # Variablen ++ UName=$(uname) ++ ++ case "${UName}" in # {{{1 ++ (Linux*) # {{{2 ++ if test -x "/opt/gnat/tools/bin/vim"; then ++ declare -x VIM="/opt/gnat/tools"; ++ declare -x VIMRUNTIME="${VIM}/share/vim/vim71"; ++ else ++ unset VIM 1>/dev/null 2>/dev/null; ++ unset VIMRUNTIME 1>/dev/null 2>/dev/null; ++ fi; ++ ;; # }}}2 ++ (CYGWIN*) # {{{2 ++ if test -x "/opt/gnat/tools/bin/vim"; then ++ declare -x VIM="/opt/gnat/tools"; ++ declare -x VIMRUNTIME="${VIM}/share/vim/vim71" ++ else ++ unset VIM 1>/dev/null 2>/dev/null; ++ unset VIMRUNTIME 1>/dev/null 2>/dev/null; ++ fi; ++ ;; # }}}2 ++ (SunOS) # {{{2 ++ if test -x "/opt/gnat/tools/bin/vim"; then ++ declare -x VIM="/opt/gnat/tools"; ++ declare -x VIMRUNTIME="${VIM}/share/vim/vim71"; ++ elif test -x "${HOME}/opt/gnat/tools/bin/vim"; then ++ declare -x VIM="${HOME}/opt/gnat/tools"; ++ declare -x VIMRUNTIME="${VIM}/share/vim/vim71" ++ PATH="${VIM}/bin:${PATH}" ++ else ++ unset VIM 1>/dev/null 2>/dev/null; ++ unset VIMRUNTIME 1>/dev/null 2>/dev/null; ++ fi ++ ;; # }}}2 ++ (*) # {{{2 ++ ;; # }}}2 ++ esac; # }}}1 ++ ++ # Simple Functions ++ ++ for i in ctags etags eview evim ex gview gvim gvimdiff rgview rgvim rview rvim view vim vimdiff vimtutor xxd; do # {{{1 ++ ++ case "${UName}" in # {{{2 ++ (MINGW*) # {{{3 ++ if test -n "${VIM}"; then ++ declare -x -f ${i}; ++ ++ eval "function ${i} () ++ { ++ ${VIM}/vim71/gvim.exe \"\${@}\" ++ return; ++ }" ++ else ++ unset -f ${i} 1>/dev/null 2>/dev/null; ++ fi; ++ ;; # }}}3 ++ (Linux|CYGWIN*) # {{{3 ++ if test -n "${VIM}"; then ++ declare -x -f ${i}; ++ ++ eval "function ${i} () ++ { ++ LD_LIBRARY_PATH=\"\${LD_LIBRARY_PATH}:${VIM}/lib\" \ ++ \"${VIM}/bin/${i}\" \"\${@}\" ; ++ return; ++ }" ++ else ++ unset -f ${i} 1>/dev/null 2>/dev/null; ++ fi; ++ ;; # }}}3 ++ (*) # {{{3 ++ ;; # }}}3 ++ esac; # }}}2 ++ done; # }}}1 ++ ++ # Server Functions ++ ++ for i in lxpm med epm; do # {{{1 ++ declare -x -f ${i} ++ ++ case "${UName}" in # {{{2 ++ (MINGW*) # {{{3 ++ if test -n "${VIM}"; then ++ eval "function ${i} () ++ { ++ if test -z "\${1}"; then ++ ${VIM}/vim71/gvim.exe --servername ${i} 1>/dev/null 2>/dev/null & ++ else ++ ${VIM}/vim71/gvim.exe --servername ${i} --remote-silent \"\${@}\" 1>/dev/null 2>/dev/null & ++ fi; ++ return; ++ }" ++ else ++ eval "function ${i} () ++ { ++ if test -z "\${1}"; then ++ gvim.exe --servername ${i} 1>/dev/null 2>/dev/null & ++ else ++ gvim.exe --servername ${i} --remote-silent \"\${@}\" 1>/dev/null 2>/dev/null & ++ fi; ++ return; ++ }" ++ fi; ++ ;; # }}}3 ++ (Linux|CYGWIN*|SunOS) # {{{3 ++ if test -n "${VIM}"; then ++ eval "function ${i} () ++ { ++ if test -z \"\${1}\"; then ++ LD_LIBRARY_PATH=\"\${LD_LIBRARY_PATH}:${VIM}/lib\" \ ++ \"${VIM}/bin/gvim\" --servername \"${i} ${HOSTNAME}\" \"\${@}\" \ ++ >/dev/null 2>/dev/null & ++ else ++ LD_LIBRARY_PATH=\"\${LD_LIBRARY_PATH}:${VIM}/lib\" \ ++ \"${VIM}/bin/gvim\" --servername \"${i} ${HOSTNAME}\" --remote-silent \"\${@}\" \ ++ >/dev/null 2>/dev/null & ++ fi ++ return; ++ }" ++ else ++ eval "function ${i} () ++ { ++ if test -z \"\${1}\"; then ++ gvim --servername \"${i} ${HOSTNAME}\" >/dev/null 2>/dev/null & ++ else ++ gvim --servername \"${i} ${HOSTNAME}\" --remote-silent \"\${@}\" >/dev/null 2>/dev/null & ++ fi ++ return; ++ }" ++ fi; ++ ;; # }}}3 ++ (*) # {{{3 ++ ;; # }}}3 ++ esac; # }}}2 ++ done; # }}}1 ++ ++ # Some applications read the EDITOR variable to determine your favourite text ++ # editor. So uncomment the line below and enter the editor of your choice :-) ++ if test -n "${VIM}"; then ++ declare -x EDITOR="${VIM}/bin/gvim -f"; ++ declare -x VISUAL="${VIM}/bin/gvim -f"; ++ else ++ declare -x EDITOR="$(which gvim) -f"; ++ declare -x VISUAL="$(which gvim) -f"; ++ fi; ++ # Unset local Variablen ++ ++ unset UName ++ ++ printf "\e[42m%-30.30s : \e[43m %-40.40s \e[m\n" "$(basename ${BASH_SOURCE:-${0}})" "VIM 7.0 symbols set." ++ ++fi; ++ ++########################################################### {{{1 ########### ++# Copyright (C) 2006 Martin Krischik ++# ++# This program is free software; you can redistribute it and/or ++# modify it under the terms of the GNU General Public License ++# as published by the Free Software Foundation; either version 2 ++# of the License, or (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++########################################################### }}}1 ########### ++# vim: textwidth=0 nowrap tabstop=8 shiftwidth=4 softtabstop=4 noexpandtab ++# vim: filetype=sh encoding=utf-8 fileformat=unix foldmethod=marker +diff -urN vim71/runtime/macros/vim.zsh vim71_ada/runtime/macros/vim.zsh +--- vim71/runtime/macros/vim.zsh 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/macros/vim.zsh 2008-01-16 16:37:02.000000000 +0100 +@@ -0,0 +1,17 @@ ++#!/bin/echo usage: source ++ ++setopt No_Verbose ++setopt No_X_Trace ++setopt Typeset_Silent; ++ ++# ++# Bash script is zsh compatible ++# ++HOSTNAME="${HOSTNAME:-${HOST}}" ++BASH_SOURCE="$(basename ${0} .zsh).bash" ++source "$(dirname ${0})/${BASH_SOURCE}" ++unset BASH_SOURCE; ++ ++############################################################# {{{1 ########### ++# vim: textwidth=0 nowrap tabstop=8 shiftwidth=4 softtabstop=4 expandtab ++# vim: filetype=zsh encoding=utf-8 fileformat=unix foldmethod=marker nospell +diff -urN vim71/runtime/plugin/matchit.vim vim71_ada/runtime/plugin/matchit.vim +--- vim71/runtime/plugin/matchit.vim 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/plugin/matchit.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -0,0 +1,814 @@ ++" matchit.vim: (global plugin) Extended "%" matching ++" Last Change: Tue Oct 24 11:00 AM 2006 EDT ++" Maintainer: Benji Fisher PhD ++" Version: 1.12, for Vim 6.3+ ++" URL: http://www.vim.org/script.php?script_id=39 ++ ++" Documentation: ++" The documentation is in a separate file, matchit.txt . ++ ++" Credits: ++" Vim editor by Bram Moolenaar (Thanks, Bram!) ++" Original script and design by Raul Segura Acevedo ++" Support for comments by Douglas Potts ++" Support for back references and other improvements by Benji Fisher ++" Support for many languages by Johannes Zellner ++" Suggestions for improvement, bug reports, and support for additional ++" languages by Jordi-Albert Batalla, Neil Bird, Servatius Brandt, Mark ++" Collett, Stephen Wall, Dany St-Amant, Yuheng Xie, and Johannes Zellner. ++ ++" Debugging: ++" If you'd like to try the built-in debugging commands... ++" :MatchDebug to activate debugging for the current buffer ++" This saves the values of several key script variables as buffer-local ++" variables. See the MatchDebug() function, below, for details. ++ ++" TODO: I should think about multi-line patterns for b:match_words. ++" This would require an option: how many lines to scan (default 1). ++" This would be useful for Python, maybe also for *ML. ++" TODO: Maybe I should add a menu so that people will actually use some of ++" the features that I have implemented. ++" TODO: Eliminate the MultiMatch function. Add yet another argument to ++" Match_wrapper() instead. ++" TODO: Allow :let b:match_words = '\(\(foo\)\(bar\)\):\3\2:end\1' ++" TODO: Make backrefs safer by using '\V' (very no-magic). ++" TODO: Add a level of indirection, so that custom % scripts can use my ++" work but extend it. ++ ++" allow user to prevent loading ++" and prevent duplicate loading ++if exists("loaded_matchit") || &cp ++ finish ++endif ++let loaded_matchit = 1 ++let s:last_mps = "" ++let s:last_words = "" ++ ++let s:save_cpo = &cpo ++set cpo&vim ++ ++nnoremap % :call Match_wrapper('',1,'n') ++nnoremap g% :call Match_wrapper('',0,'n') ++vnoremap % :call Match_wrapper('',1,'v') m'gv`` ++vnoremap g% :call Match_wrapper('',0,'v') m'gv`` ++onoremap % v:call Match_wrapper('',1,'o') ++onoremap g% v:call Match_wrapper('',0,'o') ++ ++" Analogues of [{ and ]} using matching patterns: ++nnoremap [% :call MultiMatch("bW", "n") ++nnoremap ]% :call MultiMatch("W", "n") ++vmap [% [%m'gv`` ++vmap ]% ]%m'gv`` ++" vnoremap [% :call MultiMatch("bW", "v") m'gv`` ++" vnoremap ]% :call MultiMatch("W", "v") m'gv`` ++onoremap [% v:call MultiMatch("bW", "o") ++onoremap ]% v:call MultiMatch("W", "o") ++ ++" text object: ++vmap a% [%v]% ++ ++" Auto-complete mappings: (not yet "ready for prime time") ++" TODO Read :help write-plugin for the "right" way to let the user ++" specify a key binding. ++" let g:match_auto = '' ++" let g:match_autoCR = '' ++" if exists("g:match_auto") ++" execute "inoremap " . g:match_auto . ' x"=Autocomplete()Pls' ++" endif ++" if exists("g:match_autoCR") ++" execute "inoremap " . g:match_autoCR . ' =Autocomplete()' ++" endif ++" if exists("g:match_gthhoh") ++" execute "inoremap " . g:match_gthhoh . ' :call Gthhoh()' ++" endif " gthhoh = "Get the heck out of here!" ++ ++let s:notslash = '\\\@" ++ endif ++ " In s:CleanUp(), we may need to check whether the cursor moved forward. ++ let startline = line(".") ++ let startcol = col(".") ++ " Use default behavior if called with a count or if no patterns are defined. ++ if v:count ++ exe "normal! " . v:count . "%" ++ return s:CleanUp(restore_options, a:mode, startline, startcol) ++ elseif !exists("b:match_words") || b:match_words == "" ++ silent! normal! % ++ return s:CleanUp(restore_options, a:mode, startline, startcol) ++ end ++ ++ " First step: if not already done, set the script variables ++ " s:do_BR flag for whether there are backrefs ++ " s:pat parsed version of b:match_words ++ " s:all regexp based on s:pat and the default groups ++ " ++ " Allow b:match_words = "GetVimMatchWords()" . ++ if b:match_words =~ ":" ++ let match_words = b:match_words ++ else ++ execute "let match_words =" b:match_words ++ endif ++" Thanks to Preben "Peppe" Guldberg and Bram Moolenaar for this suggestion! ++ if (match_words != s:last_words) || (&mps != s:last_mps) || ++ \ exists("b:match_debug") ++ let s:last_words = match_words ++ let s:last_mps = &mps ++ if match_words !~ s:notslash . '\\\d' ++ let s:do_BR = 0 ++ let s:pat = match_words ++ else ++ let s:do_BR = 1 ++ let s:pat = s:ParseWords(match_words) ++ endif ++ " The next several lines were here before ++ " BF started messing with this script. ++ " quote the special chars in 'matchpairs', replace [,:] with \| and then ++ " append the builtin pairs (/*, */, #if, #ifdef, #else, #elif, #endif) ++ " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+', ++ " \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>' ++ let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") . ++ \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>' ++ " s:all = pattern with all the keywords ++ let s:all = s:pat . (strlen(s:pat) ? "," : "") . default ++ let s:all = substitute(s:all, s:notslash . '\zs[,:]\+', '\\|', 'g') ++ let s:all = '\%(' . s:all . '\)' ++ " let s:all = '\%(' . substitute(s:all, '\\\ze[,:]', '', 'g') . '\)' ++ if exists("b:match_debug") ++ let b:match_pat = s:pat ++ endif ++ endif ++ ++ " Second step: set the following local variables: ++ " matchline = line on which the cursor started ++ " curcol = number of characters before match ++ " prefix = regexp for start of line to start of match ++ " suffix = regexp for end of match to end of line ++ " Require match to end on or after the cursor and prefer it to ++ " start on or before the cursor. ++ let matchline = getline(startline) ++ if a:word != '' ++ " word given ++ if a:word !~ s:all ++ echohl WarningMsg|echo 'Missing rule for word:"'.a:word.'"'|echohl NONE ++ return s:CleanUp(restore_options, a:mode, startline, startcol) ++ endif ++ let matchline = a:word ++ let curcol = 0 ++ let prefix = '^\%(' ++ let suffix = '\)$' ++ " Now the case when "word" is not given ++ else " Find the match that ends on or after the cursor and set curcol. ++ let regexp = s:Wholematch(matchline, s:all, startcol-1) ++ let curcol = match(matchline, regexp) ++ let endcol = matchend(matchline, regexp) ++ let suf = strlen(matchline) - endcol ++ let prefix = (curcol ? '^.*\%' . (curcol + 1) . 'c\%(' : '^\%(') ++ let suffix = (suf ? '\)\%' . (endcol + 1) . 'c.*$' : '\)$') ++ " If the match comes from the defaults, bail out. ++ if matchline !~ prefix . ++ \ substitute(s:pat, s:notslash.'\zs[,:]\+', '\\|', 'g') . suffix ++ silent! norm! % ++ return s:CleanUp(restore_options, a:mode, startline, startcol) ++ endif ++ endif ++ if exists("b:match_debug") ++ let b:match_match = matchstr(matchline, regexp) ++ let b:match_col = curcol+1 ++ endif ++ ++ " Third step: Find the group and single word that match, and the original ++ " (backref) versions of these. Then, resolve the backrefs. ++ " Set the following local variable: ++ " group = colon-separated list of patterns, one of which matches ++ " = ini:mid:fin or ini:fin ++ " ++ " Reconstruct the version with unresolved backrefs. ++ let patBR = substitute(match_words.',', ++ \ s:notslash.'\zs[,:]*,[,:]*', ',', 'g') ++ let patBR = substitute(patBR, s:notslash.'\zs:\{2,}', ':', 'g') ++ " Now, set group and groupBR to the matching group: 'if:endif' or ++ " 'while:endwhile' or whatever. A bit of a kluge: s:Choose() returns ++ " group . "," . groupBR, and we pick it apart. ++ let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR) ++ let i = matchend(group, s:notslash . ",") ++ let groupBR = strpart(group, i) ++ let group = strpart(group, 0, i-1) ++ " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix ++ if s:do_BR " Do the hard part: resolve those backrefs! ++ let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline) ++ endif ++ if exists("b:match_debug") ++ let b:match_wholeBR = groupBR ++ let i = matchend(groupBR, s:notslash . ":") ++ let b:match_iniBR = strpart(groupBR, 0, i-1) ++ endif ++ ++ " Fourth step: Set the arguments for searchpair(). ++ let i = matchend(group, s:notslash . ":") ++ let j = matchend(group, '.*' . s:notslash . ":") ++ let ini = strpart(group, 0, i-1) ++ let mid = substitute(strpart(group, i,j-i-1), s:notslash.'\zs:', '\\|', 'g') ++ let fin = strpart(group, j) ++ "Un-escape the remaining , and : characters. ++ let ini = substitute(ini, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') ++ let mid = substitute(mid, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') ++ let fin = substitute(fin, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') ++ " searchpair() requires that these patterns avoid \(\) groups. ++ let ini = substitute(ini, s:notslash . '\zs\\(', '\\%(', 'g') ++ let mid = substitute(mid, s:notslash . '\zs\\(', '\\%(', 'g') ++ let fin = substitute(fin, s:notslash . '\zs\\(', '\\%(', 'g') ++ " Set mid. This is optimized for readability, not micro-efficiency! ++ if a:forward && matchline =~ prefix . fin . suffix ++ \ || !a:forward && matchline =~ prefix . ini . suffix ++ let mid = "" ++ endif ++ " Set flag. This is optimized for readability, not micro-efficiency! ++ if a:forward && matchline =~ prefix . fin . suffix ++ \ || !a:forward && matchline !~ prefix . ini . suffix ++ let flag = "bW" ++ else ++ let flag = "W" ++ endif ++ " Set skip. ++ if exists("b:match_skip") ++ let skip = b:match_skip ++ elseif exists("b:match_comment") " backwards compatibility and testing! ++ let skip = "r:" . b:match_comment ++ else ++ let skip = 's:comment\|string' ++ endif ++ let skip = s:ParseSkip(skip) ++ if exists("b:match_debug") ++ let b:match_ini = ini ++ let b:match_tail = (strlen(mid) ? mid.'\|' : '') . fin ++ endif ++ ++ " Fifth step: actually start moving the cursor and call searchpair(). ++ " Later, :execute restore_cursor to get to the original screen. ++ let restore_cursor = virtcol(".") . "|" ++ normal! g0 ++ let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor ++ normal! H ++ let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor ++ execute restore_cursor ++ call cursor(0, curcol + 1) ++ " normal! 0 ++ " if curcol ++ " 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 ++ let sp_return = searchpair(ini, mid, fin, flag, skip) ++ let final_position = "call cursor(" . line(".") . "," . col(".") . ")" ++ " Restore cursor position and original screen. ++ execute restore_cursor ++ normal! m' ++ if sp_return > 0 ++ execute final_position ++ endif ++ return s:CleanUp(restore_options, a:mode, startline, startcol, mid.'\|'.fin) ++endfun ++ ++" Restore options and do some special handling for Operator-pending mode. ++" The optional argument is the tail of the matching group. ++fun! s:CleanUp(options, mode, startline, startcol, ...) ++ execute "set" a:options ++ " Open folds, if appropriate. ++ if a:mode != "o" ++ if &foldopen =~ "percent" ++ normal! zv ++ endif ++ " In Operator-pending mode, we want to include the whole match ++ " (for example, d%). ++ " This is only a problem if we end up moving in the forward direction. ++ elseif (a:startline < line(".")) || ++ \ (a:startline == line(".") && a:startcol < col(".")) ++ if a:0 ++ " Check whether the match is a single character. If not, move to the ++ " end of the match. ++ let matchline = getline(".") ++ let currcol = col(".") ++ let regexp = s:Wholematch(matchline, a:1, currcol-1) ++ let endcol = matchend(matchline, regexp) ++ if endcol > currcol " This is NOT off by one! ++ execute "normal!" . (endcol - currcol) . "l" ++ endif ++ endif " a:0 ++ endif " a:mode != "o" && etc. ++ return 0 ++endfun ++ ++" Example (simplified HTML patterns): if ++" a:groupBR = '<\(\k\+\)>:' ++" a:prefix = '^.\{3}\(' ++" a:group = '<\(\k\+\)>:' ++" a:suffix = '\).\{2}$' ++" a:matchline = "12312" or "12312" ++" then extract "tag" from a:matchline and return ":" . ++fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline) ++ if a:matchline !~ a:prefix . ++ \ substitute(a:group, s:notslash . '\zs:', '\\|', 'g') . a:suffix ++ return a:group ++ endif ++ let i = matchend(a:groupBR, s:notslash . ':') ++ let ini = strpart(a:groupBR, 0, i-1) ++ let tailBR = strpart(a:groupBR, i) ++ let word = s:Choose(a:group, a:matchline, ":", "", a:prefix, a:suffix, ++ \ a:groupBR) ++ let i = matchend(word, s:notslash . ":") ++ let wordBR = strpart(word, i) ++ let word = strpart(word, 0, i-1) ++ " Now, a:matchline =~ a:prefix . word . a:suffix ++ if wordBR != ini ++ let table = s:Resolve(ini, wordBR, "table") ++ else ++ " let table = "----------" ++ let table = "" ++ let d = 0 ++ while d < 10 ++ if tailBR =~ s:notslash . '\\' . d ++ " let table[d] = d ++ let table = table . d ++ else ++ let table = table . "-" ++ endif ++ let d = d + 1 ++ endwhile ++ endif ++ let d = 9 ++ while d ++ if table[d] != "-" ++ let backref = substitute(a:matchline, a:prefix.word.a:suffix, ++ \ '\'.table[d], "") ++ " Are there any other characters that should be escaped? ++ let backref = escape(backref, '*,:') ++ execute s:Ref(ini, d, "start", "len") ++ let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len) ++ let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d, ++ \ escape(backref, '\\'), 'g') ++ endif ++ let d = d-1 ++ endwhile ++ if exists("b:match_debug") ++ if s:do_BR ++ let b:match_table = table ++ let b:match_word = word ++ else ++ let b:match_table = "" ++ let b:match_word = "" ++ endif ++ endif ++ return ini . ":" . tailBR ++endfun ++ ++" Input a comma-separated list of groups with backrefs, such as ++" a:groups = '\(foo\):end\1,\(bar\):end\1' ++" and return a comma-separated list of groups with backrefs replaced: ++" return '\(foo\):end\(foo\),\(bar\):end\(bar\)' ++fun! s:ParseWords(groups) ++ let groups = substitute(a:groups.",", s:notslash.'\zs[,:]*,[,:]*', ',', 'g') ++ let groups = substitute(groups, s:notslash . '\zs:\{2,}', ':', 'g') ++ let parsed = "" ++ while groups =~ '[^,:]' ++ let i = matchend(groups, s:notslash . ':') ++ let j = matchend(groups, s:notslash . ',') ++ let ini = strpart(groups, 0, i-1) ++ let tail = strpart(groups, i, j-i-1) . ":" ++ let groups = strpart(groups, j) ++ let parsed = parsed . ini ++ let i = matchend(tail, s:notslash . ':') ++ while i != -1 ++ " In 'if:else:endif', ini='if' and word='else' and then word='endif'. ++ let word = strpart(tail, 0, i-1) ++ let tail = strpart(tail, i) ++ let i = matchend(tail, s:notslash . ':') ++ let parsed = parsed . ":" . s:Resolve(ini, word, "word") ++ endwhile " Now, tail has been used up. ++ let parsed = parsed . "," ++ endwhile " groups =~ '[^,:]' ++ return parsed ++endfun ++ ++" TODO I think this can be simplified and/or made more efficient. ++" TODO What should I do if a:start is out of range? ++" Return a regexp that matches all of a:string, such that ++" matchstr(a:string, regexp) represents the match for a:pat that starts ++" as close to a:start as possible, before being preferred to after, and ++" ends after a:start . ++" Usage: ++" let regexp = s:Wholematch(getline("."), 'foo\|bar', col(".")-1) ++" let i = match(getline("."), regexp) ++" let j = matchend(getline("."), regexp) ++" let match = matchstr(getline("."), regexp) ++fun! s:Wholematch(string, pat, start) ++ let group = '\%(' . a:pat . '\)' ++ let prefix = (a:start ? '\(^.*\%<' . (a:start + 2) . 'c\)\zs' : '^') ++ let len = strlen(a:string) ++ let suffix = (a:start+1 < len ? '\(\%>'.(a:start+1).'c.*$\)\@=' : '$') ++ if a:string !~ prefix . group . suffix ++ let prefix = '' ++ endif ++ return prefix . group . suffix ++endfun ++ ++" No extra arguments: s:Ref(string, d) will ++" find the d'th occurrence of '\(' and return it, along with everything up ++" to and including the matching '\)'. ++" One argument: s:Ref(string, d, "start") returns the index of the start ++" of the d'th '\(' and any other argument returns the length of the group. ++" Two arguments: s:Ref(string, d, "foo", "bar") returns a string to be ++" executed, having the effect of ++" :let foo = s:Ref(string, d, "start") ++" :let bar = s:Ref(string, d, "len") ++fun! s:Ref(string, d, ...) ++ let len = strlen(a:string) ++ if a:d == 0 ++ let start = 0 ++ else ++ let cnt = a:d ++ let match = a:string ++ while cnt ++ let cnt = cnt - 1 ++ let index = matchend(match, s:notslash . '\\(') ++ if index == -1 ++ return "" ++ endif ++ let match = strpart(match, index) ++ endwhile ++ let start = len - strlen(match) ++ if a:0 == 1 && a:1 == "start" ++ return start - 2 ++ endif ++ let cnt = 1 ++ while cnt ++ let index = matchend(match, s:notslash . '\\(\|\\)') - 1 ++ if index == -2 ++ return "" ++ endif ++ " Increment if an open, decrement if a ')': ++ let cnt = cnt + (match[index]=="(" ? 1 : -1) " ')' ++ " let cnt = stridx('0(', match[index]) + cnt ++ let match = strpart(match, index+1) ++ endwhile ++ let start = start - 2 ++ let len = len - start - strlen(match) ++ endif ++ if a:0 == 1 ++ return len ++ elseif a:0 == 2 ++ return "let " . a:1 . "=" . start . "| let " . a:2 . "=" . len ++ else ++ return strpart(a:string, start, len) ++ endif ++endfun ++ ++" Count the number of disjoint copies of pattern in string. ++" If the pattern is a literal string and contains no '0' or '1' characters ++" then s:Count(string, pattern, '0', '1') should be faster than ++" s:Count(string, pattern). ++fun! s:Count(string, pattern, ...) ++ let pat = escape(a:pattern, '\\') ++ if a:0 > 1 ++ let foo = substitute(a:string, '[^'.a:pattern.']', "a:1", "g") ++ let foo = substitute(a:string, pat, a:2, "g") ++ let foo = substitute(foo, '[^' . a:2 . ']', "", "g") ++ return strlen(foo) ++ endif ++ let result = 0 ++ let foo = a:string ++ let index = matchend(foo, pat) ++ while index != -1 ++ let result = result + 1 ++ let foo = strpart(foo, index) ++ let index = matchend(foo, pat) ++ endwhile ++ return result ++endfun ++ ++" s:Resolve('\(a\)\(b\)', '\(c\)\2\1\1\2') should return table.word, where ++" word = '\(c\)\(b\)\(a\)\3\2' and table = '-32-------'. That is, the first ++" '\1' in target is replaced by '\(a\)' in word, table[1] = 3, and this ++" indicates that all other instances of '\1' in target are to be replaced ++" by '\3'. The hard part is dealing with nesting... ++" Note that ":" is an illegal character for source and target, ++" unless it is preceded by "\". ++fun! s:Resolve(source, target, output) ++ let word = a:target ++ let i = matchend(word, s:notslash . '\\\d') - 1 ++ let table = "----------" ++ while i != -2 " There are back references to be replaced. ++ let d = word[i] ++ let backref = s:Ref(a:source, d) ++ " The idea is to replace '\d' with backref. Before we do this, ++ " replace any \(\) groups in backref with :1, :2, ... if they ++ " correspond to the first, second, ... group already inserted ++ " into backref. Later, replace :1 with \1 and so on. The group ++ " number w+b within backref corresponds to the group number ++ " s within a:source. ++ " w = number of '\(' in word before the current one ++ let w = s:Count( ++ \ substitute(strpart(word, 0, i-1), '\\\\', '', 'g'), '\(', '1') ++ let b = 1 " number of the current '\(' in backref ++ let s = d " number of the current '\(' in a:source ++ while b <= s:Count(substitute(backref, '\\\\', '', 'g'), '\(', '1') ++ \ && s < 10 ++ if table[s] == "-" ++ if w + b < 10 ++ " let table[s] = w + b ++ let table = strpart(table, 0, s) . (w+b) . strpart(table, s+1) ++ endif ++ let b = b + 1 ++ let s = s + 1 ++ else ++ execute s:Ref(backref, b, "start", "len") ++ let ref = strpart(backref, start, len) ++ let backref = strpart(backref, 0, start) . ":". table[s] ++ \ . strpart(backref, start+len) ++ let s = s + s:Count(substitute(ref, '\\\\', '', 'g'), '\(', '1') ++ endif ++ endwhile ++ let word = strpart(word, 0, i-1) . backref . strpart(word, i+1) ++ let i = matchend(word, s:notslash . '\\\d') - 1 ++ endwhile ++ let word = substitute(word, s:notslash . '\zs:', '\\', 'g') ++ if a:output == "table" ++ return table ++ elseif a:output == "word" ++ return word ++ else ++ return table . word ++ endif ++endfun ++ ++" Assume a:comma = ",". Then the format for a:patterns and a:1 is ++" a:patterns = ",,..." ++" a:1 = ",,..." ++" If is the first pattern that matches a:string then return ++" if no optional arguments are given; return , if a:1 is given. ++fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...) ++ let tail = (a:patterns =~ a:comma."$" ? a:patterns : a:patterns . a:comma) ++ let i = matchend(tail, s:notslash . a:comma) ++ if a:0 ++ let alttail = (a:1 =~ a:comma."$" ? a:1 : a:1 . a:comma) ++ let j = matchend(alttail, s:notslash . a:comma) ++ endif ++ let current = strpart(tail, 0, i-1) ++ if a:branch == "" ++ let currpat = current ++ else ++ let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g') ++ endif ++ while a:string !~ a:prefix . currpat . a:suffix ++ let tail = strpart(tail, i) ++ let i = matchend(tail, s:notslash . a:comma) ++ if i == -1 ++ return -1 ++ endif ++ let current = strpart(tail, 0, i-1) ++ if a:branch == "" ++ let currpat = current ++ else ++ let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g') ++ endif ++ if a:0 ++ let alttail = strpart(alttail, j) ++ let j = matchend(alttail, s:notslash . a:comma) ++ endif ++ endwhile ++ if a:0 ++ let current = current . a:comma . strpart(alttail, 0, j-1) ++ endif ++ return current ++endfun ++ ++" Call this function to turn on debugging information. Every time the main ++" script is run, buffer variables will be saved. These can be used directly ++" or viewed using the menu items below. ++if !exists(":MatchDebug") ++ command! -nargs=0 MatchDebug call s:Match_debug() ++endif ++ ++fun! s:Match_debug() ++ let b:match_debug = 1 " Save debugging information. ++ " pat = all of b:match_words with backrefs parsed ++ amenu &Matchit.&pat :echo b:match_pat ++ " match = bit of text that is recognized as a match ++ amenu &Matchit.&match :echo b:match_match ++ " curcol = cursor column of the start of the matching text ++ amenu &Matchit.&curcol :echo b:match_col ++ " wholeBR = matching group, original version ++ amenu &Matchit.wh&oleBR :echo b:match_wholeBR ++ " iniBR = 'if' piece, original version ++ amenu &Matchit.ini&BR :echo b:match_iniBR ++ " ini = 'if' piece, with all backrefs resolved from match ++ amenu &Matchit.&ini :echo b:match_ini ++ " tail = 'else\|endif' piece, with all backrefs resolved from match ++ amenu &Matchit.&tail :echo b:match_tail ++ " fin = 'endif' piece, with all backrefs resolved from match ++ amenu &Matchit.&word :echo b:match_word ++ " '\'.d in ini refers to the same thing as '\'.table[d] in word. ++ amenu &Matchit.t&able :echo '0:' . b:match_table . ':9' ++endfun ++ ++" Jump to the nearest unmatched "(" or "if" or "" if a:spflag == "bW" ++" or the nearest unmatched "" or "endif" or ")" if a:spflag == "W". ++" Return a "mark" for the original position, so that ++" let m = MultiMatch("bW", "n") ... execute m ++" will return to the original position. If there is a problem, do not ++" move the cursor and return "", unless a count is given, in which case ++" go up or down as many levels as possible and again return "". ++" TODO This relies on the same patterns as % matching. It might be a good ++" idea to give it its own matching patterns. ++fun! s:MultiMatch(spflag, mode) ++ if !exists("b:match_words") || b:match_words == "" ++ return "" ++ end ++ let restore_options = (&ic ? "" : "no") . "ignorecase" ++ if exists("b:match_ignorecase") ++ let &ignorecase = b:match_ignorecase ++ endif ++ let startline = line(".") ++ let startcol = col(".") ++ ++ " First step: if not already done, set the script variables ++ " s:do_BR flag for whether there are backrefs ++ " s:pat parsed version of b:match_words ++ " s:all regexp based on s:pat and the default groups ++ " This part is copied and slightly modified from s:Match_wrapper(). ++ let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") . ++ \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>' ++ " Allow b:match_words = "GetVimMatchWords()" . ++ if b:match_words =~ ":" ++ let match_words = b:match_words ++ else ++ execute "let match_words =" b:match_words ++ endif ++ if (match_words != s:last_words) || (&mps != s:last_mps) || ++ \ exists("b:match_debug") ++ let s:last_words = match_words ++ let s:last_mps = &mps ++ if match_words !~ s:notslash . '\\\d' ++ let s:do_BR = 0 ++ let s:pat = match_words ++ else ++ let s:do_BR = 1 ++ let s:pat = s:ParseWords(match_words) ++ endif ++ let s:all = '\%(' . substitute(s:pat . (strlen(s:pat)?",":"") . default, ++ \ '[,:]\+','\\|','g') . '\)' ++ if exists("b:match_debug") ++ let b:match_pat = s:pat ++ endif ++ endif ++ ++ " Second step: figure out the patterns for searchpair() ++ " and save the screen, cursor position, and 'ignorecase'. ++ " - TODO: A lot of this is copied from s:Match_wrapper(). ++ " - maybe even more functionality should be split off ++ " - into separate functions! ++ let cdefault = (s:pat =~ '[^,]$' ? "," : "") . default ++ let open = substitute(s:pat . cdefault, ++ \ s:notslash . '\zs:.\{-}' . s:notslash . ',', '\\),\\(', 'g') ++ let open = '\(' . substitute(open, s:notslash . '\zs:.*$', '\\)', '') ++ let close = substitute(s:pat . cdefault, ++ \ s:notslash . '\zs,.\{-}' . s:notslash . ':', '\\),\\(', 'g') ++ let close = substitute(close, '^.\{-}' . s:notslash . ':', '\\(', '') . '\)' ++ if exists("b:match_skip") ++ let skip = b:match_skip ++ elseif exists("b:match_comment") " backwards compatibility and testing! ++ let skip = "r:" . b:match_comment ++ else ++ let skip = 's:comment\|string' ++ endif ++ let skip = s:ParseSkip(skip) ++ " let restore_cursor = line(".") . "G" . virtcol(".") . "|" ++ " normal! H ++ " let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor ++ let restore_cursor = virtcol(".") . "|" ++ normal! g0 ++ let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor ++ normal! H ++ let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor ++ execute restore_cursor ++ ++ " Third step: call searchpair(). ++ " Replace '\('--but not '\\('--with '\%(' and ',' with '\|'. ++ let openpat = substitute(open, '\(\\\@" or ... ++" and return "endif" or "endwhile" or "" or ... . ++" For now, this uses b:match_words and the same script variables ++" as s:Match_wrapper() . Later, it may get its own patterns, ++" either from a buffer variable or passed as arguments. ++" fun! s:Autocomplete() ++" echo "autocomplete not yet implemented :-(" ++" if !exists("b:match_words") || b:match_words == "" ++" return "" ++" end ++" let startpos = s:MultiMatch("bW") ++" ++" if startpos == "" ++" return "" ++" endif ++" " - TODO: figure out whether 'if' or '' matched, and construct ++" " - the appropriate closing. ++" let matchline = getline(".") ++" let curcol = col(".") - 1 ++" " - TODO: Change the s:all argument if there is a new set of match pats. ++" let regexp = s:Wholematch(matchline, s:all, curcol) ++" let suf = strlen(matchline) - matchend(matchline, regexp) ++" let prefix = (curcol ? '^.\{' . curcol . '}\%(' : '^\%(') ++" let suffix = (suf ? '\).\{' . suf . '}$' : '\)$') ++" " Reconstruct the version with unresolved backrefs. ++" let patBR = substitute(b:match_words.',', '[,:]*,[,:]*', ',', 'g') ++" let patBR = substitute(patBR, ':\{2,}', ':', "g") ++" " Now, set group and groupBR to the matching group: 'if:endif' or ++" " 'while:endwhile' or whatever. ++" let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR) ++" let i = matchend(group, s:notslash . ",") ++" let groupBR = strpart(group, i) ++" let group = strpart(group, 0, i-1) ++" " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix ++" if s:do_BR ++" let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline) ++" endif ++" " let g:group = group ++" ++" " - TODO: Construct the closing from group. ++" let fake = "end" . expand("") ++" execute startpos ++" return fake ++" endfun ++ ++" Close all open structures. "Get the heck out of here!" ++" fun! s:Gthhoh() ++" let close = s:Autocomplete() ++" while strlen(close) ++" put=close ++" let close = s:Autocomplete() ++" endwhile ++" endfun ++ ++" Parse special strings as typical skip arguments for searchpair(): ++" s:foo becomes (current syntax item) =~ foo ++" S:foo becomes (current syntax item) !~ foo ++" r:foo becomes (line before cursor) =~ foo ++" R:foo becomes (line before cursor) !~ foo ++fun! s:ParseSkip(str) ++ let skip = a:str ++ if skip[1] == ":" ++ if skip[0] == "s" ++ let skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . ++ \ strpart(skip,2) . "'" ++ elseif skip[0] == "S" ++ let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" . ++ \ strpart(skip,2) . "'" ++ elseif skip[0] == "r" ++ let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'" ++ elseif skip[0] == "R" ++ let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'" ++ endif ++ endif ++ return skip ++endfun ++ ++let &cpo = s:save_cpo ++ ++" vim:sts=2:sw=2: +diff -urN vim71/runtime/plugin/taglist.vim vim71_ada/runtime/plugin/taglist.vim +--- vim71/runtime/plugin/taglist.vim 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/plugin/taglist.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -0,0 +1,4524 @@ ++" File: taglist.vim ++" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com) ++" Version: 4.3 ++" Last Modified: February 18, 2007 ++" Copyright: Copyright (C) 2002-2006 Yegappan Lakshmanan ++" Permission is hereby granted to use and distribute this code, ++" with or without modifications, provided that this copyright ++" notice is copied with it. Like anything else that's free, ++" taglist.vim is provided *as is* and comes with no warranty of any ++" kind, either expressed or implied. In no event will the copyright ++" holder be liable for any damamges resulting from the use of this ++" software. ++" ++" The "Tag List" plugin is a source code browser plugin for Vim and provides ++" an overview of the structure of the programming language files and allows ++" you to efficiently browse through source code files for different ++" programming languages. You can visit the taglist plugin home page for more ++" information: ++" ++" http://vim-taglist.sourceforge.net ++" ++" You can subscribe to the taglist mailing list to post your questions ++" or suggestions for improvement or to report bugs. Visit the following ++" page for subscribing to the mailing list: ++" ++" http://groups.yahoo.com/group/taglist/ ++" ++" For more information about using this plugin, after installing the ++" taglist plugin, use the ":help taglist" command. ++" ++" Installation ++" ------------ ++" 1. Download the taglist.zip file and unzip the files to the $HOME/.vim ++" or the $HOME/vimfiles or the $VIM/vimfiles directory. This should ++" unzip the following two files (the directory structure should be ++" preserved): ++" ++" plugin/taglist.vim - main taglist plugin file ++" doc/taglist.txt - documentation (help) file ++" ++" Refer to the 'add-plugin', 'add-global-plugin' and 'runtimepath' ++" Vim help pages for more details about installing Vim plugins. ++" 2. Change to the $HOME/.vim/doc or $HOME/vimfiles/doc or ++" $VIM/vimfiles/doc directory, start Vim and run the ":helptags ." ++" command to process the taglist help file. ++" 3. If the exuberant ctags utility is not present in your PATH, then set the ++" Tlist_Ctags_Cmd variable to point to the location of the exuberant ctags ++" utility (not to the directory) in the .vimrc file. ++" 4. If you are running a terminal/console version of Vim and the ++" terminal doesn't support changing the window width then set the ++" 'Tlist_Inc_Winwidth' variable to 0 in the .vimrc file. ++" 5. Restart Vim. ++" 6. You can now use the ":TlistToggle" command to open/close the taglist ++" window. You can use the ":help taglist" command to get more ++" information about using the taglist plugin. ++" ++" ****************** Do not modify after this line ************************ ++ ++" Line continuation used here ++let s:cpo_save = &cpo ++set cpo&vim ++ ++if !exists('loaded_taglist') ++ " First time loading the taglist plugin ++ " ++ " To speed up the loading of Vim, the taglist plugin uses autoload ++ " mechanism to load the taglist functions. ++ " Only define the configuration variables, user commands and some ++ " auto-commands and finish sourcing the file ++ ++ " The taglist plugin requires the built-in Vim system() function. If this ++ " function is not available, then don't load the plugin. ++ if !exists('*system') ++ echomsg 'Taglist: Vim system() built-in function is not available. ' . ++ \ 'Plugin is not loaded.' ++ let loaded_taglist = 'no' ++ let &cpo = s:cpo_save ++ finish ++ endif ++ ++ " Location of the exuberant ctags tool ++ if !exists('Tlist_Ctags_Cmd') ++ if executable('exuberant-ctags') ++ " On Debian Linux, exuberant ctags is installed ++ " as exuberant-ctags ++ let Tlist_Ctags_Cmd = 'exuberant-ctags' ++ elseif executable(' exctags') ++ " On Free-BSD, exuberant ctags is installed as exctags ++ let Tlist_Ctags_ Cmd = 'exctags' ++ elseif executable('ctags') ++ let Tlist_Ctags_Cmd = 'ctags' ++ elseif executable('ctags.exe') ++ let Tlist_Ctags_Cmd = 'ctags.exe' ++ elseif executable('tags') ++ let Tlist_Ctags_Cmd = 'tags' ++ else ++ " echomsg 'Taglist: Exuberant ctags (http://ctags.sf.net) ' . ++ " \ 'not found in PATH. Plugin is not loaded.' ++ " Skip loading the plugin ++ let loaded_taglist = 'no' ++ let &cpo = s:cpo_save ++ finish ++ endif ++ endif ++ ++ ++ " Automatically open the taglist window on Vim startup ++ if !exists('Tlist_Auto_Open') ++ let Tlist_Auto_Open = 0 ++ endif ++ ++ " When the taglist window is toggle opened, move the cursor to the ++ " taglist window ++ if !exists('Tlist_GainFocus_On_ToggleOpen') ++ let Tlist_GainFocus_On_ToggleOpen = 0 ++ endif ++ ++ " Process files even when the taglist window is not open ++ if !exists('Tlist_Process_File_Always') ++ let Tlist_Process_File_Always = 0 ++ endif ++ ++ if !exists('Tlist_Show_Menu') ++ let Tlist_Show_Menu = 0 ++ endif ++ ++ " Tag listing sort type - 'name' or 'order' ++ if !exists('Tlist_Sort_Type') ++ let Tlist_Sort_Type = 'order' ++ endif ++ ++ " Tag listing window split (horizontal/vertical) control ++ if !exists('Tlist_Use_Horiz_Window') ++ let Tlist_Use_Horiz_Window = 0 ++ endif ++ ++ " Open the vertically split taglist window on the left or on the right ++ " side. This setting is relevant only if Tlist_Use_Horiz_Window is set to ++ " zero (i.e. only for vertically split windows) ++ if !exists('Tlist_Use_Right_Window') ++ let Tlist_Use_Right_Window = 0 ++ endif ++ ++ " Increase Vim window width to display vertically split taglist window. ++ " For MS-Windows version of Vim running in a MS-DOS window, this must be ++ " set to 0 otherwise the system may hang due to a Vim limitation. ++ if !exists('Tlist_Inc_Winwidth') ++ if (has('win16') || has('win95')) && !has('gui_running') ++ let Tlist_Inc_Winwidth = 0 ++ else ++ let Tlist_Inc_Winwidth = 1 ++ endif ++ endif ++ ++ " Vertically split taglist window width setting ++ if !exists('Tlist_WinWidth') ++ let Tlist_WinWidth = 30 ++ endif ++ ++ " Horizontally split taglist window height setting ++ if !exists('Tlist_WinHeight') ++ let Tlist_WinHeight = 10 ++ endif ++ ++ " Display tag prototypes or tag names in the taglist window ++ if !exists('Tlist_Display_Prototype') ++ let Tlist_Display_Prototype = 0 ++ endif ++ ++ " Display tag scopes in the taglist window ++ if !exists('Tlist_Display_Tag_Scope') ++ let Tlist_Display_Tag_Scope = 1 ++ endif ++ ++ " Use single left mouse click to jump to a tag. By default this is disabled. ++ " Only double click using the mouse will be processed. ++ if !exists('Tlist_Use_SingleClick') ++ let Tlist_Use_SingleClick = 0 ++ endif ++ ++ " Control whether additional help is displayed as part of the taglist or ++ " not. Also, controls whether empty lines are used to separate the tag ++ " tree. ++ if !exists('Tlist_Compact_Format') ++ let Tlist_Compact_Format = 0 ++ endif ++ ++ " Exit Vim if only the taglist window is currently open. By default, this is ++ " set to zero. ++ if !exists('Tlist_Exit_OnlyWindow') ++ let Tlist_Exit_OnlyWindow = 0 ++ endif ++ ++ " Automatically close the folds for the non-active files in the taglist ++ " window ++ if !exists('Tlist_File_Fold_Auto_Close') ++ let Tlist_File_Fold_Auto_Close = 0 ++ endif ++ ++ " Close the taglist window when a tag is selected ++ if !exists('Tlist_Close_On_Select') ++ let Tlist_Close_On_Select = 0 ++ endif ++ ++ " Automatically update the taglist window to display tags for newly ++ " edited files ++ if !exists('Tlist_Auto_Update') ++ let Tlist_Auto_Update = 1 ++ endif ++ ++ " Automatically highlight the current tag ++ if !exists('Tlist_Auto_Highlight_Tag') ++ let Tlist_Auto_Highlight_Tag = 1 ++ endif ++ ++ " Automatically highlight the current tag on entering a buffer ++ if !exists('Tlist_Highlight_Tag_On_BufEnter') ++ let Tlist_Highlight_Tag_On_BufEnter = 1 ++ endif ++ ++ " Enable fold column to display the folding for the tag tree ++ if !exists('Tlist_Enable_Fold_Column') ++ let Tlist_Enable_Fold_Column = 1 ++ endif ++ ++ " Display the tags for only one file in the taglist window ++ if !exists('Tlist_Show_One_File') ++ let Tlist_Show_One_File = 0 ++ endif ++ ++ if !exists('Tlist_Max_Submenu_Items') ++ let Tlist_Max_Submenu_Items = 20 ++ endif ++ ++ if !exists('Tlist_Max_Tag_Length') ++ let Tlist_Max_Tag_Length = 10 ++ endif ++ ++ " Do not change the name of the taglist title variable. The winmanager ++ " plugin relies on this name to determine the title for the taglist ++ " plugin. ++ let TagList_title = "__Tag_List__" ++ ++ " Taglist debug messages ++ let s:tlist_msg = '' ++ ++ " Define the taglist autocommand to automatically open the taglist window ++ " on Vim startup ++ if g:Tlist_Auto_Open ++ autocmd VimEnter * nested call s:Tlist_Window_Check_Auto_Open() ++ endif ++ ++ " Refresh the taglist ++ if g:Tlist_Process_File_Always ++ autocmd BufEnter * call s:Tlist_Refresh() ++ endif ++ ++ if g:Tlist_Show_Menu ++ autocmd GUIEnter * call s:Tlist_Menu_Init() ++ endif ++ ++ " When the taglist buffer is created when loading a Vim session file, ++ " the taglist buffer needs to be initialized. The BufFilePost event ++ " is used to handle this case. ++ autocmd BufFilePost __Tag_List__ call s:Tlist_Vim_Session_Load() ++ ++ " Define the user commands to manage the taglist window ++ command! -nargs=0 -bar TlistToggle call s:Tlist_Window_Toggle() ++ command! -nargs=0 -bar TlistOpen call s:Tlist_Window_Open() ++ " For backwards compatiblity define the Tlist command ++ command! -nargs=0 -bar Tlist TlistToggle ++ command! -nargs=+ -complete=file TlistAddFiles ++ \ call s:Tlist_Add_Files() ++ command! -nargs=+ -complete=dir TlistAddFilesRecursive ++ \ call s:Tlist_Add_Files_Recursive() ++ command! -nargs=0 -bar TlistClose call s:Tlist_Window_Close() ++ command! -nargs=0 -bar TlistUpdate call s:Tlist_Update_Current_File() ++ command! -nargs=0 -bar TlistHighlightTag call s:Tlist_Window_Highlight_Tag( ++ \ fnamemodify(bufname('%'), ':p'), line('.'), 2, 1) ++ " For backwards compatiblity define the TlistSync command ++ command! -nargs=0 -bar TlistSync TlistHighlightTag ++ command! -nargs=* -complete=buffer TlistShowPrototype ++ \ echo Tlist_Get_Tag_Prototype_By_Line() ++ command! -nargs=* -complete=buffer TlistShowTag ++ \ echo Tlist_Get_Tagname_By_Line() ++ command! -nargs=* -complete=file TlistSessionLoad ++ \ call s:Tlist_Session_Load() ++ command! -nargs=* -complete=file TlistSessionSave ++ \ call s:Tlist_Session_Save() ++ command! -bar TlistLock let Tlist_Auto_Update=0 ++ command! -bar TlistUnlock let Tlist_Auto_Update=1 ++ ++ " Commands for enabling/disabling debug and to display debug messages ++ command! -nargs=? -complete=file -bar TlistDebug ++ \ call s:Tlist_Debug_Enable() ++ command! -nargs=0 -bar TlistUndebug call s:Tlist_Debug_Disable() ++ command! -nargs=0 -bar TlistMessages call s:Tlist_Debug_Show() ++ ++ " Define autocommands to autoload the taglist plugin when needed. ++ ++ " Trick to get the current script ID ++ map xx xx ++ let s:tlist_sid = substitute(maparg('xx'), '\(\d\+_\)xx$', ++ \ '\1', '') ++ unmap xx ++ ++ exe 'autocmd FuncUndefined *' . s:tlist_sid . 'Tlist_* source ' . ++ \ escape(expand(''), ' ') ++ exe 'autocmd FuncUndefined *' . s:tlist_sid . 'Tlist_Window_* source ' . ++ \ escape(expand(''), ' ') ++ exe 'autocmd FuncUndefined *' . s:tlist_sid . 'Tlist_Menu_* source ' . ++ \ escape(expand(''), ' ') ++ exe 'autocmd FuncUndefined Tlist_* source ' . ++ \ escape(expand(''), ' ') ++ exe 'autocmd FuncUndefined TagList_* source ' . ++ \ escape(expand(''), ' ') ++ ++ let loaded_taglist = 'fast_load_done' ++ ++ if g:Tlist_Show_Menu && has('gui_running') ++ call s:Tlist_Menu_Init() ++ endif ++ ++ " restore 'cpo' ++ let &cpo = s:cpo_save ++ finish ++endif ++ ++if !exists('s:tlist_sid') ++ " Two or more versions of taglist plugin are installed. Don't ++ " load this version of the plugin. ++ finish ++endif ++ ++unlet! s:tlist_sid ++ ++if loaded_taglist != 'fast_load_done' ++ " restore 'cpo' ++ let &cpo = s:cpo_save ++ finish ++endif ++ ++" Taglist plugin functionality is available ++let loaded_taglist = 'available' ++ ++"------------------- end of user configurable options -------------------- ++ ++" Default language specific settings for supported file types and tag types ++" ++" Variable name format: ++" ++" s:tlist_def_{vim_ftype}_settings ++" ++" vim_ftype - Filetype detected by Vim ++" ++" Value format: ++" ++" ;:;:;... ++" ++" ctags_ftype - File type supported by exuberant ctags ++" flag - Flag supported by exuberant ctags to generate a tag type ++" name - Name of the tag type used in the taglist window to display the ++" tags of this type ++" ++ ++" Ada language ++let s:tlist_def_ada_settings = 'ada;' . ++ \ 'P:package spec;' . ++ \ 'p:package body;' . ++ \ 'T:type spec;' . ++ \ 't:type;' . ++ \ 'U:subtype spec;' . ++ \ 'u:subtype;' . ++ \ 'c:component;' . ++ \ 'l:literal;' . ++ \ 'V:variable spec;' . ++ \ 'v:variable;' . ++ \ 'f:formal;' . ++ \ 'n:constant;' . ++ \ 'x:exception;' . ++ \ 'R:subprogram spec;' . ++ \ 'r:subprogram body;' . ++ \ 'K:task spec;' . ++ \ 'k:task body;' . ++ \ 'O:protected spec;' . ++ \ 'o:protected body;' . ++ \ 'E:entry spec;' . ++ \ 'e:entry body;' . ++ \ 'b:label;' . ++ \ 'i:identifier;' . ++ \ 'a:autovar;' . ++ \ 'y:annon' ++ ++" assembly language ++let s:tlist_def_asm_settings = 'asm;d:define;l:label;m:macro;t:type' ++ ++" aspperl language ++let s:tlist_def_aspperl_settings = 'asp;f:function;s:sub;v:variable' ++ ++" aspvbs language ++let s:tlist_def_aspvbs_settings = 'asp;f:function;s:sub;v:variable' ++ ++" awk language ++let s:tlist_def_awk_settings = 'awk;f:function' ++ ++" beta language ++let s:tlist_def_beta_settings = 'beta;f:fragment;s:slot;v:pattern' ++ ++" c language ++let s:tlist_def_c_settings = 'c;d:macro;g:enum;s:struct;u:union;t:typedef;' . ++ \ 'v:variable;f:function' ++ ++" c++ language ++let s:tlist_def_cpp_settings = 'c++;n:namespace;v:variable;d:macro;t:typedef;' . ++ \ 'c:class;g:enum;s:struct;u:union;f:function' ++ ++" c# language ++let s:tlist_def_cs_settings = 'c#;d:macro;t:typedef;n:namespace;c:class;' . ++ \ 'E:event;g:enum;s:struct;i:interface;' . ++ \ 'p:properties;m:method' ++ ++" cobol language ++let s:tlist_def_cobol_settings = 'cobol;d:data;f:file;g:group;p:paragraph;' . ++ \ 'P:program;s:section' ++ ++" eiffel language ++let s:tlist_def_eiffel_settings = 'eiffel;c:class;f:feature' ++ ++" erlang language ++let s:tlist_def_erlang_settings = 'erlang;d:macro;r:record;m:module;f:function' ++ ++" expect (same as tcl) language ++let s:tlist_def_expect_settings = 'tcl;c:class;f:method;p:procedure' ++ ++" fortran language ++let s:tlist_def_fortran_settings = 'fortran;p:program;b:block data;' . ++ \ 'c:common;e:entry;i:interface;k:type;l:label;m:module;' . ++ \ 'n:namelist;t:derived;v:variable;f:function;s:subroutine' ++ ++" HTML language ++let s:tlist_def_html_settings = 'html;a:anchor;f:javascript function' ++ ++" java language ++let s:tlist_def_java_settings = 'java;p:package;c:class;i:interface;' . ++ \ 'f:field;m:method' ++ ++" javascript language ++let s:tlist_def_javascript_settings = 'javascript;f:function' ++ ++" lisp language ++let s:tlist_def_lisp_settings = 'lisp;f:function' ++ ++" lua language ++let s:tlist_def_lua_settings = 'lua;f:function' ++ ++" makefiles ++let s:tlist_def_make_settings = 'make;m:macro' ++ ++" pascal language ++let s:tlist_def_pascal_settings = 'pascal;f:function;p:procedure' ++ ++" perl language ++let s:tlist_def_perl_settings = 'perl;c:constant;l:label;p:package;s:subroutine' ++ ++" php language ++let s:tlist_def_php_settings = 'php;c:class;d:constant;v:variable;f:function' ++ ++" python language ++let s:tlist_def_python_settings = 'python;c:class;m:member;f:function' ++ ++" rexx language ++let s:tlist_def_rexx_settings = 'rexx;s:subroutine' ++ ++" ruby language ++let s:tlist_def_ruby_settings = 'ruby;c:class;f:method;F:function;' . ++ \ 'm:singleton method' ++ ++" scheme language ++let s:tlist_def_scheme_settings = 'scheme;s:set;f:function' ++ ++" shell language ++let s:tlist_def_sh_settings = 'sh;f:function' ++ ++" C shell language ++let s:tlist_def_csh_settings = 'sh;f:function' ++ ++" Z shell language ++let s:tlist_def_zsh_settings = 'sh;f:function' ++ ++" slang language ++let s:tlist_def_slang_settings = 'slang;n:namespace;f:function' ++ ++" sml language ++let s:tlist_def_sml_settings = 'sml;e:exception;c:functor;s:signature;' . ++ \ 'r:structure;t:type;v:value;f:function' ++ ++" sql language ++let s:tlist_def_sql_settings = 'sql;c:cursor;F:field;P:package;r:record;' . ++ \ 's:subtype;t:table;T:trigger;v:variable;f:function;p:procedure' ++ ++" tcl language ++let s:tlist_def_tcl_settings = 'tcl;c:class;f:method;m:method;p:procedure' ++ ++" vera language ++let s:tlist_def_vera_settings = 'vera;c:class;d:macro;e:enumerator;' . ++ \ 'f:function;g:enum;m:member;p:program;' . ++ \ 'P:prototype;t:task;T:typedef;v:variable;' . ++ \ 'x:externvar' ++ ++"verilog language ++let s:tlist_def_verilog_settings = 'verilog;m:module;c:constant;P:parameter;' . ++ \ 'e:event;r:register;t:task;w:write;p:port;v:variable;f:function' ++ ++" vim language ++let s:tlist_def_vim_settings = 'vim;a:autocmds;v:variable;f:function' ++ ++" yacc language ++let s:tlist_def_yacc_settings = 'yacc;l:label' ++ ++"------------------- end of language specific options -------------------- ++ ++" Vim window size is changed by the taglist plugin or not ++let s:tlist_winsize_chgd = -1 ++" Taglist window is maximized or not ++let s:tlist_win_maximized = 0 ++" Name of files in the taglist ++let s:tlist_file_names='' ++" Number of files in the taglist ++let s:tlist_file_count = 0 ++" Number of filetypes supported by taglist ++let s:tlist_ftype_count = 0 ++" Is taglist part of other plugins like winmanager or cream? ++let s:tlist_app_name = "none" ++" Are we displaying brief help text ++let s:tlist_brief_help = 1 ++" List of files removed on user request ++let s:tlist_removed_flist = "" ++" Index of current file displayed in the taglist window ++let s:tlist_cur_file_idx = -1 ++" Taglist menu is empty or not ++let s:tlist_menu_empty = 1 ++ ++" An autocommand is used to refresh the taglist window when entering any ++" buffer. We don't want to refresh the taglist window if we are entering the ++" file window from one of the taglist functions. The 'Tlist_Skip_Refresh' ++" variable is used to skip the refresh of the taglist window and is set ++" and cleared appropriately. ++let s:Tlist_Skip_Refresh = 0 ++ ++" Tlist_Window_Display_Help() ++function! s:Tlist_Window_Display_Help() ++ if s:tlist_app_name == "winmanager" ++ " To handle a bug in the winmanager plugin, add a space at the ++ " last line ++ call setline('$', ' ') ++ endif ++ ++ if s:tlist_brief_help ++ " Add the brief help ++ call append(0, '" Press to display help text') ++ else ++ " Add the extensive help ++ call append(0, '" : Jump to tag definition') ++ call append(1, '" o : Jump to tag definition in new window') ++ call append(2, '" p : Preview the tag definition') ++ call append(3, '" : Display tag prototype') ++ call append(4, '" u : Update tag list') ++ call append(5, '" s : Select sort field') ++ call append(6, '" d : Remove file from taglist') ++ call append(7, '" x : Zoom-out/Zoom-in taglist window') ++ call append(8, '" + : Open a fold') ++ call append(9, '" - : Close a fold') ++ call append(10, '" * : Open all folds') ++ call append(11, '" = : Close all folds') ++ call append(12, '" [[ : Move to the start of previous file') ++ call append(13, '" ]] : Move to the start of next file') ++ call append(14, '" q : Close the taglist window') ++ call append(15, '" : Remove help text') ++ endif ++endfunction ++ ++" Tlist_Window_Toggle_Help_Text() ++" Toggle taglist plugin help text between the full version and the brief ++" version ++function! s:Tlist_Window_Toggle_Help_Text() ++ if g:Tlist_Compact_Format ++ " In compact display mode, do not display help ++ return ++ endif ++ ++ " Include the empty line displayed after the help text ++ let brief_help_size = 1 ++ let full_help_size = 16 ++ ++ setlocal modifiable ++ ++ " Set report option to a huge value to prevent informational messages ++ " while deleting the lines ++ let old_report = &report ++ set report=99999 ++ ++ " Remove the currently highlighted tag. Otherwise, the help text ++ " might be highlighted by mistake ++ match none ++ ++ " Toggle between brief and full help text ++ if s:tlist_brief_help ++ let s:tlist_brief_help = 0 ++ ++ " Remove the previous help ++ exe '1,' . brief_help_size . ' delete _' ++ ++ " Adjust the start/end line numbers for the files ++ call s:Tlist_Window_Update_Line_Offsets(0, 1, full_help_size - brief_help_size) ++ else ++ let s:tlist_brief_help = 1 ++ ++ " Remove the previous help ++ exe '1,' . full_help_size . ' delete _' ++ ++ " Adjust the start/end line numbers for the files ++ call s:Tlist_Window_Update_Line_Offsets(0, 0, full_help_size - brief_help_size) ++ endif ++ ++ call s:Tlist_Window_Display_Help() ++ ++ " Restore the report option ++ let &report = old_report ++ ++ setlocal nomodifiable ++endfunction ++ ++" Taglist debug support ++let s:tlist_debug = 0 ++ ++" File for storing the debug messages ++let s:tlist_debug_file = '' ++ ++" Tlist_Debug_Enable ++" Enable logging of taglist debug messages. ++function! s:Tlist_Debug_Enable(...) ++ let s:tlist_debug = 1 ++ ++ " Check whether a valid file name is supplied. ++ if a:1 != '' ++ let s:tlist_debug_file = fnamemodify(a:1, ':p') ++ ++ " Empty the log file ++ exe 'redir! > ' . s:tlist_debug_file ++ redir END ++ ++ " Check whether the log file is present/created ++ if !filewritable(s:tlist_debug_file) ++ call s:Tlist_Warning_Msg('Taglist: Unable to create log file ' ++ \ . s:tlist_debug_file) ++ let s:tlist_debug_file = '' ++ endif ++ endif ++endfunction ++ ++" Tlist_Debug_Disable ++" Disable logging of taglist debug messages. ++function! s:Tlist_Debug_Disable(...) ++ let s:tlist_debug = 0 ++ let s:tlist_debug_file = '' ++endfunction ++ ++" Tlist_Debug_Show ++" Display the taglist debug messages in a new window ++function! s:Tlist_Debug_Show() ++ if s:tlist_msg == '' ++ call s:Tlist_Warning_Msg('Taglist: No debug messages') ++ return ++ endif ++ ++ " Open a new window to display the taglist debug messages ++ new taglist_debug.txt ++ " Delete all the lines (if the buffer already exists) ++ silent! %delete _ ++ " Add the messages ++ silent! put =s:tlist_msg ++ " Move the cursor to the first line ++ normal! gg ++endfunction ++ ++" Tlist_Log_Msg ++" Log the supplied debug message along with the time ++function! s:Tlist_Log_Msg(msg) ++ if s:tlist_debug ++ if s:tlist_debug_file != '' ++ exe 'redir >> ' . s:tlist_debug_file ++ silent echon strftime('%H:%M:%S') . ': ' . a:msg . "\n" ++ redir END ++ else ++ " Log the message into a variable ++ " Retain only the last 3000 characters ++ let len = strlen(s:tlist_msg) ++ if len > 3000 ++ let s:tlist_msg = strpart(s:tlist_msg, len - 3000) ++ endif ++ let s:tlist_msg = s:tlist_msg . strftime('%H:%M:%S') . ': ' . ++ \ a:msg . "\n" ++ endif ++ endif ++endfunction ++ ++" Tlist_Warning_Msg() ++" Display a message using WarningMsg highlight group ++function! s:Tlist_Warning_Msg(msg) ++ echohl WarningMsg ++ echomsg a:msg ++ echohl None ++endfunction ++ ++" Last returned file index for file name lookup. ++" Used to speed up file lookup ++let s:tlist_file_name_idx_cache = -1 ++ ++" Tlist_Get_File_Index() ++" Return the index of the specified filename ++function! s:Tlist_Get_File_Index(fname) ++ if s:tlist_file_count == 0 || a:fname == '' ++ return -1 ++ endif ++ ++ " If the new filename is same as the last accessed filename, then ++ " return that index ++ if s:tlist_file_name_idx_cache != -1 && ++ \ s:tlist_file_name_idx_cache < s:tlist_file_count ++ if s:tlist_{s:tlist_file_name_idx_cache}_filename == a:fname ++ " Same as the last accessed file ++ return s:tlist_file_name_idx_cache ++ endif ++ endif ++ ++ " First, check whether the filename is present ++ let s_fname = a:fname . "\n" ++ let i = stridx(s:tlist_file_names, s_fname) ++ if i == -1 ++ let s:tlist_file_name_idx_cache = -1 ++ return -1 ++ endif ++ ++ " Second, compute the file name index ++ let nl_txt = substitute(strpart(s:tlist_file_names, 0, i), "[^\n]", '', 'g') ++ let s:tlist_file_name_idx_cache = strlen(nl_txt) ++ return s:tlist_file_name_idx_cache ++endfunction ++ ++" Last returned file index for line number lookup. ++" Used to speed up file lookup ++let s:tlist_file_lnum_idx_cache = -1 ++ ++" Tlist_Window_Get_File_Index_By_Linenum() ++" Return the index of the filename present in the specified line number ++" Line number refers to the line number in the taglist window ++function! s:Tlist_Window_Get_File_Index_By_Linenum(lnum) ++ call s:Tlist_Log_Msg('Tlist_Window_Get_File_Index_By_Linenum (' . a:lnum . ')') ++ ++ " First try to see whether the new line number is within the range ++ " of the last returned file ++ if s:tlist_file_lnum_idx_cache != -1 && ++ \ s:tlist_file_lnum_idx_cache < s:tlist_file_count ++ if a:lnum >= s:tlist_{s:tlist_file_lnum_idx_cache}_start && ++ \ a:lnum <= s:tlist_{s:tlist_file_lnum_idx_cache}_end ++ return s:tlist_file_lnum_idx_cache ++ endif ++ endif ++ ++ let fidx = -1 ++ ++ if g:Tlist_Show_One_File ++ " Displaying only one file in the taglist window. Check whether ++ " the line is within the tags displayed for that file ++ if s:tlist_cur_file_idx != -1 ++ if a:lnum >= s:tlist_{s:tlist_cur_file_idx}_start ++ \ && a:lnum <= s:tlist_{s:tlist_cur_file_idx}_end ++ let fidx = s:tlist_cur_file_idx ++ endif ++ ++ endif ++ else ++ " Do a binary search in the taglist ++ let left = 0 ++ let right = s:tlist_file_count - 1 ++ ++ while left < right ++ let mid = (left + right) / 2 ++ ++ if a:lnum >= s:tlist_{mid}_start && a:lnum <= s:tlist_{mid}_end ++ let s:tlist_file_lnum_idx_cache = mid ++ return mid ++ endif ++ ++ if a:lnum < s:tlist_{mid}_start ++ let right = mid - 1 ++ else ++ let left = mid + 1 ++ endif ++ endwhile ++ ++ if left >= 0 && left < s:tlist_file_count ++ \ && a:lnum >= s:tlist_{left}_start ++ \ && a:lnum <= s:tlist_{left}_end ++ let fidx = left ++ endif ++ endif ++ ++ let s:tlist_file_lnum_idx_cache = fidx ++ ++ return fidx ++endfunction ++ ++" Tlist_Exe_Cmd_No_Acmds ++" Execute the specified Ex command after disabling autocommands ++function! s:Tlist_Exe_Cmd_No_Acmds(cmd) ++ let old_eventignore = &eventignore ++ set eventignore=all ++ exe a:cmd ++ let &eventignore = old_eventignore ++endfunction ++ ++" Tlist_Skip_File() ++" Check whether tag listing is supported for the specified file ++function! s:Tlist_Skip_File(filename, ftype) ++ " Skip buffers with no names and buffers with filetype not set ++ if a:filename == '' || a:ftype == '' ++ return 1 ++ endif ++ ++ " Skip files which are not supported by exuberant ctags ++ " First check whether default settings for this filetype are available. ++ " If it is not available, then check whether user specified settings are ++ " available. If both are not available, then don't list the tags for this ++ " filetype ++ let var = 's:tlist_def_' . a:ftype . '_settings' ++ if !exists(var) ++ let var = 'g:tlist_' . a:ftype . '_settings' ++ if !exists(var) ++ return 1 ++ endif ++ endif ++ ++ " Skip files which are not readable or files which are not yet stored ++ " to the disk ++ if !filereadable(a:filename) ++ return 1 ++ endif ++ ++ return 0 ++endfunction ++ ++" Tlist_User_Removed_File ++" Returns 1 if a file is removed by a user from the taglist ++function! s:Tlist_User_Removed_File(filename) ++ return stridx(s:tlist_removed_flist, a:filename . "\n") != -1 ++endfunction ++ ++" Tlist_Update_Remove_List ++" Update the list of user removed files from the taglist ++" add == 1, add the file to the removed list ++" add == 0, delete the file from the removed list ++function! s:Tlist_Update_Remove_List(filename, add) ++ if a:add ++ let s:tlist_removed_flist = s:tlist_removed_flist . a:filename . "\n" ++ else ++ let idx = stridx(s:tlist_removed_flist, a:filename . "\n") ++ let text_before = strpart(s:tlist_removed_flist, 0, idx) ++ let rem_text = strpart(s:tlist_removed_flist, idx) ++ let next_idx = stridx(rem_text, "\n") ++ let text_after = strpart(rem_text, next_idx + 1) ++ ++ let s:tlist_removed_flist = text_before . text_after ++ endif ++endfunction ++ ++" Tlist_FileType_Init ++" Initialize the ctags arguments and tag variable for the specified ++" file type ++function! s:Tlist_FileType_Init(ftype) ++ call s:Tlist_Log_Msg('Tlist_FileType_Init (' . a:ftype . ')') ++ " If the user didn't specify any settings, then use the default ++ " ctags args. Otherwise, use the settings specified by the user ++ let var = 'g:tlist_' . a:ftype . '_settings' ++ if exists(var) ++ " User specified ctags arguments ++ let settings = {var} . ';' ++ else ++ " Default ctags arguments ++ let var = 's:tlist_def_' . a:ftype . '_settings' ++ if !exists(var) ++ " No default settings for this file type. This filetype is ++ " not supported ++ return 0 ++ endif ++ let settings = s:tlist_def_{a:ftype}_settings . ';' ++ endif ++ ++ let msg = 'Taglist: Invalid ctags option setting - ' . settings ++ ++ " Format of the option that specifies the filetype and ctags arugments: ++ " ++ " ;flag1:name1;flag2:name2;flag3:name3 ++ " ++ ++ " Extract the file type to pass to ctags. This may be different from the ++ " file type detected by Vim ++ let pos = stridx(settings, ';') ++ if pos == -1 ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ let ctags_ftype = strpart(settings, 0, pos) ++ if ctags_ftype == '' ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ " Make sure a valid filetype is supplied. If the user didn't specify a ++ " valid filetype, then the ctags option settings may be treated as the ++ " filetype ++ if ctags_ftype =~ ':' ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ ++ " Remove the file type from settings ++ let settings = strpart(settings, pos + 1) ++ if settings == '' ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ ++ " Process all the specified ctags flags. The format is ++ " flag1:name1;flag2:name2;flag3:name3 ++ let ctags_flags = '' ++ let cnt = 0 ++ while settings != '' ++ " Extract the flag ++ let pos = stridx(settings, ':') ++ if pos == -1 ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ let flag = strpart(settings, 0, pos) ++ if flag == '' ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ " Remove the flag from settings ++ let settings = strpart(settings, pos + 1) ++ ++ " Extract the tag type name ++ let pos = stridx(settings, ';') ++ if pos == -1 ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ let name = strpart(settings, 0, pos) ++ if name == '' ++ call s:Tlist_Warning_Msg(msg) ++ return 0 ++ endif ++ let settings = strpart(settings, pos + 1) ++ ++ let cnt = cnt + 1 ++ ++ let s:tlist_{a:ftype}_{cnt}_name = flag ++ let s:tlist_{a:ftype}_{cnt}_fullname = name ++ let ctags_flags = ctags_flags . flag ++ endwhile ++ ++ let s:tlist_{a:ftype}_ctags_args = '--language-force=' . ctags_ftype . ++ \ ' --' . ctags_ftype . '-types=' . ctags_flags ++ let s:tlist_{a:ftype}_count = cnt ++ let s:tlist_{a:ftype}_ctags_flags = ctags_flags ++ ++ " Save the filetype name ++ let s:tlist_ftype_{s:tlist_ftype_count}_name = a:ftype ++ let s:tlist_ftype_count = s:tlist_ftype_count + 1 ++ ++ return 1 ++endfunction ++ ++" Tlist_Get_Filetype ++" Determine the filetype for the specified file ++function! s:Tlist_Get_Filetype(fname) ++ " Ignore the filetype autocommands ++ let old_eventignore = &eventignore ++ set eventignore=FileType ++ ++ " Save the 'filetype', as this will be changed temporarily ++ let old_filetype = &filetype ++ ++ " Run the filetypedetect group of autocommands to determine ++ " the filetype ++ exe 'doautocmd filetypedetect BufRead ' . a:fname ++ ++ " Save the detected filetype ++ let ftype = &filetype ++ ++ " Restore the previous state ++ let &filetype = old_filetype ++ let &eventignore = old_eventignore ++ ++ return ftype ++endfunction ++ ++" Tlist_Get_Buffer_Filetype ++" Get the filetype for the specified buffer ++function! s:Tlist_Get_Buffer_Filetype(bnum) ++ if bufloaded(a:bnum) ++ " For loaded buffers, the 'filetype' is already determined ++ return getbufvar(a:bnum, '&filetype') ++ endif ++ ++ " For unloaded buffers, if the 'filetype' option is set, return it ++ let ftype = getbufvar(a:bnum, '&filetype') ++ if ftype != '' ++ return ftype ++ endif ++ ++ " Skip non-existent buffers ++ if !bufexists(a:bnum) ++ return '' ++ endif ++ ++ " For buffers whose filetype is not yet determined, try to determine ++ " the filetype ++ let bname = bufname(a:bnum) ++ ++ return s:Tlist_Get_Filetype(bname) ++endfunction ++ ++" Tlist_Discard_TagInfo ++" Discard the stored tag information for a file ++function! s:Tlist_Discard_TagInfo(fidx) ++ call s:Tlist_Log_Msg('Tlist_Discard_TagInfo (' . ++ \ s:tlist_{a:fidx}_filename . ')') ++ let ftype = s:tlist_{a:fidx}_filetype ++ ++ " Discard information about the tags defined in the file ++ let i = 1 ++ while i <= s:tlist_{a:fidx}_tag_count ++ let fidx_i = 's:tlist_' . a:fidx . '_' . i ++ unlet! {fidx_i}_tag ++ unlet! {fidx_i}_tag_name ++ unlet! {fidx_i}_tag_type ++ unlet! {fidx_i}_ttype_idx ++ unlet! {fidx_i}_tag_proto ++ unlet! {fidx_i}_tag_searchpat ++ unlet! {fidx_i}_tag_linenum ++ let i = i + 1 ++ endwhile ++ ++ let s:tlist_{a:fidx}_tag_count = 0 ++ ++ " Discard information about tag type groups ++ let i = 1 ++ while i <= s:tlist_{ftype}_count ++ let ttype = s:tlist_{ftype}_{i}_name ++ if s:tlist_{a:fidx}_{ttype} != '' ++ let fidx_ttype = 's:tlist_' . a:fidx . '_' . ttype ++ let {fidx_ttype} = '' ++ let {fidx_ttype}_offset = 0 ++ let cnt = {fidx_ttype}_count ++ let {fidx_ttype}_count = 0 ++ let j = 1 ++ while j <= cnt ++ unlet! {fidx_ttype}_{j} ++ let j = j + 1 ++ endwhile ++ endif ++ let i = i + 1 ++ endwhile ++ ++ " Discard the stored menu command also ++ let s:tlist_{a:fidx}_menu_cmd = '' ++endfunction ++ ++" Tlist_Window_Update_Line_Offsets ++" Update the line offsets for tags for files starting from start_idx ++" and displayed in the taglist window by the specified offset ++function! s:Tlist_Window_Update_Line_Offsets(start_idx, increment, offset) ++ let i = a:start_idx ++ ++ while i < s:tlist_file_count ++ if s:tlist_{i}_visible ++ " Update the start/end line number only if the file is visible ++ if a:increment ++ let s:tlist_{i}_start = s:tlist_{i}_start + a:offset ++ let s:tlist_{i}_end = s:tlist_{i}_end + a:offset ++ else ++ let s:tlist_{i}_start = s:tlist_{i}_start - a:offset ++ let s:tlist_{i}_end = s:tlist_{i}_end - a:offset ++ endif ++ endif ++ let i = i + 1 ++ endwhile ++endfunction ++ ++" Tlist_Discard_FileInfo ++" Discard the stored information for a file ++function! s:Tlist_Discard_FileInfo(fidx) ++ call s:Tlist_Log_Msg('Tlist_Discard_FileInfo (' . ++ \ s:tlist_{a:fidx}_filename . ')') ++ call s:Tlist_Discard_TagInfo(a:fidx) ++ ++ let ftype = s:tlist_{a:fidx}_filetype ++ ++ let i = 1 ++ while i <= s:tlist_{ftype}_count ++ let ttype = s:tlist_{ftype}_{i}_name ++ unlet! s:tlist_{a:fidx}_{ttype} ++ unlet! s:tlist_{a:fidx}_{ttype}_offset ++ unlet! s:tlist_{a:fidx}_{ttype}_count ++ let i = i + 1 ++ endwhile ++ ++ unlet! s:tlist_{a:fidx}_filename ++ unlet! s:tlist_{a:fidx}_sort_type ++ unlet! s:tlist_{a:fidx}_filetype ++ unlet! s:tlist_{a:fidx}_mtime ++ unlet! s:tlist_{a:fidx}_start ++ unlet! s:tlist_{a:fidx}_end ++ unlet! s:tlist_{a:fidx}_valid ++ unlet! s:tlist_{a:fidx}_visible ++ unlet! s:tlist_{a:fidx}_tag_count ++ unlet! s:tlist_{a:fidx}_menu_cmd ++endfunction ++ ++" Tlist_Window_Remove_File_From_Display ++" Remove the specified file from display ++function! s:Tlist_Window_Remove_File_From_Display(fidx) ++ call s:Tlist_Log_Msg('Tlist_Window_Remove_File_From_Display (' . ++ \ s:tlist_{a:fidx}_filename . ')') ++ " If the file is not visible then no need to remove it ++ if !s:tlist_{a:fidx}_visible ++ return ++ endif ++ ++ " Remove the tags displayed for the specified file from the window ++ let start = s:tlist_{a:fidx}_start ++ " Include the empty line after the last line also ++ if g:Tlist_Compact_Format ++ let end = s:tlist_{a:fidx}_end ++ else ++ let end = s:tlist_{a:fidx}_end + 1 ++ endif ++ ++ setlocal modifiable ++ exe 'silent! ' . start . ',' . end . 'delete _' ++ setlocal nomodifiable ++ ++ " Correct the start and end line offsets for all the files following ++ " this file, as the tags for this file are removed ++ call s:Tlist_Window_Update_Line_Offsets(a:fidx + 1, 0, end - start + 1) ++endfunction ++ ++" Tlist_Remove_File ++" Remove the file under the cursor or the specified file index ++" user_request - User requested to remove the file from taglist ++function! s:Tlist_Remove_File(file_idx, user_request) ++ let fidx = a:file_idx ++ ++ if fidx == -1 ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(line('.')) ++ if fidx == -1 ++ return ++ endif ++ endif ++ call s:Tlist_Log_Msg('Tlist_Remove_File (' . ++ \ s:tlist_{fidx}_filename . ', ' . a:user_request . ')') ++ ++ let save_winnr = winnr() ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum != -1 ++ " Taglist window is open, remove the file from display ++ ++ if save_winnr != winnum ++ let old_eventignore = &eventignore ++ set eventignore=all ++ exe winnum . 'wincmd w' ++ endif ++ ++ call s:Tlist_Window_Remove_File_From_Display(fidx) ++ ++ if save_winnr != winnum ++ exe save_winnr . 'wincmd w' ++ let &eventignore = old_eventignore ++ endif ++ endif ++ ++ let fname = s:tlist_{fidx}_filename ++ ++ if a:user_request ++ " As the user requested to remove the file from taglist, ++ " add it to the removed list ++ call s:Tlist_Update_Remove_List(fname, 1) ++ endif ++ ++ " Remove the file name from the taglist list of filenames ++ let idx = stridx(s:tlist_file_names, fname . "\n") ++ let text_before = strpart(s:tlist_file_names, 0, idx) ++ let rem_text = strpart(s:tlist_file_names, idx) ++ let next_idx = stridx(rem_text, "\n") ++ let text_after = strpart(rem_text, next_idx + 1) ++ let s:tlist_file_names = text_before . text_after ++ ++ call s:Tlist_Discard_FileInfo(fidx) ++ ++ " Shift all the file variables by one index ++ let i = fidx + 1 ++ ++ while i < s:tlist_file_count ++ let j = i - 1 ++ ++ let s:tlist_{j}_filename = s:tlist_{i}_filename ++ let s:tlist_{j}_sort_type = s:tlist_{i}_sort_type ++ let s:tlist_{j}_filetype = s:tlist_{i}_filetype ++ let s:tlist_{j}_mtime = s:tlist_{i}_mtime ++ let s:tlist_{j}_start = s:tlist_{i}_start ++ let s:tlist_{j}_end = s:tlist_{i}_end ++ let s:tlist_{j}_valid = s:tlist_{i}_valid ++ let s:tlist_{j}_visible = s:tlist_{i}_visible ++ let s:tlist_{j}_tag_count = s:tlist_{i}_tag_count ++ let s:tlist_{j}_menu_cmd = s:tlist_{i}_menu_cmd ++ ++ let k = 1 ++ while k <= s:tlist_{j}_tag_count ++ let s:tlist_{j}_{k}_tag = s:tlist_{i}_{k}_tag ++ let s:tlist_{j}_{k}_tag_name = s:tlist_{i}_{k}_tag_name ++ let s:tlist_{j}_{k}_tag_type = s:Tlist_Get_Tag_Type_By_Tag(i, k) ++ let s:tlist_{j}_{k}_ttype_idx = s:tlist_{i}_{k}_ttype_idx ++ let s:tlist_{j}_{k}_tag_proto = s:Tlist_Get_Tag_Prototype(i, k) ++ let s:tlist_{j}_{k}_tag_searchpat = s:Tlist_Get_Tag_SearchPat(i, k) ++ let s:tlist_{j}_{k}_tag_linenum = s:Tlist_Get_Tag_Linenum(i, k) ++ let k = k + 1 ++ endwhile ++ ++ let ftype = s:tlist_{i}_filetype ++ ++ let k = 1 ++ while k <= s:tlist_{ftype}_count ++ let ttype = s:tlist_{ftype}_{k}_name ++ let s:tlist_{j}_{ttype} = s:tlist_{i}_{ttype} ++ let s:tlist_{j}_{ttype}_offset = s:tlist_{i}_{ttype}_offset ++ let s:tlist_{j}_{ttype}_count = s:tlist_{i}_{ttype}_count ++ if s:tlist_{j}_{ttype} != '' ++ let l = 1 ++ while l <= s:tlist_{j}_{ttype}_count ++ let s:tlist_{j}_{ttype}_{l} = s:tlist_{i}_{ttype}_{l} ++ let l = l + 1 ++ endwhile ++ endif ++ let k = k + 1 ++ endwhile ++ ++ " As the file and tag information is copied to the new index, ++ " discard the previous information ++ call s:Tlist_Discard_FileInfo(i) ++ ++ let i = i + 1 ++ endwhile ++ ++ " Reduce the number of files displayed ++ let s:tlist_file_count = s:tlist_file_count - 1 ++ ++ if g:Tlist_Show_One_File ++ " If the tags for only one file is displayed and if we just ++ " now removed that file, then invalidate the current file idx ++ if s:tlist_cur_file_idx == fidx ++ let s:tlist_cur_file_idx = -1 ++ endif ++ endif ++endfunction ++ ++" Tlist_Window_Goto_Window ++" Goto the taglist window ++function! s:Tlist_Window_Goto_Window() ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum != -1 ++ if winnr() != winnum ++ call s:Tlist_Exe_Cmd_No_Acmds(winnum . 'wincmd w') ++ endif ++ endif ++endfunction ++ ++" Tlist_Window_Create ++" Create a new taglist window. If it is already open, jump to it ++function! s:Tlist_Window_Create() ++ call s:Tlist_Log_Msg('Tlist_Window_Create()') ++ " If the window is open, jump to it ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum != -1 ++ " Jump to the existing window ++ if winnr() != winnum ++ exe winnum . 'wincmd w' ++ endif ++ return ++ endif ++ ++ " If used with winmanager don't open windows. Winmanager will handle ++ " the window/buffer management ++ if s:tlist_app_name == "winmanager" ++ return ++ endif ++ ++ " Create a new window. If user prefers a horizontal window, then open ++ " a horizontally split window. Otherwise open a vertically split ++ " window ++ if g:Tlist_Use_Horiz_Window ++ " Open a horizontally split window ++ let win_dir = 'botright' ++ " Horizontal window height ++ let win_size = g:Tlist_WinHeight ++ else ++ if s:tlist_winsize_chgd == -1 ++ " Open a vertically split window. Increase the window size, if ++ " needed, to accomodate the new window ++ if g:Tlist_Inc_Winwidth && ++ \ &columns < (80 + g:Tlist_WinWidth) ++ " Save the original window position ++ let s:tlist_pre_winx = getwinposx() ++ let s:tlist_pre_winy = getwinposy() ++ ++ " one extra column is needed to include the vertical split ++ let &columns= &columns + g:Tlist_WinWidth + 1 ++ ++ let s:tlist_winsize_chgd = 1 ++ else ++ let s:tlist_winsize_chgd = 0 ++ endif ++ endif ++ ++ if g:Tlist_Use_Right_Window ++ " Open the window at the rightmost place ++ let win_dir = 'botright vertical' ++ else ++ " Open the window at the leftmost place ++ let win_dir = 'topleft vertical' ++ endif ++ let win_size = g:Tlist_WinWidth ++ endif ++ ++ " If the tag listing temporary buffer already exists, then reuse it. ++ " Otherwise create a new buffer ++ let bufnum = bufnr(g:TagList_title) ++ if bufnum == -1 ++ " Create a new buffer ++ let wcmd = g:TagList_title ++ else ++ " Edit the existing buffer ++ let wcmd = '+buffer' . bufnum ++ endif ++ ++ " Create the taglist window ++ exe 'silent! ' . win_dir . ' ' . win_size . 'split ' . wcmd ++ ++ " Save the new window position ++ let s:tlist_winx = getwinposx() ++ let s:tlist_winy = getwinposy() ++ ++ " Initialize the taglist window ++ call s:Tlist_Window_Init() ++endfunction ++ ++" Tlist_Window_Zoom ++" Zoom (maximize/minimize) the taglist window ++function! s:Tlist_Window_Zoom() ++ if s:tlist_win_maximized ++ " Restore the window back to the previous size ++ if g:Tlist_Use_Horiz_Window ++ exe 'resize ' . g:Tlist_WinHeight ++ else ++ exe 'vert resize ' . g:Tlist_WinWidth ++ endif ++ let s:tlist_win_maximized = 0 ++ else ++ " Set the window size to the maximum possible without closing other ++ " windows ++ if g:Tlist_Use_Horiz_Window ++ resize ++ else ++ vert resize ++ endif ++ let s:tlist_win_maximized = 1 ++ endif ++endfunction ++ ++" Tlist_Ballon_Expr ++" When the mouse cursor is over a tag in the taglist window, display the ++" tag prototype (balloon) ++function! Tlist_Ballon_Expr() ++ " Get the file index ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(v:beval_lnum) ++ if fidx == -1 ++ return '' ++ endif ++ ++ " Get the tag output line for the current tag ++ let tidx = s:Tlist_Window_Get_Tag_Index(fidx, v:beval_lnum) ++ if tidx == 0 ++ return '' ++ endif ++ ++ " Get the tag search pattern and display it ++ return s:Tlist_Get_Tag_Prototype(fidx, tidx) ++endfunction ++ ++" Tlist_Window_Check_Width ++" Check the width of the taglist window. For horizontally split windows, the ++" 'winfixheight' option is used to fix the height of the window. For ++" vertically split windows, Vim doesn't support the 'winfixwidth' option. So ++" need to handle window width changes from this function. ++function! s:Tlist_Window_Check_Width() ++ let tlist_winnr = bufwinnr(g:TagList_title) ++ if tlist_winnr == -1 ++ return ++ endif ++ ++ let width = winwidth(tlist_winnr) ++ if width != g:Tlist_WinWidth ++ call s:Tlist_Log_Msg("Tlist_Window_Check_Width: Changing window " . ++ \ "width from " . width . " to " . g:Tlist_WinWidth) ++ let save_winnr = winnr() ++ if save_winnr != tlist_winnr ++ call s:Tlist_Exe_Cmd_No_Acmds(tlist_winnr . 'wincmd w') ++ endif ++ exe 'vert resize ' . g:Tlist_WinWidth ++ if save_winnr != tlist_winnr ++ call s:Tlist_Exe_Cmd_No_Acmds('wincmd p') ++ endif ++ endif ++endfunction ++ ++" Tlist_Window_Exit_Only_Window ++" If the 'Tlist_Exit_OnlyWindow' option is set, then exit Vim if only the ++" taglist window is present. ++function! s:Tlist_Window_Exit_Only_Window() ++ " Before quitting Vim, delete the taglist buffer so that ++ " the '0 mark is correctly set to the previous buffer. ++ if v:version < 700 ++ if winbufnr(2) == -1 ++ bdelete ++ quit ++ endif ++ else ++ if winbufnr(2) == -1 ++ if tabpagenr('$') == 1 ++ " Only one tag page is present ++ bdelete ++ quit ++ else ++ " More than one tab page is present. Close only the current ++ " tab page ++ close ++ endif ++ endif ++ endif ++endfunction ++ ++" Tlist_Window_Init ++" Set the default options for the taglist window ++function! s:Tlist_Window_Init() ++ call s:Tlist_Log_Msg('Tlist_Window_Init()') ++ ++ " The 'readonly' option should not be set for the taglist buffer. ++ " If Vim is started as "view/gview" or if the ":view" command is ++ " used, then the 'readonly' option is set for all the buffers. ++ " Unset it for the taglist buffer ++ setlocal noreadonly ++ ++ " Set the taglist buffer filetype to taglist ++ setlocal filetype=taglist ++ ++ " Define taglist window element highlighting ++ syntax match TagListComment '^" .*' ++ syntax match TagListFileName '^[^" ].*$' ++ syntax match TagListTitle '^ \S.*$' ++ syntax match TagListTagScope '\s\[.\{-\}\]$' ++ ++ " Define the highlighting only if colors are supported ++ if has('gui_running') || &t_Co > 2 ++ " Colors to highlight various taglist window elements ++ " If user defined highlighting group exists, then use them. ++ " Otherwise, use default highlight groups. ++ if hlexists('MyTagListTagName') ++ highlight link TagListTagName MyTagListTagName ++ else ++ highlight default link TagListTagName Search ++ endif ++ " Colors to highlight comments and titles ++ if hlexists('MyTagListComment') ++ highlight link TagListComment MyTagListComment ++ else ++ highlight clear TagListComment ++ highlight default link TagListComment Comment ++ endif ++ if hlexists('MyTagListTitle') ++ highlight link TagListTitle MyTagListTitle ++ else ++ highlight clear TagListTitle ++ highlight default link TagListTitle Title ++ endif ++ if hlexists('MyTagListFileName') ++ highlight link TagListFileName MyTagListFileName ++ else ++ highlight clear TagListFileName ++ highlight default TagListFileName guibg=Grey ctermbg=darkgray ++ \ guifg=white ctermfg=white ++ endif ++ if hlexists('MyTagListTagScope') ++ highlight link TagListTagScope MyTagListTagScope ++ else ++ highlight clear TagListTagScope ++ highlight default link TagListTagScope Identifier ++ endif ++ else ++ highlight default TagListTagName term=reverse cterm=reverse ++ endif ++ ++ " Folding related settings ++ setlocal foldenable ++ setlocal foldminlines=0 ++ setlocal foldmethod=manual ++ setlocal foldlevel=9999 ++ if g:Tlist_Enable_Fold_Column ++ setlocal foldcolumn=3 ++ else ++ setlocal foldcolumn=0 ++ endif ++ setlocal foldtext=v:folddashes.getline(v:foldstart) ++ ++ if s:tlist_app_name != "winmanager" ++ " Mark buffer as scratch ++ silent! setlocal buftype=nofile ++ if s:tlist_app_name == "none" ++ silent! setlocal bufhidden=delete ++ endif ++ silent! setlocal noswapfile ++ " Due to a bug in Vim 6.0, the winbufnr() function fails for unlisted ++ " buffers. So if the taglist buffer is unlisted, multiple taglist ++ " windows will be opened. This bug is fixed in Vim 6.1 and above ++ if v:version >= 601 ++ silent! setlocal nobuflisted ++ endif ++ endif ++ ++ silent! setlocal nowrap ++ ++ " If the 'number' option is set in the source window, it will affect the ++ " taglist window. So forcefully disable 'number' option for the taglist ++ " window ++ silent! setlocal nonumber ++ ++ " Use fixed height when horizontally split window is used ++ if g:Tlist_Use_Horiz_Window ++ if v:version >= 602 ++ set winfixheight ++ endif ++ endif ++ if !g:Tlist_Use_Horiz_Window && v:version >= 700 ++ set winfixwidth ++ endif ++ ++ " Setup balloon evaluation to display tag prototype ++ if v:version >= 700 && has('balloon_eval') ++ setlocal balloonexpr=Tlist_Ballon_Expr() ++ set ballooneval ++ endif ++ ++ " Setup the cpoptions properly for the maps to work ++ let old_cpoptions = &cpoptions ++ set cpoptions&vim ++ ++ " Create buffer local mappings for jumping to the tags and sorting the list ++ nnoremap ++ \ :call Tlist_Window_Jump_To_Tag('useopen') ++ nnoremap o ++ \ :call Tlist_Window_Jump_To_Tag('newwin') ++ nnoremap p ++ \ :call Tlist_Window_Jump_To_Tag('preview') ++ nnoremap P ++ \ :call Tlist_Window_Jump_To_Tag('prevwin') ++ if v:version >= 700 ++ nnoremap t ++ \ :call Tlist_Window_Jump_To_Tag('checktab') ++ nnoremap ++ \ :call Tlist_Window_Jump_To_Tag('newtab') ++ endif ++ nnoremap <2-LeftMouse> ++ \ :call Tlist_Window_Jump_To_Tag('useopen') ++ nnoremap s ++ \ :call Tlist_Change_Sort('cmd', 'toggle', '') ++ nnoremap + :silent! foldopen ++ nnoremap - :silent! foldclose ++ nnoremap * :silent! %foldopen! ++ nnoremap = :silent! %foldclose ++ nnoremap :silent! foldopen ++ nnoremap :silent! foldclose ++ nnoremap :silent! %foldopen! ++ nnoremap :call Tlist_Window_Show_Info() ++ nnoremap u :call Tlist_Window_Update_File() ++ nnoremap d :call Tlist_Remove_File(-1, 1) ++ nnoremap x :call Tlist_Window_Zoom() ++ nnoremap [[ :call Tlist_Window_Move_To_File(-1) ++ nnoremap :call Tlist_Window_Move_To_File(-1) ++ nnoremap ]] :call Tlist_Window_Move_To_File(1) ++ nnoremap :call Tlist_Window_Move_To_File(1) ++ nnoremap :call Tlist_Window_Toggle_Help_Text() ++ nnoremap q :close ++ ++ " Insert mode mappings ++ inoremap ++ \ :call Tlist_Window_Jump_To_Tag('useopen') ++ " Windows needs return ++ inoremap ++ \ :call Tlist_Window_Jump_To_Tag('useopen') ++ inoremap o ++ \ :call Tlist_Window_Jump_To_Tag('newwin') ++ inoremap p ++ \ :call Tlist_Window_Jump_To_Tag('preview') ++ inoremap P ++ \ :call Tlist_Window_Jump_To_Tag('prevwin') ++ if v:version >= 700 ++ inoremap t ++ \ :call Tlist_Window_Jump_To_Tag('checktab') ++ inoremap ++ \ :call Tlist_Window_Jump_To_Tag('newtab') ++ endif ++ inoremap <2-LeftMouse> ++ \ :call Tlist_Window_Jump_To_Tag('useopen') ++ inoremap s ++ \ :call Tlist_Change_Sort('cmd', 'toggle', '') ++ inoremap + :silent! foldopen ++ inoremap - :silent! foldclose ++ inoremap * :silent! %foldopen! ++ inoremap = :silent! %foldclose ++ inoremap :silent! foldopen ++ inoremap :silent! foldclose ++ inoremap :silent! %foldopen! ++ inoremap :call ++ \ Tlist_Window_Show_Info() ++ inoremap u ++ \ :call Tlist_Window_Update_File() ++ inoremap d :call Tlist_Remove_File(-1, 1) ++ inoremap x :call Tlist_Window_Zoom() ++ inoremap [[ :call Tlist_Window_Move_To_File(-1) ++ inoremap :call Tlist_Window_Move_To_File(-1) ++ inoremap ]] :call Tlist_Window_Move_To_File(1) ++ inoremap :call Tlist_Window_Move_To_File(1) ++ inoremap :call Tlist_Window_Toggle_Help_Text() ++ inoremap q :close ++ ++ " Map single left mouse click if the user wants this functionality ++ if g:Tlist_Use_SingleClick == 1 ++ " Contributed by Bindu Wavell ++ " attempt to perform single click mapping, it would be much ++ " nicer if we could nnoremap ... however vim does ++ " not fire the when you use the mouse ++ " to enter a buffer. ++ let clickmap = ':if bufname("%") =~ "__Tag_List__" ' . ++ \ 'call Tlist_Window_Jump_To_Tag("useopen") ' . ++ \ ' endif ' ++ if maparg('', 'n') == '' ++ " no mapping for leftmouse ++ exe ':nnoremap ' . clickmap ++ else ++ " we have a mapping ++ let mapcmd = ':nnoremap ' ++ let mapcmd = mapcmd . substitute(substitute( ++ \ maparg('', 'n'), '|', '', 'g'), ++ \ '\c^', '', '') ++ let mapcmd = mapcmd . clickmap ++ exe mapcmd ++ endif ++ endif ++ ++ " Define the taglist autocommands ++ augroup TagListAutoCmds ++ autocmd! ++ " Display the tag prototype for the tag under the cursor. ++ autocmd CursorHold __Tag_List__ call s:Tlist_Window_Show_Info() ++ " Highlight the current tag periodically ++ autocmd CursorHold * silent call s:Tlist_Window_Highlight_Tag( ++ \ fnamemodify(bufname('%'), ':p'), line('.'), 1, 0) ++ ++ " Adjust the Vim window width when taglist window is closed ++ autocmd BufUnload __Tag_List__ call s:Tlist_Post_Close_Cleanup() ++ " Close the fold for this buffer when leaving the buffer ++ if g:Tlist_File_Fold_Auto_Close ++ autocmd BufEnter * silent ++ \ call s:Tlist_Window_Open_File_Fold(expand('')) ++ endif ++ " Exit Vim itself if only the taglist window is present (optional) ++ if g:Tlist_Exit_OnlyWindow ++ autocmd BufEnter __Tag_List__ nested ++ \ call s:Tlist_Window_Exit_Only_Window() ++ endif ++ if s:tlist_app_name != "winmanager" && ++ \ !g:Tlist_Process_File_Always && ++ \ (!has('gui_running') || !g:Tlist_Show_Menu) ++ " Auto refresh the taglist window ++ autocmd BufEnter * call s:Tlist_Refresh() ++ endif ++ ++ if !g:Tlist_Use_Horiz_Window ++ if v:version < 700 ++ autocmd WinEnter * call s:Tlist_Window_Check_Width() ++ endif ++ endif ++ augroup end ++ ++ " Restore the previous cpoptions settings ++ let &cpoptions = old_cpoptions ++endfunction ++ ++" Tlist_Window_Refresh ++" Display the tags for all the files in the taglist window ++function! s:Tlist_Window_Refresh() ++ call s:Tlist_Log_Msg('Tlist_Window_Refresh()') ++ " Set report option to a huge value to prevent informational messages ++ " while deleting the lines ++ let old_report = &report ++ set report=99999 ++ ++ " Mark the buffer as modifiable ++ setlocal modifiable ++ ++ " Delete the contents of the buffer to the black-hole register ++ silent! %delete _ ++ ++ " As we have cleared the taglist window, mark all the files ++ " as not visible ++ let i = 0 ++ while i < s:tlist_file_count ++ let s:tlist_{i}_visible = 0 ++ let i = i + 1 ++ endwhile ++ ++ if g:Tlist_Compact_Format == 0 ++ " Display help in non-compact mode ++ call s:Tlist_Window_Display_Help() ++ endif ++ ++ " Mark the buffer as not modifiable ++ setlocal nomodifiable ++ ++ " Restore the report option ++ let &report = old_report ++ ++ " If the tags for only one file should be displayed in the taglist ++ " window, then no need to add the tags here. The bufenter autocommand ++ " will add the tags for that file. ++ if g:Tlist_Show_One_File ++ return ++ endif ++ ++ " List all the tags for the previously processed files ++ " Do this only if taglist is configured to display tags for more than ++ " one file. Otherwise, when Tlist_Show_One_File is configured, ++ " tags for the wrong file will be displayed. ++ let i = 0 ++ while i < s:tlist_file_count ++ call s:Tlist_Window_Refresh_File(s:tlist_{i}_filename, ++ \ s:tlist_{i}_filetype) ++ let i = i + 1 ++ endwhile ++ ++ if g:Tlist_Auto_Update ++ " Add and list the tags for all buffers in the Vim buffer list ++ let i = 1 ++ let last_bufnum = bufnr('$') ++ while i <= last_bufnum ++ if buflisted(i) ++ let fname = fnamemodify(bufname(i), ':p') ++ let ftype = s:Tlist_Get_Buffer_Filetype(i) ++ " If the file doesn't support tag listing, skip it ++ if !s:Tlist_Skip_File(fname, ftype) ++ call s:Tlist_Window_Refresh_File(fname, ftype) ++ endif ++ endif ++ let i = i + 1 ++ endwhile ++ endif ++ ++ " If Tlist_File_Fold_Auto_Close option is set, then close all the folds ++ if g:Tlist_File_Fold_Auto_Close ++ " Close all the folds ++ silent! %foldclose ++ endif ++ ++ " Move the cursor to the top of the taglist window ++ normal! gg ++endfunction ++ ++" Tlist_Post_Close_Cleanup() ++" Close the taglist window and adjust the Vim window width ++function! s:Tlist_Post_Close_Cleanup() ++ call s:Tlist_Log_Msg('Tlist_Post_Close_Cleanup()') ++ " Mark all the files as not visible ++ let i = 0 ++ while i < s:tlist_file_count ++ let s:tlist_{i}_visible = 0 ++ let i = i + 1 ++ endwhile ++ ++ " Remove the taglist autocommands ++ silent! autocmd! TagListAutoCmds ++ ++ " Clear all the highlights ++ match none ++ ++ silent! syntax clear TagListTitle ++ silent! syntax clear TagListComment ++ silent! syntax clear TagListTagScope ++ ++ " Remove the left mouse click mapping if it was setup initially ++ if g:Tlist_Use_SingleClick ++ if hasmapto('') ++ nunmap ++ endif ++ endif ++ ++ if s:tlist_app_name != "winmanager" ++ if g:Tlist_Use_Horiz_Window || g:Tlist_Inc_Winwidth == 0 || ++ \ s:tlist_winsize_chgd != 1 || ++ \ &columns < (80 + g:Tlist_WinWidth) ++ " No need to adjust window width if using horizontally split taglist ++ " window or if columns is less than 101 or if the user chose not to ++ " adjust the window width ++ else ++ " If the user didn't manually move the window, then restore the window ++ " position to the pre-taglist position ++ if s:tlist_pre_winx != -1 && s:tlist_pre_winy != -1 && ++ \ getwinposx() == s:tlist_winx && ++ \ getwinposy() == s:tlist_winy ++ exe 'winpos ' . s:tlist_pre_winx . ' ' . s:tlist_pre_winy ++ endif ++ ++ " Adjust the Vim window width ++ let &columns= &columns - (g:Tlist_WinWidth + 1) ++ endif ++ endif ++ ++ let s:tlist_winsize_chgd = -1 ++ ++ " Reset taglist state variables ++ if s:tlist_app_name == "winmanager" ++ let s:tlist_app_name = "none" ++ endif ++ let s:tlist_window_initialized = 0 ++endfunction ++ ++" Tlist_Window_Refresh_File() ++" List the tags defined in the specified file in a Vim window ++function! s:Tlist_Window_Refresh_File(filename, ftype) ++ call s:Tlist_Log_Msg('Tlist_Window_Refresh_File (' . a:filename . ')') ++ " First check whether the file already exists ++ let fidx = s:Tlist_Get_File_Index(a:filename) ++ if fidx != -1 ++ let file_listed = 1 ++ else ++ let file_listed = 0 ++ endif ++ ++ if !file_listed ++ " Check whether this file is removed based on user request ++ " If it is, then don't display the tags for this file ++ if s:Tlist_User_Removed_File(a:filename) ++ return ++ endif ++ endif ++ ++ if file_listed && s:tlist_{fidx}_visible ++ " Check whether the file tags are currently valid ++ if s:tlist_{fidx}_valid ++ " Goto the first line in the file ++ exe s:tlist_{fidx}_start ++ ++ " If the line is inside a fold, open the fold ++ if foldclosed('.') != -1 ++ exe "silent! " . s:tlist_{fidx}_start . "," . ++ \ s:tlist_{fidx}_end . "foldopen!" ++ endif ++ return ++ endif ++ ++ " Discard and remove the tags for this file from display ++ call s:Tlist_Discard_TagInfo(fidx) ++ call s:Tlist_Window_Remove_File_From_Display(fidx) ++ endif ++ ++ " Process and generate a list of tags defined in the file ++ if !file_listed || !s:tlist_{fidx}_valid ++ let ret_fidx = s:Tlist_Process_File(a:filename, a:ftype) ++ if ret_fidx == -1 ++ return ++ endif ++ let fidx = ret_fidx ++ endif ++ ++ " Set report option to a huge value to prevent informational messages ++ " while adding lines to the taglist window ++ let old_report = &report ++ set report=99999 ++ ++ if g:Tlist_Show_One_File ++ " Remove the previous file ++ if s:tlist_cur_file_idx != -1 ++ call s:Tlist_Window_Remove_File_From_Display(s:tlist_cur_file_idx) ++ let s:tlist_{s:tlist_cur_file_idx}_visible = 0 ++ let s:tlist_{s:tlist_cur_file_idx}_start = 0 ++ let s:tlist_{s:tlist_cur_file_idx}_end = 0 ++ endif ++ let s:tlist_cur_file_idx = fidx ++ endif ++ ++ " Mark the buffer as modifiable ++ setlocal modifiable ++ ++ " Add new files to the end of the window. For existing files, add them at ++ " the same line where they were previously present. If the file is not ++ " visible, then add it at the end ++ if s:tlist_{fidx}_start == 0 || !s:tlist_{fidx}_visible ++ if g:Tlist_Compact_Format ++ let s:tlist_{fidx}_start = line('$') ++ else ++ let s:tlist_{fidx}_start = line('$') + 1 ++ endif ++ endif ++ ++ let s:tlist_{fidx}_visible = 1 ++ ++ " Goto the line where this file should be placed ++ if g:Tlist_Compact_Format ++ exe s:tlist_{fidx}_start ++ else ++ exe s:tlist_{fidx}_start - 1 ++ endif ++ ++ let txt = fnamemodify(s:tlist_{fidx}_filename, ':t') . ' (' . ++ \ fnamemodify(s:tlist_{fidx}_filename, ':p:h') . ')' ++ if g:Tlist_Compact_Format == 0 ++ silent! put =txt ++ else ++ silent! put! =txt ++ " Move to the next line ++ exe line('.') + 1 ++ endif ++ let file_start = s:tlist_{fidx}_start ++ ++ " Add the tag names grouped by tag type to the buffer with a title ++ let i = 1 ++ let ttype_cnt = s:tlist_{a:ftype}_count ++ while i <= ttype_cnt ++ let ttype = s:tlist_{a:ftype}_{i}_name ++ " Add the tag type only if there are tags for that type ++ let fidx_ttype = 's:tlist_' . fidx . '_' . ttype ++ let ttype_txt = {fidx_ttype} ++ if ttype_txt != '' ++ let txt = ' ' . s:tlist_{a:ftype}_{i}_fullname ++ if g:Tlist_Compact_Format == 0 ++ let ttype_start_lnum = line('.') + 1 ++ silent! put =txt ++ else ++ let ttype_start_lnum = line('.') ++ silent! put! =txt ++ endif ++ silent! put =ttype_txt ++ ++ let {fidx_ttype}_offset = ttype_start_lnum - file_start ++ ++ " create a fold for this tag type ++ let fold_start = ttype_start_lnum ++ let fold_end = fold_start + {fidx_ttype}_count ++ exe fold_start . ',' . fold_end . 'fold' ++ ++ " Adjust the cursor position ++ if g:Tlist_Compact_Format == 0 ++ exe ttype_start_lnum + {fidx_ttype}_count ++ else ++ exe ttype_start_lnum + {fidx_ttype}_count + 1 ++ endif ++ ++ if g:Tlist_Compact_Format == 0 ++ " Separate the tag types by a empty line ++ silent! put ='' ++ endif ++ endif ++ let i = i + 1 ++ endwhile ++ ++ if s:tlist_{fidx}_tag_count == 0 ++ if g:Tlist_Compact_Format == 0 ++ silent! put ='' ++ endif ++ endif ++ ++ let s:tlist_{fidx}_end = line('.') - 1 ++ ++ " Create a fold for the entire file ++ exe s:tlist_{fidx}_start . ',' . s:tlist_{fidx}_end . 'fold' ++ exe 'silent! ' . s:tlist_{fidx}_start . ',' . ++ \ s:tlist_{fidx}_end . 'foldopen!' ++ ++ " Goto the starting line for this file, ++ exe s:tlist_{fidx}_start ++ ++ if s:tlist_app_name == "winmanager" ++ " To handle a bug in the winmanager plugin, add a space at the ++ " last line ++ call setline('$', ' ') ++ endif ++ ++ " Mark the buffer as not modifiable ++ setlocal nomodifiable ++ ++ " Restore the report option ++ let &report = old_report ++ ++ " Update the start and end line numbers for all the files following this ++ " file ++ let start = s:tlist_{fidx}_start ++ " include the empty line after the last line ++ if g:Tlist_Compact_Format ++ let end = s:tlist_{fidx}_end ++ else ++ let end = s:tlist_{fidx}_end + 1 ++ endif ++ call s:Tlist_Window_Update_Line_Offsets(fidx + 1, 1, end - start + 1) ++ ++ " Now that we have updated the taglist window, update the tags ++ " menu (if present) ++ if g:Tlist_Show_Menu ++ call s:Tlist_Menu_Update_File(1) ++ endif ++endfunction ++ ++" Tlist_Init_File ++" Initialize the variables for a new file ++function! s:Tlist_Init_File(filename, ftype) ++ call s:Tlist_Log_Msg('Tlist_Init_File (' . a:filename . ')') ++ " Add new files at the end of the list ++ let fidx = s:tlist_file_count ++ let s:tlist_file_count = s:tlist_file_count + 1 ++ " Add the new file name to the taglist list of file names ++ let s:tlist_file_names = s:tlist_file_names . a:filename . "\n" ++ ++ " Initialize the file variables ++ let s:tlist_{fidx}_filename = a:filename ++ let s:tlist_{fidx}_sort_type = g:Tlist_Sort_Type ++ let s:tlist_{fidx}_filetype = a:ftype ++ let s:tlist_{fidx}_mtime = -1 ++ let s:tlist_{fidx}_start = 0 ++ let s:tlist_{fidx}_end = 0 ++ let s:tlist_{fidx}_valid = 0 ++ let s:tlist_{fidx}_visible = 0 ++ let s:tlist_{fidx}_tag_count = 0 ++ let s:tlist_{fidx}_menu_cmd = '' ++ ++ " Initialize the tag type variables ++ let i = 1 ++ while i <= s:tlist_{a:ftype}_count ++ let ttype = s:tlist_{a:ftype}_{i}_name ++ let s:tlist_{fidx}_{ttype} = '' ++ let s:tlist_{fidx}_{ttype}_offset = 0 ++ let s:tlist_{fidx}_{ttype}_count = 0 ++ let i = i + 1 ++ endwhile ++ ++ return fidx ++endfunction ++ ++" Tlist_Get_Tag_Type_By_Tag ++" Return the tag type for the specified tag index ++function! s:Tlist_Get_Tag_Type_By_Tag(fidx, tidx) ++ let ttype_var = 's:tlist_' . a:fidx . '_' . a:tidx . '_tag_type' ++ ++ " Already parsed and have the tag name ++ if exists(ttype_var) ++ return {ttype_var} ++ endif ++ ++ let tag_line = s:tlist_{a:fidx}_{a:tidx}_tag ++ let {ttype_var} = s:Tlist_Extract_Tagtype(tag_line) ++ ++ return {ttype_var} ++endfunction ++ ++" Tlist_Get_Tag_Prototype ++function! s:Tlist_Get_Tag_Prototype(fidx, tidx) ++ let tproto_var = 's:tlist_' . a:fidx . '_' . a:tidx . '_tag_proto' ++ ++ " Already parsed and have the tag prototype ++ if exists(tproto_var) ++ return {tproto_var} ++ endif ++ ++ " Parse and extract the tag prototype ++ let tag_line = s:tlist_{a:fidx}_{a:tidx}_tag ++ let start = stridx(tag_line, '/^') + 2 ++ let end = stridx(tag_line, '/;"' . "\t") ++ if tag_line[end - 1] == '$' ++ let end = end -1 ++ endif ++ let tag_proto = strpart(tag_line, start, end - start) ++ let {tproto_var} = substitute(tag_proto, '\s*', '', '') ++ ++ return {tproto_var} ++endfunction ++ ++" Tlist_Get_Tag_SearchPat ++function! s:Tlist_Get_Tag_SearchPat(fidx, tidx) ++ let tpat_var = 's:tlist_' . a:fidx . '_' . a:tidx . '_tag_searchpat' ++ ++ " Already parsed and have the tag search pattern ++ if exists(tpat_var) ++ return {tpat_var} ++ endif ++ ++ " Parse and extract the tag search pattern ++ let tag_line = s:tlist_{a:fidx}_{a:tidx}_tag ++ let start = stridx(tag_line, '/^') + 2 ++ let end = stridx(tag_line, '/;"' . "\t") ++ if tag_line[end - 1] == '$' ++ let end = end -1 ++ endif ++ let {tpat_var} = '\V\^' . strpart(tag_line, start, end - start) . ++ \ (tag_line[end] == '$' ? '\$' : '') ++ ++ return {tpat_var} ++endfunction ++ ++" Tlist_Get_Tag_Linenum ++" Return the tag line number, given the tag index ++function! s:Tlist_Get_Tag_Linenum(fidx, tidx) ++ let tline_var = 's:tlist_' . a:fidx . '_' . a:tidx . '_tag_linenum' ++ ++ " Already parsed and have the tag line number ++ if exists(tline_var) ++ return {tline_var} ++ endif ++ ++ " Parse and extract the tag line number ++ let tag_line = s:tlist_{a:fidx}_{a:tidx}_tag ++ let start = strridx(tag_line, 'line:') + 5 ++ let end = strridx(tag_line, "\t") ++ if end < start ++ let {tline_var} = strpart(tag_line, start) + 0 ++ else ++ let {tline_var} = strpart(tag_line, start, end - start) + 0 ++ endif ++ ++ return {tline_var} ++endfunction ++ ++" Tlist_Parse_Tagline ++" Parse a tag line from the ctags output. Separate the tag output based on the ++" tag type and store it in the tag type variable. ++" The format of each line in the ctags output is: ++" ++" tag_namefile_nameex_cmd;"extension_fields ++" ++function! s:Tlist_Parse_Tagline(tag_line) ++ if a:tag_line == '' ++ " Skip empty lines ++ return ++ endif ++ ++ " Extract the tag type ++ let ttype = s:Tlist_Extract_Tagtype(a:tag_line) ++ ++ " Make sure the tag type is a valid and supported one ++ if ttype == '' || stridx(s:ctags_flags, ttype) == -1 ++ " Line is not in proper tags format or Tag type is not supported ++ return ++ endif ++ ++ " Update the total tag count ++ let s:tidx = s:tidx + 1 ++ ++ " The following variables are used to optimize this code. Vim is slow in ++ " using curly brace names. To reduce the amount of processing needed, the ++ " curly brace variables are pre-processed here ++ let fidx_tidx = 's:tlist_' . s:fidx . '_' . s:tidx ++ let fidx_ttype = 's:tlist_' . s:fidx . '_' . ttype ++ ++ " Update the count of this tag type ++ let ttype_idx = {fidx_ttype}_count + 1 ++ let {fidx_ttype}_count = ttype_idx ++ ++ " Store the ctags output for this tag ++ let {fidx_tidx}_tag = a:tag_line ++ ++ " Store the tag index and the tag type index (back pointers) ++ let {fidx_ttype}_{ttype_idx} = s:tidx ++ let {fidx_tidx}_ttype_idx = ttype_idx ++ ++ " Extract the tag name ++ let tag_name = strpart(a:tag_line, 0, stridx(a:tag_line, "\t")) ++ ++ " Extract the tag scope/prototype ++ if g:Tlist_Display_Prototype ++ let ttxt = ' ' . s:Tlist_Get_Tag_Prototype(s:fidx, s:tidx) ++ else ++ let ttxt = ' ' . tag_name ++ ++ " Add the tag scope, if it is available and is configured. Tag ++ " scope is the last field after the 'line:\t' field ++ if g:Tlist_Display_Tag_Scope ++ let tag_scope = s:Tlist_Extract_Tag_Scope(a:tag_line) ++ if tag_scope != '' ++ let ttxt = ttxt . ' [' . tag_scope . ']' ++ endif ++ endif ++ endif ++ ++ " Add this tag to the tag type variable ++ let {fidx_ttype} = {fidx_ttype} . ttxt . "\n" ++ ++ " Save the tag name ++ let {fidx_tidx}_tag_name = tag_name ++endfunction ++ ++" Tlist_Process_File ++" Get the list of tags defined in the specified file and store them ++" in Vim variables. Returns the file index where the tags are stored. ++function! s:Tlist_Process_File(filename, ftype) ++ call s:Tlist_Log_Msg('Tlist_Process_File (' . a:filename . ', ' . ++ \ a:ftype . ')') ++ " Check whether this file is supported ++ if s:Tlist_Skip_File(a:filename, a:ftype) ++ return -1 ++ endif ++ ++ " If the tag types for this filetype are not yet created, then create ++ " them now ++ let var = 's:tlist_' . a:ftype . '_count' ++ if !exists(var) ++ if s:Tlist_FileType_Init(a:ftype) == 0 ++ return -1 ++ endif ++ endif ++ ++ " If this file is already processed, then use the cached values ++ let fidx = s:Tlist_Get_File_Index(a:filename) ++ if fidx == -1 ++ " First time, this file is loaded ++ let fidx = s:Tlist_Init_File(a:filename, a:ftype) ++ else ++ " File was previously processed. Discard the tag information ++ call s:Tlist_Discard_TagInfo(fidx) ++ endif ++ ++ let s:tlist_{fidx}_valid = 1 ++ ++ " Exuberant ctags arguments to generate a tag list ++ let ctags_args = ' -f - --format=2 --excmd=pattern --fields=nks ' ++ ++ " Form the ctags argument depending on the sort type ++ if s:tlist_{fidx}_sort_type == 'name' ++ let ctags_args = ctags_args . '--sort=yes' ++ else ++ let ctags_args = ctags_args . '--sort=no' ++ endif ++ ++ " Add the filetype specific arguments ++ let ctags_args = ctags_args . ' ' . s:tlist_{a:ftype}_ctags_args ++ ++ " Ctags command to produce output with regexp for locating the tags ++ let ctags_cmd = g:Tlist_Ctags_Cmd . ctags_args ++ let ctags_cmd = ctags_cmd . ' "' . a:filename . '"' ++ ++ if &shellxquote == '"' ++ " Double-quotes within double-quotes will not work in the ++ " command-line.If the 'shellxquote' option is set to double-quotes, ++ " then escape the double-quotes in the ctags command-line. ++ let ctags_cmd = escape(ctags_cmd, '"') ++ endif ++ ++ " In Windows 95, if not using cygwin, disable the 'shellslash' ++ " option. Otherwise, this will cause problems when running the ++ " ctags command. ++ if has('win95') && !has('win32unix') ++ let old_shellslash = &shellslash ++ set noshellslash ++ endif ++ ++ if has('win32') && !has('win32unix') && !has('win95') ++ \ && (&shell =~ 'cmd.exe') ++ " Windows does not correctly deal with commands that have more than 1 ++ " set of double quotes. It will strip them all resulting in: ++ " 'C:\Program' is not recognized as an internal or external command ++ " operable program or batch file. To work around this, place the ++ " command inside a batch file and call the batch file. ++ " Do this only on Win2K, WinXP and above. ++ " Contributed by: David Fishburn. ++ let s:taglist_tempfile = fnamemodify(tempname(), ':h') . ++ \ '\taglist.cmd' ++ exe 'redir! > ' . s:taglist_tempfile ++ silent echo ctags_cmd ++ redir END ++ ++ call s:Tlist_Log_Msg('Cmd inside batch file: ' . ctags_cmd) ++ let ctags_cmd = '"' . s:taglist_tempfile . '"' ++ endif ++ ++ call s:Tlist_Log_Msg('Cmd: ' . ctags_cmd) ++ ++ " Run ctags and get the tag list ++ let cmd_output = system(ctags_cmd) ++ ++ " Restore the value of the 'shellslash' option. ++ if has('win95') && !has('win32unix') ++ let &shellslash = old_shellslash ++ endif ++ ++ if exists('s:taglist_tempfile') ++ " Delete the temporary cmd file created on MS-Windows ++ call delete(s:taglist_tempfile) ++ endif ++ ++ " Handle errors ++ if v:shell_error ++ let msg = "Taglist: Failed to generate tags for " . a:filename ++ call s:Tlist_Warning_Msg(msg) ++ if cmd_output != '' ++ call s:Tlist_Warning_Msg(cmd_output) ++ endif ++ return fidx ++ endif ++ ++ " Store the modification time for the file ++ let s:tlist_{fidx}_mtime = getftime(a:filename) ++ ++ " No tags for current file ++ if cmd_output == '' ++ call s:Tlist_Log_Msg('No tags defined in ' . a:filename) ++ return fidx ++ endif ++ ++ call s:Tlist_Log_Msg('Generated tags information for ' . a:filename) ++ ++ if v:version > 601 ++ " The following script local variables are used by the ++ " Tlist_Parse_Tagline() function. ++ let s:ctags_flags = s:tlist_{a:ftype}_ctags_flags ++ let s:fidx = fidx ++ let s:tidx = 0 ++ ++ " Process the ctags output one line at a time. The substitute() ++ " command is used to parse the tag lines instead of using the ++ " matchstr()/stridx()/strpart() functions for performance reason ++ call substitute(cmd_output, "\\([^\n]\\+\\)\n", ++ \ '\=s:Tlist_Parse_Tagline(submatch(1))', 'g') ++ ++ " Save the number of tags for this file ++ let s:tlist_{fidx}_tag_count = s:tidx ++ ++ " The following script local variables are no longer needed ++ unlet! s:ctags_flags ++ unlet! s:tidx ++ unlet! s:fidx ++ else ++ " Due to a bug in Vim earlier than version 6.1, ++ " we cannot use substitute() to parse the ctags output. ++ " Instead the slow str*() functions are used ++ let ctags_flags = s:tlist_{a:ftype}_ctags_flags ++ let tidx = 0 ++ ++ while cmd_output != '' ++ " Extract one line at a time ++ let idx = stridx(cmd_output, "\n") ++ let one_line = strpart(cmd_output, 0, idx) ++ " Remove the line from the tags output ++ let cmd_output = strpart(cmd_output, idx + 1) ++ ++ if one_line == '' ++ " Line is not in proper tags format ++ continue ++ endif ++ ++ " Extract the tag type ++ let ttype = s:Tlist_Extract_Tagtype(one_line) ++ ++ " Make sure the tag type is a valid and supported one ++ if ttype == '' || stridx(ctags_flags, ttype) == -1 ++ " Line is not in proper tags format or Tag type is not ++ " supported ++ continue ++ endif ++ ++ " Update the total tag count ++ let tidx = tidx + 1 ++ ++ " The following variables are used to optimize this code. Vim is ++ " slow in using curly brace names. To reduce the amount of ++ " processing needed, the curly brace variables are pre-processed ++ " here ++ let fidx_tidx = 's:tlist_' . fidx . '_' . tidx ++ let fidx_ttype = 's:tlist_' . fidx . '_' . ttype ++ ++ " Update the count of this tag type ++ let ttype_idx = {fidx_ttype}_count + 1 ++ let {fidx_ttype}_count = ttype_idx ++ ++ " Store the ctags output for this tag ++ let {fidx_tidx}_tag = one_line ++ ++ " Store the tag index and the tag type index (back pointers) ++ let {fidx_ttype}_{ttype_idx} = tidx ++ let {fidx_tidx}_ttype_idx = ttype_idx ++ ++ " Extract the tag name ++ let tag_name = strpart(one_line, 0, stridx(one_line, "\t")) ++ ++ " Extract the tag scope/prototype ++ if g:Tlist_Display_Prototype ++ let ttxt = ' ' . s:Tlist_Get_Tag_Prototype(fidx, tidx) ++ else ++ let ttxt = ' ' . tag_name ++ ++ " Add the tag scope, if it is available and is configured. Tag ++ " scope is the last field after the 'line:\t' field ++ if g:Tlist_Display_Tag_Scope ++ let tag_scope = s:Tlist_Extract_Tag_Scope(one_line) ++ if tag_scope != '' ++ let ttxt = ttxt . ' [' . tag_scope . ']' ++ endif ++ endif ++ endif ++ ++ " Add this tag to the tag type variable ++ let {fidx_ttype} = {fidx_ttype} . ttxt . "\n" ++ ++ " Save the tag name ++ let {fidx_tidx}_tag_name = tag_name ++ endwhile ++ ++ " Save the number of tags for this file ++ let s:tlist_{fidx}_tag_count = tidx ++ endif ++ ++ call s:Tlist_Log_Msg('Processed ' . s:tlist_{fidx}_tag_count . ++ \ ' tags in ' . a:filename) ++ ++ return fidx ++endfunction ++ ++" Tlist_Update_File ++" Update the tags for a file (if needed) ++function! Tlist_Update_File(filename, ftype) ++ call s:Tlist_Log_Msg('Tlist_Update_File (' . a:filename . ')') ++ " If the file doesn't support tag listing, skip it ++ if s:Tlist_Skip_File(a:filename, a:ftype) ++ return ++ endif ++ ++ " Convert the file name to a full path ++ let fname = fnamemodify(a:filename, ':p') ++ ++ " First check whether the file already exists ++ let fidx = s:Tlist_Get_File_Index(fname) ++ ++ if fidx != -1 && s:tlist_{fidx}_valid ++ " File exists and the tags are valid ++ " Check whether the file was modified after the last tags update ++ " If it is modified, then update the tags ++ if s:tlist_{fidx}_mtime == getftime(fname) ++ return ++ endif ++ else ++ " If the tags were removed previously based on a user request, ++ " as we are going to update the tags (based on the user request), ++ " remove the filename from the deleted list ++ call s:Tlist_Update_Remove_List(fname, 0) ++ endif ++ ++ " If the taglist window is opened, update it ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum == -1 ++ " Taglist window is not present. Just update the taglist ++ " and return ++ call s:Tlist_Process_File(fname, a:ftype) ++ else ++ if g:Tlist_Show_One_File && s:tlist_cur_file_idx != -1 ++ " If tags for only one file are displayed and we are not ++ " updating the tags for that file, then no need to ++ " refresh the taglist window. Otherwise, the taglist ++ " window should be updated. ++ if s:tlist_{s:tlist_cur_file_idx}_filename != fname ++ call s:Tlist_Process_File(fname, a:ftype) ++ return ++ endif ++ endif ++ ++ " Save the current window number ++ let save_winnr = winnr() ++ ++ " Goto the taglist window ++ call s:Tlist_Window_Goto_Window() ++ ++ " Save the cursor position ++ let save_line = line('.') ++ let save_col = col('.') ++ ++ " Update the taglist window ++ call s:Tlist_Window_Refresh_File(fname, a:ftype) ++ ++ " Restore the cursor position ++ if v:version >= 601 ++ call cursor(save_line, save_col) ++ else ++ exe save_line ++ exe 'normal! ' . save_col . '|' ++ endif ++ ++ if winnr() != save_winnr ++ " Go back to the original window ++ call s:Tlist_Exe_Cmd_No_Acmds(save_winnr . 'wincmd w') ++ endif ++ endif ++ ++ " Update the taglist menu ++ if g:Tlist_Show_Menu ++ call s:Tlist_Menu_Update_File(1) ++ endif ++endfunction ++ ++" Tlist_Window_Close ++" Close the taglist window ++function! s:Tlist_Window_Close() ++ call s:Tlist_Log_Msg('Tlist_Window_Close()') ++ " Make sure the taglist window exists ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum == -1 ++ call s:Tlist_Warning_Msg('Error: Taglist window is not open') ++ return ++ endif ++ ++ if winnr() == winnum ++ " Already in the taglist window. Close it and return ++ if winbufnr(2) != -1 ++ " If a window other than the taglist window is open, ++ " then only close the taglist window. ++ close ++ endif ++ else ++ " Goto the taglist window, close it and then come back to the ++ " original window ++ let curbufnr = bufnr('%') ++ exe winnum . 'wincmd w' ++ close ++ " Need to jump back to the original window only if we are not ++ " already in that window ++ let winnum = bufwinnr(curbufnr) ++ if winnr() != winnum ++ exe winnum . 'wincmd w' ++ endif ++ endif ++endfunction ++ ++" Tlist_Window_Mark_File_Window ++" Mark the current window as the file window to use when jumping to a tag. ++" Only if the current window is a non-plugin, non-preview and non-taglist ++" window ++function! s:Tlist_Window_Mark_File_Window() ++ if getbufvar('%', '&buftype') == '' && !&previewwindow ++ let w:tlist_file_window = "yes" ++ endif ++endfunction ++ ++" Tlist_Window_Open ++" Open and refresh the taglist window ++function! s:Tlist_Window_Open() ++ call s:Tlist_Log_Msg('Tlist_Window_Open()') ++ " If the window is open, jump to it ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum != -1 ++ " Jump to the existing window ++ if winnr() != winnum ++ exe winnum . 'wincmd w' ++ endif ++ return ++ endif ++ ++ if s:tlist_app_name == "winmanager" ++ " Taglist plugin is no longer part of the winmanager app ++ let s:tlist_app_name = "none" ++ endif ++ ++ " Get the filename and filetype for the specified buffer ++ let curbuf_name = fnamemodify(bufname('%'), ':p') ++ let curbuf_ftype = getbufvar('%', '&filetype') ++ let cur_lnum = line('.') ++ ++ " Mark the current window as the desired window to open a file when a tag ++ " is selected. ++ call s:Tlist_Window_Mark_File_Window() ++ ++ " Open the taglist window ++ call s:Tlist_Window_Create() ++ ++ call s:Tlist_Window_Refresh() ++ ++ if g:Tlist_Show_One_File ++ " Add only the current buffer and file ++ " ++ " If the file doesn't support tag listing, skip it ++ if !s:Tlist_Skip_File(curbuf_name, curbuf_ftype) ++ call s:Tlist_Window_Refresh_File(curbuf_name, curbuf_ftype) ++ endif ++ endif ++ ++ if g:Tlist_File_Fold_Auto_Close ++ " Open the fold for the current file, as all the folds in ++ " the taglist window are closed ++ let fidx = s:Tlist_Get_File_Index(curbuf_name) ++ if fidx != -1 ++ exe "silent! " . s:tlist_{fidx}_start . "," . ++ \ s:tlist_{fidx}_end . "foldopen!" ++ endif ++ endif ++ ++ " Highlight the current tag ++ call s:Tlist_Window_Highlight_Tag(curbuf_name, cur_lnum, 1, 1) ++endfunction ++ ++" Tlist_Window_Toggle() ++" Open or close a taglist window ++function! s:Tlist_Window_Toggle() ++ call s:Tlist_Log_Msg('Tlist_Window_Toggle()') ++ " If taglist window is open then close it. ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum != -1 ++ call s:Tlist_Window_Close() ++ return ++ endif ++ ++ call s:Tlist_Window_Open() ++ ++ " Go back to the original window, if Tlist_GainFocus_On_ToggleOpen is not ++ " set ++ if !g:Tlist_GainFocus_On_ToggleOpen ++ call s:Tlist_Exe_Cmd_No_Acmds('wincmd p') ++ endif ++ ++ " Update the taglist menu ++ if g:Tlist_Show_Menu ++ call s:Tlist_Menu_Update_File(0) ++ endif ++endfunction ++ ++" Tlist_Process_Filelist ++" Process multiple files. Each filename is separated by "\n" ++" Returns the number of processed files ++function! s:Tlist_Process_Filelist(file_names) ++ let flist = a:file_names ++ ++ " Enable lazy screen updates ++ let old_lazyredraw = &lazyredraw ++ set lazyredraw ++ ++ " Keep track of the number of processed files ++ let fcnt = 0 ++ ++ " Process one file at a time ++ while flist != '' ++ let nl_idx = stridx(flist, "\n") ++ let one_file = strpart(flist, 0, nl_idx) ++ ++ " Remove the filename from the list ++ let flist = strpart(flist, nl_idx + 1) ++ ++ if one_file == '' ++ continue ++ endif ++ ++ " Skip directories ++ if isdirectory(one_file) ++ continue ++ endif ++ ++ let ftype = s:Tlist_Get_Filetype(one_file) ++ ++ echon "\r " ++ echon "\rProcessing tags for " . fnamemodify(one_file, ':p:t') ++ ++ let fcnt = fcnt + 1 ++ ++ call Tlist_Update_File(one_file, ftype) ++ endwhile ++ ++ " Clear the displayed informational messages ++ echon "\r " ++ ++ " Restore the previous state ++ let &lazyredraw = old_lazyredraw ++ ++ return fcnt ++endfunction ++ ++" Tlist_Process_Dir ++" Process the files in a directory matching the specified pattern ++function! s:Tlist_Process_Dir(dir_name, pat) ++ let flist = glob(a:dir_name . '/' . a:pat) . "\n" ++ ++ let fcnt = s:Tlist_Process_Filelist(flist) ++ ++ let len = strlen(a:dir_name) ++ if a:dir_name[len - 1] == '\' || a:dir_name[len - 1] == '/' ++ let glob_expr = a:dir_name . '*' ++ else ++ let glob_expr = a:dir_name . '/*' ++ endif ++ let all_files = glob(glob_expr) . "\n" ++ ++ while all_files != '' ++ let nl_idx = stridx(all_files, "\n") ++ let one_file = strpart(all_files, 0, nl_idx) ++ ++ let all_files = strpart(all_files, nl_idx + 1) ++ if one_file == '' ++ continue ++ endif ++ ++ " Skip non-directory names ++ if !isdirectory(one_file) ++ continue ++ endif ++ ++ echon "\r " ++ echon "\rProcessing files in directory " . fnamemodify(one_file, ':t') ++ let fcnt = fcnt + s:Tlist_Process_Dir(one_file, a:pat) ++ endwhile ++ ++ return fcnt ++endfunction ++ ++" Tlist_Add_Files_Recursive ++" Add files recursively from a directory ++function! s:Tlist_Add_Files_Recursive(dir, ...) ++ let dir_name = fnamemodify(a:dir, ':p') ++ if !isdirectory(dir_name) ++ call s:Tlist_Warning_Msg('Error: ' . dir_name . ' is not a directory') ++ return ++ endif ++ ++ if a:0 == 1 ++ " User specified file pattern ++ let pat = a:1 ++ else ++ " Default file pattern ++ let pat = '*' ++ endif ++ ++ echon "\r " ++ echon "\rProcessing files in directory " . fnamemodify(dir_name, ':t') ++ let fcnt = s:Tlist_Process_Dir(dir_name, pat) ++ ++ echon "\rAdded " . fcnt . " files to the taglist" ++endfunction ++ ++" Tlist_Add_Files ++" Add the specified list of files to the taglist ++function! s:Tlist_Add_Files(...) ++ let flist = '' ++ let i = 1 ++ ++ " Get all the files matching the file patterns supplied as argument ++ while i <= a:0 ++ let flist = flist . glob(a:{i}) . "\n" ++ let i = i + 1 ++ endwhile ++ ++ if flist == '' ++ call s:Tlist_Warning_Msg('Error: No matching files are found') ++ return ++ endif ++ ++ let fcnt = s:Tlist_Process_Filelist(flist) ++ echon "\rAdded " . fcnt . " files to the taglist" ++endfunction ++ ++" Tlist_Extract_Tagtype ++" Extract the tag type from the tag text ++function! s:Tlist_Extract_Tagtype(tag_line) ++ " The tag type is after the tag prototype field. The prototype field ++ " ends with the /;"\t string. We add 4 at the end to skip the characters ++ " in this special string.. ++ let start = strridx(a:tag_line, '/;"' . "\t") + 4 ++ let end = strridx(a:tag_line, 'line:') - 1 ++ let ttype = strpart(a:tag_line, start, end - start) ++ ++ return ttype ++endfunction ++ ++" Tlist_Extract_Tag_Scope ++" Extract the tag scope from the tag text ++function! s:Tlist_Extract_Tag_Scope(tag_line) ++ let start = strridx(a:tag_line, 'line:') ++ let end = strridx(a:tag_line, "\t") ++ if end <= start ++ return '' ++ endif ++ ++ let tag_scope = strpart(a:tag_line, end + 1) ++ let tag_scope = strpart(tag_scope, stridx(tag_scope, ':') + 1) ++ ++ return tag_scope ++endfunction ++ ++" Tlist_Refresh() ++" Refresh the taglist ++function! s:Tlist_Refresh() ++ call s:Tlist_Log_Msg('Tlist_Refresh (Skip_Refresh = ' . ++ \ s:Tlist_Skip_Refresh . ', ' . bufname('%') . ')') ++ " If we are entering the buffer from one of the taglist functions, then ++ " no need to refresh the taglist window again. ++ if s:Tlist_Skip_Refresh ++ " We still need to update the taglist menu ++ if g:Tlist_Show_Menu ++ call s:Tlist_Menu_Update_File(0) ++ endif ++ return ++ endif ++ ++ " If part of the winmanager plugin and not configured to process ++ " tags always and not configured to display the tags menu, then return ++ if (s:tlist_app_name == 'winmanager') && !g:Tlist_Process_File_Always ++ \ && !g:Tlist_Show_Menu ++ return ++ endif ++ ++ " Skip buffers with 'buftype' set to nofile, nowrite, quickfix or help ++ if &buftype != '' ++ return ++ endif ++ ++ let filename = fnamemodify(bufname('%'), ':p') ++ let ftype = &filetype ++ ++ " If the file doesn't support tag listing, skip it ++ if s:Tlist_Skip_File(filename, ftype) ++ return ++ endif ++ ++ let tlist_win = bufwinnr(g:TagList_title) ++ ++ " If the taglist window is not opened and not configured to process ++ " tags always and not displaying the tags menu, then return ++ if tlist_win == -1 && !g:Tlist_Process_File_Always && !g:Tlist_Show_Menu ++ return ++ endif ++ ++ let fidx = s:Tlist_Get_File_Index(filename) ++ if fidx == -1 ++ " Check whether this file is removed based on user request ++ " If it is, then don't display the tags for this file ++ if s:Tlist_User_Removed_File(filename) ++ return ++ endif ++ ++ " If the taglist should not be auto updated, then return ++ if !g:Tlist_Auto_Update ++ return ++ endif ++ endif ++ ++ let cur_lnum = line('.') ++ ++ if fidx == -1 ++ " Update the tags for the file ++ let fidx = s:Tlist_Process_File(filename, ftype) ++ else ++ let mtime = getftime(filename) ++ if s:tlist_{fidx}_mtime != mtime ++ " Invalidate the tags listed for this file ++ let s:tlist_{fidx}_valid = 0 ++ ++ " Update the taglist and the window ++ call Tlist_Update_File(filename, ftype) ++ ++ " Store the new file modification time ++ let s:tlist_{fidx}_mtime = mtime ++ endif ++ endif ++ ++ " Update the taglist window ++ if tlist_win != -1 ++ " Disable screen updates ++ let old_lazyredraw = &lazyredraw ++ set nolazyredraw ++ ++ " Save the current window number ++ let save_winnr = winnr() ++ ++ " Goto the taglist window ++ call s:Tlist_Window_Goto_Window() ++ ++ if !g:Tlist_Auto_Highlight_Tag || !g:Tlist_Highlight_Tag_On_BufEnter ++ " Save the cursor position ++ let save_line = line('.') ++ let save_col = col('.') ++ endif ++ ++ " Update the taglist window ++ call s:Tlist_Window_Refresh_File(filename, ftype) ++ ++ " Open the fold for the file ++ exe "silent! " . s:tlist_{fidx}_start . "," . ++ \ s:tlist_{fidx}_end . "foldopen!" ++ ++ if g:Tlist_Highlight_Tag_On_BufEnter && g:Tlist_Auto_Highlight_Tag ++ if g:Tlist_Show_One_File && s:tlist_cur_file_idx != fidx ++ " If displaying tags for only one file in the taglist ++ " window and about to display the tags for a new file, ++ " then center the current tag line for the new file ++ let center_tag_line = 1 ++ else ++ let center_tag_line = 0 ++ endif ++ ++ " Highlight the current tag ++ call s:Tlist_Window_Highlight_Tag(filename, cur_lnum, 1, center_tag_line) ++ else ++ " Restore the cursor position ++ if v:version >= 601 ++ call cursor(save_line, save_col) ++ else ++ exe save_line ++ exe 'normal! ' . save_col . '|' ++ endif ++ endif ++ ++ " Jump back to the original window ++ if save_winnr != winnr() ++ call s:Tlist_Exe_Cmd_No_Acmds(save_winnr . 'wincmd w') ++ endif ++ ++ " Restore screen updates ++ let &lazyredraw = old_lazyredraw ++ endif ++ ++ " Update the taglist menu ++ if g:Tlist_Show_Menu ++ call s:Tlist_Menu_Update_File(0) ++ endif ++endfunction ++ ++" Tlist_Change_Sort() ++" Change the sort order of the tag listing ++" caller == 'cmd', command used in the taglist window ++" caller == 'menu', taglist menu ++" action == 'toggle', toggle sort from name to order and vice versa ++" action == 'set', set the sort order to sort_type ++function! s:Tlist_Change_Sort(caller, action, sort_type) ++ call s:Tlist_Log_Msg('Tlist_Change_Sort (caller = ' . a:caller . ++ \ ', action = ' . a:action . ', sort_type = ' . a:sort_type . ')') ++ if a:caller == 'cmd' ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(line('.')) ++ if fidx == -1 ++ return ++ endif ++ ++ " Remove the previous highlighting ++ match none ++ elseif a:caller == 'menu' ++ let fidx = s:Tlist_Get_File_Index(fnamemodify(bufname('%'), ':p')) ++ if fidx == -1 ++ return ++ endif ++ endif ++ ++ if a:action == 'toggle' ++ let sort_type = s:tlist_{fidx}_sort_type ++ ++ " Toggle the sort order from 'name' to 'order' and vice versa ++ if sort_type == 'name' ++ let s:tlist_{fidx}_sort_type = 'order' ++ else ++ let s:tlist_{fidx}_sort_type = 'name' ++ endif ++ else ++ let s:tlist_{fidx}_sort_type = a:sort_type ++ endif ++ ++ " Invalidate the tags listed for this file ++ let s:tlist_{fidx}_valid = 0 ++ ++ if a:caller == 'cmd' ++ " Save the current line for later restoration ++ let curline = '\V\^' . getline('.') . '\$' ++ ++ call s:Tlist_Window_Refresh_File(s:tlist_{fidx}_filename, ++ \ s:tlist_{fidx}_filetype) ++ ++ exe s:tlist_{fidx}_start . ',' . s:tlist_{fidx}_end . 'foldopen!' ++ ++ " Go back to the cursor line before the tag list is sorted ++ call search(curline, 'w') ++ ++ call s:Tlist_Menu_Update_File(1) ++ else ++ call s:Tlist_Menu_Remove_File() ++ ++ call s:Tlist_Refresh() ++ endif ++endfunction ++ ++" Tlist_Update_Current_File() ++" Update taglist for the current buffer by regenerating the tag list ++" Contributed by WEN Guopeng. ++function! s:Tlist_Update_Current_File() ++ call s:Tlist_Log_Msg('Tlist_Update_Current_File()') ++ if winnr() == bufwinnr(g:TagList_title) ++ " In the taglist window. Update the current file ++ call s:Tlist_Window_Update_File() ++ else ++ " Not in the taglist window. Update the current buffer ++ let filename = fnamemodify(bufname('%'), ':p') ++ let fidx = s:Tlist_Get_File_Index(filename) ++ if fidx != -1 ++ let s:tlist_{fidx}_valid = 0 ++ endif ++ call Tlist_Update_File(filename, &filetype) ++ endif ++endfunction ++ ++" Tlist_Window_Update_File() ++" Update the tags displayed in the taglist window ++function! s:Tlist_Window_Update_File() ++ call s:Tlist_Log_Msg('Tlist_Window_Update_File()') ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(line('.')) ++ if fidx == -1 ++ return ++ endif ++ ++ " Remove the previous highlighting ++ match none ++ ++ " Save the current line for later restoration ++ let curline = '\V\^' . getline('.') . '\$' ++ ++ let s:tlist_{fidx}_valid = 0 ++ ++ " Update the taglist window ++ call s:Tlist_Window_Refresh_File(s:tlist_{fidx}_filename, ++ \ s:tlist_{fidx}_filetype) ++ ++ exe s:tlist_{fidx}_start . ',' . s:tlist_{fidx}_end . 'foldopen!' ++ ++ " Go back to the tag line before the list is updated ++ call search(curline, 'w') ++endfunction ++ ++" Tlist_Window_Get_Tag_Type_By_Linenum() ++" Return the tag type index for the specified line in the taglist window ++function! s:Tlist_Window_Get_Tag_Type_By_Linenum(fidx, lnum) ++ let ftype = s:tlist_{a:fidx}_filetype ++ ++ " Determine to which tag type the current line number belongs to using the ++ " tag type start line number and the number of tags in a tag type ++ let i = 1 ++ while i <= s:tlist_{ftype}_count ++ let ttype = s:tlist_{ftype}_{i}_name ++ let start_lnum = ++ \ s:tlist_{a:fidx}_start + s:tlist_{a:fidx}_{ttype}_offset ++ let end = start_lnum + s:tlist_{a:fidx}_{ttype}_count ++ if a:lnum >= start_lnum && a:lnum <= end ++ break ++ endif ++ let i = i + 1 ++ endwhile ++ ++ " Current line doesn't belong to any of the displayed tag types ++ if i > s:tlist_{ftype}_count ++ return '' ++ endif ++ ++ return ttype ++endfunction ++ ++" Tlist_Window_Get_Tag_Index() ++" Return the tag index for the specified line in the taglist window ++function! s:Tlist_Window_Get_Tag_Index(fidx, lnum) ++ let ttype = s:Tlist_Window_Get_Tag_Type_By_Linenum(a:fidx, a:lnum) ++ ++ " Current line doesn't belong to any of the displayed tag types ++ if ttype == '' ++ return 0 ++ endif ++ ++ " Compute the index into the displayed tags for the tag type ++ let ttype_lnum = s:tlist_{a:fidx}_start + s:tlist_{a:fidx}_{ttype}_offset ++ let tidx = a:lnum - ttype_lnum ++ if tidx == 0 ++ return 0 ++ endif ++ ++ " Get the corresponding tag line and return it ++ return s:tlist_{a:fidx}_{ttype}_{tidx} ++endfunction ++ ++" Tlist_Window_Highlight_Line ++" Highlight the current line ++function! s:Tlist_Window_Highlight_Line() ++ " Clear previously selected name ++ match none ++ ++ " Highlight the current line ++ if g:Tlist_Display_Prototype == 0 ++ let pat = '/\%' . line('.') . 'l\s\+\zs.*/' ++ else ++ let pat = '/\%' . line('.') . 'l.*/' ++ endif ++ ++ exe 'match TagListTagName ' . pat ++endfunction ++ ++" Tlist_Window_Open_File ++" Open the specified file in either a new window or an existing window ++" and place the cursor at the specified tag pattern ++function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat) ++ call s:Tlist_Log_Msg('Tlist_Window_Open_File (' . a:filename . ',' . ++ \ a:win_ctrl . ')') ++ let prev_Tlist_Skip_Refresh = s:Tlist_Skip_Refresh ++ let s:Tlist_Skip_Refresh = 1 ++ ++ if s:tlist_app_name == "winmanager" ++ " Let the winmanager edit the file ++ call WinManagerFileEdit(a:filename, a:win_ctrl == 'newwin') ++ else ++ ++ if a:win_ctrl == 'newtab' ++ " Create a new tab ++ exe 'tabnew ' . escape(a:filename, ' ') ++ " Open the taglist window in the new tab ++ call s:Tlist_Window_Open() ++ endif ++ ++ if a:win_ctrl == 'checktab' ++ " Check whether the file is present in any of the tabs. ++ " If the file is present in the current tab, then use the ++ " current tab. ++ if bufwinnr(a:filename) != -1 ++ let file_present_in_tab = 1 ++ let i = tabpagenr() ++ else ++ let i = 1 ++ let bnum = bufnr(a:filename) ++ let file_present_in_tab = 0 ++ while i <= tabpagenr('$') ++ if index(tabpagebuflist(i), bnum) != -1 ++ let file_present_in_tab = 1 ++ break ++ endif ++ let i += 1 ++ endwhile ++ endif ++ ++ if file_present_in_tab ++ " Goto the tab containing the file ++ exe 'tabnext ' . i ++ else ++ " Open a new tab ++ exe 'tabnew ' . escape(a:filename, ' ') ++ ++ " Open the taglist window ++ call s:Tlist_Window_Open() ++ endif ++ endif ++ ++ let winnum = -1 ++ if a:win_ctrl == 'prevwin' ++ " Open the file in the previous window, if it is usable ++ let cur_win = winnr() ++ wincmd p ++ if &buftype == '' && !&previewwindow ++ exe "edit " . escape(a:filename, ' ') ++ let winnum = winnr() ++ else ++ " Previous window is not usable ++ exe cur_win . 'wincmd w' ++ endif ++ endif ++ ++ " Goto the window containing the file. If the window is not there, open a ++ " new window ++ if winnum == -1 ++ let winnum = bufwinnr(a:filename) ++ endif ++ ++ if winnum == -1 ++ " Locate the previously used window for opening a file ++ let fwin_num = 0 ++ let first_usable_win = 0 ++ ++ let i = 1 ++ let bnum = winbufnr(i) ++ while bnum != -1 ++ if getwinvar(i, 'tlist_file_window') == 'yes' ++ let fwin_num = i ++ break ++ endif ++ if first_usable_win == 0 && ++ \ getbufvar(bnum, '&buftype') == '' && ++ \ !getwinvar(i, '&previewwindow') ++ " First non-taglist, non-plugin and non-preview window ++ let first_usable_win = i ++ endif ++ let i = i + 1 ++ let bnum = winbufnr(i) ++ endwhile ++ ++ " If a previously used window is not found, then use the first ++ " non-taglist window ++ if fwin_num == 0 ++ let fwin_num = first_usable_win ++ endif ++ ++ if fwin_num != 0 ++ " Jump to the file window ++ exe fwin_num . "wincmd w" ++ ++ " If the user asked to jump to the tag in a new window, then split ++ " the existing window into two. ++ if a:win_ctrl == 'newwin' ++ split ++ endif ++ exe "edit " . escape(a:filename, ' ') ++ else ++ " Open a new window ++ if g:Tlist_Use_Horiz_Window ++ exe 'leftabove split ' . escape(a:filename, ' ') ++ else ++ if winbufnr(2) == -1 ++ " Only the taglist window is present ++ if g:Tlist_Use_Right_Window ++ exe 'leftabove vertical split ' . ++ \ escape(a:filename, ' ') ++ else ++ exe 'rightbelow vertical split ' . ++ \ escape(a:filename, ' ') ++ endif ++ ++ " Go to the taglist window to change the window size to ++ " the user configured value ++ call s:Tlist_Exe_Cmd_No_Acmds('wincmd p') ++ if g:Tlist_Use_Horiz_Window ++ exe 'resize ' . g:Tlist_WinHeight ++ else ++ exe 'vertical resize ' . g:Tlist_WinWidth ++ endif ++ " Go back to the file window ++ call s:Tlist_Exe_Cmd_No_Acmds('wincmd p') ++ else ++ " A plugin or help window is also present ++ wincmd w ++ exe 'leftabove split ' . escape(a:filename, ' ') ++ endif ++ endif ++ endif ++ " Mark the window, so that it can be reused. ++ call s:Tlist_Window_Mark_File_Window() ++ else ++ if v:version >= 700 ++ " If the file is opened in more than one window, then check ++ " whether the last accessed window has the selected file. ++ " If it does, then use that window. ++ let lastwin_bufnum = winbufnr(winnr('#')) ++ if bufnr(a:filename) == lastwin_bufnum ++ let winnum = winnr('#') ++ endif ++ endif ++ exe winnum . 'wincmd w' ++ ++ " If the user asked to jump to the tag in a new window, then split the ++ " existing window into two. ++ if a:win_ctrl == 'newwin' ++ split ++ endif ++ endif ++ endif ++ ++ " Jump to the tag ++ if a:tagpat != '' ++ " Add the current cursor position to the jump list, so that user can ++ " jump back using the ' and ` marks. ++ mark ' ++ silent call search(a:tagpat, 'w') ++ ++ " Bring the line to the middle of the window ++ normal! z. ++ ++ " If the line is inside a fold, open the fold ++ if foldclosed('.') != -1 ++ .foldopen ++ endif ++ endif ++ ++ " If the user selects to preview the tag then jump back to the ++ " taglist window ++ if a:win_ctrl == 'preview' ++ " Go back to the taglist window ++ let winnum = bufwinnr(g:TagList_title) ++ exe winnum . 'wincmd w' ++ else ++ " If the user has selected to close the taglist window, when a ++ " tag is selected, close the taglist window ++ if g:Tlist_Close_On_Select ++ call s:Tlist_Window_Goto_Window() ++ close ++ ++ " Go back to the window displaying the selected file ++ let wnum = bufwinnr(a:filename) ++ if wnum != -1 && wnum != winnr() ++ call s:Tlist_Exe_Cmd_No_Acmds(wnum . 'wincmd w') ++ endif ++ endif ++ endif ++ ++ let s:Tlist_Skip_Refresh = prev_Tlist_Skip_Refresh ++endfunction ++ ++" Tlist_Window_Jump_To_Tag() ++" Jump to the location of the current tag ++" win_ctrl == useopen - Reuse the existing file window ++" win_ctrl == newwin - Open a new window ++" win_ctrl == preview - Preview the tag ++" win_ctrl == prevwin - Open in previous window ++" win_ctrl == newtab - Open in new tab ++function! s:Tlist_Window_Jump_To_Tag(win_ctrl) ++ call s:Tlist_Log_Msg('Tlist_Window_Jump_To_Tag(' . a:win_ctrl . ')') ++ " Do not process comment lines and empty lines ++ let curline = getline('.') ++ if curline =~ '^\s*$' || curline[0] == '"' ++ return ++ endif ++ ++ " If inside a closed fold, then use the first line of the fold ++ " and jump to the file. ++ let lnum = foldclosed('.') ++ if lnum == -1 ++ " Jump to the selected tag or file ++ let lnum = line('.') ++ else ++ " Open the closed fold ++ .foldopen! ++ endif ++ ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(lnum) ++ if fidx == -1 ++ return ++ endif ++ ++ " Get the tag output for the current tag ++ let tidx = s:Tlist_Window_Get_Tag_Index(fidx, lnum) ++ if tidx != 0 ++ let tagpat = s:Tlist_Get_Tag_SearchPat(fidx, tidx) ++ ++ " Highlight the tagline ++ call s:Tlist_Window_Highlight_Line() ++ else ++ " Selected a line which is not a tag name. Just edit the file ++ let tagpat = '' ++ endif ++ ++ call s:Tlist_Window_Open_File(a:win_ctrl, s:tlist_{fidx}_filename, tagpat) ++endfunction ++ ++" Tlist_Window_Show_Info() ++" Display information about the entry under the cursor ++function! s:Tlist_Window_Show_Info() ++ call s:Tlist_Log_Msg('Tlist_Window_Show_Info()') ++ ++ " Clear the previously displayed line ++ echo ++ ++ " Do not process comment lines and empty lines ++ let curline = getline('.') ++ if curline =~ '^\s*$' || curline[0] == '"' ++ return ++ endif ++ ++ " If inside a fold, then don't display the prototype ++ if foldclosed('.') != -1 ++ return ++ endif ++ ++ let lnum = line('.') ++ ++ " Get the file index ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(lnum) ++ if fidx == -1 ++ return ++ endif ++ ++ if lnum == s:tlist_{fidx}_start ++ " Cursor is on a file name ++ let fname = s:tlist_{fidx}_filename ++ if strlen(fname) > 50 ++ let fname = fnamemodify(fname, ':t') ++ endif ++ echo fname . ', Filetype=' . s:tlist_{fidx}_filetype . ++ \ ', Tag count=' . s:tlist_{fidx}_tag_count ++ return ++ endif ++ ++ " Get the tag output line for the current tag ++ let tidx = s:Tlist_Window_Get_Tag_Index(fidx, lnum) ++ if tidx == 0 ++ " Cursor is on a tag type ++ let ttype = s:Tlist_Window_Get_Tag_Type_By_Linenum(fidx, lnum) ++ if ttype == '' ++ return ++ endif ++ ++ let ttype_name = '' ++ ++ let ftype = s:tlist_{fidx}_filetype ++ let i = 1 ++ while i <= s:tlist_{ftype}_count ++ if ttype == s:tlist_{ftype}_{i}_name ++ let ttype_name = s:tlist_{ftype}_{i}_fullname ++ break ++ endif ++ let i = i + 1 ++ endwhile ++ ++ echo 'Tag type=' . ttype_name . ++ \ ', Tag count=' . s:tlist_{fidx}_{ttype}_count ++ return ++ endif ++ ++ " Get the tag search pattern and display it ++ echo s:Tlist_Get_Tag_Prototype(fidx, tidx) ++endfunction ++ ++" Tlist_Find_Nearest_Tag_Idx ++" Find the tag idx nearest to the supplied line number ++" Returns -1, if a tag couldn't be found for the specified line number ++function! s:Tlist_Find_Nearest_Tag_Idx(fidx, linenum) ++ let sort_type = s:tlist_{a:fidx}_sort_type ++ ++ let left = 1 ++ let right = s:tlist_{a:fidx}_tag_count ++ ++ if sort_type == 'order' ++ " Tags sorted by order, use a binary search. ++ " The idea behind this function is taken from the ctags.vim script (by ++ " Alexey Marinichev) available at the Vim online website. ++ ++ " If the current line is the less than the first tag, then no need to ++ " search ++ let first_lnum = s:Tlist_Get_Tag_Linenum(a:fidx, 1) ++ ++ if a:linenum < first_lnum ++ return -1 ++ endif ++ ++ while left < right ++ let middle = (right + left + 1) / 2 ++ let middle_lnum = s:Tlist_Get_Tag_Linenum(a:fidx, middle) ++ ++ if middle_lnum == a:linenum ++ let left = middle ++ break ++ endif ++ ++ if middle_lnum > a:linenum ++ let right = middle - 1 ++ else ++ let left = middle ++ endif ++ endwhile ++ else ++ " Tags sorted by name, use a linear search. (contributed by Dave ++ " Eggum). ++ " Look for a tag with a line number less than or equal to the supplied ++ " line number. If multiple tags are found, then use the tag with the ++ " line number closest to the supplied line number. IOW, use the tag ++ " with the highest line number. ++ let closest_lnum = 0 ++ let final_left = 0 ++ while left <= right ++ let lnum = s:Tlist_Get_Tag_Linenum(a:fidx, left) ++ ++ if lnum < a:linenum && lnum > closest_lnum ++ let closest_lnum = lnum ++ let final_left = left ++ elseif lnum == a:linenum ++ let closest_lnum = lnum ++ let final_left = left ++ break ++ else ++ let left = left + 1 ++ endif ++ endwhile ++ if closest_lnum == 0 ++ return -1 ++ endif ++ if left >= right ++ let left = final_left ++ endif ++ endif ++ ++ return left ++endfunction ++ ++" Tlist_Window_Highlight_Tag() ++" Highlight the current tag ++" cntx == 1, Called by the taglist plugin itself ++" cntx == 2, Forced by the user through the TlistHighlightTag command ++" center = 1, move the tag line to the center of the taglist window ++function! s:Tlist_Window_Highlight_Tag(filename, cur_lnum, cntx, center) ++ " Highlight the current tag only if the user configured the ++ " taglist plugin to do so or if the user explictly invoked the ++ " command to highlight the current tag. ++ if !g:Tlist_Auto_Highlight_Tag && a:cntx == 1 ++ return ++ endif ++ ++ if a:filename == '' ++ return ++ endif ++ ++ " Make sure the taglist window is present ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum == -1 ++ call s:Tlist_Warning_Msg('Error: Taglist window is not open') ++ return ++ endif ++ ++ let fidx = s:Tlist_Get_File_Index(a:filename) ++ if fidx == -1 ++ return ++ endif ++ ++ " If the file is currently not displayed in the taglist window, then retrn ++ if !s:tlist_{fidx}_visible ++ return ++ endif ++ ++ " If there are no tags for this file, then no need to proceed further ++ if s:tlist_{fidx}_tag_count == 0 ++ return ++ endif ++ ++ " Ignore all autocommands ++ let old_ei = &eventignore ++ set eventignore=all ++ ++ " Save the original window number ++ let org_winnr = winnr() ++ ++ if org_winnr == winnum ++ let in_taglist_window = 1 ++ else ++ let in_taglist_window = 0 ++ endif ++ ++ " Go to the taglist window ++ if !in_taglist_window ++ exe winnum . 'wincmd w' ++ endif ++ ++ " Clear previously selected name ++ match none ++ ++ let tidx = s:Tlist_Find_Nearest_Tag_Idx(fidx, a:cur_lnum) ++ if tidx == -1 ++ " Make sure the current tag line is visible in the taglist window. ++ " Calling the winline() function makes the line visible. Don't know ++ " of a better way to achieve this. ++ let lnum = line('.') ++ ++ if lnum < s:tlist_{fidx}_start || lnum > s:tlist_{fidx}_end ++ " Move the cursor to the beginning of the file ++ exe s:tlist_{fidx}_start ++ endif ++ ++ if foldclosed('.') != -1 ++ .foldopen ++ endif ++ ++ call winline() ++ ++ if !in_taglist_window ++ exe org_winnr . 'wincmd w' ++ endif ++ ++ " Restore the autocommands ++ let &eventignore = old_ei ++ return ++ endif ++ ++ " Extract the tag type ++ let ttype = s:Tlist_Get_Tag_Type_By_Tag(fidx, tidx) ++ ++ " Compute the line number ++ " Start of file + Start of tag type + offset ++ let lnum = s:tlist_{fidx}_start + s:tlist_{fidx}_{ttype}_offset + ++ \ s:tlist_{fidx}_{tidx}_ttype_idx ++ ++ " Goto the line containing the tag ++ exe lnum ++ ++ " Open the fold ++ if foldclosed('.') != -1 ++ .foldopen ++ endif ++ ++ if a:center ++ " Move the tag line to the center of the taglist window ++ normal! z. ++ else ++ " Make sure the current tag line is visible in the taglist window. ++ " Calling the winline() function makes the line visible. Don't know ++ " of a better way to achieve this. ++ call winline() ++ endif ++ ++ " Highlight the tag name ++ call s:Tlist_Window_Highlight_Line() ++ ++ " Go back to the original window ++ if !in_taglist_window ++ exe org_winnr . 'wincmd w' ++ endif ++ ++ " Restore the autocommands ++ let &eventignore = old_ei ++ return ++endfunction ++ ++" Tlist_Get_Tag_Prototype_By_Line ++" Get the prototype for the tag on or before the specified line number in the ++" current buffer ++function! Tlist_Get_Tag_Prototype_By_Line(...) ++ if a:0 == 0 ++ " Arguments are not supplied. Use the current buffer name ++ " and line number ++ let filename = bufname('%') ++ let linenr = line('.') ++ elseif a:0 == 2 ++ " Filename and line number are specified ++ let filename = a:1 ++ let linenr = a:2 ++ if linenr !~ '\d\+' ++ " Invalid line number ++ return "" ++ endif ++ else ++ " Sufficient arguments are not supplied ++ let msg = 'Usage: Tlist_Get_Tag_Prototype_By_Line ' . ++ \ '' ++ call s:Tlist_Warning_Msg(msg) ++ return "" ++ endif ++ ++ " Expand the file to a fully qualified name ++ let filename = fnamemodify(filename, ':p') ++ if filename == '' ++ return "" ++ endif ++ ++ let fidx = s:Tlist_Get_File_Index(filename) ++ if fidx == -1 ++ return "" ++ endif ++ ++ " If there are no tags for this file, then no need to proceed further ++ if s:tlist_{fidx}_tag_count == 0 ++ return "" ++ endif ++ ++ " Get the tag text using the line number ++ let tidx = s:Tlist_Find_Nearest_Tag_Idx(fidx, linenr) ++ if tidx == -1 ++ return "" ++ endif ++ ++ return s:Tlist_Get_Tag_Prototype(fidx, tidx) ++endfunction ++ ++" Tlist_Get_Tagname_By_Line ++" Get the tag name on or before the specified line number in the ++" current buffer ++function! Tlist_Get_Tagname_By_Line(...) ++ if a:0 == 0 ++ " Arguments are not supplied. Use the current buffer name ++ " and line number ++ let filename = bufname('%') ++ let linenr = line('.') ++ elseif a:0 == 2 ++ " Filename and line number are specified ++ let filename = a:1 ++ let linenr = a:2 ++ if linenr !~ '\d\+' ++ " Invalid line number ++ return "" ++ endif ++ else ++ " Sufficient arguments are not supplied ++ let msg = 'Usage: Tlist_Get_Tagname_By_Line ' ++ call s:Tlist_Warning_Msg(msg) ++ return "" ++ endif ++ ++ " Make sure the current file has a name ++ let filename = fnamemodify(filename, ':p') ++ if filename == '' ++ return "" ++ endif ++ ++ let fidx = s:Tlist_Get_File_Index(filename) ++ if fidx == -1 ++ return "" ++ endif ++ ++ " If there are no tags for this file, then no need to proceed further ++ if s:tlist_{fidx}_tag_count == 0 ++ return "" ++ endif ++ ++ " Get the tag name using the line number ++ let tidx = s:Tlist_Find_Nearest_Tag_Idx(fidx, linenr) ++ if tidx == -1 ++ return "" ++ endif ++ ++ return s:tlist_{fidx}_{tidx}_tag_name ++endfunction ++ ++" Tlist_Window_Move_To_File ++" Move the cursor to the beginning of the current file or the next file ++" or the previous file in the taglist window ++" dir == -1, move to start of current or previous function ++" dir == 1, move to start of next function ++function! s:Tlist_Window_Move_To_File(dir) ++ if foldlevel('.') == 0 ++ " Cursor is on a non-folded line (it is not in any of the files) ++ " Move it to a folded line ++ if a:dir == -1 ++ normal! zk ++ else ++ " While moving down to the start of the next fold, ++ " no need to do go to the start of the next file. ++ normal! zj ++ return ++ endif ++ endif ++ ++ let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(line('.')) ++ if fidx == -1 ++ return ++ endif ++ ++ let cur_lnum = line('.') ++ ++ if a:dir == -1 ++ if cur_lnum > s:tlist_{fidx}_start ++ " Move to the beginning of the current file ++ exe s:tlist_{fidx}_start ++ return ++ endif ++ ++ if fidx != 0 ++ " Move to the beginning of the previous file ++ let fidx = fidx - 1 ++ else ++ " Cursor is at the first file, wrap around to the last file ++ let fidx = s:tlist_file_count - 1 ++ endif ++ ++ exe s:tlist_{fidx}_start ++ return ++ else ++ " Move to the beginning of the next file ++ let fidx = fidx + 1 ++ ++ if fidx >= s:tlist_file_count ++ " Cursor is at the last file, wrap around to the first file ++ let fidx = 0 ++ endif ++ ++ if s:tlist_{fidx}_start != 0 ++ exe s:tlist_{fidx}_start ++ endif ++ return ++ endif ++endfunction ++ ++" Tlist_Session_Load ++" Load a taglist session (information about all the displayed files ++" and the tags) from the specified file ++function! s:Tlist_Session_Load(...) ++ if a:0 == 0 || a:1 == '' ++ call s:Tlist_Warning_Msg('Usage: TlistSessionLoad ') ++ return ++ endif ++ ++ let sessionfile = a:1 ++ ++ if !filereadable(sessionfile) ++ let msg = 'Taglist: Error - Unable to open file ' . sessionfile ++ call s:Tlist_Warning_Msg(msg) ++ return ++ endif ++ ++ " Mark the current window as the file window ++ call s:Tlist_Window_Mark_File_Window() ++ ++ " Source the session file ++ exe 'source ' . sessionfile ++ ++ let new_file_count = g:tlist_file_count ++ unlet! g:tlist_file_count ++ ++ let i = 0 ++ while i < new_file_count ++ let ftype = g:tlist_{i}_filetype ++ unlet! g:tlist_{i}_filetype ++ ++ if !exists('s:tlist_' . ftype . '_count') ++ if s:Tlist_FileType_Init(ftype) == 0 ++ let i = i + 1 ++ continue ++ endif ++ endif ++ ++ let fname = g:tlist_{i}_filename ++ unlet! g:tlist_{i}_filename ++ ++ let fidx = s:Tlist_Get_File_Index(fname) ++ if fidx != -1 ++ let s:tlist_{fidx}_visible = 0 ++ let i = i + 1 ++ continue ++ else ++ " As we are loading the tags from the session file, if this ++ " file was previously deleted by the user, now we need to ++ " add it back. So remove the file from the deleted list. ++ call s:Tlist_Update_Remove_List(fname, 0) ++ endif ++ ++ let fidx = s:Tlist_Init_File(fname, ftype) ++ ++ let s:tlist_{fidx}_filename = fname ++ ++ let s:tlist_{fidx}_sort_type = g:tlist_{i}_sort_type ++ unlet! g:tlist_{i}_sort_type ++ ++ let s:tlist_{fidx}_filetype = ftype ++ let s:tlist_{fidx}_mtime = getftime(fname) ++ ++ let s:tlist_{fidx}_start = 0 ++ let s:tlist_{fidx}_end = 0 ++ ++ let s:tlist_{fidx}_valid = 1 ++ ++ let s:tlist_{fidx}_tag_count = g:tlist_{i}_tag_count ++ unlet! g:tlist_{i}_tag_count ++ ++ let j = 1 ++ while j <= s:tlist_{fidx}_tag_count ++ let s:tlist_{fidx}_{j}_tag = g:tlist_{i}_{j}_tag ++ let s:tlist_{fidx}_{j}_tag_name = g:tlist_{i}_{j}_tag_name ++ let s:tlist_{fidx}_{j}_ttype_idx = g:tlist_{i}_{j}_ttype_idx ++ unlet! g:tlist_{i}_{j}_tag ++ unlet! g:tlist_{i}_{j}_tag_name ++ unlet! g:tlist_{i}_{j}_ttype_idx ++ let j = j + 1 ++ endwhile ++ ++ let j = 1 ++ while j <= s:tlist_{ftype}_count ++ let ttype = s:tlist_{ftype}_{j}_name ++ ++ if exists('g:tlist_' . i . '_' . ttype) ++ let s:tlist_{fidx}_{ttype} = g:tlist_{i}_{ttype} ++ unlet! g:tlist_{i}_{ttype} ++ let s:tlist_{fidx}_{ttype}_offset = 0 ++ let s:tlist_{fidx}_{ttype}_count = g:tlist_{i}_{ttype}_count ++ unlet! g:tlist_{i}_{ttype}_count ++ ++ let k = 1 ++ while k <= s:tlist_{fidx}_{ttype}_count ++ let s:tlist_{fidx}_{ttype}_{k} = g:tlist_{i}_{ttype}_{k} ++ unlet! g:tlist_{i}_{ttype}_{k} ++ let k = k + 1 ++ endwhile ++ else ++ let s:tlist_{fidx}_{ttype} = '' ++ let s:tlist_{fidx}_{ttype}_offset = 0 ++ let s:tlist_{fidx}_{ttype}_count = 0 ++ endif ++ ++ let j = j + 1 ++ endwhile ++ ++ let i = i + 1 ++ endwhile ++ ++ " If the taglist window is open, then update it ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum != -1 ++ let save_winnr = winnr() ++ ++ " Goto the taglist window ++ call s:Tlist_Window_Goto_Window() ++ ++ " Refresh the taglist window ++ call s:Tlist_Window_Refresh() ++ ++ " Go back to the original window ++ if save_winnr != winnr() ++ call s:Tlist_Exe_Cmd_No_Acmds('wincmd p') ++ endif ++ endif ++endfunction ++ ++" Tlist_Session_Save ++" Save a taglist session (information about all the displayed files ++" and the tags) into the specified file ++function! s:Tlist_Session_Save(...) ++ if a:0 == 0 || a:1 == '' ++ call s:Tlist_Warning_Msg('Usage: TlistSessionSave ') ++ return ++ endif ++ ++ let sessionfile = a:1 ++ ++ if s:tlist_file_count == 0 ++ " There is nothing to save ++ call s:Tlist_Warning_Msg('Warning: Taglist is empty. Nothing to save.') ++ return ++ endif ++ ++ if filereadable(sessionfile) ++ let ans = input('Do you want to overwrite ' . sessionfile . ' (Y/N)?') ++ if ans !=? 'y' ++ return ++ endif ++ ++ echo "\n" ++ endif ++ ++ let old_verbose = &verbose ++ set verbose&vim ++ ++ exe 'redir! > ' . sessionfile ++ ++ silent! echo '" Taglist session file. This file is auto-generated.' ++ silent! echo '" File information' ++ silent! echo 'let tlist_file_count = ' . s:tlist_file_count ++ ++ let i = 0 ++ ++ while i < s:tlist_file_count ++ " Store information about the file ++ silent! echo 'let tlist_' . i . "_filename = '" . ++ \ s:tlist_{i}_filename . "'" ++ silent! echo 'let tlist_' . i . '_sort_type = "' . ++ \ s:tlist_{i}_sort_type . '"' ++ silent! echo 'let tlist_' . i . '_filetype = "' . ++ \ s:tlist_{i}_filetype . '"' ++ silent! echo 'let tlist_' . i . '_tag_count = ' . ++ \ s:tlist_{i}_tag_count ++ " Store information about all the tags ++ let j = 1 ++ while j <= s:tlist_{i}_tag_count ++ let txt = escape(s:tlist_{i}_{j}_tag, '"\\') ++ silent! echo 'let tlist_' . i . '_' . j . '_tag = "' . txt . '"' ++ silent! echo 'let tlist_' . i . '_' . j . '_tag_name = "' . ++ \ s:tlist_{i}_{j}_tag_name . '"' ++ silent! echo 'let tlist_' . i . '_' . j . '_ttype_idx' . ' = ' . ++ \ s:tlist_{i}_{j}_ttype_idx ++ let j = j + 1 ++ endwhile ++ ++ " Store information about all the tags grouped by their type ++ let ftype = s:tlist_{i}_filetype ++ let j = 1 ++ while j <= s:tlist_{ftype}_count ++ let ttype = s:tlist_{ftype}_{j}_name ++ if s:tlist_{i}_{ttype}_count != 0 ++ let txt = substitute(s:tlist_{i}_{ttype}, "\n", "\\\\n", 'g') ++ silent! echo 'let tlist_' . i . '_' . ttype . ' = "' . ++ \ txt . '"' ++ silent! echo 'let tlist_' . i . '_' . ttype . '_count = ' . ++ \ s:tlist_{i}_{ttype}_count ++ let k = 1 ++ while k <= s:tlist_{i}_{ttype}_count ++ silent! echo 'let tlist_' . i . '_' . ttype . '_' . k . ++ \ ' = ' . s:tlist_{i}_{ttype}_{k} ++ let k = k + 1 ++ endwhile ++ endif ++ let j = j + 1 ++ endwhile ++ ++ silent! echo ++ ++ let i = i + 1 ++ endwhile ++ ++ redir END ++ ++ let &verbose = old_verbose ++endfunction ++ ++" Tlist_Buffer_Removed ++" A buffer is removed from the Vim buffer list. Remove the tags defined ++" for that file ++function! s:Tlist_Buffer_Removed(filename) ++ call s:Tlist_Log_Msg('Tlist_Buffer_Removed (' . a:filename . ')') ++ ++ " Make sure a valid filename is supplied ++ if a:filename == '' ++ return ++ endif ++ ++ " Get tag list index of the specified file ++ let fidx = s:Tlist_Get_File_Index(a:filename) ++ if fidx == -1 ++ " File not present in the taglist ++ return ++ endif ++ ++ " Remove the file from the list ++ call s:Tlist_Remove_File(fidx, 0) ++endfunction ++ ++" When a buffer is deleted, remove the file from the taglist ++autocmd BufDelete * silent call s:Tlist_Buffer_Removed(expand(':p')) ++ ++" Tlist_Window_Open_File_Fold ++" Open the fold for the specified file and close the fold for all the ++" other files ++function! s:Tlist_Window_Open_File_Fold(acmd_file) ++ call s:Tlist_Log_Msg('Tlist_Window_Open_File_Fold (' . a:acmd_file . ')') ++ ++ " Make sure the taglist window is present ++ let winnum = bufwinnr(g:TagList_title) ++ if winnum == -1 ++ call s:Tlist_Warning_Msg('Taglist: Error - Taglist window is not open') ++ return ++ endif ++ ++ " Save the original window number ++ let org_winnr = winnr() ++ if org_winnr == winnum ++ let in_taglist_window = 1 ++ else ++ let in_taglist_window = 0 ++ endif ++ ++ if in_taglist_window ++ " When entering the taglist window, no need to update the folds ++ return ++ endif ++ ++ " Go to the taglist window ++ if !in_taglist_window ++ call s:Tlist_Exe_Cmd_No_Acmds(winnum . 'wincmd w') ++ endif ++ ++ " Close all the folds ++ silent! %foldclose ++ ++ " Get tag list index of the specified file ++ let fname = fnamemodify(a:acmd_file, ":p") ++ if filereadable(fname) ++ let fidx = s:Tlist_Get_File_Index(fname) ++ if fidx != -1 ++ " Open the fold for the file ++ exe "silent! " . s:tlist_{fidx}_start . "," . ++ \ s:tlist_{fidx}_end . "foldopen" ++ endif ++ endif ++ ++ " Go back to the original window ++ if !in_taglist_window ++ call s:Tlist_Exe_Cmd_No_Acmds(org_winnr . 'wincmd w') ++ endif ++endfunction ++ ++" Tlist_Window_Check_Auto_Open ++" Open the taglist window automatically on Vim startup. ++" Open the window only when files present in any of the Vim windows support ++" tags. ++function! s:Tlist_Window_Check_Auto_Open() ++ let open_window = 0 ++ ++ let i = 1 ++ let buf_num = winbufnr(i) ++ while buf_num != -1 ++ let filename = fnamemodify(bufname(buf_num), ':p') ++ if !s:Tlist_Skip_File(filename, getbufvar(buf_num, '&filetype')) ++ let open_window = 1 ++ break ++ endif ++ let i = i + 1 ++ let buf_num = winbufnr(i) ++ endwhile ++ ++ if open_window ++ call s:Tlist_Window_Toggle() ++ endif ++endfunction ++ ++function! s:Tlist_Menu_Add_Base_Menu() ++ call s:Tlist_Log_Msg('Adding the base menu') ++ ++ " Add the menu ++ anoremenu T&ags.Refresh\ menu :call Tlist_Menu_Refresh() ++ anoremenu T&ags.Sort\ menu\ by.Name ++ \ :call Tlist_Change_Sort('menu', 'set', 'name') ++ anoremenu T&ags.Sort\ menu\ by.Order ++ \ :call Tlist_Change_Sort('menu', 'set', 'order') ++ anoremenu T&ags.-SEP1- : ++ ++ if &mousemodel =~ 'popup' ++ anoremenu PopUp.T&ags.Refresh\ menu ++ \ :call Tlist_Menu_Refresh() ++ anoremenu PopUp.T&ags.Sort\ menu\ by.Name ++ \ :call Tlist_Change_Sort('menu', 'set', 'name') ++ anoremenu PopUp.T&ags.Sort\ menu\ by.Order ++ \ :call Tlist_Change_Sort('menu', 'set', 'order') ++ anoremenu PopUp.T&ags.-SEP1- : ++ endif ++endfunction ++ ++let s:menu_char_prefix = ++ \ '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ++ ++" Tlist_Menu_Get_Tag_Type_Cmd ++" Get the menu command for the specified tag type ++" fidx - File type index ++" ftype - File Type ++" add_ttype_name - To add or not to add the tag type name to the menu entries ++" ttype_idx - Tag type index ++function! s:Tlist_Menu_Get_Tag_Type_Cmd(fidx, ftype, add_ttype_name, ttype_idx) ++ " Curly brace variable name optimization ++ let ftype_ttype_idx = a:ftype . '_' . a:ttype_idx ++ ++ let ttype = s:tlist_{ftype_ttype_idx}_name ++ if a:add_ttype_name ++ " If the tag type name contains space characters, escape it. This ++ " will be used to create the menu entries. ++ let ttype_fullname = escape(s:tlist_{ftype_ttype_idx}_fullname, ' ') ++ endif ++ ++ " Curly brace variable name optimization ++ let fidx_ttype = a:fidx . '_' . ttype ++ ++ " Number of tag entries for this tag type ++ let tcnt = s:tlist_{fidx_ttype}_count ++ if tcnt == 0 " No entries for this tag type ++ return '' ++ endif ++ ++ let mcmd = '' ++ ++ " Create the menu items for the tags. ++ " Depending on the number of tags of this type, split the menu into ++ " multiple sub-menus, if needed. ++ if tcnt > g:Tlist_Max_Submenu_Items ++ let j = 1 ++ while j <= tcnt ++ let final_index = j + g:Tlist_Max_Submenu_Items - 1 ++ if final_index > tcnt ++ let final_index = tcnt ++ endif ++ ++ " Extract the first and last tag name and form the ++ " sub-menu name ++ let tidx = s:tlist_{fidx_ttype}_{j} ++ let first_tag = s:tlist_{a:fidx}_{tidx}_tag_name ++ ++ let tidx = s:tlist_{fidx_ttype}_{final_index} ++ let last_tag = s:tlist_{a:fidx}_{tidx}_tag_name ++ ++ " Truncate the names, if they are greater than the ++ " max length ++ let first_tag = strpart(first_tag, 0, g:Tlist_Max_Tag_Length) ++ let last_tag = strpart(last_tag, 0, g:Tlist_Max_Tag_Length) ++ ++ " Form the menu command prefix ++ let m_prefix = 'anoremenu T\&ags.' ++ if a:add_ttype_name ++ let m_prefix = m_prefix . ttype_fullname . '.' ++ endif ++ let m_prefix = m_prefix . first_tag . '\.\.\.' . last_tag . '.' ++ ++ " Character prefix used to number the menu items (hotkey) ++ let m_prefix_idx = 0 ++ ++ while j <= final_index ++ let tidx = s:tlist_{fidx_ttype}_{j} ++ ++ let tname = s:tlist_{a:fidx}_{tidx}_tag_name ++ ++ let mcmd = mcmd . m_prefix . '\&' . ++ \ s:menu_char_prefix[m_prefix_idx] . '\.' . ++ \ tname . ' :call Tlist_Menu_Jump_To_Tag(' . ++ \ tidx . ')|' ++ ++ let m_prefix_idx = m_prefix_idx + 1 ++ let j = j + 1 ++ endwhile ++ endwhile ++ else ++ " Character prefix used to number the menu items (hotkey) ++ let m_prefix_idx = 0 ++ ++ let m_prefix = 'anoremenu T\&ags.' ++ if a:add_ttype_name ++ let m_prefix = m_prefix . ttype_fullname . '.' ++ endif ++ let j = 1 ++ while j <= tcnt ++ let tidx = s:tlist_{fidx_ttype}_{j} ++ ++ let tname = s:tlist_{a:fidx}_{tidx}_tag_name ++ ++ let mcmd = mcmd . m_prefix . '\&' . ++ \ s:menu_char_prefix[m_prefix_idx] . '\.' . ++ \ tname . ' :call Tlist_Menu_Jump_To_Tag(' . tidx ++ \ . ')|' ++ ++ let m_prefix_idx = m_prefix_idx + 1 ++ let j = j + 1 ++ endwhile ++ endif ++ ++ return mcmd ++endfunction ++ ++" Update the taglist menu with the tags for the specified file ++function! s:Tlist_Menu_File_Refresh(fidx) ++ call s:Tlist_Log_Msg('Refreshing the tag menu for ' . s:tlist_{a:fidx}_filename) ++ " The 'B' flag is needed in the 'cpoptions' option ++ let old_cpoptions = &cpoptions ++ set cpoptions&vim ++ ++ exe s:tlist_{a:fidx}_menu_cmd ++ ++ " Update the popup menu (if enabled) ++ if &mousemodel =~ 'popup' ++ let cmd = substitute(s:tlist_{a:fidx}_menu_cmd, ' T\\&ags\.', ++ \ ' PopUp.T\\\&ags.', "g") ++ exe cmd ++ endif ++ ++ " The taglist menu is not empty now ++ let s:tlist_menu_empty = 0 ++ ++ " Restore the 'cpoptions' settings ++ let &cpoptions = old_cpoptions ++endfunction ++ ++" Tlist_Menu_Update_File ++" Add the taglist menu ++function! s:Tlist_Menu_Update_File(clear_menu) ++ if !has('gui_running') ++ " Not running in GUI mode ++ return ++ endif ++ ++ call s:Tlist_Log_Msg('Updating the tag menu, clear_menu = ' . a:clear_menu) ++ ++ " Remove the tags menu ++ if a:clear_menu ++ call s:Tlist_Menu_Remove_File() ++ ++ endif ++ ++ let fname = escape(fnamemodify(bufname('%'), ':t'), '.') ++ if fname != '' ++ exe 'anoremenu T&ags.' . fname . ' ' ++ anoremenu T&ags.-SEP2- : ++ endif ++ ++ " Skip buffers with 'buftype' set to nofile, nowrite, quickfix or help ++ if &buftype != '' ++ return ++ endif ++ ++ let filename = fnamemodify(bufname('%'), ':p') ++ let ftype = &filetype ++ ++ " If the file doesn't support tag listing, skip it ++ if s:Tlist_Skip_File(filename, ftype) ++ return ++ endif ++ ++ let fidx = s:Tlist_Get_File_Index(filename) ++ if fidx == -1 || !s:tlist_{fidx}_valid ++ " Check whether this file is removed based on user request ++ " If it is, then don't display the tags for this file ++ if s:Tlist_User_Removed_File(filename) ++ return ++ endif ++ ++ " Process the tags for the file ++ let fidx = s:Tlist_Process_File(filename, ftype) ++ if fidx == -1 ++ return ++ endif ++ endif ++ ++ if !s:tlist_{fidx}_tag_count ++ return ++ endif ++ ++ if s:tlist_{fidx}_menu_cmd != '' ++ " Update the menu with the cached command ++ call s:Tlist_Menu_File_Refresh(fidx) ++ ++ return ++ endif ++ ++ " We are going to add entries to the tags menu, so the menu won't be ++ " empty ++ let s:tlist_menu_empty = 0 ++ ++ let cmd = '' ++ ++ " Determine whether the tag type name needs to be added to the menu ++ " If more than one tag type is present in the taglisting for a file, ++ " then the tag type name needs to be present ++ let add_ttype_name = -1 ++ let i = 1 ++ while i <= s:tlist_{ftype}_count && add_ttype_name < 1 ++ let ttype = s:tlist_{ftype}_{i}_name ++ if s:tlist_{fidx}_{ttype}_count ++ let add_ttype_name = add_ttype_name + 1 ++ endif ++ let i = i + 1 ++ endwhile ++ ++ " Process the tags by the tag type and get the menu command ++ let i = 1 ++ while i <= s:tlist_{ftype}_count ++ let mcmd = s:Tlist_Menu_Get_Tag_Type_Cmd(fidx, ftype, add_ttype_name, i) ++ if mcmd != '' ++ let cmd = cmd . mcmd ++ endif ++ ++ let i = i + 1 ++ endwhile ++ ++ " Cache the menu command for reuse ++ let s:tlist_{fidx}_menu_cmd = cmd ++ ++ " Update the menu ++ call s:Tlist_Menu_File_Refresh(fidx) ++endfunction ++ ++" Tlist_Menu_Remove_File ++" Remove the tags displayed in the tags menu ++function! s:Tlist_Menu_Remove_File() ++ if !has('gui_running') || s:tlist_menu_empty ++ return ++ endif ++ ++ call s:Tlist_Log_Msg('Removing the tags menu for a file') ++ ++ " Cleanup the Tags menu ++ silent! unmenu T&ags ++ if &mousemodel =~ 'popup' ++ silent! unmenu PopUp.T&ags ++ endif ++ ++ " Add a dummy menu item to retain teared off menu ++ noremenu T&ags.Dummy l ++ ++ silent! unmenu! T&ags ++ if &mousemodel =~ 'popup' ++ silent! unmenu! PopUp.T&ags ++ endif ++ ++ call s:Tlist_Menu_Add_Base_Menu() ++ ++ " Remove the dummy menu item ++ unmenu T&ags.Dummy ++ ++ let s:tlist_menu_empty = 1 ++endfunction ++ ++" Tlist_Menu_Refresh ++" Refresh the taglist menu ++function! s:Tlist_Menu_Refresh() ++ call s:Tlist_Log_Msg('Refreshing the tags menu') ++ let fidx = s:Tlist_Get_File_Index(fnamemodify(bufname('%'), ':p')) ++ if fidx != -1 ++ " Invalidate the cached menu command ++ let s:tlist_{fidx}_menu_cmd = '' ++ endif ++ ++ " Update the taglist, menu and window ++ call s:Tlist_Update_Current_File() ++endfunction ++ ++" Tlist_Menu_Jump_To_Tag ++" Jump to the selected tag ++function! s:Tlist_Menu_Jump_To_Tag(tidx) ++ let fidx = s:Tlist_Get_File_Index(fnamemodify(bufname('%'), ':p')) ++ if fidx == -1 ++ return ++ endif ++ ++ let tagpat = s:Tlist_Get_Tag_SearchPat(fidx, a:tidx) ++ if tagpat == '' ++ return ++ endif ++ ++ " Add the current cursor position to the jump list, so that user can ++ " jump back using the ' and ` marks. ++ mark ' ++ ++ silent call search(tagpat, 'w') ++ ++ " Bring the line to the middle of the window ++ normal! z. ++ ++ " If the line is inside a fold, open the fold ++ if foldclosed('.') != -1 ++ .foldopen ++ endif ++endfunction ++ ++" Tlist_Menu_Init ++" Initialize the taglist menu ++function! s:Tlist_Menu_Init() ++ call s:Tlist_Menu_Add_Base_Menu() ++ ++ " Automatically add the tags defined in the current file to the menu ++ augroup TagListMenuCmds ++ autocmd! ++ ++ if !g:Tlist_Process_File_Always ++ autocmd BufEnter * call s:Tlist_Refresh() ++ endif ++ autocmd BufLeave * call s:Tlist_Menu_Remove_File() ++ augroup end ++ ++ call s:Tlist_Menu_Update_File(0) ++endfunction ++ ++" Tlist_Vim_Session_Load ++" Initialize the taglist window/buffer, which is created when loading ++" a Vim session file. ++function! s:Tlist_Vim_Session_Load() ++ call s:Tlist_Log_Msg('Tlist_Vim_Session_Load') ++ ++ " Initialize the taglist window ++ call s:Tlist_Window_Init() ++ ++ " Refresh the taglist window ++ call s:Tlist_Window_Refresh() ++endfunction ++ ++" Tlist_Set_App ++" Set the name of the external plugin/application to which taglist ++" belongs. ++" Taglist plugin is part of another plugin like cream or winmanager. ++function! Tlist_Set_App(name) ++ if a:name == "" ++ return ++ endif ++ ++ let s:tlist_app_name = a:name ++endfunction ++ ++" Winmanager integration ++ ++" Initialization required for integration with winmanager ++function! TagList_Start() ++ " If current buffer is not taglist buffer, then don't proceed ++ if bufname('%') != '__Tag_List__' ++ return ++ endif ++ ++ call Tlist_Set_App('winmanager') ++ ++ " Get the current filename from the winmanager plugin ++ let bufnum = WinManagerGetLastEditedFile() ++ if bufnum != -1 ++ let filename = fnamemodify(bufname(bufnum), ':p') ++ let ftype = getbufvar(bufnum, '&filetype') ++ endif ++ ++ " Initialize the taglist window, if it is not already initialized ++ if !exists('s:tlist_window_initialized') || !s:tlist_window_initialized ++ call s:Tlist_Window_Init() ++ call s:Tlist_Window_Refresh() ++ let s:tlist_window_initialized = 1 ++ endif ++ ++ " Update the taglist window ++ if bufnum != -1 ++ if !s:Tlist_Skip_File(filename, ftype) && g:Tlist_Auto_Update ++ call s:Tlist_Window_Refresh_File(filename, ftype) ++ endif ++ endif ++endfunction ++ ++function! TagList_IsValid() ++ return 0 ++endfunction ++ ++function! TagList_WrapUp() ++ return 0 ++endfunction ++ ++" restore 'cpo' ++let &cpo = s:cpo_save ++unlet s:cpo_save ++ +diff -urN vim71/runtime/syntax/ada.vim vim71_ada/runtime/syntax/ada.vim +--- vim71/runtime/syntax/ada.vim 2007-05-05 20:22:26.000000000 +0200 ++++ vim71_ada/runtime/syntax/ada.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -1,17 +1,17 @@ + "---------------------------------------------------------------------------- + " Description: Vim Ada syntax file + " Language: Ada (2005) +-" $Id: ada.vim,v 1.2 2007/05/05 18:22:26 vimboss Exp $ ++" $Id: ada.vim 793 2007-11-01 18:29:58Z krischik $ + " Copyright: Copyright (C) 2006 Martin Krischik + " Maintainer: Martin Krischik + " David A. Wheeler + " Simon Bradley + " Contributors: Preben Randhol. +-" $Author: vimboss $ +-" $Date: 2007/05/05 18:22:26 $ +-" Version: 4.2 +-" $Revision: 1.2 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/syntax/ada.vim $ ++" $Author: krischik $ ++" $Date: 2007-11-01 19:29:58 +0100 (Do, 01 Nov 2007) $ ++" Version: 4.5 ++" $Revision: 793 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/syntax/ada.vim $ + " http://www.dwheeler.com/vim + " History: 24.05.2006 MK Unified Headers + " 26.05.2006 MK ' should not be in iskeyword. +@@ -98,7 +98,8 @@ + " + if exists("g:ada_rainbow_color") + syntax match adaSpecial "[:;.,]" +- runtime plugin/Rainbow_Parenthsis.vim ++ call rainbow_parenthsis#LoadRound () ++ call rainbow_parenthsis#Activate () + else + syntax match adaSpecial "[:;().,]" + endif +@@ -159,7 +160,7 @@ + " Section: end {{{1 + " Unless special ("end loop", "end if", etc.), "end" marks the end of a + " begin, package, task etc. Assiging it to adaEnd. +-syntax match adaEnd "\" ++syntax match adaEnd /\/ + + syntax keyword adaPreproc pragma + +diff -urN vim71/runtime/syntax/bush.vim vim71_ada/runtime/syntax/bush.vim +--- vim71/runtime/syntax/bush.vim 1970-01-01 01:00:00.000000000 +0100 ++++ vim71_ada/runtime/syntax/bush.vim 2008-01-16 16:37:03.000000000 +0100 +@@ -0,0 +1,309 @@ ++" Vim syntax file ++" Language: BUSH / AdaScript ++" Maintainer: Ken O. Burtch ++" URL: http://www.pegasoft.ca/bush ++" Last Change: 2004-06-29 ++ ++" Former Maintainer: Simon Bradley ++" (was ) ++" Other contributors: Preben Randhol. ++" The formal spec of Ada95 (ARM) is the "Ada95 Reference Manual". ++" For more Ada95 info, see http://www.gnuada.org and http://www.adapower.com. ++ ++" This vim syntax file works on vim 5.6, 5.7, 5.8 and 6.x. ++" It implements Bram Moolenaar's April 25, 2001 recommendations to make ++" the syntax file maximally portable across different versions of vim. ++" If vim 6.0+ is available, ++" this syntax file takes advantage of the vim 6.0 advanced pattern-matching ++" functions to avoid highlighting uninteresting leading spaces in ++" some expressions containing "with" and "use". ++ ++" For version 5.x: Clear all syntax items ++" For version 6.x: Quit when a syntax file was already loaded ++if version < 600 ++ syntax clear ++elseif exists("b:current_syntax") ++ finish ++endif ++ ++" Ada is entirely case-insensitive. ++syn case ignore ++ ++" We don't need to look backwards to highlight correctly; ++" this speeds things up greatly. ++syn sync minlines=1 maxlines=1 ++ ++" Highlighting commands. There are 69 reserved words in total in Ada95. ++" Some keywords are used in more than one way. For example: ++" 1. "end" is a general keyword, but "end if" ends a Conditional. ++" 2. "then" is a conditional, but "and then" is an operator. ++ ++ ++" Standard Exceptions (including I/O). ++" We'll highlight the standard exceptions, similar to vim's Python mode. ++" It's possible to redefine the standard exceptions as something else, ++" but doing so is very bad practice, so simply highlighting them makes sense. ++syn keyword adaException Constraint_Error Program_Error Storage_Error ++syn keyword adaException Tasking_Error ++syn keyword adaException Status_Error Mode_Error Name_Error Use_Error ++syn keyword adaException Device_Error End_Error Data_Error Layout_Error ++syn keyword adaException Length_Error Pattern_Error Index_Error ++syn keyword adaException Translation_Error ++syn keyword adaException Time_Error Argument_Error ++syn keyword adaException Tag_Error ++syn keyword adaException Picture_Error ++" Interfaces ++syn keyword adaException Terminator_Error Conversion_Error ++syn keyword adaException Pointer_Error Dereference_Error Update_Error ++" This isn't in the Ada spec, but a GNAT extension. ++syn keyword adaException Assert_Failure ++" We don't list ALL exceptions defined in particular compilers (e.g., GNAT), ++" because it's quite reasonable to define those phrases as non-exceptions. ++ ++ ++" We don't normally highlight types in package Standard ++" (Integer, Character, Float, etc.). I don't think it looks good ++" with the other type keywords, and many Ada programs define ++" so many of their own types that it looks inconsistent. ++" However, if you want this highlighting, turn on "ada_standard_types". ++" For package Standard's definition, see ARM section A.1. ++ ++if exists("ada_standard_types") ++ syn keyword adaBuiltinType Boolean Integer Natural Positive Float ++ syn keyword adaBuiltinType Character Wide_Character ++ syn keyword adaBuiltinType String Wide_String ++ syn keyword adaBuiltinType Duration ++ " These aren't listed in ARM section A.1's code, but they're noted as ++ " options in ARM sections 3.5.4 and 3.5.7: ++ syn keyword adaBuiltinType Short_Integer Short_Short_Integer ++ syn keyword adaBuiltinType Long_Integer Long_Long_Integer ++ syn keyword adaBuiltinType Short_Float Short_Short_Float ++ syn keyword adaBuiltinType Long_Float Long_Long_Float ++ " BUSH-specific types ++ syn keyword adaBuiltinType command ++ syn keyword adaBuiltinType socket_type ++ syn keyword adaBuiltinType unbounded_string ++ syn keyword adaBuiltinType universal_typeless ++ syn keyword adaBuiltinType universal_string ++ syn keyword adaBuiltinType universal_numeric ++endif ++ ++" There are MANY other predefined types; they've not been added, because ++" determining when they're a type requires context in general. ++" One potential addition would be Unbounded_String. ++ ++ ++syn keyword adaLabel others ++ ++syn keyword adaOperator abs mod not rem xor ++syn match adaOperator "\" ++syn match adaOperator "\" ++syn match adaOperator "\" ++syn match adaOperator "\" ++syn match adaOperator "[-+*/<>&]" ++syn keyword adaOperator ** ++syn match adaOperator "[/<>]=" ++syn keyword adaOperator => ++syn match adaOperator "\.\." ++syn match adaOperator "=" ++ ++" We won't map "adaAssignment" by default, but we need to map ":=" to ++" something or the "=" inside it will be mislabelled as an operator. ++" Note that in Ada, assignment (:=) is not considered an operator. ++syn match adaAssignment ":=" ++ ++" Handle the box, <>, specially: ++syn keyword adaSpecial <> ++ ++" Numbers, including floating point, exponents, and alternate bases. ++syn match adaNumber "\<\d[0-9_]*\(\.\d[0-9_]*\)\=\([Ee][+-]\=\d[0-9_]*\)\=\>" ++syn match adaNumber "\<\d\d\=#\x[0-9A-Fa-f_]*\(\.\x[0-9A-Fa-f_]*\)\=#\([Ee][+-]\=\d[0-9_]*\)\=" ++ ++" Identify leading numeric signs. In "A-5" the "-" is an operator, ++" but in "A:=-5" the "-" is a sign. This handles "A3+-5" (etc.) correctly. ++" This assumes that if you put a don't put a space after +/- when it's used ++" as an operator, you won't put a space before it either -- which is true ++" in code I've seen. ++syn match adaSign "[[:space:]<>=(,|:;&*/+-][+-]\d"lc=1,hs=s+1,he=e-1,me=e-1 ++ ++" Labels for the goto statement. ++syn region adaLabel start="<<" end=">>" ++ ++" Boolean Constants. ++syn keyword adaBoolean true false ++ ++" Warn people who try to use C/C++ notation erroneously: ++syn match adaError "//" ++syn match adaError "/\*" ++syn match adaError "==" ++ ++ ++if exists("ada_space_errors") ++ if !exists("ada_no_trail_space_error") ++ syn match adaSpaceError excludenl "\s\+$" ++ endif ++ if !exists("ada_no_tab_space_error") ++ syn match adaSpaceError " \+\t"me=e-1 ++ endif ++endif ++ ++" Unless special ("end loop", "end if", etc.), "end" marks the end of a ++" begin, package, task etc. Assiging it to adaEnd. ++syn match adaEnd "\" ++ ++syn keyword adaPreproc pragma ++ ++syn keyword adaRepeat exit for loop reverse while ++syn match adaRepeat "\" ++ ++syn keyword adaStatement accept delay goto raise requeue return ++syn keyword adaStatement terminate ++" BUSH-specific statements ++syn keyword adaStatement cd ++syn keyword adaStatement clear ++syn keyword adaStatement env ++syn keyword adaStatement inkey ++syn keyword adaStatement jobs ++syn keyword adaStatement logout ++syn keyword adaStatement pwd ++syn keyword adaStatement step ++syn keyword adaStatement trace ++syn keyword adaStatement typeset ++syn keyword adaStatement unset ++syn keyword adaStatement wait ++syn keyword adaStatement history ++syn keyword adaStatement "?" ++syn match adaStatement "\" ++ ++" Handle Ada's record keywords. ++" 'record' usually starts a structure, but "with null record;" does not, ++" and 'end record;' ends a structure. The ordering here is critical - ++" 'record;' matches a "with null record", so make it a keyword (this can ++" match when the 'with' or 'null' is on a previous line). ++" We see the "end" in "end record" before the word record, so we match that ++" pattern as adaStructure (and it won't match the "record;" pattern). ++syn match adaStructure "\" ++syn match adaStructure "\" ++syn match adaKeyword "\" ++syn match adaConditional "\" ++syn match adaConditional "\" ++syn match adaConditional "\" ++syn match adaConditional "\" ++syn match adaConditional "\" ++syn keyword adaConditional if case select ++syn keyword adaConditional elsif when ++ ++syn keyword adaKeyword all do exception in is new null out ++syn keyword adaKeyword separate until ++ ++" These keywords begin various constructs, and you _might_ want to ++" highlight them differently. ++syn keyword adaBegin begin body declare entry function generic ++syn keyword adaBegin package procedure protected renames task ++ ++ ++if exists("ada_withuse_ordinary") ++" Don't be fancy. Display "with" and "use" as ordinary keywords in all cases. ++ syn keyword adaKeyword with use ++else ++ " Highlight "with" and "use" clauses like C's "#include" when they're used ++ " to reference other compilation units; otherwise they're ordinary keywords. ++ " If we have vim 6.0 or later, we'll use its advanced pattern-matching ++ " capabilities so that we won't match leading spaces. ++ syn match adaKeyword "\" ++ syn match adaKeyword "\" ++ if version < 600 ++ syn match adaBeginWith "^\s*\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc ++ syn match adaSemiWith ";\s*\(\(with\(\s\+type\)\=\)\|\(use\)\)\>"lc=1 contains=adaInc ++ else ++ syn match adaBeginWith "^\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc ++ syn match adaSemiWith ";\s*\zs\(\(with\(\s\+type\)\=\)\|\(use\)\)\>" contains=adaInc ++ endif ++ syn match adaInc "\" contained contains=NONE ++ syn match adaInc "\" contained contains=NONE ++ syn match adaInc "\" contained contains=NONE ++ " Recognize "with null record" as a keyword (even the "record"). ++ syn match adaKeyword "\" ++ " Consider generic formal parameters of subprograms and packages as keywords. ++ if version < 600 ++ syn match adaKeyword ";\s*with\s\+\(function\|procedure\|package\)\>" ++ syn match adaKeyword "^\s*with\s\+\(function\|procedure\|package\)\>" ++ else ++ syn match adaKeyword ";\s*\zswith\s\+\(function\|procedure\|package\)\>" ++ syn match adaKeyword "^\s*\zswith\s\+\(function\|procedure\|package\)\>" ++ endif ++endif ++ ++ ++" String and character constants. ++syn region adaString start=+"+ skip=+""+ end=+"+ ++syn match adaCharacter "'.'" ++ ++" Todo (only highlighted in comments) ++syn keyword adaTodo contained TODO FIXME XXX ++ ++" Comments. ++syn region adaComment oneline contains=adaTodo start="--" end="$" ++ ++ ++ ++" Define the default highlighting. ++" For version 5.7 and earlier: only when not done already ++" For version 5.8 and later: only when an item doesn't have highlighting yet ++if version >= 508 || !exists("did_ada_syn_inits") ++ if version < 508 ++ let did_ada_syn_inits = 1 ++ command -nargs=+ HiLink hi link ++ else ++ command -nargs=+ HiLink hi def link ++ endif ++ ++ " The default methods for highlighting. Can be overridden later. ++ HiLink adaCharacter Character ++ HiLink adaComment Comment ++ HiLink adaConditional Conditional ++ HiLink adaKeyword Keyword ++ HiLink adaLabel Label ++ HiLink adaNumber Number ++ HiLink adaSign Number ++ HiLink adaOperator Operator ++ HiLink adaPreproc PreProc ++ HiLink adaRepeat Repeat ++ HiLink adaSpecial Special ++ HiLink adaStatement Statement ++ HiLink adaString String ++ HiLink adaStructure Structure ++ HiLink adaTodo Todo ++ HiLink adaType Type ++ HiLink adaTypedef Typedef ++ HiLink adaStorageClass StorageClass ++ HiLink adaBoolean Boolean ++ HiLink adaException Exception ++ HiLink adaInc Include ++ HiLink adaError Error ++ HiLink adaSpaceError Error ++ HiLink adaBuiltinType Type ++ ++ if exists("ada_begin_preproc") ++ " This is the old default display: ++ HiLink adaBegin PreProc ++ HiLink adaEnd PreProc ++ else ++ " This is the new default display: ++ HiLink adaBegin Keyword ++ HiLink adaEnd Keyword ++ endif ++ ++ delcommand HiLink ++endif ++ ++let b:current_syntax = "ada" ++ ++" vim: ts=8 diff --git a/vim-7.1-erlang.patch b/vim-7.1-erlang.patch new file mode 100644 index 00000000..e5efbe2b --- /dev/null +++ b/vim-7.1-erlang.patch @@ -0,0 +1,12 @@ +diff -up vim71/runtime/filetype.vim.erlang vim71/runtime/filetype.vim +--- vim71/runtime/filetype.vim.erlang 2008-02-25 17:50:50.000000000 +0100 ++++ vim71/runtime/filetype.vim 2008-02-25 17:51:17.000000000 +0100 +@@ -595,7 +595,7 @@ func! s:FTe() + endfunc + + " ERicsson LANGuage +-au BufNewFile,BufRead *.erl setf erlang ++au BufNewFile,BufRead *.erl,*hrl setf erlang + + " Elm Filter Rules file + au BufNewFile,BufRead filter-rules setf elmfilt diff --git a/vim-7.1-lib64.patch b/vim-7.1-lib64.patch new file mode 100644 index 00000000..9a21477b --- /dev/null +++ b/vim-7.1-lib64.patch @@ -0,0 +1,24 @@ +diff -up vim71/src/auto/configure.lib64 vim71/src/auto/configure +--- vim71/src/auto/configure.lib64 2008-07-23 12:36:17.000000000 +0200 ++++ vim71/src/auto/configure 2008-07-23 12:37:04.000000000 +0200 +@@ -4291,7 +4291,7 @@ else + + vi_cv_path_python_conf= + for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do +- for subdir in lib share; do ++ for subdir in lib64 lib share; do + d="${path}/${subdir}/python${vi_cv_var_python_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python_conf="$d" +diff -up vim71/src/configure.in.lib64 vim71/src/configure.in +--- vim71/src/configure.in.lib64 2008-07-23 12:36:17.000000000 +0200 ++++ vim71/src/configure.in 2008-07-23 12:36:17.000000000 +0200 +@@ -634,7 +634,7 @@ if test "$enable_pythoninterp" = "yes"; + [ + vi_cv_path_python_conf= + for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do +- for subdir in lib share; do ++ for subdir in lib64 lib share; do + d="${path}/${subdir}/python${vi_cv_var_python_version}/config" + if test -d "$d" && test -f "$d/config.c"; then + vi_cv_path_python_conf="$d" diff --git a/vim-7.1-nowarnings.patch b/vim-7.1-nowarnings.patch new file mode 100644 index 00000000..fe16c810 --- /dev/null +++ b/vim-7.1-nowarnings.patch @@ -0,0 +1,10 @@ +--- vim71/src/ex_docmd.c.nowarnings 2007-06-04 14:43:26.000000000 +0200 ++++ vim71/src/ex_docmd.c 2007-06-04 14:43:43.000000000 +0200 +@@ -3993,6 +3993,7 @@ get_flags(eap) + ex_ni(eap) + exarg_T *eap; + { ++ return; + if (!eap->skip) + eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version"); + } diff --git a/vim-7.2-elinks-parameter-518791.patch b/vim-7.2-elinks-parameter-518791.patch new file mode 100644 index 00000000..839ea095 --- /dev/null +++ b/vim-7.2-elinks-parameter-518791.patch @@ -0,0 +1,12 @@ +diff -up vim72/runtime/autoload/netrw.vim.elinksparm vim72/runtime/autoload/netrw.vim +--- vim72/runtime/autoload/netrw.vim.elinksparm 2009-12-03 13:08:10.000000000 +0100 ++++ vim72/runtime/autoload/netrw.vim 2009-12-03 13:08:27.000000000 +0100 +@@ -88,7 +88,7 @@ if !exists("g:netrw_http_cmd") + if executable("elinks") + let g:netrw_http_cmd = "elinks" + if !exists("g:netrw_http_xcmd") +- let g:netrw_http_xcmd= "-dump >" ++ let g:netrw_http_xcmd= "-source >" + endif + elseif executable("links") + let g:netrw_http_cmd = "links" diff --git a/vim-7.2-fstabsyntax.patch b/vim-7.2-fstabsyntax.patch new file mode 100644 index 00000000..d20df37b --- /dev/null +++ b/vim-7.2-fstabsyntax.patch @@ -0,0 +1,21 @@ +diff -up vim72/runtime/syntax/fstab.vim.fstabsyntax vim72/runtime/syntax/fstab.vim +--- vim72/runtime/syntax/fstab.vim.fstabsyntax 2008-01-16 21:52:16.000000000 +0100 ++++ vim72/runtime/syntax/fstab.vim 2008-08-14 17:02:08.000000000 +0200 +@@ -46,7 +46,7 @@ syn keyword fsMountPointKeyword containe + " Type + syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown + syn match fsTypeUnknown /\s\+\zs\w\+/ contained +-syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs ++syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs binfmt_misc cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs rpc_pipefs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs + + " Options + " ------- +@@ -58,7 +58,7 @@ syn match fsOptionsString /[a-zA-Z0-9_-] + syn keyword fsOptionsYesNo yes no + syn cluster fsOptionsCheckCluster contains=fsOptionsExt2Check,fsOptionsFatCheck + syn keyword fsOptionsSize 512 1024 2048 +-syn keyword fsOptionsGeneral async atime auto bind current defaults dev devgid devmode devmtime devuid dirsync exec force fstab kudzu loop mand move noatime noauto noclusterr noclusterw nodev nodevmtime nodiratime noexec nomand nosuid nosymfollow nouser owner rbind rdonly remount ro rq rw suid suiddir supermount sw sync union update user users xx ++syn keyword fsOptionsGeneral async atime auto bind current defaults dev devgid devmode devmtime devuid dirsync exec force fstab kudzu loop managed mand move noatime noauto noclusterr noclusterw nodev nodevmtime nodiratime noexec nomand nosuid nosymfollow nouser owner pamconsole rbind rdonly remount ro rq rw suid suiddir supermount sw sync union update user[s] xx + syn match fsOptionsGeneral /_netdev/ + + " Options: adfs diff --git a/vim-7.2-httpfiletype-499123.patch b/vim-7.2-httpfiletype-499123.patch new file mode 100644 index 00000000..6fb27481 --- /dev/null +++ b/vim-7.2-httpfiletype-499123.patch @@ -0,0 +1,12 @@ +diff -up vim72/runtime/filetype.vim.499123 vim72/runtime/filetype.vim +--- vim72/runtime/filetype.vim.499123 2009-12-02 17:42:47.000000000 +0100 ++++ vim72/runtime/filetype.vim 2009-12-02 17:43:52.000000000 +0100 +@@ -111,7 +111,7 @@ au BufNewFile,BufRead proftpd.conf* cal + + " Apache config file + au BufNewFile,BufRead .htaccess setf apache +-au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,auth_mysql.conf*,auth_pgsql.conf*,ssl.conf*,perl.conf*,php.conf*,python.conf*,squirrelmail.conf* call s:StarSetf('apache') ++au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/httpd/*.conf*,auth_mysql.conf*,auth_pgsql.conf*,ssl.conf*,perl.conf*,php.conf*,python.conf*,squirrelmail.conf* call s:StarSetf('apache') + + " XA65 MOS6510 cross assembler + au BufNewFile,BufRead *.a65 setf a65 diff --git a/vim-7.3-manpage-typo-668894-675480.patch b/vim-7.3-manpage-typo-668894-675480.patch deleted file mode 100644 index 0604fc4b..00000000 --- a/vim-7.3-manpage-typo-668894-675480.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up vim73/runtime/doc/vim.1.668894 vim73/runtime/doc/vim.1 ---- vim73/runtime/doc/vim.1.668894 2010-05-15 13:04:00.000000000 +0200 -+++ vim73/runtime/doc/vim.1 2012-08-28 12:41:36.000000000 +0200 -@@ -73,7 +73,7 @@ To edit a file that starts with a dash, - .TP - \- - The file to edit is read from stdin. Commands are read from stderr, which --should be a tty. -+should be a TTY. - .TP - \-t {tag} - The file to edit and the initial cursor position depends on a "tag", a sort diff --git a/vim-7.4-globalsyntax.patch b/vim-7.4-globalsyntax.patch deleted file mode 100644 index 2f7fe16b..00000000 --- a/vim-7.4-globalsyntax.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up vim91/runtime/syntax/spec.vim.globalsyntax vim91/runtime/syntax/spec.vim ---- vim91/runtime/syntax/spec.vim.globalsyntax 2024-09-20 22:29:01.858870640 +0200 -+++ vim91/runtime/syntax/spec.vim 2024-09-20 22:31:43.776217933 +0200 -@@ -112,7 +112,7 @@ syn region specDescriptionArea matchgrou - syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment - - "%% Scripts Section %% --syn region specScriptArea matchgroup=specSection start='^%\(prep\|generate_buildrequires\|conf\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\|filetriggerin\|filetriggerun\|filetriggerpostun\|transfiletriggerin\|transfiletriggerun\|transfiletriggerpostun\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2 -+syn region specScriptArea matchgroup=specSection start='^%\(prep\|generate_buildrequires\|conf\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\|filetriggerin\|filetriggerun\|filetriggerpostun\|transfiletriggerin\|transfiletriggerun\|transfiletriggerpostun\)\>' skip='^%{\|^%\(define\|global\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2 - - "%% Changelog Section %% - syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense diff --git a/vim-7.4-specsyntax.patch b/vim-7.4-specsyntax.patch deleted file mode 100644 index ace7607f..00000000 --- a/vim-7.4-specsyntax.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -up vim91/runtime/syntax/spec.vim.spec-syntax vim91/runtime/syntax/spec.vim ---- vim91/runtime/syntax/spec.vim.spec-syntax 2025-11-14 07:38:27.000000000 +0100 -+++ vim91/runtime/syntax/spec.vim 2025-11-14 07:52:56.081212607 +0100 -@@ -38,7 +38,7 @@ syn match specNoNumberHilite 'X11\|X11R6 - syn match specManpageFile '[a-zA-Z]\.1' - - "Day, Month and most used license acronyms --syn keyword specLicense contained GPL LGPL BSD MIT GNU -+syn keyword specLicense contained GPL LGPL BSD MIT GNU distributable - syn keyword specWeekday contained Mon Tue Wed Thu Fri Sat Sun - syn keyword specMonth contained Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec - syn keyword specMonth contained January February March April May June July August September October November December -@@ -105,7 +105,7 @@ syn case ignore - "%% PreAmble Section %% - "Copyright and Serial were deprecated by License and Epoch - syn region specPreAmbleDeprecated oneline matchgroup=specError start='^\(Copyright\|Serial\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier --syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Recommends\|Suggests\|Supplements\|Enhances\|Icon\|URL\|SourceLicense\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|DistTag\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\|ModularityLabel\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier -+syn region specPreAmble oneline matchgroup=specCommand start='^\(Prereq\|Summary\|Name\|Version\|Packager\|Requires\|Recommends\|Suggests\|Supplements\|Enhances\|Icon\|URL\|SourceLicense\|Source\d*\|Patch\d*\|Prefix\|Packager\|Group\|License\|Release\|BuildRoot\|Distribution\|DistTag\|Vendor\|Provides\|ExclusiveArch\|ExcludeArch\|ExcludeOS\|ExclusiveOS\|Obsoletes\|BuildArch\|BuildArchitectures\|BuildRequires\|BuildConflicts\|BuildPreReq\|Conflicts\|AutoRequires\|AutoReq\|AutoReqProv\|AutoProv\|Epoch\|ModularityLabel\)' end='$' contains=specEmail,specURL,specURLMacro,specLicense,specColon,specVariables,specSpecialChar,specMacroIdentifier - - "%% Description Section %% - syn region specDescriptionArea matchgroup=specSection start='^%description' end='^%'me=e-1 contains=specDescriptionOpts,specEmail,specURL,specNumber,specMacroIdentifier,specComment diff --git a/vim-8.0-copy-paste.patch b/vim-8.0-copy-paste.patch deleted file mode 100644 index 07f1e5a6..00000000 --- a/vim-8.0-copy-paste.patch +++ /dev/null @@ -1,95 +0,0 @@ -diff -up vim91/runtime/defaults.vim.copypaste vim91/runtime/defaults.vim ---- vim91/runtime/defaults.vim.copypaste 2025-06-27 06:43:53.000000000 +0200 -+++ vim91/runtime/defaults.vim 2025-07-11 09:16:19.013363739 +0200 -@@ -70,18 +70,6 @@ sunmap Q - " Revert with ":iunmap ". - inoremap u - --" In many terminal emulators the mouse works just fine. By enabling it you --" can position the cursor, Visually select and scroll with the mouse. --" Only xterm can grab the mouse events when using the shift key, for other --" terminals use ":", select text and press Esc. --if has('mouse') -- if &term =~ 'xterm' -- set mouse=a -- else -- set mouse=nvi -- endif --endif -- - " Only do this part when Vim was compiled with the +eval feature. - if 1 - -diff -up vim91/src/testdir/test_balloon.vim.copypaste vim91/src/testdir/test_balloon.vim ---- vim91/src/testdir/test_balloon.vim.copypaste 2025-07-11 09:16:19.013500976 +0200 -+++ vim91/src/testdir/test_balloon.vim 2025-07-11 09:17:20.168187029 +0200 -@@ -7,6 +7,7 @@ CheckFeature balloon_eval_term - source util/screendump.vim - - let s:common_script =<< trim [CODE] -+ set mouse=a - call setline(1, ["one one one", "two tXo two", "three three three"]) - set balloonevalterm balloonexpr=MyBalloonExpr()..s:trailing balloondelay=100 - let s:trailing = '<' " check that script context is set -diff -up vim91/src/testdir/test_popup.vim.copypaste vim91/src/testdir/test_popup.vim ---- vim91/src/testdir/test_popup.vim.copypaste 2025-07-11 08:58:40.000000000 +0200 -+++ vim91/src/testdir/test_popup.vim 2025-07-11 09:16:19.013692144 +0200 -@@ -957,6 +957,7 @@ func Test_mouse_popup_position() - let script =<< trim END - set mousemodel=popup_setpos - source $VIMRUNTIME/menu.vim -+ set mouse=a - call setline(1, join(range(20))) - func Trigger(col) - call test_setmouse(1, a:col) -diff -up vim91/src/testdir/test_popupwin.vim.copypaste vim91/src/testdir/test_popupwin.vim ---- vim91/src/testdir/test_popupwin.vim.copypaste 2025-07-11 08:58:40.000000000 +0200 -+++ vim91/src/testdir/test_popupwin.vim 2025-07-11 09:16:19.013971633 +0200 -@@ -556,6 +556,7 @@ func Test_popup_drag() - " create a popup that covers the command line - let lines =<< trim END - call setline(1, range(1, 20)) -+ set mouse=a - split - vsplit - $wincmd w -@@ -623,6 +624,7 @@ func Test_popup_drag_minwidth() - - " create a popup that does not fit - let lines =<< trim END -+ set mouse=a - call range(40) - \ ->map({_,i -> string(i)}) - \ ->popup_create({ -@@ -670,6 +672,7 @@ func Test_popup_drag_termwin() - let lines =<< trim END - set foldmethod=marker - call setline(1, range(100)) -+ set mouse=a - for nr in range(7) - call setline(nr * 12 + 1, "fold {{{") - call setline(nr * 12 + 11, "end }}}") -@@ -722,6 +725,7 @@ func Test_popup_close_with_mouse() - - let lines =<< trim END - call setline(1, range(1, 20)) -+ set mouse=a - " With border, can click on X - let winid = popup_create('foobar', #{ - \ close: 'button', -@@ -1559,6 +1563,7 @@ func Test_popup_beval() - let lines =<< trim END - call setline(1, range(1, 20)) - call setline(5, 'here is some text to hover over') -+ set mouse=a - set balloonevalterm - set balloonexpr=BalloonExpr() - set balloondelay=100 -@@ -2269,6 +2274,7 @@ func Test_popup_scrollbar() - - let lines =<< trim END - call setline(1, range(1, 20)) -+ set mouse=a - hi ScrollThumb ctermbg=blue - hi ScrollBar ctermbg=red - let winid = popup_create(['one', 'two', 'three', 'four', 'five', diff --git a/vim-crypto-warning.patch b/vim-crypto-warning.patch deleted file mode 100644 index 6f55807f..00000000 --- a/vim-crypto-warning.patch +++ /dev/null @@ -1,85 +0,0 @@ -diff -up vim91/src/config.h.in.fips-warning vim91/src/config.h.in ---- vim91/src/config.h.in.fips-warning 2025-10-31 08:12:59.598267544 +0100 -+++ vim91/src/config.h.in 2025-10-31 08:14:45.661859595 +0100 -@@ -526,5 +526,14 @@ - /* Define if _SC_SIGSTKSZ is available via sysconf() */ - #undef HAVE_SYSCONF_SIGSTKSZ - -+/* Do we need FIPS warning? */ -+#undef HAVE_FIPS_WARNING -+ -+/* Link to system-fips file */ -+#undef SYSTEM_FIPS_FILE_LINK -+ -+/* Link to fips_enabled file */ -+#undef FIPS_ENABLED_FILE_LINK -+ - /* Define if you want to load libgpm dynamically */ - #undef DYNAMIC_GPM -diff -up vim91/src/configure.ac.fips-warning vim91/src/configure.ac ---- vim91/src/configure.ac.fips-warning 2025-10-31 08:12:59.596711911 +0100 -+++ vim91/src/configure.ac 2025-10-31 08:12:59.598566242 +0100 -@@ -631,6 +631,38 @@ else - AC_SUBST(XDIFF_OBJS_USED) - fi - -+dnl Checking if we want FIPS warning -+ -+AC_MSG_CHECKING(--enable-fips-warning) -+AC_ARG_ENABLE([fips-warning], -+ AS_HELP_STRING([--enable-fips-warning], [Enable FIPS warning]), -+ ,[enable_fips_warning="no"]) -+ -+if test "$enable_fips_warning" = "yes"; then -+ AC_MSG_RESULT(yes) -+ AC_DEFINE([HAVE_FIPS_WARNING]) -+ -+ dnl Setting path for system-fips file -+ -+ AC_MSG_CHECKING(--with-system-fips-file argument) -+ AC_ARG_WITH([system-fips-file], [ --with-system-fips-file=PATH Link to system-fips file (default: /etc/system-fips)], -+ with_system_fips_file=$withval, -+ with_system_fips_file="/etc/system-fips") -+ AC_MSG_RESULT([$with_system_fips_file]) -+ AC_DEFINE_UNQUOTED([SYSTEM_FIPS_FILE_LINK], ["$with_system_fips_file"]) -+ -+ dnl Setting link to fips_enabled file -+ -+ AC_MSG_CHECKING(--with-fips-enabled-file argument) -+ AC_ARG_WITH([fips-enabled-file], [ --with-fips-enabled-file=PATH Link to fibs_enabled file (default: /proc/sys/crypto/fips_enabled)], -+ with_fips_enabled_file=$withval, -+ with_fips_enabled_file="/proc/sys/crypto/fips_enabled") -+ AC_MSG_RESULT([$with_fips_enabled_file]) -+ AC_DEFINE_UNQUOTED([FIPS_ENABLED_FILE_LINK], ["$with_fips_enabled_file"]) -+else -+ AC_MSG_RESULT(no) -+fi -+ - dnl Check for Lua feature. - AC_MSG_CHECKING(--enable-luainterp argument) - AC_ARG_ENABLE(luainterp, -diff -up vim91/src/crypt.c.fips-warning vim91/src/crypt.c ---- vim91/src/crypt.c.fips-warning 2025-10-10 07:16:11.000000000 +0200 -+++ vim91/src/crypt.c 2025-10-31 08:12:59.598872032 +0100 -@@ -806,6 +806,21 @@ crypt_check_method(int method) - msg_scroll = TRUE; - msg(_("Warning: Using a weak encryption method; see :help 'cm'")); - } -+#ifdef HAVE_FIPS_WARNING -+ FILE *fips_enable_fd = fopen(FIPS_ENABLED_FILE_LINK, "r"); -+ if (fips_enable_fd == NULL) -+ return; -+ -+ int enabled = fgetc(fips_enable_fd); -+ -+ if ( access(SYSTEM_FIPS_FILE_LINK, F_OK) != -1 && enabled == '1') -+ { -+ msg_scroll = TRUE; -+ msg(_("Warning: This cryptography is not FIPS 140-2 compliant.")); -+ } -+ -+ fclose(fips_enable_fd); -+#endif - } - - /* diff --git a/vim-default-editor.csh b/vim-default-editor.csh deleted file mode 100644 index d98316d5..00000000 --- a/vim-default-editor.csh +++ /dev/null @@ -1,5 +0,0 @@ -# Ensure vim is set as EDITOR if it isn't already set - -if ( ! ($?EDITOR) ) then - setenv EDITOR "/usr/bin/vim" -endif diff --git a/vim-default-editor.fish b/vim-default-editor.fish deleted file mode 100644 index e4288c18..00000000 --- a/vim-default-editor.fish +++ /dev/null @@ -1,8 +0,0 @@ -# Ensure vim is set as EDITOR if it isn't already set -# This is set as a universal variable so that any other definition -# by the user would win -# Cf. https://fishshell.com/docs/current/index.html#variables-scope - -if ! set -q EDITOR; - set -x EDITOR /usr/bin/vim -end diff --git a/vim-default-editor.sh b/vim-default-editor.sh deleted file mode 100644 index 1a53dafd..00000000 --- a/vim-default-editor.sh +++ /dev/null @@ -1,5 +0,0 @@ -# Ensure vim is set as EDITOR if it isn't already set - -if [ -z "$EDITOR" ]; then - export EDITOR="/usr/bin/vim" -fi diff --git a/vim-manpagefixes-948566.patch b/vim-manpagefixes-948566.patch deleted file mode 100644 index c0806d65..00000000 --- a/vim-manpagefixes-948566.patch +++ /dev/null @@ -1,306 +0,0 @@ -diff -up vim91/runtime/doc/vim.1.manpagefixes vim91/runtime/doc/vim.1 ---- vim91/runtime/doc/vim.1.manpagefixes 2024-11-29 12:17:53.553382696 +0100 -+++ vim91/runtime/doc/vim.1 2024-11-29 12:17:53.556382667 +0100 -@@ -17,11 +17,13 @@ vim \- Vi IMproved, a programmer's text - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -@@ -114,7 +116,12 @@ Can also be done with the "\-R" argument - gvim gview - The GUI version. - Starts a new window. --Can also be done with the "\-g" argument. -+.TP -+gex -+Starts a new gvim window in Ex mode. Can also be done with the "-e" argument to gvim -+.TP -+vimx -+Starts gvim in "Vi" mode similar to "vim", but with additional features like xterm clipboard support - .TP - evim eview - The GUI version in easy mode. -@@ -491,6 +498,12 @@ As \-\-remote, but Vim does not exit unt - \-\-remote\-wait\-silent - As \-\-remote\-wait, but without the warning when no server is found. - .TP -+\-\-remote\-tab[\-wait][\-silent] -+As \-\-remote but use tab page per file -+.TP -+\-\-role -+Set a unique role to identify the main window -+.TP - \-\-serverlist - List the names of all Vim servers that can be found. - .TP -diff -up vim91/runtime/doc/vim-fr.1.manpagefixes vim91/runtime/doc/vim-fr.1 ---- vim91/runtime/doc/vim-fr.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-fr.1 2024-11-29 12:17:53.556382667 +0100 -@@ -24,11 +24,13 @@ vim \- Vi IMproved, éditeur de texte pou - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim-fr.UTF-8.1.manpagefixes vim91/runtime/doc/vim-fr.UTF-8.1 ---- vim91/runtime/doc/vim-fr.UTF-8.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-fr.UTF-8.1 2024-11-29 12:17:53.556382667 +0100 -@@ -24,11 +24,13 @@ vim \- Vi IMproved, éditeur de texte po - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim-it.1.manpagefixes vim91/runtime/doc/vim-it.1 ---- vim91/runtime/doc/vim-it.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-it.1 2024-11-29 12:17:53.557382658 +0100 -@@ -17,11 +17,13 @@ vim \- VI Migliorato, un editor di testi - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim-it.UTF-8.1.manpagefixes vim91/runtime/doc/vim-it.UTF-8.1 ---- vim91/runtime/doc/vim-it.UTF-8.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-it.UTF-8.1 2024-11-29 12:17:53.557382658 +0100 -@@ -17,11 +17,13 @@ vim \- VI Migliorato, un editor di testi - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim.man.manpagefixes vim91/runtime/doc/vim.man ---- vim91/runtime/doc/vim.man.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim.man 2024-11-29 12:17:53.557382658 +0100 -@@ -9,9 +9,9 @@ SYNOPSIS - vim [options] -t tag - vim [options] -q [errorfile] - -- ex -+ ex gex - view -- gvim gview evim eview -+ gvim gview vimx evim eview - rvim rview rgvim rgview - - DESCRIPTION -@@ -77,8 +77,13 @@ DESCRIPTION - the files. Can also be done with the "-R" argument. - - gvim gview -- The GUI version. Starts a new window. Can also be done with -- the "-g" argument. -+ The GUI version. Starts a new window. -+ -+ gex Starts a new gvim window in Ex mode. Can also be done with -+ the "-e" argument to gvim -+ -+ vimx Starts gvim in "Vi" mode similar to "vim", but with -+ additional features like xterm clipboard support - - evim eview - The GUI version in easy mode. Starts a new window. Can also -diff -up vim91/runtime/doc/vim-pl.1.manpagefixes vim91/runtime/doc/vim-pl.1 ---- vim91/runtime/doc/vim-pl.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-pl.1 2024-11-29 12:17:53.557382658 +0100 -@@ -17,11 +17,13 @@ vim \- Vi rozbudowany, edytor tekstu dla - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim-pl.UTF-8.1.manpagefixes vim91/runtime/doc/vim-pl.UTF-8.1 ---- vim91/runtime/doc/vim-pl.UTF-8.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-pl.UTF-8.1 2024-11-29 12:17:53.558382649 +0100 -@@ -17,11 +17,13 @@ vim \- Vi rozbudowany, edytor tekstu dla - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim-ru.1.manpagefixes vim91/runtime/doc/vim-ru.1 ---- vim91/runtime/doc/vim-ru.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-ru.1 2024-11-29 12:17:53.558382649 +0100 -@@ -18,11 +18,13 @@ - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vim-ru.UTF-8.1.manpagefixes vim91/runtime/doc/vim-ru.UTF-8.1 ---- vim91/runtime/doc/vim-ru.UTF-8.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vim-ru.UTF-8.1 2024-11-29 12:17:53.558382649 +0100 -@@ -18,11 +18,13 @@ программиÑтов. - .PP - .br - .B ex -+.B gex - .br - .B view - .br - .B gvim - .B gview -+.B vimx - .B evim - .B eview - .br -diff -up vim91/runtime/doc/vimtutor.1.manpagefixes vim91/runtime/doc/vimtutor.1 ---- vim91/runtime/doc/vimtutor.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vimtutor.1 2024-11-29 12:17:53.559382639 +0100 -@@ -8,6 +8,8 @@ vimtutor \- the Vim tutor - .B vimtutor [\-h | \-\-help] - .br - .B vimtutor [\-\-list] -+.br -+.B gvimtutor - .SH DESCRIPTION - .B Vimtutor - starts the -diff -up vim91/runtime/doc/vimtutor-it.1.manpagefixes vim91/runtime/doc/vimtutor-it.1 ---- vim91/runtime/doc/vimtutor-it.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vimtutor-it.1 2024-11-29 12:17:53.559382639 +0100 -@@ -8,6 +8,8 @@ vimtutor \- Un breve corso introduttivo - .B vimtutor [\-h | \-\-help] - .br - .B vimtutor [\-\-list] -+.br -+.B gvimtutor - .SH DESCRIZIONE - .B Vimtutor - inizia il -diff -up vim91/runtime/doc/vimtutor-it.UTF-8.1.manpagefixes vim91/runtime/doc/vimtutor-it.UTF-8.1 ---- vim91/runtime/doc/vimtutor-it.UTF-8.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vimtutor-it.UTF-8.1 2024-11-29 12:17:53.559382639 +0100 -@@ -8,6 +8,8 @@ vimtutor \- Un breve corso introduttivo - .B vimtutor [\-h | \-\-help] - .br - .B vimtutor [\-\-list] -+.br -+.B gvimtutor - .SH DESCRIZIONE - .B Vimtutor - inizia il -diff -up vim91/runtime/doc/vimtutor.man.manpagefixes vim91/runtime/doc/vimtutor.man ---- vim91/runtime/doc/vimtutor.man.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vimtutor.man 2024-11-29 12:17:53.559382639 +0100 -@@ -8,6 +8,7 @@ SYNOPSIS - [ISO639] - vimtutor [-h | --help] - vimtutor [--list] -+ gvimtutor - - DESCRIPTION - Vimtutor starts the Vim tutor. -diff -up vim91/runtime/doc/vimtutor-pl.1.manpagefixes vim91/runtime/doc/vimtutor-pl.1 ---- vim91/runtime/doc/vimtutor-pl.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vimtutor-pl.1 2024-11-29 12:17:53.559382639 +0100 -@@ -4,6 +4,8 @@ vimtutor \- nauczyciel Vima - .SH SYNOPSIS - .br - .B vimtutor -g [jêzyk] -+.br -+.B gvimtutor - .SH OPIS - .B Vimtutor - uruchamia nauczyciela -diff -up vim91/runtime/doc/vimtutor-pl.UTF-8.1.manpagefixes vim91/runtime/doc/vimtutor-pl.UTF-8.1 ---- vim91/runtime/doc/vimtutor-pl.UTF-8.1.manpagefixes 2024-11-15 06:32:23.000000000 +0100 -+++ vim91/runtime/doc/vimtutor-pl.UTF-8.1 2024-11-29 12:17:53.560382630 +0100 -@@ -4,6 +4,8 @@ vimtutor \- nauczyciel Vima - .SH SYNOPSIS - .br - .B vimtutor -g [jÄ™zyk] -+.br -+.B gvimtutor - .SH OPIS - .B Vimtutor - uruchamia nauczyciela -diff -up vim91/runtime/doc/vimtutor-ru.1.manpagefixes vim91/runtime/doc/vimtutor-ru.1 ---- vim91/runtime/doc/vimtutor-ru.1.manpagefixes 2024-11-29 12:17:53.560382630 +0100 -+++ vim91/runtime/doc/vimtutor-ru.1 2024-11-29 12:20:14.883047832 +0100 -@@ -8,6 +8,8 @@ - .B vimtutor [\-h | \-\-help] - .br - .B vimtutor [\-\-list] -+.br -+.B gvimtutor - .SH ïðéóáîéå - ðÏ ËÏÍÁÎÄÅ - .B vimtutor -diff -up vim91/runtime/doc/vimtutor-ru.UTF-8.1.manpagefixes vim91/runtime/doc/vimtutor-ru.UTF-8.1 ---- vim91/runtime/doc/vimtutor-ru.UTF-8.1.manpagefixes 2024-11-29 12:17:53.560382630 +0100 -+++ vim91/runtime/doc/vimtutor-ru.UTF-8.1 2024-11-29 12:19:27.318497067 +0100 -@@ -11,6 +11,8 @@ Программа vimtutor \[em] вып - .SH ОПИСÐÐИЕ - По команде - .B vimtutor -+.br -+.B gvimtutor - выполнÑетÑÑ Ð·Ð°Ð¿ÑƒÑк редактора - .B Vim. - Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ð¼ файлом, Ñодержащем текÑÑ‚ учебника. diff --git a/vim-python3-tests.patch b/vim-python3-tests.patch deleted file mode 100644 index 98b5f758..00000000 --- a/vim-python3-tests.patch +++ /dev/null @@ -1,87 +0,0 @@ -diff -up vim82/runtime/tools/demoserver.py.python-tests vim82/runtime/tools/demoserver.py ---- vim82/runtime/tools/demoserver.py.python-tests 2019-07-26 07:58:50.000000000 +0200 -+++ vim82/runtime/tools/demoserver.py 2020-04-17 06:18:06.748977527 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - # - # Server that will accept connections from a Vim channel. - # Run this server and then in Vim you can open the channel: -diff -up vim82/src/auto/configure.python-tests vim82/src/auto/configure ---- vim82/src/auto/configure.python-tests 2020-04-17 06:07:48.000000000 +0200 -+++ vim82/src/auto/configure 2020-04-17 06:18:06.750977509 +0200 -@@ -6418,7 +6418,7 @@ eof - if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \ - "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then - vi_cv_path_python_plibs="-framework Python" -- if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then -+ if test "x${vi_cv_path_python}" != "x/usr/bin/python2" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then - vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python" - fi - else -diff -up vim82/src/configure.ac.python-tests vim82/src/configure.ac ---- vim82/src/configure.ac.python-tests 2020-04-17 06:07:48.000000000 +0200 -+++ vim82/src/configure.ac 2020-04-17 06:18:06.750977509 +0200 -@@ -1263,7 +1263,7 @@ eof - if test "x$MACOS_X" = "xyes" && test -n "${python_PYTHONFRAMEWORK}" && ${vi_cv_path_python} -c \ - "import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"; then - vi_cv_path_python_plibs="-framework Python" -- if test "x${vi_cv_path_python}" != "x/usr/bin/python" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then -+ if test "x${vi_cv_path_python}" != "x/usr/bin/python2" && test -n "${python_PYTHONFRAMEWORKPREFIX}"; then - vi_cv_path_python_plibs="-F${python_PYTHONFRAMEWORKPREFIX} -framework Python" - fi - else -diff -up vim82/src/testdir/test_channel_pipe.py.python-tests vim82/src/testdir/test_channel_pipe.py ---- vim82/src/testdir/test_channel_pipe.py.python-tests 2019-07-26 07:58:53.000000000 +0200 -+++ vim82/src/testdir/test_channel_pipe.py 2020-04-17 06:18:06.751977500 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - # - # Server that will communicate over stdin/stderr - # -diff -up vim82/src/testdir/test_channel.py.python-tests vim82/src/testdir/test_channel.py ---- vim82/src/testdir/test_channel.py.python-tests 2020-04-17 06:18:06.751977500 +0200 -+++ vim82/src/testdir/test_channel.py 2020-04-17 06:18:24.517813082 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/python3 - # - # Server that will accept connections from a Vim channel. - # Used by test_channel.vim. -diff -up vim82/src/testdir/test_channel_write.py.python-tests vim82/src/testdir/test_channel_write.py ---- vim82/src/testdir/test_channel_write.py.python-tests 2019-07-26 07:58:53.000000000 +0200 -+++ vim82/src/testdir/test_channel_write.py 2020-04-17 06:18:06.751977500 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - # - # Program that writes a number to stdout repeatedly - # -diff -up vim82/src/testdir/test_makeencoding.py.python-tests vim82/src/testdir/test_makeencoding.py ---- vim82/src/testdir/test_makeencoding.py.python-tests 2019-07-26 07:58:53.000000000 +0200 -+++ vim82/src/testdir/test_makeencoding.py 2020-04-17 06:18:06.751977500 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - # -*- coding: utf-8 -*- - - # Test program for :make, :grep and :cgetfile. -diff -up vim82/src/testdir/test_netbeans.py.python-tests vim82/src/testdir/test_netbeans.py ---- vim82/src/testdir/test_netbeans.py.python-tests 2019-07-26 07:58:53.000000000 +0200 -+++ vim82/src/testdir/test_netbeans.py 2020-04-17 06:18:06.751977500 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - # - # Server that will communicate with Vim through the netbeans interface. - # Used by test_netbeans.vim. -diff -up vim82/src/testdir/test_short_sleep.py.python-tests vim82/src/testdir/test_short_sleep.py ---- vim82/src/testdir/test_short_sleep.py.python-tests 2019-07-26 07:58:53.000000000 +0200 -+++ vim82/src/testdir/test_short_sleep.py 2020-04-17 06:18:06.751977500 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - # - # Program that sleeps for 100 msec - # diff --git a/vim-update.sh b/vim-update.sh deleted file mode 100755 index fc37e160..00000000 --- a/vim-update.sh +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/bash -debug="" -#debug="echo " -branches=( "rawhide" "f43" "f42" ) -releases=( "fc44" "fc43" "fc42" ) -# the first bodhi enabled release is the last without \| - all -# others need to have \| -regexps=( "fc44" "fc43" "\|fc42" ) -bodhi_enabled=( "0" "1" "1" ) -needs_update=() -#releases_regexp=fc28\\\|fc27\\\|fc28 - -branches_index=0 -release_index=0 -regexp_index=0 -bodhi_enabled_index=0 -done_build=0 -releases_regexp="" -let "regexp_index+=1" - -cd `dirname $0` -LANG=C -SPEC=vim.spec -CHANGES=1 -force=0 - -if [ "x$1" == "x--force" ]; then - force=1 -fi - -DATE=`date +"%a %b %d %Y"` -$debug fedpkg switch-branch "${branches[@]: $branches_index: 1}" - - -if [ $? -ne 0 ]; then - echo "Error with switching branch" - exit 1 -fi - -MAJORVERSION=`grep "define baseversion" vim.spec | cut -d ' ' -f 3` -MAJORVERDIR=$(echo $MAJORVERSION | sed -e 's/\.//') -EPOCH=`grep "Epoch:" vim.spec | cut -d ':' -f 2` -PACKAGER=`rpmdev-packager` -ORIGPL=`grep "define patchlevel" vim.spec | cut -d ' ' -f 3 | sed -e "s/^0*//g"` -ORIGPLFILLED=`printf "%03d" $ORIGPL` - -if [ ! -d vim-upstream ]; then - git clone https://github.com/vim/vim.git vim-upstream -else - pushd vim-upstream - git pull - popd -fi - -pushd vim-upstream - -# get the latest tag. Might be tricky with other packages, but upstream vim uses just a single branch: -LASTTAG=$(git describe --tags $(git rev-list --tags --max-count=1)) - -# vim upstream tags have the form v7.4.123. Remove the 'v' and get major release and patchlevel: -UPSTREAMMAJOR=$(echo $LASTTAG | sed -e 's/v\([0-9]*\.[0-9]*\).*/\1/') -UPSTREAMMAJORDIR=$(echo $UPSTREAMMAJOR | sed -e 's/\.//') -LASTPL=`echo $LASTTAG| sed -e 's/.*\.//;s/^0*//'` -LASTPLFILLED=`printf "%03d" $LASTPL` -if [ $force -ne 1 -a "$ORIGPLFILLED" == "$LASTPLFILLED" ]; then - echo "No new patchlevel available" - CHANGES=0 -fi -rm -rf dist/* 2>/dev/null -make unixall - -# include patchlevel in tarball name so that older sources won't get overwritten: -mv dist/vim-${UPSTREAMMAJOR}.tar.bz2 dist/vim-${UPSTREAMMAJOR}-${LASTPLFILLED}.tar.bz2 - -# We don't include the full upstream changelog in the rpm changelog, just ship a file with -# the changes: -popd - -cp -f vim-upstream/dist/vim-${UPSTREAMMAJOR}-${LASTPLFILLED}.tar.bz2 . -#wget https://raw.githubusercontent.com/ignatenkobrain/vim-spec-plugin/rawhide/ftplugin/spec.vim -O ftplugin-spec.vim -#wget https://raw.githubusercontent.com/ignatenkobrain/vim-spec-plugin/rawhide/syntax/spec.vim -O syntax-spec.vim -if [ $CHANGES -ne 0 ]; then - CHLOG="* $DATE $PACKAGER -$EPOCH:$UPSTREAMMAJOR" - $debug sed -i -e "/Release: /cRelease: 1%{?dist}" $SPEC - if [ "x$MAJORVERSION" != "x$UPSTREAMMAJOR" ]; then - $debug sed -i -s "s/define baseversion $MAJORVERSION/define baseversion $UPSTREAMMAJOR/" $SPEC - $debug sed -i -s "s/define vimdir vim$MAJORVERDIR/define vimdir vim$UPSTREAMMAJORDIR/" $SPEC - fi - $debug sed -i -e "s/define patchlevel $ORIGPLFILLED/define patchlevel $LASTPLFILLED/" $SPEC - $debug sed -i -e "/\%changelog/a$CHLOG.$LASTPLFILLED-1\n- patchlevel $LASTPLFILLED\n" $SPEC - $debug fedpkg new-sources vim-${UPSTREAMMAJOR}-${LASTPLFILLED}.tar.bz2 - $debug git add vim.spec - $debug git commit -m "- patchlevel $LASTPL" - - # mockbuild - $debug fedpkg mockbuild - if [ $? -ne 0 ]; then - echo "Error: fedpkg mockbuild" - exit 1 - fi - - # push - $debug fedpkg push - if [ $? -ne 0 ]; then - echo "Error: fedpkg push" - exit 1 - fi - - $debug fedpkg build - if [ $? -eq 0 ]; then - done_build=1 - else - echo "Error when building package in $branch" - exit 1 - fi - - let "release_index+=1" - let "bodhi_enabled_index+=1" - - for branch in "${branches[@]:(1)}"; - do - # switch to branch - $debug fedpkg switch-branch $branch - - # merge with previous branch - $debug bash -c "git merge rawhide <<<':x'" - if [ $? -ne 0 ]; then - echo "Error: git merge rawhide" - exit 1 - fi - - # mockbuild - $debug fedpkg mockbuild - if [ $? -ne 0 ]; then - echo "Error: fedpkg mockbuild failed" - exit 1 - fi - - # push - $debug fedpkg push - if [ $? -ne 0 ]; then - echo "Error: fedpkg push" - exit 1 - fi - - # append next release to regexp if the branch is enabled in bodhi - because we - # need to check if there aren't any testing updates from higher enabled branches - # (lower branch cannot have bigger NVR than higher branch) in next iteration - if [ ${bodhi_enabled[@]: $bodhi_enabled_index: 1} -eq 1 ] - then - releases_regexp="$releases_regexp${regexps[@]: regexp_index: 1}" - fi - - # Check if release has an update in testing - if not, build package - # and submit update for testing - # done_build is a check, if previous branch did build - lower branch can do - # a build only when higher branch build was ok. - testing_update=`bodhi updates query --packages vim --status testing \ - | grep $releases_regexp` - if [ "$testing_update" == "" ] && [ $done_build -eq 1 ]; then - $debug fedpkg build - if [ $? -eq 0 ]; then - # if branch isn't rawhide or branch is enabled in bodhi, create the update if newer branch does - # not have an update in testing - if [ $branch != "rawhide" ] || [ ${bodhi_enabled[@]: $bodhi_enabled_index: 1} -eq 1 ]; then - $debug bodhi updates new --type enhancement --notes "The newest upstream commit" --request testing --autotime --autokarma --stable-karma 3 --unstable-karma -3 vim-${UPSTREAMMAJOR}.${LASTPLFILLED}-1.${releases[@]: $release_index: 1} - fi - else - echo "Error when building package for $branch" - exit 1 - fi - else - done_build=0 - fi - - # Increment index - let "branches_index+=1" - let "release_index+=1" - let "regexp_index+=1" - let "bodhi_enabled_index+=1" - done - #$debug git push - #if [ $? -eq 0 ]; then - # $debug rm -f $HOME/.koji/config - # $debug fedpkg build - # $debug ln -sf ppc-config $HOME/.koji/config - #else - # echo "GIT push failed" - #fi -fi - -#go back to rawhide -$debug fedpkg switch-branch rawhide - -# clean up the downloaded vim-upstream repo - to prevent changes in it and breaking update process -# prevents #1931099 -$debug rm -rf vim-upstream - -exit 0 diff --git a/vim.spec b/vim.spec index b2c29f97..a9dff51c 100644 --- a/vim.spec +++ b/vim.spec @@ -1,179 +1,416 @@ -%bcond_without gui - - -%if 0%{?fedora} -%bcond_without default_editor -%bcond_without gpm -%bcond_without libsodium_crypt -%else -%bcond_with default_editor -%bcond_with gpm -%bcond_with libsodium_crypt -%endif - - -%define patchlevel 2068 -%define withnetbeans 1 - -%define withhunspell 0 -%define withlua 1 -%define withperl 1 - -# VIm upstream wants to build with FORTIFY_SOURCE=1, -# because higher levels causes crashes of valid code constructs -# and their reimplementation would cost unnecessary maintenance -# https://github.com/vim/vim/pull/3507 -%define _fortify_level 1 - -%define baseversion 9.1 -%define vimdir vim91 - - +# used for CVS snapshots: +%define CVSDATE %{nil} %if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1} %define WITH_SELINUX 1 %endif - -%if %{with gui} %define desktop_file 1 -%else -%define desktop_file 0 -%endif - %if %{desktop_file} %define desktop_file_utils_version 0.2.93 %endif -%if 0%{?flatpak} -%define withruby 0 -%else -%define withruby 1 -%endif +%define withnetbeans 1 +%define withvimspell 0 +%define withhunspell 0 +%define withruby 1 + +%define baseversion 7.2 +#used for pre-releases: +%define beta %{nil} +%define vimdir vim72%{?beta} +%define patchlevel 315 Summary: The VIM editor -URL: https://www.vim.org/ +URL: http://www.vim.org/ Name: vim -Version: %{baseversion}.%{patchlevel} +Version: %{baseversion}.%{beta}%{patchlevel} Release: 1%{?dist} -Epoch: 2 -# swift.vim contains Apache 2.0 with runtime library exception: -# which is taken as Apache-2.0 WITH Swift-exception - reported to legal as https://gitlab.com/fedora/legal/fedora-license-data/-/issues/188 -# resolution: the license is good for Fedora, but the file does not have a creativity from -# -# Open Publication License 1.0 or later for Vim documentation - reported to legal for adding to the allowed licenses list -# response here: https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/message/4UTW5GFDELGMG6K3NQ7NBU42LC2FJOB5/ -# resolution: take it as OPUBL-1.0, the license won't be added to allowed license list, but if a project uses it for documentation -# and don't use license options mentioned in the OPUBL 1.0 license text (which both are the case for Vim), the license is allowed -License: Vim AND LGPL-2.1-or-later AND MIT AND GPL-1.0-only AND (GPL-2.0-only OR Vim) AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND GPL-2.0-or-later AND GPL-3.0-or-later AND OPUBL-1.0 AND Apache-2.0 WITH Swift-exception -Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}-%{patchlevel}.tar.bz2 -Source1: virc -Source2: vimrc -Source3: gvim16.png -Source4: gvim32.png -Source5: gvim48.png -Source6: gvim64.png -Source7: spec-template.new -Source8: macros.vim -Source9: vim-default-editor.sh -Source10: vim-default-editor.csh -Source11: vim-default-editor.fish -Source12: view_wrapper -Source13: vi_wrapper - - -Patch1: vim-7.0-fixkeys.patch -Patch2: vim-7.4-specsyntax.patch -Patch3: vim-7.3-manpage-typo-668894-675480.patch -Patch4: vim-manpagefixes-948566.patch -Patch5: vim-7.4-globalsyntax.patch -# migrate shebangs in script to /usr/bin/python3 and use python2 when necessary -Patch6: vim-python3-tests.patch -# fips warning (Fedora downstream patch) -Patch7: vim-crypto-warning.patch -# don't ever set mouse (Fedora downstream patch) -Patch8: vim-8.0-copy-paste.patch - - -# patch only when hunspell is enabled -Patch10000: vim-7.0-hunspell.patch - - -# uses autoconf in spec file -BuildRequires: autoconf - -# gcc is no longer in buildroot by default -BuildRequires: gcc -# for translations -BuildRequires: gettext - -# glibc in F35 bootstraped several conversion formats from -# iconv into a separate package. Vim needs those additional -# formats during compilation. -BuildRequires: glibc-gconv-extra - -# for setting ACL on created files -BuildRequires: libacl-devel - -# uses libtool for linking -BuildRequires: libtool - -# uses make -BuildRequires: make -# screen handling library -BuildRequires: ncurses-devel - -# for building function prototypes -BuildRequires: python3 -BuildRequires: python3-clang - -# for python plugin -BuildRequires: python3-devel - - -%if %{desktop_file} -# for /usr/bin/desktop-file-install -BuildRequires: desktop-file-utils >= %{desktop_file_utils_version} -Requires: desktop-file-utils +License: Vim +Group: Applications/Editors +Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}%{?beta}%{?CVSDATE}.tar.bz2 +Source1: ftp://ftp.vim.org/pub/vim/extra/vim-%{baseversion}%{?beta}-lang%{?CVSDATE}.tar.gz +Source2: ftp://ftp.vim.org/pub/vim/extra/vim-%{baseversion}%{?beta}-extra%{?CVSDATE}.tar.gz +Source3: gvim.desktop +Source4: vimrc +#Source5: ftp://ftp.vim.org/pub/vim/patches/README.patches +Source7: gvim16.png +Source8: gvim32.png +Source9: gvim48.png +Source10: gvim64.png +Source11: Changelog.rpm +Source12: vi_help.txt +%if %{withvimspell} +Source13: vim-spell-files.tar.bz2 %endif +Source14: spec-template +Source15: http://www.cvjb.de/comp/vim/forth.vim -%if %{with gpm} -# for mouse support in console -BuildRequires: gpm-devel -%endif +# remove this for the next major version, CVE fixes: +Source16: ftp://ftp.vim.org/vol/2/vim/runtime/plugin/netrwPlugin.vim +Source17: ftp://ftp.vim.org/vol/2/vim/runtime/plugin/gzip.vim +Source18: ftp://ftp.vim.org/vol/2/vim/runtime/filetype.vim +Source19: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/zip.vim +Source20: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/tar.vim +Source21: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrwFileHandlers.vim +Source22: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrw.vim +Source23: ftp://ftp.vim.org/vol/2/vim/runtime/autoload/netrwSettings.vim +Patch2002: vim-7.0-fixkeys.patch +Patch2003: vim-6.2-specsyntax.patch +Patch2004: vim-7.0-crv.patch +Patch2010: xxd-locale.patch %if %{withhunspell} +Patch2011: vim-7.0-hunspell.patch BuildRequires: hunspell-devel %endif +# Patches 001 < 999 are patches from the base maintainer. +# If you're as lazy as me, generate the list using +# for i in `seq 1 14`; do printf "Patch%03d: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.%03d\n" $i $i; done +Patch001: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.001 +Patch002: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.002 +Patch003: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.003 +Patch004: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.004 +Patch005: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.005 +Patch006: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.006 +Patch007: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.007 +Patch008: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.008 +Patch009: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.009 +Patch010: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.010 +Patch011: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.011 +Patch012: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.012 +Patch013: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.013 +Patch014: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.014 +Patch015: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.015 +Patch016: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.016 +Patch017: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.017 +Patch018: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.018 +Patch019: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.019 +Patch020: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.020 +Patch021: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.021 +Patch022: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.022 +Patch023: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.023 +Patch024: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.024 +Patch025: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.025 +Patch026: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.026 +Patch027: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.027 +Patch028: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.028 +Patch029: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.029 +Patch030: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.030 +Patch031: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.031 +Patch032: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.032 +Patch033: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.033 +Patch034: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.034 +Patch035: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.035 +Patch036: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.036 +Patch037: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.037 +Patch038: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.038 +Patch039: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.039 +Patch040: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.040 +Patch041: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.041 +Patch042: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.042 +Patch043: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.043 +Patch044: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.044 +Patch045: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.045 +Patch046: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.046 +Patch047: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.047 +Patch048: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.048 +Patch049: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.049 +Patch050: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.050 +Patch051: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.051 +Patch052: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.052 +Patch053: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.053 +Patch054: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.054 +Patch055: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.055 +Patch056: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.056 +Patch057: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.057 +Patch058: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.058 +Patch059: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.059 +Patch060: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.060 +Patch061: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.061 +Patch062: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.062 +Patch063: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.063 +Patch064: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.064 +Patch065: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.065 +Patch066: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.066 +Patch067: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.067 +Patch068: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.068 +Patch069: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.069 +Patch070: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.070 +Patch071: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.071 +Patch072: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.072 +Patch073: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.073 +Patch074: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.074 +Patch075: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.075 +Patch076: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.076 +Patch077: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.077 +Patch078: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.078 +Patch079: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.079 +Patch080: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.080 +Patch081: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.081 +Patch082: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.082 +Patch083: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.083 +Patch084: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.084 +Patch085: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.085 +Patch086: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.086 +Patch087: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.087 +Patch088: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.088 +Patch089: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.089 +Patch090: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.090 +Patch091: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.091 +Patch092: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.092 +Patch093: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.093 +Patch094: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.094 +Patch095: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.095 +Patch096: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.096 +Patch097: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.097 +Patch098: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.098 +Patch099: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.099 +Patch100: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.100 +Patch101: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.101 +Patch102: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.102 +Patch103: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.103 +Patch104: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.104 +Patch105: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.105 +Patch106: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.106 +Patch107: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.107 +Patch108: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.108 +Patch109: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.109 +Patch110: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.110 +Patch111: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.111 +Patch112: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.112 +Patch113: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.113 +Patch114: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.114 +Patch115: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.115 +Patch116: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.116 +Patch117: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.117 +Patch118: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.118 +Patch119: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.119 +Patch120: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.120 +Patch121: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.121 +Patch122: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.122 +Patch123: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.123 +Patch124: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.124 +Patch125: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.125 +Patch126: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.126 +Patch127: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.127 +Patch128: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.128 +Patch129: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.129 +Patch130: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.130 +Patch131: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.131 +Patch132: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.132 +Patch133: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.133 +Patch134: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.134 +Patch135: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.135 +Patch136: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.136 +Patch137: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.137 +Patch138: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.138 +Patch139: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.139 +Patch140: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.140 +Patch141: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.141 +Patch142: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.142 +Patch143: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.143 +Patch144: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.144 +Patch145: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.145 +Patch146: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.146 +Patch147: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.147 +Patch148: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.148 +Patch149: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.149 +Patch150: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.150 +Patch151: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.151 +Patch152: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.152 +Patch153: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.153 +Patch154: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.154 +Patch155: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.155 +Patch156: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.156 +Patch157: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.157 +Patch158: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.158 +Patch159: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.159 +Patch160: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.160 +Patch161: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.161 +Patch162: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.162 +Patch163: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.163 +Patch164: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.164 +Patch165: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.165 +Patch166: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.166 +Patch167: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.167 +Patch168: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.168 +Patch169: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.169 +Patch170: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.170 +Patch171: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.171 +Patch172: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.172 +Patch173: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.173 +Patch174: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.174 +Patch175: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.175 +Patch176: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.176 +Patch177: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.177 +Patch178: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.178 +Patch179: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.179 +Patch180: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.180 +Patch181: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.181 +Patch182: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.182 +Patch183: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.183 +Patch184: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.184 +Patch185: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.185 +Patch186: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.186 +Patch187: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.187 +Patch188: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.188 +Patch189: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.189 +Patch190: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.190 +Patch191: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.191 +Patch192: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.192 +Patch193: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.193 +Patch194: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.194 +Patch195: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.195 +Patch196: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.196 +Patch197: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.197 +Patch198: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.198 +Patch199: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.199 +Patch200: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.200 +Patch201: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.201 +Patch202: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.202 +Patch203: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.203 +Patch204: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.204 +Patch205: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.205 +Patch206: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.206 +Patch207: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.207 +Patch208: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.208 +Patch209: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.209 +Patch210: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.210 +Patch211: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.211 +Patch212: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.212 +Patch213: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.213 +Patch214: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.214 +Patch215: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.215 +Patch216: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.216 +Patch217: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.217 +Patch218: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.218 +Patch219: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.219 +Patch220: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.220 +Patch221: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.221 +Patch222: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.222 +Patch223: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.223 +Patch224: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.224 +Patch225: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.225 +Patch226: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.226 +Patch227: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.227 +Patch228: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.228 +Patch229: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.229 +Patch230: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.230 +Patch231: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.231 +Patch232: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.232 +Patch233: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.233 +Patch234: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.234 +Patch235: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.235 +Patch236: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.236 +Patch237: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.237 +Patch238: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.238 +Patch239: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.239 +Patch240: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.240 +Patch241: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.241 +Patch242: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.242 +Patch243: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.243 +Patch244: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.244 +Patch245: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.245 +Patch246: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.246 +Patch247: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.247 +Patch248: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.248 +Patch249: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.249 +Patch250: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.250 +Patch251: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.251 +Patch252: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.252 +Patch253: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.253 +Patch254: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.254 +Patch255: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.255 +Patch256: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.256 +Patch257: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.257 +Patch258: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.258 +Patch259: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.259 +Patch260: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.260 +Patch261: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.261 +Patch262: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.262 +Patch263: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.263 +Patch264: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.264 +Patch265: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.265 +Patch266: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.266 +Patch267: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.267 +Patch268: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.268 +Patch269: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.269 +Patch270: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.270 +Patch271: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.271 +Patch272: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.272 +Patch273: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.273 +Patch274: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.274 +Patch275: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.275 +Patch276: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.276 +Patch277: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.277 +Patch278: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.278 +Patch279: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.279 +Patch280: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.280 +Patch281: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.281 +Patch282: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.282 +Patch283: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.283 +Patch284: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.284 +Patch285: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.285 +Patch286: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.286 +Patch287: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.287 +Patch288: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.288 +Patch289: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.289 +Patch290: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.290 +Patch291: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.291 +Patch292: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.292 +Patch293: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.293 +Patch294: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.294 +Patch295: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.295 +Patch296: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.296 +Patch297: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.297 +Patch298: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.298 +Patch299: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.299 +Patch300: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.300 +Patch301: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.301 +Patch302: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.302 +Patch303: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.303 +Patch304: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.304 +Patch305: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.305 +Patch306: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.306 +Patch307: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.307 +Patch308: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.308 +Patch309: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.309 +Patch310: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.310 +Patch311: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.311 +Patch312: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.312 +Patch313: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.313 +Patch314: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.314 +Patch315: ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.315 -# for xchacha20 encryption -%if %{with libsodium_crypt} -BuildRequires: libsodium-devel -%endif +Patch3000: vim-7.0-syntax.patch +Patch3002: vim-7.1-nowarnings.patch +Patch3003: vim-6.1-rh3.patch +Patch3004: vim-7.0-rclocation.patch +Patch3006: vim-6.4-checkhl.patch +Patch3007: vim-7.2-fstabsyntax.patch +Patch3008: vim-7.0-warning.patch +Patch3009: vim-7.0-syncolor.patch +Patch3010: vim-7.0-specedit.patch +Patch3011: vim72-rh514717.patch +Patch3012: vim-7.2-httpfiletype-499123.patch +Patch3013: vim-7.2-elinks-parameter-518791.patch -# for lua plugin -%if "%{withlua}" == "1" -BuildRequires: lua-devel -%endif - -# for perl plugin -%if "%{withperl}" == "1" -BuildRequires: perl-devel -BuildRequires: perl-generators +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: python-devel ncurses-devel gettext perl-devel BuildRequires: perl(ExtUtils::Embed) -BuildRequires: perl(ExtUtils::ParseXS) -%endif - -# for ruby plugin -%if "%{withruby}" == "1" -BuildRequires: ruby -BuildRequires: ruby-devel -%endif - -# selinux support +BuildRequires: libacl-devel gpm-devel autoconf %if %{WITH_SELINUX} BuildRequires: libselinux-devel %endif - +%if "%{withruby}" == "1" +Buildrequires: ruby-devel ruby +%endif +%if %{desktop_file} +# for /usr/bin/desktop-file-install +Requires: desktop-file-utils +BuildRequires: desktop-file-utils >= %{desktop_file_utils_version} +%endif +Epoch: 2 %description VIM (VIsual editor iMproved) is an updated and improved version of the @@ -181,17 +418,12 @@ vi editor. Vi was the first real screen-based editor for UNIX, and is still very popular. VIM improves on vi by adding new features: multiple windows, multi-level undo, block highlighting and more. - %package common Summary: The common files needed by any version of the VIM editor -# move evim manpage to common - remove the conflict after C11S is branched -Conflicts: %{name}-X11 < 2:9.1.1706-2 -# shared files between common and minimal -Requires: %{name}-data = %{epoch}:%{version}-%{release} -Requires: %{name}-filesystem -# the hexdump binary was part of the package for long time, ship it with it -# still for convenience -Requires: xxd +Group: Applications/Editors +Conflicts: man-pages-fr < 0.9.7-14 +Conflicts: man-pages-it < 0.3.0-17 +Conflicts: man-pages-pl < 0.24-2 %description common VIM (VIsual editor iMproved) is an updated and improved version of the @@ -204,53 +436,36 @@ order to run. If you are installing vim-enhanced or vim-X11, you'll also need to install the vim-common package. +%package spell +Summary: The dictionaries for spell checking. This package is optional +Group: Applications/Editors +Requires: vim-common = %{epoch}:%{version}-%{release} + +%description spell +This subpackage contains dictionaries for vim spell checking in +many different languages. %package minimal Summary: A minimal version of the VIM editor -Provides: vi -Provides: %{_bindir}/vi -# shared files between common and minimal -Requires: %{name}-data = %{epoch}:%{version}-%{release} +Group: Applications/Editors +Provides: vi = %{version}-%{release} %description minimal VIM (VIsual editor iMproved) is an updated and improved version of the vi editor. Vi was the first real screen-based editor for UNIX, and is still very popular. VIM improves on vi by adding new features: multiple windows, multi-level undo, block highlighting and more. The -vim-minimal package includes a minimal version of VIM, providing -the commands vi, view, ex, rvi, and rview. NOTE: The online help is -only available when the vim-common package is installed. - +vim-minimal package includes a minimal version of VIM, which is +installed into /bin/vi for use when only the root partition is +present. NOTE: The online help is only available when the vim-common +package is installed. %package enhanced Summary: A version of the VIM editor which includes recent enhancements -# vim bundles libvterm, which is used during build - so we need to provide -# bundled libvterm for catching possible libvterm CVEs -Provides: bundled(libvterm) -Provides: vim -Provides: vim(plugins-supported) -Provides: %{_bindir}/mergetool -Provides: %{_bindir}/vim -Requires: vim-common = %{epoch}:%{version}-%{release} -# required for vimtutor (#395371) -Requires: which -Suggests: python3 -Suggests: python3-libs - -# suggest python3, python2, lua, ruby and perl packages because of their -# embedded functionality in Vim/GVim -%if "%{withlua}" == "1" -Suggests: lua-libs -%endif - -%if "%{withperl}" == "1" -Suggests: perl-devel -%endif - -%if "%{withruby}" == "1" -Suggests: ruby -Suggests: ruby-libs -%endif +Group: Applications/Editors +Requires: vim-common = %{epoch}:%{version}-%{release} which +Provides: vim = %{version}-%{release} +Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) %description enhanced VIM (VIsual editor iMproved) is an updated and improved version of the @@ -265,102 +480,14 @@ VIM editor which includes recently added enhancements like interpreters for the Python and Perl scripting languages. You'll also need to install the vim-common package. - -%package filesystem -Summary: VIM filesystem layout -BuildArch: noarch - -%Description filesystem -This package provides some directories which are required by other -packages that add vim files, p.e. additional syntax files or filetypes. - - -%package data -Summary: Shared data for Vi and Vim -BuildArch: noarch - -%description data -The subpackage is used for shipping files and directories, which need to be -shared between vim-minimal and vim-common packages. - - -%package -n xxd -Summary: A hex dump utility - -%description -n xxd -xxd creates a hex dump of a given file or standard input. It can also convert -a hex dump back to its original binary form. - - -%if %{with default_editor} -%package default-editor -Summary: Set vim as the default editor -BuildArch: noarch -Conflicts: system-default-editor -Provides: system-default-editor -Requires: vim-enhanced - -%description default-editor -This subpackage contains files needed to set Vim as the default editor. -%endif - -%if %{with gui} %package X11 -Summary: The VIM version of the vi editor for the X Window System - GVim -# move evim manpage to common - remove the conflict after C11S is branched -Conflicts: %{name}-common < 2:9.1.1706-2 -# devel of libICE, gtk3, libSM, libX11, libXpm and libXt are needed in buildroot -# so configure script can have correct macros enabled for GUI (#1603272) -# generic gnome toolkit for graphical support -BuildRequires: gtk3-devel -# inter-client exchange library - for X session management protocol -BuildRequires: libICE-devel -# X session management library -BuildRequires: libSM-devel -# core X11 protocol client library -BuildRequires: libX11-devel -# X Toolkit Intrinsics library - working with widgets? -BuildRequires: libXt-devel -# for testing validity of appdata file -BuildRequires: libappstream-glib -# for sound support -BuildRequires: libcanberra-devel - -Provides: gvim -Provides: vim(plugins-supported) -Provides: %{_bindir}/mergetool -Provides: %{_bindir}/gvim - -# glib2 in Fedora 40 introduced a new function, which is not used in GVim, but it is present -# in compiled gvim binary as symbol when Vim is compiled with glib2-2.79.1 -# there does not seem to be a better solution than version based requires on glib2... -# https://bugzilla.redhat.com/show_bug.cgi?id=2262371 -Requires: glib2 >= 2.79.1 -# GVIM graphics are based on GTK3 -Requires: gtk3 -# needed for icons (#226526) +Summary: The VIM version of the vi editor for the X Window System +Group: Applications/Editors +Requires: vim-common = %{epoch}:%{version}-%{release} libattr >= 2.4 gtk2 >= 2.6 +Provides: gvim = %{version}-%{release} +BuildRequires: gtk2-devel libSM-devel libXt-devel libXpm-devel +Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) Requires: hicolor-icon-theme -# for getting/setting extended attributes - they are pairs (name:value) -# from inodes (files, dirs etc.) -Requires: libattr >= 2.4 -Requires: vim-common = %{epoch}:%{version}-%{release} -Suggests: python3 -Suggests: python3-libs - -# suggest python3, python2, lua, ruby and perl packages because of their -# embedded functionality in Vim/GVim - %if "%{withlua}" == "1" -Suggests: lua-libs - %endif - - %if "%{withperl}" == "1" -Suggests: perl-devel - %endif - - %if "%{withruby}" == "1" -Suggests: ruby -Suggests: ruby-libs - %endif %description X11 VIM (VIsual editor iMproved) is an updated and improved version of the @@ -369,108 +496,392 @@ still very popular. VIM improves on vi by adding new features: multiple windows, multi-level undo, block highlighting and more. VIM-X11 is a version of the VIM editor which will run within the X Window System. If you install this package, you can run VIM as an X -application with a full GUI interface and mouse support by command gvim. +application with a full GUI interface and mouse support. Install the vim-X11 package if you'd like to try out a version of vi with graphics and mouse capabilities. You'll also need to install the vim-common package. -%endif - %prep %setup -q -b 0 -n %{vimdir} - -# use %%{__python3} macro for defining shebangs in python3 tests -sed -i -e 's,/usr/bin/python3,%{__python3},' %{PATCH6} - +%setup -q -D -b 1 -n %{vimdir} +%setup -q -D -b 2 -n %{vimdir} # fix rogue dependencies from sample code chmod -x runtime/tools/mve.awk -%patch -P 1 -p1 -b .fixkeys -%patch -P 2 -p1 -b .spec-syntax - +%patch2002 -p1 +%patch2003 -p1 +%patch2004 -p1 +%patch2010 -p1 +%if %{withhunspell} +%patch2011 -p1 +%endif perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk -%patch -P 3 -p1 -b .mantypo -%patch -P 4 -p1 -b .manpagefixes -%patch -P 5 -p1 -b .globalsyntax -%patch -P 6 -p1 -b .python-tests -%patch -P 7 -p1 -b .fips-warning -%patch -P 8 -p1 -b .copypaste +# Base patches... +# for i in `seq 1 14`; do printf "%%patch%03d -p0 \n" $i; done +%patch001 -p0 +%patch002 -p0 +%patch003 -p0 +%patch004 -p0 +%patch005 -p0 +%patch006 -p0 +%patch007 -p0 +%patch008 -p0 +%patch009 -p0 +%patch010 -p0 +%patch011 -p0 +%patch012 -p0 +%patch013 -p0 +%patch014 -p0 +%patch015 -p0 +%patch016 -p0 +%patch017 -p0 +%patch018 -p0 +%patch019 -p0 +%patch020 -p0 +%patch021 -p0 +%patch022 -p0 +%patch023 -p0 +%patch024 -p0 +%patch025 -p0 +%patch026 -p0 +%patch027 -p0 +%patch028 -p0 +%patch029 -p0 +%patch030 -p0 +%patch031 -p0 +%patch032 -p0 +%patch033 -p0 +%patch034 -p0 +%patch035 -p0 +%patch036 -p0 +%patch037 -p0 +%patch038 -p0 +%patch039 -p0 +%patch040 -p0 +%patch041 -p0 +%patch042 -p0 +%patch043 -p0 +%patch044 -p0 +%patch045 -p0 +%patch046 -p0 +%patch047 -p0 +%patch048 -p0 +%patch049 -p0 +%patch050 -p0 +%patch051 -p0 +%patch052 -p0 +%patch053 -p0 +%patch054 -p0 +%patch055 -p0 +%patch056 -p0 +%patch057 -p0 +%patch058 -p0 +%patch059 -p0 +%patch060 -p0 +%patch061 -p0 +%patch062 -p0 +%patch063 -p0 +%patch064 -p0 +%patch065 -p0 +%patch066 -p0 +%patch067 -p0 +%patch068 -p0 +%patch069 -p0 +%patch070 -p0 +%patch071 -p0 +%patch072 -p0 +%patch073 -p0 +%patch074 -p0 +%patch075 -p0 +%patch076 -p0 +%patch077 -p0 +%patch078 -p0 +%patch079 -p0 +%patch080 -p0 +%patch081 -p0 +%patch082 -p0 +%patch083 -p0 +%patch084 -p0 +%patch085 -p0 +%patch086 -p0 +%patch087 -p0 +%patch088 -p0 +%patch089 -p0 +%patch090 -p0 +%patch091 -p0 +%patch092 -p0 +%patch093 -p0 +%patch094 -p0 +%patch095 -p0 +%patch096 -p0 +%patch097 -p0 +%patch098 -p0 +%patch099 -p0 +%patch100 -p0 +%patch101 -p0 +%patch102 -p0 +%patch103 -p0 +%patch104 -p0 +%patch105 -p0 +%patch106 -p0 +%patch107 -p0 +%patch108 -p0 +%patch109 -p0 +%patch110 -p0 +%patch111 -p0 +%patch112 -p0 +%patch113 -p0 +%patch114 -p0 +%patch115 -p0 +%patch116 -p0 +%patch117 -p0 +%patch118 -p0 +%patch119 -p0 +%patch120 -p0 +%patch121 -p0 +%patch122 -p0 +%patch123 -p0 +%patch124 -p0 +%patch125 -p0 +%patch126 -p0 +%patch127 -p0 +%patch128 -p0 +%patch129 -p0 +%patch130 -p0 +%patch131 -p0 +%patch132 -p0 +%patch133 -p0 +%patch134 -p0 +%patch135 -p0 +%patch136 -p0 +%patch137 -p0 +%patch138 -p0 +%patch139 -p0 +%patch140 -p0 +%patch141 -p0 +%patch142 -p0 +%patch143 -p0 +%patch144 -p0 +%patch145 -p0 +%patch146 -p0 +%patch147 -p0 +%patch148 -p0 +%patch149 -p0 +%patch150 -p0 +%patch151 -p0 +%patch152 -p0 +%patch153 -p0 +%patch154 -p0 +%patch155 -p0 +%patch156 -p0 +%patch157 -p0 +%patch158 -p0 +%patch159 -p0 +%patch160 -p0 +%patch161 -p0 +%patch162 -p0 +%patch163 -p0 +%patch164 -p0 +%patch165 -p0 +%patch166 -p0 +%patch167 -p0 +%patch168 -p0 +%patch169 -p0 +%patch170 -p0 +%patch171 -p0 +%patch172 -p0 +%patch173 -p0 +%patch174 -p0 +%patch175 -p0 +%patch176 -p0 +%patch177 -p0 +%patch178 -p0 +%patch179 -p0 +%patch180 -p0 +%patch181 -p0 +%patch182 -p0 +%patch183 -p0 +%patch184 -p0 +%patch185 -p0 +%patch186 -p0 +%patch187 -p0 +%patch188 -p0 +%patch189 -p0 +%patch190 -p0 +%patch191 -p0 +%patch192 -p0 +%patch193 -p0 +%patch194 -p0 +%patch195 -p0 +%patch196 -p0 +%patch197 -p0 +%patch198 -p0 +%patch199 -p0 +%patch200 -p0 +%patch201 -p0 +%patch202 -p0 +%patch203 -p0 +%patch204 -p0 +%patch205 -p0 +%patch206 -p0 +%patch207 -p0 +%patch208 -p0 +%patch209 -p0 +%patch210 -p0 +%patch211 -p0 +%patch212 -p0 +%patch213 -p0 +%patch214 -p0 +%patch215 -p0 +%patch216 -p0 +%patch217 -p0 +%patch218 -p0 +%patch219 -p0 +%patch220 -p0 +%patch221 -p0 +%patch222 -p0 +%patch223 -p0 +%patch224 -p0 +%patch225 -p0 +%patch226 -p0 +%patch227 -p0 +%patch228 -p0 +%patch229 -p0 +%patch230 -p0 +%patch231 -p0 +%patch232 -p0 +%patch233 -p0 +%patch234 -p0 +%patch235 -p0 +%patch236 -p0 +%patch237 -p0 +%patch238 -p0 +%patch239 -p0 +%patch240 -p0 +%patch241 -p0 +%patch242 -p0 +%patch243 -p0 +%patch244 -p0 +%patch245 -p0 +%patch246 -p0 +%patch247 -p0 +%patch248 -p0 +%patch249 -p0 +%patch250 -p0 +%patch251 -p0 +%patch252 -p0 +%patch253 -p0 +%patch254 -p0 +%patch255 -p0 +%patch256 -p0 +%patch257 -p0 +%patch258 -p0 +%patch259 -p0 +%patch260 -p0 +%patch261 -p0 +%patch262 -p0 +%patch263 -p0 +%patch264 -p0 +%patch265 -p0 +%patch266 -p0 +%patch267 -p0 +%patch268 -p0 +%patch269 -p0 +%patch270 -p0 +%patch271 -p0 +%patch272 -p0 +%patch273 -p0 +%patch274 -p0 +%patch275 -p0 +%patch276 -p0 +%patch277 -p0 +%patch278 -p0 +%patch279 -p0 +%patch280 -p0 +%patch281 -p0 +%patch282 -p0 +%patch283 -p0 +%patch284 -p0 +%patch285 -p0 +%patch286 -p0 +%patch287 -p0 +%patch288 -p0 +%patch289 -p0 +%patch290 -p0 +%patch291 -p0 +%patch292 -p0 +%patch293 -p0 +%patch294 -p0 +%patch295 -p0 +%patch296 -p0 +%patch297 -p0 +%patch298 -p0 +%patch299 -p0 +%patch300 -p0 +%patch301 -p0 +%patch302 -p0 +%patch303 -p0 +%patch304 -p0 +%patch305 -p0 +%patch306 -p0 +%patch307 -p0 +%patch308 -p0 +%patch309 -p0 +%patch310 -p0 +%patch311 -p0 +%patch312 -p0 +%patch313 -p0 +%patch314 -p0 +%patch315 -p0 -%if %{withhunspell} -%patch -P 10000 -p1 + +# install spell files +%if %{withvimspell} +%{__tar} xjf %{SOURCE13} %endif +%patch3000 -p1 +%patch3002 -p1 +%patch3003 -p1 +%patch3004 -p1 + +%patch3006 -p1 +%patch3007 -p1 +%patch3008 -p1 +%patch3009 -p1 +%patch3010 -p1 +%patch3011 -p1 +%patch3012 -p1 + +cp -f %{SOURCE15} runtime/syntax/forth.vim +cp -f %{SOURCE16} runtime/plugin/netrwPlugin.vim +cp -f %{SOURCE17} runtime/plugin/gzip.vim +cp -f %{SOURCE18} runtime/plugin/filetype.vim +cp -f %{SOURCE19} runtime/autoload/zip.vim +cp -f %{SOURCE20} runtime/autoload/tar.vim +cp -f %{SOURCE21} runtime/autoload/netrwFileHandlers.vim +cp -f %{SOURCE22} runtime/autoload/netrw.vim +cp -f %{SOURCE23} runtime/autoload/netrwSettings.vim +%patch3013 -p1 %build cd src autoconf -# added -std=c17 because F42 uses c23 by default and dynamically loaded Ruby plugin fails to build -# with c23 due using `()` for callback arguments to be able to use callbacks with different number -# of arguments in one function -# reported upstream as https://github.com/vim/vim/issues/16575 -export CFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -std=c17" -export CXXFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -std=c17" +sed -e "s+VIMRCLOC = \$(VIMLOC)+VIMRCLOC = /etc+" Makefile > Makefile.tmp +mv -f Makefile.tmp Makefile -cp -f os_unix.h os_unix.h.save +export CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2" +export CXXFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2" -# Configure options: -# --enable-fail-if-missing - we need to fail if configure options aren't satisfied -# --with-features - for setting how big amount of features is enabled -# --enable-multibyte - enabling multibyte editing support - for editing files in languages, which one character -# cannot be represented by one byte - Asian languages, Unicode -# --disable-netbeans - disabling socket interface for integrating Vim into NetBeans IDE -# --enable-selinux - enabling selinux support -# --enable-Ninterp - enabling internal interpreter -# --with-x - yes if we want X11 support (graphical Vim for X11) -# --with-tlib - which terminal library to use -# --disable-gpm - disabling support for General Purpose Mouse - Linux mouse daemon - -perl -pi -e "s/vimrc/virc/" os_unix.h -%configure CFLAGS="${CFLAGS} -DSYS_VIMRC_FILE='\"/etc/virc\"'" \ - --prefix=%{_prefix} --with-features=tiny --with-x=no \ - --enable-multibyte \ - --disable-netbeans \ -%if %{WITH_SELINUX} - --enable-selinux \ -%else - --disable-selinux \ -%endif - --disable-pythoninterp --disable-perlinterp --disable-tclinterp \ - --with-tlib=ncurses --enable-gui=no --disable-gpm --exec-prefix=/ \ - --with-compiledby="" \ +%configure --with-features=huge --enable-pythoninterp --enable-perlinterp \ + --disable-tclinterp --with-x=yes \ + --enable-xim --enable-multibyte \ + --with-tlib=ncurses \ + --enable-gtk2-check --enable-gui=gtk2 \ + --with-compiledby="" --enable-cscope \ --with-modified-by="" \ - --enable-fips-warning \ - --enable-fail-if-missing \ - --disable-canberra \ - --without-wayland \ - --enable-year2038 \ - --disable-libsodium - -%make_build -cp vim minimal-vim -make clean - - -mv -f os_unix.h.save os_unix.h - -%configure CFLAGS="${CFLAGS} -DSYS_VIMRC_FILE='\"/etc/vimrc\"'" \ - --prefix=%{_prefix} --with-features=huge \ - --enable-python3interp=dynamic \ - --with-python3-stable-abi \ - --disable-tclinterp \ - --with-x=no \ - --enable-gui=no --exec-prefix=%{_prefix} --enable-multibyte \ - --enable-cscope --with-modified-by="" \ - --with-tlib=ncurses \ - --enable-fips-warning \ - --with-compiledby="" \ -%if %{with gpm} - --enable-gpm \ -%else - --disable-gpm \ -%endif %if "%{withnetbeans}" == "1" --enable-netbeans \ %else @@ -481,345 +892,264 @@ mv -f os_unix.h.save os_unix.h %else --disable-selinux \ %endif -%if "%{withperl}" == "1" - --enable-perlinterp=dynamic \ - --with-xsubpp=$(which xsubpp) \ -%else - --disable-perlinterp \ -%endif %if "%{withruby}" == "1" - --enable-rubyinterp=dynamic \ + --enable-rubyinterp \ %else --disable-rubyinterp \ %endif -%if "%{withlua}" == "1" - --enable-luainterp=dynamic \ -%else - --disable-luainterp \ -%endif -%if %{with libsodium_crypt} - --enable-libsodium \ -%else - --disable-libsodium \ -%endif - --enable-fail-if-missing \ - --without-wayland \ - --enable-year2038 \ - --disable-canberra -%make_build -cp vim enhanced-vim - - -%if %{with gui} -# More configure options: -# --enable-xim - enabling X Input Method - international input module for X, -# it is for multibyte languages in Vim with X -# --enable-termtruecolor - use terminal with true colors - -%configure CFLAGS="${CFLAGS} -DSYS_VIMRC_FILE='\"/etc/vimrc\"'" \ - --with-features=huge \ - --enable-python3interp=dynamic \ - --with-python3-stable-abi \ - --disable-tclinterp --with-x=yes \ - --enable-xim --enable-multibyte \ - --with-tlib=ncurses \ - --enable-gtk3-check --enable-gui=gtk3 \ - --enable-fips-warning \ - --with-compiledby="" --enable-cscope \ - --with-modified-by="" \ - %if %{with gpm} - --enable-gpm \ - %else - --disable-gpm \ - %endif - %if "%{withnetbeans}" == "1" - --enable-netbeans \ - %else - --disable-netbeans \ - %endif - %if %{WITH_SELINUX} - --enable-selinux \ - %else - --disable-selinux \ - %endif - %if "%{withperl}" == "1" - --enable-perlinterp=dynamic \ - --with-xsubpp=$(which xsubpp) \ - %else - --disable-perlinterp \ - %endif - %if "%{withruby}" == "1" - --enable-rubyinterp=dynamic \ - %else - --disable-rubyinterp \ - %endif - %if "%{withlua}" == "1" - --enable-luainterp=dynamic \ - %else - --disable-luainterp \ - %endif - %if %{with libsodium_crypt} - --enable-libsodium \ - %else - --disable-libsodium \ - %endif - --enable-fail-if-missing \ - --with-wayland \ - --enable-year2038 \ - --enable-socketserver \ - --enable-canberra - -%make_build +make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags} cp vim gvim make clean + +%configure --prefix=%{_prefix} --with-features=huge --enable-pythoninterp \ + --enable-perlinterp --disable-tclinterp --with-x=no \ + --enable-gui=no --exec-prefix=%{_prefix} --enable-multibyte \ + --enable-cscope --with-modified-by="" \ + --with-tlib=ncurses \ + --with-compiledby="" \ +%if "%{withnetbeans}" == "1" + --enable-netbeans \ +%else + --disable-netbeans \ +%endif +%if %{WITH_SELINUX} + --enable-selinux \ +%else + --disable-selinux \ +%endif +%if "%{withruby}" == "1" + --enable-rubyinterp \ +%else + --disable-rubyinterp \ %endif +make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags} +cp vim enhanced-vim +make clean + +perl -pi -e "s/help.txt/vi_help.txt/" os_unix.h ex_cmds.c +perl -pi -e "s/\/etc\/vimrc/\/etc\/virc/" os_unix.h +%configure --prefix=%{_prefix} --with-features=small --with-x=no \ + --enable-multibyte \ + --disable-netbeans \ +%if %{WITH_SELINUX} + --enable-selinux \ +%else + --disable-selinux \ +%endif + --disable-pythoninterp --disable-perlinterp --disable-tclinterp \ + --with-tlib=ncurses --enable-gui=no --disable-gpm --exec-prefix=/ \ + --with-compiledby="" \ + --with-modified-by="" + +make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} %{?_smp_mflags} %install -mkdir -p %{buildroot}/%{_bindir} -mkdir -p %{buildroot}/%{_datadir}/%{name}/vimfiles/{after,autoload,colors,compiler,doc,ftdetect,ftplugin,indent,keymap,lang,plugin,print,spell,syntax,tutor} -mkdir -p %{buildroot}/%{_datadir}/%{name}/vimfiles/after/{autoload,colors,compiler,doc,ftdetect,ftplugin,indent,keymap,lang,plugin,print,spell,syntax,tutor} -cp -f %{SOURCE7} %{buildroot}/%{_datadir}/%{name}/vimfiles/template.spec +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT/bin +mkdir -p $RPM_BUILD_ROOT/%{_bindir} +mkdir -p $RPM_BUILD_ROOT/%{_datadir}/%{name}/vimfiles/{after,autoload,colors,compiler,doc,ftdetect,ftplugin,indent,keymap,lang,plugin,print,spell,syntax,tutor} +mkdir -p $RPM_BUILD_ROOT/%{_datadir}/%{name}/vimfiles/after/{autoload,colors,compiler,doc,ftdetect,ftplugin,indent,keymap,lang,plugin,print,spell,syntax,tutor} +cp -f %{SOURCE11} . +cp -f %{SOURCE14} $RPM_BUILD_ROOT/%{_datadir}/%{name}/vimfiles/template.spec +cp runtime/doc/uganda.txt LICENSE # Those aren't Linux info files but some binary files for Amiga: rm -f README*.info + cd src -# related to the issue with `make depend`, auto/osdef.h -# has to be generated -make auto/osdef.h auto/gui_gtk_gresources.h auto/wayland/wlr-data-control-unstable-v1.h -# Adding STRIP=/bin/true, because Vim wants to strip the binaries by himself -# and put the stripped files into correct dirs. Build system (koji/brew) -# does it for us, so there is no need to do it in Vim -%make_install BINDIR=%{_bindir} STRIP=/bin/true +make install DESTDIR=$RPM_BUILD_ROOT BINDIR=/bin VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} +make installgtutorbin DESTDIR=$RPM_BUILD_ROOT BINDIR=/bin VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/%{vimdir} +mv $RPM_BUILD_ROOT/bin/xxd $RPM_BUILD_ROOT/%{_bindir}/xxd +mv $RPM_BUILD_ROOT/bin/gvimtutor $RPM_BUILD_ROOT/%{_bindir}/gvimtutor +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/{16x16,32x32,48x48,64x64}/apps +install -m755 gvim $RPM_BUILD_ROOT/%{_bindir}/gvim +install -p -m644 %{SOURCE7} \ + $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/16x16/apps/gvim.png +install -p -m644 %{SOURCE8} \ + $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps/gvim.png +install -p -m644 %{SOURCE9} \ + $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps/gvim.png +install -p -m644 %{SOURCE10} \ + $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/64x64/apps/gvim.png +install -m755 enhanced-vim $RPM_BUILD_ROOT/%{_bindir}/vim -# make install creates vim binary and view symlink, they will be wrappers -# so remove them here -rm -f %{buildroot}%{_bindir}/{vim,view} -mkdir -p %{buildroot}%{_datadir}/icons/hicolor/{16x16,32x32,48x48,64x64}/apps -mkdir -p %{buildroot}%{_libexecdir} -install -m755 minimal-vim %{buildroot}%{_libexecdir}/vi -install -m755 enhanced-vim %{buildroot}%{_bindir}/vim -install -m755 %{SOURCE12} %{buildroot}%{_bindir}/view -install -m755 %{SOURCE13} %{buildroot}%{_bindir}/vi - -%if %{with gui} -make installgtutorbin DESTDIR=%{buildroot} BINDIR=%{_bindir} -install -m755 gvim %{buildroot}%{_bindir}/gvim -install -p -m644 %{SOURCE3} \ - %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/gvim.png -install -p -m644 %{SOURCE4} \ - %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/gvim.png -install -p -m644 %{SOURCE5} \ - %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/gvim.png -install -p -m644 %{SOURCE6} \ - %{buildroot}%{_datadir}/icons/hicolor/64x64/apps/gvim.png - -# Register as an application to be visible in the software center -# -# NOTE: It would be *awesome* if this file was maintained by the upstream -# project, translated and installed into the right place during `make install`. -# -# See http://www.freedesktop.org/software/appstream/docs/ for more details. -# -mkdir -p $RPM_BUILD_ROOT%{_datadir}/metainfo -cat > $RPM_BUILD_ROOT%{_datadir}/metainfo/gvim.appdata.xml <<"EOF" - - - - - org.vim.Vim - GVim - CC0-1.0 - Vim - The VIM version of the vi editor for the X Window System - -

- Vim is an advanced text editor that seeks to provide the power of the - de-facto Unix editor 'Vi', with a more complete feature set. - It's useful whether you're already using vi or using a different editor. -

-

- Vim is a highly configurable text editor built to enable efficient text - editing. - Vim is often called a "programmer's editor," and so useful for programming - that many consider it an entire IDE. It is not just for programmers, though. - Vim is perfect for all kinds of text editing, from composing email to - editing configuration files. -

-

- We ship the current Vim stable release - %{baseversion} - with the upstream - patchlevel %{patchlevel} applied, which is combined into version %{version} - used during packaging. -

-
- - - - - - https://raw.githubusercontent.com/zdohnal/vim/zdohnal-screenshot/gvim16_9.png - - - http://www.vim.org/ - - - gvim.desktop -
-EOF - -appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/metainfo/*.appdata.xml - -# do not put gvim.1, gview.1, eview.1, rgvim and rgview here - they already contains the link, -# and changing it here will rewrite original vim.1 - bz#2392178 -for i in gex.1 vimx.1 evim.1; do - echo ".so man1/vim.1" > %{buildroot}/%{_mandir}/man1/$i -done - -echo ".so man1/vimtutor.1" > %{buildroot}/%{_mandir}/man1/gvimtutor.1 -%else -# Remove files included in X11 subpackage, but built by default: -rm %{buildroot}/%{_mandir}/man1/evim.* -rm %{buildroot}/%{_datadir}/applications/{vim,gvim}.desktop -rm %{buildroot}/%{_datadir}/icons/{hicolor,locolor}/*/apps/gvim.png -%endif - -( cd %{buildroot} - ln -sf ../..%{_libexecdir}/vi .%{_bindir}/rvi - ln -sf ../..%{_libexecdir}/vi .%{_bindir}/rview - ln -sf ../..%{_libexecdir}/vi .%{_bindir}/ex - ln -sf vim .%{_bindir}/rvim - ln -sf vim .%{_bindir}/vimdiff - perl -pi -e "s,%{buildroot},," .%{_mandir}/man1/vim.1 .%{_mandir}/man1/vimtutor.1 +( cd $RPM_BUILD_ROOT + mv ./bin/vimtutor ./%{_bindir}/vimtutor + mv ./bin/vim ./bin/vi + rm -f ./bin/rvim + ln -sf vi ./bin/ex + ln -sf vi ./bin/rvi + ln -sf vi ./bin/rview + ln -sf vi ./bin/view + ln -sf vim ./%{_bindir}/ex + ln -sf vim ./%{_bindir}/rvim + ln -sf vim ./%{_bindir}/vimdiff + perl -pi -e "s,$RPM_BUILD_ROOT,," .%{_mandir}/man1/vim.1 .%{_mandir}/man1/vimtutor.1 rm -f .%{_mandir}/man1/rvim.1 - cp -p .%{_mandir}/man1/vim.1 .%{_mandir}/man1/vi.1 - ln -sf vi.1.gz .%{_mandir}/man1/rvi.1.gz - ln -sf vi.1.gz .%{_mandir}/man1/ex.1 - ln -sf vi.1.gz .%{_mandir}/man1/view.1 - ln -sf vi.1.gz .%{_mandir}/man1/rview.1 + ln -sf vim.1.gz .%{_mandir}/man1/vi.1.gz + ln -sf vim.1.gz .%{_mandir}/man1/rvi.1.gz ln -sf vim.1.gz .%{_mandir}/man1/vimdiff.1.gz - -%if %{with gui} - ln -sf gvim ./%{_bindir}/evim - ln -sf gvim ./%{_bindir}/eview ln -sf gvim ./%{_bindir}/gview ln -sf gvim ./%{_bindir}/gex + ln -sf gvim ./%{_bindir}/evim ln -sf gvim ./%{_bindir}/gvimdiff - ln -sf gvim ./%{_bindir}/rgvim - ln -sf gvim ./%{_bindir}/rgview ln -sf gvim ./%{_bindir}/vimx - %if "%{desktop_file}" == "1" - desktop-file-install \ - --dir %{buildroot}/%{_datadir}/applications \ - %{buildroot}/%{_datadir}/applications/gvim.desktop + mkdir -p $RPM_BUILD_ROOT/%{_datadir}/applications + desktop-file-install --vendor fedora \ + --dir $RPM_BUILD_ROOT/%{_datadir}/applications \ + %{SOURCE3} # --add-category "Development;TextEditor;X-Red-Hat-Base" D\ %else mkdir -p ./%{_sysconfdir}/X11/applnk/Applications - cp %{buildroot}/%{_datadir}/applications/gvim.desktop ./%{_sysconfdir}/X11/applnk/Applications/gvim.desktop + cp %{SOURCE3} ./%{_sysconfdir}/X11/applnk/Applications/gvim.desktop %endif - -%endif - # ja_JP.ujis is obsolete, ja_JP.eucJP is recommended. ( cd ./%{_datadir}/%{name}/%{vimdir}/lang; \ ln -sf menu_ja_jp.ujis.vim menu_ja_jp.eucjp.vim ) ) +pushd $RPM_BUILD_ROOT/%{_datadir}/%{name}/%{vimdir}/tutor +mkdir conv + iconv -f CP1252 -t UTF8 tutor.ca > conv/tutor.ca + iconv -f CP1252 -t UTF8 tutor.it > conv/tutor.it + #iconv -f CP1253 -t UTF8 tutor.gr > conv/tutor.gr + iconv -f CP1252 -t UTF8 tutor.fr > conv/tutor.fr + iconv -f CP1252 -t UTF8 tutor.es > conv/tutor.es + iconv -f CP1252 -t UTF8 tutor.de > conv/tutor.de + #iconv -f CP737 -t UTF8 tutor.gr.cp737 > conv/tutor.gr.cp737 + #iconv -f EUC-JP -t UTF8 tutor.ja.euc > conv/tutor.ja.euc + #iconv -f SJIS -t UTF8 tutor.ja.sjis > conv/tutor.ja.sjis + iconv -f UTF8 -t UTF8 tutor.ja.utf-8 > conv/tutor.ja.utf-8 + iconv -f UTF8 -t UTF8 tutor.ko.utf-8 > conv/tutor.ko.utf-8 + iconv -f CP1252 -t UTF8 tutor.no > conv/tutor.no + iconv -f ISO-8859-2 -t UTF8 tutor.pl > conv/tutor.pl + iconv -f ISO-8859-2 -t UTF8 tutor.sk > conv/tutor.sk + iconv -f KOI8R -t UTF8 tutor.ru > conv/tutor.ru + iconv -f CP1252 -t UTF8 tutor.sv > conv/tutor.sv + mv -f tutor.ja.euc tutor.ja.sjis tutor.ko.euc tutor.pl.cp1250 tutor.zh.big5 tutor.ru.cp1251 tutor.zh.euc conv/ + rm -f tutor.ca tutor.de tutor.es tutor.fr tutor.gr tutor.it tutor.ja.utf-8 tutor.ko.utf-8 tutor.no tutor.pl tutor.sk tutor.ru tutor.sv +mv -f conv/* . +rmdir conv +popd + # Dependency cleanups -chmod 644 %{buildroot}/%{_datadir}/%{name}/%{vimdir}/doc/vim2html.pl \ - %{buildroot}/%{_datadir}/%{name}/%{vimdir}/tools/*.pl \ - %{buildroot}/%{_datadir}/%{name}/%{vimdir}/tools/vim132 +chmod 644 $RPM_BUILD_ROOT/%{_datadir}/%{name}/%{vimdir}/doc/vim2html.pl \ + $RPM_BUILD_ROOT/%{_datadir}/%{name}/%{vimdir}/tools/*.pl \ + $RPM_BUILD_ROOT/%{_datadir}/%{name}/%{vimdir}/tools/vim132 chmod 644 ../runtime/doc/vim2html.pl -mkdir -p %{buildroot}%{_sysconfdir} -install -p -m644 %{SOURCE1} %{buildroot}%{_sysconfdir}/virc -install -p -m644 %{SOURCE2} %{buildroot}%{_sysconfdir}/vimrc - -mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d/ -install -p -m644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/macros.d/ - +mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/profile.d +cat >$RPM_BUILD_ROOT/%{_sysconfdir}/profile.d/vim.sh </dev/null 2>&1 || alias vi=vim +fi +EOF +cat >$RPM_BUILD_ROOT/%{_sysconfdir}/profile.d/vim.csh < tags.new; mv -f tags.new tags +cat >> tags << EOF +vi_help.txt vi_help.txt /*vi_help.txt* +vi-author.txt vi_help.txt /*vi-author* +vi-Bram.txt vi_help.txt /*vi-Bram* +vi-Moolenaar.txt vi_help.txt /*vi-Moolenaar* +vi-credits.txt vi_help.txt /*vi-credits* +EOF +LANG=C sort tags > tags.tmp; mv tags.tmp tags + ) (cd ../runtime; rm -rf doc; ln -svf ../../vim/%{vimdir}/doc docs;) -rm -f %{buildroot}/%{_datadir}/vim/%{vimdir}/macros/maze/maze*.c -rm -rf %{buildroot}/%{_datadir}/vim/%{vimdir}/tools -rm -rf %{buildroot}/%{_datadir}/vim/%{vimdir}/doc/vim2html.pl -rm -f %{buildroot}/%{_datadir}/vim/%{vimdir}/tutor/tutor.gr.utf-8~ +rm -f $RPM_BUILD_ROOT/%{_datadir}/vim/%{vimdir}/macros/maze/maze*.c +rm -rf $RPM_BUILD_ROOT/%{_datadir}/vim/%{vimdir}/tools +rm -rf $RPM_BUILD_ROOT/%{_datadir}/vim/%{vimdir}/doc/vim2html.pl +rm -f $RPM_BUILD_ROOT/%{_datadir}/vim/%{vimdir}/tutor/tutor.gr.utf-8~ +( cd $RPM_BUILD_ROOT/%{_mandir} + for i in `find ??/ -type f`; do + bi=`basename $i` + iconv -f latin1 -t UTF8 $i > $RPM_BUILD_ROOT/$bi + mv -f $RPM_BUILD_ROOT/$bi $i + done +) # Remove not UTF-8 manpages -for i in pl.ISO8859-2 it.ISO8859-1 ru.KOI8-R fr.ISO8859-1 da.ISO8859-1 de.ISO8859-1 tr.ISO8859-9; do - rm -rf %{buildroot}/%{_mandir}/$i +for i in pl.ISO8859-2 it.ISO8859-1 ru.KOI8-R fr.ISO8859-1; do + rm -rf $RPM_BUILD_ROOT/%{_mandir}/$i done # use common man1/ru directory -mv %{buildroot}/%{_mandir}/ru.UTF-8 %{buildroot}/%{_mandir}/ru +mv $RPM_BUILD_ROOT/%{_mandir}/ru.UTF-8 $RPM_BUILD_ROOT/%{_mandir}/ru # Remove duplicate man pages -for i in fr.UTF-8 it.UTF-8 pl.UTF-8 da.UTF-8 de.UTF-8 tr.UTF-8; do - rm -rf %{buildroot}/%{_mandir}/$i +for i in fr.UTF-8 it.UTF-8 pl.UTF-8; do + rm -rf $RPM_BUILD_ROOT/%{_mandir}/$i done -# Install symlink for rvim man page -echo ".so man1/vim.1" > %{buildroot}/%{_mandir}/man1/rvim.1 +for i in rvim.1 gvim.1 gvimdiff.1; do + echo ".so man1/vim.1" > $RPM_BUILD_ROOT/%{_mandir}/man1/$i +done -mkdir -p %{buildroot}/%{_mandir}/man5 -echo ".so man1/vim.1" > %{buildroot}/%{_mandir}/man5/vimrc.5 -echo ".so man1/vi.1" > %{buildroot}/%{_mandir}/man5/virc.5 -touch %{buildroot}/%{_datadir}/%{name}/vimfiles/doc/tags +%post X11 +touch --no-create %{_datadir}/icons/hicolor +if [ -x /%{_bindir}/gtk-update-icon-cache ]; then + gtk-update-icon-cache --ignore-theme-index -q %{_datadir}/icons/hicolor +fi +update-desktop-database &> /dev/null ||: -# upstream now tries to install LICENSE and README into VIMDIR -# but we ship them in licensedir and docdir, so we remove the dupes -# from VIMDIR -rm %{buildroot}%{_datadir}/%{name}/%{vimdir}/LICENSE -rm %{buildroot}%{_datadir}/%{name}/%{vimdir}/README.txt +%postun X11 +touch --no-create %{_datadir}/icons/hicolor +if [ -x /%{_bindir}/gtk-update-icon-cache ]; then + gtk-update-icon-cache --ignore-theme-index -q %{_datadir}/icons/hicolor +fi +update-desktop-database &> /dev/null ||: -# if Vim isn't built for Fedora, use redhat augroup -%if 0%{?rhel} >= 7 -sed -i -e "s/augroup fedora/augroup redhat/" %{buildroot}/%{_sysconfdir}/vimrc -sed -i -e "s/augroup fedora/augroup redhat/" %{buildroot}/%{_sysconfdir}/virc -%endif - -%if %{with default_editor} -mkdir -p %{buildroot}/%{_sysconfdir}/profile.d -install -p -m644 %{SOURCE9} %{buildroot}/%{_sysconfdir}/profile.d/vim-default-editor.sh -install -p -m644 %{SOURCE10} %{buildroot}/%{_sysconfdir}/profile.d/vim-default-editor.csh -mkdir -p %{buildroot}/%{_datadir}/fish/vendor_conf.d/ -install -p -m644 %{SOURCE11} %{buildroot}/%{_datadir}/fish/vendor_conf.d/vim-default-editor.fish -mkdir -p %{buildroot}/%{_datadir}/fish/vendor_functions.d/ -%endif - - -# Refresh documentation helptags -%transfiletriggerin common -- %{_datadir}/%{name}/vimfiles/doc -%{_bindir}/vim -c ":helptags %{_datadir}/%{name}/vimfiles/doc" -c :q &> /dev/null || : - -%transfiletriggerpostun common -- %{_datadir}/%{name}/vimfiles/doc -> %{_datadir}/%{name}/vimfiles/doc/tags || : -%{_bindir}/vim -c ":helptags %{_datadir}/%{name}/vimfiles/doc" -c :q &> /dev/null || : +%clean +rm -rf $RPM_BUILD_ROOT %files common +%defattr(-,root,root) %config(noreplace) %{_sysconfdir}/vimrc -%{!?_licensedir:%global license %%doc} -%doc README* +%doc README* LICENSE %doc runtime/docs +%doc Changelog.rpm +%dir %{_datadir}/%{name} +%dir %{_datadir}/%{name}/%{vimdir} +%dir %{_datadir}/%{name}/vimfiles +%dir %{_datadir}/%{name}/vimfiles/after +%dir %{_datadir}/%{name}/vimfiles/after/* +%dir %{_datadir}/%{name}/vimfiles/autoload +%dir %{_datadir}/%{name}/vimfiles/colors +%dir %{_datadir}/%{name}/vimfiles/compiler +%dir %{_datadir}/%{name}/vimfiles/doc +%dir %{_datadir}/%{name}/vimfiles/ftdetect +%dir %{_datadir}/%{name}/vimfiles/ftplugin +%dir %{_datadir}/%{name}/vimfiles/indent +%dir %{_datadir}/%{name}/vimfiles/keymap +%dir %{_datadir}/%{name}/vimfiles/lang +%dir %{_datadir}/%{name}/vimfiles/plugin +%dir %{_datadir}/%{name}/vimfiles/print +%dir %{_datadir}/%{name}/vimfiles/spell +%dir %{_datadir}/%{name}/vimfiles/syntax +%dir %{_datadir}/%{name}/vimfiles/tutor +%{_datadir}/%{name}/vimfiles/template.spec %{_datadir}/%{name}/%{vimdir}/autoload %{_datadir}/%{name}/%{vimdir}/colors %{_datadir}/%{name}/%{vimdir}/compiler -%{_datadir}/%{name}/%{vimdir}/pack %{_datadir}/%{name}/%{vimdir}/doc %{_datadir}/%{name}/%{vimdir}/*.vim -%exclude %{_datadir}/%{name}/%{vimdir}/defaults.vim %{_datadir}/%{name}/%{vimdir}/ftplugin -%{_datadir}/%{name}/%{vimdir}/import/dist/vimhelp.vim -%{_datadir}/%{name}/%{vimdir}/import/dist/vimhighlight.vim %{_datadir}/%{name}/%{vimdir}/indent %{_datadir}/%{name}/%{vimdir}/keymap %{_datadir}/%{name}/%{vimdir}/lang/*.vim @@ -830,12 +1160,12 @@ mkdir -p %{buildroot}/%{_datadir}/fish/vendor_functions.d/ %{_datadir}/%{name}/%{vimdir}/print %{_datadir}/%{name}/%{vimdir}/syntax %{_datadir}/%{name}/%{vimdir}/tutor +%if ! %{withvimspell} %{_datadir}/%{name}/%{vimdir}/spell +%endif %lang(af) %{_datadir}/%{name}/%{vimdir}/lang/af %lang(ca) %{_datadir}/%{name}/%{vimdir}/lang/ca %lang(cs) %{_datadir}/%{name}/%{vimdir}/lang/cs -%lang(cs.cp1250) %{_datadir}/%{name}/%{vimdir}/lang/cs.cp1250 -%lang(da) %{_datadir}/%{name}/%{vimdir}/lang/da %lang(de) %{_datadir}/%{name}/%{vimdir}/lang/de %lang(en_GB) %{_datadir}/%{name}/%{vimdir}/lang/en_GB %lang(eo) %{_datadir}/%{name}/%{vimdir}/lang/eo @@ -843,3091 +1173,224 @@ mkdir -p %{buildroot}/%{_datadir}/fish/vendor_functions.d/ %lang(fi) %{_datadir}/%{name}/%{vimdir}/lang/fi %lang(fr) %{_datadir}/%{name}/%{vimdir}/lang/fr %lang(ga) %{_datadir}/%{name}/%{vimdir}/lang/ga -%lang(hu) %{_datadir}/%{name}/%{vimdir}/lang/hu -%lang(hy) %{_datadir}/%{name}/%{vimdir}/lang/hy %lang(it) %{_datadir}/%{name}/%{vimdir}/lang/it %lang(ja) %{_datadir}/%{name}/%{vimdir}/lang/ja -%lang(ja.euc-jp) %{_datadir}/%{name}/%{vimdir}/lang/ja.euc-jp -%lang(ja.sjis) %{_datadir}/%{name}/%{vimdir}/lang/ja.sjis %lang(ko) %{_datadir}/%{name}/%{vimdir}/lang/ko -%lang(ko) %{_datadir}/%{name}/%{vimdir}/lang/ko.UTF-8 -%lang(lv) %{_datadir}/%{name}/%{vimdir}/lang/lv -%lang(nb) %{_datadir}/%{name}/%{vimdir}/lang/nb -%lang(nl) %{_datadir}/%{name}/%{vimdir}/lang/nl %lang(no) %{_datadir}/%{name}/%{vimdir}/lang/no %lang(pl) %{_datadir}/%{name}/%{vimdir}/lang/pl -%lang(pl.UTF-8) %{_datadir}/%{name}/%{vimdir}/lang/pl.UTF-8 -%lang(pl.cp1250) %{_datadir}/%{name}/%{vimdir}/lang/pl.cp1250 %lang(pt_BR) %{_datadir}/%{name}/%{vimdir}/lang/pt_BR %lang(ru) %{_datadir}/%{name}/%{vimdir}/lang/ru -%lang(ru.cp1251) %{_datadir}/%{name}/%{vimdir}/lang/ru.cp1251 %lang(sk) %{_datadir}/%{name}/%{vimdir}/lang/sk -%lang(sk.cp1250) %{_datadir}/%{name}/%{vimdir}/lang/sk.cp1250 -%lang(sr) %{_datadir}/%{name}/%{vimdir}/lang/sr %lang(sv) %{_datadir}/%{name}/%{vimdir}/lang/sv -%lang(tr) %{_datadir}/%{name}/%{vimdir}/lang/tr %lang(uk) %{_datadir}/%{name}/%{vimdir}/lang/uk -%lang(uk.cp1251) %{_datadir}/%{name}/%{vimdir}/lang/uk.cp1251 %lang(vi) %{_datadir}/%{name}/%{vimdir}/lang/vi %lang(zh_CN) %{_datadir}/%{name}/%{vimdir}/lang/zh_CN -%lang(zh_CN.cp936) %{_datadir}/%{name}/%{vimdir}/lang/zh_CN.cp936 %lang(zh_TW) %{_datadir}/%{name}/%{vimdir}/lang/zh_TW %lang(zh_CN.UTF-8) %{_datadir}/%{name}/%{vimdir}/lang/zh_CN.UTF-8 %lang(zh_TW.UTF-8) %{_datadir}/%{name}/%{vimdir}/lang/zh_TW.UTF-8 -%{_mandir}/man1/rvim.* +/%{_bindir}/xxd %{_mandir}/man1/vim.* -%{_mandir}/man1/vimdiff.* -%{_mandir}/man1/vimtutor.* -%{_mandir}/man5/vimrc.* - -%if %{with gui} -%{_mandir}/man1/eview.* -%{_mandir}/man1/evim.* -%{_mandir}/man1/gex.* -%{_mandir}/man1/gview.* -%{_mandir}/man1/gvim* -%{_mandir}/man1/rgvim.* -%{_mandir}/man1/rgview.* -%{_mandir}/man1/vimx.* -%endif - -%lang(fr) %{_mandir}/fr/man1/* -%lang(da) %{_mandir}/da/man1/* -%lang(de) %{_mandir}/de/man1/* -%lang(it) %{_mandir}/it/man1/* -%lang(ja) %{_mandir}/ja/man1/* -%lang(pl) %{_mandir}/pl/man1/* -%lang(ru) %{_mandir}/ru/man1/* -%lang(tr) %{_mandir}/tr/man1/* - -%files minimal -%config(noreplace) %{_sysconfdir}/virc -%{_bindir}/ex -%{_bindir}/rvi -%{_bindir}/rview -%{_bindir}/vi -%{_bindir}/view -%{_libexecdir}/vi -%{_mandir}/man1/vi.* %{_mandir}/man1/ex.* +%{_mandir}/man1/vi.* +%{_mandir}/man1/view.* %{_mandir}/man1/rvi.* %{_mandir}/man1/rview.* -%{_mandir}/man1/view.* -%{_mandir}/man5/virc.* +%{_mandir}/man1/xxd.* +%lang(fr) %{_mandir}/fr/man1/* +%lang(it) %{_mandir}/it/man1/* +%lang(pl) %{_mandir}/pl/man1/* +%lang(ru) %{_mandir}/ru/man1/* + +%if %{withvimspell} +%files spell +%defattr(-,root,root) +%dir %{_datadir}/%{name}/%{vimdir}/spell +%{_datadir}/%{name}/vim70/spell/cleanadd.vim +%lang(af) %{_datadir}/%{name}/%{vimdir}/spell/af.* +%lang(am) %{_datadir}/%{name}/%{vimdir}/spell/am.* +%lang(bg) %{_datadir}/%{name}/%{vimdir}/spell/bg.* +%lang(ca) %{_datadir}/%{name}/%{vimdir}/spell/ca.* +%lang(cs) %{_datadir}/%{name}/%{vimdir}/spell/cs.* +%lang(cy) %{_datadir}/%{name}/%{vimdir}/spell/cy.* +%lang(da) %{_datadir}/%{name}/%{vimdir}/spell/da.* +%lang(de) %{_datadir}/%{name}/%{vimdir}/spell/de.* +%lang(el) %{_datadir}/%{name}/%{vimdir}/spell/el.* +%lang(en) %{_datadir}/%{name}/%{vimdir}/spell/en.* +%lang(eo) %{_datadir}/%{name}/%{vimdir}/spell/eo.* +%lang(es) %{_datadir}/%{name}/%{vimdir}/spell/es.* +%lang(fo) %{_datadir}/%{name}/%{vimdir}/spell/fo.* +%lang(fr) %{_datadir}/%{name}/%{vimdir}/spell/fr.* +%lang(ga) %{_datadir}/%{name}/%{vimdir}/spell/ga.* +%lang(gd) %{_datadir}/%{name}/%{vimdir}/spell/gd.* +%lang(gl) %{_datadir}/%{name}/%{vimdir}/spell/gl.* +%lang(he) %{_datadir}/%{name}/%{vimdir}/spell/he.* +%lang(hr) %{_datadir}/%{name}/%{vimdir}/spell/hr.* +%lang(hu) %{_datadir}/%{name}/%{vimdir}/spell/hu.* +%lang(id) %{_datadir}/%{name}/%{vimdir}/spell/id.* +%lang(it) %{_datadir}/%{name}/%{vimdir}/spell/it.* +%lang(ku) %{_datadir}/%{name}/%{vimdir}/spell/ku.* +%lang(la) %{_datadir}/%{name}/%{vimdir}/spell/la.* +%lang(lt) %{_datadir}/%{name}/%{vimdir}/spell/lt.* +%lang(lv) %{_datadir}/%{name}/%{vimdir}/spell/lv.* +%lang(mg) %{_datadir}/%{name}/%{vimdir}/spell/mg.* +%lang(mi) %{_datadir}/%{name}/%{vimdir}/spell/mi.* +%lang(ms) %{_datadir}/%{name}/%{vimdir}/spell/ms.* +%lang(nb) %{_datadir}/%{name}/%{vimdir}/spell/nb.* +%lang(nl) %{_datadir}/%{name}/%{vimdir}/spell/nl.* +%lang(nn) %{_datadir}/%{name}/%{vimdir}/spell/nn.* +%lang(ny) %{_datadir}/%{name}/%{vimdir}/spell/ny.* +%lang(pl) %{_datadir}/%{name}/%{vimdir}/spell/pl.* +%lang(pt) %{_datadir}/%{name}/%{vimdir}/spell/pt.* +%lang(ro) %{_datadir}/%{name}/%{vimdir}/spell/ro.* +%lang(ru) %{_datadir}/%{name}/%{vimdir}/spell/ru.* +%lang(rw) %{_datadir}/%{name}/%{vimdir}/spell/rw.* +%lang(sk) %{_datadir}/%{name}/%{vimdir}/spell/sk.* +%lang(sl) %{_datadir}/%{name}/%{vimdir}/spell/sl.* +%lang(sv) %{_datadir}/%{name}/%{vimdir}/spell/sv.* +%lang(sw) %{_datadir}/%{name}/%{vimdir}/spell/sw.* +%lang(tet) %{_datadir}/%{name}/%{vimdir}/spell/tet.* +%lang(th) %{_datadir}/%{name}/%{vimdir}/spell/th.* +%lang(tl) %{_datadir}/%{name}/%{vimdir}/spell/tl.* +%lang(tn) %{_datadir}/%{name}/%{vimdir}/spell/tn.* +%lang(uk) %{_datadir}/%{name}/%{vimdir}/spell/uk.* +%lang(yi) %{_datadir}/%{name}/%{vimdir}/spell/yi.* +%lang(yi-tr) %{_datadir}/%{name}/%{vimdir}/spell/yi-tr.* +%lang(zu) %{_datadir}/%{name}/%{vimdir}/spell/zu.* +%endif + +%files minimal +%defattr(-,root,root) +%config(noreplace) %{_sysconfdir}/virc +/bin/ex +/bin/vi +/bin/view +/bin/rvi +/bin/rview %files enhanced -%{_bindir}/rvim +%defattr(-,root,root) %{_bindir}/vim +%{_bindir}/rvim %{_bindir}/vimdiff +%{_bindir}/ex %{_bindir}/vimtutor +%config(noreplace) %{_sysconfdir}/profile.d/vim.* +%{_mandir}/man1/rvim.* +%{_mandir}/man1/vimdiff.* +%{_mandir}/man1/vimtutor.* -%files filesystem -%{_rpmconfigdir}/macros.d/macros.vim -%dir %{_datadir}/%{name}/vimfiles/after -%dir %{_datadir}/%{name}/vimfiles/after/* -%dir %{_datadir}/%{name}/vimfiles/autoload -%dir %{_datadir}/%{name}/vimfiles/colors -%dir %{_datadir}/%{name}/vimfiles/compiler -%dir %{_datadir}/%{name}/vimfiles/doc -%ghost %{_datadir}/%{name}/vimfiles/doc/tags -%dir %{_datadir}/%{name}/vimfiles/ftdetect -%dir %{_datadir}/%{name}/vimfiles/ftplugin -%dir %{_datadir}/%{name}/%{vimdir}/import -%dir %{_datadir}/%{name}/%{vimdir}/import/dist -%dir %{_datadir}/%{name}/vimfiles/indent -%dir %{_datadir}/%{name}/vimfiles/keymap -%dir %{_datadir}/%{name}/vimfiles/lang -%dir %{_datadir}/%{name}/vimfiles/plugin -%dir %{_datadir}/%{name}/vimfiles/print -%dir %{_datadir}/%{name}/vimfiles/spell -%dir %{_datadir}/%{name}/vimfiles/syntax -%dir %{_datadir}/%{name}/vimfiles/tutor - -%if %{with gui} %files X11 - %if "%{desktop_file}" == "1" -%{_datadir}/metainfo/*.appdata.xml +%defattr(-,root,root) +%if "%{desktop_file}" == "1" /%{_datadir}/applications/* -%exclude /%{_datadir}/applications/vim.desktop - %else +%else /%{_sysconfdir}/X11/applnk/*/gvim.desktop - %endif +%endif %{_bindir}/gvimtutor %{_bindir}/gvim %{_bindir}/gvimdiff %{_bindir}/gview %{_bindir}/gex -%{_bindir}/vimtutor %{_bindir}/vimx %{_bindir}/evim -%{_bindir}/eview -%{_bindir}/rgvim -%{_bindir}/rgview -%dir %{_datadir}/icons/hicolor -%dir %{_datadir}/icons/hicolor/* -%dir %{_datadir}/icons/hicolor/*/apps +%{_mandir}/man1/evim.* +%{_mandir}/man1/gvim* %{_datadir}/icons/hicolor/*/apps/* -%dir %{_datadir}/icons/locolor -%dir %{_datadir}/icons/locolor/* -%dir %{_datadir}/icons/locolor/*/apps -%{_datadir}/icons/locolor/*/apps/* -%endif - -%files data -%license LICENSE -%dir %{_datadir}/%{name} -%dir %{_datadir}/%{name}/%{vimdir} -%{_datadir}/%{name}/%{vimdir}/defaults.vim -%dir %{_datadir}/%{name}/vimfiles -%{_datadir}/%{name}/vimfiles/template.spec - -%if %{with default_editor} -%files default-editor -%dir %{_datadir}/fish/vendor_conf.d -%{_datadir}/fish/vendor_conf.d/vim-default-editor.fish -%config(noreplace) %{_sysconfdir}/profile.d/vim-default-editor.* -%endif - -%files -n xxd -%license LICENSE -%{_bindir}/xxd -%{_mandir}/man1/xxd.* - %changelog -* Fri Jan 09 2026 Zdenek Dohnal - 2:9.1.2068-1 -- patchlevel 2068 +* Tue Apr 20 2010 Karsten Hopp 7.2.%{nil}315-1 +- fix rvim manpage (#583180) -* Fri Dec 19 2025 Zdenek Dohnal - 2:9.1.1999-1 -- patchlevel 1999 +* Wed Dec 03 2009 Karsten Hopp 7.2.315-1 +- patchlevel 315 +- fix vimrc location in man page (#456992) +- correct syntax highlighting of httpd config files in /etc/httpd (#499123) +- Buildrequire ruby, ruby-devel (#503872) +- Remove check for static gravity (#510307) +- sort tags file (#517725) +- use one gvim to open multiple file selections from nautilus (#519265) +- use elinks -source instead of elinks -dump (#518791) +- add ext4 keyword to /etc/fstab syntax highlighting (#498290) -* Fri Dec 12 2025 Zdenek Dohnal - 2:9.1.1972-1 -- patchlevel 1972 +* Mon Nov 09 2009 Karsten Hopp 7.2.284-1 +- patchlevel 284 -* Fri Dec 05 2025 Zdenek Dohnal - 2:9.1.1952-1 -- patchlevel 1952 +* Thu Aug 20 2009 Karsten Hopp 7.2.245-3 +- change range of system ids in /etc/profile.d/vim/* (#518555) -* Fri Nov 14 2025 Zdenek Dohnal - 2:9.1.1914-1 -- patchlevel 1914 +* Mon Aug 03 2009 Karsten Hopp 7.2.245-2 +- add fix for glibc fortify segfault (#514717, Adam Tkac) -* Fri Oct 31 2025 Zdenek Dohnal - 2:9.1.1888-1 -- patchlevel 1888 +* Sat Aug 01 2009 Karsten Hopp 7.2.245-1 +- add 97 upstream patches to get to patchlevel 245 -* Fri Oct 17 2025 Zdenek Dohnal - 2:9.1.1863-1 -- patchlevel 1863 +* Sun Jul 26 2009 Fedora Release Engineering - 2:7.2.148-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild -* Fri Oct 10 2025 Zdenek Dohnal - 2:9.1.1845-1 -- patchlevel 1845 +* Fri Mar 27 2009 Karsten Hopp 7.2.148-1 +- patchlevel 148, fixes #461417 -* Fri Oct 03 2025 Zdenek Dohnal - 2:9.1.1818-1 -- patchlevel 1818 +* Tue Mar 10 2009 Karsten Hopp 7.2.132-1 +- patchlevel 132, fixes accesses to freed memory -* Mon Sep 29 2025 Zdenek Dohnal - 2:9.1.1775-2 -- remove XPM support - GVim icons work without it - -* Fri Sep 19 2025 Zdenek Dohnal - 2:9.1.1775-1 -- patchlevel 1775 - -* Wed Sep 10 2025 Zdenek Dohnal - 2:9.1.1723-2 -- Restore lost --remote-tab... functionality on wayland (fedora#2393716) - -* Mon Sep 01 2025 Zdenek Dohnal - 2:9.1.1723-1 -- patchlevel 1723 - -* Mon Sep 01 2025 Zdenek Dohnal - 2:9.1.1706-2 -- broken /usr/bin/ex symlink in vim-9.1.1706-1.fc42 (fedora#2392249) -- vim-common has broken manpages (fedora#2392178) - -* Fri Aug 29 2025 Zdenek Dohnal - 2:9.1.1706-1 -- patchlevel 1706 - -* Mon Aug 11 2025 Zdenek Dohnal - 2:9.1.1623-1 -- patchlevel 1623 - -* Fri Aug 01 2025 Zdenek Dohnal - 2:9.1.1591-1 -- patchlevel 1591 - -* Fri Jul 25 2025 Fedora Release Engineering - 2:9.1.1552-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Wed Jul 16 2025 Zdenek Dohnal - 2:9.1.1552-1 -- patchlevel 1552 - -* Mon Jul 14 2025 Zdenek Dohnal - 2:9.1.1537-2 -- 2379759 - remove wayland-libs from vim and vi (fedora#2379759) - -* Fri Jul 11 2025 Zdenek Dohnal - 2:9.1.1537-1 -- patchlevel 1537 - -* Fri Jun 27 2025 Zdenek Dohnal - 2:9.1.1484-1 -- patchlevel 1484 - -* Thu Jun 19 2025 Zdenek Dohnal - 2:9.1.1435-2 -- FTBFS with Python 3.14 (fedora#2373314) - -* Fri Jun 06 2025 Zdenek Dohnal - 2:9.1.1435-1 -- patchlevel 1435 - -* Fri May 30 2025 Zdenek Dohnal - 2:9.1.1418-1 -- patchlevel 1418 - -* Fri Apr 11 2025 Zdenek Dohnal - 2:9.1.1291-1 -- patchlevel 1291 - -* Fri Apr 04 2025 Zdenek Dohnal - 2:9.1.1275-1 -- patchlevel 1275 - -* Fri Mar 21 2025 Zdenek Dohnal - 2:9.1.1227-1 -- patchlevel 1227 - -* Fri Mar 14 2025 Zdenek Dohnal - 2:9.1.1202-1 -- patchlevel 1202 - -* Fri Mar 07 2025 Zdenek Dohnal - 2:9.1.1179-1 -- patchlevel 1179 - -* Tue Mar 04 2025 Zdenek Dohnal - 2:9.1.1169-1 -- patchlevel 1169 - -* Wed Feb 19 2025 Zdenek Dohnal - 2:9.1.1122-1 -- patchlevel 1122 - -* Fri Feb 07 2025 Zdenek Dohnal - 2:9.1.1081-1 -- patchlevel 1081 - -* Mon Feb 03 2025 Zdenek Dohnal - 2:9.1.1000-2 -- Fix FTBFS (fedora#2341508) - -* Sun Jan 19 2025 Fedora Release Engineering - 2:9.1.1000-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Jan 10 2025 Zdenek Dohnal - 2:9.1.1000-1 -- patchlevel 1000 - -* Fri Jan 03 2025 Zdenek Dohnal - 2:9.1.984-1 -- patchlevel 984 - -* Fri Dec 13 2024 Zdenek Dohnal - 2:9.1.919-1 -- patchlevel 919 - -* Fri Dec 06 2024 Zdenek Dohnal - 2:9.1.906-1 -- patchlevel 906 - -* Fri Nov 29 2024 Zdenek Dohnal - 2:9.1.895-1 -- patchlevel 895 - -* Fri Nov 15 2024 Zdenek Dohnal - 2:9.1.866-1 -- patchlevel 866 - -* Fri Nov 01 2024 Zdenek Dohnal - 2:9.1.825-1 -- patchlevel 825 - -* Tue Oct 15 2024 Zdenek Dohnal - 2:9.1.785-1 -- patchlevel 785 - -* Fri Sep 20 2024 Zdenek Dohnal - 2:9.1.737-1 -- patchlevel 737 (fedora#2311860) - -* Fri Sep 06 2024 Zdenek Dohnal - 2:9.1.719-1 -- patchlevel 719 - -* Fri Aug 30 2024 Zdenek Dohnal - 2:9.1.703-1 -- patchlevel 703 - -* Mon Aug 12 2024 Zdenek Dohnal - 2:9.1.672-1 -- patchlevel 672 - -* Fri Aug 09 2024 Zdenek Dohnal - 2:9.1.660-2 -- 2303669 - vim in rawhide (41) can't load python library - -* Mon Aug 05 2024 Zdenek Dohnal - 2:9.1.660-1 -- patchlevel 660 - -* Fri Jul 26 2024 Benjamin Gilbert - 2:9.1.571-3 -- Require gdk-pixbuf2-modules-extra on F41+ -X11 for XPM loading (rhbz#2277751) - -* Sat Jul 20 2024 Fedora Release Engineering - 2:9.1.571-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jul 12 2024 Zdenek Dohnal - 2:9.1.571-1 -- patchlevel 571 - -* Fri Jul 12 2024 Zdenek Dohnal - 2:9.1.544-2 -- fix upstream-scripttests in CI - new test needs our downstream 'set mouse=a' to pass - -* Mon Jul 08 2024 Zdenek Dohnal - 2:9.1.544-1 -- patchlevel 544 - -* Fri May 31 2024 Zdenek Dohnal - 2:9.1.452-1 -- patchlevel 452 - -* Mon May 06 2024 Zdenek Dohnal - 2:9.1.393-1 -- patchlevel 393 - -* Fri Apr 19 2024 Zdenek Dohnal - 2:9.1.354-1 -- patchlevel 354 - -* Fri Apr 12 2024 Zdenek Dohnal - 2:9.1.309-1 -- patchlevel 309 - -* Fri Apr 05 2024 Zdenek Dohnal - 2:9.1.264-1 -- patchlevel 264 - -* Tue Apr 02 2024 Zdenek Dohnal - 2:9.1.252-1 -- patchlevel 252 - -* Fri Mar 15 2024 Zdenek Dohnal - 2:9.1.181-1 -- patchlevel 181 - -* Fri Mar 08 2024 Zdenek Dohnal - 2:9.1.158-1 -- patchlevel 158 - -* Fri Feb 16 2024 Zdenek Dohnal - 2:9.1.113-1 -- patchlevel 113 - -* Fri Feb 09 2024 Zdenek Dohnal - 2:9.1.083-1 -- patchlevel 083 - -* Mon Feb 05 2024 Zdenek Dohnal - 2:9.1.076-2 -- enable building without GPM support - build with GPM in Fedora -- 2262371 - gvim: symbol lookup error: gvim: undefined symbol: g_once_init_enter_pointer - -* Mon Feb 05 2024 Zdenek Dohnal - 2:9.1.076-1 -- patchlevel 076 - -* Sat Jan 27 2024 Fedora Release Engineering - 2:9.1.031-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Tue Jan 16 2024 Zdenek Dohnal - 2:9.1.031-1 -- patchlevel 031 - -* Mon Jan 08 2024 Zdenek Dohnal - 2:9.1.016-1 -- patchlevel 016 - -* Tue Jan 02 2024 Zdenek Dohnal - 2:9.0.2190-1 -- patchlevel 2190 - -* Fri Dec 15 2023 Zdenek Dohnal - 2:9.0.2167-1 -- patchlevel 2167 - -* Fri Dec 08 2023 Zdenek Dohnal - 2:9.0.2153-1 -- patchlevel 2153 - -* Wed Nov 22 2023 Zdenek Dohnal - 2:9.0.2120-1 -- patchlevel 2120 - -* Thu Nov 16 2023 Zdenek Dohnal - 2:9.0.2105-1 -- patchlevel 2105 - -* Wed Nov 01 2023 Zdenek Dohnal - 2:9.0.2081-1 -- patchlevel 2081 - -* Wed Oct 18 2023 Zdenek Dohnal - 2:9.0.2048-1 -- patchlevel 2048 - -* Thu Oct 05 2023 Remi Collet - 2:9.0.1984-2 -- rebuild for new libsodium - -* Thu Oct 05 2023 Zdenek Dohnal - 2:9.0.1984-1 -- patchlevel 1984 - -* Mon Oct 02 2023 Zdenek Dohnal - 2:9.0.1968-1 -- patchlevel 1968 - -* Fri Sep 22 2023 Zdenek Dohnal - 2:9.0.1927-1 -- patchlevel 1927 - -* Thu Sep 07 2023 Zdenek Dohnal - 2:9.0.1882-1 -- patchlevel 1882 - -* Wed Sep 06 2023 Zdenek Dohnal - 2:9.0.1872-2 -- test_xxd_color2 is flaky - -* Tue Sep 05 2023 Zdenek Dohnal - 2:9.0.1872-1 -- patchlevel 1872 - -* Wed Aug 30 2023 Zdenek Dohnal - 2:9.0.1822-1 -- patchlevel 1822 - -* Mon Aug 14 2023 Zdenek Dohnal - 2:9.0.1712-1 -- patchlevel 1712 - -* Fri Aug 11 2023 Zdenek Dohnal - 2:9.0.1677-4 -- fix test suite from python3 syntax warnings - -* Sat Jul 22 2023 Fedora Release Engineering - 2:9.0.1677-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Thu Jul 13 2023 Zdenek Dohnal - 2:9.0.1677-2 -- 2222671 - fix FTBFS due Python3 rebase -- 2222648 - fix FailToInstall due Perl rebase - -* Tue Jul 11 2023 Zdenek Dohnal - 2:9.0.1677-2 -- patchlevel 1677 - -* Tue Jul 11 2023 Jitka Plesnikova - 2:9.0.1671-2 -- Perl 5.38 rebuild - -* Fri Jun 30 2023 Zdenek Dohnal - 2:9.0.1671-1 -- patchlevel 1671 - -* Fri Jun 23 2023 Zdenek Dohnal - 2:9.0.1649-1 -- patchlevel 1649 - -* Tue Jun 13 2023 Zdenek Dohnal - 2:9.0.1627-1 -- patchlevel 1627 - -* Mon Jun 05 2023 Zdenek Dohnal - 2:9.0.1607-1 -- patchlevel 1607 - -* Wed May 31 2023 Zdenek Dohnal - 2:9.0.1592-1 -- patchlevel 1592 - -* Mon May 29 2023 Zdenek Dohnal - 2:9.0.1587-1 -- patchlevel 1587 - -* Wed May 24 2023 Zdenek Dohnal - 2:9.0.1575-1 -- patchlevel 1575 - -* Thu May 18 2023 Zdenek Dohnal - 2:9.0.1562-1 -- patchlevel 1562 - -* Thu Apr 27 2023 Zdenek Dohnal - 2:9.0.1491-1 -- patchlevel 1491 - -* Tue Apr 25 2023 Zdenek Dohnal - 2:9.0.1486-1 -- patchlevel 1486 - -* Fri Apr 21 2023 Zdenek Dohnal - 2:9.0.1472-1 -- patchlevel 1472 - -* Tue Apr 11 2023 Zdenek Dohnal - 2:9.0.1443-1 -- patchlevel 1443 - -* Tue Apr 11 2023 Zdenek Dohnal - 2:9.0.1440-2 -- incorporate License tag changes based on legal team response - -* Wed Apr 05 2023 Andreas Schneider - 2:9.0.1440-2 -- create xxd package, because it is used by hex.nvim - -* Wed Apr 05 2023 Zdenek Dohnal - 2:9.0.1440-2 -- list most licenses available in binary rpms and migrate them into SPDX syntax - -* Wed Apr 05 2023 Zdenek Dohnal - 2:9.0.1440-1 -- patchlevel 1440 - -* Mon Mar 27 2023 Zdenek Dohnal - 2:9.0.1429-1 -- patchlevel 1429 - -* Wed Mar 22 2023 Zdenek Dohnal - 2:9.0.1423-1 -- patchlevel 1423 - -* Thu Mar 16 2023 Zdenek Dohnal - 2:9.0.1407-1 -- patchlevel 1407 - -* Tue Mar 14 2023 Zdenek Dohnal - 2:9.0.1403-1 -- patchlevel 1403 - -* Thu Mar 02 2023 Zdenek Dohnal - 2:9.0.1367-1 -- patchlevel 1367 - -* Fri Feb 17 2023 Zdenek Dohnal - 2:9.0.1314-1 -- patchlevel 1314 - -* Tue Feb 14 2023 Zdenek Dohnal - 2:9.0.1307-1 -- patchlevel 1307 - -* Tue Feb 14 2023 Zdenek Dohnal - 2:9.0.1293-2 -- 2169641 - Syntax highlight for sh files broken - -* Thu Feb 09 2023 Zdenek Dohnal - 2:9.0.1293-1 -- patchlevel 1293 - -* Mon Jan 30 2023 Zdenek Dohnal - 2:9.0.1262-1 -- patchlevel 1262 - -* Thu Jan 19 2023 Zdenek Dohnal - 2:9.0.1221-1 -- patchlevel 1221 - -* Thu Jan 12 2023 Zdenek Dohnal - 2:9.0.1182-1 -- patchlevel 1182 - -* Mon Jan 09 2023 Zdenek Dohnal - 2:9.0.1160-1 -- patchlevel 1160 - -* Mon Jan 09 2023 Zdenek Dohnal - 2:9.0.1054-2 -- FTBFS with new FORTIFY_SOURCE=3 - remove it since Vim wants level 1 - -* Wed Dec 14 2022 Zdenek Dohnal - 2:9.0.1054-1 -- patchlevel 1054 - -* Mon Dec 05 2022 Zdenek Dohnal - 2:9.0.1006-1 -- patchlevel 1006 - -* Mon Nov 28 2022 Zdenek Dohnal - 2:9.0.963-1 -- patchlevel 963 - -* Mon Nov 21 2022 Zdenek Dohnal - 2:9.0.915-1 -- patchlevel 915 - -* Thu Nov 03 2022 Zdenek Dohnal - 2:9.0.828-1 -- patchlevel 828 - -* Thu Oct 20 2022 Zdenek Dohnal - 2:9.0.803-1 -- patchlevel 803 - -* Mon Oct 17 2022 Zdenek Dohnal - 2:9.0.777-1 -- patchlevel 777 - -* Wed Oct 12 2022 Zdenek Dohnal - 2:9.0.720-2 -- the current configure option for Vi is 'tiny' - -* Tue Oct 11 2022 Zdenek Dohnal - 2:9.0.720-1 -- patchlevel 720 - -* Wed Sep 28 2022 Carl George - 2:9.0.475-2 -- Obsolete vim-toml since the runtime files are now part of vim-common - -* Fri Sep 16 2022 Zdenek Dohnal - 2:9.0.475-1 -- patchlevel 475 - -* Fri Sep 16 2022 Zdenek Dohnal - 2:9.0.412-2 -- provide 'vim(plugins-supported)' for plugins to require Vim/GVim - -* Thu Sep 08 2022 Zdenek Dohnal - 2:9.0.412-1 -- patchlevel 412 - -* Thu Sep 01 2022 Zdenek Dohnal - 2:9.0.348-1 -- patchlevel 348 - -* Tue Aug 30 2022 Zdenek Dohnal - 2:9.0.327-1 -- patchlevel 327 - -* Tue Aug 23 2022 Zdenek Dohnal - 2:9.0.246-1 -- patchlevel 246 - -* Mon Aug 15 2022 Zdenek Dohnal - 2:9.0.213-1 -- patchlevel 213 - -* Thu Aug 11 2022 Zdenek Dohnal - 2:9.0.189-1 -- patchlevel 189 - -* Thu Aug 04 2022 Zdenek Dohnal - 2:9.0.137-1 -- patchlevel 137 - -* Tue Jul 26 2022 Zdenek Dohnal - 2:9.0.077-1 -- patchlevel 077 - -* Sat Jul 23 2022 Fedora Release Engineering - 2:9.0.049-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Mon Jul 11 2022 Zdenek Dohnal - 2:9.0.049-1 -- patchlevel 049 - -* Tue Jun 28 2022 Zdenek Dohnal - 2:8.2.5172-1 -- patchlevel 5172 - -* Tue Jun 21 2022 Zdenek Dohnal - 2:8.2.5141-1 -- patchlevel 5141 - -* Tue Jun 14 2022 Zdenek Dohnal - 2:8.2.5085-1 -- patchlevel 5085 - -* Fri Jun 03 2022 Zdenek Dohnal - 2:8.2.5052-1 -- patchlevel 5052 - -* Tue May 31 2022 Zdenek Dohnal - 2:8.2.5046-1 -- patchlevel 5046 - -* Wed May 18 2022 Zdenek Dohnal - 2:8.2.4975-1 -- patchlevel 4975 - -* Tue May 17 2022 Zdenek Dohnal - 2:8.2.4969-1 -- patchlevel 4969 - -* Mon May 09 2022 Zdenek Dohnal - 2:8.2.4927-1 -- patchlevel 4927 - -* Mon May 09 2022 Zdenek Dohnal - 2:8.2.4877-2 -- add new file vimhelp.vim - -* Fri May 06 2022 Zdenek Dohnal - 2:8.2.4877-1 -- patchlevel 4877 - -* Mon May 02 2022 Zdenek Dohnal - 2:8.2.4857-1 -- patchlevel 4857 - -* Fri Apr 29 2022 Zdenek Dohnal - 2:8.2.4845-1 -- patchlevel 4845 - -* Fri Apr 22 2022 Zdenek Dohnal - 2:8.2.4804-1 -- patchlevel 4804 - -* Fri Apr 08 2022 Zdenek Dohnal - 2:8.2.4701-2 -- fix the upstream testsuite failure due downstream patch - -* Thu Apr 07 2022 Zdenek Dohnal - 2:8.2.4701-1 -- patchlevel 4701 - -* Fri Mar 25 2022 Zdenek Dohnal - 2:8.2.4621-1 -- patchlevel 4621 - -* Wed Mar 16 2022 Zdenek Dohnal - 2:8.2.4579-1 -- patchlevel 4579 - -* Wed Mar 09 2022 Zdenek Dohnal - 2:8.2.4529-1 -- patchlevel 4529 - -* Tue Mar 01 2022 Zdenek Dohnal - 2:8.2.4485-1 -- patchlevel 4485 - -* Thu Feb 24 2022 Zdenek Dohnal - 2:8.2.4460-1 -- patchlevel 4460 - -* Mon Feb 21 2022 Zdenek Dohnal - 2:8.2.4428-1 -- patchlevel 4428 - -* Tue Feb 15 2022 Zdenek Dohnal - 2:8.2.4386-1 -- patchlevel 4386 - -* Mon Feb 07 2022 Zdenek Dohnal - 2:8.2.4314-1 -- patchlevel 4314 - -* Thu Jan 27 2022 Zdenek Dohnal - 2:8.2.4232-1 -- patchlevel 4232 - -* Mon Jan 24 2022 Zdenek Dohnal - 2:8.2.4198-1 -- patchlevel 4198 - -* Sat Jan 22 2022 Fedora Release Engineering - 2:8.2.4068-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Jan 12 2022 Zdenek Dohnal - 2:8.2.4068-1 -- patchlevel 4068 - -* Mon Jan 10 2022 Zdenek Dohnal - 2:8.2.4051-1 -- patchlevel 4051 - -* Fri Jan 07 2022 Malcolm Inglis - 2:8.2.4006-2 -- add 'gui' build condition for vim-X11 - -* Wed Jan 05 2022 Zdenek Dohnal - 2:8.2.4006-1 -- patchlevel 4006 - -* Wed Dec 15 2021 Zdenek Dohnal - 2:8.2.3811-1 -- patchlevel 3811 - -* Tue Dec 07 2021 Zdenek Dohnal - 2:8.2.3755-1 -- patchlevel 3755 - -* Thu Dec 02 2021 Zdenek Dohnal - 2:8.2.3717-1 -- patchlevel 3717 - -* Thu Nov 25 2021 Zdenek Dohnal - 2:8.2.3642-2 -- 2026651 - defaults.vim changes create conflicts between vim-minimal and vim-common - -* Mon Nov 22 2021 Zdenek Dohnal - 2:8.2.3642-1 -- patchlevel 3642 - -* Mon Nov 08 2021 Zdenek Dohnal - 2:8.2.3582-1 -- patchlevel 3582 - -* Mon Nov 01 2021 Zdenek Dohnal - 2:8.2.3568-1 -- patchlevel 3568 - -* Fri Oct 15 2021 Zdenek Dohnal - 2:8.2.3512-1 -- patchlevel 3512 - -* Thu Oct 14 2021 Zdenek Dohnal - 2:8.2.3404-2 -- adjust test suite to Python 3.10 - -* Thu Oct 14 2021 Zdenek Dohnal - 2:8.2.3404-2 -- remove filetype plugin from virc - it doesn't work with vi - -* Mon Oct 11 2021 Zdenek Dohnal - 2:8.2.3404-2 -- set system vimrc via compiler macros - -* Thu Sep 23 2021 Zdenek Dohnal - 2:8.2.3404-2 -- remove downstream patch vim-8.0-copypaste.patch - put mouse settings into defaults.vim again - -* Mon Sep 06 2021 Zdenek Dohnal - 2:8.2.3404-1 -- patchlevel 3404 - -* Wed Sep 01 2021 Zdenek Dohnal - 2:8.2.3391-1 -- patchlevel 3391 - -* Mon Aug 23 2021 Zdenek Dohnal - 2:8.2.3367-1 -- patchlevel 3367 - -* Mon Aug 16 2021 Zdenek Dohnal - 2:8.2.3354-1 -- patchlevel 3354 - -* Mon Aug 09 2021 Zdenek Dohnal - 2:8.2.3318-1 -- patchlevel 3318 - -* Thu Aug 05 2021 Zdenek Dohnal - 2:8.2.3290-1 -- patchlevel 3290 - -* Mon Aug 02 2021 Zdenek Dohnal - 2:8.2.3273-1 -- patchlevel 3273 - -* Mon Jul 26 2021 Zdenek Dohnal - 2:8.2.3223-1 -- patchlevel 3223 - -* Fri Jul 23 2021 Fedora Release Engineering - 2:8.2.3182-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Mon Jul 19 2021 Zdenek Dohnal - 2:8.2.3182-1 -- patchlevel 3182 - -* Mon Jul 12 2021 Zdenek Dohnal - 2:8.2.3154-1 -- patchlevel 3154 - -* Mon Jun 28 2021 Zdenek Dohnal - 2:8.2.3070-1 -- patchlevel 3070 - -* Fri Jun 25 2021 Zdenek Dohnal - 2:8.2.3046-1 -- patchlevel 3046 - -* Thu Jun 24 2021 Zdenek Dohnal - 2:8.2.3043-1 -- patchlevel 3043 -- enable libsodium encryption in Fedora -- require glibc-gconv-extra on F35 and later - -* Wed Jun 16 2021 Zdenek Dohnal - 2:8.2.3009-1 -- patchlevel 3009 - -* Thu Jun 10 2021 Zdenek Dohnal - 2:8.2.2956-2 -- 1969936 - Failed to source defaults.vim - -* Mon Jun 07 2021 Zdenek Dohnal - 2:8.2.2956-1 -- patchlevel 2956 - -* Fri Jun 04 2021 Zdenek Dohnal - 2:8.2.2932-1 -- patchlevel 2932 - -* Mon May 24 2021 Zdenek Dohnal - 2:8.2.2879-1 -- patchlevel 2879 - -* Fri May 21 2021 Zdenek Dohnal - 2:8.2.2875-1 -- patchlevel 2875 - -* Mon May 10 2021 Zdenek Dohnal - 2:8.2.2846-1 -- patchlevel 2846 - -* Wed May 05 2021 Zdenek Dohnal - 2:8.2.2825-2 -- make default-editor built only on Fedora - -* Mon May 03 2021 Zdenek Dohnal - 2:8.2.2825-1 -- patchlevel 2825 - -* Mon Apr 26 2021 Zdenek Dohnal - 2:8.2.2811-1 -- patchlevel 2811 - -* Tue Apr 20 2021 Zdenek Dohnal - 2:8.2.2787-1 -- patchlevel 2787 - -* Mon Apr 12 2021 Zdenek Dohnal - 2:8.2.2756-1 -- patchlevel 2756 - -* Thu Apr 08 2021 Zdenek Dohnal - 2:8.2.2735-1 -- patchlevel 2735 - -* Mon Mar 22 2021 Zdenek Dohnal - 2:8.2.2637-1 -- patchlevel 2637 - -* Mon Mar 15 2021 Zdenek Dohnal - 2:8.2.2607-1 -- patchlevel 2607 - -* Mon Mar 08 2021 Zdenek Dohnal - 2:8.2.2576-1 -- patchlevel 2576 - -* Mon Mar 01 2021 Zdenek Dohnal - 2:8.2.2559-1 -- patchlevel 2559 - -* Mon Mar 01 2021 Zdenek Dohnal - 2:8.2.2541-2 -- 1928442 - vim-enhanced is replacing vim-wrappers-8.2.2465-1 - -* Mon Feb 22 2021 Zdenek Dohnal - 2:8.2.2541-1 -- patchlevel 2541 -- 1931099 - Build version numbers don't match the actual build patchlevel - -* Thu Feb 18 2021 Zdenek Dohnal - 2:8.2.2529-1 -- patchlevel 2529 - -* Tue Feb 09 2021 Zdenek Dohnal - 2:8.2.2488-1 -- patchlevel 2488 - -* Tue Feb 09 2021 Zdenek Dohnal - 2:8.2.2465-2 -- remove vim-wrappers, vim is a binary again, vi and view stay as wrappers -- removed vim -> vi functionality, because it cannot be optional and work - for all cases at the same time - -* Mon Feb 08 2021 Zdenek Dohnal - 2:8.2.2465-2 -- view is not readonly right now, fix it by -R - -* Thu Feb 04 2021 Zdenek Dohnal - 2:8.2.2465-1 -- patchlevel 2465 -- 1918575 - Use wrappers for vi/vim instead of aliases - -* Thu Feb 04 2021 Zdenek Dohnal - 2:8.2.2451-2 -- vim-update.sh: apply changes master->rawhide - -* Tue Feb 02 2021 Zdenek Dohnal - 2:8.2.2451-1 -- patchlevel 2451 - -* Wed Jan 27 2021 Fedora Release Engineering - 2:8.2.2311-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Mon Jan 11 2021 Zdenek Dohnal - 2:8.2.2311-2 -- conflicting the version when the change happened doesnt make sense - -* Fri Jan 08 2021 Zdenek Dohnal - 2:8.2.2311-1 -- patchlevel 2311 - -* Fri Dec 18 2020 Zdenek Dohnal - 2:8.2.2146-2 -- install vim-minimal profiles under different name to avoid future conflicts -- remove old conflicts - -* Wed Dec 16 2020 Zdenek Dohnal - 2:8.2.2146-1 -- patchlevel 2146 - -* Wed Dec 16 2020 Zdenek Dohnal - 2:8.2.2143-2 -- make profile files as ghosts to prevent further conflicts -- remove ownership of /etc/profile.d - rpmlinter reports it as an error -- remove interactive prompt from profile scripts - -* Mon Dec 14 2020 Zdenek Dohnal - 2:8.2.2143-1 -- patchlevel 2143 - -* Mon Dec 14 2020 Zdenek Dohnal - 2:8.2.2115-2 -- 1907335 - installing vim no longer works, due to package conflicts with vim-minimal - -* Wed Dec 09 2020 Zdenek Dohnal - 2:8.2.2115-1 -- patchlevel 2115 - -* Wed Dec 09 2020 Zdenek Dohnal - 2:8.2.2108-2 -- 1902772 - "vim" from vim-minimal defunct on zsh - -* Tue Dec 08 2020 Zdenek Dohnal - 2:8.2.2108-1 -- patchlevel 2108 - -* Fri Dec 04 2020 Zdenek Dohnal - 2:8.2.2086-1 -- patchlevel 2086 - -* Tue Dec 01 2020 Zdenek Dohnal - 2:8.2.2072-1 -- patchlevel 2072 - -* Fri Nov 20 2020 Zdenek Dohnal - 2:8.2.2018-1 -- patchlevel 2018 - -* Tue Nov 10 2020 Zdenek Dohnal - 2:8.2.1971-1 -- patchlevel 1971 - -* Fri Nov 06 2020 Zdenek Dohnal - 2:8.2.1961-1 -- patchlevel 1961 - -* Thu Nov 05 2020 Zdenek Dohnal - 2:8.2.1941-2 -- make is no longer in buildroot by default -- disable F31 updating - -* Mon Nov 02 2020 Zdenek Dohnal - 2:8.2.1941-1 -- patchlevel 1941 - -* Mon Nov 02 2020 Zdenek Dohnal - 2:8.2.1885-2 -- move vim.fish to vendor_functions.d - -* Thu Oct 22 2020 Zdenek Dohnal - 2:8.2.1885-1 -- patchlevel 1885 - -* Mon Oct 19 2020 Zdenek Dohnal - 2:8.2.1815-2 -- vim.sh, vim.csh, vim.fish - drop 'which', use 'command' - -* Thu Oct 15 2020 Zdenek Dohnal - 2:8.2.1815-2 -- vim-default-editor.fish - dont give EDITOR universal scope -- vim.sh, vim.csh - set aliases only for OS default vi and vim -- add fish profile for Vim - -* Mon Oct 12 2020 Zdenek Dohnal - 2:8.2.1815-2 -- fix installing fish profile, set virtual provide for default editor - (thanks Neal Gompa and Kamil Dudka) -- set conflicts to nano-default-editor which doesnt provide system-default-editor - -* Fri Oct 09 2020 PaweÅ‚ Marciniak - 2:8.2.1815-2 -- A new subpackage, set vim as a default editor. - -* Fri Oct 09 2020 Zdenek Dohnal - 2:8.2.1815-1 -- patchlevel 1815 - -* Tue Oct 06 2020 Zdenek Dohnal - 2:8.2.1805-1 -- patchlevel 1805 - -* Tue Sep 29 2020 Zdenek Dohnal - 2:8.2.1770-1 -- patchlevel 1770 - -* Tue Sep 15 2020 Zdenek Dohnal - 2:8.2.1687-1 -- patchlevel 1687 - -* Thu Sep 10 2020 Zdenek Dohnal - 2:8.2.1651-1 -- patchlevel 1651 - -* Tue Sep 08 2020 Zdenek Dohnal - 2:8.2.1634-1 -- patchlevel 1634 - -* Mon Aug 31 2020 Zdenek Dohnal - 2:8.2.1551-1 -- patchlevel 1551 - -* Mon Aug 31 2020 Zdenek Dohnal - 2:8.2.1522-3 -- F33 has update-testing now - -* Tue Aug 25 2020 Zdenek Dohnal - 2:8.2.1522-2 -- typo in vim-update.sh - -* Tue Aug 25 2020 Zdenek Dohnal - 2:8.2.1522-1 -- patchlevel 1522 - -* Mon Aug 24 2020 Zdenek Dohnal - 2:8.2.1520-1 -- patchlevel 1520 - -* Thu Aug 20 2020 Zdenek Dohnal - 2:8.2.1484-2 -- explicitly disable canberra for vi and vim - -* Wed Aug 19 2020 Zdenek Dohnal - 2:8.2.1484-1 -- patchlevel 1484 - -* Tue Aug 18 2020 Zdenek Dohnal - 2:8.2.1412-2 -- F33 got branched, updates-testing isn't enabled for it yet -- enable sounds for gvim - -* Mon Aug 10 2020 Zdenek Dohnal - 2:8.2.1412-1 -- patchlevel 1412 - -* Fri Aug 07 2020 Zdenek Dohnal - 2:8.2.1382-1 -- patchlevel 1382 - -* Wed Aug 05 2020 Zdenek Dohnal - 2:8.2.1359-2 -- own directories for icons - -* Mon Aug 03 2020 Zdenek Dohnal - 2:8.2.1359-1 -- patchlevel 1359 - -* Fri Jul 31 2020 Zane Bitter - 2:8.2.1328-2 -- Alias view to "vim -R" when available - -* Fri Jul 31 2020 Zdenek Dohnal - 2:8.2.1328-1 -- patchlevel 1328 - -* Wed Jul 29 2020 Zdenek Dohnal - 2:8.2.1307-2 -- 1703774 - ex, view and rview manpages were dangling symlinks - -* Tue Jul 28 2020 Zdenek Dohnal - 2:8.2.1307-1 -- patchlevel 1307 - -* Fri Jul 24 2020 Zdenek Dohnal - 2:8.2.1273-2 -- vim-update.sh: bodhi no longer sets a default automatic time to stable - -* Thu Jul 23 2020 Zdenek Dohnal - 2:8.2.1273-1 -- patchlevel 1273 - -* Thu Jul 23 2020 Zdenek Dohnal - 2:8.2.1224-4 -- python3 dynamic linking patch is already in upstream, remove it - -* Wed Jul 22 2020 Zdenek Dohnal - 2:8.2.1224-3 -- use %%make_build and %%make_install according FPG - -* Thu Jul 16 2020 Zdenek Dohnal - 2:8.2.1224-2 -- proper fix for python3 dynamic linking - -* Thu Jul 16 2020 Zdenek Dohnal - 2:8.2.1224-1 -- patchlevel 1224 - -* Wed Jul 15 2020 Zdenek Dohnal - 2:8.2.1217-1 -- patchlevel 1217 - -* Wed Jul 15 2020 Zdenek Dohnal - 2:8.2.1199-1 -- fix python3 dynamic linking with python >= 3.8 -- clean up unused stuff - -* Tue Jul 14 2020 Zdenek Dohnal - 2:8.2.1199-1 -- FTBFS with Lua - backported patch from upstream pull request to prevent linking with lua - -* Mon Jul 13 2020 Zdenek Dohnal - 2:8.2.1199-1 -- patchlevel 1199 - -* Mon Jun 29 2020 Zdenek Dohnal - 2:8.2.1081-1 -- patchlevel 1081 - -* Thu Jun 25 2020 Zdenek Dohnal - 2:8.2.1052-2 -- remove python2 stuff for RHEL -- %%{fedora} macro is undefined in ELN, causes python3-config to use old options - -* Thu Jun 25 2020 Zdenek Dohnal - 2:8.2.1052-1 -- patchlevel 1052 - -* Fri Jun 19 2020 Zdenek Dohnal - 2:8.2.1009-1 -- patchlevel 1009 - -* Wed Jun 17 2020 Zdenek Dohnal - 2:8.2.993-1 -- patchlevel 993 - -* Tue Jun 16 2020 Zdenek Dohnal - 2:8.2.987-1 -- patchlevel 987 - -* Fri Jun 05 2020 Zdenek Dohnal - 2:8.2.905-1 -- patchlevel 905 - -* Tue Jun 02 2020 Zdenek Dohnal - 2:8.2.869-2 -- remove tests from dist-git, we use base os ci - -* Mon Jun 01 2020 Zdenek Dohnal - 2:8.2.869-1 -- patchlevel 869 - -* Thu May 28 2020 Miro HronÄok - 2:8.2.834-2 -- Rebuilt for Python 3.9 - -* Thu May 28 2020 Zdenek Dohnal - 2:8.2.834-1 -- patchlevel 834 - -* Tue May 26 2020 Miro HronÄok - 2:8.2.806-2 -- Rebuilt for Python 3.9 - -* Fri May 22 2020 Zdenek Dohnal - 2:8.2.806-1 -- patchlevel 806 - -* Mon May 18 2020 Zdenek Dohnal - 2:8.2.789-1 -- patchlevel 789 - -* Thu May 14 2020 Zdenek Dohnal - 2:8.2.752-2 -- F30 will be EOL in less than 14 days, remove it from automatic updates - -* Thu May 14 2020 Zdenek Dohnal - 2:8.2.752-1 -- patchlevel 752 - -* Mon May 11 2020 Zdenek Dohnal - 2:8.2.735-1 -- patchlevel 735 - -* Mon May 04 2020 Zdenek Dohnal - 2:8.2.694-1 -- patchlevel 694 - -* Fri Apr 24 2020 Zdenek Dohnal - 2:8.2.628-1 -- patchlevel 628 - -* Tue Apr 21 2020 Zdenek Dohnal - 2:8.2.613-1 -- patchlevel 613 - -* Fri Apr 17 2020 Zdenek Dohnal - 2:8.2.587-1 -- patchlevel 587 - -* Thu Apr 09 2020 Zdenek Dohnal - 2:8.2.534-1 -- patchlevel 534 - -* Tue Apr 07 2020 Zdenek Dohnal - 2:8.2.525-1 -- patchlevel 525 - -* Mon Apr 06 2020 Zdenek Dohnal - 2:8.2.520-1 -- patchlevel 520 - -* Mon Mar 30 2020 Zdenek Dohnal - 2:8.2.480-1 -- patchlevel 480 - -* Thu Mar 26 2020 Zdenek Dohnal - 2:8.2.448-1 -- patchlevel 448 - -* Wed Mar 25 2020 Zdenek Dohnal - 2:8.2.444-1 -- patchlevel 444 - -* Mon Mar 16 2020 Lubomir Rintel - 2:8.2.390-2 -- source /etc/vimrc.local if it exists - -* Mon Mar 16 2020 Zdenek Dohnal - 2:8.2.390-1 -- patchlevel 390 - -* Tue Mar 10 2020 Zdenek Dohnal - 2:8.2.357-2 -- put providing bundled libvterm into subpackage vim-enhanced - -* Fri Mar 06 2020 Zdenek Dohnal - 2:8.2.357-1 -- patchlevel 357 - -* Thu Mar 05 2020 Zdenek Dohnal - 2:8.2.356-1 -- patchlevel 356 - -* Tue Mar 03 2020 Zdenek Dohnal - 2:8.2.348-1 -- patchlevel 348 - -* Thu Feb 13 2020 Zdenek Dohnal - 2:8.2.236-2 -- F32 got branched - do separate update for it - -* Mon Feb 10 2020 Zdenek Dohnal - 2:8.2.236-1 -- patchlevel 236 - -* Wed Jan 29 2020 Zdenek Dohnal - 2:8.2.158-2 -- man page file format conversion is not needed anymore - -* Mon Jan 27 2020 Zdenek Dohnal - 2:8.2.158-1 -- patchlevel 158 - -* Fri Jan 10 2020 Zdenek Dohnal - 2:8.2.109-1 -- patchlevel 109 - -* Thu Jan 02 2020 Zdenek Dohnal - 2:8.2.076-1 -- patchlevel 076 - -* Wed Dec 18 2019 Zdenek Dohnal - 2:8.2.019-1 -- patchlevel 019 - -* Mon Dec 16 2019 Zdenek Dohnal - 2:8.2.012-1 -- patchlevel 012 - -* Thu Dec 12 2019 Zdenek Dohnal - 2:8.1.2424-1 -- patchlevel 2424 - -* Thu Nov 28 2019 Zdenek Dohnal - 2:8.1.2352-1 -- patchlevel 2352 - -* Thu Nov 28 2019 Zdenek Dohnal - 2:8.1.2267-2 -- leave out f29, will be soon EOL - -* Thu Nov 07 2019 Zdenek Dohnal - 2:8.1.2267-1 -- patchlevel 2267 - -* Wed Nov 06 2019 Zdenek Dohnal - 2:8.1.2234-2 -- do not add python-libs into LDFLAGS until we build vim and gvim - -* Wed Oct 30 2019 Zdenek Dohnal - 2:8.1.2234-1 -- patchlevel 2234 - -* Tue Oct 22 2019 Zdenek Dohnal - 2:8.1.2198-1 -- patchlevel 2198 - -* Mon Oct 21 2019 Zdenek Dohnal - 2:8.1.2197-1 -- patchlevel 2197 - -* Thu Oct 17 2019 Zdenek Dohnal - 2:8.1.2168-1 -- patchlevel 2168 - -* Mon Oct 07 2019 Zdenek Dohnal - 2:8.1.2120-1 -- patchlevel 2120 - -* Mon Sep 30 2019 Zdenek Dohnal - 2:8.1.2102-1 -- patchlevel 2102 - -* Thu Sep 19 2019 Zdenek Dohnal - 2:8.1.2056-1 -- patchlevel 2056 - -* Mon Sep 16 2019 Zdenek Dohnal - 2:8.1.2019-2 -- enable fips warning - -* Tue Sep 10 2019 Zdenek Dohnal - 2:8.1.2019-1 -- patchlevel 2019 - -* Fri Sep 06 2019 Zdenek Dohnal - 2:8.1.1991-2 -- add f32 as rawhide and f31 as standalone branch - -* Fri Sep 06 2019 Zdenek Dohnal - 2:8.1.1991-1 -- patchlevel 1991 - -* Tue Sep 03 2019 Zdenek Dohnal - 2:8.1.1912-3 -- 1744956 - vim does not build with python3.8 - -* Mon Aug 26 2019 Zdenek Dohnal - 2:8.1.1912-2 -- remove python2 interpreter - python2 will be retired soon. -- use 'file' with '--mime' option - output is more stable - -* Fri Aug 23 2019 Zdenek Dohnal - 2:8.1.1912-1 -- patchlevel 1912 - -* Fri Aug 23 2019 Zdenek Dohnal - 2:8.1.1890-2 -- revert vimx removal - -* Tue Aug 20 2019 Zdenek Dohnal - 2:8.1.1890-1 -- patchlevel 1890 - -* Tue Aug 20 2019 Zdenek Dohnal - 2:8.1.1790-2 -- 1740892 - vimx is symlink to gvim instead of vim - -* Fri Aug 02 2019 Zdenek Dohnal - 2:8.1.1790-1 -- patchlevel 1790 - -* Fri Jul 26 2019 Zdenek Dohnal - 2:8.1.1749-1 -- patchlevel 1749 - -* Tue Jul 23 2019 Zdenek Dohnal - 2:8.1.1713-6 -- Provides must be unversioned according FPG - -* Mon Jul 22 2019 Zdenek Dohnal - 2:8.1.1713-5 -- remove perl-libs, because they are supplied perl MODULE_COMPAT - -* Fri Jul 19 2019 Zdenek Dohnal - 2:8.1.1713-4 -- remove unused patch - -* Fri Jul 19 2019 Zdenek Dohnal - 2:8.1.1713-3 -- 1724126 - disable showing spec template for new file with .spec suffix -- minor changes in spec.template - tabs->spaces - -* Fri Jul 19 2019 Zdenek Dohnal - 2:8.1.1713-2 -- remove skip_defaults_vim - it does not make sense to have it in system vimrc - -* Thu Jul 18 2019 Zdenek Dohnal - 2:8.1.1713-1 -- patchlevel 1713 - -* Thu Jul 18 2019 Zdenek Dohnal - 2:8.1.1661-2 -- 1643311 - add several defaults from Vim upstream and remove forcing fileencodings - -* Thu Jul 11 2019 Zdenek Dohnal - 2:8.1.1661-1 -- patchlevel 1661 - -* Fri Jun 28 2019 Zdenek Dohnal - 2:8.1.1602-1 -- patchlevel 1602 - -* Mon Jun 17 2019 Zdenek Dohnal - 2:8.1.1561-1 -- patchlevel 1561 - -* Tue Jun 11 2019 Zdenek Dohnal - 2:8.1.1517-1 -- patchlevel 1517 - -* Tue Jun 11 2019 Zdenek Dohnal - 2:8.1.1471-2 -- remove desktop patch, already in upstream - -* Thu Jun 06 2019 Zdenek Dohnal - 2:8.1.1471-1 -- patchlevel 1471 - -* Tue May 28 2019 Zdenek Dohnal - 2:8.1.1413-1 -- patchlevel 1413 - -* Mon May 20 2019 Zdenek Dohnal - 2:8.1.1359-2 -- stop updating f28 - -* Mon May 20 2019 Zdenek Dohnal - 2:8.1.1359-1 -- patchlevel 1359 - -* Mon May 20 2019 Zdenek Dohnal - 2:8.1.1137-2 -- remove upstream patch - -* Mon Apr 08 2019 Zdenek Dohnal - 2:8.1.1137-1 -- patchlevel 1137 - -* Mon Apr 08 2019 Zdenek Dohnal - 2:8.1.1099-2 -- 1697104 - new spec file template contains deprecated tags - -* Tue Apr 02 2019 Zdenek Dohnal - 2:8.1.1099-1 -- patchlevel 1099 - -* Tue Mar 26 2019 Zdenek Dohnal - 2:8.1.1048-2 -- add bundled libvterm - -* Mon Mar 25 2019 Zdenek Dohnal - 2:8.1.1048-1 -- patchlevel 1048 - -* Fri Mar 08 2019 Zdenek Dohnal - 2:8.1.998-1 -- patchlevel 998 - -* Fri Mar 08 2019 Zdenek Dohnal - 2:8.1.994-2 -- F30 is already active in bodhi - -* Mon Mar 04 2019 Zdenek Dohnal - 2:8.1.994-1 -- patchlevel 994 - -* Wed Feb 20 2019 Zdenek Dohnal - 2:8.1.956-1 -- patchlevel 956 - -* Wed Feb 20 2019 Zdenek Dohnal - 2:8.1.918-2 -- we have Fedora 30 branch now, enable updates for it in vim-update.sh - -* Thu Feb 14 2019 Zdenek Dohnal - 2:8.1.918-1 -- patchlevel 918 - -* Thu Feb 14 2019 Zdenek Dohnal - 2:8.1.897-2 -- we do not need exact include path for python3 now - -* Tue Feb 12 2019 Zdenek Dohnal - 2:8.1.897-1 -- patchlevel 897 - -* Fri Feb 08 2019 Zdenek Dohnal - 2:8.1.880-1 -- patchlevel 880 - -* Mon Feb 04 2019 Zdenek Dohnal - 2:8.1.873-1 -- patchlevel 873 - -* Mon Feb 04 2019 Zdenek Dohnal - 2:8.1.847-4 -- remove downstream fix for new ruby, upstream solved it different way - -* Sun Feb 03 2019 Fedora Release Engineering - 2:8.1.847-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Thu Jan 31 2019 Karsten Hopp - 2:8.1.847-2 -- remove ancient Changelog.rpm - -* Wed Jan 30 2019 Zdenek Dohnal - 2:8.1.847-2 -- fix patch for new ruby-2.6 - -* Wed Jan 30 2019 Zdenek Dohnal - 2:8.1.847-1 -- patchlevel 847 - -* Tue Jan 29 2019 Zdenek Dohnal - 2:8.1.837-2 -- FTBFS with new ruby-2.6 - -* Mon Jan 28 2019 Zdenek Dohnal - 2:8.1.837-1 -- patchlevel 837 - -* Fri Jan 25 2019 Zdenek Dohnal - 2:8.1.818-1 -- patchlevel 818 - -* Tue Jan 22 2019 Zdenek Dohnal - 2:8.1.789-1 -- patchlevel 789 - -* Fri Jan 11 2019 Zdenek Dohnal - 2:8.1.714-1 -- patchlevel 714 - -* Tue Jan 08 2019 Zdenek Dohnal - 2:8.1.702-1 -- patchlevel 702 - -* Mon Dec 10 2018 Zdenek Dohnal - 2:8.1.575-1 -- patchlevel 575 - -* Wed Dec 05 2018 Zdenek Dohnal - 2:8.1.549-2 -- do not strip binaries before build system strips it - -* Tue Nov 27 2018 Zdenek Dohnal - 2:8.1.549-1 -- patchlevel 549 - -* Tue Nov 27 2018 Zdenek Dohnal - 2:8.1.527-2 -- update vim-update.sh - F27 EOL - -* Fri Nov 16 2018 Zdenek Dohnal - 2:8.1.527-1 -- patchlevel 527 - -* Thu Nov 08 2018 Zdenek Dohnal - 2:8.1.513-2 -- #1646183 - do not forget the epoch - -* Thu Nov 08 2018 Zdenek Dohnal - 2:8.1.513-1 -- patchlevel 513 - -* Thu Nov 08 2018 Zdenek Dohnal - 2:8.1.511-2 -- fix #1646183 properly - we need to conflict with vim-enhanced, not vim-common - -* Mon Nov 05 2018 Zdenek Dohnal - 2:8.1.511-1 -- patchlevel 511 - -* Mon Nov 05 2018 Zdenek Dohnal - 2:8.1.497-2 -- 1646183 - Man file conflict for vim-minimal and vim-enhanced - -* Fri Oct 26 2018 Zdenek Dohnal - 2:8.1.497-1 -- patchlevel 497 - -* Fri Oct 19 2018 Zdenek Dohnal - 2:8.1.483-1 -- patchlevel 483 - -* Fri Oct 19 2018 Zdenek Dohnal - 2:8.1.451-2 -- 1640972 - vimrc/virc should reflect correct augroup - -* Fri Oct 05 2018 Zdenek Dohnal - 2:8.1.451-1 -- patchlevel 451 - -* Wed Oct 03 2018 Zdenek Dohnal - 2:8.1.450-1 -- patchlevel 450 - -* Wed Sep 19 2018 Zdenek Dohnal - 2:8.1.408-1 -- patchlevel 408 -- src/libvterm/src/termscreen.c is missing - -* Fri Sep 07 2018 Zdenek Dohnal - 2:8.1.351-1 -- patchlevel 351 - -* Fri Aug 31 2018 Zdenek Dohnal - 2:8.1.328-2 -- vim-update.sh - F29 got enabled in bodhi - -* Mon Aug 27 2018 Zdenek Dohnal - 2:8.1.328-1 -- patchlevel 328 - -* Wed Aug 15 2018 Zdenek Dohnal - 2:8.1.287-2 -- vim-update.sh - add f29 branch - -* Wed Aug 15 2018 Zdenek Dohnal - 2:8.1.287-1 -- patchlevel 287 - -* Mon Aug 13 2018 Zdenek Dohnal - 2:8.1.279-1 -- patchlevel 279 - -* Fri Aug 10 2018 Zdenek Dohnal - 2:8.1.264-1 -- patchlevel 264 - -* Thu Aug 09 2018 Zdenek Dohnal - 2:8.1.258-1 -- patchlevel 258 - -* Wed Aug 08 2018 Zdenek Dohnal - 2:8.1.254-1 -- patchlevel 254 - -* Mon Aug 06 2018 Zdenek Dohnal - 2:8.1.240-1 -- patchlevel 240 - -* Thu Aug 02 2018 Zdenek Dohnal - 2:8.1.233-1 -- patchlevel 233 - -* Tue Jul 31 2018 Florian Weimer - 2:8.1.229-2 -- Rebuild with fixed binutils - -* Mon Jul 30 2018 Zdenek Dohnal - 2:8.1.229-1 -- patchlevel 229 - -* Fri Jul 27 2018 Zdenek Dohnal - 2:8.1.213-1 -- patchlevel 213 - -* Fri Jul 27 2018 Zdenek Dohnal - 2:8.1.209-2 -- fail if configure option isn't satisfied - -* Wed Jul 25 2018 Zdenek Dohnal - 2:8.1.209-1 -- patchlevel 209 - -* Tue Jul 24 2018 Zdenek Dohnal - 2:8.1.207-2 -- correcting license - -* Mon Jul 23 2018 Zdenek Dohnal - 2:8.1.207-1 -- patchlevel 207 - -* Fri Jul 20 2018 Zdenek Dohnal - 2:8.1.197-1 -- patchlevel 197 - -* Thu Jul 19 2018 Zdenek Dohnal - 2:8.1.189-2 -- 1603272 - vim-X11 doesn't provide the gui when certain devel packages missing from buildroot - -* Mon Jul 16 2018 Zdenek Dohnal - 2:8.1.189-1 -- patchlevel 189 - -* Mon Jul 16 2018 Zdenek Dohnal - 2:8.1.177-3 -- remove disable-gtk3-check configure option - -* Sat Jul 14 2018 Fedora Release Engineering - 2:8.1.177-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed Jul 11 2018 Zdenek Dohnal - 2:8.1.177-1 -- patchlevel 177 - -* Wed Jul 11 2018 Zdenek Dohnal - 2:8.1.119-8 -- add packager and epoch into update script to have better changelog - -* Wed Jul 11 2018 Zdenek Dohnal - 2:8.1.119-7 -- use %%{__python3} macro for defining shebang in python3 tests - -* Tue Jul 10 2018 Zdenek Dohnal - 2:8.1.119-6 -- 1599663 - Conflicting manpages rvi.1.gz and vi.1.gz during update - -* Fri Jul 06 2018 Petr Pisar - 2:8.1.119-5 -- Perl 5.28 rebuild - -* Wed Jul 04 2018 OndÅ™ej LysonÄ›k - 2:8.1.119-4 -- Backport patch 8.1.0121: crash when using ballooneval related to 'vartabstop' -- Resolves: rhbz#1597842 - -* Tue Jul 03 2018 Petr Pisar - 2:8.1.119-3 -- Perl 5.28 rebuild - -* Mon Jul 02 2018 Miro HronÄok - 2:8.1.119-2 -- Rebuilt for Python 3.7 - -* Thu Jun 28 2018 Karsten Hopp 8.1.119-1 -- patchlevel 119 - -* Thu Jun 28 2018 Jitka Plesnikova - 2:8.1.117-2 -- Perl 5.28 rebuild - -* Wed Jun 27 2018 Karsten Hopp 8.1.117-1 -- patchlevel 117 - -* Mon Jun 25 2018 Karsten Hopp 8.1.115-1 -- patchlevel 115 - -* Fri Jun 22 2018 Karsten Hopp 8.1.095-1 -- patchlevel 095 - -* Tue Jun 19 2018 Miro HronÄok - 2:8.1.072-2 -- Rebuilt for Python 3.7 - -* Mon Jun 18 2018 Karsten Hopp 8.1.072-1 -- patchlevel 072 - -* Fri Jun 15 2018 Karsten Hopp 8.1.055-1 -- patchlevel 055 - -* Mon Jun 11 2018 Karsten Hopp 8.1.042-1 -- patchlevel 042 - -* Fri Jun 08 2018 Karsten Hopp 8.1.039-1 -- patchlevel 039 - -* Wed Jun 06 2018 Karsten Hopp 8.1.035-1 -- patchlevel 035 - -* Tue Jun 05 2018 Karsten Hopp 8.1.034-1 -- patchlevel 034 - -* Mon May 28 2018 Karsten Hopp 8.1.026-1 -- patchlevel 026 - -* Thu May 24 2018 Karsten Hopp 8.1.022-1 -- patchlevel 022 - -* Wed May 23 2018 Karsten Hopp 8.1.020-1 -- patchlevel 020 - -* Tue May 22 2018 Karsten Hopp 8.1.016-1 -- patchlevel 016 - -* Mon May 21 2018 Karsten Hopp 8.1.010-1 -- patchlevel 010 - -* Fri May 18 2018 Karsten Hopp 8.1.001-1 -- patchlevel 001 - -* Fri May 18 2018 Zdenek Dohnal - 8.0.1848-2 -- vim-update.sh - update vimdir and baseversion(for major rebases) -- vim-update.sh - enhance debugging of vim-update script - -* Thu May 17 2018 Karsten Hopp 8.0.1848-1 -- patchlevel 1848 - -* Tue May 15 2018 Zdenek Dohnal - 8.0.1842-2 -- do not update F26 anymore - EOL in 2 weeks - -* Tue May 15 2018 Karsten Hopp 8.0.1842-1 -- patchlevel 1842 - -* Tue May 15 2018 Zdenek Dohnal - 8.0.1813-2 -- use environment variable in build phase - -* Fri May 11 2018 Karsten Hopp 8.0.1813-1 -- patchlevel 1813 - -* Fri May 11 2018 Zdenek Dohnal - 8.0.1806-2 -- use python2 and python3 in code - -* Thu May 10 2018 Karsten Hopp 8.0.1806-1 -- patchlevel 1806 - -* Wed May 09 2018 Zdenek Dohnal - 8.0.1789-2 -- 1575354 - suggest more packages for embedded interpreters - -* Fri May 04 2018 Karsten Hopp 8.0.1789-1 -- patchlevel 1789 - -* Thu May 03 2018 Karsten Hopp 8.0.1788-1 -- patchlevel 1788 - -* Wed May 02 2018 Karsten Hopp 8.0.1787-1 -- patchlevel 1787 - -* Fri Apr 27 2018 Karsten Hopp 8.0.1766-1 -- patchlevel 1766 - -* Thu Apr 26 2018 Karsten Hopp 8.0.1765-1 -- patchlevel 1765 - -* Wed Apr 25 2018 Karsten Hopp 8.0.1763-1 -- patchlevel 1763 - -* Tue Apr 24 2018 Karsten Hopp 8.0.1755-1 -- patchlevel 1755 - -* Fri Apr 13 2018 Karsten Hopp 8.0.1704-1 -- patchlevel 1704 - -* Mon Apr 09 2018 Karsten Hopp 8.0.1679-1 -- patchlevel 1679 - -* Fri Apr 06 2018 Zdenek Dohnal - 8.0.1666-2 -- suggests ruby-libs, python2-libs, python3-libs, perl-libs and lua-libs for vim and gvim(bug #1562057) - -* Fri Apr 06 2018 Karsten Hopp 8.0.1666-1 -- patchlevel 1666 - -* Thu Apr 05 2018 Karsten Hopp 8.0.1661-1 -- patchlevel 1661 - -* Fri Mar 23 2018 Karsten Hopp 8.0.1630-1 -- patchlevel 1630 - -* Thu Mar 22 2018 Karsten Hopp 8.0.1626-1 -- patchlevel 1626 - -* Wed Mar 21 2018 Karsten Hopp 8.0.1625-1 -- patchlevel 1625 - -* Wed Mar 14 2018 Karsten Hopp 8.0.1605-1 -- patchlevel 1605 - -* Tue Mar 13 2018 Karsten Hopp 8.0.1603-1 -- patchlevel 1603 - -* Mon Mar 12 2018 Karsten Hopp 8.0.1599-1 -- patchlevel 1599 - -* Fri Mar 09 2018 Karsten Hopp 8.0.1591-1 -- patchlevel 1591 - -* Thu Mar 08 2018 Karsten Hopp 8.0.1589-1 -- patchlevel 1589 - -* Wed Mar 07 2018 Karsten Hopp 8.0.1587-1 -- patchlevel 1587 - -* Tue Mar 06 2018 Zdenek Dohnal - 2:8.0.1573-2 -- vim-update.sh - unify if condition style - -* Tue Mar 06 2018 Karsten Hopp 8.0.1573-1 -- patchlevel 1573 - -* Tue Mar 06 2018 Zdenek Dohnal - 2:8.0.1569-2 -- update spec -- f28 got enabled in bodhi - -* Mon Mar 05 2018 Karsten Hopp 8.0.1569-1 -- patchlevel 1569 - -* Wed Feb 28 2018 Karsten Hopp 8.0.1553-1 -- added Serbian localization files -- patchlevel 1553 - -* Wed Feb 28 2018 Zdenek Dohnal - 2:8.0.1543-2 -- fix vim-update.sh - bodhi update wasn't created - -* Tue Feb 27 2018 Karsten Hopp 8.0.1543-1 -- patchlevel 1543 - -* Mon Feb 26 2018 Zdenek Dohnal - 8.0.1527-3 -- add Provides for vim, gvim and correcting paths to /usr/bin - -* Wed Feb 21 2018 Zdenek Dohnal - 8.0.1527-2 -- adapt vim-update.sh for Fedora 28 and adding check for bodhi enablement - -* Tue Feb 20 2018 Karsten Hopp 8.0.1527-1 -- patchlevel 1527 - -* Mon Feb 19 2018 Zdenek Dohnal - 8.0.1523-2 -- gcc is no longer in buildroot by default -- 1546116 - make vim-filesystem noarch package -- remove %%{_libdir}/vim, because it is unused - -* Mon Feb 19 2018 Karsten Hopp 8.0.1523-1 -- patchlevel 1523 - -* Wed Feb 14 2018 Karsten Hopp 8.0.1520-1 -- patchlevel 1520 - -* Tue Feb 13 2018 Karsten Hopp 8.0.1509-1 -- patchlevel 1509 - -* Mon Feb 12 2018 Karsten Hopp 8.0.1505-1 -- patchlevel 1505 - -* Fri Feb 09 2018 Karsten Hopp 8.0.1478-1 -- patchlevel 1478 - -* Thu Feb 08 2018 Zdenek Dohnal - 8.0.1475-2 -- remove old stuff - -* Wed Feb 07 2018 Karsten Hopp 8.0.1475-1 -- patchlevel 1475 - -* Mon Feb 05 2018 Karsten Hopp 8.0.1473-1 -- patchlevel 1473 - -* Thu Feb 01 2018 Karsten Hopp 8.0.1451-1 -- patchlevel 1451 - -* Mon Jan 29 2018 Karsten Hopp 8.0.1438-1 -- patchlevel 1438 - -* Tue Jan 23 2018 Zdenek Dohnal - 8.0.1428-4 -- throw vim.1.gz out from vim-minimal and other manpages from vim-common -- appdata should be in metainfo folder now - -* Fri Jan 19 2018 Zdenek Dohnal - 8.0.1428-3 -- 1525506 - gvim goes into infinite loop when blink_state is OFF - -* Fri Jan 12 2018 Zdenek Dohnal - 8.0.1428-2 -- removing old icon cache update - -* Wed Jan 03 2018 Karsten Hopp 8.0.1428-1 -- patchlevel 1428 - -* Tue Jan 02 2018 Karsten Hopp 8.0.1427-1 -- patchlevel 1427 - -* Tue Dec 19 2017 Karsten Hopp 8.0.1406-1 -- patchlevel 1406 - -* Mon Dec 18 2017 Karsten Hopp 8.0.1401-1 -- patchlevel 1401 - -* Fri Dec 15 2017 Karsten Hopp 8.0.1390-1 -- patchlevel 1390 - -* Fri Dec 15 2017 Zdenek Dohnal - 8.0.1389-2 -- fixing vim-update.sh - -* Wed Dec 13 2017 Karsten Hopp 8.0.1389-1 -- patchlevel 1389 - -* Tue Dec 12 2017 Karsten Hopp 8.0.1387-1 -- patchlevel 1387 - -* Mon Dec 11 2017 Karsten Hopp 8.0.1386-1 -- patchlevel 1386 - -* Fri Dec 08 2017 Karsten Hopp 8.0.1379-1 -- patchlevel 1379 - -* Wed Dec 06 2017 Karsten Hopp 8.0.1376-1 -- patchlevel 1376 - -* Mon Dec 04 2017 Zdenek Dohnal - 8.0.1367-2 -- fix regexp in vim-update.sh - -* Mon Dec 04 2017 Karsten Hopp 8.0.1367-1 -- patchlevel 1367 - -* Fri Dec 01 2017 Zdenek Dohnal - 8.0.1360-2 -- fix in vim-update.sh - -* Fri Dec 01 2017 Karsten Hopp 8.0.1360-1 -- patchlevel 1360 - -* Fri Dec 01 2017 Zdenek Dohnal - 8.0.1359-3 -- rewrite vim-update to update from the newest branch to the oldest - -* Thu Nov 30 2017 Zdenek Dohnal - 8.0.1359-2 -- 1508629 - missing full path and safe guards in file triggers in -common - -* Thu Nov 30 2017 Karsten Hopp 8.0.1359-1 -- patchlevel 1359 - -* Wed Nov 29 2017 Karsten Hopp 8.0.1358-1 -- patchlevel 1358 -- fix error in vim-update.sh - -* Tue Nov 28 2017 Karsten Hopp 8.0.1351-1 -- patchlevel 1351 - -* Mon Nov 27 2017 Karsten Hopp 8.0.1349-1 -- patchlevel 1349 - -* Mon Nov 27 2017 Zdenek Dohnal - 8.0.1330-2 -- removing vim-8.0-beval-pro.patch and stop updating f25 - -* Wed Nov 22 2017 Karsten Hopp 8.0.1330-1 -- patchlevel 1330 - -* Tue Nov 21 2017 Karsten Hopp 8.0.1326-1 -- patchlevel 1326 - -* Mon Nov 20 2017 Karsten Hopp 8.0.1322-1 -- patchlevel 1322 - -* Fri Nov 10 2017 Karsten Hopp 8.0.1283-1 -- patchlevel 1283 - -* Tue Nov 07 2017 Karsten Hopp 8.0.1274-1 -- patchlevel 1274 - -* Mon Nov 06 2017 Karsten Hopp 8.0.1272-1 -- patchlevel 1272 - -* Fri Nov 03 2017 Karsten Hopp 8.0.1257-1 -- patchlevel 1257 - -* Wed Nov 01 2017 Karsten Hopp 8.0.1241-1 -- patchlevel 1241 - -* Tue Oct 31 2017 Karsten Hopp 8.0.1240-1 -- patchlevel 1240 - -* Mon Oct 30 2017 Karsten Hopp 8.0.1238-1 -- patchlevel 1238 - -* Fri Oct 27 2017 Karsten Hopp 8.0.1226-1 -- patchlevel 1226 - -* Thu Oct 26 2017 Zdenek Dohnal - 8.0.1216-2 -- mention GVim in Summary and Description of vim-x11 subpackage - -* Wed Oct 25 2017 Karsten Hopp 8.0.1216-1 -- patchlevel 1216 - -* Mon Oct 23 2017 Karsten Hopp 8.0.1213-1 -- patchlevel 1213 - -* Fri Oct 20 2017 Karsten Hopp 8.0.1207-1 -- patchlevel 1207 - -* Mon Oct 16 2017 Karsten Hopp 8.0.1203-1 -- patchlevel 1203 - -* Fri Oct 13 2017 Karsten Hopp 8.0.1187-1 -- patchlevel 1187 - -* Mon Oct 09 2017 Karsten Hopp 8.0.1184-1 -- patchlevel 1184 - -* Fri Oct 06 2017 Karsten Hopp 8.0.1176-1 -- patchlevel 1176 - -* Thu Oct 05 2017 Karsten Hopp 8.0.1175-1 -- patchlevel 1175 - -* Tue Oct 03 2017 Karsten Hopp 8.0.1173-1 -- patchlevel 1173 - -* Mon Oct 02 2017 Karsten Hopp 8.0.1171-1 -- patchlevel 1171 - -* Wed Sep 27 2017 Karsten Hopp 8.0.1155-1 -- patchlevel 1155 - -* Tue Sep 26 2017 Zdenek Dohnal - 8.0.1144-2 -- removing README.patches - -* Mon Sep 25 2017 Karsten Hopp 8.0.1144-1 -- patchlevel 1144 - -* Fri Sep 22 2017 Karsten Hopp 8.0.1132-1 -- patchlevel 1132 - -* Wed Sep 20 2017 Zdenek Dohnal - 8.0.1129-2 -- vim-update.sh - update was in bad form - -* Wed Sep 20 2017 Karsten Hopp 8.0.1129-1 -- patchlevel 1129 - -* Wed Sep 20 2017 Zdenek Dohnal - 8.0.1127-2 -- vim-update.sh - update script tried to push for previous version - -* Tue Sep 19 2017 Karsten Hopp 8.0.1127-1 -- patchlevel 1127 - -* Tue Sep 19 2017 Zdenek Dohnal - 8.0.1123-2 -- vim-update.sh - fixing bug with submiting update (update got submitted for previous version) - -* Mon Sep 18 2017 Karsten Hopp 8.0.1123-1 -- patchlevel 1123 - -* Thu Sep 14 2017 Karsten Hopp 8.0.1102-1 -- vim-update.sh - add test for succesful build and fixing grepping of update's list -- patchlevel 1102 - -* Wed Sep 13 2017 Karsten Hopp 8.0.1098-1 -- editing vim-update.sh - check updates for newer releases and create update -- patchlevel 1098 - -* Tue Sep 12 2017 Karsten Hopp 8.0.1097-1 -- patchlevel 1097 -- editing vim-update.sh - wrong condition for checking fedkpg push return value - -* Mon Sep 11 2017 Karsten Hopp 8.0.1092-1 -- editing vim-update.sh for building package -- patchlevel 1092 -- 1487175 - VIm conflicts in man pages - -* Fri Sep 08 2017 Zdenek Dohnal - 8.0.1071-2 -- fixing merge and push in vim-update.sh - -* Fri Sep 08 2017 Karsten Hopp 8.0.1071-1 -- patchlevel 1071 - -* Fri Sep 08 2017 Zdenek Dohnal - 8.0.1067-2 -- editing vim-update.sh to do whole update automatically - -* Thu Sep 07 2017 Karsten Hopp 8.0.1067-1 -- patchlevel 1067 - -* Wed Sep 06 2017 Karsten Hopp 8.0.1064-1 -- patchlevel 1064 - -* Tue Sep 05 2017 Karsten Hopp 8.0.1056-1 -- patchlevel 1056 - -* Mon Sep 04 2017 Karsten Hopp 8.0.1052-1 -- patchlevel 1052 - -* Fri Sep 01 2017 Karsten Hopp 8.0.1030-1 -- patchlevel 1030 - -* Thu Aug 24 2017 Karsten Hopp 8.0.992-1 -- patchlevel 992 - -* Wed Aug 23 2017 Karsten Hopp 8.0.987-1 -- patchlevel 987 - -* Tue Aug 22 2017 Karsten Hopp 8.0.983-1 -- patchlevel 983 - -* Fri Aug 18 2017 Karsten Hopp 8.0.956-1 -- patchlevel 956 - -* Tue Aug 15 2017 Karsten Hopp 8.0.946-1 -- patchlevel 946 - -* Mon Aug 14 2017 Karsten Hopp 8.0.938-1 -- patchlevel 938 - -* Fri Aug 11 2017 Karsten Hopp 8.0.896-1 -- patchlevel 896 - -* Thu Aug 10 2017 Karsten Hopp 8.0.895-1 -- patchlevel 895 - -* Wed Aug 09 2017 Karsten Hopp 8.0.893-1 -- patchlevel 893 - -* Wed Aug 09 2017 Zdenek Dohnal 8.0.891-2 -- editing vim-update.sh - now it takes branch name as argument for switching and run mockbuild - -* Tue Aug 08 2017 Karsten Hopp 8.0.891-1 -- patchlevel 891 - -* Mon Aug 07 2017 Karsten Hopp 8.0.885-1 -- patchlevel 885 - -* Thu Aug 03 2017 Fedora Release Engineering - 2:8.0.844-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Thu Aug 03 2017 Karsten Hopp 8.0.844-1 -- patchlevel 844 - -* Tue Aug 01 2017 Karsten Hopp 8.0.826-1 -- patchlevel 826 - -* Mon Jul 31 2017 Karsten Hopp 8.0.823-1 -- patchlevel 823 - -* Thu Jul 27 2017 Fedora Release Engineering - 2:8.0.739-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Jul 21 2017 Karsten Hopp 8.0.739-1 -- patchlevel 739 - -* Thu Jul 20 2017 Karsten Hopp 8.0.738-1 -- patchlevel 738 - -* Wed Jul 19 2017 Karsten Hopp 8.0.730-1 -- patchlevel 730 - -* Tue Jul 18 2017 Karsten Hopp 8.0.728-1 -- patchlevel 728 - -* Thu Jul 13 2017 Karsten Hopp 8.0.711-1 -- patchlevel 711 - -* Tue Jul 11 2017 Karsten Hopp 8.0.705-1 -- patchlevel 705 - -* Fri Jun 30 2017 Karsten Hopp 8.0.691-1 -- patchlevel 691 - -* Thu Jun 29 2017 Karsten Hopp 8.0.688-1 -- patchlevel 688 - -* Thu Jun 29 2017 Zdenek Dohnal - 8.0.685-3 -- update python dependencies accordingly Fedora Guidelines for Python (python-devel -> python2-devel) - -* Wed Jun 28 2017 Karsten Hopp 8.0.685-1 -- patchlevel 685 - -* Mon Jun 26 2017 Karsten Hopp 8.0.679-1 -- patchlevel 679 - -* Fri Jun 23 2017 Karsten Hopp 8.0.662-1 -- patchlevel 662 - -* Tue Jun 20 2017 Karsten Hopp 8.0.648-1 -- patchlevel 648 - -* Mon Jun 19 2017 Karsten Hopp 8.0.647-1 -- patchlevel 647 - -* Thu Jun 15 2017 Karsten Hopp 8.0.642-1 -- patchlevel 642 - -* Mon Jun 12 2017 Karsten Hopp 8.0.636-1 -- patchlevel 636, removing perl ftbfs patch - -* Fri Jun 09 2017 Karsten Hopp 8.0.628-1 -- patchlevel 628 - -* Wed Jun 07 2017 Jitka Plesnikova - 2:8.0.627-2 -- Perl 5.26 re-rebuild of bootstrapped packages - -* Wed Jun 07 2017 Karsten Hopp 8.0.627-1 -- patchlevel 627 - -* Mon Jun 05 2017 Karsten Hopp 8.0.617-1 -- patchlevel 617 - -* Sun Jun 04 2017 Jitka Plesnikova - 2:8.0.606-3 -- Perl 5.26 rebuild - -* Mon May 29 2017 Zdenek Dohnal - 2:8.0.606-2 -- 1456455 - vim-8.0.600-1.fc27 FTBFS with Perl 5.26.0 - -* Mon May 29 2017 Karsten Hopp 8.0.606-1 -- patchlevel 606 - -* Thu May 25 2017 Karsten Hopp 8.0.604-1 -- patchlevel 604 - -* Fri May 19 2017 Karsten Hopp 8.0.600-1 -- patchlevel 600 - -* Wed May 17 2017 Karsten Hopp 8.0.599-1 -- patchlevel 599 - -* Tue May 16 2017 Karsten Hopp 8.0.598-1 -- patchlevel 598 - -* Mon May 15 2017 Karsten Hopp 8.0.597-1 -- patchlevel 597 - -* Tue May 02 2017 Karsten Hopp 8.0.596-1 -- patchlevel 596 - -* Mon Apr 24 2017 Karsten Hopp 8.0.586-1 -- patchlevel 586 - -* Tue Apr 18 2017 Karsten Hopp 8.0.566-1 -- patchlevel 566 - -* Thu Apr 13 2017 Karsten Hopp 8.0.563-1 -- patchlevel 563 - -* Tue Apr 11 2017 Karsten Hopp 8.0.562-1 -- patchlevel 562 - -* Mon Apr 10 2017 Karsten Hopp 8.0.559-1 -- patchlevel 559 - -* Thu Apr 06 2017 Karsten Hopp 8.0.543-1 -- patchlevel 543 - -* Mon Apr 03 2017 Karsten Hopp 8.0.540-1 -- patchlevel 540 - -* Fri Mar 31 2017 Karsten Hopp 8.0.529-1 -- patchlevel 529 - -* Thu Mar 30 2017 Karsten Hopp 8.0.525-1 -- patchlevel 525 - -* Wed Mar 29 2017 Karsten Hopp 8.0.517-1 -- patchlevel 517 -- enhance rhbz#1436124 - -* Tue Mar 28 2017 Karsten Hopp 8.0.515-1 -- patchlevel 515 - -* Mon Mar 27 2017 Karsten Hopp 8.0.514-1 -- patchlevel 514 -- 1436124 - VIM chooses ft=bindzone for sudoedit /etc/named.conf - -* Fri Mar 24 2017 Karsten Hopp 8.0.503-1 -- patchlevel 503 - -* Wed Mar 22 2017 Karsten Hopp 8.0.502-1 -- patchlevel 502 - -* Tue Mar 21 2017 Karsten Hopp 8.0.497-1 -- patchlevel 497 - -* Mon Mar 20 2017 Karsten Hopp 8.0.494-1 -- patchlevel 494 - -* Wed Mar 15 2017 Karsten Hopp 8.0.458-1 -- patchlevel 458 - -* Tue Mar 14 2017 Karsten Hopp 8.0.456-1 -- patchlevel 456 - -* Fri Mar 10 2017 Karsten Hopp 8.0.442-1 -- patchlevel 442 - -* Wed Mar 08 2017 Karsten Hopp 8.0.430-1 -- patchlevel 430 - -* Tue Mar 07 2017 Karsten Hopp 8.0.427-1 -- patchlevel 427 - -* Mon Mar 06 2017 Karsten Hopp 8.0.425-1 -- patchlevel 425 - -* Fri Mar 03 2017 Karsten Hopp 8.0.402-1 -- patchlevel 402 - -* Thu Mar 02 2017 Karsten Hopp 8.0.398-1 -- patchlevel 398 - -* Wed Mar 01 2017 Karsten Hopp 8.0.388-1 -- patchlevel 388 - -* Tue Feb 28 2017 Karsten Hopp 8.0.386-1 -- patchlevel 386 - -* Mon Feb 27 2017 Karsten Hopp 8.0.381-1 -- patchlevel 381 - -* Fri Feb 24 2017 Karsten Hopp 8.0.363-1 -- patchlevel 363 -- removing vim-8.0-gtk-render.patch - -* Fri Feb 24 2017 Karsten Hopp 8.0.347-1 -- patchlevel 347 -- 1405234 - Gvim fails to properly render after Openbox desktop switch -- 1426296 - vim: FTBFS with python3-3.6.0-18.fc26 - -* Tue Feb 21 2017 Karsten Hopp 8.0.344-1 -- patchlevel 344 - -* Mon Feb 20 2017 Karsten Hopp 8.0.342-1 -- patchlevel 342 - -* Thu Feb 16 2017 Zdenek Dohnal 8.0.329-1 -- 1422833 - Syntax error in tex.vim: missing bracket - -* Mon Feb 13 2017 Karsten Hopp 8.0.329-1 -- patchlevel 329 - -* Fri Feb 10 2017 Karsten Hopp 8.0.324-1 -- patchlevel 324 - -* Thu Feb 09 2017 Karsten Hopp 8.0.318-1 -- patchlevel 318 - -* Tue Feb 07 2017 Karsten Hopp 8.0.314-1 -- patchlevel 314, added screenshot to appdata and testing validity of appdata.xml - -* Mon Feb 06 2017 Karsten Hopp 8.0.311-1 -- patchlevel 311 - -* Fri Feb 03 2017 Karsten Hopp 8.0.297-1 -- patchlevel 297 - -* Wed Feb 01 2017 Karsten Hopp 8.0.275-1 -- patchlevel 275 - -* Tue Jan 31 2017 Karsten Hopp 8.0.273-1 -- patchlevel 273 - -* Mon Jan 30 2017 Karsten Hopp 8.0.271-1 -- patchlevel 271 - -* Thu Jan 26 2017 Karsten Hopp 8.0.238-1 -- patchlevel 238 - -* Thu Jan 19 2017 Karsten Hopp 8.0.206-1 -- patchlevel 206 - -* Tue Jan 17 2017 Karsten Hopp 8.0.197-1 -- patchlevel 197 -- update runtime files - -* Mon Jan 16 2017 Karsten Hopp 8.0.194-1 -- patchlevel 194 - -* Fri Jan 13 2017 Karsten Hopp 8.0.176-1 -- patchlevel 176 - -* Thu Jan 12 2017 Karsten Hopp 8.0.172-1 -- patchlevel 172 - -* Wed Jan 11 2017 Karsten Hopp 8.0.170-1 -- patchlevel 170 - -* Mon Jan 09 2017 Karsten Hopp 8.0.160-1 -- patchlevel 160 - -* Tue Jan 03 2017 Karsten Hopp 8.0.142-1 -- patchlevel 142 - -* Mon Dec 19 2016 Zdenek Dohnal - 2:8.0.134-2 -- f24->f25 vim: copy paste no longer works (bug #1401410) - fixing error in prep - -* Mon Dec 19 2016 Zdenek Dohnal - 2:8.0.134-2 -- f24->f25 vim: copy paste no longer works (bug #1401410) - deleting mouse setting block from defaults.vim - -* Mon Dec 19 2016 Karsten Hopp 8.0.134-1 -- patchlevel 134 -- f24->f25 vim: copy paste no longer works (bug #1401410) - revert previous changes, set mouse=v in defaults.vim - -* Thu Dec 15 2016 Zdenek Dohnal - 2:8.0.133-2 -- f24->f25 vim: copy paste no longer works (bug #1401410) - change mouse default setting to 'v' - -* Thu Dec 15 2016 Karsten Hopp - 8.0.133-2 -- fix fstab syntax highlighting (rhbz#1365258) - -* Mon Dec 12 2016 Karsten Hopp 8.0.133-1 -- patchlevel 133 - -* Mon Dec 05 2016 Zdenek Dohnal - 2:8.0.124-2 -- add new sources - -* Mon Dec 05 2016 Karsten Hopp 8.0.124-1 -- patchlevel 124 - -* Fri Dec 02 2016 Karsten Hopp 8.0.118-1 -- patchlevel 118 - -* Mon Nov 28 2016 Zdenek Dohnal - 2:8.0.104-2 -- do not ship vim.desktop - -* Mon Nov 28 2016 Karsten Hopp 8.0.104-1 -- patchlevel 104 - -* Thu Nov 24 2016 Karsten Hopp 8.0.095-1 -- patchlevel 095 - -* Thu Nov 24 2016 Karsten Hopp 8.0.095-1 -- patchlevel 095 - -* Thu Nov 24 2016 Karsten Hopp 8.0.095-1 -- patchlevel 095 - -* Thu Nov 24 2016 Karsten Hopp 8.0.095-2 -- disable download of spec.vim, main sources are newer - -* Tue Nov 22 2016 Karsten Hopp 8.0.095-1 -- patchlevel 095 - -* Mon Nov 21 2016 Karsten Hopp 8.0.094-1 -- patchlevel 094 - -* Wed Nov 16 2016 Karsten Hopp 8.0.086-1 -- patchlevel 086 - -* Tue Nov 15 2016 Karsten Hopp 8.0.085-1 -- patchlevel 085 - -* Mon Nov 14 2016 Karsten Hopp 8.0.084-1 -- patchlevel 084 - -* Mon Nov 14 2016 Zdenek Dohnal - 8.0.070-1 -- patchlevel 070 - -* Mon Nov 14 2016 Karsten Hopp 8.0.000-1 -- patchlevel 000 - -* Wed Nov 09 2016 Karsten Hopp 8.0.057-1 -- patchlevel 057 - -* Mon Nov 07 2016 Vít Ondruch - 8.0.037-2 -- Add RPM file triggers support. - -* Wed Oct 19 2016 Karsten Hopp 8.0.037-1 -- patchlevel 037 - -* Wed Oct 19 2016 Karsten Hopp 8.0.018-1 -- switch to gtk3 - -* Thu Oct 06 2016 Karsten Hopp 8.0.018-1 -- patchlevel 018 - -* Tue Sep 13 2016 Karsten Hopp 8.0.003-1 -- patchlevel 003 - -* Wed Sep 07 2016 Karsten Hopp 7.4.2342-1 -- patchlevel 2342 - -* Mon Sep 05 2016 Karsten Hopp 7.4.2330-1 -- patchlevel 2330 - -* Thu Aug 04 2016 Karsten Hopp 7.4.1989-2 -- redo patches, some upstream updates broke them - -* Tue Jul 05 2016 Karsten Hopp 7.4.1989-1 -- patchlevel 1989 - -* Mon Jul 04 2016 Karsten Hopp 7.4.1988-1 -- patchlevel 1988 - -* Thu Jun 02 2016 Karsten Hopp 7.4.1868-1 -- patchlevel 1868 - -* Wed May 25 2016 Karsten Hopp 7.4.1842-1 -- patchlevel 1842 - -* Tue May 24 2016 Karsten Hopp - 7.4.1835-2 -- compile perl support as a dynamic module (rhbz#1327755) - -* Tue May 24 2016 Karsten Hopp 7.4.1835-1 -- patchlevel 1835 - -* Tue May 24 2016 Karsten Hopp - 7.4.1830-3 -- mv vim.sh and vim.csh to source files -- sh profile.d improvements: don't leak $ID, don't fail on nounset - (rhbz#1339106 Ville Skyttä) - -* Sun May 15 2016 Jitka Plesnikova - 2:7.4.1830-2 -- Perl 5.24 rebuild - -* Fri May 13 2016 Karsten Hopp 7.4.1830-1 -- patchlevel 1830 - -* Mon May 02 2016 Karsten Hopp 7.4.1816-1 -- patchlevel 1816 - -* Fri Apr 29 2016 Karsten Hopp - 7.4.1797-3 -- use uncompressed help files. vimtutor and vi will access those when - vim-common is installed. (rhbz#1262182) - No hard requirement vim-minimal -> vim-common added, to allow minimal - installations - -* Fri Apr 29 2016 Karsten Hopp - 7.4.1797-2 -- merge git branches and rebuild - -* Fri Apr 29 2016 Karsten Hopp 7.4.1797-1 -- patchlevel 1797 - -* Tue Apr 26 2016 Karsten Hopp 7.4.1786-1 -- patchlevel 1786 - -* Tue Apr 26 2016 Karsten Hopp - 7.4.1775-2 -- fix error in spec.vim (rhbz#1318991) - -* Mon Apr 25 2016 Karsten Hopp - 7.4.1320-2 -- update ftplugin/spec.vim, syntax/spec.vim (rhbz#1297746) - -* Fri Apr 22 2016 Karsten Hopp 7.4.1775-1 -- patchlevel 1775 - -* Tue Apr 12 2016 Karsten Hopp - 7.4.1718-2 -- add vimfiles_root macro (rhbz#844975) -- add %%_libdir/vim directory for plugins (rhbz#1193230) -- vi, rvi, rview, ex, view don't read vimrc anymore. They use virc instead - (rhbz#1045815) -- fix dates in changelogs when spec.vim is used and locale != 'C' - -* Fri Apr 08 2016 Karsten Hopp 7.4.1718-1 -- patchlevel 1718 - -* Tue Mar 15 2016 Karsten Hopp 7.4.1570-1 -- patchlevel 1570 - -* Wed Feb 17 2016 Karsten Hopp 7.4.1344-1 -- patchlevel 1344 - -* Mon Feb 15 2016 Karsten Hopp 7.4.1320-1 -- patchlevel 1320 - -* Sun Feb 14 2016 Karsten Hopp 7.4.1317-1 -- patchlevel 1317 - -* Sat Feb 13 2016 Karsten Hopp 7.4.1308-1 -- patchlevel 1308 - -* Fri Feb 12 2016 Karsten Hopp 7.4.1304-1 -- patchlevel 1304 - -* Thu Feb 11 2016 Karsten Hopp 7.4.1301-1 -- patchlevel 1301 - -* Wed Feb 10 2016 Karsten Hopp 7.4.1297-1 -- patchlevel 1297 - -* Tue Feb 09 2016 Karsten Hopp 7.4.1293-1 -- patchlevel 1293 - -* Mon Feb 08 2016 Karsten Hopp 7.4.1290-1 -- patchlevel 1290 - -* Sun Feb 07 2016 Karsten Hopp 7.4.1273-1 -- patchlevel 1273 - -* Sat Feb 06 2016 Karsten Hopp 7.4.1265-1 -- patchlevel 1265 - -* Fri Feb 05 2016 Fedora Release Engineering - 2:7.4.1229-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Mon Feb 01 2016 Karsten Hopp 7.4.1229-1 -- patchlevel 1229 - -* Sat Jan 23 2016 Karsten Hopp 7.4.1153-1 -- patchlevel 1153 - -* Fri Jan 22 2016 Karsten Hopp 7.4.1152-1 -- patchlevel 1152 - -* Thu Jan 21 2016 Karsten Hopp 7.4.1147-1 -- patchlevel 1147 - -* Wed Jan 20 2016 Karsten Hopp 7.4.1143-1 -- patchlevel 1143 - -* Tue Jan 19 2016 Karsten Hopp 7.4.1142-1 -- patchlevel 1142 - -* Tue Jan 19 2016 Karsten Hopp 7.4.1131-1 -- patchlevel 1131 - -* Mon Jan 18 2016 Karsten Hopp 7.4.1129-1 -- patchlevel 1129 - -* Sun Jan 17 2016 Karsten Hopp 7.4.1112-1 -- patchlevel 1112 - -* Sat Jan 16 2016 Karsten Hopp 7.4.1101-1 -- patchlevel 1101 - -* Fri Jan 15 2016 Karsten Hopp 7.4.1090-1 -- patchlevel 1090 - -* Wed Jan 13 2016 Karsten Hopp 7.4.1089-1 -- patchlevel 1089 - -* Tue Jan 12 2016 Karsten Hopp - 7.4.1087-2 -- fix ssh syntax files -- fix %%global in spec.vim (rhbz#1058041) - -* Mon Jan 11 2016 Karsten Hopp 7.4.1087-1 -- patchlevel 1087 - -* Sun Dec 20 2015 Karsten Hopp 7.4.979-1 -- patchlevel 979 - -* Fri Dec 18 2015 Karsten Hopp 7.4.977-1 -- patchlevel 977 - -* Mon Dec 14 2015 Karsten Hopp 7.4.972-1 -- patchlevel 972 - -* Sun Dec 13 2015 Karsten Hopp 7.4.970-1 -- patchlevel 970 - -* Sat Dec 12 2015 Karsten Hopp 7.4.969-1 -- patchlevel 969 - -* Mon Dec 07 2015 Karsten Hopp 7.4.963-1 -- patchlevel 963 - -* Sun Dec 06 2015 Karsten Hopp 7.4.962-1 -- patchlevel 962 - -* Fri Dec 04 2015 Karsten Hopp 7.4.960-1 -- patchlevel 960 - -* Wed Dec 02 2015 Karsten Hopp 7.4.947-1 -- patchlevel 947 - -* Tue Dec 01 2015 Karsten Hopp 7.4.945-1 -- patchlevel 945 - -* Mon Nov 30 2015 Karsten Hopp 7.4.944-1 -- patchlevel 944 - -* Thu Nov 26 2015 Karsten Hopp 7.4.942-1 -- patchlevel 942 - -* Wed Nov 25 2015 Karsten Hopp 7.4.941-1 -- patchlevel 941 - -* Mon Nov 23 2015 Karsten Hopp 7.4.936-1 -- patchlevel 936 - -* Sun Nov 22 2015 Karsten Hopp 7.4.934-1 -- patchlevel 934 - -* Fri Nov 20 2015 Karsten Hopp 7.4.930-1 -- patchlevel 930 - -* Wed Nov 11 2015 Karsten Hopp 7.4.922-1 -- patchlevel 922 - -* Tue Nov 10 2015 Karsten Hopp 7.4.917-1 -- patchlevel 917 - -* Wed Nov 04 2015 Karsten Hopp 7.4.909-1 -- patchlevel 909 -- Fedora vim now uses tarballs created from upstream git instead - of just upstream patches. Now runtime files will have fixes, too. - -* Tue Nov 03 2015 Karsten Hopp 7.4.908-1 -- patchlevel 908 - -* Mon Nov 02 2015 Karsten Hopp 7.4.903-1 -- patchlevel 903 - -* Sat Oct 31 2015 Karsten Hopp 7.4.902-1 -- patchlevel 902 - -* Mon Oct 26 2015 Karsten Hopp 7.4.900-1 -- patchlevel 900 - -* Wed Oct 14 2015 Karsten Hopp 7.4.898-1 -- patchlevel 898 - -* Thu Oct 08 2015 Karsten Hopp 7.4.891-1 -- patchlevel 891 - -* Wed Oct 07 2015 Karsten Hopp 7.4.890-1 -- patchlevel 890 - -* Wed Sep 30 2015 Karsten Hopp 7.4.889-1 -- patchlevel 889 - -* Sat Sep 26 2015 Karsten Hopp 7.4.884-1 -- patchlevel 884 - -* Tue Sep 22 2015 Karsten Hopp 7.4.873-2 -- fix garbled xxd manpage in Japanese locale (bugzilla #1035606), Masayuki Oshima - -* Tue Sep 22 2015 Karsten Hopp 7.4.873-1 -- add Provides: mergetool for bugzilla #990444 - -* Fri Sep 18 2015 Karsten Hopp 7.4.873-1 -- patchlevel 873 - -* Wed Sep 16 2015 Karsten Hopp 7.4.871-1 -- patchlevel 871 - -* Thu Sep 10 2015 Karsten Hopp 7.4.865-1 -- patchlevel 865 - -* Wed Sep 09 2015 Karsten Hopp 7.4.861-1 -- patchlevel 861 - -* Wed Sep 02 2015 Karsten Hopp 7.4.854-1 -- patchlevel 854 - -* Fri Aug 28 2015 Karsten Hopp 7.4.843-1 -- patchlevel 843 - -* Thu Aug 27 2015 Karsten Hopp 7.4.841-1 -- patchlevel 841 - -* Wed Aug 26 2015 Karsten Hopp 7.4.838-1 -- patchlevel 838 - -* Wed Aug 19 2015 Karsten Hopp 7.4.827-1 -- patchlevel 827 -- re-enable lua -- enable python3 - -* Fri Jul 10 2015 Lubomir Rintel 7.4.769-3 -- drop forcing background, vim detects this since 7.4.757, rhbz#1159920 - -* Sat Jul 04 2015 Karsten Hopp 7.4.769-1 -- patchlevel 769 - -* Fri Jul 03 2015 Karsten Hopp 7.4.768-1 -- patchlevel 768 - -* Mon Jun 29 2015 Karsten Hopp 7.4.764-1 -- patchlevel 764 - -* Sun Jun 28 2015 Karsten Hopp 7.4.763-1 -- patchlevel 763 - -* Fri Jun 26 2015 Karsten Hopp 7.4.761-1 -- patchlevel 761 - -* Thu Jun 25 2015 Karsten Hopp 7.4.757-1 -- patchlevel 757 - -* Mon Jun 22 2015 Karsten Hopp 7.4.752-1 -- patchlevel 752 - -* Fri Jun 19 2015 Fedora Release Engineering - 2:7.4.737-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed Jun 10 2015 Karsten Hopp 7.4.737-1 -- patchlevel 737 - -* Thu May 14 2015 Karsten Hopp 7.4.729-1 -- patchlevel 729 - -* Wed May 06 2015 Karsten Hopp 7.4.728-1 -- patchlevel 728 - -* Tue May 05 2015 Karsten Hopp 7.4.726-1 -- patchlevel 726 - -* Mon May 04 2015 Karsten Hopp 7.4.723-1 -- patchlevel 723 - -* Thu Apr 23 2015 Karsten Hopp 7.4.712-1 -- patchlevel 712 - -* Wed Apr 22 2015 Karsten Hopp 7.4.711-1 -- patchlevel 711 - -* Tue Apr 21 2015 Karsten Hopp 7.4.708-1 -- patchlevel 708 - -* Sat Apr 18 2015 Karsten Hopp 7.4.703-1 -- patchlevel 703 - -* Fri Apr 17 2015 Karsten Hopp 7.4.702-1 -- patchlevel 702 - -* Wed Apr 15 2015 Karsten Hopp 7.4.701-1 -- patchlevel 701 - -* Tue Apr 14 2015 Karsten Hopp 7.4.699-1 -- patchlevel 699 - -* Mon Apr 13 2015 Karsten Hopp 7.4.698-1 -- patchlevel 698 - -* Fri Apr 10 2015 Karsten Hopp 7.4.692-1 -- patchlevel 692 - -* Sat Apr 04 2015 Karsten Hopp 7.4.691-1 -- patchlevel 691 - -* Fri Apr 03 2015 Karsten Hopp 7.4.690-1 -- patchlevel 690 - -* Wed Apr 01 2015 Karsten Hopp 7.4.688-1 -- patchlevel 688 - -* Tue Mar 31 2015 Karsten Hopp 7.4.686-1 -- patchlevel 686 - -* Thu Mar 26 2015 Karsten Hopp 7.4.683-1 -- patchlevel 683 - -* Wed Mar 25 2015 Karsten Hopp 7.4.682-1 -- patchlevel 682 - -* Tue Mar 24 2015 Karsten Hopp 7.4.681-1 -- patchlevel 681 - -* Sun Mar 22 2015 Karsten Hopp 7.4.674-1 -- patchlevel 674 - -* Sat Mar 21 2015 Karsten Hopp 7.4.672-1 -- patchlevel 672 - -* Fri Mar 20 2015 Karsten Hopp 7.4.668-1 -- patchlevel 668 - -* Thu Mar 19 2015 Jitka Plesnikova - 7.4.663-3 -- Perl 5.22 rebuild - -* Wed Mar 18 2015 Richard Hughes - 7.4.663-2 -- Add an AppData file for the software center - -* Sat Mar 14 2015 Karsten Hopp 7.4.663-1 -- patchlevel 663 - -* Fri Mar 13 2015 Karsten Hopp 7.4.662-1 -- patchlevel 662 - -* Sun Mar 08 2015 Karsten Hopp 7.4.658-1 -- patchlevel 658 - -* Sat Mar 07 2015 Karsten Hopp 7.4.657-1 -- patchlevel 657 - -* Fri Mar 06 2015 Karsten Hopp 7.4.656-1 -- patchlevel 656 - -* Thu Mar 05 2015 Karsten Hopp 7.4.652-1 -- patchlevel 652 - -* Sat Feb 28 2015 Karsten Hopp 7.4.648-1 -- patchlevel 648 - -* Fri Feb 27 2015 Karsten Hopp 7.4.643-1 -- patchlevel 643 - -* Fri Feb 27 2015 Dave Airlie 7.4.640-4 -- fix vimrc using wrong comment character - -* Thu Feb 26 2015 Karsten Hopp 7.4.640-3 -- bump release - -* Thu Feb 26 2015 Karsten Hopp 7.4.640-2 -- set background to dark in gnome-terminal, rhbz#1159920 - -* Wed Feb 25 2015 Karsten Hopp 7.4.640-1 -- patchlevel 640 - -* Sat Feb 21 2015 Till Maas - 7.4.629-2 -- Rebuilt for Fedora 23 Change - https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code - -* Wed Feb 11 2015 Karsten Hopp 7.4.629-2 -- fix syntax highlighting for some ssh_config sshd_config keywords - -* Wed Feb 11 2015 Karsten Hopp 7.4.629-1 -- patchlevel 629 - -* Fri Feb 06 2015 Karsten Hopp 7.4.622-1 -- patchlevel 622 - -* Thu Feb 05 2015 Karsten Hopp 7.4.621-1 -- patchlevel 621 - -* Wed Feb 04 2015 Karsten Hopp 7.4.618-1 -- patchlevel 618 - -* Tue Feb 03 2015 Karsten Hopp 7.4.615-1 -- patchlevel 615 - -* Wed Jan 28 2015 Karsten Hopp 7.4.608-1 -- patchlevel 608 - -* Tue Jan 27 2015 Karsten Hopp 7.4.604-1 -- patchlevel 604 - -* Fri Jan 23 2015 Karsten Hopp 7.4.591-1 -- patchlevel 591 - -* Wed Jan 21 2015 Karsten Hopp 7.4.589-1 -- patchlevel 589 - -* Tue Jan 20 2015 Karsten Hopp 7.4.586-1 -- patchlevel 586 - -* Sun Jan 18 2015 Karsten Hopp 7.4.582-1 -- patchlevel 582 - -* Thu Jan 15 2015 Karsten Hopp 7.4.580-1 -- patchlevel 580 - -* Wed Jan 14 2015 Karsten Hopp 7.4.576-1 -- patchlevel 576 - -* Mon Jan 12 2015 Karsten Hopp 7.4.567-1 -- use %%make_install in spec-template.new (rhbz#919270) - -* Thu Jan 08 2015 Karsten Hopp 7.4.567-1 -- patchlevel 567 - -* Wed Jan 07 2015 Karsten Hopp 7.4.566-1 -- patchlevel 566 - -* Thu Dec 18 2014 Karsten Hopp 7.4.560-1 -- patchlevel 560 - -* Wed Dec 17 2014 Karsten Hopp 7.4.557-1 -- patchlevel 557 - -* Sun Dec 14 2014 Karsten Hopp 7.4.552-1 -- patchlevel 552 - -* Sat Dec 13 2014 Karsten Hopp 7.4.546-1 -- patchlevel 546 - -* Mon Dec 08 2014 Karsten Hopp 7.4.542-1 -- patchlevel 542 - -* Sun Dec 07 2014 Karsten Hopp 7.4.541-1 -- patchlevel 541 - -* Mon Dec 01 2014 Karsten Hopp 7.4.540-1 -- patchlevel 540 - -* Sun Nov 30 2014 Karsten Hopp 7.4.539-1 -- patchlevel 539 - -* Fri Nov 28 2014 Karsten Hopp 7.4.537-1 -- patchlevel 537 - -* Thu Nov 27 2014 Karsten Hopp 7.4.534-1 -- patchlevel 534 - -* Sun Nov 23 2014 Karsten Hopp 7.4.527-1 -- patchlevel 527 - -* Fri Nov 21 2014 Karsten Hopp 7.4.526-1 -- patchlevel 526 - -* Thu Nov 20 2014 Karsten Hopp 7.4.525-1 -- patchlevel 525 - -* Wed Nov 19 2014 Karsten Hopp 7.4.521-1 -- patchlevel 521 - -* Thu Nov 13 2014 Karsten Hopp 7.4.516-1 -- patchlevel 516 - -* Wed Nov 12 2014 Karsten Hopp 7.4.512-1 -- patchlevel 512 - -* Thu Nov 06 2014 Karsten Hopp 7.4.507-1 -- patchlevel 507 - -* Wed Nov 05 2014 Karsten Hopp 7.4.502-1 -- patchlevel 502 - -* Sat Nov 01 2014 Karsten Hopp 7.4.492-1 -- patchlevel 492 - -* Fri Oct 31 2014 Karsten Hopp 7.4.491-1 -- patchlevel 491 - -* Thu Oct 23 2014 Karsten Hopp 7.4.488-1 -- patchlevel 488 - -* Wed Oct 22 2014 Karsten Hopp 7.4.487-1 -- patchlevel 487 - -* Tue Oct 21 2014 Karsten Hopp 7.4.483-1 -- patchlevel 483 - -* Fri Oct 17 2014 Karsten Hopp 7.4.481-1 -- patchlevel 481 - -* Thu Oct 16 2014 Karsten Hopp 7.4.480-1 -- patchlevel 480 - -* Wed Oct 15 2014 Karsten Hopp 7.4.477-1 -- patchlevel 477 - -* Mon Oct 13 2014 Karsten Hopp 7.4.475-2 -- add support for %%license macro (Petr Å abata) - -* Sat Oct 11 2014 Karsten Hopp 7.4.475-1 -- patchlevel 475 - -* Fri Oct 10 2014 Karsten Hopp 7.4.473-1 -- patchlevel 473 - -* Thu Oct 09 2014 Karsten Hopp 7.4.471-1 -- patchlevel 471 - -* Tue Oct 07 2014 Karsten Hopp 7.4.465-1 -- patchlevel 465 - -* Tue Sep 30 2014 Karsten Hopp 7.4.463-1 -- patchlevel 463 - -* Mon Sep 29 2014 Karsten Hopp 7.4.462-1 -- patchlevel 462 - -* Sat Sep 27 2014 Karsten Hopp 7.4.461-1 -- patchlevel 461 - -* Wed Sep 24 2014 Karsten Hopp 7.4.460-1 -- patchlevel 460 - -* Wed Sep 24 2014 Karsten Hopp 7.4.458-1 -- patchlevel 458 - -* Tue Sep 23 2014 Karsten Hopp 7.4.457-1 -- patchlevel 457 - -* Sat Sep 20 2014 Karsten Hopp 7.4.453-1 -- patchlevel 453 - -* Tue Sep 16 2014 Karsten Hopp 7.4.444-1 -- patchlevel 444 - -* Mon Sep 15 2014 Karsten Hopp 7.4.443-1 -- patchlevel 443 - -* Wed Sep 10 2014 Karsten Hopp 7.4.442-1 -- patchlevel 442 - -* Tue Aug 26 2014 Jitka Plesnikova - 2:7.4.417-2 -- Perl 5.20 rebuild - -* Tue Aug 26 2014 Karsten Hopp 7.4.417-1 -- patchlevel 417 - -* Fri Aug 22 2014 Karsten Hopp 7.4.410-1 -- patchlevel 410 -- xsubpp-path patch is obsolete now - -* Fri Aug 22 2014 Karsten Hopp 7.4.402-3 -- fix help file names - -* Mon Aug 18 2014 Fedora Release Engineering - 2:7.4.402-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - - -* Wed Aug 13 2014 Karsten Hopp 7.4.402-1 -- patchlevel 402 - -* Tue Aug 12 2014 Karsten Hopp 7.4.401-1 -- patchlevel 401 - -* Wed Aug 6 2014 Tom Callaway 2:7.4.373-2 -- fix license handling - -* Tue Jul 22 2014 Karsten Hopp 7.4.373-1 -- patchlevel 373 - -* Sun Jun 08 2014 Fedora Release Engineering - 2:7.4.307-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Tue May 27 2014 Karsten Hopp 7.4.307-1 -- patchlevel 307 - -* Tue Apr 29 2014 Vít Ondruch - 2:7.4.258-2 -- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.1 - -* Wed Apr 16 2014 Karsten Hopp 7.4.258-1 -- patchlevel 258 - -* Mon Apr 07 2014 Karsten Hopp 7.4.253-1 -- patchlevel 253 - -* Wed Mar 12 2014 Karsten Hopp 7.4.204-1 -- patchlevel 204 - -* Mon Feb 24 2014 Karsten Hopp 7.4.192-1 -- patchlevel 192 - -* Tue Feb 18 2014 Karsten Hopp 7.4.182-1 -- patchlevel 182 - -* Tue Feb 18 2014 Karsten Hopp 7.4.179-2 -- enable dynamic lua interpreter - -* Sat Feb 15 2014 Karsten Hopp 7.4.179-1 -- patchlevel 179 - -* Wed Jan 29 2014 Karsten Hopp 7.4.160-1 -- patchlevel 160 - -* Tue Dec 17 2013 Karsten Hopp 7.4.131-1 +* Wed Mar 04 2009 Karsten Hopp 7.2.131-1 - patchlevel 131 -* Wed Nov 20 2013 Karsten Hopp 7.4.094-1 -- patchlevel 094 +* Tue Feb 24 2009 Karsten Hopp 7.2.127-1 +- patchlevel 127 -* Tue Oct 15 2013 Karsten Hopp 7.4.052-1 -- patchlevel 052 +* Mon Feb 23 2009 Karsten Hopp 7.2.124-1 +- patchlevel 124 -* Wed Sep 11 2013 Karsten Hopp 7.4.027-2 -- update vim icons (#1004788) -- check if 'id -u' returns empty string (vim.sh) +* Mon Jan 26 2009 Karsten Hopp 7.2.088-1 +- patchlevel 88 -* Wed Sep 11 2013 Karsten Hopp 7.4.027-1 -- patchlevel 027 +* Thu Jan 08 2009 Karsten Hopp 7.2.079-2 +- patchlevel 79 -* Wed Sep 04 2013 Karsten Hopp 7.4.016-1 -- patchlevel 016 +* Thu Dec 04 2008 Jesse Keating - 7.2.060-2 +- Rebuild for new python. -* Wed Aug 28 2013 Karsten Hopp 7.4.009-1 -- patchlevel 009 - mkdir("foo/bar/", "p") gives an error message - creating a preview window on startup messes up the screen - new regexp engine can't be interrupted - too easy to write a file was not decrypted (yet) +* Mon Dec 01 2008 Karsten Hopp 7.2.060-1 +- patchlevel 60 -* Wed Aug 21 2013 Karsten Hopp 7.4.5-1 -- patchlevel 5 -- when closing a window fails ":bwipe" may hang -- "vaB" while 'virtualedit' is set selects the wrong area +* Mon Nov 10 2008 Karsten Hopp 7.2.032-1 +- patchlevel 32 -* Wed Aug 21 2013 Karsten Hopp 7.4.3-1 -- patchlevel 3, memory access error in Ruby syntax highlighting +* Mon Nov 03 2008 Karsten Hopp 7.2.026-2 +- add more /usr/share/vim/vimfiles directories (#444387) -* Wed Aug 21 2013 Karsten Hopp 7.4.2-1 -- patchlevel 2, pattern with two alternative look-behind matches doesn't match +* Mon Nov 03 2008 Karsten Hopp 7.2.026-1 +- patchlevel 26 +- own some directories in /usr/share/vim/vimfiles (#469491) -* Wed Aug 21 2013 Karsten Hopp 7.4.1-1 -- patchlevel 1, 'ic' doesn't work for patterns such as [a-z] +* Tue Oct 21 2008 Karsten Hopp 7.2.025-2 +- re-enable clean -* Mon Aug 12 2013 Karsten Hopp 7.4.0-1 -- update to vim-7.4 +* Mon Oct 20 2008 Karsten Hopp 7.2.025-1 +- patchlevel 25 +- add Categories tag to desktop file (#226526) +- add requirement on hicolor-icon-theme to vim-X11 (#226526) +- drop Amiga info files (#226526) +- remove non-utf8 man pages (#226526) +- drop Application from categories (#226526) -* Sun Aug 04 2013 Fedora Release Engineering - 2:7.3.1314-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild +* Tue Sep 30 2008 Karsten Hopp 7.2.022-1 +- patchlevel 22 -* Fri Jul 26 2013 Karsten Hopp 7.3.1314-2 -- document gex and vimx in man page -- fix gvimdiff and gvimtutor man page redirects +* Mon Sep 08 2008 Karsten Hopp 7.2.013-1 +- patchlevel 13 -* Wed Jul 17 2013 Petr Pisar - 2:7.3.1314-2 -- Perl 5.18 rebuild +* Mon Aug 25 2008 Karsten Hopp 7.2.006-1 +- patchlevel 6 -* Tue Jul 09 2013 Karsten Hopp 7.3.1314-1 -- patchlevel 1314 +* Mon Aug 18 2008 Karsten Hopp 7.2.002-1 +- patchlevel 2 +- fix specfile template (#446070) +- old specfile changelog moved to Changelog.rpm -* Thu Jul 04 2013 Karsten Hopp 7.3.1293-1 -- patchlevel 1293 - -* Fri Jun 14 2013 Karsten Hopp 7.3.1189-1 -- patchlevel 1189 - -* Tue Jun 04 2013 Karsten Hopp 7.3.1109-1 -- patchlevel 1109 - -* Wed May 22 2013 Karsten Hopp 7.3.1004-1 -- patchlevel 1004 - -* Wed May 22 2013 Karsten Hopp 7.3.1000-1 -- patchlevel 1000 ! - -* Tue May 21 2013 Karsten Hopp 7.3.987-1 -- patchlevel 987 - -* Tue May 21 2013 Karsten Hopp 7.3.944-2 -- consistent use of macros in spec file -- add some links to man pages - -* Tue May 14 2013 Karsten Hopp 7.3.944-1 -- patchlevel 944 - -* Mon May 13 2013 Karsten Hopp 7.3.943-2 -- add BR perl(ExtUtils::ParseXS) - -* Mon May 13 2013 Karsten Hopp 7.3.943-1 -- patchlevel 943 - -* Wed May 08 2013 Karsten Hopp 7.3.931-1 -- patchlevel 931 - -* Wed May 08 2013 Karsten Hopp 7.3.903-1 -- fix ruby version check - -* Fri Apr 19 2013 Karsten Hopp 7.3.903-1 -- drop crv patch -- update 7.3.838 patch, it was broken upstream - -* Mon Apr 15 2013 Karsten Hopp 7.3.903-1 -- patchlevel 903 - -* Mon Feb 18 2013 Karsten Hopp 7.3.822-1 -- patchlevel 822 - -* Fri Feb 15 2013 Toshio Kuratomi - 7.3.797-2 -- Only use --vendor for desktop-file-install on F18 or less - -* Thu Jan 31 2013 Karsten Hopp 7.3.797-1 -- patchlevel 797 - -* Mon Jan 28 2013 Karsten Hopp 7.3.785-1 -- patchlevel 785 - -* Tue Nov 20 2012 Karsten Hopp 7.3.715-1 -- patchlevel 715 - -* Mon Nov 12 2012 Karsten Hopp 7.3.712-1 -- patchlevel 712 - -* Mon Nov 12 2012 Karsten Hopp 7.3.682-2 -- fix vim.csh syntax - -* Tue Oct 23 2012 Karsten Hopp 7.3.712-1 -- patchlevel 712 - -* Mon Oct 15 2012 Karsten Hopp 7.3.691-1 -- patchlevel 691 - -* Fri Oct 05 2012 Karsten Hopp 7.3.682-1 -- patchlevel 682 -- use --enable-rubyinterp=dynamic and --enable-pythoninterp=dynamic - -* Mon Sep 03 2012 Karsten Hopp 7.3.646-1 -- patchlevel 646 - -* Tue Aug 28 2012 Karsten Hopp 7.3.638-2 -- fix some man page typos (#668894, #675480) -- own usr/share/vim/vimfiles/doc/tags (#845564) -- add path to csope database (#844843) - -* Tue Aug 28 2012 Karsten Hopp 7.3.638-1 -- patchlevel 638 +* Fri Aug 14 2008 Karsten Hopp 7.2.000-1 +- vim 7.2 +- drop 330 patches # vim:nrformats-=octal diff --git a/vim72-rh514717.patch b/vim72-rh514717.patch new file mode 100644 index 00000000..e2dafa90 --- /dev/null +++ b/vim72-rh514717.patch @@ -0,0 +1,30 @@ +diff -up vim72/src/eval.c.rh514717 vim72/src/eval.c +--- vim72/src/eval.c.rh514717 2009-08-03 16:15:42.882375154 +0200 ++++ vim72/src/eval.c 2009-08-03 16:34:14.863381780 +0200 +@@ -286,13 +286,12 @@ typedef struct + #define VV_RO 2 /* read-only */ + #define VV_RO_SBX 4 /* read-only in the sandbox */ + +-#define VV_NAME(s, t) s, {{t, 0, {0}}, 0, {0}}, {0} ++#define VV_NAME(s, t) s, {{t, 0, {0}}, 0, {0}} + + static struct vimvar + { + char *vv_name; /* name of variable, without v: */ + dictitem_T vv_di; /* value and name for key */ +- char vv_filler[16]; /* space for LONGEST name below!!! */ + char vv_flags; /* VV_COMPAT, VV_RO, VV_RO_SBX */ + } vimvars[VV_LEN] = + { +diff -up vim72/src/structs.h.rh514717 vim72/src/structs.h +--- vim72/src/structs.h.rh514717 2009-08-03 16:33:35.274870950 +0200 ++++ vim72/src/structs.h 2009-08-03 16:33:48.607436706 +0200 +@@ -1095,7 +1095,7 @@ struct dictitem_S + { + typval_T di_tv; /* type and value of the variable */ + char_u di_flags; /* flags (only used for variable) */ +- char_u di_key[10]; /* key (actually longer!) */ ++ char_u di_key[18]; /* key */ + }; + + typedef struct dictitem_S dictitem_T; diff --git a/vimrc b/vimrc index 4ef9d92d..b02134df 100644 --- a/vimrc +++ b/vimrc @@ -1,51 +1,15 @@ -" When started as "evim", evim.vim will already have done these settings. -if v:progname =~? "evim" - finish +if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" + set fileencodings=ucs-bom,utf-8,latin1 endif -" Use Vim settings, rather than Vi settings (much better!). -" This must be first, because it changes other options as a side effect. -" Avoid side effects when it was already reset. -if &compatible - set nocompatible -endif - -" When the +eval feature is missing, the set command above will be skipped. -" Use a trick to reset compatible only when the +eval feature is missing. -silent! while 0 - set nocompatible -silent! endwhile - -" Allow backspacing over everything in insert mode. -set backspace=indent,eol,start - +set nocompatible " Use Vim defaults (much better!) +set bs=indent,eol,start " allow backspacing over everything in insert mode "set ai " always set autoindenting on "set backup " keep a backup file set viminfo='20,\"50 " read/write a .viminfo file, don't store more " than 50 lines of registers set history=50 " keep 50 lines of command line history set ruler " show the cursor position all the time -set showcmd " display incomplete commands -set wildmenu " display completion matches in a status line - -set ttimeout " time out for key codes -set ttimeoutlen=100 " wait up to 100ms after Esc for special key - -" Show @@@ in the last line if it is truncated. -set display=truncate - -" Show a few lines of context around the cursor. Note that this makes the -" text scroll if you mouse-click near the start or end of the window. -set scrolloff=5 - -" Do incremental searching when it's possible to timeout. -if has('reltime') - set incsearch -endif - -" Do not recognize octal numbers for Ctrl-A and Ctrl-X, most users find it -" confusing. -set nrformats-=octal " Only do this part when compiled with support for autocommands if has("autocmd") @@ -54,21 +18,14 @@ if has("autocmd") " In text files, always limit the width of text to 78 characters " autocmd BufRead *.txt set tw=78 " When editing a file, always jump to the last cursor position - " (taken from Vim's defaults.vim) autocmd BufReadPost * - \ let line = line("'\"") - \ | if line >= 1 && line <= line("$") && &filetype !~# 'commit' - \ && index(['xxd', 'gitrebase', 'tutor'], &filetype) == -1 - \ && !&diff - \ | execute "normal! g`\"" - \ | endif + \ if line("'\"") > 0 && line ("'\"") <= line("$") | + \ exe "normal! g'\"" | + \ endif " don't write swapfile on most commonly used directories for NFS mounts or USB sticks - autocmd BufNewFile,BufReadPre /media/*,/run/media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp + autocmd BufNewFile,BufReadPre /media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp " start with spec file template - " 1724126 - do not open new file with .spec suffix with spec file template - " apparently there are other file types with .spec suffix, so disable the - " template - " autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec + autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec augroup END endif @@ -79,7 +36,7 @@ if has("cscope") && filereadable("/usr/bin/cscope") set nocsverb " add any database in current directory if filereadable("cscope.out") - cs add $PWD/cscope.out + cs add cscope.out " else add database pointed to by environment elseif $CSCOPE_DB != "" cs add $CSCOPE_DB @@ -90,12 +47,7 @@ endif " Switch syntax highlighting on, when the terminal has colors " Also switch on highlighting the last used search pattern. if &t_Co > 2 || has("gui_running") - " Revert with ":syntax off". syntax on - - " I like highlighting strings inside C comments. - " Revert with ":unlet c_comment_strings". - let c_comment_strings=1 set hlsearch endif @@ -107,26 +59,6 @@ if &term=="xterm" set t_Sf=[3%dm endif -" Convenient command to see the difference between the current buffer and the -" file it was loaded from, thus the changes you made. -" Only define it when not defined already. -" Revert with: ":delcommand DiffOrig". -if !exists(":DiffOrig") - command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis - \ | wincmd p | diffthis -endif - -if has('langmap') && exists('+langremap') - " Prevent that the langmap option applies to characters that result from a - " mapping. If set (default), this may break plugins (but it's backward - " compatible). - set nolangremap -endif - " Don't wake up system with blinking cursor: +" http://www.linuxpowertop.org/known.php let &guicursor = &guicursor . ",a:blinkon0" - -" Source a global configuration file if available -if filereadable("/etc/vimrc.local") - source /etc/vimrc.local -endif diff --git a/virc b/virc deleted file mode 100644 index 6d779826..00000000 --- a/virc +++ /dev/null @@ -1,34 +0,0 @@ -if v:lang =~ "utf8$" || v:lang =~ "UTF-8$" - set fileencodings=ucs-bom,utf-8,latin1 -endif - -set nocompatible " Use Vim defaults (much better!) -set bs=indent,eol,start " allow backspacing over everything in insert mode -"set ai " always set autoindenting on -"set backup " keep a backup file -set history=50 " keep 50 lines of command line history -set ruler " show the cursor position all the time - -" Only do this part when compiled with support for autocommands -if has("autocmd") - augroup fedora - autocmd! - " In text files, always limit the width of text to 78 characters - " autocmd BufRead *.txt set tw=78 - " When editing a file, always jump to the last cursor position - autocmd BufReadPost * - \ if line("'\"") > 0 && line ("'\"") <= line("$") | - \ exe "normal! g'\"" | - \ endif - " don't write swapfile on most commonly used directories for NFS mounts or USB sticks - autocmd BufNewFile,BufReadPre /media/*,/run/media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp - " start with spec file template - autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec - augroup END -endif - -if &term=="xterm" - set t_Co=8 - set t_Sb=[4%dm - set t_Sf=[3%dm -endif diff --git a/xxd-locale.patch b/xxd-locale.patch new file mode 100644 index 00000000..615fbee9 --- /dev/null +++ b/xxd-locale.patch @@ -0,0 +1,32 @@ +diff -up vim71/src/xxd/xxd.c.xxd vim71/src/xxd/xxd.c +--- vim71/src/xxd/xxd.c.xxd 2008-07-18 14:21:03.000000000 +0200 ++++ vim71/src/xxd/xxd.c 2008-07-18 14:23:48.000000000 +0200 +@@ -90,6 +90,7 @@ + #if __MWERKS__ && !defined(BEBOX) + # include /* for fdopen() on MAC */ + #endif ++#include + + #if defined(__BORLANDC__) && __BORLANDC__ <= 0x0410 && !defined(fileno) + /* Missing define and prototype grabbed from the BC 4.0 */ +@@ -452,6 +453,11 @@ char *argv[]; + long length = -1, n = 0, seekoff = 0; + char l[LLEN+1]; + char *pname, *pp; ++ char *lang=getenv("LANG"); ++ if(!lang) lang=getenv("LC_ALL"); ++ if(!lang) lang=getenv("LC_CTYPE"); ++ if(lang) ++ setlocale(LC_ALL, lang); + + #ifdef AMIGA + /* This program doesn't work when started from the Workbench */ +@@ -756,7 +762,7 @@ char *argv[]; + #else + (e > 31 && e < 127) + #endif +- ? e : '.'; ++ ? e : isalnum(e) ? e : '.'; + if (e) + nonzero++; + n++; diff --git a/zip.vim b/zip.vim new file mode 100644 index 00000000..af56944c --- /dev/null +++ b/zip.vim @@ -0,0 +1,387 @@ +" zip.vim: Handles browsing zipfiles +" AUTOLOAD PORTION +" Date: Jul 30, 2008 +" Version: 22 +" Maintainer: Charles E Campbell, Jr +" License: Vim License (see vim's :help license) +" Copyright: Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1 +" Permission is hereby granted to use and distribute this code, +" with or without modifications, provided that this copyright +" notice is copied with it. Like anything else that's free, +" zip.vim and zipPlugin.vim are provided *as is* and comes with +" no warranty of any kind, either expressed or implied. By using +" this plugin, you agree that in no event will the copyright +" holder be liable for any damages resulting from the use +" of this software. + +" --------------------------------------------------------------------- +" Load Once: {{{1 +let s:keepcpo= &cpo +set cpo&vim +if &cp || exists("g:loaded_zip") || v:version < 700 + finish +endif + +let g:loaded_zip = "v22" +let s:zipfile_escape = ' ?&;\' +let s:ERROR = 2 +let s:WARNING = 1 +let s:NOTE = 0 + +" --------------------------------------------------------------------- +" Global Values: {{{1 +if !exists("g:zip_shq") + if &shq != "" + let g:zip_shq= &shq + elseif has("unix") + let g:zip_shq= "'" + else + let g:zip_shq= '"' + endif +endif +if !exists("g:zip_zipcmd") + let g:zip_zipcmd= "zip" +endif +if !exists("g:zip_unzipcmd") + let g:zip_unzipcmd= "unzip" +endif + +" ---------------- +" Functions: {{{1 +" ---------------- + +" --------------------------------------------------------------------- +" zip#Browse: {{{2 +fun! zip#Browse(zipfile) +" call Dfunc("zip#Browse(zipfile<".a:zipfile.">)") + let repkeep= &report + set report=10 + + " sanity checks + if !exists("*fnameescape") + if &verbose > 1 + echoerr "the zip plugin is not available (your vim doens't support fnameescape())" + endif + return + endif + if !executable(g:zip_unzipcmd) + redraw! + echohl Error | echo "***error*** (zip#Browse) unzip not available on your system" +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("zip#Browse") + return + endif + if !filereadable(a:zipfile) + if a:zipfile !~# '^\a\+://' + " if its an url, don't complain, let url-handlers such as vim do its thing + redraw! + echohl Error | echo "***error*** (zip#Browse) File not readable<".a:zipfile.">" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + endif + let &report= repkeep +" call Dret("zip#Browse : file<".a:zipfile."> not readable") + return + endif +" call Decho("passed sanity checks") + if &ma != 1 + set ma + endif + let b:zipfile= a:zipfile + + setlocal noswapfile + setlocal buftype=nofile + setlocal bufhidden=hide + setlocal nobuflisted + setlocal nowrap + set ft=tar + + " give header + let lastline= line("$") + call setline(lastline+1,'" zip.vim version '.g:loaded_zip) + call setline(lastline+2,'" Browsing zipfile '.a:zipfile) + call setline(lastline+3,'" Select a file with cursor and press ENTER') + $put ='' + 0d + $ + +" call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1)) + exe "silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1) + if v:shell_error != 0 + redraw! + echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + silent %d + let eikeep= &ei + set ei=BufReadCmd,FileReadCmd + exe "r ".fnameescape(a:zipfile) + let &ei= eikeep + 1d +" call Dret("zip#Browse") + return + endif +" call Decho("line 6: ".getline(6)) + let namecol= stridx(getline(6),'Name') + 1 +" call Decho("namecol=".namecol) + 4,$g/^\s*----/d + 4,$g/^\s*\a/d + $d + if namecol > 0 + exe 'silent 4,$s/^.*\%'.namecol.'c//' + endif + + setlocal noma nomod ro + noremap :call ZipBrowseSelect() + + let &report= repkeep +" call Dret("zip#Browse") +endfun + +" --------------------------------------------------------------------- +" ZipBrowseSelect: {{{2 +fun! s:ZipBrowseSelect() +" call Dfunc("ZipBrowseSelect() zipfile<".b:zipfile."> curfile<".expand("%").">") + let repkeep= &report + set report=10 + let fname= getline(".") + + " sanity check + if fname =~ '^"' + let &report= repkeep +" call Dret("ZipBrowseSelect") + return + endif + if fname =~ '/$' + redraw! + echohl Error | echo "***error*** (zip#Browse) Please specify a file, not a directory" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("ZipBrowseSelect") + return + endif + +" call Decho("fname<".fname.">") + + " get zipfile to the new-window + let zipfile = b:zipfile + let curfile= expand("%") +" call Decho("zipfile<".zipfile.">") +" call Decho("curfile<".curfile.">") + + new + if !exists("g:zip_nomax") || g:zip_nomax == 0 + wincmd _ + endif + let s:zipfile_{winnr()}= curfile +" call Decho("exe e ".fnameescape("zipfile:".zipfile.'::'.fname)) + exe "e ".fnameescape("zipfile:".zipfile.'::'.fname) + filetype detect + + let &report= repkeep +" call Dret("ZipBrowseSelect : s:zipfile_".winnr()."<".s:zipfile_{winnr()}.">") +endfun + +" --------------------------------------------------------------------- +" zip#Read: {{{2 +fun! zip#Read(fname,mode) +" call Dfunc("zip#Read(fname<".a:fname.">,mode=".a:mode.")") + let repkeep= &report + set report=10 + + if has("unix") + let zipfile = substitute(a:fname,'zipfile:\(.\{-}\)::[^\\].*$','\1','') + let fname = substitute(a:fname,'zipfile:.\{-}::\([^\\].*\)$','\1','') + else + let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','') + let fname = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','') + let fname = substitute(fname, '[', '[[]', 'g') + endif +" call Decho("zipfile<".zipfile.">") +" call Decho("fname <".fname.">") + +" call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)) + exe "silent r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1) + + " cleanup + 0d + set nomod + + let &report= repkeep +" call Dret("zip#Read") +endfun + +" --------------------------------------------------------------------- +" zip#Write: {{{2 +fun! zip#Write(fname) +" call Dfunc("zip#Write(fname<".a:fname.">) zipfile_".winnr()."<".s:zipfile_{winnr()}.">") + let repkeep= &report + set report=10 + + " sanity checks + if !executable(g:zip_zipcmd) + redraw! + echohl Error | echo "***error*** (zip#Write) sorry, your system doesn't appear to have the zip pgm" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("zip#Write") + return + endif + if !exists("*mkdir") + redraw! + echohl Error | echo "***error*** (zip#Write) sorry, mkdir() doesn't work on your system" | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + let &report= repkeep +" call Dret("zip#Write") + return + endif + + let curdir= getcwd() + let tmpdir= tempname() +" call Decho("orig tempname<".tmpdir.">") + if tmpdir =~ '\.' + let tmpdir= substitute(tmpdir,'\.[^.]*$','','e') + endif +" call Decho("tmpdir<".tmpdir.">") + call mkdir(tmpdir,"p") + + " attempt to change to the indicated directory + if s:ChgDir(tmpdir,s:ERROR,"(zip#Write) cannot cd to temporary directory") + let &report= repkeep +" call Dret("zip#Write") + return + endif +" call Decho("current directory now: ".getcwd()) + + " place temporary files under .../_ZIPVIM_/ + if isdirectory("_ZIPVIM_") + call s:Rmdir("_ZIPVIM_") + endif + call mkdir("_ZIPVIM_") + cd _ZIPVIM_ +" call Decho("current directory now: ".getcwd()) + + if has("unix") + let zipfile = substitute(a:fname,'zipfile:\(.\{-}\)::[^\\].*$','\1','') + let fname = substitute(a:fname,'zipfile:.\{-}::\([^\\].*\)$','\1','') + else + let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','') + let fname = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','') + endif +" call Decho("zipfile<".zipfile.">") +" call Decho("fname <".fname.">") + + if fname =~ '/' + let dirpath = substitute(fname,'/[^/]\+$','','e') + if executable("cygpath") + let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e') + endif +" call Decho("mkdir(dirpath<".dirpath.">,p)") + call mkdir(dirpath,"p") + endif + if zipfile !~ '/' + let zipfile= curdir.'/'.zipfile + endif +" call Decho("zipfile<".zipfile."> fname<".fname.">") + + exe "w! ".fnameescape(fname) + if executable("cygpath") + let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e') + endif + + if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$' + let fname = substitute(fname, '[', '[[]', 'g') + endif + +" call Decho(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0)) + call system(g:zip_zipcmd." -u ".s:Escape(fnamemodify(zipfile,":p"),0)." ".s:Escape(fname,0)) + if v:shell_error != 0 + redraw! + echohl Error | echo "***error*** (zip#Write) sorry, unable to update ".zipfile." with ".fname | echohl None +" call inputsave()|call input("Press to continue")|call inputrestore() + + elseif s:zipfile_{winnr()} =~ '^\a\+://' + " support writing zipfiles across a network + let netzipfile= s:zipfile_{winnr()} +" call Decho("handle writing <".zipfile."> across network as <".netzipfile.">") + 1split|enew + let binkeep= &binary + let eikeep = &ei + set binary ei=all + exe "e! ".fnameescape(zipfile) + call netrw#NetWrite(netzipfile) + let &ei = eikeep + let &binary = binkeep + q! + unlet s:zipfile_{winnr()} + endif + + " cleanup and restore current directory + cd .. + call s:Rmdir("_ZIPVIM_") + call s:ChgDir(curdir,s:WARNING,"(zip#Write) unable to return to ".curdir."!") + call s:Rmdir(tmpdir) + setlocal nomod + + let &report= repkeep +" call Dret("zip#Write") +endfun + +" --------------------------------------------------------------------- +" s:Escape: {{{2 +fun! s:Escape(fname,isfilt) +" call Dfunc("QuoteFileDir(fname<".a:fname."> isfilt=".a:isfilt.")") + if exists("*shellescape") + if a:isfilt + let qnameq= shellescape(a:fname,1) + else + let qnameq= shellescape(a:fname) + endif + else + let qnameq= g:zip_shq.escape(a:fname,g:zip_shq).g:zip_shq + endif +" call Dret("QuoteFileDir <".qnameq.">") + return qnameq +endfun + +" --------------------------------------------------------------------- +" ChgDir: {{{2 +fun! s:ChgDir(newdir,errlvl,errmsg) +" call Dfunc("ChgDir(newdir<".a:newdir."> errlvl=".a:errlvl." errmsg<".a:errmsg.">)") + + try + exe "cd ".fnameescape(a:newdir) + catch /^Vim\%((\a\+)\)\=:E344/ + redraw! + if a:errlvl == s:NOTE + echo "***note*** ".a:errmsg + elseif a:errlvl == s:WARNING + echohl WarningMsg | echo "***warning*** ".a:errmsg | echohl NONE + elseif a:errlvl == s:ERROR + echohl Error | echo "***error*** ".a:errmsg | echohl NONE + endif +" call inputsave()|call input("Press to continue")|call inputrestore() +" call Dret("ChgDir 1") + return 1 + endtry + +" call Dret("ChgDir 0") + return 0 +endfun + +" --------------------------------------------------------------------- +" s:Rmdir: {{{2 +fun! s:Rmdir(fname) +" call Dfunc("Rmdir(fname<".a:fname.">)") + if (has("win32") || has("win95") || has("win64") || has("win16")) && &shell !~? 'sh$' + call system("rmdir /S/Q ".s:Escape(a:fname,0)) + else + call system("/bin/rm -rf ".s:Escape(a:fname,0)) + endif +" call Dret("Rmdir") +endfun + +" ------------------------------------------------------------------------ +" Modelines And Restoration: {{{1 +let &cpo= s:keepcpo +unlet s:keepcpo +" vim:ts=8 fdm=marker