From a15009eaa8beb2aafff97e28975cd7f192edb480 Mon Sep 17 00:00:00 2001 From: Jesse Keating Date: Sat, 20 Oct 2007 18:46:24 +0000 Subject: [PATCH 1/5] Initialize branch F-8 for vim --- branch | 1 + 1 file changed, 1 insertion(+) create mode 100644 branch diff --git a/branch b/branch new file mode 100644 index 00000000..e9e7ccd3 --- /dev/null +++ b/branch @@ -0,0 +1 @@ +F-8 From 83440b41510f6cff3717c1daa43437bd0f77e07f Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Thu, 10 Jan 2008 10:07:54 +0000 Subject: [PATCH 2/5] - build patchlevel 211 for F-8 --- 7.1.136 | 47 ++++ 7.1.137 | 49 ++++ 7.1.138 | 66 +++++ 7.1.139 | 54 ++++ 7.1.140 | 52 ++++ 7.1.141 | 97 +++++++ 7.1.142 | 77 +++++ 7.1.143 | 54 ++++ 7.1.144 | 46 +++ 7.1.145 | 171 +++++++++++ 7.1.146 | 92 ++++++ 7.1.147 | 75 +++++ 7.1.148 | 73 +++++ 7.1.149 | 180 ++++++++++++ 7.1.150 | 59 ++++ 7.1.151 | 70 +++++ 7.1.152 | 118 ++++++++ 7.1.153 | 143 ++++++++++ 7.1.154 | 52 ++++ 7.1.155 | 53 ++++ 7.1.156 | 121 ++++++++ 7.1.157 | 55 ++++ 7.1.158 | 157 +++++++++++ 7.1.159 | 54 ++++ 7.1.160 | 54 ++++ 7.1.161 | 176 ++++++++++++ 7.1.162 | 172 ++++++++++++ 7.1.163 | 72 +++++ 7.1.164 | 52 ++++ 7.1.165 | 177 ++++++++++++ 7.1.166 | 80 ++++++ 7.1.167 | 80 ++++++ 7.1.168 | 112 ++++++++ 7.1.169 | 75 +++++ 7.1.170 | 58 ++++ 7.1.171 | 79 ++++++ 7.1.172 | 50 ++++ 7.1.173 | 61 ++++ 7.1.174 | 71 +++++ 7.1.175 | 179 ++++++++++++ 7.1.176 | 88 ++++++ 7.1.177 | 193 +++++++++++++ 7.1.178 | 54 ++++ 7.1.179 | 189 +++++++++++++ 7.1.180 | 266 ++++++++++++++++++ 7.1.181 | 62 ++++ 7.1.182 | 169 +++++++++++ 7.1.183 | 99 +++++++ 7.1.184 | 63 +++++ 7.1.185 | 140 +++++++++ 7.1.186 | 111 ++++++++ 7.1.187 | 81 ++++++ 7.1.188 | 54 ++++ 7.1.189 | 76 +++++ 7.1.190 | 55 ++++ 7.1.191 | 61 ++++ 7.1.192 | 79 ++++++ 7.1.193 | 100 +++++++ 7.1.194 | 55 ++++ 7.1.195 | 75 +++++ 7.1.196 | 90 ++++++ 7.1.197 | 62 ++++ 7.1.198 | 51 ++++ 7.1.199 | 105 +++++++ 7.1.200 | 74 +++++ 7.1.201 | 87 ++++++ 7.1.202 | 83 ++++++ 7.1.203 | 68 +++++ 7.1.204 | 74 +++++ 7.1.205 | 181 ++++++++++++ 7.1.206 | 59 ++++ 7.1.207 | 253 +++++++++++++++++ 7.1.208 | 69 +++++ 7.1.209 | 71 +++++ 7.1.210 | 74 +++++ 7.1.211 | 748 +++++++++++++++++++++++++++++++++++++++++++++++++ README.patches | 78 ++++++ gvim.desktop | 2 +- vim.spec | 169 ++++++++++- 79 files changed, 8028 insertions(+), 3 deletions(-) create mode 100644 7.1.136 create mode 100644 7.1.137 create mode 100644 7.1.138 create mode 100644 7.1.139 create mode 100644 7.1.140 create mode 100644 7.1.141 create mode 100644 7.1.142 create mode 100644 7.1.143 create mode 100644 7.1.144 create mode 100644 7.1.145 create mode 100644 7.1.146 create mode 100644 7.1.147 create mode 100644 7.1.148 create mode 100644 7.1.149 create mode 100644 7.1.150 create mode 100644 7.1.151 create mode 100644 7.1.152 create mode 100644 7.1.153 create mode 100644 7.1.154 create mode 100644 7.1.155 create mode 100644 7.1.156 create mode 100644 7.1.157 create mode 100644 7.1.158 create mode 100644 7.1.159 create mode 100644 7.1.160 create mode 100644 7.1.161 create mode 100644 7.1.162 create mode 100644 7.1.163 create mode 100644 7.1.164 create mode 100644 7.1.165 create mode 100644 7.1.166 create mode 100644 7.1.167 create mode 100644 7.1.168 create mode 100644 7.1.169 create mode 100644 7.1.170 create mode 100644 7.1.171 create mode 100644 7.1.172 create mode 100644 7.1.173 create mode 100644 7.1.174 create mode 100644 7.1.175 create mode 100644 7.1.176 create mode 100644 7.1.177 create mode 100644 7.1.178 create mode 100644 7.1.179 create mode 100644 7.1.180 create mode 100644 7.1.181 create mode 100644 7.1.182 create mode 100644 7.1.183 create mode 100644 7.1.184 create mode 100644 7.1.185 create mode 100644 7.1.186 create mode 100644 7.1.187 create mode 100644 7.1.188 create mode 100644 7.1.189 create mode 100644 7.1.190 create mode 100644 7.1.191 create mode 100644 7.1.192 create mode 100644 7.1.193 create mode 100644 7.1.194 create mode 100644 7.1.195 create mode 100644 7.1.196 create mode 100644 7.1.197 create mode 100644 7.1.198 create mode 100644 7.1.199 create mode 100644 7.1.200 create mode 100644 7.1.201 create mode 100644 7.1.202 create mode 100644 7.1.203 create mode 100644 7.1.204 create mode 100644 7.1.205 create mode 100644 7.1.206 create mode 100644 7.1.207 create mode 100644 7.1.208 create mode 100644 7.1.209 create mode 100644 7.1.210 create mode 100644 7.1.211 diff --git a/7.1.136 b/7.1.136 new file mode 100644 index 00000000..c1a9a82c --- /dev/null +++ b/7.1.136 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.136 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.136 +Problem: Memory leak when using Ruby syntax highlighting. (Dominique Pelle) +Solution: Free the contained-in list. +Files: src/syntax.c + + +*** ../vim-7.1.135/src/syntax.c Thu Aug 30 19:36:52 2007 +--- src/syntax.c Sun Oct 7 15:10:54 2007 +*************** +*** 3354,3359 **** +--- 3354,3360 ---- + { + vim_free(SYN_ITEMS(buf)[i].sp_cont_list); + vim_free(SYN_ITEMS(buf)[i].sp_next_list); ++ vim_free(SYN_ITEMS(buf)[i].sp_syn.cont_in_list); + } + } + +*** ../vim-7.1.135/src/version.c Wed Oct 3 14:30:54 2007 +--- src/version.c Sun Oct 7 15:20:22 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 136, + /**/ + +-- +Every engineer dreams about saving the universe and having sex with aliens. +This is much more glamorous than the real life of an engineer, which consists +of hiding from the universe and having sex without the participation of other +life forms. (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.1.137 b/7.1.137 new file mode 100644 index 00000000..7e3a53f6 --- /dev/null +++ b/7.1.137 @@ -0,0 +1,49 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.137 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.137 +Problem: Build failure when using EXITFREE. (Dominique Pelle) +Solution: Add an #ifdef around using clip_exclude_prog. +Files: src/misc2.c + + +*** ../vim-7.1.136/src/misc2.c Sat Sep 29 14:15:00 2007 +--- src/misc2.c Sun Sep 30 18:00:09 2007 +*************** +*** 1037,1043 **** +--- 1038,1046 ---- + + /* Free some global vars. */ + vim_free(username); ++ # ifdef FEAT_CLIPBOARD + vim_free(clip_exclude_prog); ++ # endif + vim_free(last_cmdline); + vim_free(new_last_cmdline); + set_keep_msg(NULL, 0); +*** ../vim-7.1.136/src/version.c Sun Oct 7 15:21:31 2007 +--- src/version.c Sun Oct 7 15:42:26 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 137, + /**/ + +-- +For society, it's probably a good thing that engineers value function over +appearance. For example, you wouldn't want engineers to build nuclear power +plants that only _look_ like they would keep all the radiation inside. + (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.1.138 b/7.1.138 new file mode 100644 index 00000000..792cdbc6 --- /dev/null +++ b/7.1.138 @@ -0,0 +1,66 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.138 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.138 +Problem: The Perl Msg() function doesn't stop when "q" is typed at the more + prompt. (Hari Krishna Dara) +Solution: Check got_int. +Files: src/if_perl.xs + + +*** ../vim-7.1.137/src/if_perl.xs Sat Sep 15 14:48:57 2007 +--- src/if_perl.xs Wed Oct 3 17:00:16 2007 +*************** +*** 445,457 **** + char *next; + char *token = (char *)s; + +! while ((next = strchr(token, '\n'))) + { + *next++ = '\0'; /* replace \n with \0 */ + msg_attr((char_u *)token, attr); + token = next; + } +! if (*token) + msg_attr((char_u *)token, attr); + } + +--- 445,457 ---- + char *next; + char *token = (char *)s; + +! while ((next = strchr(token, '\n')) && !got_int) + { + *next++ = '\0'; /* replace \n with \0 */ + msg_attr((char_u *)token, attr); + token = next; + } +! if (*token && !got_int) + msg_attr((char_u *)token, attr); + } + +*** ../vim-7.1.137/src/version.c Sun Oct 7 15:44:28 2007 +--- src/version.c Tue Oct 9 10:45:08 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 138, + /**/ + +-- +A consultant is a person who takes your money and annoys your employees while +tirelessly searching for the best way to extend the consulting contract. + (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.1.139 b/7.1.139 new file mode 100644 index 00000000..27671514 --- /dev/null +++ b/7.1.139 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.139 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.139 +Problem: When using marker folding and ending Insert mode with CTRL-C the + current fold is truncated. (Fred Kater) +Solution: Ignore got_int while updating folds. +Files: src/fold.c + + +*** ../vim-7.1.138/src/fold.c Thu May 10 21:02:13 2007 +--- src/fold.c Sun Oct 14 15:27:13 2007 +*************** +*** 858,864 **** +--- 858,871 ---- + || foldmethodIsDiff(wp) + #endif + || foldmethodIsSyntax(wp)) ++ { ++ int save_got_int = got_int; ++ ++ /* reset got_int here, otherwise it won't work */ ++ got_int = FALSE; + foldUpdateIEMS(wp, top, bot); ++ got_int |= save_got_int; ++ } + } + + /* foldUpdateAll() {{{2 */ +*** ../vim-7.1.138/src/version.c Tue Oct 9 10:46:39 2007 +--- src/version.c Sun Oct 14 15:31:18 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 139, + /**/ + +-- +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.1.140 b/7.1.140 new file mode 100644 index 00000000..d10c1884 --- /dev/null +++ b/7.1.140 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.140 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.140 +Problem: v:count is set only after typing a non-digit, that makes it + difficult to make a nice mapping. +Solution: Set v:count while still typing the count. +Files: src/normal.c + + +*** ../vim-7.1.139/src/normal.c Thu Sep 13 18:25:08 2007 +--- src/normal.c Sun Oct 14 17:15:36 2007 +*************** +*** 690,695 **** +--- 690,702 ---- + ca.count0 = ca.count0 * 10 + (c - '0'); + if (ca.count0 < 0) /* got too large! */ + ca.count0 = 999999999L; ++ #ifdef FEAT_EVAL ++ /* Set v:count here, when called from main() and not a stuffed ++ * 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) + { + ++no_mapping; +*** ../vim-7.1.139/src/version.c Sun Oct 14 15:32:10 2007 +--- src/version.c Sun Oct 14 17:13:15 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 140, + /**/ + +-- +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.1.141 b/7.1.141 new file mode 100644 index 00000000..7b3c5d9f --- /dev/null +++ b/7.1.141 @@ -0,0 +1,97 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.141 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.141 +Problem: GTK: -geom argument doesn't support a negative offset. +Solution: Compute position from the right/lower corner. +Files: src/gui_gtk_x11.c + + +*** ../vim-7.1.140/src/gui_gtk_x11.c Sat Sep 15 14:06:41 2007 +--- src/gui_gtk_x11.c Mon Oct 8 21:26:50 2007 +*************** +*** 4044,4049 **** +--- 4044,4051 ---- + 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); + +*************** +*** 4055,4066 **** +--- 4057,4087 ---- + p_window = h - 1; + Rows = h; + } ++ ++ 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 ++ pixel_width += get_menu_tool_width(); ++ pixel_height += get_menu_tool_height(); ++ #endif ++ + 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 + gtk_widget_set_uposition(gui.mainwin, x, y); + #endif ++ } + vim_free(gui.geom); + gui.geom = NULL; + +*************** +*** 4071,4084 **** + */ + if (gtk_socket_id != 0 && (mask & WidthValue || mask & HeightValue)) + { +- guint pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width); +- guint pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height); +- +- #ifdef HAVE_GTK2 +- pixel_width += get_menu_tool_width(); +- pixel_height += get_menu_tool_height(); +- #endif +- + update_window_manager_hints(pixel_width, pixel_height); + init_window_hints_state = 1; + g_timeout_add(1000, check_startup_plug_hints, NULL); +--- 4092,4097 ---- +*** ../vim-7.1.140/src/version.c Sun Oct 14 17:15:45 2007 +--- src/version.c Fri Oct 19 14:28:52 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 141, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +35. Your husband tells you he's had the beard for 2 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.1.142 b/7.1.142 new file mode 100644 index 00000000..892cf99f --- /dev/null +++ b/7.1.142 @@ -0,0 +1,77 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.142 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.142 +Problem: ":redir @A>" doesn't work. +Solution: Ignore the extra ">" also when appending. (James Vega) +Files: src/ex_docmd.c + + +*** ../vim-7.1.141/src/ex_docmd.c Sun Sep 30 14:00:41 2007 +--- src/ex_docmd.c Tue Oct 9 11:09:09 2007 +*************** +*** 8426,8446 **** + || *arg == '"') + { + redir_reg = *arg++; +! if (*arg == '>' && arg[1] == '>') + arg += 2; +! else if ((*arg == NUL || (*arg == '>' && arg[1] == NUL)) && +! (islower(redir_reg) +! # ifdef FEAT_CLIPBOARD +! || redir_reg == '*' +! || redir_reg == '+' +! # endif +! || redir_reg == '"')) + { + if (*arg == '>') + arg++; +! +! /* make register empty */ +! write_reg_contents(redir_reg, (char_u *)"", -1, FALSE); + } + } + if (*arg != NUL) +--- 8426,8442 ---- + || *arg == '"') + { + redir_reg = *arg++; +! if (*arg == '>' && arg[1] == '>') /* append */ + arg += 2; +! else + { ++ /* Can use both "@a" and "@a>". */ + if (*arg == '>') + arg++; +! /* Make register empty when not using @A-@Z and the +! * command is valid. */ +! if (*arg == NUL && !isupper(redir_reg)) +! write_reg_contents(redir_reg, (char_u *)"", -1, FALSE); + } + } + if (*arg != NUL) +*** ../vim-7.1.141/src/version.c Fri Oct 19 14:32:50 2007 +--- src/version.c Fri Oct 19 16:18:36 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 142, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +36. You miss more than five meals a week downloading the latest games from + Apogee. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.143 b/7.1.143 new file mode 100644 index 00000000..fa385afa --- /dev/null +++ b/7.1.143 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.143 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.143 +Problem: Uninitialized memory read when diffing three files. (Dominique + Pelle) +Solution: Remove "+ !notset" so that we don't use fields that were not + computed. +Files: src/diff.c + + +*** ../vim-7.1.142/src/diff.c Sat Sep 29 14:15:00 2007 +--- src/diff.c Sun Oct 14 21:52:56 2007 +*************** +*** 1310,1316 **** + dp->df_count[idx_new] += -off; + off = 0; + } +! for (i = idx_orig; i < idx_new + !notset; ++i) + if (curtab->tp_diffbuf[i] != NULL) + dp->df_count[i] = dpl->df_lnum[i] + dpl->df_count[i] + - dp->df_lnum[i] + off; +--- 1310,1316 ---- + dp->df_count[idx_new] += -off; + off = 0; + } +! for (i = idx_orig; i < idx_new; ++i) + if (curtab->tp_diffbuf[i] != NULL) + dp->df_count[i] = dpl->df_lnum[i] + dpl->df_count[i] + - dp->df_lnum[i] + off; +*** ../vim-7.1.142/src/version.c Fri Oct 19 16:20:09 2007 +--- src/version.c Fri Oct 19 17:32:18 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 143, + /**/ + +-- +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.1.144 b/7.1.144 new file mode 100644 index 00000000..d2bcfa0c --- /dev/null +++ b/7.1.144 @@ -0,0 +1,46 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.144 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.144 +Problem: After ":diffup" cursor can be in the wrong position. +Solution: Force recomputing the cursor position. +Files: src/diff.c + + +*** ../vim-7.1.143/src/diff.c Fri Oct 19 17:32:58 2007 +--- src/diff.c Fri Oct 19 18:54:13 2007 +*************** +*** 791,796 **** +--- 791,799 ---- + } + mch_remove(tmp_orig); + ++ /* force updating cursor position on screen */ ++ curwin->w_valid_cursor.lnum = 0; ++ + diff_redraw(TRUE); + + theend: +*** ../vim-7.1.143/src/version.c Fri Oct 19 17:32:58 2007 +--- src/version.c Fri Oct 19 18:56:49 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 144, + /**/ + +-- +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.1.145 b/7.1.145 new file mode 100644 index 00000000..cb947995 --- /dev/null +++ b/7.1.145 @@ -0,0 +1,171 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.145 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.145 +Problem: Insert mode completion: When using the popup menu, after + completing a word and typing a non-word character Vim is still + completing the same word, following CTRL-N doesn't work. + Insert mode Completion: When using CTRL-X O and there is only + "struct." before the cursor, typing one char to reduce the + matches, then BS completion stops. +Solution: When typing a character that is not part of the item being + completed, stop complete mode. For whole line completion also + accept a space. For file name completion stop at a path + separator. + For omni completion stay in completion mode even if completing + with empty string. +Files: src/edit.c + + +*** ../vim-7.1.144/src/edit.c Thu Sep 13 18:25:08 2007 +--- src/edit.c Fri Oct 19 16:04:38 2007 +*************** +*** 129,134 **** +--- 129,135 ---- + + static void ins_ctrl_x __ARGS((void)); + static int has_compl_option __ARGS((int dict_opt)); ++ static int ins_compl_accept_char __ARGS((int c)); + static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup)); + static int ins_compl_equal __ARGS((compl_T *match, char_u *str, int len)); + static void ins_compl_longest_match __ARGS((compl_T *match)); +*************** +*** 754,761 **** + continue; + } + +! /* A printable, non-white character: Add to "compl_leader". */ +! if (vim_isprintc(c) && !vim_iswhite(c)) + { + ins_compl_addleader(c); + continue; +--- 755,763 ---- + continue; + } + +! /* A non-white character that fits in with the current +! * completion: Add to "compl_leader". */ +! if (ins_compl_accept_char(c)) + { + ins_compl_addleader(c); + continue; +*************** +*** 2053,2058 **** +--- 2055,2094 ---- + } + + /* ++ * Return TRUE when character "c" is part of the item currently being ++ * completed. Used to decide whether to abandon complete mode when the menu ++ * is visible. ++ */ ++ static int ++ ins_compl_accept_char(c) ++ int c; ++ { ++ if (ctrl_x_mode & CTRL_X_WANT_IDENT) ++ /* When expanding an identifier only accept identifier chars. */ ++ return vim_isIDc(c); ++ ++ switch (ctrl_x_mode) ++ { ++ case CTRL_X_FILES: ++ /* When expanding file name only accept file name chars. But not ++ * path separators, so that "proto/" expands files in ++ * "proto", not "proto/" as a whole */ ++ return vim_isfilec(c) && !vim_ispathsep(c); ++ ++ case CTRL_X_CMDLINE: ++ case CTRL_X_OMNI: ++ /* Command line and Omni completion can work with just about any ++ * printable character, but do stop at white space. */ ++ return vim_isprintc(c) && !vim_iswhite(c); ++ ++ case CTRL_X_WHOLE_LINE: ++ /* For while line completion a space can be part of the line. */ ++ return vim_isprintc(c); ++ } ++ return vim_iswordc(c); ++ } ++ ++ /* + * This is like ins_compl_add(), but if 'ic' and 'inf' are set, then the + * case of the originally typed text is used, and the case of the completed + * text is inferred, ie this tries to work out what case you probably wanted +*************** +*** 3128,3135 **** + p = line + curwin->w_cursor.col; + mb_ptr_back(line, p); + +! /* Stop completion when the whole word was deleted. */ +! if ((int)(p - line) - (int)compl_col <= 0) + return K_BS; + + /* Deleted more than what was used to find matches or didn't finish +--- 3164,3174 ---- + p = line + curwin->w_cursor.col; + mb_ptr_back(line, p); + +! /* Stop completion when the whole word was deleted. For Omni completion +! * allow the word to be deleted, we won't match everything. */ +! if ((int)(p - line) - (int)compl_col < 0 +! || ((int)(p - line) - (int)compl_col == 0 +! && (ctrl_x_mode & CTRL_X_OMNI) == 0)) + return K_BS; + + /* Deleted more than what was used to find matches or didn't finish +*************** +*** 4591,4604 **** + curs_col = curwin->w_cursor.col; + compl_pending = 0; + +! /* if this same ctrl_x_mode has been interrupted use the text from + * "compl_startpos" to the cursor as a pattern to add a new word + * instead of expand the one before the cursor, in word-wise if +! * "compl_startpos" +! * is not in the same line as the cursor then fix it (the line has +! * been split because it was longer than 'tw'). if SOL is set then +! * skip the previous pattern, a word at the beginning of the line has +! * been inserted, we'll look for that -- Acevedo. */ + if ((compl_cont_status & CONT_INTRPT) == CONT_INTRPT + && compl_cont_mode == ctrl_x_mode) + { +--- 4630,4642 ---- + curs_col = curwin->w_cursor.col; + compl_pending = 0; + +! /* If this same ctrl_x_mode has been interrupted use the text from + * "compl_startpos" to the cursor as a pattern to add a new word + * instead of expand the one before the cursor, in word-wise if +! * "compl_startpos" is not in the same line as the cursor then fix it +! * (the line has been split because it was longer than 'tw'). if SOL +! * is set then skip the previous pattern, a word at the beginning of +! * the line has been inserted, we'll look for that -- Acevedo. */ + if ((compl_cont_status & CONT_INTRPT) == CONT_INTRPT + && compl_cont_mode == ctrl_x_mode) + { +*** ../vim-7.1.144/src/version.c Fri Oct 19 18:57:33 2007 +--- src/version.c Fri Oct 19 20:38:21 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 145, + /**/ + +-- +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.1.146 b/7.1.146 new file mode 100644 index 00000000..75ce738f --- /dev/null +++ b/7.1.146 @@ -0,0 +1,92 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.146 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.146 (extra) +Problem: VMS: Files with a very rare record organization (VFC) cannot be + properly written by Vim. + On older VAX systems mms runs into a syntax error. +Solution: Check for this special situation. Do not wrap a comment, make it + one long line. (Zoltan Arpadffy) +Files: src/fileio.c, src/Make_vms.mms + + +*** ../vim-7.1.145/src/fileio.c Wed Oct 3 12:49:24 2007 +--- src/fileio.c Mon Oct 22 21:10:00 2007 +*************** +*** 4251,4257 **** + * they don't it adds one. + * With other RMS structures it works perfect without this fix. + */ +! if ((buf->b_fab_rat & (FAB$M_FTN | FAB$M_CR)) != 0) + { + int b2write; + +--- 4252,4259 ---- + * they don't it adds one. + * With other RMS structures it works perfect without this fix. + */ +! if (buf->b_fab_rfm == FAB$C_VFC +! || ((buf->b_fab_rat & (FAB$M_FTN | FAB$M_CR)) != 0)) + { + int b2write; + +*** ../vim-7.1.145/src/Make_vms.mms Thu May 10 20:47:35 2007 +--- src/Make_vms.mms Mon Oct 22 21:13:08 2007 +*************** +*** 2,8 **** + # Makefile for Vim on OpenVMS + # + # Maintainer: Zoltan Arpadffy +! # Last change: 2007 May 07 + # + # 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: 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 +*************** +*** 96,103 **** + + .IFDEF MMSVAX + .IFDEF DECC # VAX with DECC +! CC_DEF = cc # /decc # some system requires this switch +! # but when it is not required /ver might fail + PREFIX = /prefix=all + .ELSE # VAX with VAXC + CC_DEF = cc +--- 96,102 ---- + + .IFDEF MMSVAX + .IFDEF DECC # VAX with DECC +! CC_DEF = cc # /decc # some system requires this switch but when it is not required /ver might fail + PREFIX = /prefix=all + .ELSE # VAX with VAXC + CC_DEF = cc +*** ../vim-7.1.145/src/version.c Fri Oct 19 20:39:56 2007 +--- src/version.c Mon Oct 29 22:36:20 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 146, + /**/ + +-- +Be thankful to be in a traffic jam, because it means you own a car. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.147 b/7.1.147 new file mode 100644 index 00000000..57e49659 --- /dev/null +++ b/7.1.147 @@ -0,0 +1,75 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.147 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.147 (after 7.1.127) +Problem: Freeing memory already freed when completing user name. (Meino + Cramer) +Solution: Use a flag to remember if "orig" needs to be freed. +Files: src/ex_getln.c + + +*** ../vim-7.1.146/src/ex_getln.c Sun Sep 30 22:10:45 2007 +--- src/ex_getln.c Tue Oct 30 17:13:33 2007 +*************** +*** 3353,3358 **** +--- 3353,3359 ---- + char_u *ss = NULL; + static int findex; + static char_u *orig_save = NULL; /* kept value of orig */ ++ int orig_saved = FALSE; + int i; + long_u len; + int non_suf_match; /* number without matching suffix */ +*************** +*** 3421,3426 **** +--- 3422,3428 ---- + { + vim_free(orig_save); + orig_save = orig; ++ orig_saved = TRUE; + + /* + * Do the expansion. +*************** +*** 3546,3552 **** + ExpandCleanup(xp); + + /* Free "orig" if it wasn't stored in "orig_save". */ +! if (orig != orig_save) + vim_free(orig); + + return ss; +--- 3548,3554 ---- + ExpandCleanup(xp); + + /* Free "orig" if it wasn't stored in "orig_save". */ +! if (!orig_saved) + vim_free(orig); + + return ss; +*** ../vim-7.1.146/src/version.c Mon Oct 29 22:37:57 2007 +--- src/version.c Tue Oct 30 17:30:35 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 147, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +59. Your wife says communication is important in a marriage...so you buy + another computer and install a second phone line so the two of you can + chat. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.148 b/7.1.148 new file mode 100644 index 00000000..94872e59 --- /dev/null +++ b/7.1.148 @@ -0,0 +1,73 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.148 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.148 +Problem: Some types are not found by configure. +Solution: Test for the sys/types.h header file. (Sean Boudreau) +Files: src/configure.in, src/auto/configure + + +*** ../vim-7.1.147/src/configure.in Thu Jun 28 13:02:22 2007 +--- src/configure.in Sat Oct 27 15:52:16 2007 +*************** +*** 2026,2032 **** + fi + + AC_CHECK_HEADERS(stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \ +! termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h termio.h \ + iconv.h langinfo.h unistd.h stropts.h errno.h \ + sys/resource.h sys/systeminfo.h locale.h \ + sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \ +--- 2026,2032 ---- + fi + + AC_CHECK_HEADERS(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 unistd.h stropts.h errno.h \ + sys/resource.h sys/systeminfo.h locale.h \ + sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \ +*** ../vim-7.1.147/src/auto/configure Thu Jun 28 13:02:22 2007 +--- src/auto/configure Sun Nov 4 15:34:14 2007 +*************** +*** 10265,10272 **** + + + + 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 termio.h \ + iconv.h langinfo.h unistd.h stropts.h errno.h \ + sys/resource.h sys/systeminfo.h locale.h \ + sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \ +--- 10265,10273 ---- + + + ++ + 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 unistd.h stropts.h errno.h \ + sys/resource.h sys/systeminfo.h locale.h \ + sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \ +*** ../vim-7.1.147/src/version.c Tue Oct 30 17:36:31 2007 +--- src/version.c Sun Nov 4 15:34:26 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 148, + /**/ + +-- +If your nose runs, and your feet smell, you might be upside down. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.149 b/7.1.149 new file mode 100644 index 00000000..e6a0f5b6 --- /dev/null +++ b/7.1.149 @@ -0,0 +1,180 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.149 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.149 +Problem: GTK GUI: When the completion popup menu is used scrolling another + window by the scrollbar is OK, but using the scroll wheel it + behaves line . +Solution: Ignore K_MOUSEDOWN and K_MOUSEUP. Fix redrawing the popup menu. +Files: src/edit.c, src/gui.c + + +*** ../vim-7.1.148/src/edit.c Fri Oct 19 20:39:56 2007 +--- src/edit.c Sun Nov 4 16:17:42 2007 +*************** +*** 3385,3392 **** + if (c != Ctrl_R && vim_is_ctrl_x_key(c)) + edit_submode_extra = NULL; + +! /* Ignore end of Select mode mapping */ +! if (c == K_SELECT) + return retval; + + /* Set "compl_get_longest" when finding the first matches. */ +--- 3385,3392 ---- + if (c != Ctrl_R && vim_is_ctrl_x_key(c)) + edit_submode_extra = NULL; + +! /* Ignore end of Select mode mapping and mouse scroll buttons. */ +! if (c == K_SELECT || c == K_MOUSEDOWN || c == K_MOUSEUP) + return retval; + + /* Set "compl_get_longest" when finding the first matches. */ +*************** +*** 8652,8666 **** + int up; + { + pos_T tpos; +! # if defined(FEAT_GUI) && defined(FEAT_WINDOWS) +! win_T *old_curwin; + # endif + + tpos = curwin->w_cursor; + + # if defined(FEAT_GUI) && defined(FEAT_WINDOWS) +- old_curwin = curwin; +- + /* Currently the mouse coordinates are only known in the GUI. */ + if (gui.in_use && mouse_row >= 0 && mouse_col >= 0) + { +--- 8652,8667 ---- + int up; + { + pos_T tpos; +! # if defined(FEAT_WINDOWS) +! win_T *old_curwin = curwin; +! # endif +! # ifdef FEAT_INS_EXPAND +! int did_scroll = FALSE; + # endif + + tpos = curwin->w_cursor; + + # if defined(FEAT_GUI) && defined(FEAT_WINDOWS) + /* Currently the mouse coordinates are only known in the GUI. */ + if (gui.in_use && mouse_row >= 0 && mouse_col >= 0) + { +*************** +*** 8677,8692 **** + # endif + undisplay_dollar(); + +! if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)) +! scroll_redraw(up, (long)(curwin->w_botline - curwin->w_topline)); +! else +! scroll_redraw(up, 3L); + + # if defined(FEAT_GUI) && defined(FEAT_WINDOWS) + curwin->w_redr_status = TRUE; + + curwin = old_curwin; + curbuf = curwin->w_buffer; + # endif + + if (!equalpos(curwin->w_cursor, tpos)) +--- 8678,8717 ---- + # endif + undisplay_dollar(); + +! # ifdef FEAT_INS_EXPAND +! /* Don't scroll the window in which completion is being done. */ +! if (!pum_visible() +! # if defined(FEAT_WINDOWS) +! || curwin != old_curwin +! # endif +! ) +! # endif +! { +! if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)) +! scroll_redraw(up, (long)(curwin->w_botline - curwin->w_topline)); +! else +! scroll_redraw(up, 3L); +! # ifdef FEAT_INS_EXPAND +! did_scroll = TRUE; +! # endif +! } + + # if defined(FEAT_GUI) && defined(FEAT_WINDOWS) + curwin->w_redr_status = TRUE; + + curwin = old_curwin; + curbuf = curwin->w_buffer; ++ # endif ++ ++ # ifdef FEAT_INS_EXPAND ++ /* The popup menu may overlay the window, need to redraw it. ++ * TODO: Would be more efficient to only redraw the windows that are ++ * overlapped by the popup menu. */ ++ if (pum_visible() && did_scroll) ++ { ++ redraw_all_later(NOT_VALID); ++ ins_compl_show_pum(); ++ } + # endif + + if (!equalpos(curwin->w_cursor, tpos)) +*** ../vim-7.1.148/src/gui.c Wed Sep 5 21:45:54 2007 +--- src/gui.c Fri Oct 19 16:14:57 2007 +*************** +*** 4214,4220 **** + #endif + ) + { +! redraw_win_later(wp, VALID); + updateWindow(wp); /* update window, status line, and cmdline */ + } + +--- 4214,4232 ---- + #endif + ) + { +! int type = VALID; +! +! #ifdef FEAT_INS_EXPAND +! if (pum_visible()) +! { +! type = NOT_VALID; +! wp->w_lines_valid = 0; +! } +! #endif +! /* Don't set must_redraw here, it may cause the popup menu to +! * disappear when losing focus after a scrollbar drag. */ +! if (wp->w_redr_type < type) +! wp->w_redr_type = type; + updateWindow(wp); /* update window, status line, and cmdline */ + } + +*** ../vim-7.1.148/src/version.c Sun Nov 4 15:35:23 2007 +--- src/version.c Tue Nov 6 22:21:03 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 149, + /**/ + +-- +From "know your smileys": + ...---... SOS + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.150 b/7.1.150 new file mode 100644 index 00000000..b0074a95 --- /dev/null +++ b/7.1.150 @@ -0,0 +1,59 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.150 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.150 +Problem: When 'clipboard' has "unnamed" using "p" in Visual mode doesn't + work correctly. (Jianrong Yu) +Solution: When 'clipboard' has "unnamed" also obtain the selection when + getting the default register. +Files: src/ops.c + + +*** ../vim-7.1.149/src/ops.c Tue Sep 25 14:19:35 2007 +--- src/ops.c Sun Oct 28 13:58:35 2007 +*************** +*** 933,941 **** + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. Obtain the + * selection too. */ +! if (name == '*' && clip_star.available && clip_isautosel()) + { +! clip_update_selection(); + may_get_selection(name); + } + #endif +--- 933,942 ---- + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. Obtain the + * selection too. */ +! if (name == '*' && clip_star.available) + { +! if (clip_isautosel()) +! clip_update_selection(); + may_get_selection(name); + } + #endif +*** ../vim-7.1.149/src/version.c Tue Nov 6 22:26:39 2007 +--- src/version.c Thu Nov 8 10:34:18 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 150, + /**/ + +-- +From "know your smileys": + 8<}} Glasses, big nose, beard + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.151 b/7.1.151 new file mode 100644 index 00000000..610bafb1 --- /dev/null +++ b/7.1.151 @@ -0,0 +1,70 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.151 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.151 +Problem: Using whole line completion with 'ignorecase' and 'infercase' set + and the line is empty get an lalloc(0) error. +Solution: Don't try changing case for an empty match. (Matthew Wozniski) +Files: src/edit.c + + +*** ../vim-7.1.150/src/edit.c Tue Nov 6 22:26:39 2007 +--- src/edit.c Sun Nov 4 16:17:42 2007 +*************** +*** 2111,2117 **** + int has_lower = FALSE; + int was_letter = FALSE; + +! if (p_ic && curbuf->b_p_inf) + { + /* Infer case of completed part. */ + +--- 2111,2117 ---- + int has_lower = FALSE; + int was_letter = FALSE; + +! if (p_ic && curbuf->b_p_inf && len > 0) + { + /* Infer case of completed part. */ + +*************** +*** 2225,2231 **** + wca[i] = MB_TOUPPER(wca[i]); + } + +! /* + * Generate encoding specific output from wide character array. + * Multi-byte characters can occupy up to five bytes more than + * ASCII characters, and we also need one byte for NUL, so stay +--- 2225,2231 ---- + wca[i] = MB_TOUPPER(wca[i]); + } + +! /* + * Generate encoding specific output from wide character array. + * Multi-byte characters can occupy up to five bytes more than + * ASCII characters, and we also need one byte for NUL, so stay +*** ../vim-7.1.150/src/version.c Thu Nov 8 10:35:02 2007 +--- src/version.c Thu Nov 8 13:01:34 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 151, + /**/ + +-- +From "know your smileys": + %-) After staring at screen for 15 hours + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.152 b/7.1.152 new file mode 100644 index 00000000..d1a0f30b --- /dev/null +++ b/7.1.152 @@ -0,0 +1,118 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.152 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.152 +Problem: Display problem when 'hls' and 'cursorcolumn' are set and + searching for "$". (John Mullin) Also when scrolling + horizontally when 'wrap' is off. +Solution: Keep track of the column where highlighting was set. Check the + column offset when skipping characters. +Files: src/screen.c + + +*** ../vim-7.1.151/src/screen.c Mon Sep 17 22:37:05 2007 +--- src/screen.c Fri Oct 19 15:18:49 2007 +*************** +*** 2599,2604 **** +--- 2599,2605 ---- + int syntax_attr = 0; /* attributes desired by syntax */ + int has_syntax = FALSE; /* this buffer has syntax highl. */ + int save_did_emsg; ++ int eol_hl_off = 0; /* 1 if highlighted char after EOL */ + #endif + #ifdef FEAT_SPELL + int has_spell = FALSE; /* this buffer has spell checking */ +*************** +*** 4312,4317 **** +--- 4313,4322 ---- + { + #ifdef FEAT_SEARCH_EXTRA + long prevcol = (long)(ptr - line) - (c == NUL); ++ ++ /* we're not really at that column when skipping some text */ ++ if ((wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol) ++ ++prevcol; + #endif + + /* invert at least one char, used for Visual and empty line or +*************** +*** 4408,4418 **** +--- 4413,4432 ---- + ScreenAttrs[off] = char_attr; + #ifdef FEAT_RIGHTLEFT + if (wp->w_p_rl) ++ { + --col; ++ --off; ++ } + else + #endif ++ { + ++col; ++ ++off; ++ } + ++vcol; ++ #ifdef FEAT_SYN_HL ++ eol_hl_off = 1; ++ #endif + } + } + +*************** +*** 4422,4427 **** +--- 4436,4449 ---- + 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; ++ --off; ++ --vcol; ++ } ++ + /* Highlight 'cursorcolumn' past end of the line. */ + if (wp->w_p_wrap) + v = wp->w_skipcol; +*************** +*** 4432,4438 **** + + vcol = v + col - win_col_off(wp); + if (wp->w_p_cuc +! && (int)wp->w_virtcol >= vcol + && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1) + + v + && lnum != wp->w_cursor.lnum +--- 4454,4460 ---- + + vcol = v + col - win_col_off(wp); + if (wp->w_p_cuc +! && (int)wp->w_virtcol >= vcol - eol_hl_off + && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1) + + v + && lnum != wp->w_cursor.lnum +*** ../vim-7.1.151/src/version.c Thu Nov 8 13:03:33 2007 +--- src/version.c Thu Nov 8 14:48:59 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 152, + /**/ + +-- +From "know your smileys": + 2B|^2B Message from Shakespeare + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.153 b/7.1.153 new file mode 100644 index 00000000..839977eb --- /dev/null +++ b/7.1.153 @@ -0,0 +1,143 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.153 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.153 +Problem: Compiler warnings on SGI. Undefined XpmAllocColor (Charles + Campbell) +Solution: Add type casts. Init st_dev and st_ino separately. Don't use + type casts for vim_snprintf() when HAVE_STDARG_H is defined. + Define XpmAllocColor when needed. +Files: src/eval.c, src/ex_cmds.c, src/fileio.c, src/misc2.c, + src/gui_xmebw.c + + +*** ../vim-7.1.152/src/eval.c Tue Oct 2 22:07:58 2007 +--- src/eval.c Mon Oct 1 20:56:09 2007 +*************** +*** 8729,8735 **** + static int fnum = 0; + static int change_start = 0; + static int change_end = 0; +! static hlf_T hlID = 0; + int filler_lines; + int col; + +--- 8729,8735 ---- + static int fnum = 0; + static int change_start = 0; + static int change_end = 0; +! static hlf_T hlID = (hlf_T)0; + int filler_lines; + int col; + +*** ../vim-7.1.152/src/ex_cmds.c Thu Sep 13 18:25:08 2007 +--- src/ex_cmds.c Thu Sep 13 16:19:40 2007 +*************** +*** 1774,1780 **** + * overwrite a user's viminfo file after a "su root", with a + * viminfo file that the user can't read. + */ +! st_old.st_dev = st_old.st_ino = 0; + st_old.st_mode = 0600; + if (mch_stat((char *)fname, &st_old) == 0 + && getuid() != ROOT_UID +--- 1774,1781 ---- + * 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 + && getuid() != ROOT_UID +*** ../vim-7.1.152/src/fileio.c Mon Oct 29 22:37:57 2007 +--- src/fileio.c Mon Oct 22 21:10:00 2007 +*************** +*** 3209,3215 **** + * Get information about original file (if there is one). + */ + #if defined(UNIX) && !defined(ARCHIE) +! st_old.st_dev = st_old.st_ino = 0; + perm = -1; + if (mch_stat((char *)fname, &st_old) < 0) + newfile = TRUE; +--- 3209,3216 ---- + * Get information about original file (if there is one). + */ + #if defined(UNIX) && !defined(ARCHIE) +! st_old.st_dev = 0; +! st_old.st_ino = 0; + perm = -1; + if (mch_stat((char *)fname, &st_old) < 0) + newfile = TRUE; +*** ../vim-7.1.152/src/misc2.c Sun Oct 7 15:44:28 2007 +--- src/misc2.c Sun Sep 30 18:00:09 2007 +*************** +*** 5924,5930 **** +--- 5925,5935 ---- + { + if (emsg_not_now()) + return TRUE; /* no error messages at the moment */ ++ #ifdef HAVE_STDARG_H ++ vim_snprintf((char *)IObuff, IOSIZE, (char *)s, a1, a2); ++ #else + vim_snprintf((char *)IObuff, IOSIZE, (char *)s, (long_u)a1, (long_u)a2); ++ #endif + return emsg(IObuff); + } + +*** ../vim-7.1.152/src/gui_xmebw.c Thu May 10 19:46:55 2007 +--- src/gui_xmebw.c Thu Sep 6 12:57:51 2007 +*************** +*** 395,405 **** + + /* Create the "highlight" pixmap. */ + color[4].pixel = eb->primitive.bottom_shadow_color; + attr.valuemask = XpmColorSymbols | XpmCloseness | XpmAllocColor; + attr.closeness = 65535; /* accuracy isn't crucial */ + attr.colorsymbols = color; + attr.numsymbols = XtNumber(color); +- attr.alloc_color = alloc_color; + + status = XpmCreatePixmapFromData(dpy, root, data, &pix, NULL, &attr); + XpmFreeAttributes(&attr); +--- 395,409 ---- + + /* Create the "highlight" pixmap. */ + color[4].pixel = eb->primitive.bottom_shadow_color; ++ #ifdef XpmAllocColor /* SGI doesn't have it */ + attr.valuemask = XpmColorSymbols | XpmCloseness | XpmAllocColor; ++ attr.alloc_color = alloc_color; ++ #else ++ attr.valuemask = XpmColorSymbols | XpmCloseness; ++ #endif + attr.closeness = 65535; /* accuracy isn't crucial */ + attr.colorsymbols = color; + attr.numsymbols = XtNumber(color); + + status = XpmCreatePixmapFromData(dpy, root, data, &pix, NULL, &attr); + XpmFreeAttributes(&attr); +*** ../vim-7.1.152/src/version.c Thu Nov 8 14:50:58 2007 +--- src/version.c Thu Nov 8 20:45:56 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 153, + /**/ + +-- +From "know your smileys": + @:-() Elvis Presley + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.154 b/7.1.154 new file mode 100644 index 00000000..f38ac016 --- /dev/null +++ b/7.1.154 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.154 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.154 +Problem: Compiler warning for signed/unsigned compare. +Solution: Add type cast. +Files: src/screen.c + + +*** ../vim-7.1.153/src/screen.c Thu Nov 8 14:50:58 2007 +--- src/screen.c Thu Nov 8 21:18:46 2007 +*************** +*** 4315,4321 **** + long prevcol = (long)(ptr - line) - (c == NUL); + + /* we're not really at that column when skipping some text */ +! if ((wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol) + ++prevcol; + #endif + +--- 4315,4321 ---- + long prevcol = (long)(ptr - line) - (c == NUL); + + /* we're not really at that column when skipping some text */ +! if ((long)(wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol) + ++prevcol; + #endif + +*** ../vim-7.1.153/src/version.c Thu Nov 8 20:47:34 2007 +--- src/version.c Thu Nov 8 21:19:59 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 154, + /**/ + +-- +From "know your smileys": + :-F Bucktoothed vampire with one tooth missing + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.155 b/7.1.155 new file mode 100644 index 00000000..c813fef6 --- /dev/null +++ b/7.1.155 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.155 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.155 +Problem: Crash when 'undolevels' is 0 and repeating "udd". (James Vega) +Solution: When there is only one branch use u_freeheader() to delete it. +Files: src/undo.c + + +*** ../vim-7.1.154/src/undo.c Mon Oct 1 22:53:27 2007 +--- src/undo.c Sat Nov 10 13:45:28 2007 +*************** +*** 1677,1682 **** +--- 1677,1690 ---- + u_header_T **uhpp; /* if not NULL reset when freeing this header */ + { + u_header_T *tofree, *next; ++ ++ /* If this is the top branch we may need to use u_freeheader() to update ++ * all the pointers. */ ++ if (uhp == buf->b_u_oldhead) ++ { ++ u_freeheader(buf, uhp, uhpp); ++ return; ++ } + + if (uhp->uh_alt_prev != NULL) + uhp->uh_alt_prev->uh_alt_next = NULL; +*** ../vim-7.1.154/src/version.c Thu Nov 8 21:23:34 2007 +--- src/version.c Sat Nov 10 22:49:40 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 155, + /**/ + +-- +I AM THANKFUL... +...for the piles of laundry and ironing because it means I +have plenty of clothes to wear. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.156 b/7.1.156 new file mode 100644 index 00000000..4701e023 --- /dev/null +++ b/7.1.156 @@ -0,0 +1,121 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.156 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.156 +Problem: Overlapping arguments for strcpy() when expanding command line + variables. +Solution: Use mch_memmove() instead of STRCPY(). Also fix a few typos. + (Dominique Pelle) +Files: src/ex_docmd.c + + +*** ../vim-7.1.155/src/ex_docmd.c Fri Oct 19 16:20:09 2007 +--- src/ex_docmd.c Sat Nov 10 12:39:51 2007 +*************** +*** 666,672 **** + if (ex_pressedreturn) + { + /* go up one line, to overwrite the ":" line, so the +! * output doensn't contain empty lines. */ + msg_row = prev_msg_row; + if (prev_msg_row == Rows - 1) + msg_row--; +--- 666,672 ---- + if (ex_pressedreturn) + { + /* go up one line, to overwrite the ":" line, so the +! * output doesn't contain empty lines. */ + msg_row = prev_msg_row; + if (prev_msg_row == Rows - 1) + msg_row--; +*************** +*** 2760,2766 **** + + /* + * Isolate the command and search for it in the command table. +! * Exeptions: + * - the 'k' command can directly be followed by any character. + * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r' + * but :sre[wind] is another command, as are :scrip[tnames], +--- 2760,2766 ---- + + /* + * Isolate the command and search for it in the command table. +! * Exceptions: + * - the 'k' command can directly be followed by any character. + * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r' + * but :sre[wind] is another command, as are :scrip[tnames], +*************** +*** 6677,6683 **** + * The list should be allocated using alloc(), as should each item in the + * list. This function takes over responsibility for freeing the list. + * +! * XXX The list is made into the arggument list. This is freed using + * FreeWild(), which does a series of vim_free() calls, unless the two defines + * __EMX__ and __ALWAYS_HAS_TRAILING_NUL_POINTER are set. In this case, a + * routine _fnexplodefree() is used. This may cause problems, but as the drop +--- 6677,6683 ---- + * The list should be allocated using alloc(), as should each item in the + * list. This function takes over responsibility for freeing the list. + * +! * XXX The list is made into the argument list. This is freed using + * FreeWild(), which does a series of vim_free() calls, unless the two defines + * __EMX__ and __ALWAYS_HAS_TRAILING_NUL_POINTER are set. In this case, a + * routine _fnexplodefree() is used. This may cause problems, but as the drop +*************** +*** 7795,7801 **** + if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged() + && !eap->forceit) + { +! EMSG(_("E747: Cannot change directory, buffer is modifed (add ! to override)")); + return; + } + +--- 7795,7801 ---- + if (vim_strchr(p_cpo, CPO_CHDIR) != NULL && curbufIsChanged() + && !eap->forceit) + { +! EMSG(_("E747: Cannot change directory, buffer is modified (add ! to override)")); + return; + } + +*************** +*** 9391,9397 **** + if (src > srcstart && src[-1] == '\\') + { + *usedlen = 0; +! STRCPY(src - 1, src); /* remove backslash */ + return NULL; + } + +--- 9391,9397 ---- + if (src > srcstart && src[-1] == '\\') + { + *usedlen = 0; +! mch_memmove(src - 1, src, STRLEN(src) + 1); /* remove backslash */ + return NULL; + } + +*** ../vim-7.1.155/src/version.c Sat Nov 10 22:50:20 2007 +--- src/version.c Sun Nov 11 19:15:51 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 156, + /**/ + +-- +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.1.157 b/7.1.157 new file mode 100644 index 00000000..071fdd8c --- /dev/null +++ b/7.1.157 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.157 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.157 +Problem: In Ex mode, :" gives an error at end-of-file. (Michael Hordijk) +Solution: Only give an error for an empty line, not for a comment. +Files: src/ex_docmd.c + + +*** ../vim-7.1.156/src/ex_docmd.c Sun Nov 11 19:16:44 2007 +--- src/ex_docmd.c Sat Nov 17 20:23:38 2007 +*************** +*** 1741,1747 **** + } + + /* ignore comment and empty lines */ +! if (*ea.cmd == '"' || *ea.cmd == NUL) + { + ex_pressedreturn = TRUE; + goto doend; +--- 1741,1749 ---- + } + + /* ignore comment and empty lines */ +! if (*ea.cmd == '"') +! goto doend; +! if (*ea.cmd == NUL) + { + ex_pressedreturn = TRUE; + goto doend; +*** ../vim-7.1.156/src/version.c Sun Nov 11 19:16:44 2007 +--- src/version.c Tue Nov 20 12:28:22 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 157, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +119. You are reading a book and look for the scroll bar to get to + the next 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.1.158 b/7.1.158 new file mode 100644 index 00000000..8bd2e8f6 --- /dev/null +++ b/7.1.158 @@ -0,0 +1,157 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.158 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.158 (extra) +Problem: Win32 console: When 'encoding' is "utf-8" and typing Alt-y the + result is wrong. Win32 GUI: Alt-y results in "u" when 'encoding' + is "cp1250" (Lukas Cerman) +Solution: For utf-8 don't set the 7th bit in a byte, convert to the correct + byte sequence. For cp1250, when conversion to 'encoding' results + in the 7th bit not set, set the 7th bit after conversion. +Files: src/os_win32.c, src/gui_w48.c + + +*** ../vim-7.1.157/src/os_win32.c Mon Oct 1 20:33:45 2007 +--- src/os_win32.c Sat Oct 27 17:35:04 2007 +*************** +*** 1521,1527 **** +--- 1521,1532 ---- + #endif + ) + { ++ #ifdef FEAT_MBYTE ++ n = (*mb_char2bytes)(typeahead[typeaheadlen] | 0x80, ++ typeahead + typeaheadlen); ++ #else + typeahead[typeaheadlen] |= 0x80; ++ #endif + modifiers &= ~MOD_MASK_ALT; + } + +*** ../vim-7.1.157/src/gui_w48.c Sun Sep 30 14:00:41 2007 +--- src/gui_w48.c Mon Oct 29 20:00:25 2007 +*************** +*** 486,495 **** + + /* + * Convert Unicode character "ch" to bytes in "string[slen]". + * Return the length. + */ + static int +! char_to_string(int ch, char_u *string, int slen) + { + int len; + int i; +--- 486,496 ---- + + /* + * Convert Unicode character "ch" to bytes in "string[slen]". ++ * When "had_alt" is TRUE the ALT key was included in "ch". + * Return the length. + */ + static int +! char_to_string(int ch, char_u *string, int slen, int had_alt) + { + int len; + int i; +*************** +*** 522,529 **** +--- 523,544 ---- + * "enc_codepage" is non-zero use the standard Win32 function, + * otherwise use our own conversion function (e.g., for UTF-8). */ + if (enc_codepage > 0) ++ { + len = WideCharToMultiByte(enc_codepage, 0, wstring, len, + string, slen, 0, NULL); ++ /* If we had included the ALT key into the character but now the ++ * upper bit is no longer set, that probably means the conversion ++ * failed. Convert the original character and set the upper bit ++ * afterwards. */ ++ if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80) ++ { ++ wstring[0] = ch & 0x7f; ++ len = WideCharToMultiByte(enc_codepage, 0, wstring, len, ++ string, slen, 0, NULL); ++ if (len == 1) /* safety check */ ++ string[0] |= 0x80; ++ } ++ } + else + { + len = 1; +*************** +*** 573,579 **** + char_u string[40]; + int len = 0; + +! len = char_to_string(ch, string, 40); + if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts) + { + trash_input_buf(); +--- 588,594 ---- + char_u string[40]; + int len = 0; + +! len = char_to_string(ch, string, 40, FALSE); + if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts) + { + trash_input_buf(); +*************** +*** 640,646 **** + { + /* Although the documentation isn't clear about it, we assume "ch" is + * a Unicode character. */ +! len += char_to_string(ch, string + len, 40 - len); + } + + add_to_input_buf(string, len); +--- 655,661 ---- + { + /* Although the documentation isn't clear about it, we assume "ch" is + * a Unicode character. */ +! len += char_to_string(ch, string + len, 40 - len, TRUE); + } + + add_to_input_buf(string, len); +*************** +*** 1775,1781 **** + int len; + + /* Handle "key" as a Unicode character. */ +! len = char_to_string(key, string, 40); + add_to_input_buf(string, len); + } + break; +--- 1790,1796 ---- + int len; + + /* Handle "key" as a Unicode character. */ +! len = char_to_string(key, string, 40, FALSE); + add_to_input_buf(string, len); + } + break; +*** ../vim-7.1.157/src/version.c Tue Nov 20 12:30:31 2007 +--- src/version.c Tue Nov 20 17:19:18 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 158, + /**/ + +-- +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.1.159 b/7.1.159 new file mode 100644 index 00000000..e7f86991 --- /dev/null +++ b/7.1.159 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.159 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.159 +Problem: strcpy() has overlapping arguments. +Solution: Use mch_memmove() instead. (Dominique Pelle) +Files: src/ex_cmds.c + + +*** ../vim-7.1.158/src/ex_cmds.c Thu Nov 8 20:47:34 2007 +--- src/ex_cmds.c Sun Nov 18 14:11:58 2007 +*************** +*** 4885,4891 **** + ++line2; + /* move the cursor to the new line, like Vi */ + ++curwin->w_cursor.lnum; +! STRCPY(new_start, p1 + 1); /* copy the rest */ + p1 = new_start - 1; + } + } +--- 4885,4892 ---- + ++line2; + /* move the cursor to the new line, like Vi */ + ++curwin->w_cursor.lnum; +! /* copy the rest */ +! mch_memmove(new_start, p1 + 1, STRLEN(p1 + 1) + 1); + p1 = new_start - 1; + } + } +*** ../vim-7.1.158/src/version.c Tue Nov 20 17:21:28 2007 +--- src/version.c Tue Nov 20 18:01:45 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 159, + /**/ + +-- +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.1.160 b/7.1.160 new file mode 100644 index 00000000..48d0443d --- /dev/null +++ b/7.1.160 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.160 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.160 +Problem: When a focus autocommand is defined, getting or losing focus + causes the hit-enter prompt to be redrawn. (Bjorn Winckler) +Solution: Overwrite the last line. +Files: src/message.c + + +*** ../vim-7.1.159/src/message.c Thu Sep 13 22:04:30 2007 +--- src/message.c Sun Nov 4 17:33:15 2007 +*************** +*** 2850,2855 **** +--- 2850,2864 ---- + } + else if (State == HITRETURN || State == SETWSIZE) + { ++ if (msg_row == Rows - 1) ++ { ++ /* Avoid drawing the "hit-enter" prompt below the previous one, ++ * overwrite it. Esp. useful when regaining focus and a ++ * FocusGained autocmd exists but didn't draw anything. */ ++ msg_didout = FALSE; ++ msg_col = 0; ++ msg_clr_eos(); ++ } + hit_return_msg(); + msg_row = Rows - 1; + } +*** ../vim-7.1.159/src/version.c Tue Nov 20 18:03:34 2007 +--- src/version.c Sat Nov 24 15:41:43 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 160, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +142. You dream about creating the world's greatest web site. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.161 b/7.1.161 new file mode 100644 index 00000000..69469ca3 --- /dev/null +++ b/7.1.161 @@ -0,0 +1,176 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.161 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.161 +Problem: Compilation errors with tiny features and EXITFREE. +Solution: Add #ifdefs. (Dominique Pelle) +Files: src/edit.c, src/misc2.c + + +*** ../vim-7.1.160/src/edit.c Thu Nov 8 13:03:33 2007 +--- src/edit.c Sat Nov 24 14:57:46 2007 +*************** +*** 2236,2242 **** + while (i < actual_len && (p - IObuff + 6) < IOSIZE) + #ifdef FEAT_MBYTE + if (has_mbyte) +! p += mb_char2bytes(wca[i++], p); + else + #endif + *(p++) = wca[i++]; +--- 2236,2242 ---- + while (i < actual_len && (p - IObuff + 6) < IOSIZE) + #ifdef FEAT_MBYTE + if (has_mbyte) +! p += (*mb_char2bytes)(wca[i++], p); + else + #endif + *(p++) = wca[i++]; +*************** +*** 6444,6451 **** +--- 6444,6453 ---- + { + vim_free(last_insert); + last_insert = NULL; ++ # ifdef FEAT_INS_EXPAND + vim_free(compl_orig_text); + compl_orig_text = NULL; ++ # endif + } + #endif + +*** ../vim-7.1.160/src/misc2.c Thu Nov 8 20:47:34 2007 +--- src/misc2.c Sat Nov 24 15:01:46 2007 +*************** +*** 964,970 **** + { + buf_T *buf, *nextbuf; + static int entered = FALSE; +- win_T *win; + + /* When we cause a crash here it is caught and Vim tries to exit cleanly. + * Don't try freeing everything again. */ +--- 965,970 ---- +*************** +*** 972,986 **** + return; + entered = TRUE; + + block_autocmds(); /* don't want to trigger autocommands here */ + +! #ifdef FEAT_WINDOWS + /* close all tabs and windows */ + if (first_tabpage->tp_next != NULL) + do_cmdline_cmd((char_u *)"tabonly!"); + if (firstwin != lastwin) + do_cmdline_cmd((char_u *)"only!"); +! #endif + + # if defined(FEAT_SPELL) + /* Free all spell info. */ +--- 972,988 ---- + return; + entered = TRUE; + ++ # ifdef FEAT_AUTOCMD + block_autocmds(); /* don't want to trigger autocommands here */ ++ # endif + +! # ifdef FEAT_WINDOWS + /* close all tabs and windows */ + if (first_tabpage->tp_next != NULL) + do_cmdline_cmd((char_u *)"tabonly!"); + if (firstwin != lastwin) + do_cmdline_cmd((char_u *)"only!"); +! # endif + + # if defined(FEAT_SPELL) + /* Free all spell info. */ +*************** +*** 1031,1038 **** +--- 1033,1044 ---- + free_regexp_stuff(); + free_tag_stuff(); + free_cd_dir(); ++ # ifdef FEAT_EVAL + set_expr_line(NULL); ++ # endif ++ # ifdef FEAT_DIFF + diff_clear(curtab); ++ # endif + clear_sb_text(); /* free any scrollback text */ + + /* Free some global vars. */ +*************** +*** 1041,1059 **** + vim_free(clip_exclude_prog); + # endif + vim_free(last_cmdline); + vim_free(new_last_cmdline); + set_keep_msg(NULL, 0); + vim_free(ff_expand_buffer); + + /* Clear cmdline history. */ + p_hi = 0; + init_history(); + + #ifdef FEAT_QUICKFIX +! qf_free_all(NULL); +! /* Free all location lists */ +! FOR_ALL_WINDOWS(win) +! qf_free_all(win); + #endif + + /* Close all script inputs. */ +--- 1047,1073 ---- + vim_free(clip_exclude_prog); + # endif + vim_free(last_cmdline); ++ # ifdef FEAT_CMDHIST + vim_free(new_last_cmdline); ++ # endif + set_keep_msg(NULL, 0); + vim_free(ff_expand_buffer); + + /* Clear cmdline history. */ + p_hi = 0; ++ # ifdef FEAT_CMDHIST + init_history(); ++ # endif + + #ifdef FEAT_QUICKFIX +! { +! win_T *win; +! +! qf_free_all(NULL); +! /* Free all location lists */ +! FOR_ALL_WINDOWS(win) +! qf_free_all(win); +! } + #endif + + /* Close all script inputs. */ +*** ../vim-7.1.160/src/version.c Sat Nov 24 15:44:17 2007 +--- src/version.c Sat Nov 24 20:55:38 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 161, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +143. You dream in pallettes of 216 websafe colors. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.162 b/7.1.162 new file mode 100644 index 00000000..b61631c3 --- /dev/null +++ b/7.1.162 @@ -0,0 +1,172 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.162 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.162 +Problem: Crash when using a modifier before "while" or "for". (A.Politz) +Solution: Skip modifiers when checking for a loop command. +Files: src/proto/ex_docmd.pro, src/ex_docmd.c, src/ex_eval.c + + +*** ../vim-7.1.161/src/proto/ex_docmd.pro Sun Sep 30 14:00:41 2007 +--- src/proto/ex_docmd.pro Sat Nov 24 16:34:06 2007 +*************** +*** 5,10 **** +--- 5,11 ---- + int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int))); + void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie)); + int checkforcmd __ARGS((char_u **pp, char *cmd, int len)); ++ int modifier_len __ARGS((char_u *cmd)); + int cmd_exists __ARGS((char_u *name)); + char_u *set_one_cmd_context __ARGS((expand_T *xp, char_u *buff)); + char_u *skip_range __ARGS((char_u *cmd, int *ctx)); +*** ../vim-7.1.161/src/ex_docmd.c Tue Nov 20 12:30:31 2007 +--- src/ex_docmd.c Sat Nov 24 16:41:20 2007 +*************** +*** 2963,2968 **** +--- 2963,3019 ---- + #endif + + #if defined(FEAT_EVAL) || defined(PROTO) ++ static struct cmdmod ++ { ++ char *name; ++ int minlen; ++ int has_count; /* :123verbose :3tab */ ++ } cmdmods[] = { ++ {"aboveleft", 3, FALSE}, ++ {"belowright", 3, FALSE}, ++ {"botright", 2, FALSE}, ++ {"browse", 3, FALSE}, ++ {"confirm", 4, FALSE}, ++ {"hide", 3, FALSE}, ++ {"keepalt", 5, FALSE}, ++ {"keepjumps", 5, FALSE}, ++ {"keepmarks", 3, FALSE}, ++ {"leftabove", 5, FALSE}, ++ {"lockmarks", 3, FALSE}, ++ {"rightbelow", 6, FALSE}, ++ {"sandbox", 3, FALSE}, ++ {"silent", 3, FALSE}, ++ {"tab", 3, TRUE}, ++ {"topleft", 2, FALSE}, ++ {"verbose", 4, TRUE}, ++ {"vertical", 4, FALSE}, ++ }; ++ ++ /* ++ * Return length of a command modifier (including optional count). ++ * Return zero when it's not a modifier. ++ */ ++ int ++ modifier_len(cmd) ++ char_u *cmd; ++ { ++ int i, j; ++ char_u *p = cmd; ++ ++ 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]) ++ break; ++ if (!isalpha(p[j]) && j >= cmdmods[i].minlen ++ && (p == cmd || cmdmods[i].has_count)) ++ return j + (p - cmd); ++ } ++ return 0; ++ } ++ + /* + * Return > 0 if an Ex command "name" exists. + * Return 2 if there is an exact match. +*************** +*** 2977,3006 **** + int i; + int j; + char_u *p; +- static struct cmdmod +- { +- char *name; +- int minlen; +- } cmdmods[] = { +- {"aboveleft", 3}, +- {"belowright", 3}, +- {"botright", 2}, +- {"browse", 3}, +- {"confirm", 4}, +- {"hide", 3}, +- {"keepalt", 5}, +- {"keepjumps", 5}, +- {"keepmarks", 3}, +- {"leftabove", 5}, +- {"lockmarks", 3}, +- {"rightbelow", 6}, +- {"sandbox", 3}, +- {"silent", 3}, +- {"tab", 3}, +- {"topleft", 2}, +- {"verbose", 4}, +- {"vertical", 4}, +- }; + + /* Check command modifiers. */ + for (i = 0; i < sizeof(cmdmods) / sizeof(struct cmdmod); ++i) +--- 3028,3033 ---- +*** ../vim-7.1.161/src/ex_eval.c Wed Aug 1 15:47:06 2007 +--- src/ex_eval.c Sat Nov 24 16:34:09 2007 +*************** +*** 2269,2277 **** + has_loop_cmd(p) + char_u *p; + { +! p = skipwhite(p); +! while (*p == ':') +! p = skipwhite(p + 1); + if ((p[0] == 'w' && p[1] == 'h') + || (p[0] == 'f' && p[1] == 'o' && p[2] == 'r')) + return TRUE; +--- 2269,2286 ---- + has_loop_cmd(p) + char_u *p; + { +! int len; +! +! /* skip modifiers, white space and ':' */ +! for (;;) +! { +! while (*p == ' ' || *p == '\t' || *p == ':') +! ++p; +! len = modifier_len(p); +! if (len == 0) +! break; +! p += len; +! } + if ((p[0] == 'w' && p[1] == 'h') + || (p[0] == 'f' && p[1] == 'o' && p[2] == 'r')) + return TRUE; +*** ../vim-7.1.161/src/version.c Sat Nov 24 21:27:33 2007 +--- src/version.c Sat Nov 24 21:48:38 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 162, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +144. You eagerly await the update of the "Cool Site of the 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.1.163 b/7.1.163 new file mode 100644 index 00000000..433b2b3d --- /dev/null +++ b/7.1.163 @@ -0,0 +1,72 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.163 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.163 +Problem: Warning for the unknown option 'bufsecret'. +Solution: Remove the lines .vim that use this option. (Andy Wokula) +Files: runtime/menu.vim + + +*** ../vim-7.1.162/runtime/menu.vim Sun May 6 15:21:23 2007 +--- runtime/menu.vim Mon Nov 19 23:17:11 2007 +*************** +*** 2,8 **** + " You can also use this as a start for your own set of menus. + " + " Maintainer: Bram Moolenaar +! " Last Change: 2007 Jan 09 + + " Note that ":an" (short for ":anoremenu") is often used to make a menu work + " in all modes and avoid side effects from mappings defined by the user. +--- 2,8 ---- + " You can also use this as a start for your own set of menus. + " + " Maintainer: Bram Moolenaar +! " Last Change: 2007 Nov 19 + + " Note that ":an" (short for ":anoremenu") is often used to make a menu work + " in all modes and avoid side effects from mappings defined by the user. +*************** +*** 658,664 **** + let buf = 1 + while buf <= bufnr('$') + if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf) +- \ && !getbufvar(buf, "&bufsecret") + let s:bmenu_count = s:bmenu_count + 1 + endif + let buf = buf + 1 +--- 658,663 ---- +*************** +*** 671,677 **** + let buf = 1 + while buf <= bufnr('$') + if bufexists(buf) && !isdirectory(bufname(buf)) && buflisted(buf) +- \ && !getbufvar(buf, "&bufsecret") + call BMFilename(bufname(buf), buf) + endif + let buf = buf + 1 +--- 670,675 ---- +*** ../vim-7.1.162/src/version.c Sat Nov 24 21:49:19 2007 +--- src/version.c Thu Nov 29 17:44:08 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 163, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +158. You get a tuner card so you can watch TV while surfing. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.164 b/7.1.164 new file mode 100644 index 00000000..09aee5d3 --- /dev/null +++ b/7.1.164 @@ -0,0 +1,52 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.164 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.164 +Problem: Reading past end of regexp pattern. (Dominique Pelle) +Solution: Use utf_ptr2len(). +Files: src/regexp.c + + +*** ../vim-7.1.163/src/regexp.c Sat Aug 11 13:57:31 2007 +--- src/regexp.c Sat Nov 24 13:23:53 2007 +*************** +*** 2770,2776 **** + { + #ifdef FEAT_MBYTE + if (enc_utf8) +! prevchr_len += utf_char2len(mb_ptr2char(regparse + prevchr_len)); + else if (has_mbyte) + prevchr_len += (*mb_ptr2len)(regparse + prevchr_len); + else +--- 2770,2777 ---- + { + #ifdef FEAT_MBYTE + if (enc_utf8) +! /* exclude composing chars that mb_ptr2len does include */ +! prevchr_len += utf_ptr2len(regparse + prevchr_len); + else if (has_mbyte) + prevchr_len += (*mb_ptr2len)(regparse + prevchr_len); + else +*** ../vim-7.1.163/src/version.c Thu Nov 29 17:46:01 2007 +--- src/version.c Thu Nov 29 21:25:45 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 164, + /**/ + +-- +Send $25.00 for handy leaflet on how to make money by selling leaflets + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.165 b/7.1.165 new file mode 100644 index 00000000..b2e8b303 --- /dev/null +++ b/7.1.165 @@ -0,0 +1,177 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.165 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.165 +Problem: Crash related to getting X window ID. (Dominique Pelle) +Solution: Don't trust the window ID that we got in the past, check it every + time. +Files: src/os_unix.c + + +*** ../vim-7.1.164/src/os_unix.c Thu Aug 30 11:46:46 2007 +--- src/os_unix.c Thu Nov 29 18:19:56 2007 +*************** +*** 310,316 **** + } + + /* +! * mch_inchar(): low level input funcion. + * Get a characters from the keyboard. + * Return the number of characters that are available. + * If wtime == 0 do not wait for characters. +--- 310,316 ---- + } + + /* +! * mch_inchar(): low level input function. + * Get a characters from the keyboard. + * Return the number of characters that are available. + * If wtime == 0 do not wait for characters. +*************** +*** 1567,1584 **** + #ifdef FEAT_XCLIPBOARD + if (xterm_dpy != NULL && x11_window != 0) + { +! /* Checked it already. */ +! if (x11_display_from == XD_XTERM) +! return OK; +! +! /* +! * If the X11 display was opened here before, for the window where Vim +! * was started, close that one now to avoid a memory leak. +! */ +! if (x11_display_from == XD_HERE && x11_display != NULL) +! XCloseDisplay(x11_display); +! x11_display = xterm_dpy; +! x11_display_from = XD_XTERM; + if (test_x11_window(x11_display) == FAIL) + { + /* probably bad $WINDOWID */ +--- 1567,1585 ---- + #ifdef FEAT_XCLIPBOARD + if (xterm_dpy != NULL && x11_window != 0) + { +! /* We may have checked it already, but Gnome terminal can move us to +! * another window, so we need to check every time. */ +! if (x11_display_from != XD_XTERM) +! { +! /* +! * If the X11 display was opened here before, for the window where +! * Vim was started, close that one now to avoid a memory leak. +! */ +! if (x11_display_from == XD_HERE && x11_display != NULL) +! XCloseDisplay(x11_display); +! x11_display = xterm_dpy; +! x11_display_from = XD_XTERM; +! } + if (test_x11_window(x11_display) == FAIL) + { + /* probably bad $WINDOWID */ +*************** +*** 2421,2427 **** + /* + * Set the case of the file name, if it already exists. This will cause the + * file name to remain exactly the same. +! * Only required for file systems where case is ingored and preserved. + */ + /*ARGSUSED*/ + void +--- 2422,2428 ---- + /* + * Set the case of the file name, if it already exists. This will cause the + * file name to remain exactly the same. +! * Only required for file systems where case is ignored and preserved. + */ + /*ARGSUSED*/ + void +*************** +*** 4653,4659 **** + ret = poll(fds, nfd, towait); + # ifdef FEAT_MZSCHEME + if (ret == 0 && mzquantum_used) +! /* MzThreads scheduling is required and timeout occured */ + finished = FALSE; + # endif + +--- 4654,4660 ---- + ret = poll(fds, nfd, towait); + # ifdef FEAT_MZSCHEME + if (ret == 0 && mzquantum_used) +! /* MzThreads scheduling is required and timeout occurred */ + finished = FALSE; + # endif + +*************** +*** 4801,4807 **** + #endif + # ifdef FEAT_MZSCHEME + if (ret == 0 && mzquantum_used) +! /* loop if MzThreads must be scheduled and timeout occured */ + finished = FALSE; + # endif + +--- 4802,4808 ---- + #endif + # ifdef FEAT_MZSCHEME + if (ret == 0 && mzquantum_used) +! /* loop if MzThreads must be scheduled and timeout occurred */ + finished = FALSE; + # endif + +*************** +*** 5191,5197 **** + { + /* When using system() always add extra quotes, because the shell + * is started twice. Otherwise put a backslash before special +! * characters, except insice ``. */ + #ifdef USE_SYSTEM + STRCAT(command, " \""); + STRCAT(command, pat[i]); +--- 5192,5198 ---- + { + /* When using system() always add extra quotes, because the shell + * is started twice. Otherwise put a backslash before special +! * characters, except inside ``. */ + #ifdef USE_SYSTEM + STRCAT(command, " \""); + STRCAT(command, pat[i]); +*************** +*** 5675,5681 **** + /* gpm library tries to handling TSTP causes + * problems. Anyways, we close connection to Gpm whenever + * we are going to suspend or starting an external process +! * so we should'nt have problem with this + */ + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); + return 1; /* succeed */ +--- 5676,5682 ---- + /* gpm library tries to handling TSTP causes + * problems. Anyways, we close connection to Gpm whenever + * we are going to suspend or starting an external process +! * so we shouldn't have problem with this + */ + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); + return 1; /* succeed */ +*** ../vim-7.1.164/src/version.c Thu Nov 29 21:26:38 2007 +--- src/version.c Sat Dec 1 17:17:20 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 165, + /**/ + +-- +"Hit any key to continue" is very confusing when you have two keyboards. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.166 b/7.1.166 new file mode 100644 index 00000000..14268d72 --- /dev/null +++ b/7.1.166 @@ -0,0 +1,80 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.166 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.166 +Problem: Memory leak for using "gp" in Visual mode. +Solution: Free memory in put_register(). (Dominique Pelle) +Files: src/ops.c + + +*** ../vim-7.1.165/src/ops.c Thu Nov 8 10:35:02 2007 +--- src/ops.c Sun Nov 25 15:17:43 2007 +*************** +*** 927,934 **** + int name; + int copy; /* make a copy, if FALSE make register empty. */ + { +! static struct yankreg *reg; +! int i; + + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. Obtain the +--- 927,934 ---- + int name; + int copy; /* make a copy, if FALSE make register empty. */ + { +! struct yankreg *reg; +! int i; + + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. Obtain the +*************** +*** 967,973 **** + } + + /* +! * Put "reg" into register "name". Free any previous contents. + */ + void + put_register(name, reg) +--- 967,973 ---- + } + + /* +! * Put "reg" into register "name". Free any previous contents and "reg". + */ + void + put_register(name, reg) +*************** +*** 977,982 **** +--- 977,983 ---- + get_yank_register(name, 0); + free_yank_all(); + *y_current = *(struct yankreg *)reg; ++ vim_free(reg); + + # ifdef FEAT_CLIPBOARD + /* Send text written to clipboard register to the clipboard. */ +*** ../vim-7.1.165/src/version.c Sat Dec 1 17:18:45 2007 +--- src/version.c Sat Dec 1 21:11:25 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 166, + /**/ + +-- +An error has occurred. Hit any user to continue. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.167 b/7.1.167 new file mode 100644 index 00000000..66426401 --- /dev/null +++ b/7.1.167 @@ -0,0 +1,80 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.167 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.167 +Problem: Xxd crashes when using "xxd -b -c 110". (Debian bug 452789) +Solution: Allocate more memory. Fix check for maximum number of columns. +Files: src/xxd/xxd.c + + +*** ../vim-7.1.166/src/xxd/xxd.c Thu May 10 19:07:42 2007 +--- src/xxd/xxd.c Thu Nov 29 21:05:16 2007 +*************** +*** 212,218 **** + + #define TRY_SEEK /* attempt to use lseek, or skip forward by reading */ + #define COLS 256 /* change here, if you ever need more columns */ +! #define LLEN (9 + (5*COLS-1)/2 + 2 + COLS) + + char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa; + +--- 212,218 ---- + + #define TRY_SEEK /* attempt to use lseek, or skip forward by reading */ + #define COLS 256 /* change here, if you ever need more columns */ +! #define LLEN (11 + (9*COLS-1)/1 + COLS + 2) + + char hexxa[] = "0123456789abcdef0123456789ABCDEF", *hexx = hexxa; + +*************** +*** 590,596 **** + default: octspergrp = 0; break; + } + +! if (cols < 1 || (!hextype && (cols > COLS))) + { + fprintf(stderr, "%s: invalid number of columns (max. %d).\n", pname, COLS); + exit(1); +--- 590,597 ---- + default: octspergrp = 0; break; + } + +! if (cols < 1 || ((hextype == HEX_NORMAL || hextype == HEX_BITS) +! && (cols > COLS))) + { + fprintf(stderr, "%s: invalid number of columns (max. %d).\n", pname, COLS); + exit(1); +*************** +*** 750,755 **** +--- 751,757 ---- + } + if (ebcdic) + e = (e < 64) ? '.' : etoa64[e-64]; ++ /* When changing this update definition of LLEN above. */ + l[11 + (grplen * cols - 1)/octspergrp + p] = + #ifdef __MVS__ + (e >= 64) +*** ../vim-7.1.166/src/version.c Sat Dec 1 21:12:23 2007 +--- src/version.c Mon Dec 3 21:30:31 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 167, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +178. You look for an icon to double-click to open your bedroom 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.1.168 b/7.1.168 new file mode 100644 index 00000000..07bf9c24 --- /dev/null +++ b/7.1.168 @@ -0,0 +1,112 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.168 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.168 (extra) +Problem: Win32 GUI: Since patch 7.1.095, when the Vim window does not have + focus, clicking in it doesn't position the cursor. (Juergen + Kraemer) +Solution: Don't reset s_button_pending just after receiving focus. +Files: src/gui_w48.c + + +*** ../vim-7.1.167/src/gui_w48.c Tue Nov 20 17:21:28 2007 +--- src/gui_w48.c Mon Dec 3 22:13:16 2007 +*************** +*** 290,295 **** +--- 290,300 ---- + + /* Local variables */ + static int s_button_pending = -1; ++ ++ /* s_getting_focus is set when we got focus but didn't see mouse-up event yet, ++ * so don't reset s_button_pending. */ ++ static int s_getting_focus = FALSE; ++ + static int s_x_pending; + static int s_y_pending; + static UINT s_kFlags_pending; +*************** +*** 671,676 **** +--- 676,683 ---- + { + int vim_modifiers = 0x0; + ++ s_getting_focus = FALSE; ++ + if (keyFlags & MK_SHIFT) + vim_modifiers |= MOUSE_SHIFT; + if (keyFlags & MK_CONTROL) +*************** +*** 792,797 **** +--- 799,805 ---- + { + int button; + ++ s_getting_focus = FALSE; + if (s_button_pending > -1) + { + /* Delayed action for mouse down event */ +*************** +*** 1951,1958 **** + allow_scrollbar = FALSE; + + /* Clear pending mouse button, the release event may have been +! * taken by the dialog window. */ +! s_button_pending = -1; + + return OK; + } +--- 1959,1968 ---- + allow_scrollbar = FALSE; + + /* Clear pending mouse button, the release event may have been +! * taken by the dialog window. But don't do this when getting +! * focus, we need the mouse-up event then. */ +! if (!s_getting_focus) +! s_button_pending = -1; + + return OK; + } +*************** +*** 2702,2707 **** +--- 2712,2718 ---- + HWND hwndOldFocus) + { + gui_focus_change(TRUE); ++ s_getting_focus = TRUE; + (void)MyWindowProc(hwnd, WM_SETFOCUS, (WPARAM)hwndOldFocus, 0); + } + +*************** +*** 2711,2716 **** +--- 2722,2728 ---- + HWND hwndNewFocus) + { + gui_focus_change(FALSE); ++ s_getting_focus = FALSE; + (void)MyWindowProc(hwnd, WM_KILLFOCUS, (WPARAM)hwndNewFocus, 0); + } + +*** ../vim-7.1.167/src/version.c Mon Dec 3 21:31:56 2007 +--- src/version.c Mon Dec 3 22:16:32 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 168, + /**/ + +-- +Rule #1: Don't give somebody a tool that he's going to hurt himself with. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.169 b/7.1.169 new file mode 100644 index 00000000..12f66df6 --- /dev/null +++ b/7.1.169 @@ -0,0 +1,75 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.169 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.169 +Problem: Using uninitialized variable when system() fails. (Dominique + Pelle) +Solution: Let system() return an empty string when it fails. +Files: src/eval.c + + +*** ../vim-7.1.168/src/eval.c Thu Nov 8 20:47:34 2007 +--- src/eval.c Fri Nov 30 21:01:26 2007 +*************** +*** 15826,15832 **** + FILE *fd; + + if (check_restricted() || check_secure()) +! return; + + if (argvars[1].v_type != VAR_UNKNOWN) + { +--- 15826,15832 ---- + FILE *fd; + + if (check_restricted() || check_secure()) +! goto done; + + if (argvars[1].v_type != VAR_UNKNOWN) + { +*************** +*** 15837,15843 **** + if ((infile = vim_tempname('i')) == NULL) + { + EMSG(_(e_notmp)); +! return; + } + + fd = mch_fopen((char *)infile, WRITEBIN); +--- 15837,15843 ---- + if ((infile = vim_tempname('i')) == NULL) + { + EMSG(_(e_notmp)); +! goto done; + } + + fd = mch_fopen((char *)infile, WRITEBIN); +*** ../vim-7.1.168/src/version.c Mon Dec 3 22:20:17 2007 +--- src/version.c Fri Dec 7 17:07:32 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 169, + /**/ + +-- +% 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.1.170 b/7.1.170 new file mode 100644 index 00000000..fabeb110 --- /dev/null +++ b/7.1.170 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.170 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.170 +Problem: Valgrind warning for overlapping arguments for strcpy(). +Solution: Use mch_memmove() instead. (Dominique Pelle) +Files: src/getchar.c + + +*** ../vim-7.1.169/src/getchar.c Thu Sep 13 18:25:08 2007 +--- src/getchar.c Mon Dec 3 20:42:29 2007 +*************** +*** 253,260 **** + return; + } + else if (buf->bh_index != 0) +! STRCPY(buf->bh_first.b_next->b_str, +! buf->bh_first.b_next->b_str + buf->bh_index); + buf->bh_index = 0; + + if (buf->bh_space >= (int)slen) +--- 253,261 ---- + return; + } + else if (buf->bh_index != 0) +! mch_memmove(buf->bh_first.b_next->b_str, +! buf->bh_first.b_next->b_str + buf->bh_index, +! STRLEN(buf->bh_first.b_next->b_str + buf->bh_index) + 1); + buf->bh_index = 0; + + if (buf->bh_space >= (int)slen) +*** ../vim-7.1.169/src/version.c Fri Dec 7 17:08:35 2007 +--- src/version.c Fri Dec 7 17:27:13 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 170, + /**/ + +-- +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.1.171 b/7.1.171 new file mode 100644 index 00000000..cad1edd4 --- /dev/null +++ b/7.1.171 @@ -0,0 +1,79 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.171 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.171 +Problem: Reading one byte before allocated memory. +Solution: Check index not to become negative. (Dominique Pelle) +Files: src/ex_getln.c + + +*** ../vim-7.1.170/src/ex_getln.c Tue Oct 30 17:36:31 2007 +--- src/ex_getln.c Tue Dec 4 21:49:24 2007 +*************** +*** 1186,1195 **** + case K_LEFT: + case K_S_LEFT: + case K_C_LEFT: + do + { +- if (ccline.cmdpos == 0) +- break; + --ccline.cmdpos; + #ifdef FEAT_MBYTE + if (has_mbyte) /* move to first byte of char */ +--- 1186,1195 ---- + case K_LEFT: + case K_S_LEFT: + case K_C_LEFT: ++ if (ccline.cmdpos == 0) ++ goto cmdline_not_changed; + do + { + --ccline.cmdpos; + #ifdef FEAT_MBYTE + if (has_mbyte) /* move to first byte of char */ +*************** +*** 1198,1204 **** + #endif + ccline.cmdspos -= cmdline_charsize(ccline.cmdpos); + } +! while ((c == K_S_LEFT || c == K_C_LEFT + || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL))) + && ccline.cmdbuff[ccline.cmdpos - 1] != ' '); + #ifdef FEAT_MBYTE +--- 1198,1205 ---- + #endif + ccline.cmdspos -= cmdline_charsize(ccline.cmdpos); + } +! while (ccline.cmdpos > 0 +! && (c == K_S_LEFT || c == K_C_LEFT + || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL))) + && ccline.cmdbuff[ccline.cmdpos - 1] != ' '); + #ifdef FEAT_MBYTE +*** ../vim-7.1.170/src/version.c Fri Dec 7 17:30:04 2007 +--- src/version.c Fri Dec 7 20:00:06 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 171, + /**/ + +-- +Some of the well know MS-Windows errors: + EMULTI Multitasking attempted, system confused + EKEYBOARD Keyboard locked, try getting out of this one! + EXPLAIN Unexplained error, please tell us what happened + EFUTURE Reserved for our future mistakes + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.172 b/7.1.172 new file mode 100644 index 00000000..9f608823 --- /dev/null +++ b/7.1.172 @@ -0,0 +1,50 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.172 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.172 +Problem: When 'buftype' is "acwrite" Vim still checks if the file or + directory exists before overwriting. +Solution: Don't check for overwriting when the buffer name is not a file + name. +Files: src/ex_cmds.c + + +*** ../vim-7.1.171/src/ex_cmds.c Tue Nov 20 18:03:34 2007 +--- src/ex_cmds.c Fri Dec 7 22:13:32 2007 +*************** +*** 2732,2737 **** +--- 2732,2740 ---- + && vim_strchr(p_cpo, CPO_OVERNEW) == NULL) + || (buf->b_flags & BF_READERR)) + && !p_wa ++ #ifdef FEAT_QUICKFIX ++ && !bt_nofile(buf) ++ #endif + && vim_fexists(ffname)) + { + if (!eap->forceit && !eap->append) +*** ../vim-7.1.171/src/version.c Fri Dec 7 20:28:13 2007 +--- src/version.c Sat Dec 8 22:18:54 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 172, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +206. You religiously respond immediately to e-mail, while ignoring + your growing pile of snail 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.1.173 b/7.1.173 new file mode 100644 index 00000000..e6a855d0 --- /dev/null +++ b/7.1.173 @@ -0,0 +1,61 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.173 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.173 +Problem: Accessing freed memory. (Dominique Pelle) +Solution: Don't call reg_getline() to check if a line is the first in the + file. +Files: src/regexp.c + + +*** ../vim-7.1.172/src/regexp.c Thu Nov 29 21:26:38 2007 +--- src/regexp.c Sat Dec 8 15:54:05 2007 +*************** +*** 3810,3820 **** + break; + + case RE_BOF: +! /* Passing -1 to the getline() function provided for the search +! * should always return NULL if the current line is the first +! * line of the file. */ + if (reglnum != 0 || reginput != regline +! || (REG_MULTI && reg_getline((linenr_T)-1) != NULL)) + status = RA_NOMATCH; + break; + +--- 3810,3820 ---- + break; + + case RE_BOF: +! /* We're not at the beginning of the file when below the first +! * line where we started, not at the start of the line or we +! * didn't start at the first line of the buffer. */ + if (reglnum != 0 || reginput != regline +! || (REG_MULTI && reg_firstlnum > 1)) + status = RA_NOMATCH; + break; + +*** ../vim-7.1.172/src/version.c Sat Dec 8 22:20:24 2007 +--- src/version.c Sun Dec 9 19:24:36 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 173, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +213. Your kids start referring to you as "that guy in front of the monitor." + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.174 b/7.1.174 new file mode 100644 index 00000000..7eb4c218 --- /dev/null +++ b/7.1.174 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.174 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.174 +Problem: Writing NUL past end of a buffer. +Solution: Copy one byte less when using strncat(). (Dominuque Pelle) +Files: src/ex_cmds.c, src/ex_docmd.c + + +*** ../vim-7.1.173/src/ex_cmds.c Sat Dec 8 22:20:24 2007 +--- src/ex_cmds.c Fri Dec 7 22:13:32 2007 +*************** +*** 1650,1656 **** + { + vim_snprintf((char *)IObuff, IOSIZE, _("%sviminfo: %s in line: "), + errnum, message); +! STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff)); + if (IObuff[STRLEN(IObuff) - 1] == '\n') + IObuff[STRLEN(IObuff) - 1] = NUL; + emsg(IObuff); +--- 1650,1656 ---- + { + vim_snprintf((char *)IObuff, IOSIZE, _("%sviminfo: %s in line: "), + errnum, message); +! STRNCAT(IObuff, line, IOSIZE - STRLEN(IObuff) - 1); + if (IObuff[STRLEN(IObuff) - 1] == '\n') + IObuff[STRLEN(IObuff) - 1] = NUL; + emsg(IObuff); +*** ../vim-7.1.173/src/ex_docmd.c Sat Nov 24 21:49:19 2007 +--- src/ex_docmd.c Fri Dec 7 21:01:03 2007 +*************** +*** 2660,2666 **** + errormsg = IObuff; + } + STRCAT(errormsg, ": "); +! STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff)); + } + emsg(errormsg); + } +--- 2660,2666 ---- + errormsg = IObuff; + } + STRCAT(errormsg, ": "); +! STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1); + } + emsg(errormsg); + } +*** ../vim-7.1.173/src/version.c Sun Dec 9 19:25:35 2007 +--- src/version.c Sun Dec 9 19:36:50 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 174, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +214. Your MCI "Circle of Friends" are all Hayes-compatible. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.175 b/7.1.175 new file mode 100644 index 00000000..3ec00fd7 --- /dev/null +++ b/7.1.175 @@ -0,0 +1,179 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.175 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.175 +Problem: doesn't work with some combination of 'sts', 'linebreak' and + 'backspace'. (Francois Ingelrest) +Solution: When adding white space results in not moving back delete one + character. +Files: src/edit.c + + +*** ../vim-7.1.174/src/edit.c Sat Nov 24 21:27:33 2007 +--- src/edit.c Fri Dec 7 21:32:48 2007 +*************** +*** 8189,8194 **** +--- 8189,8217 ---- + AppendCharToRedobuff(K_DEL); + } + ++ static void ins_bs_one __ARGS((colnr_T *vcolp)); ++ ++ /* ++ * Delete one character for ins_bs(). ++ */ ++ static void ++ ins_bs_one(vcolp) ++ colnr_T *vcolp; ++ { ++ dec_cursor(); ++ getvcol(curwin, &curwin->w_cursor, vcolp, NULL, NULL); ++ if (State & REPLACE_FLAG) ++ { ++ /* Don't delete characters before the insert point when in ++ * Replace mode */ ++ if (curwin->w_cursor.lnum != Insstart.lnum ++ || curwin->w_cursor.col >= Insstart.col) ++ replace_do_bs(); ++ } ++ else ++ (void)del_char(FALSE); ++ } ++ + /* + * Handle Backspace, delete-word and delete-line in Insert mode. + * Return TRUE when backspace was actually used. +*************** +*** 8418,8426 **** + int ts; + colnr_T vcol; + colnr_T want_vcol; +! #if 0 +! int extra = 0; +! #endif + + *inserted_space_p = FALSE; + if (p_sta && in_indent) +--- 8441,8447 ---- + int ts; + colnr_T vcol; + colnr_T want_vcol; +! colnr_T start_vcol; + + *inserted_space_p = FALSE; + if (p_sta && in_indent) +*************** +*** 8431,8436 **** +--- 8452,8458 ---- + * 'showbreak' may get in the way, need to get the last column of + * the previous character. */ + getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); ++ start_vcol = vcol; + dec_cursor(); + getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol); + inc_cursor(); +*************** +*** 8439,8468 **** + /* delete characters until we are at or before want_vcol */ + while (vcol > want_vcol + && (cc = *(ml_get_cursor() - 1), vim_iswhite(cc))) +! { +! dec_cursor(); +! getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); +! if (State & REPLACE_FLAG) +! { +! /* Don't delete characters before the insert point when in +! * Replace mode */ +! if (curwin->w_cursor.lnum != Insstart.lnum +! || curwin->w_cursor.col >= Insstart.col) +! { +! #if 0 /* what was this for? It causes problems when sw != ts. */ +! if (State == REPLACE && (int)vcol < want_vcol) +! { +! (void)del_char(FALSE); +! extra = 2; /* don't pop too much */ +! } +! else +! #endif +! replace_do_bs(); +! } +! } +! else +! (void)del_char(FALSE); +! } + + /* insert extra spaces until we are at want_vcol */ + while (vcol < want_vcol) +--- 8461,8467 ---- + /* delete characters until we are at or before want_vcol */ + while (vcol > want_vcol + && (cc = *(ml_get_cursor() - 1), vim_iswhite(cc))) +! ins_bs_one(&vcol); + + /* insert extra spaces until we are at want_vcol */ + while (vcol < want_vcol) +*************** +*** 8479,8500 **** + #endif + { + ins_str((char_u *)" "); +! if ((State & REPLACE_FLAG) /* && extra <= 1 */) +! { +! #if 0 +! if (extra) +! replace_push_off(NUL); +! else +! #endif +! replace_push(NUL); +! } +! #if 0 +! if (extra == 2) +! extra = 1; +! #endif + } + getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); + } + } + + /* +--- 8478,8493 ---- + #endif + { + ins_str((char_u *)" "); +! if ((State & REPLACE_FLAG)) +! replace_push(NUL); + } + getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL); + } ++ ++ /* If we are now back where we started delete one character. Can ++ * happen when using 'sts' and 'linebreak'. */ ++ if (vcol >= start_vcol) ++ ins_bs_one(&vcol); + } + + /* +*** ../vim-7.1.174/src/version.c Sun Dec 9 19:37:37 2007 +--- src/version.c Sun Dec 9 20:24:11 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 175, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +215. Your mouse-clicking forearm rivals Popeye's. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.176 b/7.1.176 new file mode 100644 index 00000000..e752419f --- /dev/null +++ b/7.1.176 @@ -0,0 +1,88 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.176 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.176 +Problem: Building with Aap fails when the "compiledby" argument contains + '<' or '>' characters. (Alex Yeh) +Solution: Change how quoting is done in the Aap recipe. +Files: src/main.aap + + +*** ../vim-7.1.175/src/main.aap Tue Sep 25 22:13:14 2007 +--- src/main.aap Fri Dec 7 17:03:31 2007 +*************** +*** 63,70 **** + @else: + @ arch = "ppc" + :print Building for $arch system + :sys CONFIG_STATUS=auto/config.status +! ./configure.aap `file2string("config.arg")` + --with-mac-arch=$arch + --cache-file=auto/config.cache + +--- 63,71 ---- + @else: + @ arch = "ppc" + :print Building for $arch system ++ config_args = `file2string("config.arg")` + :sys CONFIG_STATUS=auto/config.status +! ./configure.aap $config_args + --with-mac-arch=$arch + --cache-file=auto/config.cache + +*************** +*** 440,450 **** + :print >> $target char_u *all_lflags = (char_u *)"$linkcmd"; + @if _no.get("COMPILEDBY"): + who = $COMPILEDBY +! where = '' + @else: + :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who + + :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where + :print >> $target char_u *compiled_user = (char_u *)"$who"; + :print >> $target char_u *compiled_sys = (char_u *)"$where"; + +--- 441,453 ---- + :print >> $target char_u *all_lflags = (char_u *)"$linkcmd"; + @if _no.get("COMPILEDBY"): + who = $COMPILEDBY +! where = + @else: + :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who + + :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where ++ @who = string.replace(who, '"', '\\"') ++ @where = string.replace(where, '"', '\\"') + :print >> $target char_u *compiled_user = (char_u *)"$who"; + :print >> $target char_u *compiled_sys = (char_u *)"$where"; + +*** ../vim-7.1.175/src/version.c Sun Dec 9 20:25:59 2007 +--- src/version.c Mon Dec 31 16:40:01 2007 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 176, + /**/ + +-- +E M A C S +s e l o h +c t t n i +a a t f +p r t +e o + l + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.177 b/7.1.177 new file mode 100644 index 00000000..cc3b13c5 --- /dev/null +++ b/7.1.177 @@ -0,0 +1,193 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.177 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.177 +Problem: Freeing memory twice when in debug mode while reading a script. +Solution: Ignore script input while in debug mode. +Files: src/ex_cmds2.c, src/getchar.c, src/globals.h + + +*** ../vim-7.1.176/src/ex_cmds2.c Thu May 10 20:55:46 2007 +--- src/ex_cmds2.c Tue Jan 1 14:13:41 2008 +*************** +*** 93,98 **** +--- 93,100 ---- + int save_emsg_silent = emsg_silent; + int save_redir_off = redir_off; + tasave_T typeaheadbuf; ++ int typeahead_saved = FALSE; ++ int save_ignore_script; + # ifdef FEAT_EX_EXTRA + int save_ex_normal_busy; + # endif +*************** +*** 159,176 **** + * This makes sure we get input from the user here and don't interfere + * with the commands being executed. Reset "ex_normal_busy" to avoid + * the side effects of using ":normal". Save the stuff buffer and make +! * it empty. */ + # ifdef FEAT_EX_EXTRA + save_ex_normal_busy = ex_normal_busy; + ex_normal_busy = 0; + # endif + if (!debug_greedy) + save_typeahead(&typeaheadbuf); + + cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL); + +! if (!debug_greedy) + restore_typeahead(&typeaheadbuf); + # ifdef FEAT_EX_EXTRA + ex_normal_busy = save_ex_normal_busy; + # endif +--- 161,186 ---- + * This makes sure we get input from the user here and don't interfere + * with the commands being executed. Reset "ex_normal_busy" to avoid + * the side effects of using ":normal". Save the stuff buffer and make +! * it empty. Set ignore_script to avoid reading from script input. */ + # ifdef FEAT_EX_EXTRA + save_ex_normal_busy = ex_normal_busy; + ex_normal_busy = 0; + # endif + if (!debug_greedy) ++ { + save_typeahead(&typeaheadbuf); ++ typeahead_saved = TRUE; ++ save_ignore_script = ignore_script; ++ ignore_script = TRUE; ++ } + + cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL); + +! if (typeahead_saved) +! { + restore_typeahead(&typeaheadbuf); ++ ignore_script = save_ignore_script; ++ } + # ifdef FEAT_EX_EXTRA + ex_normal_busy = save_ex_normal_busy; + # endif +*** ../vim-7.1.176/src/getchar.c Fri Dec 7 17:30:04 2007 +--- src/getchar.c Tue Jan 1 14:11:42 2008 +*************** +*** 1279,1286 **** + void + free_typebuf() + { +! vim_free(typebuf.tb_buf); +! vim_free(typebuf.tb_noremap); + } + + /* +--- 1279,1292 ---- + void + free_typebuf() + { +! if (typebuf.tb_buf == typebuf_init) +! 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); + } + + /* +*************** +*** 1359,1364 **** +--- 1365,1375 ---- + EMSG(_(e_nesting)); + return; + } ++ #ifdef FEAT_EVAL ++ if (ignore_script) ++ /* Not reading from script, also don't open one. Warning message? */ ++ return; ++ #endif + + if (scriptin[curscript] != NULL) /* already reading script */ + ++curscript; +*************** +*** 2346,2352 **** + current_menu->silent[idx]); + } + } +! #endif /* FEAT_GUI */ + continue; /* try mapping again */ + } + +--- 2357,2363 ---- + current_menu->silent[idx]); + } + } +! #endif /* FEAT_GUI && FEAT_MENU */ + continue; /* try mapping again */ + } + +*************** +*** 2862,2872 **** + undo_off = FALSE; /* restart undo now */ + + /* +! * first try script file +! * If interrupted: Stop reading script files. + */ + script_char = -1; +! while (scriptin[curscript] != NULL && script_char < 0) + { + if (got_int || (script_char = getc(scriptin[curscript])) < 0) + { +--- 2873,2887 ---- + undo_off = FALSE; /* restart undo now */ + + /* +! * Get a character from a script file if there is one. +! * If interrupted: Stop reading script files, close them all. + */ + script_char = -1; +! while (scriptin[curscript] != NULL && script_char < 0 +! #ifdef FEAT_EVAL +! && !ignore_script +! #endif +! ) + { + if (got_int || (script_char = getc(scriptin[curscript])) < 0) + { +*** ../vim-7.1.176/src/globals.h Sat Sep 29 14:15:00 2007 +--- src/globals.h Mon Dec 31 17:00:21 2007 +*************** +*** 954,959 **** +--- 954,962 ---- + EXTERN int ex_normal_busy INIT(= 0); /* recursiveness of ex_normal() */ + EXTERN int ex_normal_lock INIT(= 0); /* forbid use of ex_normal() */ + #endif ++ #ifdef FEAT_EVAL ++ EXTERN int ignore_script INIT(= FALSE); /* ignore script input */ ++ #endif + EXTERN int stop_insert_mode; /* for ":stopinsert" and 'insertmode' */ + + EXTERN int KeyTyped; /* TRUE if user typed current char */ +*** ../vim-7.1.176/src/version.c Mon Dec 31 16:41:31 2007 +--- src/version.c Tue Jan 1 14:00:09 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 177, + /**/ + +-- +Back up my hard drive? I can't find the reverse switch! + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.178 b/7.1.178 new file mode 100644 index 00000000..972e4951 --- /dev/null +++ b/7.1.178 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.178 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.178 +Problem: "%" doesn't work on "/* comment *//* comment */". +Solution: Don't handle the "//" in "*//*" as a C++ comment. (Markus + Heidelberg) +Files: src/search.c + + +*** ../vim-7.1.177/src/search.c Wed Aug 8 22:48:16 2007 +--- src/search.c Mon Dec 10 21:21:17 2007 +*************** +*** 2319,2325 **** + #endif + while ((p = vim_strchr(p, '/')) != NULL) + { +! if (p[1] == '/') + break; + ++p; + } +--- 2319,2327 ---- + #endif + while ((p = vim_strchr(p, '/')) != NULL) + { +! /* accept a double /, unless it's preceded with * and followed by *, +! * because * / / * is an end and start of a C comment */ +! if (p[1] == '/' && (p == line || p[-1] != '*' || p[2] != '*')) + break; + ++p; + } +*** ../vim-7.1.177/src/version.c Tue Jan 1 14:16:42 2008 +--- src/version.c Tue Jan 1 15:41:33 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 178, + /**/ + +-- +I'd like to meet the man who invented sex and see what he's working on now. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.179 b/7.1.179 new file mode 100644 index 00000000..1e131759 --- /dev/null +++ b/7.1.179 @@ -0,0 +1,189 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.179 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.179 +Problem: Need to check for TCL 8.5. +Solution: Adjust configure script. (Alexey Froloff) +Files: src/configure.in, src/auto/configure + + +*** ../vim-7.1.178/src/configure.in Sun Nov 4 15:35:23 2007 +--- src/configure.in Sun Dec 30 13:55:28 2007 +*************** +*** 759,773 **** + + if test "$enable_tclinterp" = "yes"; then + +! dnl on FreeBSD tclsh is a silly script, look for tclsh8.[420] + AC_MSG_CHECKING(--with-tclsh argument) + AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)], + tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name), +! tclsh_name="tclsh8.4"; AC_MSG_RESULT(no)) + AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name) + AC_SUBST(vi_cv_path_tcl) + +! dnl when no specific version specified, also try 8.2 and 8.0 + if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then + tclsh_name="tclsh8.2" + AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name) +--- 759,777 ---- + + if test "$enable_tclinterp" = "yes"; then + +! dnl on FreeBSD tclsh is a silly script, look for tclsh8.[5420] + AC_MSG_CHECKING(--with-tclsh argument) + AC_ARG_WITH(tclsh, [ --with-tclsh=PATH which tclsh to use (default: tclsh8.0)], + tclsh_name="$withval"; AC_MSG_RESULT($tclsh_name), +! tclsh_name="tclsh8.5"; AC_MSG_RESULT(no)) + AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name) + AC_SUBST(vi_cv_path_tcl) + +! dnl when no specific version specified, also try 8.4, 8.2 and 8.0 +! if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then +! tclsh_name="tclsh8.4" +! AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name) +! fi + if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then + tclsh_name="tclsh8.2" + AC_PATH_PROG(vi_cv_path_tcl, $tclsh_name) +*************** +*** 810,815 **** +--- 814,820 ---- + AC_MSG_CHECKING(for location of tclConfig.sh script) + if test "x$MACOSX" != "xyes"; then + tclcnf=`echo $tclinc | sed s/include/lib/g` ++ tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`" + else + dnl For Mac OS X 10.3, use the OS-provided framework location + tclcnf="/System/Library/Frameworks/Tcl.framework" +*************** +*** 830,835 **** +--- 835,841 ---- + AC_MSG_RESULT() + AC_MSG_CHECKING(for Tcl library by myself) + tcllib=`echo $tclinc | sed s/include/lib/g` ++ tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`" + for ext in .so .a ; do + for ver in "" $tclver ; do + for try in $tcllib ; do +*** ../vim-7.1.178/src/auto/configure Sun Nov 4 15:35:23 2007 +--- src/auto/configure Sun Dec 30 13:55:35 2007 +*************** +*** 4445,4451 **** + tclsh_name="$withval"; echo "$as_me:$LINENO: result: $tclsh_name" >&5 + echo "${ECHO_T}$tclsh_name" >&6 + else +! tclsh_name="tclsh8.4"; echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 + fi; + # Extract the first word of "$tclsh_name", so it can be a program name with args. +--- 4445,4451 ---- + tclsh_name="$withval"; echo "$as_me:$LINENO: result: $tclsh_name" >&5 + echo "${ECHO_T}$tclsh_name" >&6 + else +! tclsh_name="tclsh8.5"; echo "$as_me:$LINENO: result: no" >&5 + echo "${ECHO_T}no" >&6 + fi; + # Extract the first word of "$tclsh_name", so it can be a program name with args. +*************** +*** 4489,4495 **** + + + +! if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then + tclsh_name="tclsh8.2" + # Extract the first word of "$tclsh_name", so it can be a program name with args. + set dummy $tclsh_name; ac_word=$2 +--- 4489,4537 ---- + + + +! if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.5"; then +! tclsh_name="tclsh8.4" +! # Extract the first word of "$tclsh_name", so it can be a program name with args. +! set dummy $tclsh_name; ac_word=$2 +! echo "$as_me:$LINENO: checking for $ac_word" >&5 +! echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +! if test "${ac_cv_path_vi_cv_path_tcl+set}" = set; then +! echo $ECHO_N "(cached) $ECHO_C" >&6 +! else +! case $vi_cv_path_tcl in +! [\\/]* | ?:[\\/]*) +! ac_cv_path_vi_cv_path_tcl="$vi_cv_path_tcl" # Let the user override the test with a path. +! ;; +! *) +! as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +! for as_dir in $PATH +! do +! IFS=$as_save_IFS +! test -z "$as_dir" && as_dir=. +! for ac_exec_ext in '' $ac_executable_extensions; do +! if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then +! ac_cv_path_vi_cv_path_tcl="$as_dir/$ac_word$ac_exec_ext" +! echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 +! break 2 +! fi +! done +! done +! +! ;; +! esac +! fi +! vi_cv_path_tcl=$ac_cv_path_vi_cv_path_tcl +! +! if test -n "$vi_cv_path_tcl"; then +! echo "$as_me:$LINENO: result: $vi_cv_path_tcl" >&5 +! echo "${ECHO_T}$vi_cv_path_tcl" >&6 +! else +! echo "$as_me:$LINENO: result: no" >&5 +! echo "${ECHO_T}no" >&6 +! fi +! +! fi +! if test "X$vi_cv_path_tcl" = "X" -a $tclsh_name = "tclsh8.4"; then + tclsh_name="tclsh8.2" + # Extract the first word of "$tclsh_name", so it can be a program name with args. + set dummy $tclsh_name; ac_word=$2 +*************** +*** 4649,4654 **** +--- 4691,4697 ---- + echo $ECHO_N "checking for location of tclConfig.sh script... $ECHO_C" >&6 + if test "x$MACOSX" != "xyes"; then + tclcnf=`echo $tclinc | sed s/include/lib/g` ++ tclcnf="$tclcnf `echo $tclinc | sed s/include/lib64/g`" + else + tclcnf="/System/Library/Frameworks/Tcl.framework" + fi +*************** +*** 4668,4673 **** +--- 4711,4717 ---- + echo "$as_me:$LINENO: checking for Tcl library by myself" >&5 + echo $ECHO_N "checking for Tcl library by myself... $ECHO_C" >&6 + tcllib=`echo $tclinc | sed s/include/lib/g` ++ tcllib="$tcllib `echo $tclinc | sed s/include/lib64/g`" + for ext in .so .a ; do + for ver in "" $tclver ; do + for try in $tcllib ; do +*** ../vim-7.1.178/src/version.c Tue Jan 1 15:42:45 2008 +--- src/version.c Tue Jan 1 16:24:07 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 179, + /**/ + +-- +Just think of all the things we haven't thought of yet. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.180 b/7.1.180 new file mode 100644 index 00000000..db8ef5dd --- /dev/null +++ b/7.1.180 @@ -0,0 +1,266 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.180 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.180 +Problem: Regexp patterns not tested sufficiently. +Solution: Add more checks to the regexp test. +Files: src/testdir/test64.in, src/testdir/test64.ok + + +*** ../vim-7.1.179/src/testdir/test64.in Tue Sep 25 17:54:41 2007 +--- src/testdir/test64.in Mon Dec 31 14:20:23 2007 +*************** +*** 14,23 **** +--- 14,136 ---- + :" etc. + :" When there is no match use only the first two items. + :let tl = [] ++ :call add(tl, ['ab', 'aab', 'ab']) + :call add(tl, ['b', 'abcdef', 'b']) + :call add(tl, ['bc*', 'abccccdef', 'bcccc']) + :call add(tl, ['bc\{-}', 'abccccdef', 'b']) + :call add(tl, ['bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd']) ++ :call add(tl, ['bc*', 'abbdef', 'b']) ++ :call add(tl, ['c*', 'ccc', 'ccc']) ++ :call add(tl, ['bc*', 'abdef', 'b']) ++ :call add(tl, ['c*', 'abdef', '']) ++ :call add(tl, ['bc\+', 'abccccdef', 'bcccc']) ++ :call add(tl, ['bc\+', 'abdef']) "no match ++ :" ++ :"operator \| ++ :call add(tl, ['a\|ab', 'cabd', 'a']) "alternation is ordered ++ :" ++ :call add(tl, ['c\?', 'ccb', 'c']) ++ :call add(tl, ['bc\?', 'abd', 'b']) ++ :call add(tl, ['bc\?', 'abccd', 'bc']) ++ :" ++ :call add(tl, ['\va{1}', 'ab', 'a']) ++ :" ++ :call add(tl, ['\va{2}', 'aa', 'aa']) ++ :call add(tl, ['\va{2}', 'caad', 'aa']) ++ :call add(tl, ['\va{2}', 'aba']) ++ :call add(tl, ['\va{2}', 'ab']) ++ :call add(tl, ['\va{2}', 'abaa', 'aa']) ++ :call add(tl, ['\va{2}', 'aaa', 'aa']) ++ :" ++ :call add(tl, ['\vb{1}', 'abca', 'b']) ++ :call add(tl, ['\vba{2}', 'abaa', 'baa']) ++ :call add(tl, ['\vba{3}', 'aabaac']) ++ :" ++ :call add(tl, ['\v(ab){1}', 'ab', 'ab', 'ab']) ++ :call add(tl, ['\v(ab){1}', 'dabc', 'ab', 'ab']) ++ :call add(tl, ['\v(ab){1}', 'acb']) ++ :" ++ :call add(tl, ['\v(ab){0,2}', 'acb', "", ""]) ++ :call add(tl, ['\v(ab){0,2}', 'ab', 'ab', 'ab']) ++ :call add(tl, ['\v(ab){1,2}', 'ab', 'ab', 'ab']) ++ :call add(tl, ['\v(ab){1,2}', 'ababc', 'abab', 'ab']) ++ :call add(tl, ['\v(ab){2,4}', 'ababcab', 'abab', 'ab']) ++ :call add(tl, ['\v(ab){2,4}', 'abcababa', 'abab', 'ab']) ++ :" ++ :call add(tl, ['\v(ab){2}', 'abab', 'abab', 'ab']) ++ :call add(tl, ['\v(ab){2}', 'cdababe', 'abab', 'ab']) ++ :call add(tl, ['\v(ab){2}', 'abac']) ++ :call add(tl, ['\v(ab){2}', 'abacabab', 'abab', 'ab']) ++ :call add(tl, ['\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab']) ++ :call add(tl, ['\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab']) ++ :" ++ :call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a']) ++ :call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa']) ++ :call add(tl, ['\v(a{2}){1}', 'aaac', 'aa', 'aa']) ++ :call add(tl, ['\v(a{2}){1}', 'daaac', 'aa', 'aa']) ++ :call add(tl, ['\v(a{1}){2}', 'daaac', 'aa', 'a']) ++ :call add(tl, ['\v(a{1}){2}', 'aaa', 'aa', 'a']) ++ :call add(tl, ['\v(a{2})+', 'adaac', 'aa', 'aa']) ++ :call add(tl, ['\v(a{2})+', 'aa', 'aa', 'aa']) ++ :call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa']) ++ :call add(tl, ['\v(a{1}){2}', 'aa', 'aa', 'a']) ++ :call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a']) ++ :call add(tl, ['\v(a{2}){2}', 'aaaa', 'aaaa', 'aa']) ++ :call add(tl, ['\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa']) ++ :" ++ :call add(tl, ['\v(a+){2}', 'dadaac', 'aa', 'a']) ++ :call add(tl, ['\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa']) ++ :" ++ :call add(tl, ['\v(a{1,2}){2}', 'daaac', 'aaa', 'a']) ++ :call add(tl, ['\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a']) ++ :call add(tl, ['\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa']) ++ :call add(tl, ['\v(a{1,3}){3}', 'daac']) ++ :call add(tl, ['\v(a{1,2}){2}', 'dac']) ++ :call add(tl, ['\v(a+)+', 'daac', 'aa', 'aa']) ++ :call add(tl, ['\v(a+)+', 'aaa', 'aaa', 'aaa']) ++ :call add(tl, ['\v(a+){1,2}', 'aaa', 'aaa', 'aaa']) ++ :call add(tl, ['\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a']) ++ :call add(tl, ['\v(a{3})+', 'daaaac', 'aaa', 'aaa']) ++ :call add(tl, ['\v(a|b|c)+', 'aacb', 'aacb', 'b']) ++ :call add(tl, ['\v(a|b|c){2}', 'abcb', 'ab', 'b']) ++ :call add(tl, ['\v(abc){2}', 'abcabd', ]) ++ :call add(tl, ['\v(abc){2}', 'abdabcabc','abcabc', 'abc']) ++ :" ++ :call add(tl, ['a*', 'cc', '']) ++ :call add(tl, ['\v(a*)+', 'cc', '']) ++ :call add(tl, ['\v((ab)+)+', 'ab', 'ab', 'ab', 'ab']) ++ :call add(tl, ['\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab']) ++ :call add(tl, ['\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab']) ++ :call add(tl, ['\v(a{0,2})+', 'cc', '']) ++ :call add(tl, ['\v(a*)+', '', '']) ++ :call add(tl, ['\v((a*)+)+', '', '']) ++ :call add(tl, ['\v((ab)*)+', '', '']) ++ :call add(tl, ['\va{1,3}', 'aab', 'aa']) ++ :call add(tl, ['\va{2,3}', 'abaa', 'aa']) ++ :" ++ :call add(tl, ['\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab']) ++ :call add(tl, ['\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb']) ++ :call add(tl, ['\va{2}|b{2}', 'abab']) ++ :call add(tl, ['\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a']) ++ :call add(tl, ['\vab{2,3}c', 'aabbccccccccccccc', 'abbc']) ++ :call add(tl, ['\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc']) ++ :call add(tl, ['\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde']) ++ :call add(tl, ['\va(bc){2}d', 'aabcbfbc' ]) ++ :call add(tl, ['\va*a{2}', 'a', ]) ++ :call add(tl, ['\va*a{2}', 'aa', 'aa' ]) ++ :call add(tl, ['\va*a{2}', 'aaa', 'aaa' ]) ++ :call add(tl, ['\va*a{2}', 'bbbabcc', ]) ++ :call add(tl, ['\va*b*|a*c*', 'a', 'a']) ++ :call add(tl, ['\va{1}b{1}|a{1}b{1}', '']) ++ :" ++ :"submatches ++ :call add(tl, ['\v(a)', 'ab', 'a', 'a']) ++ :call add(tl, ['\v(a)(b)', 'ab', 'ab', 'a', 'b']) ++ :call add(tl, ['\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c']) ++ :call add(tl, ['\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b']) ++ :call add(tl, ['\v(a)|(b)', 'ab', 'a', 'a']) ++ :" ++ :call add(tl, ['\v(a*)+', 'aaaa', 'aaaa', '']) + :call add(tl, ['x', 'abcdef']) + :" + :for t in tl +*** ../vim-7.1.179/src/testdir/test64.ok Tue Aug 14 17:28:14 2007 +--- src/testdir/test64.ok Mon Dec 31 14:20:26 2007 +*************** +*** 4,6 **** +--- 4,102 ---- + OK + OK + OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK ++ OK +*** ../vim-7.1.179/src/version.c Tue Jan 1 16:25:33 2008 +--- src/version.c Tue Jan 1 17:34:32 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 180, + /**/ + +-- +CONCORDE: Message for you, sir. + He falls forward revealing the arrow with the note. + "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.1.181 b/7.1.181 new file mode 100644 index 00000000..124ff2a8 --- /dev/null +++ b/7.1.181 @@ -0,0 +1,62 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.181 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.181 +Problem: Accessing uninitialized memory in Farsi mode. (Dominuque Pelle) +Solution: Only invoke lrF_sub() when there is something to do. +Files: src/ex_cmds.c + + +*** ../vim-7.1.180/src/ex_cmds.c Sun Dec 9 19:37:37 2007 +--- src/ex_cmds.c Mon Dec 31 17:29:25 2007 +*************** +*** 4212,4222 **** + sub_nlines = 0; + } + +- #ifdef FEAT_FKMAP /* reverse the flow of the Farsi characters */ +- if (p_altkeymap && curwin->w_p_rl) +- lrF_sub(cmd); +- #endif +- + if (eap->cmdidx == CMD_tilde) + which_pat = RE_LAST; /* use last used regexp */ + else +--- 4212,4217 ---- +*************** +*** 4252,4257 **** +--- 4247,4256 ---- + } + else /* find the end of the regexp */ + { ++ #ifdef FEAT_FKMAP /* reverse the flow of the Farsi characters */ ++ if (p_altkeymap && curwin->w_p_rl) ++ lrF_sub(cmd); ++ #endif + which_pat = RE_LAST; /* use last used regexp */ + delimiter = *cmd++; /* remember delimiter character */ + pat = cmd; /* remember start of search pat */ +*** ../vim-7.1.180/src/version.c Tue Jan 1 17:37:01 2008 +--- src/version.c Wed Jan 2 13:57:31 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 181, + /**/ + +-- +Yah, well, we had to carve our electrons out of driftwood we'd +find. In the winter. Uphill. Both ways. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.182 b/7.1.182 new file mode 100644 index 00000000..23ef997f --- /dev/null +++ b/7.1.182 @@ -0,0 +1,169 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.182 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.182 +Problem: When using tab pages and an argument list the session file may + contain wrong "next" commands. (Alexander Bluem) +Solution: Use "argu" commands and only when needed. +Files: src/ex_docmd.c + + +*** ../vim-7.1.181/src/ex_docmd.c Sun Dec 9 19:37:37 2007 +--- src/ex_docmd.c Mon Dec 31 18:24:16 2007 +*************** +*** 372,378 **** + static char_u *arg_all __ARGS((void)); + #ifdef FEAT_SESSION + static int makeopens __ARGS((FILE *fd, char_u *dirnow)); +! static int put_view __ARGS((FILE *fd, win_T *wp, int add_edit, unsigned *flagp)); + static void ex_loadview __ARGS((exarg_T *eap)); + static char_u *get_view_file __ARGS((int c)); + static int did_lcd; /* whether ":lcd" was produced for a session */ +--- 372,378 ---- + static char_u *arg_all __ARGS((void)); + #ifdef FEAT_SESSION + static int makeopens __ARGS((FILE *fd, char_u *dirnow)); +! static int put_view __ARGS((FILE *fd, win_T *wp, int add_edit, unsigned *flagp, int current_arg_idx)); + static void ex_loadview __ARGS((exarg_T *eap)); + static char_u *get_view_file __ARGS((int c)); + static int did_lcd; /* whether ":lcd" was produced for a session */ +*************** +*** 8762,8768 **** + } + else + { +! failed |= (put_view(fd, curwin, !using_vdir, flagp) == FAIL); + } + if (put_line(fd, "let &so = s:so_save | let &siso = s:siso_save") + == FAIL) +--- 8762,8769 ---- + } + else + { +! failed |= (put_view(fd, curwin, !using_vdir, flagp, +! -1) == FAIL); + } + if (put_line(fd, "let &so = s:so_save | let &siso = s:siso_save") + == FAIL) +*************** +*** 9761,9766 **** +--- 9762,9769 ---- + int tabnr; + win_T *tab_firstwin; + frame_T *tab_topframe; ++ int cur_arg_idx = 0; ++ int next_arg_idx; + + if (ssop_flags & SSOP_BUFFERS) + only_save_windows = FALSE; /* Save ALL buffers */ +*************** +*** 9976,9987 **** + { + if (!ses_do_win(wp)) + continue; +! if (put_view(fd, wp, wp != edited_win, &ssop_flags) == FAIL) + return FAIL; + if (nr > 1 && put_line(fd, "wincmd w") == FAIL) + return FAIL; + } + + /* + * Restore cursor to the current window if it's not the first one. + */ +--- 9979,9997 ---- + { + if (!ses_do_win(wp)) + continue; +! if (put_view(fd, wp, wp != edited_win, &ssop_flags, +! cur_arg_idx) == FAIL) + return FAIL; + if (nr > 1 && put_line(fd, "wincmd w") == FAIL) + return FAIL; ++ next_arg_idx = wp->w_arg_idx; + } + ++ /* The argument index in the first tab page is zero, need to set it in ++ * each window. For further tab pages it's the window where we do ++ * "tabedit". */ ++ cur_arg_idx = next_arg_idx; ++ + /* + * Restore cursor to the current window if it's not the first one. + */ +*************** +*** 10190,10200 **** + * Caller must make sure 'scrolloff' is zero. + */ + static int +! put_view(fd, wp, add_edit, flagp) + FILE *fd; + win_T *wp; + int add_edit; /* add ":edit" command to view */ + unsigned *flagp; /* vop_flags or ssop_flags */ + { + win_T *save_curwin; + int f; +--- 10200,10212 ---- + * Caller must make sure 'scrolloff' is zero. + */ + static int +! put_view(fd, wp, add_edit, flagp, current_arg_idx) + FILE *fd; + win_T *wp; + int add_edit; /* add ":edit" command to view */ + unsigned *flagp; /* vop_flags or ssop_flags */ ++ int current_arg_idx; /* current argument index of the window, use ++ * -1 if unknown */ + { + win_T *save_curwin; + int f; +*************** +*** 10224,10233 **** + + /* Only when part of a session: restore the argument index. Some + * arguments may have been deleted, check if the index is valid. */ +! if (wp->w_arg_idx != 0 && wp->w_arg_idx <= WARGCOUNT(wp) + && flagp == &ssop_flags) + { +! if (fprintf(fd, "%ldnext", (long)wp->w_arg_idx) < 0 + || put_eol(fd) == FAIL) + return FAIL; + did_next = TRUE; +--- 10236,10245 ---- + + /* Only when part of a session: restore the argument index. Some + * arguments may have been deleted, check if the index is valid. */ +! if (wp->w_arg_idx != current_arg_idx && wp->w_arg_idx <= WARGCOUNT(wp) + && flagp == &ssop_flags) + { +! if (fprintf(fd, "%ldargu", (long)wp->w_arg_idx + 1) < 0 + || put_eol(fd) == FAIL) + return FAIL; + did_next = TRUE; +*** ../vim-7.1.181/src/version.c Wed Jan 2 13:58:17 2008 +--- src/version.c Wed Jan 2 15:10:01 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 182, + /**/ + +-- +You were lucky. We lived for three months in a brown paper bag in a +septic tank. We used to have to get up at six o'clock in the morning, +clean the bag, eat a crust of stale bread, go to work down mill for +fourteen hours a day week in-week out. When we got home, our Dad +would thrash us to sleep with his belt! + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.183 b/7.1.183 new file mode 100644 index 00000000..79fd6500 --- /dev/null +++ b/7.1.183 @@ -0,0 +1,99 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.183 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.183 +Problem: "Internal error" for ":echo matchstr('a', 'a\%[\&]')" (Mitanu + Paul) +Solution: Inside "\%[]" detect \&, \| and \) as an error. +Files: src/regexp.c + + +*** ../vim-7.1.182/src/regexp.c Sun Dec 9 19:25:35 2007 +--- src/regexp.c Wed Jan 2 15:02:37 2008 +*************** +*** 1288,1295 **** + } + + /* +! * regbranch - one alternative of an | operator +! * + * Implements the & operator. + */ + static char_u * +--- 1288,1294 ---- + } + + /* +! * Handle one alternative of an | operator. + * Implements the & operator. + */ + static char_u * +*************** +*** 1330,1337 **** + } + + /* +! * regbranch - one alternative of an | or & operator +! * + * Implements the concatenation operator. + */ + static char_u * +--- 1329,1335 ---- + } + + /* +! * Handle one alternative of an | or & operator. + * Implements the concatenation operator. + */ + static char_u * +*************** +*** 1708,1713 **** +--- 1706,1713 ---- + case Magic('|'): + case Magic('&'): + case Magic(')'): ++ if (one_exactly) ++ EMSG_ONE_RET_NULL; + EMSG_RET_NULL(_(e_internal)); /* Supposed to be caught earlier. */ + /* NOTREACHED */ + +*************** +*** 3106,3112 **** + * slow, we keep one allocated piece of memory and only re-allocate it when + * it's too small. It's freed in vim_regexec_both() when finished. + */ +! static char_u *reg_tofree; + static unsigned reg_tofreelen; + + /* +--- 3106,3112 ---- + * slow, we keep one allocated piece of memory and only re-allocate it when + * it's too small. It's freed in vim_regexec_both() when finished. + */ +! static char_u *reg_tofree = NULL; + static unsigned reg_tofreelen; + + /* +*** ../vim-7.1.182/src/version.c Wed Jan 2 15:12:29 2008 +--- src/version.c Wed Jan 2 15:33:52 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 183, + /**/ + +-- +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.1.184 b/7.1.184 new file mode 100644 index 00000000..9afeff6a --- /dev/null +++ b/7.1.184 @@ -0,0 +1,63 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.184 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.184 +Problem: Crash when deleting backwards over a line break in Insert mode. +Solution: Don't advance the cursor when it's already on the NUL after a + line. (Matthew Wozniski) +Files: src/normal.c + + +*** ../vim-7.1.183/src/normal.c Sun Oct 14 17:15:45 2007 +--- src/normal.c Tue Jan 1 16:40:24 2008 +*************** +*** 5849,5860 **** + /* When the NL before the first char has to be deleted we + * put the cursor on the NUL after the previous line. + * This is a very special case, be careful! +! * don't adjust op_end now, otherwise it won't work */ + if ( (cap->oap->op_type == OP_DELETE + || cap->oap->op_type == OP_CHANGE) + && !lineempty(curwin->w_cursor.lnum)) + { +! ++curwin->w_cursor.col; + cap->retval |= CA_NO_ADJ_OP_END; + } + continue; +--- 5849,5861 ---- + /* When the NL before the first char has to be deleted we + * put the cursor on the NUL after the previous line. + * This is a very special case, be careful! +! * Don't adjust op_end now, otherwise it won't work. */ + if ( (cap->oap->op_type == OP_DELETE + || cap->oap->op_type == OP_CHANGE) + && !lineempty(curwin->w_cursor.lnum)) + { +! if (*ml_get_cursor() != NUL) +! ++curwin->w_cursor.col; + cap->retval |= CA_NO_ADJ_OP_END; + } + continue; +*** ../vim-7.1.183/src/version.c Wed Jan 2 15:34:48 2008 +--- src/version.c Wed Jan 2 16:24:19 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 184, + /**/ + +-- +Not too long ago, cut and paste was done with scissors and glue... + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.185 b/7.1.185 new file mode 100644 index 00000000..0a1e0923 --- /dev/null +++ b/7.1.185 @@ -0,0 +1,140 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.185 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.185 +Problem: Using "gR" with a multi-byte encoding and typing a CR pushes + characters onto the replace stack incorrectly, resulting in BS + putting back the wrong characters. (Paul B. Mahol) +Solution: Push multi-byte characters onto the replace stack in reverse byte + order. Add replace_push_mb(). +Files: src/edit.c, src/misc1.c, src/proto/edit.pro + + +*** ../vim-7.1.184/src/edit.c Sun Dec 9 20:25:59 2007 +--- src/edit.c Tue Jan 1 17:28:07 2008 +*************** +*** 6939,6944 **** +--- 6939,6963 ---- + ++replace_stack_nr; + } + ++ #if defined(FEAT_MBYTE) || defined(PROTO) ++ /* ++ * Push a character onto the replace stack. Handles a multi-byte character in ++ * reverse byte order, so that the first byte is popped off first. ++ * Return the number of bytes done (includes composing characters). ++ */ ++ int ++ replace_push_mb(p) ++ char_u *p; ++ { ++ int l = (*mb_ptr2len)(p); ++ int j; ++ ++ for (j = l - 1; j >= 0; --j) ++ replace_push(p[j]); ++ return l; ++ } ++ #endif ++ + #if 0 + /* + * call replace_push(c) with replace_offset set to the first NUL. +*** ../vim-7.1.184/src/misc1.c Wed Sep 26 22:35:06 2007 +--- src/misc1.c Wed Jan 2 17:48:00 2008 +*************** +*** 591,597 **** + replace_push(NUL); + p = saved_line + curwin->w_cursor.col; + while (*p != NUL) +! replace_push(*p++); + saved_line[curwin->w_cursor.col] = NUL; + } + #endif +--- 592,605 ---- + replace_push(NUL); + p = saved_line + curwin->w_cursor.col; + while (*p != NUL) +! { +! #ifdef FEAT_MBYTE +! if (has_mbyte) +! p += replace_push_mb(p); +! else +! #endif +! replace_push(*p++); +! } + saved_line[curwin->w_cursor.col] = NUL; + } + #endif +*************** +*** 1914,1920 **** + int charlen; + { + int c = buf[0]; +- int l, j; + #endif + int newlen; /* nr of bytes inserted */ + int oldlen; /* nr of bytes deleted (0 when not replacing) */ +--- 1922,1927 ---- +*************** +*** 2016,2028 **** + for (i = 0; i < oldlen; ++i) + { + #ifdef FEAT_MBYTE +! l = (*mb_ptr2len)(oldp + col + i) - 1; +! for (j = l; j >= 0; --j) +! replace_push(oldp[col + i + j]); +! i += l; +! #else +! replace_push(oldp[col + i]); + #endif + } + } + +--- 2023,2033 ---- + for (i = 0; i < oldlen; ++i) + { + #ifdef FEAT_MBYTE +! if (has_mbyte) +! i += replace_push_mb(oldp + col + i) - 1; +! else + #endif ++ replace_push(oldp[col + i]); + } + } + +*** ../vim-7.1.184/src/proto/edit.pro Sat May 5 20:21:34 2007 +--- src/proto/edit.pro Tue Jan 1 17:21:24 2008 +*************** +*** 32,37 **** +--- 32,38 ---- + char_u *get_last_insert __ARGS((void)); + char_u *get_last_insert_save __ARGS((void)); + void replace_push __ARGS((int c)); ++ int replace_push_mb __ARGS((char_u *p)); + void fixthisline __ARGS((int (*get_the_indent)(void))); + void fix_indent __ARGS((void)); + int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty)); +*** ../vim-7.1.184/src/version.c Wed Jan 2 16:25:20 2008 +--- src/version.c Wed Jan 2 17:45:10 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 185, + /**/ + +-- +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.1.186 b/7.1.186 new file mode 100644 index 00000000..c848cbba --- /dev/null +++ b/7.1.186 @@ -0,0 +1,111 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.186 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.186 +Problem: "expand('')" returns a bogus value after changing + directory. (Dave Fishburn) +Solution: Copy "autocmd_fname" to allocated memory and expand to full + filename. Shorten the path when expanding . +Files: src/ex_docmd.c, src/fileio.c + + +*** ../vim-7.1.185/src/ex_docmd.c Wed Jan 2 15:12:29 2008 +--- src/ex_docmd.c Wed Jan 2 20:12:33 2008 +*************** +*** 7799,7804 **** +--- 7799,7805 ---- + free_cd_dir() + { + vim_free(prev_dir); ++ prev_dir = NULL; + } + #endif + +*************** +*** 9521,9526 **** +--- 9522,9528 ---- + *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"\""); + return NULL; + } ++ result = shorten_fname1(result); + break; + + case SPEC_ABUF: /* buffer number for autocommand */ +*** ../vim-7.1.185/src/fileio.c Thu Nov 8 20:47:34 2007 +--- src/fileio.c Wed Jan 2 20:21:43 2008 +*************** +*** 5556,5562 **** + #endif + + #if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \ +! defined(FEAT_QUICKFIX) || defined(PROTO) + /* + * Try to find a shortname by comparing the fullname with the current + * directory. +--- 5556,5562 ---- + #endif + + #if defined(FEAT_VIMINFO) || defined(FEAT_BROWSE) || \ +! defined(FEAT_QUICKFIX) || defined(FEAT_AUTOCMD) || defined(PROTO) + /* + * Try to find a shortname by comparing the fullname with the current + * directory. +*************** +*** 8546,8551 **** +--- 8546,8553 ---- + + /* + * Set the file name to be used for . ++ * Make a copy to avoid that changing a buffer name or directory makes it ++ * invalid. + */ + if (fname_io == NULL) + { +*************** +*** 8558,8563 **** +--- 8560,8567 ---- + } + else + autocmd_fname = fname_io; ++ if (autocmd_fname != NULL) ++ autocmd_fname = FullName_save(autocmd_fname, FALSE); + + /* + * Set the buffer number to be used for . +*************** +*** 8740,8745 **** +--- 8744,8750 ---- + vim_free(sourcing_name); + sourcing_name = save_sourcing_name; + sourcing_lnum = save_sourcing_lnum; ++ vim_free(autocmd_fname); + autocmd_fname = save_autocmd_fname; + autocmd_bufnr = save_autocmd_bufnr; + autocmd_match = save_autocmd_match; +*** ../vim-7.1.185/src/version.c Wed Jan 2 17:48:24 2008 +--- src/version.c Wed Jan 2 21:06:35 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 186, + /**/ + +-- + LAUNCELOT leaps into SHOT with a mighty cry and runs the GUARD through and + hacks him to the floor. Blood. Swashbuckling music (perhaps). + LAUNCELOT races through into the castle screaming. +SECOND SENTRY: Hey! + "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.1.187 b/7.1.187 new file mode 100644 index 00000000..421a42da --- /dev/null +++ b/7.1.187 @@ -0,0 +1,81 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.187 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.187 +Problem: Win32 GUI: Custom completion using system() no longer works + after patch 7.1.104. (Erik Falor) +Solution: Loop when safe_vgetc() returns K_IGNORE. +Files: src/ex_getln.c + + +*** ../vim-7.1.186/src/ex_getln.c Fri Dec 7 20:28:13 2007 +--- src/ex_getln.c Wed Jan 2 21:42:51 2008 +*************** +*** 335,341 **** + quit_more = FALSE; /* reset after CTRL-D which had a more-prompt */ + + cursorcmd(); /* set the cursor on the right spot */ +! c = safe_vgetc(); + if (KeyTyped) + { + some_key_typed = TRUE; +--- 335,348 ---- + quit_more = FALSE; /* reset after CTRL-D which had a more-prompt */ + + cursorcmd(); /* set the cursor on the right spot */ +! +! /* Get a character. Ignore K_IGNORE, it should not do anything, such +! * as stop completion. */ +! do +! { +! c = safe_vgetc(); +! } while (c == K_IGNORE); +! + if (KeyTyped) + { + some_key_typed = TRUE; +*************** +*** 1209,1215 **** + goto cmdline_not_changed; + + case K_IGNORE: +! goto cmdline_not_changed; /* Ignore mouse */ + + #ifdef FEAT_GUI_W32 + /* On Win32 ignore , we get it when closing the window was +--- 1216,1223 ---- + goto cmdline_not_changed; + + case K_IGNORE: +! /* Ignore mouse event or ex_window() result. */ +! goto cmdline_not_changed; + + #ifdef FEAT_GUI_W32 + /* On Win32 ignore , we get it when closing the window was +*** ../vim-7.1.186/src/version.c Wed Jan 2 21:07:32 2008 +--- src/version.c Wed Jan 2 21:53:24 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 187, + /**/ + +-- +FATHER: Who are you? +PRINCE: I'm ... your son ... +FATHER: Not you. +LAUNCELOT: I'm ... er ... Sir Launcelot, sir. + "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.1.188 b/7.1.188 new file mode 100644 index 00000000..1af3bf2f --- /dev/null +++ b/7.1.188 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.188 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.188 +Problem: When 'showmode' is off the message for changing a readonly file is + given in the second column instead of the first. (Payl B. Mahol) +Solution: Put the W10 message in the first column. +Files: src/edit.c + + +*** ../vim-7.1.187/src/edit.c Wed Jan 2 17:48:24 2008 +--- src/edit.c Wed Jan 2 20:56:46 2008 +*************** +*** 550,556 **** + i = showmode(); + + if (!p_im && did_restart_edit == 0) +! change_warning(i + 1); + + #ifdef CURSOR_SHAPE + ui_cursor_shape(); /* may show different cursor shape */ +--- 550,556 ---- + i = showmode(); + + if (!p_im && did_restart_edit == 0) +! change_warning(i == 0 ? 0 : i + 1); + + #ifdef CURSOR_SHAPE + ui_cursor_shape(); /* may show different cursor shape */ +*** ../vim-7.1.187/src/version.c Wed Jan 2 21:54:33 2008 +--- src/version.c Wed Jan 2 22:06:19 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 188, + /**/ + +-- +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.1.189 b/7.1.189 new file mode 100644 index 00000000..86666158 --- /dev/null +++ b/7.1.189 @@ -0,0 +1,76 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.189 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.189 (after 7.1.104) +Problem: Patch 7.1.104 was incomplete. +Solution: Also call plain_vgetc() in ask_yesno(). +Files: src/misc1.c + + +*** ../vim-7.1.188/src/misc1.c Wed Jan 2 17:48:24 2008 +--- src/misc1.c Wed Jan 2 17:48:00 2008 +*************** +*** 222,231 **** + *s++ = *p++; + orig_char_len--; + } + /* Skip over any additional white space (useful when newindent is less + * than old) */ + while (vim_iswhite(*p)) +! (void)*p++; + + } + else +--- 222,232 ---- + *s++ = *p++; + orig_char_len--; + } ++ + /* Skip over any additional white space (useful when newindent is less + * than old) */ + while (vim_iswhite(*p)) +! ++p; + + } + else +*************** +*** 3024,3030 **** + if (direct) + r = get_keystroke(); + else +! r = safe_vgetc(); + if (r == Ctrl_C || r == ESC) + r = 'n'; + msg_putchar(r); /* show what you typed */ +--- 3025,3031 ---- + if (direct) + r = get_keystroke(); + else +! r = plain_vgetc(); + if (r == Ctrl_C || r == ESC) + r = 'n'; + msg_putchar(r); /* show what you typed */ +*** ../vim-7.1.188/src/version.c Wed Jan 2 22:08:43 2008 +--- src/version.c Thu Jan 3 12:40:31 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 189, + /**/ + +-- +Q: How does a UNIX Guru do Sex ? +A: unzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.190 b/7.1.190 new file mode 100644 index 00000000..6cf181c4 --- /dev/null +++ b/7.1.190 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.190 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.190 +Problem: Cursor after end-of-line: "iA sentence.)" +Solution: Move cursor back and make motion inclusive. +Files: src/normal.c + + +*** ../vim-7.1.189/src/normal.c Wed Jan 2 16:25:20 2008 +--- src/normal.c Wed Jan 2 22:04:38 2008 +*************** +*** 6564,6569 **** +--- 6564,6575 ---- + clearopbeep(cap->oap); + else + { ++ /* Don't leave the cursor on the NUL past a line */ ++ if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL) ++ { ++ --curwin->w_cursor.col; ++ cap->oap->inclusive = TRUE; ++ } + #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; + #endif +*** ../vim-7.1.189/src/version.c Thu Jan 3 12:42:39 2008 +--- src/version.c Thu Jan 3 13:19:03 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 190, + /**/ + +-- + [clop clop] +GUARD #1: Halt! Who goes there? +ARTHUR: It is I, Arthur, son of Uther Pendragon, from the castle of + Camelot. King of the Britons, defeator of the Saxons, sovereign of + all England! +GUARD #1: Pull the other one! + 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.1.191 b/7.1.191 new file mode 100644 index 00000000..4cbc35c3 --- /dev/null +++ b/7.1.191 @@ -0,0 +1,61 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.191 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.191 +Problem: Win32 GUI: after patch 7.1.168 there is still a problem when + clicking in a scrollbar. (Juergen Jottkaerr) +Solution: Don't check the input buffer when dragging the scrollbar. +Files: src/gui.c + + +*** ../vim-7.1.190/src/gui.c Tue Nov 6 22:26:39 2007 +--- src/gui.c Thu Jan 3 13:16:29 2008 +*************** +*** 3734,3741 **** + sb->value = value; + + #ifdef USE_ON_FLY_SCROLL +! /* When not allowed to do the scrolling right now, return. */ +! if (dont_scroll || input_available()) + return; + #endif + #ifdef FEAT_INS_EXPAND +--- 3734,3743 ---- + sb->value = value; + + #ifdef USE_ON_FLY_SCROLL +! /* When not allowed to do the scrolling right now, return. +! * This also checked input_available(), but that causes the first click in +! * a scrollbar to be ignored when Vim doesn't have focus. */ +! if (dont_scroll) + return; + #endif + #ifdef FEAT_INS_EXPAND +*** ../vim-7.1.190/src/version.c Thu Jan 3 13:19:50 2008 +--- src/version.c Thu Jan 3 16:13:23 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 191, + /**/ + +-- +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.1.192 b/7.1.192 new file mode 100644 index 00000000..4dd16382 --- /dev/null +++ b/7.1.192 @@ -0,0 +1,79 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.192 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.192 +Problem: With Visual block selection, "s" and typing something, CTRL-C + doesn't stop Vim from repeating the replacement in other lines, + like happens for "I". +Solution: Check for "got_int" to be set. +Files: src/ops.c + + +*** ../vim-7.1.191/src/ops.c Sat Dec 1 21:12:23 2007 +--- src/ops.c Thu Jan 3 16:26:37 2008 +*************** +*** 2468,2476 **** + + edit(NUL, FALSE, (linenr_T)count1); + +! /* if user has moved off this line, we don't know what to do, so do +! * nothing */ +! if (curwin->w_cursor.lnum != oap->start.lnum) + return; + + if (oap->block_mode) +--- 2468,2477 ---- + + edit(NUL, FALSE, (linenr_T)count1); + +! /* If user has moved off this line, we don't know what to do, so do +! * nothing. +! * Also don't repeat the insert when Insert mode ended with CTRL-C. */ +! if (curwin->w_cursor.lnum != oap->start.lnum || got_int) + return; + + if (oap->block_mode) +*************** +*** 2601,2608 **** + /* + * In Visual block mode, handle copying the new text to all lines of the + * block. + */ +! if (oap->block_mode && oap->start.lnum != oap->end.lnum) + { + /* Auto-indenting may have changed the indent. If the cursor was past + * the indent, exclude that indent change from the inserted text. */ +--- 2602,2610 ---- + /* + * In Visual block mode, handle copying the new text to all lines of the + * block. ++ * Don't repeat the insert when Insert mode ended with CTRL-C. + */ +! if (oap->block_mode && oap->start.lnum != oap->end.lnum && !got_int) + { + /* Auto-indenting may have changed the indent. If the cursor was past + * the indent, exclude that indent change from the inserted text. */ +*** ../vim-7.1.191/src/version.c Thu Jan 3 16:14:25 2008 +--- src/version.c Thu Jan 3 16:30:07 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 192, + /**/ + +-- +"A mouse can be just as dangerous as a bullet or a bomb." + (US Representative Lamar Smith, R-Texas) + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.193 b/7.1.193 new file mode 100644 index 00000000..b3836f73 --- /dev/null +++ b/7.1.193 @@ -0,0 +1,100 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.193 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.193 +Problem: Some Vim 5.x digraphs are missing in Vim 7, even though the + character pairs are not used. (Philippe de Muyter) +Solution: Add those Vim 5.x digraphs that don't conflict with others. +Files: src/digraph.c + + +*** ../vim-7.1.192/src/digraph.c Thu Sep 13 18:25:08 2007 +--- src/digraph.c Thu Jan 3 17:48:47 2008 +*************** +*** 1978,1983 **** +--- 1978,2038 ---- + {'f', 't', 0xfb05}, + {'s', 't', 0xfb06}, + # endif /* FEAT_MBYTE */ ++ ++ /* Vim 5.x compatible digraphs that don't conflict with the above */ ++ {'~', '!', 161}, /* ¡ */ ++ {'c', '|', 162}, /* ¢ */ ++ {'$', '$', 163}, /* £ */ ++ {'o', 'x', 164}, /* ¤ - currency symbol in ISO 8859-1 */ ++ {'Y', '-', 165}, /* ¥ */ ++ {'|', '|', 166}, /* ¦ */ ++ {'c', 'O', 169}, /* © */ ++ {'-', ',', 172}, /* ¬ */ ++ {'-', '=', 175}, /* ¯ */ ++ {'~', 'o', 176}, /* ° */ ++ {'2', '2', 178}, /* ² */ ++ {'3', '3', 179}, /* ³ */ ++ {'p', 'p', 182}, /* ¶ */ ++ {'~', '.', 183}, /* · */ ++ {'1', '1', 185}, /* ¹ */ ++ {'~', '?', 191}, /* ¿ */ ++ {'A', '`', 192}, /* À */ ++ {'A', '^', 194}, /* Â */ ++ {'A', '~', 195}, /* Ã */ ++ {'A', '"', 196}, /* Ä */ ++ {'A', '@', 197}, /* Å */ ++ {'E', '`', 200}, /* È */ ++ {'E', '^', 202}, /* Ê */ ++ {'E', '"', 203}, /* Ë */ ++ {'I', '`', 204}, /* Ì */ ++ {'I', '^', 206}, /* Î */ ++ {'I', '"', 207}, /* Ï */ ++ {'N', '~', 209}, /* Ñ */ ++ {'O', '`', 210}, /* Ò */ ++ {'O', '^', 212}, /* Ô */ ++ {'O', '~', 213}, /* Õ */ ++ {'/', '\\', 215}, /* × - multiplication symbol in ISO 8859-1 */ ++ {'U', '`', 217}, /* Ù */ ++ {'U', '^', 219}, /* Û */ ++ {'I', 'p', 222}, /* Þ */ ++ {'a', '`', 224}, /* à */ ++ {'a', '^', 226}, /* â */ ++ {'a', '~', 227}, /* ã */ ++ {'a', '"', 228}, /* ä */ ++ {'a', '@', 229}, /* å */ ++ {'e', '`', 232}, /* è */ ++ {'e', '^', 234}, /* ê */ ++ {'e', '"', 235}, /* ë */ ++ {'i', '`', 236}, /* ì */ ++ {'i', '^', 238}, /* î */ ++ {'n', '~', 241}, /* ñ */ ++ {'o', '`', 242}, /* ò */ ++ {'o', '^', 244}, /* ô */ ++ {'o', '~', 245}, /* õ */ ++ {'u', '`', 249}, /* ù */ ++ {'u', '^', 251}, /* û */ ++ {'y', '"', 255}, /* x XX */ ++ + {NUL, NUL, NUL} + }; + +*** ../vim-7.1.192/src/version.c Thu Jan 3 16:31:17 2008 +--- src/version.c Thu Jan 3 17:52:51 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 193, + /**/ + +-- +Futility Factor: No experiment is ever a complete failure - it can always +serve as a negative example. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.194 b/7.1.194 new file mode 100644 index 00000000..b05ca9ed --- /dev/null +++ b/7.1.194 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.194 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.194 +Problem: ":echo glob('~/{}')" results in /home/user//. +Solution: Don't add a slash if there already is one. +Files: src/os_unix.c + + +*** ../vim-7.1.193/src/os_unix.c Sat Dec 1 17:18:45 2007 +--- src/os_unix.c Thu Jan 3 18:52:22 2008 +*************** +*** 5482,5488 **** + { + STRCPY(p, (*file)[i]); + if (dir) +! STRCAT(p, "/"); /* add '/' to a directory name */ + (*file)[j++] = p; + } + } +--- 5482,5488 ---- + { + STRCPY(p, (*file)[i]); + if (dir) +! add_pathsep(p); /* add '/' to a directory name */ + (*file)[j++] = p; + } + } +*** ../vim-7.1.193/src/version.c Thu Jan 3 17:53:41 2008 +--- src/version.c Thu Jan 3 18:54:41 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 194, + /**/ + +-- +ARTHUR: Will you ask your master if he wants to join my court at Camelot?! +GUARD #1: But then of course African swallows are not migratory. +GUARD #2: Oh, yeah... +GUARD #1: So they couldn't bring a coconut back anyway... + 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.1.195 b/7.1.195 new file mode 100644 index 00000000..37e3264f --- /dev/null +++ b/7.1.195 @@ -0,0 +1,75 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.195 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.195 +Problem: '0 mark doesn't work for "~/foo ~ foo". +Solution: Don't expand the whole file name, only "~/". +Files: src/mark.c + + +*** ../vim-7.1.194/src/mark.c Thu May 10 18:48:03 2007 +--- src/mark.c Thu Jan 3 20:17:29 2008 +*************** +*** 505,513 **** + { + /* + * First expand "~/" in the file name to the home directory. +! * Try to shorten the file name. + */ +! expand_env(fm->fname, NameBuff, MAXPATHL); + mch_dirname(IObuff, IOSIZE); + p = shorten_fname(NameBuff, IObuff); + +--- 505,528 ---- + { + /* + * First expand "~/" in the file name to the home directory. +! * Don't expand the whole name, it may contain other '~' chars. + */ +! if (fm->fname[0] == '~' && (fm->fname[1] == '/' +! #ifdef BACKSLASH_IN_FILENAME +! || fm->fname[1] == '\\' +! #endif +! )) +! { +! int len; +! +! expand_env((char_u *)"~/", NameBuff, MAXPATHL); +! len = STRLEN(NameBuff); +! vim_strncpy(NameBuff + len, fm->fname + 2, MAXPATHL - len - 1); +! } +! else +! vim_strncpy(NameBuff, fm->fname, MAXPATHL - 1); +! +! /* Try to shorten the file name. */ + mch_dirname(IObuff, IOSIZE); + p = shorten_fname(NameBuff, IObuff); + +*** ../vim-7.1.194/src/version.c Thu Jan 3 18:55:21 2008 +--- src/version.c Thu Jan 3 20:10:16 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 195, + /**/ + +-- +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.1.196 b/7.1.196 new file mode 100644 index 00000000..087577a7 --- /dev/null +++ b/7.1.196 @@ -0,0 +1,90 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.196 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.196 (extra) +Problem: Win32 GUI: "\n" in a tooltip doesn't cause a line break. (Erik + Falor) +Solution: Use the TTM_SETMAXTIPWIDTH message. +Files: src/gui_w32.c + + +*** ../vim-7.1.195/src/gui_w32.c Thu Aug 30 12:24:21 2007 +--- src/gui_w32.c Thu Jan 3 13:56:26 2008 +*************** +*** 987,992 **** +--- 987,997 ---- + { + LPNMTTDISPINFOW lpdi = (LPNMTTDISPINFOW)lParam; + ++ /* Set the maximum width, this also enables using ++ * \n for line break. */ ++ 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 */ +*************** +*** 996,1001 **** +--- 1001,1011 ---- + { + LPNMTTDISPINFO lpdi = (LPNMTTDISPINFO)lParam; + ++ /* Set the maximum width, this also enables using ++ * \n for line break. */ ++ SendMessage(lpdi->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, ++ 0, 500); ++ + if (STRLEN(str) < sizeof(lpdi->szText) + || ((tt_text = vim_strsave(str)) == NULL)) + vim_strncpy(lpdi->szText, str, +*************** +*** 4734,4745 **** + cur_beval->showState = ShS_NEUTRAL; + break; + case TTN_GETDISPINFO: +! { +! /* if you get there then we have new common controls */ +! NMTTDISPINFO_NEW *info = (NMTTDISPINFO_NEW *)pnmh; +! info->lpszText = (LPSTR)info->lParam; +! info->uFlags |= TTF_DI_SETITEM; +! } + break; + } + } +--- 4744,4755 ---- + cur_beval->showState = ShS_NEUTRAL; + break; + case TTN_GETDISPINFO: +! { +! /* if you get there then we have new common controls */ +! NMTTDISPINFO_NEW *info = (NMTTDISPINFO_NEW *)pnmh; +! info->lpszText = (LPSTR)info->lParam; +! info->uFlags |= TTF_DI_SETITEM; +! } + break; + } + } +*** ../vim-7.1.195/src/version.c Thu Jan 3 20:21:34 2008 +--- src/version.c Thu Jan 3 20:43:22 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 196, + /**/ + +-- +Shit makes the flowers grow and that's beautiful + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.197 b/7.1.197 new file mode 100644 index 00000000..e9b58c23 --- /dev/null +++ b/7.1.197 @@ -0,0 +1,62 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.197 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.197 +Problem: Mac: "make install" doesn't work when prefix defined. +Solution: Pass different arguments to "make installruntime". (Jjgod Jiang) +Files: src/Makefile + + +*** ../vim-7.1.196/src/Makefile Thu Jan 3 20:44:40 2008 +--- src/Makefile Thu Jan 3 18:30:02 2008 +*************** +*** 2559,2566 **** + # -mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin + srcdir=`pwd`; $(MAKE) -f Makefile installruntime \ + VIMEXE=$$srcdir/$(VIMTARGET) \ +! prefix=$(DESTDIR)$(prefix)/$(RESDIR)/vim \ +! VIMRTLOC=$(DESTDIR)$(prefix)/$(RESDIR)/vim/runtime + # Put the link back. + ln -s `pwd`/../runtime $(RESDIR)/vim + # Copy rgb.txt, Mac doesn't always have X11 +--- 2564,2574 ---- + # -mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin + srcdir=`pwd`; $(MAKE) -f Makefile installruntime \ + VIMEXE=$$srcdir/$(VIMTARGET) \ +! prefix=$(DESTDIR)$(prefix)/$(RESDIR)$(VIMDIR) \ +! exec_prefix=$(DESTDIR)$(prefix)/$(APPDIR)/Contents \ +! BINDIR=$(DESTDIR)$(prefix)/$(APPDIR)/Contents/MacOS \ +! VIMLOC=$(DESTDIR)$(prefix)/$(RESDIR)$(VIMDIR) \ +! VIMRTLOC=$(DESTDIR)$(prefix)/$(RESDIR)$(VIMDIR)/runtime + # Put the link back. + ln -s `pwd`/../runtime $(RESDIR)/vim + # Copy rgb.txt, Mac doesn't always have X11 +*** ../vim-7.1.196/src/version.c Thu Jan 3 20:44:35 2008 +--- src/version.c Fri Jan 4 11:52:46 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 197, + /**/ + +-- +CUSTOMER: Well, can you hang around a couple of minutes? He won't be + long. +MORTICIAN: Naaah, I got to go on to Robinson's -- they've lost nine today. +CUSTOMER: Well, when is your next round? +MORTICIAN: Thursday. +DEAD PERSON: I think I'll go for a walk. + 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.1.198 b/7.1.198 new file mode 100644 index 00000000..d5c6f14d --- /dev/null +++ b/7.1.198 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.198 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.198 +Problem: Hang when using ":s/\n//gn". (Burak Gorkemli) +Solution: Set "skip_match". +Files: src/ex_cmds.c + + +*** ../vim-7.1.197/src/ex_cmds.c Wed Jan 2 13:58:17 2008 +--- src/ex_cmds.c Fri Jan 4 14:46:34 2008 +*************** +*** 4575,4580 **** +--- 4575,4581 ---- + { + matchcol = (colnr_T)STRLEN(sub_firstline); + nmatch = 1; ++ skip_match = TRUE; + } + sub_nsubs++; + did_sub = TRUE; +*** ../vim-7.1.197/src/version.c Fri Jan 4 11:54:11 2008 +--- src/version.c Fri Jan 4 14:52:09 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 198, + /**/ + +-- + [clop clop] +ARTHUR: Old woman! +DENNIS: Man! +ARTHUR: Man, sorry. What knight lives in that castle over there? +DENNIS: I'm thirty seven. +ARTHUR: What? +DENNIS: I'm thirty seven -- I'm not old! + 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.1.199 b/7.1.199 new file mode 100644 index 00000000..18d731e6 --- /dev/null +++ b/7.1.199 @@ -0,0 +1,105 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.199 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.199 +Problem: Can't do command line completion for a specific file name + extension. +Solution: When the pattern ends in "$" don't add a star for completion and + remove the "$" before matching with file names. +Files: runtime/doc/cmdline.txt, src/ex_getln.c + + +*** ../vim-7.1.198/runtime/doc/cmdline.txt Sat May 12 15:38:39 2007 +--- runtime/doc/cmdline.txt Fri Jan 4 15:13:06 2008 +*************** +*** 1,4 **** +! *cmdline.txt* For Vim version 7.1. Last change: 2006 Jul 18 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *cmdline.txt* For Vim version 7.1. Last change: 2008 Jan 04 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 316,322 **** + command-line is shown. (Note: the shifted arrow keys do not work on all + terminals) + +! *his* *:history* + :his[tory] Print the history of last entered commands. + {not in Vi} + {not available when compiled without the |+cmdline_hist| +--- 316,322 ---- + command-line is shown. (Note: the shifted arrow keys do not work on all + terminals) + +! *:his* *:history* + :his[tory] Print the history of last entered commands. + {not in Vi} + {not available when compiled without the |+cmdline_hist| +*************** +*** 447,452 **** +--- 447,457 ---- + + To completely ignore files with some extension use 'wildignore'. + ++ To match only files that end at the end of the typed text append a "$". For ++ example, to match only files that end in ".c": > ++ :e *.c$ ++ This will not match a file ending in ".cpp". Without the "$" it does match. ++ + The old value of an option can be obtained by hitting 'wildchar' just after + the '='. For example, typing 'wildchar' after ":set dir=" will insert the + current value of 'dir'. This overrules file name completion for the options +*** ../vim-7.1.198/src/ex_getln.c Wed Jan 2 21:54:33 2008 +--- src/ex_getln.c Fri Jan 4 15:05:31 2008 +*************** +*** 4078,4083 **** +--- 4078,4084 ---- + * ~ would be at the start of the file name, but not the tail. + * $ could be anywhere in the tail. + * ` could be anywhere in the file name. ++ * When the name ends in '$' don't add a star, remove the '$'. + */ + tail = gettail(retval); + if ((*retval != '~' || tail != retval) +*************** +*** 4085,4090 **** +--- 4086,4093 ---- + && vim_strchr(tail, '$') == NULL + && vim_strchr(retval, '`') == NULL) + retval[len++] = '*'; ++ else if (len > 0 && retval[len - 1] == '$') ++ --len; + retval[len] = NUL; + } + } +*** ../vim-7.1.198/src/version.c Fri Jan 4 14:52:14 2008 +--- src/version.c Fri Jan 4 15:14:29 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 199, + /**/ + +-- +ARTHUR: Well, I can't just call you `Man'. +DENNIS: Well, you could say `Dennis'. +ARTHUR: Well, I didn't know you were called `Dennis.' +DENNIS: Well, you didn't bother to find out, did 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.1.200 b/7.1.200 new file mode 100644 index 00000000..8a0a1261 --- /dev/null +++ b/7.1.200 @@ -0,0 +1,74 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.200 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.200 (after 7.1.177 and 7.1.182) +Problem: Compiler warnings for uninitialized variables. +Solution: Init variables. +Files: src/ex_cmds2.c, src/ex_docmd.c + + +*** ../vim-7.1.199/src/ex_cmds2.c Tue Jan 1 14:16:42 2008 +--- src/ex_cmds2.c Fri Jan 4 15:55:54 2008 +*************** +*** 94,100 **** + int save_redir_off = redir_off; + tasave_T typeaheadbuf; + int typeahead_saved = FALSE; +! int save_ignore_script; + # ifdef FEAT_EX_EXTRA + int save_ex_normal_busy; + # endif +--- 94,100 ---- + int save_redir_off = redir_off; + tasave_T typeaheadbuf; + int typeahead_saved = FALSE; +! int save_ignore_script = 0; + # ifdef FEAT_EX_EXTRA + int save_ex_normal_busy; + # endif +*** ../vim-7.1.199/src/ex_docmd.c Wed Jan 2 21:07:32 2008 +--- src/ex_docmd.c Fri Jan 4 15:57:28 2008 +*************** +*** 9765,9771 **** + win_T *tab_firstwin; + frame_T *tab_topframe; + int cur_arg_idx = 0; +! int next_arg_idx; + + if (ssop_flags & SSOP_BUFFERS) + only_save_windows = FALSE; /* Save ALL buffers */ +--- 9766,9772 ---- + win_T *tab_firstwin; + frame_T *tab_topframe; + int cur_arg_idx = 0; +! int next_arg_idx = 0; + + if (ssop_flags & SSOP_BUFFERS) + only_save_windows = FALSE; /* Save ALL buffers */ +*** ../vim-7.1.199/src/version.c Fri Jan 4 15:16:57 2008 +--- src/version.c Fri Jan 4 15:59:46 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 200, + /**/ + +-- +ARTHUR: I did say sorry about the `old woman,' but from the behind you + looked-- +DENNIS: What I object to is you automatically treat me like an inferior! +ARTHUR: Well, I AM 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.1.201 b/7.1.201 new file mode 100644 index 00000000..6742191b --- /dev/null +++ b/7.1.201 @@ -0,0 +1,87 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.201 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.201 +Problem: When reading stdin 'fenc' and 'ff are not set. +Solution: Set the options after reading stdin. (Ben Schmidt) +Files: src/fileio.c + + +*** ../vim-7.1.200/src/fileio.c Wed Jan 2 21:07:32 2008 +--- src/fileio.c Fri Jan 4 16:18:27 2008 +*************** +*** 221,231 **** + { + int fd = 0; + int newfile = (flags & READ_NEW); +- int set_options = newfile || (eap != NULL && eap->read_edit); + int check_readonly; + int filtering = (flags & READ_FILTER); + int read_stdin = (flags & READ_STDIN); + int read_buffer = (flags & READ_BUFFER); + linenr_T read_buf_lnum = 1; /* next line to read from curbuf */ + colnr_T read_buf_col = 0; /* next char to read from this line */ + char_u c; +--- 221,232 ---- + { + int fd = 0; + int newfile = (flags & READ_NEW); + int check_readonly; + int filtering = (flags & READ_FILTER); + int read_stdin = (flags & READ_STDIN); + int read_buffer = (flags & READ_BUFFER); ++ int set_options = newfile || read_buffer ++ || (eap != NULL && eap->read_edit); + linenr_T read_buf_lnum = 1; /* next line to read from curbuf */ + colnr_T read_buf_col = 0; /* next char to read from this line */ + char_u c; +*************** +*** 650,657 **** + + if (set_options) + { +! curbuf->b_p_eol = TRUE; +! curbuf->b_start_eol = TRUE; + #ifdef FEAT_MBYTE + curbuf->b_p_bomb = FALSE; + curbuf->b_start_bomb = FALSE; +--- 651,663 ---- + + if (set_options) + { +! /* Don't change 'eol' if reading from buffer as it will already be +! * correctly set when reading stdin. */ +! if (!read_buffer) +! { +! curbuf->b_p_eol = TRUE; +! curbuf->b_start_eol = TRUE; +! } + #ifdef FEAT_MBYTE + curbuf->b_p_bomb = FALSE; + curbuf->b_start_bomb = FALSE; +*** ../vim-7.1.200/src/version.c Fri Jan 4 16:00:10 2008 +--- src/version.c Fri Jan 4 16:27:01 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 201, + /**/ + +-- +A mathematician is a device for turning coffee into theorems. + Paul Erdos +A computer programmer is a device for turning coffee into bugs. + 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.1.202 b/7.1.202 new file mode 100644 index 00000000..5e7006de --- /dev/null +++ b/7.1.202 @@ -0,0 +1,83 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.202 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.202 +Problem: Incomplete utf-8 byte sequence is not checked for validity. +Solution: Check the bytes that are present for being valid. (Ben Schmidt) +Files: src/mbyte.c + + +*** ../vim-7.1.201/src/mbyte.c Thu Aug 30 13:51:52 2007 +--- src/mbyte.c Fri Jan 4 17:30:16 2008 +*************** +*** 1642,1648 **** + * Get the length of UTF-8 byte sequence "p[size]". Does not include any + * following composing characters. + * Returns 1 for "". +! * Returns 1 for an illegal byte sequence. + * Returns number > "size" for an incomplete byte sequence. + */ + int +--- 1642,1648 ---- + * Get the length of UTF-8 byte sequence "p[size]". Does not include any + * following composing characters. + * Returns 1 for "". +! * Returns 1 for an illegal byte sequence (also in incomplete byte seq.). + * Returns number > "size" for an incomplete byte sequence. + */ + int +*************** +*** 1652,1664 **** + { + int len; + int i; + + if (*p == NUL) + return 1; +! len = utf8len_tab[*p]; + if (len > size) +! return len; /* incomplete byte sequence. */ +! for (i = 1; i < len; ++i) + if ((p[i] & 0xc0) != 0x80) + return 1; + return len; +--- 1652,1665 ---- + { + int len; + 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; + return len; +*** ../vim-7.1.201/src/version.c Fri Jan 4 16:30:40 2008 +--- src/version.c Fri Jan 4 17:45:33 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 202, + /**/ + +-- +A computer programmer is a device for turning requirements into +undocumented features. It runs on cola, pizza and Dilbert cartoons. + 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.1.203 b/7.1.203 new file mode 100644 index 00000000..92703946 --- /dev/null +++ b/7.1.203 @@ -0,0 +1,68 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.203 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.203 +Problem: When 'virtualedit' is "onemore" then "99|" works but ":normal 99|" + doesn't. (Andy Wokula) +Solution: Check for "onemore" flag in check_cursor_col(). +Files: src/misc2.c + + +*** ../vim-7.1.202/src/misc2.c Sat Nov 24 21:27:33 2007 +--- src/misc2.c Fri Jan 4 21:24:46 2008 +*************** +*** 507,517 **** + curwin->w_cursor.col = 0; + else if (curwin->w_cursor.col >= len) + { +! /* Allow cursor past end-of-line in Insert mode, restarting Insert +! * mode or when in Visual mode and 'selection' isn't "old" */ + if ((State & INSERT) || restart_edit + #ifdef FEAT_VISUAL + || (VIsual_active && *p_sel != 'o') + #endif + || virtual_active()) + curwin->w_cursor.col = len; +--- 508,523 ---- + curwin->w_cursor.col = 0; + else if (curwin->w_cursor.col >= len) + { +! /* Allow cursor past end-of-line when: +! * - in Insert mode or restarting Insert mode +! * - in Visual mode and 'selection' isn't "old" +! * - 'virtualedit' is set */ + if ((State & INSERT) || restart_edit + #ifdef FEAT_VISUAL + || (VIsual_active && *p_sel != 'o') ++ #endif ++ #ifdef FEAT_VIRTUALEDIT ++ || (ve_flags & VE_ONEMORE) + #endif + || virtual_active()) + curwin->w_cursor.col = len; +*** ../vim-7.1.202/src/version.c Fri Jan 4 17:46:46 2008 +--- src/version.c Fri Jan 4 21:22:29 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 203, + /**/ + +-- +`When any government, or any church for that matter, undertakes to say to + its subjects, "This you may not read, this you must not see, this you are + forbidden to know," the end result is tyranny and oppression no matter how + holy the motives' -- Robert A Heinlein, "If this goes on --" + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.204 b/7.1.204 new file mode 100644 index 00000000..085e88f5 --- /dev/null +++ b/7.1.204 @@ -0,0 +1,74 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.204 (extra) +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.204 (extra) +Problem: Win32: Using the example at 'balloonexpr' the balloon disappears + after four seconds and then comes back again. Also moves the + mouse pointer a little bit. (Yongwei Wu) +Solution: Set the autopop time to 30 seconds (the max value). (Sergey + Khorev) Move the mouse two pixels forward and one back to end up + in the same position (really!). +Files: src/gui_w32.c + + + +*** ../vim-7.1.203/src/gui_w32.c Thu Jan 3 20:44:35 2008 +--- src/gui_w32.c Sat Jan 5 13:09:56 2008 +*************** +*** 4575,4585 **** + SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti); + /* Make tooltip appear sooner */ + SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10); + /* + * HACK: force tooltip to appear, because it'll not appear until + * first mouse move. D*mn M$ + */ +! mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0); + mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0); + vim_free(pti); + } +--- 4575,4589 ---- + SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti); + /* Make tooltip appear sooner */ + SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10); ++ /* I've performed some tests and it seems the longest possible life time ++ * of tooltip is 30 seconds */ ++ SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_AUTOPOP, 30000); + /* + * HACK: force tooltip to appear, because it'll not appear until + * first mouse move. D*mn M$ ++ * Amazingly moving (2, 2) and then (-1, -1) the mouse doesn't move. + */ +! mouse_event(MOUSEEVENTF_MOVE, 2, 2, 0, 0); + mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0); + vim_free(pti); + } +*** ../vim-7.1.203/src/version.c Fri Jan 4 21:25:01 2008 +--- src/version.c Sat Jan 5 13:12:22 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 204, + /**/ + +-- +WOMAN: I didn't know we had a king. I thought we were an autonomous + collective. +DENNIS: You're fooling yourself. We're living in a dictatorship. A + self-perpetuating autocracy in which the working classes-- +WOMAN: Oh there you go, bringing class into it again. +DENNIS: That's what it's all about if only people would-- + 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.1.205 b/7.1.205 new file mode 100644 index 00000000..a1c15ed7 --- /dev/null +++ b/7.1.205 @@ -0,0 +1,181 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.205 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.205 +Problem: Can't get the operator in an ":omap". +Solution: Add the "v:operator" variable. (Ben Schmidt) +Files: runtime/doc/eval.txt, src/eval.c, src/normal.c, src/vim.h + + +*** ../vim-7.1.204/runtime/doc/eval.txt Tue Sep 25 17:54:41 2007 +--- runtime/doc/eval.txt Fri Jan 4 20:38:55 2008 +*************** +*** 1,4 **** +! *eval.txt* For Vim version 7.1. Last change: 2007 Sep 25 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 04 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 1401,1410 **** + This is the screen column number, like with |virtcol()|. The + value is zero when there was no mouse button click. + + *v:prevcount* *prevcount-variable* + v:prevcount The count given for the last but one Normal mode command. + This is the v:count value of the previous command. Useful if +! you want to cancel Visual mode and then use the count. > + :vmap % :call MyFilter(v:prevcount) + < Read-only. + +--- 1401,1424 ---- + This is the screen column number, like with |virtcol()|. The + value is zero when there was no mouse button click. + ++ *v:operator* *operator-variable* ++ v:operator The last operator given in Normal mode. This is a single ++ character except for commands starting with or , ++ in which case it is two characters. Best used alongside ++ |v:prevcount| and |v:register|. Useful if you want to cancel ++ Operator-pending mode and then use the operator, e.g.: > ++ :omap O :call MyMotion(v:operator) ++ < The value remains set until another operator is entered, thus ++ don't expect it to be empty. ++ v:operator is not set for |:delete|, |:yank| or other Ex ++ commands. ++ Read-only. ++ + *v:prevcount* *prevcount-variable* + v:prevcount The count given for the last but one Normal mode command. + This is the v:count value of the previous command. Useful if +! you want to cancel Visual or Operator-pending mode and then +! use the count, e.g.: > + :vmap % :call MyFilter(v:prevcount) + < Read-only. + +*** ../vim-7.1.204/src/eval.c Fri Dec 7 17:08:35 2007 +--- src/eval.c Sat Jan 5 13:22:52 2008 +*************** +*** 345,350 **** +--- 345,351 ---- + {VV_NAME("mouse_win", VAR_NUMBER), 0}, + {VV_NAME("mouse_lnum", VAR_NUMBER), 0}, + {VV_NAME("mouse_col", VAR_NUMBER), 0}, ++ {VV_NAME("operator", VAR_STRING), VV_RO}, + }; + + /* shorthand */ +*** ../vim-7.1.204/src/normal.c Thu Jan 3 13:19:50 2008 +--- src/normal.c Fri Jan 4 20:53:43 2008 +*************** +*** 141,146 **** +--- 141,149 ---- + static void nv_Undo __ARGS((cmdarg_T *cap)); + static void nv_tilde __ARGS((cmdarg_T *cap)); + static void nv_operator __ARGS((cmdarg_T *cap)); ++ #ifdef FEAT_EVAL ++ static void set_op_var __ARGS((int optype)); ++ #endif + static void nv_lineop __ARGS((cmdarg_T *cap)); + static void nv_home __ARGS((cmdarg_T *cap)); + static void nv_pipe __ARGS((cmdarg_T *cap)); +*************** +*** 7180,7185 **** +--- 7183,7191 ---- + { + cap->oap->start = curwin->w_cursor; + cap->oap->op_type = OP_DELETE; ++ #ifdef FEAT_EVAL ++ set_op_var(OP_DELETE); ++ #endif + cap->count1 = 1; + nv_dollar(cap); + finish_op = TRUE; +*************** +*** 8219,8226 **** +--- 8225,8257 ---- + { + cap->oap->start = curwin->w_cursor; + cap->oap->op_type = op_type; ++ #ifdef FEAT_EVAL ++ set_op_var(op_type); ++ #endif ++ } ++ } ++ ++ #ifdef FEAT_EVAL ++ /* ++ * Set v:operator to the characters for "optype". ++ */ ++ static void ++ set_op_var(optype) ++ int optype; ++ { ++ char_u opchars[3]; ++ ++ if (optype == OP_NOP) ++ set_vim_var_string(VV_OP, NULL, 0); ++ else ++ { ++ opchars[0] = get_op_char(optype); ++ opchars[1] = get_extra_op_char(optype); ++ opchars[2] = NUL; ++ set_vim_var_string(VV_OP, opchars, -1); + } + } ++ #endif + + /* + * Handle linewise operator "dd", "yy", etc. +*** ../vim-7.1.204/src/vim.h Sat Aug 11 13:57:31 2007 +--- src/vim.h Fri Jan 4 19:11:31 2008 +*************** +*** 1688,1694 **** + #define VV_MOUSE_WIN 49 + #define VV_MOUSE_LNUM 50 + #define VV_MOUSE_COL 51 +! #define VV_LEN 52 /* number of v: vars */ + + #ifdef FEAT_CLIPBOARD + +--- 1688,1695 ---- + #define VV_MOUSE_WIN 49 + #define VV_MOUSE_LNUM 50 + #define VV_MOUSE_COL 51 +! #define VV_OP 52 +! #define VV_LEN 53 /* number of v: vars */ + + #ifdef FEAT_CLIPBOARD + +*** ../vim-7.1.204/src/version.c Sat Jan 5 13:15:08 2008 +--- src/version.c Sat Jan 5 13:31:49 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 205, + /**/ + +-- +ARTHUR: Then who is your lord? +WOMAN: We don't have a lord. +ARTHUR: What? +DENNIS: I told you. We're an anarcho-syndicalist commune. We take it in + turns to act as a sort of executive officer for the week. + 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.1.206 b/7.1.206 new file mode 100644 index 00000000..4531a002 --- /dev/null +++ b/7.1.206 @@ -0,0 +1,59 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.206 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.206 +Problem: Compiler warnings when using MODIFIED_BY. +Solution: Add type casts. (Ben Schmidt) +Files: src/version.c + + +*** ../vim-7.1.205/src/version.c Sat Jan 5 13:34:01 2008 +--- src/version.c Sat Jan 5 13:56:55 2008 +*************** +*** 1587,1595 **** + + if (*mesg == ' ') + { +! vim_strncpy(modby, _("Modified by "), MODBY_LEN - 1); + l = STRLEN(modby); +! vim_strncpy(modby + l, MODIFIED_BY, MODBY_LEN - l - 1); + mesg = modby; + } + #endif +--- 1589,1597 ---- + + if (*mesg == ' ') + { +! vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1); + l = STRLEN(modby); +! vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1); + mesg = modby; + } + #endif +*** ../vim-7.1.205/src/version.c Sat Jan 5 13:34:01 2008 +--- src/version.c Sat Jan 5 13:56:55 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 206, + /**/ + +-- +ARTHUR: I am your king! +WOMAN: Well, I didn't vote for you. +ARTHUR: You don't vote for kings. +WOMAN: Well, 'ow did you become king then? + 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.1.207 b/7.1.207 new file mode 100644 index 00000000..1eba2ccf --- /dev/null +++ b/7.1.207 @@ -0,0 +1,253 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.207 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.207 +Problem: Netbeans: "remove" cannot delete one line. +Solution: Remove partial lines and whole lines properly. Avoid a memory + leak. (Xavier de Gaye) +Files: src/netbeans.c + + +*** ../vim-7.1.206/src/netbeans.c Thu May 10 18:40:48 2007 +--- src/netbeans.c Sat Jan 5 18:03:24 2008 +*************** +*** 1204,1209 **** +--- 1204,1257 ---- + return result; + } + ++ /* ++ * Remove from "first" byte to "last" byte (inclusive), at line "lnum" of the ++ * current buffer. Remove to end of line when "last" is MAXCOL. ++ */ ++ static void ++ nb_partialremove(linenr_T lnum, colnr_T first, colnr_T last) ++ { ++ char_u *oldtext, *newtext; ++ int oldlen; ++ int lastbyte = last; ++ ++ oldtext = ml_get(lnum); ++ oldlen = STRLEN(oldtext); ++ if (first >= oldlen || oldlen == 0) /* just in case */ ++ return; ++ if (lastbyte >= oldlen) ++ lastbyte = oldlen - 1; ++ newtext = alloc(oldlen - (int)(lastbyte - first)); ++ if (newtext != NULL) ++ { ++ mch_memmove(newtext, oldtext, first); ++ mch_memmove(newtext + first, oldtext + lastbyte + 1, STRLEN(oldtext + lastbyte + 1) + 1); ++ nbdebug((" NEW LINE %d: %s\n", lnum, newtext)); ++ ml_replace(lnum, newtext, FALSE); ++ } ++ } ++ ++ /* ++ * Replace the "first" line with the concatenation of the "first" and ++ * the "other" line. The "other" line is not removed. ++ */ ++ static void ++ nb_joinlines(linenr_T first, linenr_T other) ++ { ++ int len_first, len_other; ++ char_u *p; ++ ++ len_first = STRLEN(ml_get(first)); ++ len_other = STRLEN(ml_get(other)); ++ p = alloc((unsigned)(len_first + len_other + 1)); ++ if (p != NULL) ++ { ++ mch_memmove(p, ml_get(first), len_first); ++ mch_memmove(p + len_first, ml_get(other), len_other + 1); ++ ml_replace(first, p, FALSE); ++ } ++ } ++ + #define SKIP_STOP 2 + #define streq(a,b) (strcmp(a,b) == 0) + static int needupdate = 0; +*************** +*** 1371,1376 **** +--- 1419,1426 ---- + long count; + pos_T first, last; + pos_T *pos; ++ pos_T *next; ++ linenr_T del_from_lnum, del_to_lnum; /* lines to be deleted as a whole */ + int oldFire = netbeansFireChanges; + int oldSuppress = netbeansSuppressNoLines; + int wasChanged; +*************** +*** 1420,1444 **** + } + last = *pos; + nbdebug((" LAST POS: line %d, col %d\n", last.lnum, last.col)); +! curwin->w_cursor = first; + doupdate = 1; + +! /* keep part of first line */ +! if (first.lnum == last.lnum && first.col != last.col) + { +! /* deletion is within one line */ +! char_u *p = ml_get(first.lnum); +! mch_memmove(p + first.col, p + last.col + 1, STRLEN(p + last.col) + 1); +! nbdebug((" NEW LINE %d: %s\n", first.lnum, p)); +! ml_replace(first.lnum, p, TRUE); + } + +! if (first.lnum < last.lnum) + { + int i; + + /* delete signs from the lines being deleted */ +! for (i = first.lnum; i <= last.lnum; i++) + { + int id = buf_findsign_id(buf->bufp, (linenr_T)i); + if (id > 0) +--- 1470,1544 ---- + } + 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; + +! /* Get the position of the first byte after the deleted +! * section. "next" is NULL when deleting to the end of the +! * file. */ +! 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)) +! { +! /* remove to the end of the first line */ +! nb_partialremove(first.lnum, first.col, +! (colnr_T)MAXCOL); +! if (first.lnum == last.lnum) +! { +! /* Partial line to remove includes the end of +! * line. Join the line with the next one, have +! * the next line deleted below. */ +! nb_joinlines(first.lnum, next->lnum); +! del_to_lnum = next->lnum; +! } +! } +! else +! { +! /* remove within one line */ +! nb_partialremove(first.lnum, first.col, last.col); +! } +! ++del_from_lnum; /* don't delete the first line */ +! } +! +! /* Remove part of the last line. */ +! if (first.lnum != last.lnum && next != NULL +! && next->col != 0 && last.lnum == next->lnum) +! { +! nb_partialremove(last.lnum, 0, last.col); +! if (del_from_lnum > first.lnum) +! { +! /* Join end of last line to start of first line; last +! * line is deleted below. */ +! nb_joinlines(first.lnum, last.lnum); +! } +! else +! /* First line is deleted as a whole, keep the last +! * line. */ +! --del_to_lnum; + } + +! /* First is partial line; last line to remove includes +! * the end of line; join first line to line following last +! * line; line following last line is deleted below. */ +! if (first.lnum != last.lnum && del_from_lnum > first.lnum +! && next != NULL && last.lnum != next->lnum) +! { +! nb_joinlines(first.lnum, next->lnum); +! del_to_lnum = next->lnum; +! } +! +! /* Delete whole lines if there are any. */ +! if (del_to_lnum >= del_from_lnum) + { + int i; + + /* delete signs from the lines being deleted */ +! for (i = del_from_lnum; i <= del_to_lnum; i++) + { + int id = buf_findsign_id(buf->bufp, (linenr_T)i); + if (id > 0) +*************** +*** 1450,1459 **** + nbdebug((" No sign on line %d\n", i)); + } + +! /* delete whole lines */ +! nbdebug((" Deleting lines %d through %d\n", first.lnum, last.lnum)); +! del_lines(last.lnum - first.lnum + 1, FALSE); + } + buf->bufp->b_changed = wasChanged; /* logically unchanged */ + netbeansFireChanges = oldFire; + netbeansSuppressNoLines = oldSuppress; +--- 1550,1564 ---- + nbdebug((" No sign on line %d\n", i)); + } + +! 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); + } ++ ++ /* Leave cursor at first deleted byte. */ ++ curwin->w_cursor = first; ++ check_cursor_lnum(); + buf->bufp->b_changed = wasChanged; /* logically unchanged */ + netbeansFireChanges = oldFire; + netbeansSuppressNoLines = oldSuppress; +*************** +*** 2374,2381 **** + * the current buffer as "buf". + */ + static void +! nb_set_curbuf(buf) +! buf_T *buf; + { + if (curbuf != buf && buf_jump_open_win(buf) == NULL) + set_curbuf(buf, DOBUF_GOTO); +--- 2479,2485 ---- + * the current buffer as "buf". + */ + static void +! nb_set_curbuf(buf_T *buf) + { + if (curbuf != buf && buf_jump_open_win(buf) == NULL) + set_curbuf(buf, DOBUF_GOTO); +*** ../vim-7.1.206/src/version.c Sat Jan 5 13:58:48 2008 +--- src/version.c Sat Jan 5 18:06:04 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 207, + /**/ + +-- +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.1.208 b/7.1.208 new file mode 100644 index 00000000..44f6633b --- /dev/null +++ b/7.1.208 @@ -0,0 +1,69 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.208 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.208 +Problem: On Alpha get an unaligned access error. +Solution: Store the dictitem pointer before using it. (Matthew Luckie) +Files: src/eval.c + + +*** ../vim-7.1.207/src/eval.c Sat Jan 5 13:34:01 2008 +--- src/eval.c Sat Jan 5 13:22:52 2008 +*************** +*** 3407,3412 **** +--- 3407,3413 ---- + hashtab_T *ht; + hashitem_T *hi; + char_u *varname; ++ dictitem_T *di; + + ht = find_var_ht(name, &varname); + if (ht != NULL && *varname != NUL) +*************** +*** 3414,3422 **** + hi = hash_find(ht, varname); + if (!HASHITEM_EMPTY(hi)) + { +! if (var_check_fixed(HI2DI(hi)->di_flags, name)) +! return FAIL; +! if (var_check_ro(HI2DI(hi)->di_flags, name)) + return FAIL; + delete_var(ht, hi); + return OK; +--- 3415,3423 ---- + hi = hash_find(ht, varname); + if (!HASHITEM_EMPTY(hi)) + { +! di = HI2DI(hi); +! if (var_check_fixed(di->di_flags, name) +! || var_check_ro(di->di_flags, name)) + return FAIL; + delete_var(ht, hi); + return OK; +*** ../vim-7.1.207/src/version.c Sat Jan 5 18:06:33 2008 +--- src/version.c Sat Jan 5 22:14:17 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 208, + /**/ + +-- +ARTHUR: Bloody peasant! +DENNIS: Oh, what a give away. Did you here that, did you here 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.1.209 b/7.1.209 new file mode 100644 index 00000000..c62d2398 --- /dev/null +++ b/7.1.209 @@ -0,0 +1,71 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.209 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.209 +Problem: GTK: When using the netrw plugin and doing ":gui" Vim hangs. +Solution: Stop getting a selection after three seconds. This is a hack. +Files: src/gui_gtk_x11.c + + +*** ../vim-7.1.208/src/gui_gtk_x11.c Fri Oct 19 14:32:50 2007 +--- src/gui_gtk_x11.c Sun Jan 6 15:15:52 2008 +*************** +*** 6660,6665 **** +--- 6660,6666 ---- + unsigned i; + int nbytes; + char_u *buffer; ++ time_t start; + + for (i = 0; i < N_SELECTION_TARGETS; ++i) + { +*************** +*** 6670,6676 **** + cbd->gtk_sel_atom, target, + (guint32)GDK_CURRENT_TIME); + +! while (received_selection == RS_NONE) + gtk_main(); /* wait for selection_received_cb */ + + if (received_selection != RS_FAIL) +--- 6671,6681 ---- + cbd->gtk_sel_atom, target, + (guint32)GDK_CURRENT_TIME); + +! /* Hack: Wait up to three seconds for the selection. A hang was +! * noticed here when using the netrw plugin combined with ":gui" +! * during the FocusGained event. */ +! start = time(NULL); +! while (received_selection == RS_NONE && time(NULL) < start + 3) + gtk_main(); /* wait for selection_received_cb */ + + if (received_selection != RS_FAIL) +*** ../vim-7.1.208/src/version.c Sat Jan 5 22:15:21 2008 +--- src/version.c Sun Jan 6 15:14:48 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 209, + /**/ + +-- +BLACK KNIGHT: I move for no man. +ARTHUR: So be it! + [hah] [parry thrust] + [ARTHUR chops the BLACK KNIGHT's left arm off] +ARTHUR: Now stand aside, worthy adversary. +BLACK KNIGHT: 'Tis but a scratch. + 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.1.210 b/7.1.210 new file mode 100644 index 00000000..aa92ccdd --- /dev/null +++ b/7.1.210 @@ -0,0 +1,74 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.210 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.210 +Problem: Listing mapping for 0xdb fails when 'encoding' is utf-8. (Tony + Mechelynck) +Solution: Recognize K_SPECIAL KS_EXTRA KE_CSI as a CSI byte. +Files: src/mbyte.c + + +*** ../vim-7.1.209/src/mbyte.c Fri Jan 4 17:46:46 2008 +--- src/mbyte.c Sun Jan 6 17:13:51 2008 +*************** +*** 2863,2877 **** + buf[m++] = K_SPECIAL; + n += 2; + } + # ifdef FEAT_GUI +! else if (str[n] == CSI + && str[n + 1] == KS_EXTRA + && str[n + 2] == (int)KE_CSI) + { + buf[m++] = CSI; + n += 2; + } +- # endif + else if (str[n] == K_SPECIAL + # ifdef FEAT_GUI + || str[n] == CSI +--- 2882,2898 ---- + buf[m++] = K_SPECIAL; + n += 2; + } ++ else if ((str[n] == K_SPECIAL + # ifdef FEAT_GUI +! || str[n] == CSI +! # endif +! ) + && str[n + 1] == KS_EXTRA + && str[n + 2] == (int)KE_CSI) + { + buf[m++] = CSI; + n += 2; + } + else if (str[n] == K_SPECIAL + # ifdef FEAT_GUI + || str[n] == CSI +*** ../vim-7.1.209/src/version.c Sun Jan 6 15:16:12 2008 +--- src/version.c Sun Jan 6 17:17:25 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 210, + /**/ + +-- +ARTHUR: A scratch? Your arm's off! +BLACK KNIGHT: No, it isn't. +ARTHUR: Well, what's that then? +BLACK KNIGHT: I've had worse. + 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.1.211 b/7.1.211 new file mode 100644 index 00000000..38e3ea1d --- /dev/null +++ b/7.1.211 @@ -0,0 +1,748 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.211 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.211 +Problem: The matchparen plugin may take an unexpected amount of time, so + that it looks like Vim hangs. +Solution: Add a timeout to searchpair(), searchpairpos(), search() and + searchpos(). Use half a second timeout in the plugin. +Files: runtime/doc/eval.txt, runtime/plugin/matchparen.vim, src/edit.c, + src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/normal.c, + src/proto/eval.pro, src/proto/ex_cmds2.pro, src/proto/search.pro, + src/search.c + + +*** ../vim-7.1.210/runtime/doc/eval.txt Sat Jan 5 13:34:01 2008 +--- runtime/doc/eval.txt Sun Jan 6 16:27:33 2008 +*************** +*** 1,4 **** +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 04 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 06 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 1733,1746 **** + repeat( {expr}, {count}) String repeat {expr} {count} times + resolve( {filename}) String get filename a shortcut points to + reverse( {list}) List reverse {list} in-place +! search( {pattern} [, {flags}]) Number search for {pattern} + searchdecl({name} [, {global} [, {thisblock}]]) + Number search for variable declaration +! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]]) + Number search for other end of start/end pair +! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]]) + List search for other end of start/end pair +! searchpos( {pattern} [, {flags} [, {stopline}]]) + List search for {pattern} + server2client( {clientid}, {string}) + Number send reply string +--- 1733,1747 ---- + repeat( {expr}, {count}) String repeat {expr} {count} times + resolve( {filename}) String get filename a shortcut points to + reverse( {list}) List reverse {list} in-place +! search( {pattern} [, {flags} [, {stopline} [, {timeout}]]]) +! Number search for {pattern} + searchdecl({name} [, {global} [, {thisblock}]]) + Number search for variable declaration +! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]]) + Number search for other end of start/end pair +! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]]) + List search for other end of start/end pair +! searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]]) + List search for {pattern} + server2client( {clientid}, {string}) + Number send reply string +*************** +*** 4212,4218 **** + If you want a list to remain unmodified make a copy first: > + :let revlist = reverse(copy(mylist)) + +! search({pattern} [, {flags} [, {stopline}]]) *search()* + Search for regexp pattern {pattern}. The search starts at the + cursor position (you can use |cursor()| to set it). + +--- 4216,4222 ---- + If you want a list to remain unmodified make a copy first: > + :let revlist = reverse(copy(mylist)) + +! search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* + Search for regexp pattern {pattern}. The search starts at the + cursor position (you can use |cursor()| to set it). + +*************** +*** 4240,4245 **** +--- 4244,4257 ---- + let end = search('END', '', line("w$")) + < When {stopline} is used and it is not zero this also implies + that the search does not wrap around the end of the file. ++ A zero value is equal to not giving the argument. ++ ++ When the {timeout} argument is given the search stops when ++ more than this many milli seconds have passed. Thus when ++ {timeout} is 500 the search stops after half a second. ++ The value must not be negative. A zero value is like not ++ giving the argument. ++ {only available when compiled with the +reltime feature} + + If there is no match a 0 is returned and the cursor doesn't + move. No error message is given. +*************** +*** 4302,4308 **** + endif + < + *searchpair()* +! searchpair({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]]) + Search for the match of a nested start-end pair. This can be + used to find the "endif" that matches an "if", while other + if/endif pairs in between are ignored. +--- 4314,4321 ---- + endif + < + *searchpair()* +! searchpair({start}, {middle}, {end} [, {flags} [, {skip} +! [, {stopline} [, {timeout}]]]]) + Search for the match of a nested start-end pair. This can be + used to find the "endif" that matches an "if", while other + if/endif pairs in between are ignored. +*************** +*** 4337,4343 **** + When evaluating {skip} causes an error the search is aborted + and -1 returned. + +! For {stopline} see |search()|. + + The value of 'ignorecase' is used. 'magic' is ignored, the + patterns are used like it's on. +--- 4350,4356 ---- + When evaluating {skip} causes an error the search is aborted + and -1 returned. + +! For {stopline} and {timeout} see |search()|. + + The value of 'ignorecase' is used. 'magic' is ignored, the + patterns are used like it's on. +*************** +*** 4383,4389 **** + \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') + < + *searchpairpos()* +! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]]) + Same as searchpair(), but returns a |List| with the line and + column position of the match. The first element of the |List| + is the line number and the second element is the byte index of +--- 4396,4403 ---- + \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') + < + *searchpairpos()* +! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} +! [, {stopline} [, {timeout}]]]]) + Same as searchpair(), but returns a |List| with the line and + column position of the match. The first element of the |List| + is the line number and the second element is the byte index of +*************** +*** 4394,4400 **** + < + See |match-parens| for a bigger and more useful example. + +! searchpos({pattern} [, {flags} [, {stopline}]]) *searchpos()* + Same as |search()|, but returns a |List| with the line and + column position of the match. The first element of the |List| + is the line number and the second element is the byte index of +--- 4408,4414 ---- + < + See |match-parens| for a bigger and more useful example. + +! searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()* + Same as |search()|, but returns a |List| with the line and + column position of the match. The first element of the |List| + is the line number and the second element is the byte index of +*** ../vim-7.1.210/runtime/plugin/matchparen.vim Sat Aug 18 18:20:57 2007 +--- runtime/plugin/matchparen.vim Sun Jan 6 16:22:39 2008 +*************** +*** 1,6 **** + " Vim plugin for showing matching parens + " Maintainer: Bram Moolenaar +! " Last Change: 2007 Aug 8 + + " Exit quickly when: + " - this plugin was already loaded (or disabled) +--- 1,6 ---- + " Vim plugin for showing matching parens + " Maintainer: Bram Moolenaar +! " Last Change: 2008 Jan 06 + + " Exit quickly when: + " - this plugin was already loaded (or disabled) +*************** +*** 111,117 **** + \ '=~? "string\\|character\\|singlequote\\|comment"' + execute 'if' s_skip '| let s_skip = 0 | endif' + +! let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline) + + if before > 0 + call winrestview(save_cursor) +--- 111,122 ---- + \ '=~? "string\\|character\\|singlequote\\|comment"' + execute 'if' s_skip '| let s_skip = 0 | endif' + +! try +! " Limit the search time to 500 msec to avoid a hang on very long lines. +! let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 500) +! catch /E118/ +! let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline) +! endtry + + if before > 0 + call winrestview(save_cursor) +*** ../vim-7.1.210/src/edit.c Wed Jan 2 22:08:43 2008 +--- src/edit.c Sun Jan 6 16:08:00 2008 +*************** +*** 4062,4068 **** + found_new_match = searchit(NULL, ins_buf, pos, + compl_direction, + compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG, +! RE_LAST, (linenr_T)0); + --msg_silent; + if (!compl_started) + { +--- 4062,4068 ---- + found_new_match = searchit(NULL, ins_buf, pos, + compl_direction, + compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG, +! RE_LAST, (linenr_T)0, NULL); + --msg_silent; + if (!compl_started) + { +*** ../vim-7.1.210/src/eval.c Sat Jan 5 22:15:21 2008 +--- src/eval.c Sun Jan 6 16:37:42 2008 +*************** +*** 7213,7223 **** + {"repeat", 2, 2, f_repeat}, + {"resolve", 1, 1, f_resolve}, + {"reverse", 1, 1, f_reverse}, +! {"search", 1, 3, f_search}, + {"searchdecl", 1, 3, f_searchdecl}, +! {"searchpair", 3, 6, f_searchpair}, +! {"searchpairpos", 3, 6, f_searchpairpos}, +! {"searchpos", 1, 3, f_searchpos}, + {"server2client", 2, 2, f_server2client}, + {"serverlist", 0, 0, f_serverlist}, + {"setbufvar", 3, 3, f_setbufvar}, +--- 7213,7223 ---- + {"repeat", 2, 2, f_repeat}, + {"resolve", 1, 1, f_resolve}, + {"reverse", 1, 1, f_reverse}, +! {"search", 1, 4, f_search}, + {"searchdecl", 1, 3, f_searchdecl}, +! {"searchpair", 3, 7, f_searchpair}, +! {"searchpairpos", 3, 7, f_searchpairpos}, +! {"searchpos", 1, 4, f_searchpos}, + {"server2client", 2, 2, f_server2client}, + {"serverlist", 0, 0, f_serverlist}, + {"setbufvar", 3, 3, f_setbufvar}, +*************** +*** 14020,14025 **** +--- 14020,14029 ---- + int dir; + int retval = 0; /* default: FAIL */ + long lnum_stop = 0; ++ proftime_T tm; ++ #ifdef FEAT_RELTIME ++ long time_limit = 0; ++ #endif + int options = SEARCH_KEEP; + int subpatnum; + +*************** +*** 14033,14047 **** + if (flags & SP_END) + options |= SEARCH_END; + +! /* Optional extra argument: line number to stop searching. */ +! if (argvars[1].v_type != VAR_UNKNOWN +! && argvars[2].v_type != VAR_UNKNOWN) + { + lnum_stop = get_tv_number_chk(&argvars[2], NULL); + if (lnum_stop < 0) + goto theend; + } + + /* + * This function does not accept SP_REPEAT and SP_RETCOUNT flags. + * Check to make sure only those flags are set. +--- 14037,14063 ---- + if (flags & SP_END) + options |= SEARCH_END; + +! /* Optional arguments: line number to stop searching and timeout. */ +! if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN) + { + lnum_stop = get_tv_number_chk(&argvars[2], NULL); + if (lnum_stop < 0) + goto theend; ++ #ifdef FEAT_RELTIME ++ if (argvars[3].v_type != VAR_UNKNOWN) ++ { ++ time_limit = get_tv_number_chk(&argvars[3], NULL); ++ if (time_limit < 0) ++ goto theend; ++ } ++ #endif + } + ++ #ifdef FEAT_RELTIME ++ /* Set the time limit, if there is one. */ ++ profile_setlimit(time_limit, &tm); ++ #endif ++ + /* + * This function does not accept SP_REPEAT and SP_RETCOUNT flags. + * Check to make sure only those flags are set. +*************** +*** 14057,14063 **** + + pos = save_cursor = curwin->w_cursor; + subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L, +! options, RE_SEARCH, (linenr_T)lnum_stop); + if (subpatnum != FAIL) + { + if (flags & SP_SUBPAT) +--- 14073,14079 ---- + + pos = save_cursor = curwin->w_cursor; + subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L, +! options, RE_SEARCH, (linenr_T)lnum_stop, &tm); + if (subpatnum != FAIL) + { + if (flags & SP_SUBPAT) +*************** +*** 14147,14152 **** +--- 14163,14169 ---- + char_u nbuf3[NUMBUFLEN]; + int retval = 0; /* default: FAIL */ + long lnum_stop = 0; ++ long time_limit = 0; + + /* Get the three pattern arguments: start, middle, end. */ + spat = get_tv_string_chk(&argvars[0]); +*************** +*** 14182,14194 **** + lnum_stop = get_tv_number_chk(&argvars[5], NULL); + if (lnum_stop < 0) + goto theend; + } + } + if (skip == NULL) + goto theend; /* type error */ + + retval = do_searchpair(spat, mpat, epat, dir, skip, flags, +! match_pos, lnum_stop); + + theend: + p_ws = save_p_ws; +--- 14199,14219 ---- + lnum_stop = get_tv_number_chk(&argvars[5], NULL); + if (lnum_stop < 0) + goto theend; ++ #ifdef FEAT_RELTIME ++ if (argvars[6].v_type != VAR_UNKNOWN) ++ { ++ time_limit = get_tv_number_chk(&argvars[6], NULL); ++ if (time_limit < 0) ++ goto theend; ++ } ++ #endif + } + } + if (skip == NULL) + goto theend; /* type error */ + + retval = do_searchpair(spat, mpat, epat, dir, skip, flags, +! match_pos, lnum_stop, time_limit); + + theend: + p_ws = save_p_ws; +*************** +*** 14240,14246 **** + * Returns 0 or -1 for no match, + */ + long +! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos, lnum_stop) + char_u *spat; /* start pattern */ + char_u *mpat; /* middle pattern */ + char_u *epat; /* end pattern */ +--- 14265,14272 ---- + * Returns 0 or -1 for no match, + */ + long +! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos, +! lnum_stop, time_limit) + char_u *spat; /* start pattern */ + char_u *mpat; /* middle pattern */ + char_u *epat; /* end pattern */ +*************** +*** 14249,14254 **** +--- 14275,14281 ---- + int flags; /* SP_SETPCMARK and other SP_ values */ + pos_T *match_pos; + linenr_T lnum_stop; /* stop at this line if not zero */ ++ long time_limit; /* stop after this many msec */ + { + char_u *save_cpo; + char_u *pat, *pat2 = NULL, *pat3 = NULL; +*************** +*** 14263,14273 **** +--- 14290,14306 ---- + int nest = 1; + int err; + int options = SEARCH_KEEP; ++ proftime_T tm; + + /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ + save_cpo = p_cpo; + p_cpo = (char_u *)""; + ++ #ifdef FEAT_RELTIME ++ /* Set the time limit, if there is one. */ ++ profile_setlimit(time_limit, &tm); ++ #endif ++ + /* Make two search patterns: start/end (pat2, for in nested pairs) and + * start/middle/end (pat3, for the top pair). */ + pat2 = alloc((unsigned)(STRLEN(spat) + STRLEN(epat) + 15)); +*************** +*** 14291,14297 **** + for (;;) + { + n = searchit(curwin, curbuf, &pos, dir, pat, 1L, +! options, RE_SEARCH, lnum_stop); + if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos))) + /* didn't find it or found the first match again: FAIL */ + break; +--- 14324,14330 ---- + for (;;) + { + n = searchit(curwin, curbuf, &pos, dir, pat, 1L, +! options, RE_SEARCH, lnum_stop, &tm); + if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos))) + /* didn't find it or found the first match again: FAIL */ + break; +*** ../vim-7.1.210/src/ex_cmds2.c Fri Jan 4 16:00:10 2008 +--- src/ex_cmds2.c Sun Jan 6 18:22:28 2008 +*************** +*** 895,913 **** + sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart); + # else + sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec); +! #endif + return buf; + } + +! # endif /* FEAT_PROFILE || FEAT_RELTIME */ + +- # if defined(FEAT_PROFILE) || defined(PROTO) + /* +! * Functions for profiling. + */ +! static void script_do_profile __ARGS((scriptitem_T *si)); +! static void script_dump_profile __ARGS((FILE *fd)); +! static proftime_T prof_wait_time; + + /* + * Set the time in "tm" to zero. +--- 895,955 ---- + sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart); + # else + sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec); +! # endif + return buf; + } + +! /* +! * Put the time "msec" past now in "tm". +! */ +! void +! profile_setlimit(msec, tm) +! long msec; +! proftime_T *tm; +! { +! if (msec <= 0) /* no limit */ +! profile_zero(tm); +! else +! { +! # ifdef WIN3264 +! LARGE_INTEGER fr; +! +! QueryPerformanceCounter(tm); +! QueryPerformanceFrequency(&fr); +! tm->QuadPart += (double)msec / 1000.0 * (double)fr.QuadPart; +! # else +! long usec; +! +! gettimeofday(tm, NULL); +! usec = (long)tm->tv_usec + (long)msec * 1000; +! tm->tv_usec = usec % 1000000L; +! tm->tv_sec += usec / 1000000L; +! # endif +! } +! } + + /* +! * Return TRUE if the current time is past "tm". + */ +! int +! profile_passed_limit(tm) +! proftime_T *tm; +! { +! proftime_T now; +! +! # ifdef WIN3264 +! if (tm->QuadPart == 0) /* timer was not set */ +! return FALSE; +! QueryPerformanceCounter(&now); +! return (now.QuadPart > tm->QuadPart); +! # else +! if (tm->tv_sec == 0) /* timer was not set */ +! return FALSE; +! gettimeofday(&now, NULL); +! return (now.tv_sec > tm->tv_sec +! || (now.tv_sec == tm->tv_sec && now.tv_usec > tm->tv_usec)); +! # endif +! } + + /* + * Set the time in "tm" to zero. +*************** +*** 923,928 **** +--- 965,980 ---- + tm->tv_sec = 0; + # endif + } ++ ++ # endif /* FEAT_PROFILE || FEAT_RELTIME */ ++ ++ # if defined(FEAT_PROFILE) || defined(PROTO) ++ /* ++ * Functions for profiling. ++ */ ++ static void script_do_profile __ARGS((scriptitem_T *si)); ++ static void script_dump_profile __ARGS((FILE *fd)); ++ static proftime_T prof_wait_time; + + /* + * Add the time "tm2" to "tm". +*** ../vim-7.1.210/src/ex_docmd.c Fri Jan 4 16:00:10 2008 +--- src/ex_docmd.c Sun Jan 6 16:08:29 2008 +*************** +*** 3979,3985 **** + *cmd == '?' ? BACKWARD : FORWARD, + (char_u *)"", 1L, + SEARCH_MSG + SEARCH_START, +! i, (linenr_T)0) != FAIL) + lnum = pos.lnum; + else + { +--- 3980,3986 ---- + *cmd == '?' ? BACKWARD : FORWARD, + (char_u *)"", 1L, + SEARCH_MSG + SEARCH_START, +! i, (linenr_T)0, NULL) != FAIL) + lnum = pos.lnum; + else + { +*** ../vim-7.1.210/src/normal.c Sat Jan 5 13:34:01 2008 +--- src/normal.c Sun Jan 6 16:08:54 2008 +*************** +*** 4194,4200 **** + for (;;) + { + t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD, +! pat, 1L, searchflags, RE_LAST, (linenr_T)0); + if (curwin->w_cursor.lnum >= old_pos.lnum) + t = FAIL; /* match after start is failure too */ + +--- 4194,4200 ---- + for (;;) + { + t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD, +! pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL); + if (curwin->w_cursor.lnum >= old_pos.lnum) + t = FAIL; /* match after start is failure too */ + +*** ../vim-7.1.210/src/proto/eval.pro Sun May 6 15:18:09 2007 +--- src/proto/eval.pro Sun Jan 6 15:55:47 2008 +*************** +*** 54,60 **** + long get_dict_number __ARGS((dict_T *d, char_u *key)); + char_u *get_function_name __ARGS((expand_T *xp, int idx)); + char_u *get_expr_name __ARGS((expand_T *xp, int idx)); +! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop)); + 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)); +--- 54,60 ---- + long get_dict_number __ARGS((dict_T *d, char_u *key)); + char_u *get_function_name __ARGS((expand_T *xp, int idx)); + char_u *get_expr_name __ARGS((expand_T *xp, int idx)); +! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit)); + 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)); +*** ../vim-7.1.210/src/proto/ex_cmds2.pro Sat May 5 20:21:13 2007 +--- src/proto/ex_cmds2.pro Sun Jan 6 16:42:24 2008 +*************** +*** 14,19 **** +--- 14,21 ---- + void profile_end __ARGS((proftime_T *tm)); + void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2)); + char *profile_msg __ARGS((proftime_T *tm)); ++ void profile_setlimit __ARGS((long msec, proftime_T *tm)); ++ int profile_passed_limit __ARGS((proftime_T *tm)); + void profile_zero __ARGS((proftime_T *tm)); + void profile_add __ARGS((proftime_T *tm, proftime_T *tm2)); + void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children)); +*** ../vim-7.1.210/src/proto/search.pro Wed Aug 8 22:48:16 2007 +--- src/proto/search.pro Sun Jan 6 16:11:53 2008 +*************** +*** 10,16 **** + void reset_search_dir __ARGS((void)); + void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast)); + void last_pat_prog __ARGS((regmmatch_T *regmatch)); +! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum)); + int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options)); + int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat)); + int searchc __ARGS((cmdarg_T *cap, int t_cmd)); +--- 10,16 ---- + void reset_search_dir __ARGS((void)); + void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast)); + void last_pat_prog __ARGS((regmmatch_T *regmatch)); +! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm)); + int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options)); + int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat)); + int searchc __ARGS((cmdarg_T *cap, int t_cmd)); +*** ../vim-7.1.210/src/search.c Tue Jan 1 15:42:45 2008 +--- src/search.c Sun Jan 6 18:23:37 2008 +*************** +*** 494,501 **** + * When FEAT_EVAL is defined, returns the index of the first matching + * subpattern plus one; one if there was none. + */ + int +! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum) + win_T *win; /* window to search in; can be NULL for a + buffer without a window! */ + buf_T *buf; +--- 494,502 ---- + * 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 + buffer without a window! */ + buf_T *buf; +*************** +*** 506,511 **** +--- 507,513 ---- + 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 */ +*************** +*** 594,599 **** +--- 596,606 ---- + if (stop_lnum != 0 && (dir == FORWARD + ? lnum > stop_lnum : lnum < stop_lnum)) + break; ++ #ifdef FEAT_RELTIME ++ /* Stop after passing the "tm" time limit. */ ++ if (tm != NULL && profile_passed_limit(tm)) ++ break; ++ #endif + + /* + * Look for a match somewhere in line "lnum". +*************** +*** 1249,1255 **** + (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS + + SEARCH_MSG + SEARCH_START + + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))), +! RE_LAST, (linenr_T)0); + + if (dircp != NULL) + *dircp = dirc; /* restore second '/' or '?' for normal_cmd() */ +--- 1256,1262 ---- + (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS + + SEARCH_MSG + SEARCH_START + + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))), +! RE_LAST, (linenr_T)0, NULL); + + if (dircp != NULL) + *dircp = dirc; /* restore second '/' or '?' for normal_cmd() */ +*************** +*** 3780,3786 **** + if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)", + (char_u *)"", + (char_u *)"]*>", BACKWARD, (char_u *)"", 0, +! NULL, (linenr_T)0) <= 0) + { + curwin->w_cursor = old_pos; + goto theend; +--- 3787,3793 ---- + if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)", + (char_u *)"", + (char_u *)"]*>", BACKWARD, (char_u *)"", 0, +! NULL, (linenr_T)0, 0L) <= 0) + { + curwin->w_cursor = old_pos; + goto theend; +*************** +*** 3814,3820 **** + sprintf((char *)epat, "\\c", len, p); + + r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"", +! 0, NULL, (linenr_T)0); + + vim_free(spat); + vim_free(epat); +--- 3821,3827 ---- + sprintf((char *)epat, "\\c", len, p); + + r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"", +! 0, NULL, (linenr_T)0, 0L); + + vim_free(spat); + vim_free(epat); +*** ../vim-7.1.210/src/version.c Sun Jan 6 17:18:16 2008 +--- src/version.c Sun Jan 6 20:00:03 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 211, + /**/ + +-- +No letters of the alphabet were harmed in the creation of this message. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/README.patches b/README.patches index 730f7038..90320331 100644 --- a/README.patches +++ b/README.patches @@ -25,6 +25,7 @@ Checksums for the patch files can be found in the file MD5. Collection of patches for Vim 7.1: SIZE NAME INCLUDES 91424 7.1.001-100.gz patches 7.1.001 to 7.1.100, gzip'ed + 75402 7.1.101-200.gz patches 7.1.101 to 7.1.200, gzip'ed Individual patches for Vim 7.1: @@ -155,6 +156,7 @@ Individual patches for Vim 7.1: 2599 7.1.124 (extra) Mac: may get empty buffer if dropping file on Vim.app 12060 7.1.125 the TermResponse autocommand event is not always triggered 13372 7.1.126 (extra) ":vimgrep */*" doesn't work if autocmd changes dir + 12461 7.1.126ne replacement for 7.1.126 without the (extra) 2319 7.1.127 memory leak when doing completing 2079 7.1.128 (extra) build problem with Cygwin 1740 7.1.129 (extra) Win32: Can't get long user name @@ -164,3 +166,79 @@ Individual patches for Vim 7.1: 1515 7.1.133 shorten_fname1() linked when it's not needed 10379 7.1.134 (extra) Win32: Can't build with VC8 3337 7.1.135 Win32: ":e c:/tmp/foo" and ":e c:/tmp//foo" create two buffers + 1522 7.1.136 memory leak when using Ruby syntax highlighting + 1553 7.1.137 build failure when using EXITFREE + 1836 7.1.138 Perl: Msg() doesn't stop when "q" is typed at the more prompt + 1557 7.1.139 fold truncated when ending Insert mode with CTRL-C + 1664 7.1.140 v:count can't be used in an expression mapping + 2806 7.1.141 GTK: can't use negative offset with -geom argument + 2161 7.1.142 ":redir @A>" doesn't work + 1723 7.1.143 uninitialized memory read when diffing three files + 1250 7.1.144 after ":diffup" cursor can be in the wrong position + 6160 7.1.145 stay in Insert completion mode depending on the char typed + 2838 7.1.146 VMS: writing fails for rare record organisation + 2079 7.1.147 (after 7.1.127) freeing memory twice completing user name + 2557 7.1.148 QNX and some other systems require testing for sys/types.h + 4823 7.1.149 completion menu messed up when using the scroll bar + 1759 7.1.150 Visual mode "p" doesn't work when 'clipboard' has "unnamed" + 2108 7.1.151 lalloc(0) error for line completion with 'ic' and 'inf' set + 3183 7.1.152 display problem when 'hls' and 'cursorcolumn' are set + 4610 7.1.153 compiler warnings on SGI + 1547 7.1.154 (after 7.1.152) compiler warning for signed/unsigned compare + 1594 7.1.155 crash when 'undolevels' is 0 and repeating "udd" + 4174 7.1.156 overlapping arguments for strcpy() during cmdline completion + 1541 7.1.157 :" in Ex mode at end of file results in an error message + 4629 7.1.158 (extra) Win32: with utf-8 and cp1250 Alt-y is the wrong char + 1646 7.1.159 overlapping arguments for a strcpy() + 1661 7.1.160 getting/losing focus may cause hit-enter prompt to be redrawn + 4347 7.1.161 compilation errors with tiny features and EXITFREE + 4691 7.1.162 crash when using a modifier before "while" or "for" + 2367 7.1.163 warning for the unknown option 'bufsecret' + 1576 7.1.164 reading past end of regexp pattern + 5538 7.1.165 crash related to getting X window ID + 2134 7.1.166 memory leak when using "gp" in Visual mode + 2528 7.1.167 xxd crashes when using "xxd -b -c 110" + 2989 7.1.168 (extra) Win32 GUI: when no focus click doesn't position cursor + 1926 7.1.169 using uninitialized memory when system() fails + 1722 7.1.170 overlapping arguments to strcpy() + 2324 7.1.171 reading one byte before allocated memory. + 1536 7.1.172 if 'buftype' is "acwrite" Vim still does overwrite check + 1928 7.1.173 accessing freed memory when using "\%^" pattern + 2197 7.1.174 writing NUL past end of a buffer + 4722 7.1.175 doesn't work with some combination of option settings + 2943 7.1.176 compiling with Aap fails if "compiledby" contains '<' or '>' + 5450 7.1.177 freeing memory twice when in debug mode while reading a script + 1567 7.1.178 "%" doesn't work on "/* comment *//* comment */" + 6581 7.1.179 configure doesn't find TCL 8.5 + 7099 7.1.180 regexp patterns are not sufficiently tested + 1878 7.1.181 accessing uninitialized memory in Farsi mode with ":s" + 5457 7.1.182 with tab pages and an argument list session file may be wrong + 2489 7.1.183 Internal error for ":echo matchstr('a', 'a\%[\&]')" + 2132 7.1.184 crash when deleting backwards over a line break in Insert mode + 3744 7.1.185 "gR" and then BS doesn't work properly with multi-byte chars + 3294 7.1.186 "expand('')" returns a bogus value after ":cd dir" + 2341 7.1.187 Win32 GUI: custom completion using system() doesn't work + 1688 7.1.188 "W10" message could be displayed in the second column + 1950 7.1.189 (after 7.1.104) need to call plain_vgetc() in ask_yesno() + 1685 7.1.190 cursor after end-of-line: "iA sentence.)" + 2007 7.1.191 Win32 GUI: when not in focus click in scrollbar doesn't work + 2605 7.1.192 CTRL-C doesn't stop duplicating text for "s" in Visual block + 2962 7.1.193 some of the Vim 5.x digraphs could be supported + 1650 7.1.194 Unix: ":echo glob('~/{}')" results in "/home/user//" + 2273 7.1.195 '0 mark doesn't work for "~/foo ~ foo" + 2642 7.1.196 (extra) Win32 GUI: "\n" in a tooltip doesn't cause line break + 2308 7.1.197 Mac: "make install" doesn't work when $prefix is set + 1460 7.1.198 hang when using ":s/\n//gn" + 3572 7.1.199 can't do command line completion for a file name extension + 2310 7.1.200 (after 7.1.177 and 7.1.182) compiler warnings + 2705 7.1.201 when reading stdin 'fenc' and 'ff' are not set + 2383 7.1.202 incomplete utf-8 byte sequence is not checked for validity + 2261 7.1.203 if 'virtualedit' is "onemore" then ":normal 99|" is not right + 2891 7.1.204 (extra) Win32: 'balloonexpr' tooltip disappears after 4 sec + 5481 7.1.205 can't get the operator in an ":omap" + 1690 7.1.206 compiler warnings when using MODIFIED_BY + 7708 7.1.207 netbeans: "remove" cannot delete one line + 2051 7.1.208 on Alpha get an unaligned access error + 2249 7.1.209 GTK GUI: when using the netrw plugin ":gui" causes a hang + 1923 7.1.210 listing mapping for 0xdb fails when 'encoding' is utf-8 + 25525 7.1.211 matchparen plugin may take so long it looks like Vim hangs diff --git a/gvim.desktop b/gvim.desktop index 794f4829..72bfdd81 100644 --- a/gvim.desktop +++ b/gvim.desktop @@ -59,5 +59,5 @@ Exec=gvim -f %f Icon=gvim Type=Application Terminal=0 -XClassHintResName=VIM +X-XClassHintResName=VIM MapNotify=false diff --git a/vim.spec b/vim.spec index 8a3d0f25..67fdd091 100644 --- a/vim.spec +++ b/vim.spec @@ -15,7 +15,7 @@ #used for pre-releases: %define beta %{nil} %define vimdir vim71%{?beta} -%define patchlevel 135 +%define patchlevel 211 Summary: The VIM editor URL: http://www.vim.org/ @@ -186,6 +186,82 @@ Patch132: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.132 Patch133: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.133 Patch134: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.134 Patch135: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.135 +Patch136: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.136 +Patch137: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.137 +Patch138: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.138 +Patch139: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.139 +Patch140: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.140 +Patch141: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.141 +Patch142: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.142 +Patch143: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.143 +Patch144: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.144 +Patch145: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.145 +Patch146: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.146 +Patch147: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.147 +Patch148: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.148 +Patch149: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.149 +Patch150: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.150 +Patch151: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.151 +Patch152: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.152 +Patch153: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.153 +Patch154: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.154 +Patch155: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.155 +Patch156: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.156 +Patch157: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.157 +Patch158: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.158 +Patch159: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.159 +Patch160: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.160 +Patch161: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.161 +Patch162: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.162 +Patch163: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.163 +Patch164: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.164 +Patch165: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.165 +Patch166: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.166 +Patch167: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.167 +Patch168: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.168 +Patch169: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.169 +Patch170: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.170 +Patch171: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.171 +Patch172: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.172 +Patch173: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.173 +Patch174: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.174 +Patch175: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.175 +Patch176: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.176 +Patch177: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.177 +Patch178: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.178 +Patch179: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.179 +Patch180: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.180 +Patch181: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.181 +Patch182: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.182 +Patch183: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.183 +Patch184: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.184 +Patch185: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.185 +Patch186: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.186 +Patch187: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.187 +Patch188: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.188 +Patch189: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.189 +Patch190: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.190 +Patch191: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.191 +Patch192: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.192 +Patch193: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.193 +Patch194: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.194 +Patch195: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.195 +Patch196: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.196 +Patch197: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.197 +Patch198: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.198 +Patch199: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.199 +Patch200: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.200 +Patch201: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.201 +Patch202: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.202 +Patch203: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.203 +Patch204: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.204 +Patch205: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.205 +Patch206: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.206 +Patch207: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.207 +Patch208: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.208 +Patch209: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.209 +Patch210: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.210 +Patch211: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.211 Patch3000: vim-7.0-syntax.patch Patch3002: vim-7.1-nowarnings.patch @@ -265,7 +341,7 @@ package is installed. %package enhanced Summary: A version of the VIM editor which includes recent enhancements Group: Applications/Editors -Requires: vim-common = %{epoch}:%{version}-%{release} +Requires: vim-common = %{epoch}:%{version}-%{release} which Provides: vim = %{version}-%{release} %description enhanced @@ -453,6 +529,82 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk %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 # install spell files @@ -839,6 +991,19 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/icons/hicolor/*/apps/* %changelog +* Thu Jan 10 2008 Karsten Hopp 7.1.211-1 +- rebuild for F-8 + +* 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 From 0ecb7a29ddbea3844eb6c43063bb78d4d3930b29 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Mon, 11 Feb 2008 15:11:34 +0000 Subject: [PATCH 3/5] - build patchlevel 245 for F-8 --- 7.1.212 | 47 + 7.1.213 | 57 + 7.1.214 | 266 ++ 7.1.215 | 198 ++ 7.1.216 | 55 + 7.1.217 | 228 ++ 7.1.218 | 58 + 7.1.219 | 378 +++ 7.1.220 | 136 + 7.1.221 | 58 + 7.1.222 | 135 + 7.1.223 | 263 ++ 7.1.224 | 73 + 7.1.225 | 55 + 7.1.226 | 68 + 7.1.227 | 188 ++ 7.1.228 | 51 + 7.1.229 | 55 + 7.1.230 | 64 + 7.1.231 | 291 ++ 7.1.232 | 70 + 7.1.233 | 109 + 7.1.234 | 210 ++ 7.1.235 | 199 ++ 7.1.236 | 920 ++++++ 7.1.237 | 54 + 7.1.238 | 61 + 7.1.239 | 53 + 7.1.240 | 186 ++ 7.1.241 | 112 + 7.1.242 | 68 + 7.1.243 | 165 ++ 7.1.244 | 58 + 7.1.245 | 92 + README.patches | 35 + vim-7.1-ada.patch | 7018 +++++++++++++++++++++++++++++++++++++++++++++ vim.spec | 96 +- 37 files changed, 12227 insertions(+), 3 deletions(-) create mode 100644 7.1.212 create mode 100644 7.1.213 create mode 100644 7.1.214 create mode 100644 7.1.215 create mode 100644 7.1.216 create mode 100644 7.1.217 create mode 100644 7.1.218 create mode 100644 7.1.219 create mode 100644 7.1.220 create mode 100644 7.1.221 create mode 100644 7.1.222 create mode 100644 7.1.223 create mode 100644 7.1.224 create mode 100644 7.1.225 create mode 100644 7.1.226 create mode 100644 7.1.227 create mode 100644 7.1.228 create mode 100644 7.1.229 create mode 100644 7.1.230 create mode 100644 7.1.231 create mode 100644 7.1.232 create mode 100644 7.1.233 create mode 100644 7.1.234 create mode 100644 7.1.235 create mode 100644 7.1.236 create mode 100644 7.1.237 create mode 100644 7.1.238 create mode 100644 7.1.239 create mode 100644 7.1.240 create mode 100644 7.1.241 create mode 100644 7.1.242 create mode 100644 7.1.243 create mode 100644 7.1.244 create mode 100644 7.1.245 create mode 100644 vim-7.1-ada.patch diff --git a/7.1.212 b/7.1.212 new file mode 100644 index 00000000..a9aa7f55 --- /dev/null +++ b/7.1.212 @@ -0,0 +1,47 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.212 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.212 +Problem: Accessing a byte before a line. +Solution: Check that the column is 1 or more. (Dominuque Pelle) +Files: src/edit.c + + +*** ../vim-7.1.211/src/edit.c Sun Jan 6 20:05:36 2008 +--- src/edit.c Mon Jan 7 22:31:36 2008 +*************** +*** 8452,8457 **** +--- 8452,8458 ---- + if ( mode == BACKSPACE_CHAR + && ((p_sta && in_indent) + || (curbuf->b_p_sts != 0 ++ && curwin->w_cursor.col > 0 + && (*(ml_get_cursor() - 1) == TAB + || (*(ml_get_cursor() - 1) == ' ' + && (!*inserted_space_p +*** ../vim-7.1.211/src/version.c Sun Jan 6 20:05:36 2008 +--- src/version.c Wed Jan 9 10:11:49 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 212, + /**/ + +-- +CRONE: Who sent you? +ARTHUR: The Knights Who Say Ni! +CRONE: Aaaagh! (she looks around in rear) No! We have no shrubberies here. + "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.1.213 b/7.1.213 new file mode 100644 index 00000000..aee3248d --- /dev/null +++ b/7.1.213 @@ -0,0 +1,57 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.213 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.213 +Problem: A ":tabedit" command that results in the "swap file exists" dialog + and selecting "abort" doesn't close the new tab. (Al Budden) +Solution: Pass "old_curwin" to do_exedit(). +Files: src/ex_docmd.c + + +*** ../vim-7.1.212/src/ex_docmd.c Sun Jan 6 20:05:36 2008 +--- src/ex_docmd.c Wed Jan 9 20:11:13 2008 +*************** +*** 7126,7132 **** + : eap->addr_count == 0 ? 0 + : (int)eap->line2 + 1) != FAIL) + { +! do_exedit(eap, NULL); + + /* set the alternate buffer for the window we came from */ + if (curwin != old_curwin +--- 7127,7133 ---- + : eap->addr_count == 0 ? 0 + : (int)eap->line2 + 1) != FAIL) + { +! do_exedit(eap, old_curwin); + + /* set the alternate buffer for the window we came from */ + if (curwin != old_curwin +*** ../vim-7.1.212/src/version.c Wed Jan 9 10:13:24 2008 +--- src/version.c Wed Jan 9 20:29:09 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 213, + /**/ + +-- +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.1.214 b/7.1.214 new file mode 100644 index 00000000..83786675 --- /dev/null +++ b/7.1.214 @@ -0,0 +1,266 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.214 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.214 +Problem: ":1s/g\n\zs1//" deletes characters from the first line. (A Politz) +Solution: Start replacing in the line where the match starts. +Files: src/ex_cmds.c + + +*** ../vim-7.1.213/src/ex_cmds.c Fri Jan 4 14:52:14 2008 +--- src/ex_cmds.c Wed Jan 9 22:32:26 2008 +*************** +*** 4200,4206 **** + linenr_T old_line_count = curbuf->b_ml.ml_line_count; + linenr_T line2; + long nmatch; /* number of lines in match */ +- linenr_T sub_firstlnum; /* nr of first sub line */ + char_u *sub_firstline; /* allocated copy of first sub line */ + int endcolumn = FALSE; /* cursor in last column when done */ + pos_T old_cursor = curwin->w_cursor; +--- 4200,4205 ---- +*************** +*** 4447,4453 **** + #endif + ); ++lnum) + { +- sub_firstlnum = lnum; + nmatch = vim_regexec_multi(®match, curwin, curbuf, lnum, (colnr_T)0); + if (nmatch) + { +--- 4446,4451 ---- +*************** +*** 4463,4468 **** +--- 4461,4467 ---- + long nmatch_tl = 0; /* nr of lines matched below lnum */ + int do_again; /* do it again after joining lines */ + int skip_match = FALSE; ++ linenr_T sub_firstlnum; /* nr of first sub line */ + + /* + * The new text is build up step by step, to avoid too much +*************** +*** 4482,4489 **** + * far. + * new_end The new text, where to append new text. + * +! * lnum The line number where we were looking for the +! * first match in the old line. + * sub_firstlnum The line number in the buffer where to look + * for a match. Can be different from "lnum" + * when the pattern or substitute string contains +--- 4481,4490 ---- + * far. + * new_end The new text, where to append new text. + * +! * lnum The line number where we found the start of +! * the match. Can be below the line we searched +! * when there is a \n before a \zs in the +! * pattern. + * sub_firstlnum The line number in the buffer where to look + * for a match. Can be different from "lnum" + * when the pattern or substitute string contains +*************** +*** 4507,4518 **** + * updating the screen or handling a multi-line match. The "old_" + * pointers point into this copy. + */ +! sub_firstline = vim_strsave(ml_get(sub_firstlnum)); +! if (sub_firstline == NULL) +! { +! vim_free(new_start); +! goto outofmem; +! } + copycol = 0; + matchcol = 0; + +--- 4508,4514 ---- + * updating the screen or handling a multi-line match. The "old_" + * pointers point into this copy. + */ +! sub_firstlnum = lnum; + copycol = 0; + matchcol = 0; + +*************** +*** 4533,4538 **** +--- 4529,4556 ---- + */ + for (;;) + { ++ /* Advance "lnum" to the line where the match starts. The ++ * match does not start in the first line when there is a line ++ * break before \zs. */ ++ if (regmatch.startpos[0].lnum > 0) ++ { ++ lnum += regmatch.startpos[0].lnum; ++ sub_firstlnum += regmatch.startpos[0].lnum; ++ nmatch -= regmatch.startpos[0].lnum; ++ vim_free(sub_firstline); ++ sub_firstline = NULL; ++ } ++ ++ if (sub_firstline == NULL) ++ { ++ sub_firstline = vim_strsave(ml_get(sub_firstlnum)); ++ if (sub_firstline == NULL) ++ { ++ vim_free(new_start); ++ goto outofmem; ++ } ++ } ++ + /* Save the line number of the last change for the final + * cursor position (just like Vi). */ + curwin->w_cursor.lnum = lnum; +*************** +*** 4638,4644 **** + temp = RedrawingDisabled; + RedrawingDisabled = 0; + +! search_match_lines = regmatch.endpos[0].lnum; + search_match_endcol = regmatch.endpos[0].col; + highlight_match = TRUE; + +--- 4656,4663 ---- + temp = RedrawingDisabled; + RedrawingDisabled = 0; + +! search_match_lines = regmatch.endpos[0].lnum +! - regmatch.startpos[0].lnum; + search_match_endcol = regmatch.endpos[0].col; + highlight_match = TRUE; + +*************** +*** 4749,4755 **** + * 3. substitute the string. + */ + /* get length of substitution part */ +! sublen = vim_regsub_multi(®match, sub_firstlnum, + sub, sub_firstline, FALSE, p_magic, TRUE); + + /* When the match included the "$" of the last line it may +--- 4768,4775 ---- + * 3. substitute the string. + */ + /* get length of substitution part */ +! sublen = vim_regsub_multi(®match, +! sub_firstlnum - regmatch.startpos[0].lnum, + sub, sub_firstline, FALSE, p_magic, TRUE); + + /* When the match included the "$" of the last line it may +*************** +*** 4819,4825 **** + mch_memmove(new_end, sub_firstline + copycol, (size_t)i); + new_end += i; + +! (void)vim_regsub_multi(®match, sub_firstlnum, + sub, new_end, TRUE, p_magic, TRUE); + sub_nsubs++; + did_sub = TRUE; +--- 4839,4846 ---- + mch_memmove(new_end, sub_firstline + copycol, (size_t)i); + new_end += i; + +! (void)vim_regsub_multi(®match, +! sub_firstlnum - regmatch.startpos[0].lnum, + sub, new_end, TRUE, p_magic, TRUE); + sub_nsubs++; + did_sub = TRUE; +*************** +*** 4908,4917 **** + skip: + /* We already know that we did the last subst when we are at + * the end of the line, except that a pattern like +! * "bar\|\nfoo" may match at the NUL. */ + lastone = (skip_match + || got_int + || got_quit + || !(do_all || do_again) + || (sub_firstline[matchcol] == NUL && nmatch <= 1 + && !re_multiline(regmatch.regprog))); +--- 4929,4941 ---- + skip: + /* We already know that we did the last subst when we are at + * the end of the line, except that a pattern like +! * "bar\|\nfoo" may match at the NUL. "lnum" can be below +! * "line2" when there is a \zs in the pattern after a line +! * break. */ + lastone = (skip_match + || got_int + || got_quit ++ || lnum > line2 + || !(do_all || do_again) + || (sub_firstline[matchcol] == NUL && nmatch <= 1 + && !re_multiline(regmatch.regprog))); +*************** +*** 4926,4937 **** + * When asking the user we like to show the already replaced + * text, but don't do it when "\<@=" or "\<@!" is used, it + * changes what matches. + */ + if (lastone + || (do_ask && !re_lookbehind(regmatch.regprog)) + || nmatch_tl > 0 + || (nmatch = vim_regexec_multi(®match, curwin, +! curbuf, sub_firstlnum, matchcol)) == 0) + { + if (new_start != NULL) + { +--- 4950,4964 ---- + * When asking the user we like to show the already replaced + * text, but don't do it when "\<@=" or "\<@!" is used, it + * changes what matches. ++ * When the match starts below where we start searching also ++ * need to replace the line first (using \zs after \n). + */ + if (lastone + || (do_ask && !re_lookbehind(regmatch.regprog)) + || nmatch_tl > 0 + || (nmatch = vim_regexec_multi(®match, curwin, +! curbuf, sub_firstlnum, matchcol)) == 0 +! || regmatch.startpos[0].lnum > 0) + { + if (new_start != NULL) + { +*************** +*** 5001,5007 **** +--- 5028,5041 ---- + * 5. break if there isn't another match in this line + */ + if (nmatch <= 0) ++ { ++ /* If the match found didn't start where we were ++ * searching, do the next search in the line where we ++ * found the match. */ ++ if (nmatch == -1) ++ lnum -= regmatch.startpos[0].lnum; + break; ++ } + } + + line_breakcheck(); +*** ../vim-7.1.213/src/version.c Wed Jan 9 20:29:51 2008 +--- src/version.c Wed Jan 9 22:37:47 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 214, + /**/ + +-- +Q: What's orange and sounds like a parrot? +A: A carrot + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.215 b/7.1.215 new file mode 100644 index 00000000..ea4a830a --- /dev/null +++ b/7.1.215 @@ -0,0 +1,198 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.215 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.215 +Problem: It is difficult to figure out what syntax items are nested at a + certain position. +Solution: Add the synstack() function. +Files: runtime/doc/eval.txt, src/eval.c, src/proto/syntax.pro, + src/syntax.c + + +*** ../vim-7.1.214/runtime/doc/eval.txt Sun Jan 6 20:05:36 2008 +--- runtime/doc/eval.txt Thu Jan 10 22:20:31 2008 +*************** +*** 1,4 **** +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 06 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 10 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 1786,1791 **** +--- 1786,1792 ---- + synIDattr( {synID}, {what} [, {mode}]) + String attribute {what} of syntax ID {synID} + synIDtrans( {synID}) Number translated syntax ID of {synID} ++ synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col} + system( {expr} [, {input}]) String output of shell command/filter {expr} + tabpagebuflist( [{arg}]) List list of buffer numbers in tab page + tabpagenr( [{arg}]) Number number of current or last tab page +*************** +*** 4962,4967 **** +--- 4966,4989 ---- + highlight the character. Highlight links given with + ":highlight link" are followed. + ++ synstack({lnum}, {col}) *synstack()* ++ Return a |List|, which is the stack of syntax items at the ++ position {lnum} and {col} in the current window. Each item in ++ the List is an ID like what |synID()| returns. ++ The stack is the situation in between the character at "col" ++ and the next character. Note that a region of only one ++ character will not show up, it only exists inside that ++ character, not in between characters. ++ The first item in the List is the outer region, following are ++ items contained in that one. The last one is what |synID()| ++ returns, unless not the whole item is highlighted or it is a ++ transparent item. ++ This function is useful for debugging a syntax file. ++ Example that shows the syntax stack under the cursor: > ++ for id in synstack(line("."), col(".")) ++ echo synIDattr(id, "name") ++ endfor ++ + system({expr} [, {input}]) *system()* *E677* + Get the output of the shell command {expr}. + When {input} is given, this string is written to a file and +*** ../vim-7.1.214/src/eval.c Sun Jan 6 20:05:36 2008 +--- src/eval.c Wed Jan 9 13:42:56 2008 +*************** +*** 651,656 **** +--- 651,657 ---- + static void f_synID __ARGS((typval_T *argvars, typval_T *rettv)); + static void f_synIDattr __ARGS((typval_T *argvars, typval_T *rettv)); + static void f_synIDtrans __ARGS((typval_T *argvars, typval_T *rettv)); ++ static void f_synstack __ARGS((typval_T *argvars, typval_T *rettv)); + static void f_system __ARGS((typval_T *argvars, typval_T *rettv)); + static void f_tabpagebuflist __ARGS((typval_T *argvars, typval_T *rettv)); + static void f_tabpagenr __ARGS((typval_T *argvars, typval_T *rettv)); +*************** +*** 7252,7257 **** +--- 7253,7259 ---- + {"synID", 3, 3, f_synID}, + {"synIDattr", 2, 3, f_synIDattr}, + {"synIDtrans", 1, 1, f_synIDtrans}, ++ {"synstack", 2, 2, f_synstack}, + {"system", 1, 2, f_system}, + {"tabpagebuflist", 0, 1, f_tabpagebuflist}, + {"tabpagenr", 0, 1, f_tabpagenr}, +*************** +*** 15843,15848 **** +--- 15845,15890 ---- + id = 0; + + rettv->vval.v_number = id; ++ } ++ ++ /* ++ * "synstack(lnum, col)" function ++ */ ++ /*ARGSUSED*/ ++ static void ++ f_synstack(argvars, rettv) ++ typval_T *argvars; ++ typval_T *rettv; ++ { ++ #ifdef FEAT_SYN_HL ++ long lnum; ++ long col; ++ int i; ++ int id; ++ #endif ++ ++ rettv->v_type = VAR_LIST; ++ rettv->vval.v_list = NULL; ++ ++ #ifdef FEAT_SYN_HL ++ lnum = get_tv_lnum(argvars); /* -1 on type error */ ++ 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); ++ for (i = 0; ; ++i) ++ { ++ id = syn_get_stack_item(i); ++ if (id < 0) ++ break; ++ if (list_append_number(rettv->vval.v_list, id) == FAIL) ++ break; ++ } ++ } ++ #endif + } + + /* +*** ../vim-7.1.214/src/proto/syntax.pro Tue Jul 24 14:32:44 2007 +--- src/proto/syntax.pro Wed Jan 9 13:38:20 2008 +*************** +*** 13,18 **** +--- 13,19 ---- + void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg)); + char_u *get_syntax_name __ARGS((expand_T *xp, int idx)); + int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp)); ++ int syn_get_stack_item __ARGS((int i)); + int syn_get_foldlevel __ARGS((win_T *wp, long lnum)); + void init_highlight __ARGS((int both, int reset)); + int load_colors __ARGS((char_u *name)); +*** ../vim-7.1.214/src/syntax.c Sun Oct 7 15:21:31 2007 +--- src/syntax.c Wed Jan 9 15:17:47 2008 +*************** +*** 6104,6109 **** +--- 6102,6123 ---- + + return (trans ? current_trans_id : current_id); + } ++ ++ #if defined(FEAT_EVAL) || defined(PROTO) ++ /* ++ * Return the syntax ID at position "i" in the current stack. ++ * The caller must have called syn_get_id() before to fill the stack. ++ * Returns -1 when "i" is out of range. ++ */ ++ int ++ syn_get_stack_item(i) ++ int i; ++ { ++ if (i >= current_state.ga_len ) ++ return -1; ++ return CUR_STATE(i).si_id; ++ } ++ #endif + + #if defined(FEAT_FOLDING) || defined(PROTO) + /* +*** ../vim-7.1.214/src/version.c Wed Jan 9 22:39:55 2008 +--- src/version.c Thu Jan 10 22:17:38 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 215, + /**/ + +-- +TALL KNIGHT: We are now no longer the Knights Who Say Ni! +ONE KNIGHT: Ni! +OTHERS: Sh! +ONE KNIGHT: (whispers) Sorry. + "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.1.216 b/7.1.216 new file mode 100644 index 00000000..392d5d56 --- /dev/null +++ b/7.1.216 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.216 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.216 +Problem: Variants of --remote-tab are not mentioned for "vim --help". +Solution: Display optional -wait and -silent. +Files: src/main.c + + +*** ../vim-7.1.215/src/main.c Tue Sep 25 17:54:41 2007 +--- src/main.c Sun Dec 30 15:09:11 2007 +*************** +*** 3081,3087 **** + main_msg(_("--remote-wait As --remote but wait for files to have been edited")); + main_msg(_("--remote-wait-silent Same, don't complain if there is no server")); + # ifdef FEAT_WINDOWS +! main_msg(_("--remote-tab As --remote but open tab page for each file")); + # endif + main_msg(_("--remote-send \tSend to a Vim server and exit")); + main_msg(_("--remote-expr \tEvaluate in a Vim server and print result")); +--- 3081,3087 ---- + main_msg(_("--remote-wait As --remote but wait for files to have been edited")); + main_msg(_("--remote-wait-silent Same, don't complain if there is no server")); + # ifdef FEAT_WINDOWS +! main_msg(_("--remote-tab[-wait][-silent] As --remote but use tab page per file")); + # endif + main_msg(_("--remote-send \tSend to a Vim server and exit")); + main_msg(_("--remote-expr \tEvaluate in a Vim server and print result")); +*** ../vim-7.1.215/src/version.c Thu Jan 10 22:23:22 2008 +--- src/version.c Fri Jan 11 20:25:14 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 216, + /**/ + +-- +TIM: But follow only if you are men of valour. For the entrance to this cave + is guarded by a monster, a creature so foul and cruel that no man yet has + fought with it and lived. Bones of full fifty men lie strewn about its + lair ... + "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.1.217 b/7.1.217 new file mode 100644 index 00000000..de40e64c --- /dev/null +++ b/7.1.217 @@ -0,0 +1,228 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.217 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.217 +Problem: The "help-tags" tag may be missing from runtime/doc/tags when it + was generated during "make install". +Solution: Add the "++t" argument to ":helptags" to force adding the tag. +Files: runtime/doc/Makefile, runtime/doc/various.txt, src/ex_cmds.c, + src/ex_cmds.h + + +*** ../vim-7.1.216/runtime/doc/Makefile Sat May 5 19:14:15 2007 +--- runtime/doc/Makefile Fri Jan 11 20:55:34 2008 +*************** +*** 301,307 **** + # Use Vim to generate the tags file. Can only be used when Vim has been + # compiled and installed. Supports multiple languages. + vimtags: $(DOCS) +! $(VIMEXE) -u NONE -esX -c "helptags ." -c quit + + # Use "doctags" to generate the tags file. Only works for English! + tags: doctags $(DOCS) +--- 301,307 ---- + # Use Vim to generate the tags file. Can only be used when Vim has been + # compiled and installed. Supports multiple languages. + vimtags: $(DOCS) +! $(VIMEXE) -u NONE -esX -c "helptags ++t ." -c quit + + # Use "doctags" to generate the tags file. Only works for English! + tags: doctags $(DOCS) +*** ../vim-7.1.216/runtime/doc/various.txt Sat May 12 17:05:26 2007 +--- runtime/doc/various.txt Fri Jan 11 20:45:45 2008 +*************** +*** 1,4 **** +! *various.txt* For Vim version 7.1. Last change: 2007 Jan 14 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *various.txt* For Vim version 7.1. Last change: 2008 Jan 11 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 748,754 **** + + *:helpt* *:helptags* + *E154* *E150* *E151* *E152* *E153* *E670* +! :helpt[ags] {dir} Generate the help tags file(s) for directory {dir}. + All "*.txt" and "*.??x" files in the directory are + scanned for a help tag definition in between stars. + The "*.??x" files are for translated docs, they +--- 754,761 ---- + + *:helpt* *:helptags* + *E154* *E150* *E151* *E152* *E153* *E670* +! :helpt[ags] [++t] {dir} +! Generate the help tags file(s) for directory {dir}. + All "*.txt" and "*.??x" files in the directory are + scanned for a help tag definition in between stars. + The "*.??x" files are for translated docs, they +*************** +*** 756,761 **** +--- 763,771 ---- + The generated tags files are sorted. + When there are duplicates an error message is given. + An existing tags file is silently overwritten. ++ The optional "++t" argument forces adding the ++ "help-tags" tag. This is also done when the {dir} is ++ equal to $VIMRUNTIME/doc. + To rebuild the help tags in the runtime directory + (requires write permission there): > + :helptags $VIMRUNTIME/doc +*** ../vim-7.1.216/src/ex_cmds.c Wed Jan 9 22:39:55 2008 +--- src/ex_cmds.c Fri Jan 11 20:47:13 2008 +*************** +*** 6091,6097 **** + } + + #if defined(FEAT_EX_EXTRA) || defined(PROTO) +! static void helptags_one __ARGS((char_u *dir, char_u *ext, char_u *lang)); + + /* + * ":helptags" +--- 6091,6097 ---- + } + + #if defined(FEAT_EX_EXTRA) || defined(PROTO) +! static void helptags_one __ARGS((char_u *dir, char_u *ext, char_u *lang, int add_help_tags)); + + /* + * ":helptags" +*************** +*** 6110,6115 **** +--- 6110,6123 ---- + char_u fname[8]; + int filecount; + char_u **files; ++ int add_help_tags = FALSE; ++ ++ /* Check for ":helptags ++t {dir}". */ ++ if (STRNCMP(eap->arg, "++t", 3) == 0 && vim_iswhite(eap->arg[3])) ++ { ++ add_help_tags = TRUE; ++ eap->arg = skipwhite(eap->arg + 3); ++ } + + if (!mch_isdir(eap->arg)) + { +*************** +*** 6192,6198 **** + ext[1] = fname[5]; + ext[2] = fname[6]; + } +! helptags_one(eap->arg, ext, fname); + } + + ga_clear(&ga); +--- 6200,6206 ---- + ext[1] = fname[5]; + ext[2] = fname[6]; + } +! helptags_one(eap->arg, ext, fname, add_help_tags); + } + + ga_clear(&ga); +*************** +*** 6200,6214 **** + + #else + /* No language support, just use "*.txt" and "tags". */ +! helptags_one(eap->arg, (char_u *)".txt", (char_u *)"tags"); + #endif + } + + static void +! helptags_one(dir, ext, tagfname) +! char_u *dir; /* doc directory */ +! char_u *ext; /* suffix, ".txt", ".itx", ".frx", etc. */ +! char_u *tagfname; /* "tags" for English, "tags-it" for Italian. */ + { + FILE *fd_tags; + FILE *fd; +--- 6208,6223 ---- + + #else + /* No language support, just use "*.txt" and "tags". */ +! helptags_one(eap->arg, (char_u *)".txt", (char_u *)"tags", add_help_tags); + #endif + } + + static void +! helptags_one(dir, ext, tagfname, add_help_tags) +! char_u *dir; /* doc directory */ +! char_u *ext; /* suffix, ".txt", ".itx", ".frx", etc. */ +! char_u *tagfname; /* "tags" for English, "tags-fr" for French. */ +! int add_help_tags; /* add "help-tags" tag */ + { + FILE *fd_tags; + FILE *fd; +*************** +*** 6259,6268 **** + } + + /* +! * If generating tags for "$VIMRUNTIME/doc" add the "help-tags" tag. + */ + ga_init2(&ga, (int)sizeof(char_u *), 100); +! if (fullpathcmp((char_u *)"$VIMRUNTIME/doc", dir, FALSE) == FPC_SAME) + { + if (ga_grow(&ga, 1) == FAIL) + got_int = TRUE; +--- 6268,6279 ---- + } + + /* +! * If using the "++t" argument or generating tags for "$VIMRUNTIME/doc" +! * add the "help-tags" tag. + */ + ga_init2(&ga, (int)sizeof(char_u *), 100); +! if (add_help_tags || fullpathcmp((char_u *)"$VIMRUNTIME/doc", +! dir, FALSE) == FPC_SAME) + { + if (ga_grow(&ga, 1) == FAIL) + got_int = TRUE; +*** ../vim-7.1.216/src/ex_cmds.h Thu Mar 8 11:00:55 2007 +--- src/ex_cmds.h Fri Jan 11 20:49:18 2008 +*************** +*** 422,428 **** + EX(CMD_helpgrep, "helpgrep", ex_helpgrep, + EXTRA|NOTRLCOM|NEEDARG), + EX(CMD_helptags, "helptags", ex_helptags, +! NEEDARG|FILE1|TRLBAR|CMDWIN), + EX(CMD_hardcopy, "hardcopy", ex_hardcopy, + RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG), + EX(CMD_highlight, "highlight", ex_highlight, +--- 422,428 ---- + EX(CMD_helpgrep, "helpgrep", ex_helpgrep, + EXTRA|NOTRLCOM|NEEDARG), + EX(CMD_helptags, "helptags", ex_helptags, +! NEEDARG|FILES|TRLBAR|CMDWIN), + EX(CMD_hardcopy, "hardcopy", ex_hardcopy, + RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG), + EX(CMD_highlight, "highlight", ex_highlight, +*** ../vim-7.1.216/src/version.c Fri Jan 11 20:25:42 2008 +--- src/version.c Fri Jan 11 20:58:44 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 217, + /**/ + +-- +My girlfriend told me I should be more affectionate. +So I got TWO girlfriends. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.218 b/7.1.218 new file mode 100644 index 00000000..859f0b72 --- /dev/null +++ b/7.1.218 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.218 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.218 +Problem: A syntax region without a "keepend", containing a region with + "extend" could be truncated at the end of the containing region. +Solution: Do not call syn_update_ends() when there are no keepend items. +Files: src/syntax.c + + +*** ../vim-7.1.217/src/syntax.c Thu Jan 10 22:23:22 2008 +--- src/syntax.c Wed Jan 9 15:17:47 2008 +*************** +*** 2495,2501 **** + if (current_state.ga_len == 0) + break; + +! if (had_extend) + { + syn_update_ends(FALSE); + if (current_state.ga_len == 0) +--- 2493,2499 ---- + if (current_state.ga_len == 0) + break; + +! if (had_extend && keepend_level >= 0) + { + syn_update_ends(FALSE); + if (current_state.ga_len == 0) +*** ../vim-7.1.217/src/version.c Fri Jan 11 21:00:49 2008 +--- src/version.c Fri Jan 11 21:25:46 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 218, + /**/ + +-- +The Law of VIM: +For each member b of the possible behaviour space B of program P, there exists +a finite time t before which at least one user u in the total user space U of +program P will request b becomes a member of the allowed behaviour space B' +(B' <= B). +In other words: Sooner or later everyone wants everything as an option. + -- Vince Negri + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.219 b/7.1.219 new file mode 100644 index 00000000..68e4cfa2 --- /dev/null +++ b/7.1.219 @@ -0,0 +1,378 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.219 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.219 (after 7.1.215) +Problem: synstack() returns situation after the current character, can't + see the state for a one-character region. +Solution: Don't update ending states in the requested column. +Files: runtime/doc/eval.txt, src/eval.c, src/hardcopy.c, + src/proto/syntax.pro, src/screen.c, src/spell.c, src/syntax.c + + +*** ../vim-7.1.218/runtime/doc/eval.txt Thu Jan 10 22:23:22 2008 +--- runtime/doc/eval.txt Fri Jan 11 22:04:59 2008 +*************** +*** 1,4 **** +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 10 + + + VIM REFERENCE MANUAL by Bram Moolenaar +--- 1,4 ---- +! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 11 + + + VIM REFERENCE MANUAL by Bram Moolenaar +*************** +*** 4967,4976 **** + Return a |List|, which is the stack of syntax items at the + position {lnum} and {col} in the current window. Each item in + the List is an ID like what |synID()| returns. +- The stack is the situation in between the character at "col" +- and the next character. Note that a region of only one +- character will not show up, it only exists inside that +- character, not in between characters. + The first item in the List is the outer region, following are + items contained in that one. The last one is what |synID()| + returns, unless not the whole item is highlighted or it is a +--- 4970,4975 ---- +*** ../vim-7.1.218/src/eval.c Thu Jan 10 22:23:22 2008 +--- src/eval.c Fri Jan 11 21:46:12 2008 +*************** +*** 15725,15731 **** + + if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count + && col >= 0 && col < (long)STRLEN(ml_get(lnum))) +! id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL); + #endif + + rettv->vval.v_number = id; +--- 15725,15731 ---- + + if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count + && col >= 0 && col < (long)STRLEN(ml_get(lnum))) +! id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL, FALSE); + #endif + + rettv->vval.v_number = id; +*************** +*** 15874,15880 **** + && col >= 0 && col < (long)STRLEN(ml_get(lnum)) + && rettv_list_alloc(rettv) != FAIL) + { +! (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL); + for (i = 0; ; ++i) + { + id = syn_get_stack_item(i); +--- 15874,15880 ---- + && 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); + for (i = 0; ; ++i) + { + id = syn_get_stack_item(i); +*** ../vim-7.1.218/src/hardcopy.c Thu May 10 20:40:02 2007 +--- src/hardcopy.c Fri Jan 11 21:46:20 2008 +*************** +*** 876,882 **** + */ + if (psettings->do_syntax) + { +! id = syn_get_id(curwin, ppos->file_line, col, 1, NULL); + if (id > 0) + id = syn_get_final_id(id); + else +--- 876,882 ---- + */ + if (psettings->do_syntax) + { +! id = syn_get_id(curwin, ppos->file_line, col, 1, NULL, FALSE); + if (id > 0) + id = syn_get_final_id(id); + else +*** ../vim-7.1.218/src/proto/syntax.pro Thu Jan 10 22:23:22 2008 +--- src/proto/syntax.pro Fri Jan 11 21:54:19 2008 +*************** +*** 4,10 **** + void syn_stack_apply_changes __ARGS((buf_T *buf)); + void syntax_end_parsing __ARGS((linenr_T lnum)); + int syntax_check_changed __ARGS((linenr_T lnum)); +! int get_syntax_attr __ARGS((colnr_T col, int *can_spell)); + void syntax_clear __ARGS((buf_T *buf)); + void ex_syntax __ARGS((exarg_T *eap)); + int syntax_present __ARGS((buf_T *buf)); +--- 4,10 ---- + void syn_stack_apply_changes __ARGS((buf_T *buf)); + void syntax_end_parsing __ARGS((linenr_T lnum)); + int syntax_check_changed __ARGS((linenr_T lnum)); +! int get_syntax_attr __ARGS((colnr_T col, int *can_spell, int keep_state)); + void syntax_clear __ARGS((buf_T *buf)); + void ex_syntax __ARGS((exarg_T *eap)); + int syntax_present __ARGS((buf_T *buf)); +*************** +*** 12,18 **** + void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg)); + void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg)); + char_u *get_syntax_name __ARGS((expand_T *xp, int idx)); +! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp)); + int syn_get_stack_item __ARGS((int i)); + int syn_get_foldlevel __ARGS((win_T *wp, long lnum)); + void init_highlight __ARGS((int both, int reset)); +--- 12,18 ---- + void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg)); + void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg)); + char_u *get_syntax_name __ARGS((expand_T *xp, int idx)); +! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp, int keep_state)); + int syn_get_stack_item __ARGS((int i)); + int syn_get_foldlevel __ARGS((win_T *wp, long lnum)); + void init_highlight __ARGS((int both, int reset)); +*** ../vim-7.1.218/src/screen.c Thu Nov 8 21:23:34 2007 +--- src/screen.c Fri Jan 11 21:48:10 2008 +*************** +*** 3885,3891 **** + # ifdef FEAT_SPELL + has_spell ? &can_spell : + # endif +! NULL); + + if (did_emsg) + { +--- 3885,3891 ---- + # ifdef FEAT_SPELL + has_spell ? &can_spell : + # endif +! NULL, FALSE); + + if (did_emsg) + { +*** ../vim-7.1.218/src/spell.c Sun Aug 5 18:32:21 2007 +--- src/spell.c Fri Jan 11 21:46:50 2008 +*************** +*** 2146,2152 **** + { + col = (int)(p - buf); + (void)syn_get_id(wp, lnum, (colnr_T)col, +! FALSE, &can_spell); + if (!can_spell) + attr = HLF_COUNT; + } +--- 2146,2152 ---- + { + col = (int)(p - buf); + (void)syn_get_id(wp, lnum, (colnr_T)col, +! FALSE, &can_spell, FALSE); + if (!can_spell) + attr = HLF_COUNT; + } +*** ../vim-7.1.218/src/syntax.c Fri Jan 11 21:26:49 2008 +--- src/syntax.c Sat Jan 12 16:42:25 2008 +*************** +*** 378,384 **** + static int syn_stack_equal __ARGS((synstate_T *sp)); + static void validate_current_state __ARGS((void)); + static int syn_finish_line __ARGS((int syncing)); +! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell)); + static int did_match_already __ARGS((int idx, garray_T *gap)); + static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si)); + static void check_state_ends __ARGS((void)); +--- 378,384 ---- + static int syn_stack_equal __ARGS((synstate_T *sp)); + static void validate_current_state __ARGS((void)); + static int syn_finish_line __ARGS((int syncing)); +! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell, int keep_state)); + static int did_match_already __ARGS((int idx, garray_T *gap)); + static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si)); + static void check_state_ends __ARGS((void)); +*************** +*** 1691,1697 **** + { + while (!current_finished) + { +! (void)syn_current_attr(syncing, FALSE, NULL); + /* + * When syncing, and found some item, need to check the item. + */ +--- 1690,1696 ---- + { + while (!current_finished) + { +! (void)syn_current_attr(syncing, FALSE, NULL, FALSE); + /* + * When syncing, and found some item, need to check the item. + */ +*************** +*** 1731,1739 **** + * done. + */ + int +! get_syntax_attr(col, can_spell) + colnr_T col; + int *can_spell; + { + int attr = 0; + +--- 1730,1739 ---- + * done. + */ + int +! get_syntax_attr(col, can_spell, keep_state) + colnr_T col; + int *can_spell; ++ int keep_state; /* keep state of char at "col" */ + { + int attr = 0; + +*************** +*** 1768,1774 **** + */ + while (current_col <= col) + { +! attr = syn_current_attr(FALSE, TRUE, can_spell); + ++current_col; + } + +--- 1768,1775 ---- + */ + while (current_col <= col) + { +! attr = syn_current_attr(FALSE, TRUE, can_spell, +! current_col == col ? keep_state : FALSE); + ++current_col; + } + +*************** +*** 1779,1788 **** + * Get syntax attributes for current_lnum, current_col. + */ + static int +! syn_current_attr(syncing, displaying, can_spell) + int syncing; /* When 1: called for syncing */ + int displaying; /* result will be displayed */ + int *can_spell; /* return: do spell checking */ + { + int syn_id; + lpos_T endpos; /* was: char_u *endp; */ +--- 1780,1790 ---- + * Get syntax attributes for current_lnum, current_col. + */ + static int +! syn_current_attr(syncing, displaying, can_spell, keep_state) + int syncing; /* When 1: called for syncing */ + int displaying; /* result will be displayed */ + int *can_spell; /* return: do spell checking */ ++ int keep_state; /* keep syntax stack afterwards */ + { + int syn_id; + lpos_T endpos; /* was: char_u *endp; */ +*************** +*** 2298,2304 **** + * may be for an empty match and a containing item might end in the + * current column. + */ +! if (!syncing) + { + check_state_ends(); + if (current_state.ga_len > 0 +--- 2300,2306 ---- + * may be for an empty match and a containing item might end in the + * current column. + */ +! if (!syncing && !keep_state) + { + check_state_ends(); + if (current_state.ga_len > 0 +*************** +*** 6086,6097 **** + * Function called for expression evaluation: get syntax ID at file position. + */ + int +! syn_get_id(wp, lnum, col, trans, spellp) + win_T *wp; + long lnum; + colnr_T col; +! int trans; /* remove transparancy */ +! int *spellp; /* return: can do spell checking */ + { + /* When the position is not after the current position and in the same + * line of the same buffer, need to restart parsing. */ +--- 6088,6100 ---- + * Function called for expression evaluation: get syntax ID at file position. + */ + int +! syn_get_id(wp, lnum, col, trans, spellp, keep_state) + win_T *wp; + long lnum; + colnr_T col; +! int trans; /* remove transparancy */ +! int *spellp; /* return: can do spell checking */ +! int keep_state; /* keep state of char at "col" */ + { + /* When the position is not after the current position and in the same + * line of the same buffer, need to restart parsing. */ +*************** +*** 6100,6106 **** + || col < current_col) + syntax_start(wp, lnum); + +! (void)get_syntax_attr(col, spellp); + + return (trans ? current_trans_id : current_id); + } +--- 6103,6109 ---- + || col < current_col) + syntax_start(wp, lnum); + +! (void)get_syntax_attr(col, spellp, keep_state); + + return (trans ? current_trans_id : current_id); + } +*************** +*** 6115,6122 **** + syn_get_stack_item(i) + int i; + { +! if (i >= current_state.ga_len ) + return -1; + return CUR_STATE(i).si_id; + } + #endif +--- 6118,6131 ---- + syn_get_stack_item(i) + int i; + { +! if (i >= current_state.ga_len) +! { +! /* Need to invalidate the state, because we didn't properly finish it +! * for the last character, "keep_state" was TRUE. */ +! invalidate_current_state(); +! current_col = MAXCOL; + return -1; ++ } + return CUR_STATE(i).si_id; + } + #endif +*** ../vim-7.1.218/src/version.c Fri Jan 11 21:26:49 2008 +--- src/version.c Sat Jan 12 16:40:47 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 219, + /**/ + +-- +ARTHUR: Go on, Bors, chop its head off. +BORS: Right. Silly little bleeder. One rabbit stew coming up. + "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.1.220 b/7.1.220 new file mode 100644 index 00000000..1ba8f040 --- /dev/null +++ b/7.1.220 @@ -0,0 +1,136 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.220 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.220 +Problem: When a ")" or word movement command moves the cursor back from the + end of the line it may end up on the trail byte of a multi-byte + character. It's also moved back when it isn't needed. +Solution: Add the adjust_cursor() function. +Files: src/normal.c + + +*** ../vim-7.1.219/src/normal.c Sun Jan 6 20:05:36 2008 +--- src/normal.c Sat Jan 12 17:10:14 2008 +*************** +*** 150,155 **** +--- 150,156 ---- + static void nv_bck_word __ARGS((cmdarg_T *cap)); + static void nv_wordcmd __ARGS((cmdarg_T *cap)); + static void nv_beginline __ARGS((cmdarg_T *cap)); ++ static void adjust_cursor __ARGS((oparg_T *oap)); + #ifdef FEAT_VISUAL + static void adjust_for_sel __ARGS((cmdarg_T *cap)); + static int unadjust_for_sel __ARGS((void)); +*************** +*** 6567,6578 **** + clearopbeep(cap->oap); + else + { +! /* Don't leave the cursor on the NUL past a line */ +! if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL) +! { +! --curwin->w_cursor.col; +! cap->oap->inclusive = TRUE; +! } + #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; + #endif +--- 6568,6575 ---- + clearopbeep(cap->oap); + else + { +! /* Don't leave the cursor on the NUL past end of line. */ +! adjust_cursor(cap->oap); + #ifdef FEAT_VIRTUALEDIT + curwin->w_cursor.coladd = 0; + #endif +*************** +*** 8408,8419 **** + else + n = fwd_word(cap->count1, cap->arg, cap->oap->op_type != OP_NOP); + +! /* Don't leave the cursor on the NUL past a line */ +! if (n != FAIL && curwin->w_cursor.col > 0 && gchar_cursor() == NUL) +! { +! --curwin->w_cursor.col; +! cap->oap->inclusive = TRUE; +! } + + if (n == FAIL && cap->oap->op_type == OP_NOP) + clearopbeep(cap->oap); +--- 8405,8413 ---- + else + n = fwd_word(cap->count1, cap->arg, cap->oap->op_type != OP_NOP); + +! /* Don't leave the cursor on the NUL past the end of line. */ +! if (n != FAIL) +! adjust_cursor(cap->oap); + + if (n == FAIL && cap->oap->op_type == OP_NOP) + clearopbeep(cap->oap); +*************** +*** 8426,8431 **** +--- 8420,8458 ---- + if ((fdo_flags & FDO_HOR) && KeyTyped && cap->oap->op_type == OP_NOP) + foldOpenCursor(); + #endif ++ } ++ } ++ ++ /* ++ * Used after a movement command: If the cursor ends up on the NUL after the ++ * end of the line, may move it back to the last character and make the motion ++ * inclusive. ++ */ ++ static void ++ adjust_cursor(oap) ++ oparg_T *oap; ++ { ++ /* The cursor cannot remain on the NUL when: ++ * - the column is > 0 ++ * - not in Visual mode or 'selection' is "o" ++ * - 'virtualedit' is not "all" and not "onemore". ++ */ ++ if (curwin->w_cursor.col > 0 && gchar_cursor() == NUL ++ #ifdef FEAT_VISUAL ++ && (!VIsual_active || *p_sel == 'o') ++ #endif ++ #ifdef FEAT_VIRTUALEDIT ++ && !virtual_active() && (ve_flags & VE_ONEMORE) == 0 ++ #endif ++ ) ++ { ++ --curwin->w_cursor.col; ++ #ifdef FEAT_MBYTE ++ /* prevent cursor from moving on the trail byte */ ++ if (has_mbyte) ++ mb_adjust_cursor(); ++ #endif ++ oap->inclusive = TRUE; + } + } + +*** ../vim-7.1.219/src/version.c Sat Jan 12 16:45:25 2008 +--- src/version.c Sat Jan 12 17:07:28 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 220, + /**/ + +-- +A hamburger walks into a bar, and the bartender says: "I'm sorry, +but we don't serve food here." + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.221 b/7.1.221 new file mode 100644 index 00000000..14fc9473 --- /dev/null +++ b/7.1.221 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.221 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.221 +Problem: When inserting a "(", triggering the matchparen plugin, the + following highlighting may be messed up. +Solution: Before triggering the CursorMovedI autocommands update the display + to update the stored syntax stacks for the change. +Files: src/edit.c + + +*** ../vim-7.1.220/src/edit.c Wed Jan 9 10:13:24 2008 +--- src/edit.c Sat Jan 12 16:07:41 2008 +*************** +*** 1455,1460 **** +--- 1455,1468 ---- + # endif + ) + { ++ # ifdef FEAT_SYN_HL ++ /* Need to update the screen first, to make sure syntax ++ * highlighting is correct after making a change (e.g., inserting ++ * a "(". The autocommand may also require a redraw, so it's done ++ * again below, unfortunately. */ ++ if (syntax_present(curbuf) && must_redraw) ++ update_screen(0); ++ # endif + apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf); + last_cursormoved = curwin->w_cursor; + } +*** ../vim-7.1.220/src/version.c Sat Jan 12 17:11:25 2008 +--- src/version.c Sat Jan 12 18:11:22 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 221, + /**/ + +-- +ROBIN: The what? +ARTHUR: The Holy Hand Grenade of Antioch. 'Tis one of the sacred relics + Brother Maynard always carries with him. +ALL: Yes. Of course. +ARTHUR: (shouting) Bring up the Holy Hand Grenade! + "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.1.222 b/7.1.222 new file mode 100644 index 00000000..f092e76b --- /dev/null +++ b/7.1.222 @@ -0,0 +1,135 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.222 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.222 (after 7.1.217) +Problem: Wildcards in argument of ":helptags" are not expanded. (Marcel + Svitalsky) +Solution: Expand wildcards in the directory name. +Files: src/ex_cmds.c + + +*** ../vim-7.1.221/src/ex_cmds.c Fri Jan 11 21:00:49 2008 +--- src/ex_cmds.c Sat Jan 12 21:40:51 2008 +*************** +*** 6106,6111 **** +--- 6106,6113 ---- + #ifdef FEAT_MULTI_LANG + char_u lang[2]; + #endif ++ expand_T xpc; ++ char_u *dirname; + char_u ext[5]; + char_u fname[8]; + int filecount; +*************** +*** 6119,6125 **** + eap->arg = skipwhite(eap->arg + 3); + } + +! if (!mch_isdir(eap->arg)) + { + EMSG2(_("E150: Not a directory: %s"), eap->arg); + return; +--- 6121,6131 ---- + eap->arg = skipwhite(eap->arg + 3); + } + +! ExpandInit(&xpc); +! xpc.xp_context = EXPAND_DIRECTORIES; +! dirname = ExpandOne(&xpc, eap->arg, NULL, +! WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE); +! if (dirname == NULL || !mch_isdir(dirname)) + { + EMSG2(_("E150: Not a directory: %s"), eap->arg); + return; +*************** +*** 6127,6133 **** + + #ifdef FEAT_MULTI_LANG + /* Get a list of all files in the directory. */ +! STRCPY(NameBuff, eap->arg); + add_pathsep(NameBuff); + STRCAT(NameBuff, "*"); + if (gen_expand_wildcards(1, &NameBuff, &filecount, &files, +--- 6133,6139 ---- + + #ifdef FEAT_MULTI_LANG + /* Get a list of all files in the directory. */ +! STRCPY(NameBuff, dirname); + add_pathsep(NameBuff); + STRCAT(NameBuff, "*"); + if (gen_expand_wildcards(1, &NameBuff, &filecount, &files, +*************** +*** 6135,6140 **** +--- 6141,6147 ---- + || filecount == 0) + { + EMSG2("E151: No match: %s", NameBuff); ++ vim_free(dirname); + return; + } + +*************** +*** 6200,6206 **** + ext[1] = fname[5]; + ext[2] = fname[6]; + } +! helptags_one(eap->arg, ext, fname, add_help_tags); + } + + ga_clear(&ga); +--- 6207,6213 ---- + ext[1] = fname[5]; + ext[2] = fname[6]; + } +! helptags_one(dirname, ext, fname, add_help_tags); + } + + ga_clear(&ga); +*************** +*** 6208,6215 **** + + #else + /* No language support, just use "*.txt" and "tags". */ +! helptags_one(eap->arg, (char_u *)".txt", (char_u *)"tags", add_help_tags); + #endif + } + + static void +--- 6215,6223 ---- + + #else + /* No language support, just use "*.txt" and "tags". */ +! helptags_one(dirname, (char_u *)".txt", (char_u *)"tags", add_help_tags); + #endif ++ vim_free(dirname); + } + + static void +*** ../vim-7.1.221/src/version.c Sat Jan 12 18:13:05 2008 +--- src/version.c Sun Jan 13 13:27:04 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 222, + /**/ + +-- + Arthur pulls Pin out. The MONK blesses the grenade as ... +ARTHUR: (quietly) One, two, five ... +GALAHAD: Three, sir! +ARTHUR: Three. + "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.1.223 b/7.1.223 new file mode 100644 index 00000000..0fbfb584 --- /dev/null +++ b/7.1.223 @@ -0,0 +1,263 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.223 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.223 +Problem: glob() doesn't work properly when 'shell' is "sh" or "bash" and + the expanded name contains spaces, '~', single quotes and other + special characters. (Adri Verhoef, Charles Campbell) +Solution: For Posix shells define a vimglob() function to list the matches + instead of using "echo" directly. +Files: src/os_unix.c + + +*** ../vim-7.1.222/src/os_unix.c Thu Jan 3 18:55:21 2008 +--- src/os_unix.c Sun Jan 13 13:52:53 2008 +*************** +*** 4946,4951 **** +--- 4946,4954 ---- + char_u *p; + int dir; + #ifdef __EMX__ ++ /* ++ * This is the OS/2 implementation. ++ */ + # define EXPL_ALLOC_INC 16 + char_u **expl_files; + size_t files_alloced, files_free; +*************** +*** 5056,5075 **** + return OK; + + #else /* __EMX__ */ +! + int j; + char_u *tempname; + char_u *command; + FILE *fd; + char_u *buffer; +! #define STYLE_ECHO 0 /* use "echo" to expand */ +! #define STYLE_GLOB 1 /* use "glob" to expand, for csh */ +! #define STYLE_PRINT 2 /* use "print -N" to expand, for zsh */ +! #define STYLE_BT 3 /* `cmd` expansion, execute the pattern directly */ + int shell_style = STYLE_ECHO; + int check_spaces; + static int did_find_nul = FALSE; + int ampersent = FALSE; + + *num_file = 0; /* default: no files found */ + *file = NULL; +--- 5059,5084 ---- + return OK; + + #else /* __EMX__ */ +! /* +! * This is the non-OS/2 implementation (really Unix). +! */ + int j; + char_u *tempname; + char_u *command; + FILE *fd; + char_u *buffer; +! #define STYLE_ECHO 0 /* use "echo", the default */ +! #define STYLE_GLOB 1 /* use "glob", for csh */ +! #define STYLE_VIMGLOB 2 /* use "vimglob", for Posix sh */ +! #define STYLE_PRINT 3 /* use "print -N", for zsh */ +! #define STYLE_BT 4 /* `cmd` expansion, execute the pattern +! * directly */ + int shell_style = STYLE_ECHO; + int check_spaces; + static int did_find_nul = FALSE; + int ampersent = FALSE; ++ /* vimglob() function to define for Posix shell */ ++ static char *sh_vimglob_func = "vimglob() { while [ $# -ge 1 ]; do echo -n \"$1\"; echo; shift; done }; vimglob >"; + + *num_file = 0; /* default: no files found */ + *file = NULL; +*************** +*** 5107,5115 **** + + /* + * Let the shell expand the patterns and write the result into the temp +! * file. if expanding `cmd` execute it directly. +! * If we use csh, glob will work better than echo. +! * If we use zsh, print -N will work better than glob. + */ + if (num_pat == 1 && *pat[0] == '`' + && (len = STRLEN(pat[0])) > 2 +--- 5116,5132 ---- + + /* + * Let the shell expand the patterns and write the result into the temp +! * file. +! * STYLE_BT: NL separated +! * If expanding `cmd` execute it directly. +! * STYLE_GLOB: NUL separated +! * If we use *csh, "glob" will work better than "echo". +! * STYLE_PRINT: NL or NUL separated +! * If we use *zsh, "print -N" will work better than "glob". +! * STYLE_VIMGLOB: NL separated +! * If we use *sh*, we define "vimglob()". +! * STYLE_ECHO: space separated. +! * A shell we don't know, stay safe and use "echo". + */ + if (num_pat == 1 && *pat[0] == '`' + && (len = STRLEN(pat[0])) > 2 +*************** +*** 5122,5130 **** + else if (STRCMP(p_sh + len - 3, "zsh") == 0) + shell_style = STYLE_PRINT; + } +! +! /* "unset nonomatch; print -N >" plus two is 29 */ + len = STRLEN(tempname) + 29; + for (i = 0; i < num_pat; ++i) + { + /* Count the length of the patterns in the same way as they are put in +--- 5139,5155 ---- + else if (STRCMP(p_sh + len - 3, "zsh") == 0) + shell_style = STYLE_PRINT; + } +! if (shell_style == STYLE_ECHO && strstr((char *)gettail(p_sh), +! "sh") != NULL) +! shell_style = STYLE_VIMGLOB; +! +! /* Compute the length of the command. We need 2 extra bytes: for the +! * optional '&' and for the NUL. +! * Worst case: "unset nonomatch; print -N >" plus two is 29 */ + len = STRLEN(tempname) + 29; ++ if (shell_style == STYLE_VIMGLOB) ++ len += STRLEN(sh_vimglob_func); ++ + for (i = 0; i < num_pat; ++i) + { + /* Count the length of the patterns in the same way as they are put in +*************** +*** 5183,5192 **** +--- 5208,5221 ---- + STRCAT(command, "glob >"); + else if (shell_style == STYLE_PRINT) + STRCAT(command, "print -N >"); ++ else if (shell_style == STYLE_VIMGLOB) ++ STRCAT(command, sh_vimglob_func); + else + STRCAT(command, "echo >"); + } ++ + STRCAT(command, tempname); ++ + if (shell_style != STYLE_BT) + for (i = 0; i < num_pat; ++i) + { +*************** +*** 5232,5239 **** + if (flags & EW_SILENT) + show_shell_mess = FALSE; + if (ampersent) +! STRCAT(command, "&"); /* put the '&' back after the +! redirection */ + + /* + * Using zsh -G: If a pattern has no matches, it is just deleted from +--- 5261,5267 ---- + if (flags & EW_SILENT) + show_shell_mess = FALSE; + if (ampersent) +! STRCAT(command, "&"); /* put the '&' after the redirection */ + + /* + * Using zsh -G: If a pattern has no matches, it is just deleted from +*************** +*** 5265,5271 **** + show_shell_mess = TRUE; + vim_free(command); + +! if (i) /* mch_call_shell() failed */ + { + mch_remove(tempname); + vim_free(tempname); +--- 5293,5299 ---- + show_shell_mess = TRUE; + vim_free(command); + +! if (i != 0) /* mch_call_shell() failed */ + { + mch_remove(tempname); + vim_free(tempname); +*************** +*** 5336,5342 **** + } + vim_free(tempname); + +! #if defined(__CYGWIN__) || defined(__CYGWIN32__) + /* Translate into . Caution, buffer may contain NUL. */ + p = buffer; + for (i = 0; i < len; ++i) +--- 5364,5370 ---- + } + vim_free(tempname); + +! # if defined(__CYGWIN__) || defined(__CYGWIN32__) + /* Translate into . Caution, buffer may contain NUL. */ + p = buffer; + for (i = 0; i < len; ++i) +*************** +*** 5359,5365 **** + } + } + /* file names are separated with NL */ +! else if (shell_style == STYLE_BT) + { + buffer[len] = NUL; /* make sure the buffer ends in NUL */ + p = buffer; +--- 5387,5393 ---- + } + } + /* file names are separated with NL */ +! else if (shell_style == STYLE_BT || shell_style == STYLE_VIMGLOB) + { + buffer[len] = NUL; /* make sure the buffer ends in NUL */ + p = buffer; +*************** +*** 5438,5444 **** + { + (*file)[i] = p; + /* Space or NL separates */ +! if (shell_style == STYLE_ECHO || shell_style == STYLE_BT) + { + while (!(shell_style == STYLE_ECHO && *p == ' ') + && *p != '\n' && *p != NUL) +--- 5466,5473 ---- + { + (*file)[i] = p; + /* Space or NL separates */ +! if (shell_style == STYLE_ECHO || shell_style == STYLE_BT +! || shell_style == STYLE_VIMGLOB) + { + while (!(shell_style == STYLE_ECHO && *p == ' ') + && *p != '\n' && *p != NUL) +*** ../vim-7.1.222/src/version.c Sun Jan 13 13:30:34 2008 +--- src/version.c Sun Jan 13 13:45:04 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 223, + /**/ + +-- +User: I'm having problems with my text editor. +Help desk: Which editor are you using? +User: I don't know, but it's version VI (pronounced: 6). +Help desk: Oh, then you should upgrade to version VIM (pronounced: 994). + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.224 b/7.1.224 new file mode 100644 index 00000000..4e6c9d3d --- /dev/null +++ b/7.1.224 @@ -0,0 +1,73 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.224 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.224 +Problem: When using "vim -F -o file1 file2" only one window is + right-to-left. Same for "-H". (Ben Schmidt) +Solution: use set_option_value() to set 'rightleft'. +Files: src/main.c + + +*** ../vim-7.1.223/src/main.c Fri Jan 11 20:25:42 2008 +--- src/main.c Sun Jan 13 16:12:09 2008 +*************** +*** 1775,1781 **** + + case 'F': /* "-F" start in Farsi mode: rl + fkmap set */ + #ifdef FEAT_FKMAP +! curwin->w_p_rl = p_fkmap = TRUE; + #else + mch_errmsg(_(e_nofarsi)); + mch_exit(2); +--- 1775,1782 ---- + + case 'F': /* "-F" start in Farsi mode: rl + fkmap set */ + #ifdef FEAT_FKMAP +! p_fkmap = TRUE; +! set_option_value((char_u *)"rl", 1L, NULL, 0); + #else + mch_errmsg(_(e_nofarsi)); + mch_exit(2); +*************** +*** 1792,1798 **** + + case 'H': /* "-H" start in Hebrew mode: rl + hkmap set */ + #ifdef FEAT_RIGHTLEFT +! curwin->w_p_rl = p_hkmap = TRUE; + #else + mch_errmsg(_(e_nohebrew)); + mch_exit(2); +--- 1793,1800 ---- + + case 'H': /* "-H" start in Hebrew mode: rl + hkmap set */ + #ifdef FEAT_RIGHTLEFT +! p_hkmap = TRUE; +! set_option_value((char_u *)"rl", 1L, NULL, 0); + #else + mch_errmsg(_(e_nohebrew)); + mch_exit(2); +*** ../vim-7.1.223/src/version.c Sun Jan 13 13:53:30 2008 +--- src/version.c Sun Jan 13 16:15:49 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 224, + /**/ + +-- +LAUNCELOT: Isn't there a St. Aaaaarrrrrrggghhh's in Cornwall? +ARTHUR: No, that's Saint Ives. + "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.1.225 b/7.1.225 new file mode 100644 index 00000000..acce0c55 --- /dev/null +++ b/7.1.225 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.225 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.225 +Problem: Using unitialized value when XGetWMNormalHints() fails. +Solution: Check the return value. (Dominique Pelle) +Files: src/os_unix.c + + +*** ../vim-7.1.224/src/os_unix.c Sun Jan 13 13:53:30 2008 +--- src/os_unix.c Sun Jan 13 13:52:53 2008 +*************** +*** 6145,6153 **** + if (xterm_trace == 1) + { + /* Get the hints just before tracking starts. The font size might +! * have changed recently */ +! XGetWMNormalHints(xterm_dpy, x11_window, &xterm_hints, &got_hints); +! if (!(got_hints & PResizeInc) + || xterm_hints.width_inc <= 1 + || xterm_hints.height_inc <= 1) + { +--- 6145,6153 ---- + if (xterm_trace == 1) + { + /* Get the hints just before tracking starts. The font size might +! * have changed recently. */ +! if (!XGetWMNormalHints(xterm_dpy, x11_window, &xterm_hints, &got_hints) +! || !(got_hints & PResizeInc) + || xterm_hints.width_inc <= 1 + || xterm_hints.height_inc <= 1) + { +*** ../vim-7.1.224/src/version.c Sun Jan 13 16:17:02 2008 +--- src/version.c Sun Jan 13 16:29:51 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 225, + /**/ + +-- +"When I die, I want a tombstone that says "GAME OVER" - Ton Richters + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.226 b/7.1.226 new file mode 100644 index 00000000..eb3cb6b7 --- /dev/null +++ b/7.1.226 @@ -0,0 +1,68 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.226 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.226 +Problem: Command line completion doesn't work when a file name contains a + '&' character. +Solution: Accept all characters in a file name, except ones that end a + command or white space. +Files: src/ex_docmd.c + + +*** ../vim-7.1.225/src/ex_docmd.c Wed Jan 9 20:29:51 2008 +--- src/ex_docmd.c Wed Jan 9 20:11:13 2008 +*************** +*** 3338,3349 **** + } + in_quote = !in_quote; + } + #ifdef SPACE_IN_FILENAME +! else if (!vim_isfilec_or_wc(c) +! && (!(ea.argt & NOSPC) || usefilter)) +! #else +! else if (!vim_isfilec_or_wc(c)) + #endif + { + while (*p != NUL) + { +--- 3338,3350 ---- + } + in_quote = !in_quote; + } ++ /* An argument can contain just about everything, except ++ * characters that end the command and white space. */ ++ else if (c == '|' || c == '\n' || c == '"' || (vim_iswhite(c) + #ifdef SPACE_IN_FILENAME +! && (!(ea.argt & NOSPC) || usefilter) + #endif ++ )) + { + while (*p != NUL) + { +*** ../vim-7.1.225/src/version.c Sun Jan 13 16:30:23 2008 +--- src/version.c Sun Jan 13 17:10:15 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 226, + /**/ + +-- + [Another hideous roar.] +BEDEVERE: That's it! +ARTHUR: What? +BEDEVERE: It's The Legendary Black Beast of Aaaaarrrrrrggghhh! + "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.1.227 b/7.1.227 new file mode 100644 index 00000000..042c4498 --- /dev/null +++ b/7.1.227 @@ -0,0 +1,188 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.227 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.227 +Problem: Hang in syntax HL when moving over a ")". (Dominique Pelle) +Solution: Avoid storing a syntax state in the wrong position in the list of + remembered states. +Files: src/syntax.c + + +*** ../vim-7.1.226/src/syntax.c Sat Jan 12 16:45:25 2008 +--- src/syntax.c Sat Jan 12 16:45:44 2008 +*************** +*** 372,378 **** + static int syn_stack_cleanup __ARGS((void)); + static void syn_stack_free_entry __ARGS((buf_T *buf, synstate_T *p)); + static synstate_T *syn_stack_find_entry __ARGS((linenr_T lnum)); +! static synstate_T *store_current_state __ARGS((synstate_T *sp)); + static void load_current_state __ARGS((synstate_T *from)); + static void invalidate_current_state __ARGS((void)); + static int syn_stack_equal __ARGS((synstate_T *sp)); +--- 372,378 ---- + static int syn_stack_cleanup __ARGS((void)); + static void syn_stack_free_entry __ARGS((buf_T *buf, synstate_T *p)); + static synstate_T *syn_stack_find_entry __ARGS((linenr_T lnum)); +! static synstate_T *store_current_state __ARGS((void)); + static void load_current_state __ARGS((synstate_T *from)); + static void invalidate_current_state __ARGS((void)); + static int syn_stack_equal __ARGS((synstate_T *sp)); +*************** +*** 464,470 **** + synstate_T *p; + synstate_T *last_valid = NULL; + synstate_T *last_min_valid = NULL; +! synstate_T *sp, *prev; + linenr_T parsed_lnum; + linenr_T first_stored; + int dist; +--- 464,470 ---- + synstate_T *p; + synstate_T *last_valid = NULL; + synstate_T *last_min_valid = NULL; +! synstate_T *sp, *prev = NULL; + linenr_T parsed_lnum; + linenr_T first_stored; + int dist; +*************** +*** 502,508 **** + if (!current_state_stored) + { + ++current_lnum; +! (void)store_current_state(NULL); + } + + /* +--- 502,508 ---- + if (!current_state_stored) + { + ++current_lnum; +! (void)store_current_state(); + } + + /* +*************** +*** 558,564 **** + dist = 999999; + else + dist = syn_buf->b_ml.ml_line_count / (syn_buf->b_sst_len - Rows) + 1; +- prev = syn_stack_find_entry(current_lnum); + while (current_lnum < lnum) + { + syn_start_line(); +--- 558,563 ---- +*************** +*** 573,581 **** + * equal to the current state. If so, then validate all saved + * states that depended on a change before the parsed line. */ + if (prev == NULL) + sp = syn_buf->b_sst_first; + else +! sp = prev->sst_next; + if (sp != NULL + && sp->sst_lnum == current_lnum + && syn_stack_equal(sp)) +--- 572,584 ---- + * equal to the current state. If so, then validate all saved + * states that depended on a change before the parsed line. */ + if (prev == NULL) ++ prev = syn_stack_find_entry(current_lnum - 1); ++ if (prev == NULL) + sp = syn_buf->b_sst_first; + else +! sp = prev; +! while (sp != NULL && sp->sst_lnum < current_lnum) +! sp = sp->sst_next; + if (sp != NULL + && sp->sst_lnum == current_lnum + && syn_stack_equal(sp)) +*************** +*** 601,607 **** + else if (prev == NULL + || current_lnum == lnum + || current_lnum >= prev->sst_lnum + dist) +! prev = store_current_state(prev); + } + + /* This can take a long time: break when CTRL-C pressed. The current +--- 604,610 ---- + else if (prev == NULL + || current_lnum == lnum + || current_lnum >= prev->sst_lnum + dist) +! prev = store_current_state(); + } + + /* This can take a long time: break when CTRL-C pressed. The current +*************** +*** 1353,1369 **** + * The current state must be valid for the start of the current_lnum line! + */ + static synstate_T * +! store_current_state(sp) +! synstate_T *sp; /* at or before where state is to be saved or +! NULL */ + { + int i; + synstate_T *p; + bufstate_T *bp; + stateitem_T *cur_si; +! +! if (sp == NULL) +! sp = syn_stack_find_entry(current_lnum); + + /* + * If the current state contains a start or end pattern that continues +--- 1356,1368 ---- + * The current state must be valid for the start of the current_lnum line! + */ + static synstate_T * +! store_current_state() + { + int i; + synstate_T *p; + bufstate_T *bp; + stateitem_T *cur_si; +! synstate_T *sp = syn_stack_find_entry(current_lnum); + + /* + * If the current state contains a start or end pattern that continues +*************** +*** 1667,1673 **** + * Store the current state in b_sst_array[] for later use. + */ + ++current_lnum; +! (void)store_current_state(NULL); + } + } + +--- 1666,1672 ---- + * Store the current state in b_sst_array[] for later use. + */ + ++current_lnum; +! (void)store_current_state(); + } + } + +*** ../vim-7.1.226/src/version.c Sun Jan 13 17:11:25 2008 +--- src/version.c Sun Jan 13 17:37:10 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 227, + /**/ + +-- +Dreams are free, but there's a small charge for alterations. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.228 b/7.1.228 new file mode 100644 index 00000000..bab4dff5 --- /dev/null +++ b/7.1.228 @@ -0,0 +1,51 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.228 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.228 +Problem: When 'foldmethod' is "indent" and a fold is created with ">>" it + can't be closed with "zc". (Daniel Shahaf) +Solution: Reset the "small" flag of a fold when adding a line to it. +Files: src/fold.c + + +*** ../vim-7.1.227/src/fold.c Sun Oct 14 15:32:10 2007 +--- src/fold.c Sun Jan 13 21:26:48 2008 +*************** +*** 2676,2681 **** +--- 2676,2682 ---- + if (fp->fd_len < flp->lnum - fp->fd_top) + { + fp->fd_len = flp->lnum - fp->fd_top; ++ fp->fd_small = MAYBE; + fold_changed = TRUE; + } + +*** ../vim-7.1.227/src/version.c Sun Jan 13 17:39:29 2008 +--- src/version.c Sun Jan 13 21:56:53 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 228, + /**/ + +-- +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.1.229 b/7.1.229 new file mode 100644 index 00000000..c07e8e20 --- /dev/null +++ b/7.1.229 @@ -0,0 +1,55 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.229 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.229 +Problem: A fold is closed when it shouldn't when 'foldmethod' is "indent" + and backspacing a non-white character so that the indent increases. +Solution: Keep the fold open after backspacing a character. +Files: src/edit.c + + +*** ../vim-7.1.228/src/edit.c Sat Jan 12 18:13:05 2008 +--- src/edit.c Mon Jan 14 20:06:43 2008 +*************** +*** 8618,8623 **** +--- 8619,8632 ---- + if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0) + dollar_vcol = curwin->w_virtcol; + ++ #ifdef FEAT_FOLDING ++ /* When deleting a char the cursor line must never be in a closed fold. ++ * E.g., when 'foldmethod' is indent and deleting the first non-white ++ * char before a Tab. */ ++ if (did_backspace) ++ foldOpenCursor(); ++ #endif ++ + return did_backspace; + } + +*** ../vim-7.1.228/src/version.c Sun Jan 13 21:57:25 2008 +--- src/version.c Mon Jan 14 20:08:35 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 229, + /**/ + +-- +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.1.230 b/7.1.230 new file mode 100644 index 00000000..3cd72706 --- /dev/null +++ b/7.1.230 @@ -0,0 +1,64 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.230 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.230 +Problem: Memory leak when executing SourceCmd autocommands. +Solution: Free the memory. (Dominique Pelle) +Files: src/ex_cmds2.c + + +*** ../vim-7.1.229/src/ex_cmds2.c Sun Jan 6 20:05:36 2008 +--- src/ex_cmds2.c Tue Jan 15 20:41:28 2008 +*************** +*** 2889,2899 **** + if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL) + && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp, + FALSE, curbuf)) + # ifdef FEAT_EVAL +! return aborting() ? FAIL : OK; + # else +! return OK; + # endif + + /* Apply SourcePre autocommands, they may get the file. */ + apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf); +--- 2889,2902 ---- + if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL) + && apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp, + FALSE, curbuf)) ++ { + # ifdef FEAT_EVAL +! retval = aborting() ? FAIL : OK; + # else +! retval = OK; + # endif ++ goto theend; ++ } + + /* Apply SourcePre autocommands, they may get the file. */ + apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf); +*** ../vim-7.1.229/src/version.c Mon Jan 14 20:11:37 2008 +--- src/version.c Tue Jan 15 22:15:03 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 230, + /**/ + +-- +Citizens are not allowed to attend a movie house or theater nor ride in a +public streetcar within at least four hours after eating garlic. + [real standing law in Indiana, 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.1.231 b/7.1.231 new file mode 100644 index 00000000..e9c78859 --- /dev/null +++ b/7.1.231 @@ -0,0 +1,291 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.231 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.231 +Problem: When shifting lines the change is acted upon multiple times. +Solution: Don't have shift_line() call changed_bytes. +Files: src/edit.c, src/ops.c, src/proto/edit.pro, src/proto/ops.pro + + +*** ../vim-7.1.230/src/edit.c Mon Jan 14 20:11:37 2008 +--- src/edit.c Mon Jan 14 20:06:43 2008 +*************** +*** 1662,1672 **** + * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec). + */ + void +! change_indent(type, amount, round, replaced) + int type; + int amount; + int round; + int replaced; /* replaced character, put on replace stack */ + { + int vcol; + int last_vcol; +--- 1662,1673 ---- + * if round is TRUE, round the indent to 'shiftwidth' (only with _INC and _Dec). + */ + void +! change_indent(type, amount, round, replaced, call_changed_bytes) + int type; + int amount; + int round; + int replaced; /* replaced character, put on replace stack */ ++ int call_changed_bytes; /* call changed_bytes() */ + { + int vcol; + int last_vcol; +*************** +*** 1723,1729 **** + * Set the new indent. The cursor will be put on the first non-blank. + */ + if (type == INDENT_SET) +! (void)set_indent(amount, SIN_CHANGED); + else + { + #ifdef FEAT_VREPLACE +--- 1724,1730 ---- + * Set the new indent. The cursor will be put on the first non-blank. + */ + if (type == INDENT_SET) +! (void)set_indent(amount, call_changed_bytes ? SIN_CHANGED : 0); + else + { + #ifdef FEAT_VREPLACE +*************** +*** 1733,1739 **** + if (State & VREPLACE_FLAG) + State = INSERT; + #endif +! shift_line(type == INDENT_DEC, round, 1); + #ifdef FEAT_VREPLACE + State = save_State; + #endif +--- 1734,1740 ---- + if (State & VREPLACE_FLAG) + State = INSERT; + #endif +! shift_line(type == INDENT_DEC, round, 1, call_changed_bytes); + #ifdef FEAT_VREPLACE + State = save_State; + #endif +*************** +*** 5921,5927 **** + { + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +! change_indent(INDENT_SET, second_indent, FALSE, NUL); + else + #endif + (void)set_indent(second_indent, SIN_CHANGED); +--- 5922,5928 ---- + { + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +! change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE); + else + #endif + (void)set_indent(second_indent, SIN_CHANGED); +*************** +*** 7227,7233 **** + fixthisline(get_the_indent) + int (*get_the_indent) __ARGS((void)); + { +! change_indent(INDENT_SET, get_the_indent(), FALSE, 0); + if (linewhite(curwin->w_cursor.lnum)) + did_ai = TRUE; /* delete the indent if the line stays empty */ + } +--- 7228,7234 ---- + fixthisline(get_the_indent) + int (*get_the_indent) __ARGS((void)); + { +! change_indent(INDENT_SET, get_the_indent(), FALSE, 0, TRUE); + if (linewhite(curwin->w_cursor.lnum)) + did_ai = TRUE; /* delete the indent if the line stays empty */ + } +*************** +*** 8170,8179 **** + replace_pop_ins(); + if (lastc == '^') + old_indent = get_indent(); /* remember curr. indent */ +! change_indent(INDENT_SET, 0, TRUE, 0); + } + else +! change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0); + + if (did_ai && *skipwhite(ml_get_curline()) != NUL) + did_ai = FALSE; +--- 8171,8180 ---- + replace_pop_ins(); + if (lastc == '^') + old_indent = get_indent(); /* remember curr. indent */ +! change_indent(INDENT_SET, 0, TRUE, 0, TRUE); + } + else +! change_indent(c == Ctrl_D ? INDENT_DEC : INDENT_INC, 0, TRUE, 0, TRUE); + + if (did_ai && *skipwhite(ml_get_curline()) != NUL) + did_ai = FALSE; +*************** +*** 9633,9639 **** + curwin->w_cursor = old_pos; + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +! change_indent(INDENT_SET, i, FALSE, NUL); + else + #endif + (void)set_indent(i, SIN_CHANGED); +--- 9634,9640 ---- + curwin->w_cursor = old_pos; + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +! change_indent(INDENT_SET, i, FALSE, NUL, TRUE); + else + #endif + (void)set_indent(i, SIN_CHANGED); +*************** +*** 9662,9668 **** + curwin->w_cursor = old_pos; + } + if (temp) +! shift_line(TRUE, FALSE, 1); + } + } + +--- 9663,9669 ---- + curwin->w_cursor = old_pos; + } + if (temp) +! shift_line(TRUE, FALSE, 1, TRUE); + } + } + +*** ../vim-7.1.230/src/ops.c Thu Jan 3 16:31:17 2008 +--- src/ops.c Sun Jan 13 21:52:18 2008 +*************** +*** 258,264 **** + if (first_char != '#' || !preprocs_left()) + #endif + { +! shift_line(oap->op_type == OP_LSHIFT, p_sr, amount); + } + ++curwin->w_cursor.lnum; + } +--- 258,264 ---- + if (first_char != '#' || !preprocs_left()) + #endif + { +! shift_line(oap->op_type == OP_LSHIFT, p_sr, amount, FALSE); + } + ++curwin->w_cursor.lnum; + } +*************** +*** 321,330 **** + * leaves cursor on first blank in the line + */ + void +! shift_line(left, round, amount) + int left; + int round; + int amount; + { + int count; + int i, j; +--- 321,331 ---- + * leaves cursor on first blank in the line + */ + void +! shift_line(left, round, amount, call_changed_bytes) + int left; + int round; + int amount; ++ int call_changed_bytes; /* call changed_bytes() */ + { + int count; + int i, j; +*************** +*** 363,372 **** + /* Set new indent */ + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +! change_indent(INDENT_SET, count, FALSE, NUL); + else + #endif +! (void)set_indent(count, SIN_CHANGED); + } + + #if defined(FEAT_VISUALEXTRA) || defined(PROTO) +--- 364,373 ---- + /* Set new indent */ + #ifdef FEAT_VREPLACE + if (State & VREPLACE_FLAG) +! change_indent(INDENT_SET, count, FALSE, NUL, call_changed_bytes); + else + #endif +! (void)set_indent(count, call_changed_bytes ? SIN_CHANGED : 0); + } + + #if defined(FEAT_VISUALEXTRA) || defined(PROTO) +*** ../vim-7.1.230/src/proto/edit.pro Wed Jan 2 17:48:24 2008 +--- src/proto/edit.pro Sun Jan 13 21:52:27 2008 +*************** +*** 3,9 **** + void edit_putchar __ARGS((int c, int highlight)); + void edit_unputchar __ARGS((void)); + void display_dollar __ARGS((colnr_T col)); +! void change_indent __ARGS((int type, int amount, int round, int replaced)); + void truncate_spaces __ARGS((char_u *line)); + void backspace_until_column __ARGS((int col)); + int vim_is_ctrl_x_key __ARGS((int c)); +--- 3,9 ---- + void edit_putchar __ARGS((int c, int highlight)); + void edit_unputchar __ARGS((void)); + void display_dollar __ARGS((colnr_T col)); +! void change_indent __ARGS((int type, int amount, int round, int replaced, int call_changed_bytes)); + void truncate_spaces __ARGS((char_u *line)); + void backspace_until_column __ARGS((int col)); + int vim_is_ctrl_x_key __ARGS((int c)); +*** ../vim-7.1.230/src/proto/ops.pro Sun May 6 13:56:32 2007 +--- src/proto/ops.pro Sun Jan 13 21:52:30 2008 +*************** +*** 4,10 **** + int get_op_char __ARGS((int optype)); + int get_extra_op_char __ARGS((int optype)); + void op_shift __ARGS((oparg_T *oap, int curs_top, int amount)); +! void shift_line __ARGS((int left, int round, int amount)); + void op_reindent __ARGS((oparg_T *oap, int (*how)(void))); + int get_expr_register __ARGS((void)); + void set_expr_line __ARGS((char_u *new_line)); +--- 4,10 ---- + int get_op_char __ARGS((int optype)); + int get_extra_op_char __ARGS((int optype)); + void op_shift __ARGS((oparg_T *oap, int curs_top, int amount)); +! void shift_line __ARGS((int left, int round, int amount, int call_changed_bytes)); + void op_reindent __ARGS((oparg_T *oap, int (*how)(void))); + int get_expr_register __ARGS((void)); + void set_expr_line __ARGS((char_u *new_line)); +*** ../vim-7.1.230/src/version.c Tue Jan 15 22:16:36 2008 +--- src/version.c Wed Jan 16 19:58:25 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 231, + /**/ + +-- +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.1.232 b/7.1.232 new file mode 100644 index 00000000..092d6fa9 --- /dev/null +++ b/7.1.232 @@ -0,0 +1,70 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.232 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.232 (after 7.1.207 and 7.1.211) +Problem: Compiler warnings with MSVC. +Solution: Add type casts. (Mike Williams) +Files: src/ex_cmds2.c, src/netbeans.c + + +*** ../vim-7.1.231/src/ex_cmds2.c Tue Jan 15 22:16:36 2008 +--- src/ex_cmds2.c Tue Jan 15 20:41:28 2008 +*************** +*** 916,922 **** + + QueryPerformanceCounter(tm); + QueryPerformanceFrequency(&fr); +! tm->QuadPart += (double)msec / 1000.0 * (double)fr.QuadPart; + # else + long usec; + +--- 916,922 ---- + + QueryPerformanceCounter(tm); + QueryPerformanceFrequency(&fr); +! tm->QuadPart += (LONGLONG)((double)msec / 1000.0 * (double)fr.QuadPart); + # else + long usec; + +*** ../vim-7.1.231/src/netbeans.c Sat Jan 5 18:06:33 2008 +--- src/netbeans.c Mon Jan 14 21:11:02 2008 +*************** +*** 1217,1223 **** + + oldtext = ml_get(lnum); + oldlen = STRLEN(oldtext); +! if (first >= oldlen || oldlen == 0) /* just in case */ + return; + if (lastbyte >= oldlen) + lastbyte = oldlen - 1; +--- 1217,1223 ---- + + oldtext = ml_get(lnum); + oldlen = STRLEN(oldtext); +! if (first >= (colnr_T)oldlen || oldlen == 0) /* just in case */ + return; + if (lastbyte >= oldlen) + lastbyte = oldlen - 1; +*** ../vim-7.1.231/src/version.c Wed Jan 16 20:01:14 2008 +--- src/version.c Fri Jan 18 11:38:39 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 232, + /**/ + +-- +Why is "abbreviation" such a long word? + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.233 b/7.1.233 new file mode 100644 index 00000000..b2f07e3f --- /dev/null +++ b/7.1.233 @@ -0,0 +1,109 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.233 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.233 +Problem: Crash when doing Insert mode completion for a user defined + command. (Yegappan Lakshmanan) +Solution: Don't use the non-existing command line. +Files: src/ex_getln.c + + +*** ../vim-7.1.232/src/ex_getln.c Fri Jan 4 15:16:57 2008 +--- src/ex_getln.c Fri Jan 18 13:07:11 2008 +*************** +*** 4655,4661 **** + static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T *xp, int *num_file, char_u ***file)); + + /* +! * call "user_expand_func()" to invoke a user defined VimL function and return + * the result (either a string or a List). + */ + static void * +--- 4655,4661 ---- + static void * call_user_expand_func __ARGS((void *(*user_expand_func) __ARGS((char_u *, int, char_u **, int)), expand_T *xp, int *num_file, char_u ***file)); + + /* +! * Call "user_expand_func()" to invoke a user defined VimL function and return + * the result (either a string or a List). + */ + static void * +*************** +*** 4677,4687 **** + *num_file = 0; + *file = NULL; + +! keep = ccline.cmdbuff[ccline.cmdlen]; +! ccline.cmdbuff[ccline.cmdlen] = 0; +! sprintf((char *)num, "%d", ccline.cmdpos); + args[0] = xp->xp_pattern; +- args[1] = ccline.cmdbuff; + args[2] = num; + + /* Save the cmdline, we don't know what the function may do. */ +--- 4677,4698 ---- + *num_file = 0; + *file = NULL; + +! if (ccline.cmdbuff == NULL) +! { +! /* Completion from Insert mode, pass fake arguments. */ +! keep = 0; +! sprintf((char *)num, "%d", STRLEN(xp->xp_pattern)); +! args[1] = xp->xp_pattern; +! } +! else +! { +! /* Completion on the command line, pass real arguments. */ +! keep = ccline.cmdbuff[ccline.cmdlen]; +! ccline.cmdbuff[ccline.cmdlen] = 0; +! 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. */ +*************** +*** 4694,4701 **** + + ccline = save_ccline; + current_SID = save_current_SID; +! +! ccline.cmdbuff[ccline.cmdlen] = keep; + + return ret; + } +--- 4705,4712 ---- + + ccline = save_ccline; + current_SID = save_current_SID; +! if (ccline.cmdbuff != NULL) +! ccline.cmdbuff[ccline.cmdlen] = keep; + + return ret; + } +*** ../vim-7.1.232/src/version.c Fri Jan 18 11:40:02 2008 +--- src/version.c Fri Jan 18 13:01:05 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 233, + /**/ + +-- +"I love deadlines. I especially like the whooshing sound they +make as they go flying by." + -- Douglas Adams + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.234 b/7.1.234 new file mode 100644 index 00000000..03fa34da --- /dev/null +++ b/7.1.234 @@ -0,0 +1,210 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.234 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.234 +Problem: When diff'ing three files the third one isn't displayed correctly. + (Gary Johnson) +Solution: Compute the size of diff blocks correctly when merging blocks. + Compute filler lines correctly when scrolling. +Files: src/diff.c + + +*** ../vim-7.1.233/src/diff.c Fri Oct 19 18:57:33 2007 +--- src/diff.c Fri Jan 18 17:32:31 2008 +*************** +*** 1299,1305 **** + } + else + /* second overlap of new block with existing block */ +! dp->df_count[idx_new] += count_new - count_orig; + + /* Adjust the size of the block to include all the lines to the + * end of the existing block or the new diff, whatever ends last. */ +--- 1299,1307 ---- + } + else + /* second overlap of new block with existing block */ +! dp->df_count[idx_new] += count_new - count_orig +! + dpl->df_lnum[idx_orig] + dpl->df_count[idx_orig] +! - (dp->df_lnum[idx_orig] + dp->df_count[idx_orig]); + + /* Adjust the size of the block to include all the lines to the + * end of the existing block or the new diff, whatever ends last. */ +*************** +*** 1628,1641 **** + win_T *fromwin; + win_T *towin; + { +! buf_T *buf = fromwin->w_buffer; + linenr_T lnum = fromwin->w_topline; +! int idx; + diff_T *dp; + int i; + +! idx = diff_buf_idx(buf); +! if (idx == DB_COUNT) + return; /* safety check */ + + if (curtab->tp_diff_invalid) +--- 1630,1645 ---- + win_T *fromwin; + win_T *towin; + { +! buf_T *frombuf = fromwin->w_buffer; + linenr_T lnum = fromwin->w_topline; +! int fromidx; +! int toidx; + diff_T *dp; ++ int max_count; + int i; + +! fromidx = diff_buf_idx(frombuf); +! if (fromidx == DB_COUNT) + return; /* safety check */ + + if (curtab->tp_diff_invalid) +*************** +*** 1645,1686 **** + + /* search for a change that includes "lnum" in the list of diffblocks. */ + for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) +! if (lnum <= dp->df_lnum[idx] + dp->df_count[idx]) + break; + if (dp == NULL) + { + /* After last change, compute topline relative to end of file; no + * filler lines. */ + towin->w_topline = towin->w_buffer->b_ml.ml_line_count +! - (buf->b_ml.ml_line_count - lnum); + } + else + { + /* Find index for "towin". */ +! i = diff_buf_idx(towin->w_buffer); +! if (i == DB_COUNT) + return; /* safety check */ + +! towin->w_topline = lnum + (dp->df_lnum[i] - dp->df_lnum[idx]); +! if (lnum >= dp->df_lnum[idx]) + { +! /* Inside a change: compute filler lines. */ +! if (dp->df_count[i] == dp->df_count[idx]) + towin->w_topfill = fromwin->w_topfill; +! else if (dp->df_count[i] > dp->df_count[idx]) + { +! if (lnum == dp->df_lnum[idx] + dp->df_count[idx]) +! towin->w_topline = dp->df_lnum[i] + dp->df_count[i] +! - fromwin->w_topfill; + } +! else + { +! if (towin->w_topline >= dp->df_lnum[i] + dp->df_count[i]) + { +! if (diff_flags & DIFF_FILLER) +! towin->w_topfill = dp->df_lnum[idx] +! + dp->df_count[idx] - lnum; +! towin->w_topline = dp->df_lnum[i] + dp->df_count[i]; + } + } + } +--- 1649,1720 ---- + + /* search for a change that includes "lnum" in the list of diffblocks. */ + for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) +! if (lnum <= dp->df_lnum[fromidx] + dp->df_count[fromidx]) + break; + if (dp == NULL) + { + /* After last change, compute topline relative to end of file; no + * filler lines. */ + towin->w_topline = towin->w_buffer->b_ml.ml_line_count +! - (frombuf->b_ml.ml_line_count - lnum); + } + else + { + /* Find index for "towin". */ +! toidx = diff_buf_idx(towin->w_buffer); +! if (toidx == DB_COUNT) + return; /* safety check */ + +! towin->w_topline = lnum + (dp->df_lnum[toidx] - dp->df_lnum[fromidx]); +! if (lnum >= dp->df_lnum[fromidx]) + { +! /* Inside a change: compute filler lines. With three or more +! * buffers we need to know the largest count. */ +! max_count = 0; +! for (i = 0; i < DB_COUNT; ++i) +! if (curtab->tp_diffbuf[i] != NULL +! && max_count < dp->df_count[i]) +! max_count = dp->df_count[i]; +! +! if (dp->df_count[toidx] == dp->df_count[fromidx]) +! { +! /* same number of lines: use same filler count */ + towin->w_topfill = fromwin->w_topfill; +! } +! else if (dp->df_count[toidx] > dp->df_count[fromidx]) + { +! if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx]) +! { +! /* more lines in towin and fromwin doesn't show diff +! * lines, only filler lines */ +! if (max_count - fromwin->w_topfill >= dp->df_count[toidx]) +! { +! /* towin also only shows filler lines */ +! towin->w_topline = dp->df_lnum[toidx] +! + dp->df_count[toidx]; +! towin->w_topfill = fromwin->w_topfill; +! } +! else +! /* towin still has some diff lines to show */ +! towin->w_topline = dp->df_lnum[toidx] +! + max_count - fromwin->w_topfill; +! } + } +! else if (towin->w_topline >= dp->df_lnum[toidx] +! + dp->df_count[toidx]) + { +! /* less lines in towin and no diff lines to show: compute +! * filler lines */ +! towin->w_topline = dp->df_lnum[toidx] + dp->df_count[toidx]; +! if (diff_flags & DIFF_FILLER) + { +! if (lnum == dp->df_lnum[fromidx] + dp->df_count[fromidx]) +! /* fromwin is also out of diff lines */ +! towin->w_topfill = fromwin->w_topfill; +! else +! /* fromwin has some diff lines */ +! towin->w_topfill = dp->df_lnum[fromidx] +! + max_count - lnum; + } + } + } +*** ../vim-7.1.233/src/version.c Fri Jan 18 13:15:32 2008 +--- src/version.c Fri Jan 18 17:37:32 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 234, + /**/ + +-- +ERIC IDLE PLAYED: THE DEAD COLLECTOR, MR BINT (A VILLAGE NE'ER-DO -WELL VERY + KEEN ON BURNING WITCHES), SIR ROBIN, THE GUARD WHO DOESN'T + HICOUGH BUT TRIES TO GET THINGS STRAIGHT, CONCORDE (SIR + LAUNCELOT'S TRUSTY STEED), ROGER THE SHRUBBER (A SHRUBBER), + BROTHER MAYNARD + "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.1.235 b/7.1.235 new file mode 100644 index 00000000..4ea2e396 --- /dev/null +++ b/7.1.235 @@ -0,0 +1,199 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.235 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.235 +Problem: Pattern matching is slow when using a lot of simple patterns. +Solution: Avoid allocating memory by not freeing it when it's not so much. + (Alexei Alexandrov) +Files: src/regexp.c + + +*** ../vim-7.1.234/src/regexp.c Wed Jan 2 15:34:48 2008 +--- src/regexp.c Fri Jan 18 20:35:21 2008 +*************** +*** 378,391 **** + + static char_u *reg_prev_sub = NULL; + +- #if defined(EXITFREE) || defined(PROTO) +- void +- free_regexp_stuff() +- { +- vim_free(reg_prev_sub); +- } +- #endif +- + /* + * REGEXP_INRANGE contains all characters which are always special in a [] + * range after '\'. +--- 378,383 ---- +*************** +*** 3206,3217 **** + } backpos_T; + + /* +! * regstack and backpos are used by regmatch(). They are kept over calls to +! * avoid invoking malloc() and free() often. + */ +! static garray_T regstack; /* stack with regitem_T items, sometimes +! preceded by regstar_T or regbehind_T. */ +! static garray_T backpos; /* table with backpos_T for BACK */ + + /* + * Get pointer to the line "lnum", which is relative to "reg_firstlnum". +--- 3198,3236 ---- + } backpos_T; + + /* +! * "regstack" and "backpos" are used by regmatch(). They are kept over calls +! * to avoid invoking malloc() and free() often. +! * "regstack" is a stack with regitem_T items, sometimes preceded by regstar_T +! * or regbehind_T. +! * "backpos_T" is a table with backpos_T for BACK +! */ +! static garray_T regstack = {0, 0, 0, 0, NULL}; +! static garray_T backpos = {0, 0, 0, 0, NULL}; +! +! /* +! * Both for regstack and backpos tables we use the following strategy of +! * allocation (to reduce malloc/free calls): +! * - Initial size is fairly small. +! * - When needed, the tables are grown bigger (8 times at first, double after +! * that). +! * - After executing the match we free the memory only if the array has grown. +! * Thus the memory is kept allocated when it's at the initial size. +! * This makes it fast while not keeping a lot of memory allocated. +! * A three times speed increase was observed when using many simple patterns. + */ +! #define REGSTACK_INITIAL 2048 +! #define BACKPOS_INITIAL 64 +! +! #if defined(EXITFREE) || defined(PROTO) +! void +! free_regexp_stuff() +! { +! ga_clear(®stack); +! ga_clear(&backpos); +! vim_free(reg_tofree); +! vim_free(reg_prev_sub); +! } +! #endif + + /* + * Get pointer to the line "lnum", which is relative to "reg_firstlnum". +*************** +*** 3346,3360 **** + char_u *s; + long retval = 0L; + +! reg_tofree = NULL; +! +! /* Init the regstack empty. Use an item size of 1 byte, since we push +! * different things onto it. Use a large grow size to avoid reallocating +! * it too often. */ +! ga_init2(®stack, 1, 10000); +! +! /* Init the backpos table empty. */ +! ga_init2(&backpos, sizeof(backpos_T), 10); + + if (REG_MULTI) + { +--- 3365,3389 ---- + char_u *s; + long retval = 0L; + +! /* Create "regstack" and "backpos" if they are not allocated yet. +! * We allocate *_INITIAL amount of bytes first and then set the grow size +! * to much bigger value to avoid many malloc calls in case of deep regular +! * expressions. */ +! if (regstack.ga_data == NULL) +! { +! /* Use an item size of 1 byte, since we push different things +! * onto the regstack. */ +! ga_init2(®stack, 1, REGSTACK_INITIAL); +! ga_grow(®stack, REGSTACK_INITIAL); +! regstack.ga_growsize = REGSTACK_INITIAL * 8; +! } +! +! if (backpos.ga_data == NULL) +! { +! ga_init2(&backpos, sizeof(backpos_T), BACKPOS_INITIAL); +! ga_grow(&backpos, BACKPOS_INITIAL); +! backpos.ga_growsize = BACKPOS_INITIAL * 8; +! } + + if (REG_MULTI) + { +*************** +*** 3525,3533 **** + } + + theend: +! vim_free(reg_tofree); +! ga_clear(®stack); +! ga_clear(&backpos); + + return retval; + } +--- 3554,3570 ---- + } + + theend: +! /* Free "reg_tofree" when it's a bit big. +! * Free regstack and backpos if they are bigger than their initial size. */ +! if (reg_tofreelen > 400) +! { +! vim_free(reg_tofree); +! reg_tofree = NULL; +! } +! if (regstack.ga_maxlen > REGSTACK_INITIAL) +! ga_clear(®stack); +! if (backpos.ga_maxlen > BACKPOS_INITIAL) +! ga_clear(&backpos); + + return retval; + } +*************** +*** 3717,3724 **** + #define RA_MATCH 4 /* successful match */ + #define RA_NOMATCH 5 /* didn't match */ + +! /* Init the regstack and backpos table empty. They are initialized and +! * freed in vim_regexec_both() to reduce malloc()/free() calls. */ + regstack.ga_len = 0; + backpos.ga_len = 0; + +--- 3754,3761 ---- + #define RA_MATCH 4 /* successful match */ + #define RA_NOMATCH 5 /* didn't match */ + +! /* Make "regstack" and "backpos" empty. They are allocated and freed in +! * vim_regexec_both() to reduce malloc()/free() calls. */ + regstack.ga_len = 0; + backpos.ga_len = 0; + +*** ../vim-7.1.234/src/version.c Fri Jan 18 17:39:10 2008 +--- src/version.c Fri Jan 18 20:33:26 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 235, + /**/ + +-- +NEIL INNES PLAYED: THE FIRST SELF-DESTRUCTIVE MONK, ROBIN'S LEAST FAVORITE + MINSTREL, THE PAGE CRUSHED BY A RABBIT, THE OWNER OF A DUCK + "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.1.236 b/7.1.236 new file mode 100644 index 00000000..32944c75 --- /dev/null +++ b/7.1.236 @@ -0,0 +1,920 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.236 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.236 +Problem: When using 'incsearch' and 'hlsearch' a complicated pattern may + make Vim hang until CTRL-C is pressed. +Solution: Add the 'redrawtime' option. +Files: runtime/doc/options.txt, src/ex_cmds.c, src/ex_docmd.c, + src/ex_getln.c, src/gui.c, src/misc1.c, src/normal.c, + src/option.c, src/quickfix.c, src/regexp.c, src/proto/regexp.pro, + src/proto/search.pro, src/search.c, src/screen.c, + src/option.h, src/spell.c, src/structs.h, src/syntax.c, src/tag.c, + src/vim.h + + +*** ../vim-7.1.235/runtime/doc/options.txt Sun Aug 12 16:55:01 2007 +--- runtime/doc/options.txt Sat Jan 19 14:01:22 2008 +*************** +*** 3618,3623 **** +--- 3636,3642 ---- + When you get bored looking at the highlighted matches, you can turn it + off with |:nohlsearch|. As soon as you use a search command, the + highlighting comes back. ++ 'redrawtime' specifies the maximum time spend on finding matches. + When the search pattern can match an end-of-line, Vim will try to + highlight all of the matched text. However, this depends on where the + search starts. This will be the first line in the window or the first +*************** +*** 3851,3856 **** +--- 3870,3879 ---- + original position when no match is found and when pressing . You + still need to finish the search command with to move the + cursor to the match. ++ When compiled with the |+reltime| feature Vim only searches for about ++ half a second. With a complicated pattern and/or a lot of text the ++ match may not be found. This is to avoid that Vim hangs while you ++ are typing the pattern. + The highlighting can be set with the 'i' flag in 'highlight'. + See also: 'hlsearch'. + CTRL-L can be used to add one character from after the current match +*************** +*** 5185,5190 **** +--- 5210,5227 ---- + {not in Vi:} When using the ":view" command the 'readonly' option is + set for the newly edited buffer. + ++ *'redrawtime'* *'rdt'* ++ 'redrawtime' 'rdt' number (default 2000) ++ global ++ {not in Vi} ++ {only available when compiled with the |+reltime| ++ feature} ++ The time in milliseconds for redrawing the display. This applies to ++ searching for patterns for 'hlsearch' and |:match| highlighting. ++ When redrawing takes more than this many milliseconds no further ++ matches will be highlighted. This is used to avoid that Vim hangs ++ when using a very complicated pattern. ++ + *'remap'* *'noremap'* + 'remap' boolean (default on) + global +*** ../vim-7.1.235/src/ex_cmds.c Sun Jan 13 13:30:34 2008 +--- src/ex_cmds.c Sat Jan 19 13:04:28 2008 +*************** +*** 4446,4452 **** + #endif + ); ++lnum) + { +! nmatch = vim_regexec_multi(®match, curwin, curbuf, lnum, (colnr_T)0); + if (nmatch) + { + colnr_T copycol; +--- 4446,4453 ---- + #endif + ); ++lnum) + { +! nmatch = vim_regexec_multi(®match, curwin, curbuf, lnum, +! (colnr_T)0, NULL); + if (nmatch) + { + colnr_T copycol; +*************** +*** 4957,4963 **** + || (do_ask && !re_lookbehind(regmatch.regprog)) + || nmatch_tl > 0 + || (nmatch = vim_regexec_multi(®match, curwin, +! curbuf, sub_firstlnum, matchcol)) == 0 + || regmatch.startpos[0].lnum > 0) + { + if (new_start != NULL) +--- 4958,4965 ---- + || (do_ask && !re_lookbehind(regmatch.regprog)) + || nmatch_tl > 0 + || (nmatch = vim_regexec_multi(®match, curwin, +! curbuf, sub_firstlnum, +! matchcol, NULL)) == 0 + || regmatch.startpos[0].lnum > 0) + { + if (new_start != NULL) +*************** +*** 5022,5028 **** + } + if (nmatch == -1 && !lastone) + nmatch = vim_regexec_multi(®match, curwin, curbuf, +! sub_firstlnum, matchcol); + + /* + * 5. break if there isn't another match in this line +--- 5024,5030 ---- + } + if (nmatch == -1 && !lastone) + nmatch = vim_regexec_multi(®match, curwin, curbuf, +! sub_firstlnum, matchcol, NULL); + + /* + * 5. break if there isn't another match in this line +*************** +*** 5252,5258 **** + for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum) + { + /* a match on this line? */ +! match = vim_regexec_multi(®match, curwin, curbuf, lnum, (colnr_T)0); + if ((type == 'g' && match) || (type == 'v' && !match)) + { + ml_setmarked(lnum); +--- 5254,5261 ---- + for (lnum = eap->line1; lnum <= eap->line2 && !got_int; ++lnum) + { + /* a match on this line? */ +! match = vim_regexec_multi(®match, curwin, curbuf, lnum, +! (colnr_T)0, NULL); + if ((type == 'g' && match) || (type == 'v' && !match)) + { + ml_setmarked(lnum); +*** ../vim-7.1.235/src/ex_docmd.c Sun Jan 13 17:11:25 2008 +--- src/ex_docmd.c Fri Jan 18 21:01:16 2008 +*************** +*** 3931,3937 **** + curwin->w_cursor.col = 0; + searchcmdlen = 0; + if (!do_search(NULL, c, cmd, 1L, +! SEARCH_HIS + SEARCH_MSG + SEARCH_START)) + { + curwin->w_cursor = pos; + cmd = NULL; +--- 3931,3938 ---- + curwin->w_cursor.col = 0; + searchcmdlen = 0; + if (!do_search(NULL, c, cmd, 1L, +! SEARCH_HIS + SEARCH_MSG + SEARCH_START, +! NULL)) + { + curwin->w_cursor = pos; + cmd = NULL; +*** ../vim-7.1.235/src/ex_getln.c Fri Jan 18 13:15:32 2008 +--- src/ex_getln.c Fri Jan 18 21:34:42 2008 +*************** +*** 1709,1714 **** +--- 1709,1717 ---- + if (p_is && !cmd_silent && (firstc == '/' || firstc == '?')) + { + pos_T end_pos; ++ #ifdef FEAT_RELTIME ++ proftime_T tm; ++ #endif + + /* if there is a character waiting, search and redraw later */ + if (char_avail()) +*************** +*** 1727,1734 **** + cursor_off(); /* so the user knows we're busy */ + out_flush(); + ++emsg_off; /* So it doesn't beep if bad expr */ + i = do_search(NULL, firstc, ccline.cmdbuff, count, +! SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK); + --emsg_off; + /* if interrupted while searching, behave like it failed */ + if (got_int) +--- 1730,1747 ---- + cursor_off(); /* so the user knows we're busy */ + out_flush(); + ++emsg_off; /* So it doesn't beep if bad expr */ ++ #ifdef FEAT_RELTIME ++ /* Set the time limit to half a second. */ ++ profile_setlimit(500L, &tm); ++ #endif + i = do_search(NULL, firstc, ccline.cmdbuff, count, +! SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK, +! #ifdef FEAT_RELTIME +! &tm +! #else +! NULL +! #endif +! ); + --emsg_off; + /* if interrupted while searching, behave like it failed */ + if (got_int) +*** ../vim-7.1.235/src/gui.c Thu Jan 3 16:14:25 2008 +--- src/gui.c Fri Jan 18 21:01:36 2008 +*************** +*** 5052,5058 **** + /* Search for the next match. */ + i = msg_scroll; + do_search(NULL, down ? '/' : '?', ga.ga_data, 1L, +! SEARCH_MSG + SEARCH_MARK); + msg_scroll = i; /* don't let an error message set msg_scroll */ + } + +--- 5052,5058 ---- + /* Search for the next match. */ + i = msg_scroll; + do_search(NULL, down ? '/' : '?', ga.ga_data, 1L, +! SEARCH_MSG + SEARCH_MARK, NULL); + msg_scroll = i; /* don't let an error message set msg_scroll */ + } + +*** ../vim-7.1.235/src/misc1.c Thu Jan 3 12:42:38 2008 +--- src/misc1.c Sat Jan 19 13:04:39 2008 +*************** +*** 437,443 **** + { + regmatch.rmm_ic = FALSE; + regmatch.rmm_maxcol = 0; +! if (vim_regexec_multi(®match, curwin, curbuf, lnum, (colnr_T)0)) + { + pos.lnum = regmatch.endpos[0].lnum + lnum; + pos.col = regmatch.endpos[0].col; +--- 437,444 ---- + { + regmatch.rmm_ic = FALSE; + regmatch.rmm_maxcol = 0; +! if (vim_regexec_multi(®match, curwin, curbuf, lnum, +! (colnr_T)0, NULL)) + { + pos.lnum = regmatch.endpos[0].lnum + lnum; + pos.col = regmatch.endpos[0].col; +*** ../vim-7.1.235/src/normal.c Sat Jan 12 17:11:25 2008 +--- src/normal.c Fri Jan 18 21:01:47 2008 +*************** +*** 6093,6099 **** + curwin->w_set_curswant = TRUE; + + i = do_search(cap->oap, dir, pat, cap->count1, +! opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG); + if (i == 0) + clearop(cap->oap); + else +--- 6093,6099 ---- + curwin->w_set_curswant = TRUE; + + i = do_search(cap->oap, dir, pat, cap->count1, +! opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG, NULL); + if (i == 0) + clearop(cap->oap); + else +*** ../vim-7.1.235/src/option.c Tue Oct 2 20:40:01 2007 +--- src/option.c Sat Jan 19 13:44:33 2008 +*************** +*** 1991,1996 **** +--- 1991,2003 ---- + {"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}}, +*** ../vim-7.1.235/src/quickfix.c Sun Sep 30 14:00:41 2007 +--- src/quickfix.c Sat Jan 19 13:04:53 2008 +*************** +*** 1803,1809 **** + /* Move the cursor to the first line in the buffer */ + save_cursor = curwin->w_cursor; + curwin->w_cursor.lnum = 0; +! if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1, SEARCH_KEEP)) + curwin->w_cursor = save_cursor; + } + +--- 1803,1810 ---- + /* Move the cursor to the first line in the buffer */ + save_cursor = curwin->w_cursor; + curwin->w_cursor.lnum = 0; +! if (!do_search(NULL, '/', qf_ptr->qf_pattern, (long)1, +! SEARCH_KEEP, NULL)) + curwin->w_cursor = save_cursor; + } + +*************** +*** 3159,3165 **** + { + col = 0; + while (vim_regexec_multi(®match, curwin, buf, lnum, +! col) > 0) + { + ; + if (qf_add_entry(qi, &prevp, +--- 3160,3166 ---- + { + col = 0; + while (vim_regexec_multi(®match, curwin, buf, lnum, +! col, NULL) > 0) + { + ; + if (qf_add_entry(qi, &prevp, +*** ../vim-7.1.235/src/regexp.c Fri Jan 18 20:36:40 2008 +--- src/regexp.c Sat Jan 19 15:18:12 2008 +*************** +*** 3040,3046 **** + } save_se_T; + + static char_u *reg_getline __ARGS((linenr_T lnum)); +! static long vim_regexec_both __ARGS((char_u *line, colnr_T col)); + static long regtry __ARGS((regprog_T *prog, colnr_T col)); + static void cleanup_subexpr __ARGS((void)); + #ifdef FEAT_SYN_HL +--- 3040,3046 ---- + } save_se_T; + + static char_u *reg_getline __ARGS((linenr_T lnum)); +! static long vim_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm)); + static long regtry __ARGS((regprog_T *prog, colnr_T col)); + static void cleanup_subexpr __ARGS((void)); + #ifdef FEAT_SYN_HL +*************** +*** 3284,3290 **** + ireg_icombine = FALSE; + #endif + ireg_maxcol = 0; +! return (vim_regexec_both(line, col) != 0); + } + + #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ +--- 3284,3290 ---- + ireg_icombine = FALSE; + #endif + ireg_maxcol = 0; +! return (vim_regexec_both(line, col, NULL) != 0); + } + + #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ +*************** +*** 3308,3314 **** + ireg_icombine = FALSE; + #endif + ireg_maxcol = 0; +! return (vim_regexec_both(line, col) != 0); + } + #endif + +--- 3308,3314 ---- + ireg_icombine = FALSE; + #endif + ireg_maxcol = 0; +! return (vim_regexec_both(line, col, NULL) != 0); + } + #endif + +*************** +*** 3321,3332 **** + * match otherwise. + */ + long +! vim_regexec_multi(rmp, win, buf, lnum, col) + regmmatch_T *rmp; + win_T *win; /* window in which to search or NULL */ + buf_T *buf; /* buffer in which to search */ + linenr_T lnum; /* nr of line to start looking for match */ + colnr_T col; /* column to start looking for match */ + { + long r; + buf_T *save_curbuf = curbuf; +--- 3321,3333 ---- + * match otherwise. + */ + long +! vim_regexec_multi(rmp, win, buf, lnum, col, tm) + regmmatch_T *rmp; + win_T *win; /* window in which to search or NULL */ + buf_T *buf; /* buffer in which to search */ + linenr_T lnum; /* nr of line to start looking for match */ + colnr_T col; /* column to start looking for match */ ++ proftime_T *tm; /* timeout limit or NULL */ + { + long r; + buf_T *save_curbuf = curbuf; +*************** +*** 3346,3352 **** + + /* Need to switch to buffer "buf" to make vim_iswordc() work. */ + curbuf = buf; +! r = vim_regexec_both(NULL, col); + curbuf = save_curbuf; + + return r; +--- 3347,3353 ---- + + /* Need to switch to buffer "buf" to make vim_iswordc() work. */ + curbuf = buf; +! r = vim_regexec_both(NULL, col, tm); + curbuf = save_curbuf; + + return r; +*************** +*** 3356,3365 **** + * 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) + char_u *line; + colnr_T col; /* column to start looking for match */ + { + regprog_T *prog; + char_u *s; +--- 3357,3368 ---- + * 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; +*************** +*** 3502,3507 **** +--- 3505,3513 ---- + } + else + { ++ #ifdef FEAT_RELTIME ++ int tm_count = 0; ++ #endif + /* Messy cases: unanchored match. */ + while (!got_int) + { +*************** +*** 3550,3555 **** +--- 3556,3570 ---- + else + #endif + ++col; ++ #ifdef FEAT_RELTIME ++ /* Check for timeout once in a twenty times to avoid overhead. */ ++ if (tm != NULL && ++tm_count == 20) ++ { ++ tm_count = 0; ++ if (profile_passed_limit(tm)) ++ break; ++ } ++ #endif + } + } + +*** ../vim-7.1.235/src/proto/regexp.pro Sat May 5 19:42:08 2007 +--- src/proto/regexp.pro Sat Jan 19 13:14:09 2008 +*************** +*** 1,13 **** + /* regexp.c */ +- void free_regexp_stuff __ARGS((void)); + int re_multiline __ARGS((regprog_T *prog)); + int re_lookbehind __ARGS((regprog_T *prog)); + char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp)); + regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags)); + int vim_regcomp_had_eol __ARGS((void)); + int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); + int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); +! long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col)); + reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em)); + void unref_extmatch __ARGS((reg_extmatch_T *em)); + char_u *regtilde __ARGS((char_u *source, int magic)); +--- 1,13 ---- + /* regexp.c */ + int re_multiline __ARGS((regprog_T *prog)); + int re_lookbehind __ARGS((regprog_T *prog)); + char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp)); + regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags)); + int vim_regcomp_had_eol __ARGS((void)); ++ void free_regexp_stuff __ARGS((void)); + int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); + int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); +! long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm)); + reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em)); + void unref_extmatch __ARGS((reg_extmatch_T *em)); + char_u *regtilde __ARGS((char_u *source, int magic)); +*** ../vim-7.1.235/src/proto/search.pro Sun Jan 6 20:05:36 2008 +--- src/proto/search.pro Fri Jan 18 21:03:49 2008 +*************** +*** 11,17 **** + void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast)); + void last_pat_prog __ARGS((regmmatch_T *regmatch)); + int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm)); +! int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options)); + int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat)); + int searchc __ARGS((cmdarg_T *cap, int t_cmd)); + pos_T *findmatch __ARGS((oparg_T *oap, int initc)); +--- 11,17 ---- + void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast)); + void last_pat_prog __ARGS((regmmatch_T *regmatch)); + int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm)); +! int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options, proftime_T *tm)); + int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat)); + int searchc __ARGS((cmdarg_T *cap, int t_cmd)); + pos_T *findmatch __ARGS((oparg_T *oap, int initc)); +*** ../vim-7.1.235/src/search.c Sun Jan 6 20:05:36 2008 +--- src/search.c Sat Jan 19 13:13:25 2008 +*************** +*** 606,612 **** + * Look for a match somewhere in line "lnum". + */ + nmatched = vim_regexec_multi(®match, win, buf, +! lnum, (colnr_T)0); + /* Abort searching on an error (e.g., out of stack). */ + if (called_emsg) + break; +--- 606,618 ---- + * Look for a match somewhere in line "lnum". + */ + nmatched = vim_regexec_multi(®match, win, buf, +! lnum, (colnr_T)0, +! #ifdef FEAT_RELTIME +! tm +! #else +! NULL +! #endif +! ); + /* Abort searching on an error (e.g., out of stack). */ + if (called_emsg) + break; +*************** +*** 615,623 **** + /* match may actually be in another line when using \zs */ + matchpos = regmatch.startpos[0]; + endpos = regmatch.endpos[0]; +! # ifdef FEAT_EVAL + submatch = first_submatch(®match); +! # endif + /* Line me be past end of buffer for "\n\zs". */ + if (lnum + matchpos.lnum > buf->b_ml.ml_line_count) + ptr = (char_u *)""; +--- 621,629 ---- + /* match may actually be in another line when using \zs */ + matchpos = regmatch.startpos[0]; + endpos = regmatch.endpos[0]; +! #ifdef FEAT_EVAL + submatch = first_submatch(®match); +! #endif + /* Line me be past end of buffer for "\n\zs". */ + if (lnum + matchpos.lnum > buf->b_ml.ml_line_count) + ptr = (char_u *)""; +*************** +*** 693,699 **** + if (ptr[matchcol] == NUL + || (nmatched = vim_regexec_multi(®match, + win, buf, lnum + matchpos.lnum, +! matchcol)) == 0) + { + match_ok = FALSE; + break; +--- 699,711 ---- + if (ptr[matchcol] == NUL + || (nmatched = vim_regexec_multi(®match, + win, buf, lnum + matchpos.lnum, +! matchcol, +! #ifdef FEAT_RELTIME +! tm +! #else +! NULL +! #endif +! )) == 0) + { + match_ok = FALSE; + break; +*************** +*** 799,805 **** + if (ptr[matchcol] == NUL + || (nmatched = vim_regexec_multi(®match, + win, buf, lnum + matchpos.lnum, +! matchcol)) == 0) + break; + + /* Need to get the line pointer again, a +--- 811,823 ---- + if (ptr[matchcol] == NUL + || (nmatched = vim_regexec_multi(®match, + win, buf, lnum + matchpos.lnum, +! matchcol, +! #ifdef FEAT_RELTIME +! tm +! #else +! NULL +! #endif +! )) == 0) + break; + + /* Need to get the line pointer again, a +*************** +*** 977,988 **** + * return 0 for failure, 1 for found, 2 for found and line offset added + */ + int +! do_search(oap, dirc, pat, count, options) + oparg_T *oap; /* can be NULL */ + int dirc; /* '/' or '?' */ + char_u *pat; + long count; + int options; + { + pos_T pos; /* position of the last match */ + char_u *searchstr; +--- 995,1007 ---- + * return 0 for failure, 1 for found, 2 for found and line offset added + */ + int +! do_search(oap, dirc, pat, count, options, tm) + oparg_T *oap; /* can be NULL */ + int dirc; /* '/' or '?' */ + char_u *pat; + long count; + int options; ++ proftime_T *tm; /* timeout limit or NULL */ + { + pos_T pos; /* position of the last match */ + char_u *searchstr; +*************** +*** 1256,1262 **** + (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS + + SEARCH_MSG + SEARCH_START + + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))), +! RE_LAST, (linenr_T)0, NULL); + + if (dircp != NULL) + *dircp = dirc; /* restore second '/' or '?' for normal_cmd() */ +--- 1275,1281 ---- + (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS + + SEARCH_MSG + SEARCH_START + + ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))), +! RE_LAST, (linenr_T)0, tm); + + if (dircp != NULL) + *dircp = dirc; /* restore second '/' or '?' for normal_cmd() */ +*** ../vim-7.1.235/src/screen.c Sat Jan 12 16:45:25 2008 +--- src/screen.c Sat Jan 19 13:52:29 2008 +*************** +*** 848,858 **** +--- 848,863 ---- + cur->hl.buf = buf; + cur->hl.lnum = 0; + cur->hl.first_lnum = 0; ++ # ifdef FEAT_RELTIME ++ /* Set the time limit to 'redrawtime'. */ ++ profile_setlimit(p_rdt, &(cur->hl.tm)); ++ # endif + cur = cur->next; + } + search_hl.buf = buf; + search_hl.lnum = 0; + search_hl.first_lnum = 0; ++ /* time limit is set at the toplevel, for all windows */ + #endif + + #ifdef FEAT_LINEBREAK +*************** +*** 6462,6467 **** +--- 6467,6476 ---- + { + last_pat_prog(&search_hl.rm); + search_hl.attr = hl_attr(HLF_L); ++ # ifdef FEAT_RELTIME ++ /* Set the time limit to 'redrawtime'. */ ++ profile_setlimit(p_rdt, &search_hl.tm); ++ # endif + } + } + +*************** +*** 6587,6592 **** +--- 6596,6609 ---- + called_emsg = FALSE; + for (;;) + { ++ #ifdef FEAT_RELTIME ++ /* Stop searching after passing the time limit. */ ++ if (profile_passed_limit(&(shl->tm))) ++ { ++ shl->lnum = 0; /* no match found in time */ ++ break; ++ } ++ #endif + /* Three situations: + * 1. No useful previous match: search from start of line. + * 2. Not Vi compatible or empty match: continue at next character. +*************** +*** 6620,6626 **** + matchcol = shl->rm.endpos[0].col; + + shl->lnum = lnum; +! nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol); + if (called_emsg) + { + /* Error while handling regexp: stop using this regexp. */ +--- 6637,6649 ---- + matchcol = shl->rm.endpos[0].col; + + shl->lnum = lnum; +! nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol, +! #ifdef FEAT_RELTIME +! &(shl->tm) +! #else +! NULL +! #endif +! ); + if (called_emsg) + { + /* Error while handling regexp: stop using this regexp. */ +*** ../vim-7.1.235/src/option.h Thu May 10 20:34:47 2007 +--- src/option.h Sat Jan 19 13:45:51 2008 +*************** +*** 633,638 **** +--- 633,641 ---- + #ifdef FEAT_SEARCHPATH + EXTERN char_u *p_cdpath; /* 'cdpath' */ + #endif ++ #ifdef FEAT_RELTIME ++ EXTERN long p_rdt; /* 'redrawtime' */ ++ #endif + EXTERN int p_remap; /* 'remap' */ + EXTERN long p_report; /* 'report' */ + #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) +*** ../vim-7.1.235/src/spell.c Sat Jan 12 16:45:25 2008 +--- src/spell.c Fri Jan 18 21:02:47 2008 +*************** +*** 10343,10349 **** + curwin->w_cursor.lnum = 0; + while (!got_int) + { +! if (do_search(NULL, '/', frompat, 1L, SEARCH_KEEP) == 0 + || u_save_cursor() == FAIL) + break; + +--- 10343,10349 ---- + curwin->w_cursor.lnum = 0; + while (!got_int) + { +! if (do_search(NULL, '/', frompat, 1L, SEARCH_KEEP, NULL) == 0 + || u_save_cursor() == FAIL) + break; + +*** ../vim-7.1.235/src/structs.h Mon Oct 1 22:53:27 2007 +--- src/structs.h Fri Jan 18 21:18:53 2008 +*************** +*** 1717,1722 **** +--- 1717,1725 ---- + linenr_T first_lnum; /* first lnum to search for multi-line pat */ + colnr_T startcol; /* in win_line() points to char where HL starts */ + colnr_T endcol; /* in win_line() points to char where HL ends */ ++ #ifdef FEAT_RELTIME ++ proftime_T tm; /* for a time limit */ ++ #endif + } match_T; + + /* +*** ../vim-7.1.235/src/syntax.c Sun Jan 13 17:39:29 2008 +--- src/syntax.c Sat Jan 19 13:13:49 2008 +*************** +*** 3097,3103 **** + colnr_T col; + { + rmp->rmm_maxcol = syn_buf->b_p_smc; +! if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col) > 0) + { + rmp->startpos[0].lnum += lnum; + rmp->endpos[0].lnum += lnum; +--- 3097,3103 ---- + colnr_T col; + { + rmp->rmm_maxcol = syn_buf->b_p_smc; +! if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL) > 0) + { + rmp->startpos[0].lnum += lnum; + rmp->endpos[0].lnum += lnum; +*** ../vim-7.1.235/src/tag.c Thu May 10 19:44:07 2007 +--- src/tag.c Fri Jan 18 21:03:41 2008 +*************** +*** 3191,3197 **** + #endif + save_lnum = curwin->w_cursor.lnum; + curwin->w_cursor.lnum = 0; /* start search before first line */ +! if (do_search(NULL, pbuf[0], pbuf + 1, (long)1, search_options)) + retval = OK; + else + { +--- 3191,3198 ---- + #endif + save_lnum = curwin->w_cursor.lnum; + curwin->w_cursor.lnum = 0; /* start search before first line */ +! if (do_search(NULL, pbuf[0], pbuf + 1, (long)1, +! search_options, NULL)) + retval = OK; + else + { +*************** +*** 3203,3209 **** + */ + p_ic = TRUE; + if (!do_search(NULL, pbuf[0], pbuf + 1, (long)1, +! search_options)) + { + /* + * Failed to find pattern, take a guess: "^func (" +--- 3204,3210 ---- + */ + p_ic = TRUE; + if (!do_search(NULL, pbuf[0], pbuf + 1, (long)1, +! search_options, NULL)) + { + /* + * Failed to find pattern, take a guess: "^func (" +*************** +*** 3213,3225 **** + cc = *tagp.tagname_end; + *tagp.tagname_end = NUL; + sprintf((char *)pbuf, "^%s\\s\\*(", tagp.tagname); +! if (!do_search(NULL, '/', pbuf, (long)1, search_options)) + { + /* Guess again: "^char * \ /* for access() */ + + # define stat(a,b) (access(a,0) ? -1 : stat(a,b)) +- #endif +- +- #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO) +- # ifdef WIN3264 +- typedef LARGE_INTEGER proftime_T; +- # else +- typedef struct timeval proftime_T; +- # endif +- #else +- typedef int proftime_T; /* dummy for function prototypes */ + #endif + + #include "ex_cmds.h" /* Ex command defines */ +--- 1770,1775 ---- +*** ../vim-7.1.235/src/version.c Fri Jan 18 20:36:40 2008 +--- src/version.c Sat Jan 19 15:19:48 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 236, + /**/ + +-- +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.1.237 b/7.1.237 new file mode 100644 index 00000000..c631d95a --- /dev/null +++ b/7.1.237 @@ -0,0 +1,54 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.237 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.237 +Problem: Compiler warning on an Alpha processor in Motif code. +Solution: Change a typecast. (Adri Verhoef) +Files: src/gui_motif.c + + +*** ../vim-7.1.236/src/gui_motif.c Thu May 10 19:51:05 2007 +--- src/gui_motif.c Mon Jan 21 21:03:55 2008 +*************** +*** 3813,3819 **** + + XtAddCallback(frdp->find, XmNactivateCallback, + find_replace_callback, +! (XtPointer) (do_replace ? FRD_R_FINDNEXT : FRD_FINDNEXT)); + + if (do_replace) + { +--- 3813,3819 ---- + + XtAddCallback(frdp->find, XmNactivateCallback, + find_replace_callback, +! (do_replace ? (XtPointer)FRD_R_FINDNEXT : (XtPointer)FRD_FINDNEXT)); + + if (do_replace) + { +*** ../vim-7.1.236/src/version.c Sat Jan 19 15:55:51 2008 +--- src/version.c Tue Jan 22 11:05:12 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 237, + /**/ + +-- +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.1.238 b/7.1.238 new file mode 100644 index 00000000..e7b6a6fe --- /dev/null +++ b/7.1.238 @@ -0,0 +1,61 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.238 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.238 +Problem: Using the 'c' flag with searchpair() may cause it to fail. Using + the 'r' flag doesn't work when 'wrapscan' is set. (A.Politz) +Solution: Only use the 'c' flag for the first search, not for repeating. + When using 'r' imply 'W'. (Antony Scriven) +Files: src/eval.c + + +*** ../vim-7.1.237/src/eval.c Sat Jan 12 16:45:25 2008 +--- src/eval.c Tue Jan 22 11:42:28 2008 +*************** +*** 14189,14194 **** +--- 14189,14198 ---- + goto theend; + } + ++ /* Using 'r' implies 'W', otherwise it doesn't work. */ ++ if (flags & SP_REPEAT) ++ p_ws = FALSE; ++ + /* Optional fifth argument: skip expression */ + if (argvars[3].v_type == VAR_UNKNOWN + || argvars[4].v_type == VAR_UNKNOWN) +*************** +*** 14344,14349 **** +--- 14348,14356 ---- + incl(&pos); + } + foundpos = pos; ++ ++ /* clear the start flag to avoid getting stuck here */ ++ options &= ~SEARCH_START; + + /* If the skip pattern matches, ignore this match. */ + if (*skip != NUL) +*** ../vim-7.1.237/src/version.c Tue Jan 22 11:06:06 2008 +--- src/version.c Tue Jan 22 11:57:28 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 238, + /**/ + +-- +To keep milk from turning sour: Keep it in the cow. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/7.1.239 b/7.1.239 new file mode 100644 index 00000000..dca05345 --- /dev/null +++ b/7.1.239 @@ -0,0 +1,53 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.239 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.239 (after 7.1.233) +Problem: Compiler warning for sprintf() argument. +Solution: Add a typecast. (Nico Weber) +Files: src/ex_getln.c + + +*** ../vim-7.1.238/src/ex_getln.c Sat Jan 19 15:55:51 2008 +--- src/ex_getln.c Tue Jan 22 12:40:54 2008 +*************** +*** 4694,4700 **** + { + /* Completion from Insert mode, pass fake arguments. */ + keep = 0; +! sprintf((char *)num, "%d", STRLEN(xp->xp_pattern)); + args[1] = xp->xp_pattern; + } + else +--- 4694,4700 ---- + { + /* Completion from Insert mode, pass fake arguments. */ + keep = 0; +! sprintf((char *)num, "%d", (int)STRLEN(xp->xp_pattern)); + args[1] = xp->xp_pattern; + } + else +*** ../vim-7.1.238/src/version.c Tue Jan 22 11:58:41 2008 +--- src/version.c Tue Jan 22 12:42:36 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 239, + /**/ + +-- +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.1.240 b/7.1.240 new file mode 100644 index 00000000..7f690850 --- /dev/null +++ b/7.1.240 @@ -0,0 +1,186 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.240 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.240 +Problem: When "gUe" turns a German sharp s into SS the operation stops + before the end of the word. Latin2 has the same sharp s but it's + not changed to SS there. +Solution: Make sure all the characters are operated upon. Detect the sharp + s in latin2. Also fixes that changing case of a multi-byte + character that changes the byte cound doesn't always work. +Files: src/ops.c + + +*** ../vim-7.1.239/src/ops.c Wed Jan 16 20:01:14 2008 +--- src/ops.c Tue Jan 22 16:00:07 2008 +*************** +*** 2184,2189 **** +--- 2184,2191 ---- + } + #endif + ++ static int swapchars __ARGS((int op_type, pos_T *pos, int length)); ++ + /* + * Handle the (non-standard vi) tilde operator. Also for "gu", "gU" and "g?". + */ +*************** +*** 2194,2202 **** + pos_T pos; + #ifdef FEAT_VISUAL + struct block_def bd; +- int todo; + #endif +! int did_change = 0; + + if (u_save((linenr_T)(oap->start.lnum - 1), + (linenr_T)(oap->end.lnum + 1)) == FAIL) +--- 2196,2203 ---- + pos_T pos; + #ifdef FEAT_VISUAL + struct block_def bd; + #endif +! int did_change; + + if (u_save((linenr_T)(oap->start.lnum - 1), + (linenr_T)(oap->end.lnum + 1)) == FAIL) +*************** +*** 2210,2225 **** + { + block_prep(oap, &bd, pos.lnum, FALSE); + pos.col = bd.textcol; +! for (todo = bd.textlen; todo > 0; --todo) +! { +! # ifdef FEAT_MBYTE +! if (has_mbyte) +! todo -= (*mb_ptr2len)(ml_get_pos(&pos)) - 1; +! # endif +! did_change |= swapchar(oap->op_type, &pos); +! if (inc(&pos) == -1) /* at end of file */ +! break; +! } + # ifdef FEAT_NETBEANS_INTG + if (usingNetbeans && did_change) + { +--- 2211,2218 ---- + { + 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) + { +*************** +*** 2249,2261 **** + else if (!oap->inclusive) + dec(&(oap->end)); + +! while (ltoreq(pos, oap->end)) +! { +! did_change |= swapchar(oap->op_type, &pos); +! if (inc(&pos) == -1) /* at end of file */ +! break; +! } +! + if (did_change) + { + changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, +--- 2242,2248 ---- + else if (!oap->inclusive) + dec(&(oap->end)); + +! did_change = swapchars(oap->op_type, &pos, oap->end.col - pos.col + 1); + if (did_change) + { + changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, +*************** +*** 2309,2314 **** +--- 2296,2337 ---- + } + + /* ++ * Invoke swapchar() on "length" bytes at position "pos". ++ * "pos" is advanced to just after the changed characters. ++ * "length" is rounded up to include the whole last multi-byte character. ++ * Also works correctly when the number of bytes changes. ++ * Returns TRUE if some character was changed. ++ */ ++ static int ++ swapchars(op_type, pos, length) ++ int op_type; ++ pos_T *pos; ++ int length; ++ { ++ int todo; ++ int did_change = 0; ++ ++ for (todo = length; todo > 0; --todo) ++ { ++ # ifdef FEAT_MBYTE ++ int pos_col = pos->col; ++ ++ if (has_mbyte) ++ /* we're counting bytes, not characters */ ++ todo -= (*mb_ptr2len)(ml_get_pos(pos)) - 1; ++ # endif ++ did_change |= swapchar(op_type, pos); ++ # ifdef FEAT_MBYTE ++ /* Changing German sharp s to SS increases the column. */ ++ todo += pos->col - pos_col; ++ # endif ++ if (inc(pos) == -1) /* at end of file */ ++ break; ++ } ++ return did_change; ++ } ++ ++ /* + * If op_type == OP_UPPER: make uppercase, + * if op_type == OP_LOWER: make lowercase, + * if op_type == OP_ROT13: do rot13 encoding, +*************** +*** 2330,2336 **** + return FALSE; + + #ifdef FEAT_MBYTE +! if (op_type == OP_UPPER && enc_latin1like && c == 0xdf) + { + pos_T sp = curwin->w_cursor; + +--- 2353,2360 ---- + return FALSE; + + #ifdef FEAT_MBYTE +! if (op_type == OP_UPPER && c == 0xdf +! && (enc_latin1like || STRCMP(p_enc, "iso-8859-2") == 0)) + { + pos_T sp = curwin->w_cursor; + +*** ../vim-7.1.239/src/version.c Tue Jan 22 12:44:03 2008 +--- src/version.c Tue Jan 22 15:36:36 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 240, + /**/ + +-- +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.1.241 b/7.1.241 new file mode 100644 index 00000000..4a04c690 --- /dev/null +++ b/7.1.241 @@ -0,0 +1,112 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.241 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.241 +Problem: Focus change events not always ignored. (Erik Falor) +Solution: Ignore K_IGNORE in Insert mode in a few more places. +Files: src/edit.c + + +*** ../vim-7.1.240/src/edit.c Wed Jan 16 20:01:14 2008 +--- src/edit.c Tue Jan 22 17:45:32 2008 +*************** +*** 703,712 **** + #endif + + /* +! * Get a character for Insert mode. + */ + lastc = c; /* remember previous char for CTRL-D */ +! c = safe_vgetc(); + + #ifdef FEAT_AUTOCMD + /* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */ +--- 703,715 ---- + #endif + + /* +! * Get a character for Insert mode. Ignore K_IGNORE. + */ + lastc = c; /* remember previous char for CTRL-D */ +! do +! { +! c = safe_vgetc(); +! } while (c == K_IGNORE); + + #ifdef FEAT_AUTOCMD + /* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */ +*************** +*** 777,783 **** + /* Prepare for or stop CTRL-X mode. This doesn't do completion, but + * it does fix up the text when finishing completion. */ + compl_get_longest = FALSE; +! if (c != K_IGNORE && ins_compl_prep(c)) + continue; + #endif + +--- 780,786 ---- + /* Prepare for or stop CTRL-X mode. This doesn't do completion, but + * it does fix up the text when finishing completion. */ + compl_get_longest = FALSE; +! if (ins_compl_prep(c)) + continue; + #endif + +*************** +*** 4516,4530 **** + else + { + /* Need to get the character to have KeyTyped set. We'll put it +! * back with vungetc() below. */ + c = safe_vgetc(); + +! /* Don't interrupt completion when the character wasn't typed, +! * e.g., when doing @q to replay keys. */ +! if (c != Ctrl_R && KeyTyped) +! compl_interrupted = TRUE; +! +! vungetc(c); + } + } + if (compl_pending != 0 && !got_int) +--- 4519,4535 ---- + else + { + /* Need to get the character to have KeyTyped set. We'll put it +! * back with vungetc() below. But skip K_IGNORE. */ + c = safe_vgetc(); ++ if (c != K_IGNORE) ++ { ++ /* Don't interrupt completion when the character wasn't typed, ++ * e.g., when doing @q to replay keys. */ ++ if (c != Ctrl_R && KeyTyped) ++ compl_interrupted = TRUE; + +! vungetc(c); +! } + } + } + if (compl_pending != 0 && !got_int) +*** ../vim-7.1.240/src/version.c Tue Jan 22 16:01:25 2008 +--- src/version.c Tue Jan 22 17:48:46 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 241, + /**/ + +-- +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.1.242 b/7.1.242 new file mode 100644 index 00000000..6aab9c87 --- /dev/null +++ b/7.1.242 @@ -0,0 +1,68 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.242 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.242 (after 7.1.005) +Problem: "cib" doesn't work properly on "(x)". (Tim Pope) +Solution: Use ltoreq() instead of lt(). Also fix "ciT" on "x". +Files: src/search.c + + +*** ../vim-7.1.241/src/search.c Sat Jan 19 15:55:51 2008 +--- src/search.c Sat Jan 26 13:56:06 2008 +*************** +*** 3637,3643 **** + oap->inclusive = FALSE; + if (sol) + incl(&curwin->w_cursor); +! else if (lt(start_pos, curwin->w_cursor)) + /* Include the character under the cursor. */ + oap->inclusive = TRUE; + else +--- 3637,3643 ---- + oap->inclusive = FALSE; + if (sol) + incl(&curwin->w_cursor); +! else if (ltoreq(start_pos, curwin->w_cursor)) + /* Include the character under the cursor. */ + oap->inclusive = TRUE; + else +*************** +*** 3754,3759 **** +--- 3754,3763 ---- + old_pos = curwin->w_cursor; + old_end = curwin->w_cursor; /* remember where we started */ + old_start = old_end; ++ #ifdef FEAT_VISUAL ++ if (!VIsual_active || *p_sel == 'e') ++ #endif ++ decl(&old_end); /* old_end is inclusive */ + + /* + * If we start on "" select that block. +*** ../vim-7.1.241/src/version.c Tue Jan 22 17:49:17 2008 +--- src/version.c Sat Jan 26 21:14:05 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 242, + /**/ + +-- +DENNIS: Oh, very nice. King, eh! I expect you've got a palace and fine + clothes and courtiers and plenty of food. And how d'you get that? By + exploiting the workers! By hanging on to outdated imperialist dogma + which perpetuates the social and economic differences in our society! + "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.1.243 b/7.1.243 new file mode 100644 index 00000000..102546c1 --- /dev/null +++ b/7.1.243 @@ -0,0 +1,165 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.243 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.243 (after 7.1.240) +Problem: "U" doesn't work on all text in Visual mode. (Adri Verhoef) +Solution: Loop over all the lines to be changed. Add tests for this. +Files: src/ops.c, src/testdir/test39.in, src/testdir/test39.ok + + +*** ../vim-7.1.242/src/ops.c Tue Jan 22 16:01:25 2008 +--- src/ops.c Mon Feb 4 22:23:22 2008 +*************** +*** 2197,2203 **** + #ifdef FEAT_VISUAL + struct block_def bd; + #endif +! int did_change; + + if (u_save((linenr_T)(oap->start.lnum - 1), + (linenr_T)(oap->end.lnum + 1)) == FAIL) +--- 2197,2203 ---- + #ifdef FEAT_VISUAL + struct block_def bd; + #endif +! int did_change = FALSE; + + if (u_save((linenr_T)(oap->start.lnum - 1), + (linenr_T)(oap->end.lnum + 1)) == FAIL) +*************** +*** 2242,2248 **** + else if (!oap->inclusive) + dec(&(oap->end)); + +! did_change = swapchars(oap->op_type, &pos, oap->end.col - pos.col + 1); + if (did_change) + { + changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, +--- 2242,2259 ---- + else if (!oap->inclusive) + dec(&(oap->end)); + +! if (pos.lnum == oap->end.lnum) +! did_change = swapchars(oap->op_type, &pos, +! oap->end.col - pos.col + 1); +! else +! for (;;) +! { +! did_change |= swapchars(oap->op_type, &pos, +! pos.lnum == oap->end.lnum ? oap->end.col + 1: +! (int)STRLEN(ml_get_pos(&pos))); +! if (ltoreq(oap->end, pos) || inc(&pos) == -1) +! break; +! } + if (did_change) + { + changed_lines(oap->start.lnum, oap->start.col, oap->end.lnum + 1, +*************** +*** 2314,2330 **** + for (todo = length; todo > 0; --todo) + { + # ifdef FEAT_MBYTE +- int pos_col = pos->col; +- + if (has_mbyte) + /* we're counting bytes, not characters */ + todo -= (*mb_ptr2len)(ml_get_pos(pos)) - 1; + # endif + did_change |= swapchar(op_type, pos); +- # ifdef FEAT_MBYTE +- /* Changing German sharp s to SS increases the column. */ +- todo += pos->col - pos_col; +- # endif + if (inc(pos) == -1) /* at end of file */ + break; + } +--- 2325,2335 ---- +*** ../vim-7.1.242/src/testdir/test39.in Sun Jun 13 18:21:09 2004 +--- src/testdir/test39.in Wed Feb 6 13:57:37 2008 +*************** +*** 1,8 **** +--- 1,10 ---- + + Test Visual block mode commands ++ And test "U" in Visual mode, also on German sharp S. + + STARTTEST + :so small.vim ++ :so mbyte.vim + /^abcde + :" Test shift-right of a block + jlllljj>wlljlll> +*************** +*** 14,20 **** + Gllllkkklllrq + :" Test block-change + G$khhhhhkkcmno +! :$-4,$wq! test.out + ENDTEST + + abcdefghijklm +--- 16,37 ---- + Gllllkkklllrq + :" Test block-change + G$khhhhhkkcmno +! :$-4,$w! test.out +! :" gUe must uppercase a whole word, also when ß changes to SS +! Gothe youtußeuu endYpk0wgUe +! :" gUfx must uppercase until x, inclusive. +! O- youßtußexu -0fogUfx +! :" VU must uppercase a whole line +! YpkVU +! :" same, when it's the last line in the buffer +! YPGi111VUddP +! :" Uppercase two lines +! Oblah di +! doh dutVkUj +! :" Uppercase part of two lines +! ddppi333k0i222fyllvjfuUk +! :/^the/,$w >> test.out +! :qa! + ENDTEST + + abcdefghijklm +*** ../vim-7.1.242/src/testdir/test39.ok Sun Jun 13 18:59:28 2004 +--- src/testdir/test39.ok Tue Feb 5 22:25:38 2008 +*************** +*** 3,5 **** +--- 3,13 ---- + axyzqqqqef mno ghijklm + axyzqqqqefgmnoklm + abcdqqqqijklm ++ the YOUTUSSEUU end ++ - yOUSSTUSSEXu - ++ THE YOUTUSSEUU END ++ 111THE YOUTUSSEUU END ++ BLAH DI ++ DOH DUT ++ 222the yoUTUSSEUU END ++ 333THE YOUTUßeuu end +*** ../vim-7.1.242/src/version.c Sat Jan 26 21:15:00 2008 +--- src/version.c Wed Feb 6 14:41:00 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 243, + /**/ + +-- +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.1.244 b/7.1.244 new file mode 100644 index 00000000..6c4c43f2 --- /dev/null +++ b/7.1.244 @@ -0,0 +1,58 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.244 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.244 +Problem: GUI may have part of the command line cut off. +Solution: Don't round the number of lines up, always round down. + (Tony Houghton, Scott Dillard) +Files: src/gui.c + + +*** ../vim-7.1.243/src/gui.c Sat Jan 19 15:55:51 2008 +--- src/gui.c Wed Feb 6 16:43:44 2008 +*************** +*** 1294,1304 **** + out_flush(); + + gui.num_cols = (pixel_width - gui_get_base_width()) / gui.char_width; +! gui.num_rows = (pixel_height - gui_get_base_height() +! #if !defined(FEAT_GUI_PHOTON) && !defined(FEAT_GUI_MSWIN) +! + (gui.char_height / 2) +! #endif +! ) / gui.char_height; + + gui_position_components(pixel_width); + +--- 1294,1300 ---- + out_flush(); + + gui.num_cols = (pixel_width - gui_get_base_width()) / gui.char_width; +! gui.num_rows = (pixel_height - gui_get_base_height()) / gui.char_height; + + gui_position_components(pixel_width); + +*** ../vim-7.1.243/src/version.c Wed Feb 6 14:43:50 2008 +--- src/version.c Wed Feb 6 17:32:35 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 244, + /**/ + +-- +A consultant is a person who takes your money and annoys your employees while +tirelessly searching for the best way to extend the consulting contract. + (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.1.245 b/7.1.245 new file mode 100644 index 00000000..ce7a7b51 --- /dev/null +++ b/7.1.245 @@ -0,0 +1,92 @@ +To: vim-dev@vim.org +Subject: Patch 7.1.245 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.1.245 +Problem: Pressing CTRL-\ three times causes Vim to quit. (Ranganath Rao). + Also for f CTRL-\ CTRL-\. +Solution: When going to cooked mode in mch_delay() set a flag to ignore + SIGQUIT. +Files: src/os_unix.c + + +*** ../vim-7.1.244/src/os_unix.c Sun Jan 13 16:30:23 2008 +--- src/os_unix.c Sun Feb 10 22:07:27 2008 +*************** +*** 195,200 **** +--- 195,201 ---- + 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 */ + +*************** +*** 538,544 **** + if (ignoreinput) + { + /* Go to cooked mode without echo, to allow SIGINT interrupting us +! * here */ + old_tmode = curr_tmode; + if (curr_tmode == TMODE_RAW) + settmode(TMODE_SLEEP); +--- 539,547 ---- + if (ignoreinput) + { + /* Go to cooked mode without echo, to allow SIGINT interrupting us +! * here. But we don't want QUIT to kill us (CTRL-\ used in a +! * shell may produce SIGQUIT). */ +! in_mch_delay = TRUE; + old_tmode = curr_tmode; + if (curr_tmode == TMODE_RAW) + settmode(TMODE_SLEEP); +*************** +*** 602,607 **** +--- 605,611 ---- + #endif + + settmode(old_tmode); ++ in_mch_delay = FALSE; + } + else + WaitForChar(msec); +*************** +*** 922,927 **** +--- 926,939 ---- + #endif + + #ifdef SIGHASARG ++ # ifdef SIGQUIT ++ /* While in mch_delay() we go to cooked mode to allow a CTRL-C to ++ * interrupt us. But in cooked mode we may also get SIGQUIT, e.g., when ++ * pressing CTRL-\, but we don't want Vim to exit then. */ ++ if (in_mch_delay && sigarg == SIGQUIT) ++ SIGRETURN; ++ # endif ++ + /* When SIGHUP, SIGQUIT, etc. are blocked: postpone the effect and return + * here. This avoids that a non-reentrant function is interrupted, e.g., + * free(). Calling free() again may then cause a crash. */ +*** ../vim-7.1.244/src/version.c Wed Feb 6 17:33:19 2008 +--- src/version.c Sun Feb 10 22:04:09 2008 +*************** +*** 668,669 **** +--- 668,671 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 245, + /**/ + +-- +Me? A skeptic? I trust you have proof. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// diff --git a/README.patches b/README.patches index 90320331..159f3bba 100644 --- a/README.patches +++ b/README.patches @@ -107,6 +107,7 @@ Individual patches for Vim 7.1: 5259 7.1.074 crash when using string() on a recursively nested List 1686 7.1.075 ":let v:statusmsg" reads memory already freed 2376 7.1.076 a couple more strcpy() with overlapping arguments + 1551 7.1.077 "can_spell" is used without initializing it 2678 7.1.078 dropping file name on gvim containing CSI byte doesn't work 2922 7.1.079 "@" character in 'isfname' doesn't pick up umlauts for latin1 2960 7.1.080 (extra) Compiler warnings for gvimex.cpp @@ -242,3 +243,37 @@ Individual patches for Vim 7.1: 2249 7.1.209 GTK GUI: when using the netrw plugin ":gui" causes a hang 1923 7.1.210 listing mapping for 0xdb fails when 'encoding' is utf-8 25525 7.1.211 matchparen plugin may take so long it looks like Vim hangs + 1491 7.1.212 accessing a byte before a line + 1750 7.1.213 aborting ":tabedit" from the ATTENTION dialog leaves tab open + 8399 7.1.214 ":1s/g\n\zs1//" deletes characters from the first line + 6476 7.1.215 it's difficult to figure out the nesting of syntax items + 2360 7.1.216 variants of --remote-tab are not mentioned for "vim --help" + 7103 7.1.217 the "help-tags" tag may be missing from runtime/doc/tags + 1864 7.1.218 syntax region without "keepend" could be truncated + 12134 7.1.219 (after 7.1.215) synstack() doesn't work for one char region + 3928 7.1.220 cursor may end up on trail byte after ")" + 1978 7.1.221 when inserting a "(" the following highlighting may be wrong + 3531 7.1.222 (after 7.1.217) wildcards of ":helptags" are not expanded + 8138 7.1.223 glob() doesn't handle "'" when 'shell' is "sh" or "bash" + 2131 7.1.224 "vim -F -o one two" sets 'rightleft' in one window only + 1767 7.1.225 using unitialized value when XGetWMNormalHints() fails + 1957 7.1.226 command line completion fails for a file name with a '&' char + 5595 7.1.227 hang in syntax HL when moving over a ")" + 1678 7.1.228 with 'foldmethod' "indent" fold can't be closed after "3>>" + 1758 7.1.229 a fold is closed when backspacing in Insert mode + 2052 7.1.230 memory leak when executing SourceCmd autocommands + 8648 7.1.231 when shifting lines the change is acted upon multiple times + 2002 7.1.232 (after 7.1.207 and 7.1.211) compiler warnings with MSVC + 3249 7.1.233 crash with Insert mode completion for a user defined command + 6865 7.1.234 display problems when diff'ing three files + 5925 7.1.235 pattern matching is slow when using a lot of simple patterns + 28992 7.1.236 hang when using complicated pattern and 'hlsearch' or ":match" + 1704 7.1.237 compiler warning on an Alpha processor in Motif code + 1801 7.1.238 searchpair() may fail when using 'c' or 'r' flag + 1639 7.1.239 (after 7.1.233) compiler warning for sprintf() argument + 5157 7.1.240 "gUe" may stop before the end of the word + 3093 7.1.241 focus change events not always ignored + 2262 7.1.242 "cib" doesn't work properly on "(x)" + 4475 7.1.243 (after 7.1.240) "U" doesn't work on all text in Visual mode + 1847 7.1.244 GUI may have part of the command line cut off + 2767 7.1.245 pressing CTRL-\ three times causes Vim to quit diff --git a/vim-7.1-ada.patch b/vim-7.1-ada.patch new file mode 100644 index 00000000..85034696 --- /dev/null +++ b/vim-7.1-ada.patch @@ -0,0 +1,7018 @@ +diff -urN vim71/runtime/autoload/adacomplete.vim vim71_ada/runtime/autoload/adacomplete.vim +--- vim71/runtime/autoload/adacomplete.vim 2007-05-05 19:34:16.000000000 +0200 ++++ vim71_ada/runtime/autoload/adacomplete.vim 2008-01-16 16:46:40.000000000 +0100 +@@ -1,13 +1,13 @@ + "------------------------------------------------------------------------------ + " Description: Vim Ada omnicompletion file + " Language: Ada (2005) +-" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Maintainer: Martin Krischik +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/adacomplete.vim $ ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/adacomplete.vim $ + " History: 24.05.2006 MK Unified Headers + " 26.05.2006 MK improved search for begin of word. + " 16.07.2006 MK Ada-Mode as vim-ball +diff -urN vim71/runtime/autoload/ada.vim vim71_ada/runtime/autoload/ada.vim +--- vim71/runtime/autoload/ada.vim 2007-05-05 20:02:22.000000000 +0200 ++++ vim71_ada/runtime/autoload/ada.vim 2008-01-16 16:46:40.000000000 +0100 +@@ -1,14 +1,16 @@ + "------------------------------------------------------------------------------ + " Description: Perform Ada specific completion & tagging. + " Language: Ada (2005) +-" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ +-" Maintainer: Martin Krischik ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" Maintainer: Martin Krischik ++" Taylor Venable + " Neil Bird +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/ada.vim $ ++" Ned Okie ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/autoload/decada.vim $ ++" Maintainer: Martin Krischik ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" 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: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/compiler/decada.vim $ ++" Maintainer: Martin Krischik ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" 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: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ +-" Maintainer: Martin Krischik ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" Maintainer: Martin Krischik ++" Taylor Venable + " Neil Bird +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $ ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Copyright: Copyright (C) 2006 Martin Krischik +-" Maintainer: Martin Krischik ++" Maintainer: Martin Krischik + " Neil Bird +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/indent/ada.vim $ ++" Ned Okie ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++:: Maintainer: Martin Krischik ++:: Jason Heddings (vim at heddway dot com) ++:: $Author: karsten $ ++:: $Date: 2008/02/11 15:11:34 $ ++:: Version: 3.0 ++:: $Revision: 1.1 $ ++:: $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++# Maintainer: Martin Krischik ++# Jason Heddings (vim at heddway dot com) ++# $Author: karsten $ ++# $Date: 2008/02/11 15:11:34 $ ++# Version: 3.0 ++# $Revision: 1.1 $ ++# $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-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++# Maintainer: Martin Krischik ++# $Author: karsten $ ++# $Date: 2008/02/11 15:11:34 $ ++# Version: 3.6 ++# $Revision: 1.1 $ ++# $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: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ ++" $Id: vim-7.1-ada.patch,v 1.1 2008/02/11 15:11:34 karsten Exp $ + " Copyright: Copyright (C) 2006 Martin Krischik + " Maintainer: Martin Krischik + " David A. Wheeler + " Simon Bradley + " Contributors: Preben Randhol. +-" $Author: karsten $ +-" $Date: 2008/02/11 15:11:34 $ +-" Version: 4.2 +-" $Revision: 1.1 $ +-" $HeadURL: https://svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/syntax/ada.vim $ ++" $Author: karsten $ ++" $Date: 2008/02/11 15:11:34 $ ++" Version: 4.5 ++" $Revision: 1.1 $ ++" $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.spec b/vim.spec index 67fdd091..62900a38 100644 --- a/vim.spec +++ b/vim.spec @@ -1,6 +1,8 @@ # used for CVS snapshots: %define CVSDATE %{nil} +%if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1} %define WITH_SELINUX 1 +%endif %define desktop_file 1 %if %{desktop_file} %define desktop_file_utils_version 0.2.93 @@ -15,7 +17,7 @@ #used for pre-releases: %define beta %{nil} %define vimdir vim71%{?beta} -%define patchlevel 211 +%define patchlevel 245 Summary: The VIM editor URL: http://www.vim.org/ @@ -262,6 +264,37 @@ Patch208: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.208 Patch209: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.209 Patch210: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.210 Patch211: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.211 +Patch212: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.212 +Patch213: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.213 +Patch214: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.214 +Patch215: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.215 +Patch216: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.216 +Patch217: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.217 +Patch218: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.218 +Patch219: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.219 +Patch220: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.220 +Patch221: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.221 +Patch222: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.222 +Patch223: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.223 +Patch224: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.224 +Patch225: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.225 +Patch226: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.226 +Patch227: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.227 +Patch228: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.228 +Patch229: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.229 +Patch230: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.230 +Patch231: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.231 +Patch232: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.232 +Patch233: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.233 +Patch234: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.234 +Patch235: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.235 +Patch236: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.236 +Patch237: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.237 +Patch238: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.238 +Patch239: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.239 +Patch240: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.240 +Patch241: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.241 +Patch242: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.242 Patch3000: vim-7.0-syntax.patch Patch3002: vim-7.1-nowarnings.patch @@ -274,6 +307,8 @@ Patch3009: vim-7.0-warning.patch Patch3010: vim-7.0-syncolor.patch Patch3011: vim-7.0-vimspelltypo.patch Patch3012: vim-7.0-specedit.patch +# Remove this one when the runtime files get updated (#246378): +Patch3013: vim-7.1-ada.patch # Patch3100: vim-selinux.patch Patch3101: vim-selinux2.patch @@ -605,6 +640,37 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk %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 # install spell files @@ -624,6 +690,7 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk %patch3010 -p1 %patch3011 -p1 %patch3012 -p1 +%patch3013 -p1 %if %{WITH_SELINUX} %patch3100 -p1 @@ -991,8 +1058,31 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/icons/hicolor/*/apps/* %changelog -* Thu Jan 10 2008 Karsten Hopp 7.1.211-1 -- rebuild for F-8 +* 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 From c16b1f77fc33281b02f88962a408c5875b5a2e7b Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Thu, 26 Nov 2009 01:14:06 +0000 Subject: [PATCH 4/5] Fix typo that causes a failure to update the common directory. (releng #2781) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e93db5a4..8482b06e 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ NAME := vim SPECFILE = $(firstword $(wildcard *.spec)) define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done +for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done endef MAKEFILE_COMMON := $(shell $(find-makefile-common)) From 97eb68ee0a2b1bd6d039e39b1a1830d46399002d Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 29 Jul 2010 14:59:16 +0000 Subject: [PATCH 5/5] dist-git conversion --- .cvsignore => .gitignore | 0 Makefile | 21 --------------------- branch | 1 - 3 files changed, 22 deletions(-) rename .cvsignore => .gitignore (100%) delete mode 100644 Makefile delete mode 100644 branch diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index 8482b06e..00000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: vim -# $Id$ -NAME := vim -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attempt a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/branch b/branch deleted file mode 100644 index e9e7ccd3..00000000 --- a/branch +++ /dev/null @@ -1 +0,0 @@ -F-8