--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.082
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.082
+Problem: Calling a function that waits for input may cause List and
+ Dictionary arguments to be freed by the garbage collector.
+Solution: Keep a list of all arguments to internal functions.
+Files: src/eval.c
+
+
+*** ../vim-7.0.081/src/eval.c Sat Sep 2 13:45:01 2006
+--- src/eval.c Sun Sep 3 15:36:10 2006
+***************
+*** 248,253 ****
+--- 248,264 ----
+ };
+
+ /*
++ * Struct used to make a list of all arguments used in internal functions.
++ */
++ typedef struct av_list_item_S av_list_item_T;
++ struct av_list_item_S {
++ av_list_item_T *avl_next;
++ typval_T *avl_argvars;
++ };
++
++ av_list_item_T *argvars_list = NULL;
++
++ /*
+ * Info used by a ":for" loop.
+ */
+ typedef struct
+***************
+*** 6058,6063 ****
+--- 6069,6075 ----
+ int i;
+ funccall_T *fc;
+ int did_free = FALSE;
++ av_list_item_T *av;
+ #ifdef FEAT_WINDOWS
+ tabpage_T *tp;
+ #endif
+***************
+*** 6094,6099 ****
+--- 6106,6116 ----
+ set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
+ }
+
++ /* arguments for internal functions */
++ for (av = argvars_list; av != NULL; av = av->avl_next)
++ for (i = 0; av->avl_argvars[i].v_type != VAR_UNKNOWN; ++i)
++ set_ref_in_item(&av->avl_argvars[i], copyID);
++
+ /*
+ * 2. Go through the list of dicts and free items without the copyID.
+ */
+***************
+*** 7537,7545 ****
+--- 7554,7574 ----
+ error = ERROR_TOOMANY;
+ else
+ {
++ av_list_item_T av_list_item;
++
++ /* Add the arguments to the "argvars_list" to avoid the
++ * garbage collector not seeing them. This isn't needed
++ * for user functions, because the arguments are available
++ * in the a: hashtab. */
++ av_list_item.avl_argvars = argvars;
++ av_list_item.avl_next = argvars_list;
++ argvars_list = &av_list_item;
++
+ argvars[argcount].v_type = VAR_UNKNOWN;
+ functions[i].f_func(argvars, rettv);
+ error = ERROR_NONE;
++
++ argvars_list = av_list_item.avl_next;
+ }
+ }
+ }
+*** ../vim-7.0.081/src/version.c Sat Sep 2 17:58:36 2006
+--- src/version.c Sun Sep 3 15:35:16 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 82,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.083
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.083
+Problem: Clicking with the mouse on an item for inputlist() doesn't work
+ when 'compatible' is set and/or when 'cmdheight' is more than one.
+ (Christian J. Robinson)
+Solution: Also decrement "lines_left" when 'more' isn't set. Set
+ "cmdline_row" to zero to get all mouse events.
+Files: src/message.c, src/misc1.c
+
+
+*** ../vim-7.0.082/src/message.c Sat May 13 13:12:49 2006
+--- src/message.c Sun Sep 3 14:32:00 2006
+***************
+*** 1925,1931 ****
+ * If screen is completely filled and 'more' is set then wait
+ * for a character.
+ */
+! if (p_more && --lines_left == 0 && State != HITRETURN
+ && !msg_no_more && !exmode_active)
+ {
+ #ifdef FEAT_CON_DIALOG
+--- 1925,1932 ----
+ * If screen is completely filled and 'more' is set then wait
+ * for a character.
+ */
+! --lines_left;
+! if (p_more && lines_left == 0 && State != HITRETURN
+ && !msg_no_more && !exmode_active)
+ {
+ #ifdef FEAT_CON_DIALOG
+*** ../vim-7.0.082/src/misc1.c Tue Aug 15 22:26:04 2006
+--- src/misc1.c Sun Sep 3 16:33:48 2006
+***************
+*** 3196,3209 ****
+ else
+ MSG_PUTS(_("Choice number (<Enter> cancels): "));
+
+! /* Set the state such that text can be selected/copied/pasted. */
+ save_cmdline_row = cmdline_row;
+! cmdline_row = Rows - 1;
+ save_State = State;
+! if (mouse_used == NULL)
+! State = CMDLINE;
+! else
+! State = NORMAL;
+
+ i = get_number(TRUE, mouse_used);
+ if (KeyTyped)
+--- 3196,3207 ----
+ else
+ MSG_PUTS(_("Choice number (<Enter> cancels): "));
+
+! /* Set the state such that text can be selected/copied/pasted and we still
+! * get mouse events. */
+ save_cmdline_row = cmdline_row;
+! cmdline_row = 0;
+ save_State = State;
+! State = CMDLINE;
+
+ i = get_number(TRUE, mouse_used);
+ if (KeyTyped)
+*** ../vim-7.0.082/src/version.c Sun Sep 3 15:38:02 2006
+--- src/version.c Sun Sep 3 16:36:58 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 83,
+ /**/
+
+--
+ "To whoever finds this note -
+ I have been imprisoned by my father who wishes me to marry
+ against my will. Please please please please come and rescue me.
+ I am in the tall tower of Swamp Castle."
+ SIR LAUNCELOT's eyes light up with holy inspiration.
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.084
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.084
+Problem: The garbage collector may do its work while some Lists or
+ Dictionaries are used internally, e.g., by ":echo" that runs into
+ the more-prompt or ":echo [garbagecollect()]".
+Solution: Only do garbage collection when waiting for a character at the
+ toplevel. Let garbagecollect() set a flag that is handled at the
+ toplevel before waiting for a character.
+Files: src/eval.c, src/getchar.c, src/globals.h, src/main.c
+
+
+*** ../vim-7.0.083/src/eval.c Sun Sep 3 15:38:02 2006
+--- src/eval.c Tue Sep 5 11:49:38 2006
+***************
+*** 6074,6079 ****
+--- 6074,6083 ----
+ tabpage_T *tp;
+ #endif
+
++ /* Only do this once. */
++ want_garbage_collect = FALSE;
++ may_garbage_collect = FALSE;
++
+ /*
+ * 1. Go through all accessible variables and mark all lists and dicts
+ * with copyID.
+***************
+*** 9636,9642 ****
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+! garbage_collect();
+ }
+
+ /*
+--- 9640,9648 ----
+ typval_T *argvars;
+ typval_T *rettv;
+ {
+! /* This is postponed until we are back at the toplevel, because we may be
+! * using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */
+! want_garbage_collect = TRUE;
+ }
+
+ /*
+*** ../vim-7.0.083/src/getchar.c Wed May 3 23:19:24 2006
+--- src/getchar.c Tue Sep 5 12:55:54 2006
+***************
+*** 1451,1457 ****
+ {
+ updatescript(0);
+ #ifdef FEAT_EVAL
+! garbage_collect();
+ #endif
+ }
+
+--- 1451,1458 ----
+ {
+ updatescript(0);
+ #ifdef FEAT_EVAL
+! if (may_garbage_collect)
+! garbage_collect();
+ #endif
+ }
+
+***************
+*** 1502,1507 ****
+--- 1503,1515 ----
+ int i;
+ #endif
+
++ #ifdef FEAT_EVAL
++ /* Do garbage collection when garbagecollect() was called previously and
++ * we are now at the toplevel. */
++ if (may_garbage_collect && want_garbage_collect)
++ garbage_collect();
++ #endif
++
+ /*
+ * If a character was put back with vungetc, it was already processed.
+ * Return it directly.
+***************
+*** 1511,1523 ****
+ c = old_char;
+ old_char = -1;
+ mod_mask = old_mod_mask;
+- return c;
+ }
+!
+! mod_mask = 0x0;
+! last_recorded_len = 0;
+! for (;;) /* this is done twice if there are modifiers */
+ {
+ if (mod_mask) /* no mapping after modifier has been read */
+ {
+ ++no_mapping;
+--- 1519,1531 ----
+ c = old_char;
+ old_char = -1;
+ mod_mask = old_mod_mask;
+ }
+! else
+ {
++ mod_mask = 0x0;
++ last_recorded_len = 0;
++ for (;;) /* this is done twice if there are modifiers */
++ {
+ if (mod_mask) /* no mapping after modifier has been read */
+ {
+ ++no_mapping;
+***************
+*** 1695,1702 ****
+ }
+ #endif
+
+! return c;
+ }
+ }
+
+ /*
+--- 1703,1722 ----
+ }
+ #endif
+
+! break;
+! }
+ }
++
++ #ifdef FEAT_EVAL
++ /*
++ * In the main loop "may_garbage_collect" can be set to do garbage
++ * collection in the first next vgetc(). It's disabled after that to
++ * avoid internally used Lists and Dicts to be freed.
++ */
++ may_garbage_collect = FALSE;
++ #endif
++
++ return c;
+ }
+
+ /*
+*** ../vim-7.0.083/src/globals.h Sat Sep 2 14:52:41 2006
+--- src/globals.h Tue Sep 5 11:46:10 2006
+***************
+*** 300,308 ****
+ #endif
+
+ #ifdef FEAT_EVAL
+! EXTERN scid_T current_SID INIT(= 0); /* ID of script being sourced or
+! was sourced to define the
+! current function. */
+ #endif
+
+ #if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)
+--- 300,315 ----
+ #endif
+
+ #ifdef FEAT_EVAL
+! /* Garbage collection can only take place when we are sure there are no Lists
+! * or Dictionaries being used internally. This is flagged with
+! * "may_garbage_collect" when we are at the toplevel.
+! * "want_garbage_collect" is set by the garbagecollect() function, which means
+! * we do garbage collection before waiting for a char at the toplevel. */
+! EXTERN int may_garbage_collect INIT(= FALSE);
+! EXTERN int want_garbage_collect INIT(= FALSE);
+!
+! /* ID of script being sourced or was sourced to define the current function. */
+! EXTERN scid_T current_SID INIT(= 0);
+ #endif
+
+ #if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)
+*** ../vim-7.0.083/src/main.c Tue Aug 29 17:28:56 2006
+--- src/main.c Tue Sep 5 12:33:47 2006
+***************
+*** 1130,1135 ****
+--- 1130,1145 ----
+ */
+ update_curswant();
+
++ #ifdef FEAT_EVAL
++ /*
++ * May perform garbage collection when waiting for a character, but
++ * only at the very toplevel. Otherwise we may be using a List or
++ * Dict internally somewhere.
++ * "may_garbage_collect" is reset in vgetc() which is invoked through
++ * do_exmode() and normal_cmd().
++ */
++ may_garbage_collect = (!cmdwin && !noexmode);
++ #endif
+ /*
+ * If we're invoked as ex, do a round of ex commands.
+ * Otherwise, get and execute a normal mode command.
+*** ../vim-7.0.083/src/version.c Sun Sep 3 16:39:51 2006
+--- src/version.c Tue Sep 5 12:51:28 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 84,
+ /**/
+
+--
+LAUNCELOT: At last! A call! A cry of distress ...
+ (he draws his sword, and turns to CONCORDE)
+ Concorde! Brave, Concorde ... you shall not have died in vain!
+CONCORDE: I'm not quite dead, 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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.085
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.085
+Problem: When doing "make test" the viminfo file is modified.
+Solution: Use another viminfo file after setting 'compatible.
+Files: src/testdir/test56.in
+
+
+*** ../vim-7.0.084/src/testdir/test56.in Thu May 19 00:21:20 2005
+--- src/testdir/test56.in Sun Sep 3 16:28:41 2006
+***************
+*** 3,9 ****
+ STARTTEST
+ :so small.vim
+ :"
+! :set nocp
+ :/^start:/+1,/^end:/-1w! Xtest.vim
+ :source Xtest.vim
+ _x
+--- 3,9 ----
+ STARTTEST
+ :so small.vim
+ :"
+! :set nocp viminfo+=nviminfo
+ :/^start:/+1,/^end:/-1w! Xtest.vim
+ :source Xtest.vim
+ _x
+*** ../vim-7.0.084/src/version.c Tue Sep 5 12:57:14 2006
+--- src/version.c Tue Sep 5 13:33:22 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 85,
+ /**/
+
+--
+Apologies for taking up the bandwidth with the apology. Anything else I
+can apologise for ...... er no can't think of anything, sorry about that.
+ Andy Hunt (Member of British Olympic Apology Squad)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.086
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.086
+Problem: getqflist() returns entries for pattern and text with the number
+ zero. Passing these to setqflist() results in the string "0".
+Solution: Use an empty string instead of the number zero.
+Files: src/quickfix.c
+
+
+*** ../vim-7.0.085/src/quickfix.c Tue Aug 29 17:28:56 2006
+--- src/quickfix.c Mon Sep 4 20:18:48 2006
+***************
+*** 3426,3433 ****
+ || dict_add_nr_str(dict, "col", (long)qfp->qf_col, NULL) == FAIL
+ || dict_add_nr_str(dict, "vcol", (long)qfp->qf_viscol, NULL) == FAIL
+ || dict_add_nr_str(dict, "nr", (long)qfp->qf_nr, NULL) == FAIL
+! || dict_add_nr_str(dict, "pattern", 0L, qfp->qf_pattern) == FAIL
+! || dict_add_nr_str(dict, "text", 0L, qfp->qf_text) == FAIL
+ || dict_add_nr_str(dict, "type", 0L, buf) == FAIL
+ || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
+ return FAIL;
+--- 3426,3435 ----
+ || dict_add_nr_str(dict, "col", (long)qfp->qf_col, NULL) == FAIL
+ || dict_add_nr_str(dict, "vcol", (long)qfp->qf_viscol, NULL) == FAIL
+ || dict_add_nr_str(dict, "nr", (long)qfp->qf_nr, NULL) == FAIL
+! || dict_add_nr_str(dict, "pattern", 0L,
+! qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL
+! || dict_add_nr_str(dict, "text", 0L,
+! qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL
+ || dict_add_nr_str(dict, "type", 0L, buf) == FAIL
+ || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
+ return FAIL;
+*** ../vim-7.0.085/src/version.c Tue Sep 5 13:34:30 2006
+--- src/version.c Tue Sep 5 15:35:40 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 86,
+ /**/
+
+--
+A vacation is a period of travel during which you find that you
+took twice as many clothes and half as much money as you needed.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.087
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.087
+Problem: After ":file fname" and ":saveas fname" the 'autochdir' option
+ does not take effect. (Yakov Lerner)
+ Commands for handling 'autochdir' are repeated many times.
+Solution: Add the DO_AUTOCHDIR macro and do_autochdir(). Use it for
+ ":file fname" and ":saveas fname".
+Files: src/proto/buffer.pro, src/buffer.c, src/ex_cmds.c, src/macros.h,
+ src/option.c, src/window.c
+
+
+*** ../vim-7.0.086/src/proto/buffer.pro Sun Apr 30 20:25:32 2006
+--- src/proto/buffer.pro Tue Sep 5 16:25:40 2006
+***************
+*** 10,15 ****
+--- 10,16 ----
+ extern int do_buffer __ARGS((int action, int start, int dir, int count, int forceit));
+ extern void set_curbuf __ARGS((buf_T *buf, int action));
+ extern void enter_buffer __ARGS((buf_T *buf));
++ extern void do_autochdir __ARGS((void));
+ extern buf_T *buflist_new __ARGS((char_u *ffname, char_u *sfname, linenr_T lnum, int flags));
+ extern void free_buf_options __ARGS((buf_T *buf, int free_p_ff));
+ extern int buflist_getfile __ARGS((int n, linenr_T lnum, int options, int forceit));
+*** ../vim-7.0.086/src/buffer.c Tue Aug 29 16:52:01 2006
+--- src/buffer.c Tue Sep 5 15:18:19 2006
+***************
+*** 434,445 ****
+ if (usingNetbeans)
+ netbeans_file_closed(buf);
+ #endif
+! #ifdef FEAT_AUTOCHDIR
+! /* Change directories when the acd option is set on. */
+! if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+! shorten_fnames(TRUE);
+! #endif
+
+ /*
+ * Remove the buffer from the list.
+--- 434,441 ----
+ if (usingNetbeans)
+ netbeans_file_closed(buf);
+ #endif
+! /* Change directories when the 'acd' option is set. */
+! DO_AUTOCHDIR
+
+ /*
+ * Remove the buffer from the list.
+***************
+*** 1422,1433 ****
+ netbeans_file_activated(curbuf);
+ #endif
+
+! #ifdef FEAT_AUTOCHDIR
+! /* Change directories when the acd option is set on. */
+! if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+! shorten_fnames(TRUE);
+! #endif
+
+ #ifdef FEAT_KEYMAP
+ if (curbuf->b_kmap_state & KEYMAP_INIT)
+--- 1418,1425 ----
+ netbeans_file_activated(curbuf);
+ #endif
+
+! /* Change directories when the 'acd' option is set. */
+! DO_AUTOCHDIR
+
+ #ifdef FEAT_KEYMAP
+ if (curbuf->b_kmap_state & KEYMAP_INIT)
+***************
+*** 1435,1440 ****
+--- 1427,1444 ----
+ #endif
+ redraw_later(NOT_VALID);
+ }
++
++ #if defined(FEAT_AUTOCHDIR) || defined(PROTO)
++ /*
++ * Change to the directory of the current buffer.
++ */
++ void
++ do_autochdir()
++ {
++ if (curbuf->b_ffname != NULL && vim_chdirfile(curbuf->b_ffname) == OK)
++ shorten_fnames(TRUE);
++ }
++ #endif
+
+ /*
+ * functions for dealing with the buffer list
+*** ../vim-7.0.086/src/ex_cmds.c Tue Aug 29 17:28:56 2006
+--- src/ex_cmds.c Tue Sep 5 15:24:58 2006
+***************
+*** 2458,2463 ****
+--- 2458,2465 ----
+ #ifdef FEAT_AUTOCMD
+ apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
+ #endif
++ /* Change directories when the 'acd' option is set. */
++ DO_AUTOCHDIR
+ }
+ /* print full file name if :cd used */
+ fileinfo(FALSE, FALSE, eap->forceit);
+***************
+*** 2675,2682 ****
+ eap, eap->append, eap->forceit, TRUE, FALSE);
+
+ /* After ":saveas fname" reset 'readonly'. */
+! if (eap->cmdidx == CMD_saveas && retval == OK)
+! curbuf->b_p_ro = FALSE;
+ }
+
+ theend:
+--- 2677,2689 ----
+ eap, eap->append, eap->forceit, TRUE, FALSE);
+
+ /* After ":saveas fname" reset 'readonly'. */
+! if (eap->cmdidx == CMD_saveas)
+! {
+! if (retval == OK)
+! curbuf->b_p_ro = FALSE;
+! /* Change directories when the 'acd' option is set. */
+! DO_AUTOCHDIR
+! }
+ }
+
+ theend:
+***************
+*** 3547,3557 ****
+ foldUpdateAll(curwin);
+ #endif
+
+! #ifdef FEAT_AUTOCHDIR
+! if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+! shorten_fnames(TRUE);
+! #endif
+ /*
+ * Careful: open_buffer() and apply_autocmds() may change the current
+ * buffer and window.
+--- 3554,3562 ----
+ foldUpdateAll(curwin);
+ #endif
+
+! /* Change directories when the 'acd' option is set. */
+! DO_AUTOCHDIR
+!
+ /*
+ * Careful: open_buffer() and apply_autocmds() may change the current
+ * buffer and window.
+***************
+*** 3718,3729 ****
+ if (p_im)
+ need_start_insertmode = TRUE;
+
+! #ifdef FEAT_AUTOCHDIR
+! /* Change directories when the acd option is set on. */
+! if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+! shorten_fnames(TRUE);
+! #endif
+
+ #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG)
+ if (gui.in_use && curbuf->b_ffname != NULL)
+--- 3723,3730 ----
+ if (p_im)
+ need_start_insertmode = TRUE;
+
+! /* Change directories when the 'acd' option is set. */
+! DO_AUTOCHDIR
+
+ #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG)
+ if (gui.in_use && curbuf->b_ffname != NULL)
+*** ../vim-7.0.086/src/macros.h Wed Mar 1 23:00:25 2006
+--- src/macros.h Tue Sep 5 15:15:30 2006
+***************
+*** 276,278 ****
+--- 276,284 ----
+ # define MB_CHARLEN(p) STRLEN(p)
+ # define PTR2CHAR(p) ((int)*(p))
+ #endif
++
++ #ifdef FEAT_AUTOCHDIR
++ # define DO_AUTOCHDIR if (p_acd) do_autochdir();
++ #else
++ # define DO_AUTOCHDIR
++ #endif
+*** ../vim-7.0.086/src/option.c Tue Aug 29 17:28:56 2006
+--- src/option.c Tue Sep 5 15:20:04 2006
+***************
+*** 7326,7334 ****
+ #ifdef FEAT_AUTOCHDIR
+ else if ((int *)varp == &p_acd)
+ {
+! if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+! shorten_fnames(TRUE);
+ }
+ #endif
+
+--- 7326,7333 ----
+ #ifdef FEAT_AUTOCHDIR
+ else if ((int *)varp == &p_acd)
+ {
+! /* Change directories when the 'acd' option is set now. */
+! DO_AUTOCHDIR
+ }
+ #endif
+
+*** ../vim-7.0.086/src/window.c Tue Aug 29 17:28:56 2006
+--- src/window.c Tue Sep 5 15:20:35 2006
+***************
+*** 3954,3966 ****
+ setmouse(); /* in case jumped to/from help buffer */
+ #endif
+
+! #ifdef FEAT_AUTOCHDIR
+! /* Change directories when the 'acd' option is set on and after
+! * switching windows. */
+! if (p_acd && curbuf->b_ffname != NULL
+! && vim_chdirfile(curbuf->b_ffname) == OK)
+! shorten_fnames(TRUE);
+! #endif
+ }
+
+ #endif /* FEAT_WINDOWS */
+--- 3954,3961 ----
+ setmouse(); /* in case jumped to/from help buffer */
+ #endif
+
+! /* Change directories when the 'acd' option is set. */
+! DO_AUTOCHDIR
+ }
+
+ #endif /* FEAT_WINDOWS */
+*** ../vim-7.0.086/src/version.c Tue Sep 5 15:36:30 2006
+--- src/version.c Tue Sep 5 15:52:45 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 87,
+ /**/
+
+--
+Overflow on /dev/null, please empty the bit bucket.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.088
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.088
+Problem: When compiled with Perl the generated prototypes have "extern"
+ unnecessarily added.
+Solution: Remove the "-pipe" argument from PERL_CFLAGS.
+Files: src/auto/configure, src/configure.in
+
+
+*** ../vim-7.0.087/src/auto/configure Thu May 4 23:52:03 2006
+--- src/auto/configure Tue Sep 5 17:09:55 2006
+***************
+*** 4014,4020 ****
+ LDFLAGS=$ldflags_save
+ if test $perl_ok = yes; then
+ if test "X$perlcppflags" != "X"; then
+! PERL_CFLAGS="$perlcppflags"
+ fi
+ if test "X$perlldflags" != "X"; then
+ LDFLAGS="$perlldflags $LDFLAGS"
+--- 4014,4020 ----
+ LDFLAGS=$ldflags_save
+ if test $perl_ok = yes; then
+ if test "X$perlcppflags" != "X"; then
+! PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
+ fi
+ if test "X$perlldflags" != "X"; then
+ LDFLAGS="$perlldflags $LDFLAGS"
+*** ../vim-7.0.087/src/configure.in Thu May 4 23:52:32 2006
+--- src/configure.in Tue Sep 5 17:09:50 2006
+***************
+*** 508,514 ****
+ LDFLAGS=$ldflags_save
+ if test $perl_ok = yes; then
+ if test "X$perlcppflags" != "X"; then
+! PERL_CFLAGS="$perlcppflags"
+ fi
+ if test "X$perlldflags" != "X"; then
+ LDFLAGS="$perlldflags $LDFLAGS"
+--- 508,515 ----
+ LDFLAGS=$ldflags_save
+ if test $perl_ok = yes; then
+ if test "X$perlcppflags" != "X"; then
+! dnl remove -pipe, it confuses cproto
+! PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
+ fi
+ if test "X$perlldflags" != "X"; then
+ LDFLAGS="$perlldflags $LDFLAGS"
+*** ../vim-7.0.087/src/version.c Tue Sep 5 16:29:38 2006
+--- src/version.c Tue Sep 5 17:27:33 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 88,
+ /**/
+
+--
+ ** Hello and Welcome to the Psychiatric Hotline **
+If you are obsessive-compulsive, please press 1 repeatedly.
+If you are co-dependent, please ask someone to press 2.
+If you have multiple personalities, please press 3, 4, 5 and 6.
+If you are paranoid-delusional, we know who you are and what you want
+ - just stay on the line so we can trace the call.
+If you are schizophrenic, listen carefully and a little voice will
+ tell you which number to press next.
+If you are manic-depressive, it doesn't matter which number you press
+ - no one will answer.
+If you suffer from panic attacks, push every button you can find.
+If you are sane, please hold on - we have the rest of humanity on the
+ other line and they desparately want to ask you a few questions.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.089
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.089
+Problem: "ga" does not work properly for a non-Unicode multi-byte encoding.
+Solution: Only check for composing chars for utf-8. (Taro Muraoka)
+Files: src/ex_cmds.c
+
+
+*** ../vim-7.0.088/src/ex_cmds.c Tue Sep 5 16:29:38 2006
+--- src/ex_cmds.c Tue Sep 5 18:12:41 2006
+***************
+*** 95,101 ****
+ _("<%s>%s%s %d, Hex %02x, Octal %03o"),
+ transchar(c), buf1, buf2, c, c, c);
+ #ifdef FEAT_MBYTE
+! c = cc[ci++];
+ #endif
+ }
+
+--- 95,104 ----
+ _("<%s>%s%s %d, Hex %02x, Octal %03o"),
+ transchar(c), buf1, buf2, c, c, c);
+ #ifdef FEAT_MBYTE
+! if (enc_utf8)
+! c = cc[ci++];
+! else
+! c = 0;
+ #endif
+ }
+
+***************
+*** 108,114 ****
+ if (len > 0)
+ IObuff[len++] = ' ';
+ IObuff[len++] = '<';
+! if (utf_iscomposing(c)
+ # ifdef USE_GUI
+ && !gui.in_use
+ # endif
+--- 111,117 ----
+ if (len > 0)
+ IObuff[len++] = ' ';
+ IObuff[len++] = '<';
+! if (enc_utf8 && utf_iscomposing(c)
+ # ifdef USE_GUI
+ && !gui.in_use
+ # endif
+***************
+*** 120,126 ****
+ : _("> %d, Hex %08x, Octal %o"), c, c, c);
+ if (ci == MAX_MCO)
+ break;
+! c = cc[ci++];
+ }
+ #endif
+
+--- 123,132 ----
+ : _("> %d, Hex %08x, Octal %o"), c, c, c);
+ if (ci == MAX_MCO)
+ break;
+! if (enc_utf8)
+! c = cc[ci++];
+! else
+! c = 0;
+ }
+ #endif
+
+*** ../vim-7.0.088/src/version.c Tue Sep 5 17:30:25 2006
+--- src/version.c Tue Sep 5 18:19:42 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 89,
+ /**/
+
+--
+ [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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.090
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.090
+Problem: Cancelling the conform() dialog on the console with Esc requires
+ typing it twice. (Benji Fisher)
+Solution: When the start of an escape sequence is found use 'timeoutlen' or
+ 'ttimeoutlen'.
+Files: src/misc1.c
+
+
+*** ../vim-7.0.089/src/misc1.c Sun Sep 3 16:39:51 2006
+--- src/misc1.c Tue Sep 5 20:31:43 2006
+***************
+*** 3016,3021 ****
+--- 3016,3022 ----
+ int len = 0;
+ int n;
+ int save_mapped_ctrl_c = mapped_ctrl_c;
++ int waited = 0;
+
+ mapped_ctrl_c = FALSE; /* mappings are not used here */
+ for (;;)
+***************
+*** 3034,3044 ****
+ /* Replace zero and CSI by a special key code. */
+ n = fix_input_buffer(buf + len, n, FALSE);
+ len += n;
+ }
+
+! /* incomplete termcode: get more characters */
+! if ((n = check_termcode(1, buf, len)) < 0)
+ continue;
+ /* found a termcode: adjust length */
+ if (n > 0)
+ len = n;
+--- 3035,3050 ----
+ /* Replace zero and CSI by a special key code. */
+ n = fix_input_buffer(buf + len, n, FALSE);
+ len += n;
++ waited = 0;
+ }
++ else if (len > 0)
++ ++waited; /* keep track of the waiting time */
+
+! /* Incomplete termcode and not timed out yet: get more characters */
+! if ((n = check_termcode(1, buf, len)) < 0
+! && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ continue;
++
+ /* found a termcode: adjust length */
+ if (n > 0)
+ len = n;
+*** ../vim-7.0.089/src/version.c Tue Sep 5 18:28:45 2006
+--- src/version.c Tue Sep 5 20:49:01 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 90,
+ /**/
+
+--
+GUARD #1: Where'd you get the coconut?
+ARTHUR: We found them.
+GUARD #1: Found them? In Mercea? The coconut's tropical!
+ARTHUR: What do you mean?
+GUARD #1: Well, this is a temperate zone.
+ The Quest for the Holy Grail (Monty Python)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.091
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.091
+Problem: Using winrestview() while 'showcmd' is set causes the cursor to be
+ displayed in the wrong position. (Yakov Lerner)
+Solution: Set the window topline properly.
+Files: src/eval.c
+
+
+*** ../vim-7.0.090/src/eval.c Tue Sep 5 12:57:14 2006
+--- src/eval.c Tue Sep 5 21:21:37 2006
+***************
+*** 16225,16231 ****
+ curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
+ curwin->w_set_curswant = FALSE;
+
+! curwin->w_topline = get_dict_number(dict, (char_u *)"topline");
+ #ifdef FEAT_DIFF
+ curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+ #endif
+--- 16225,16231 ----
+ curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
+ curwin->w_set_curswant = FALSE;
+
+! set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
+ #ifdef FEAT_DIFF
+ curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+ #endif
+*** ../vim-7.0.090/src/version.c Tue Sep 5 20:56:11 2006
+--- src/version.c Wed Sep 6 22:12:31 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 91,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.092
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.092 (after 7.0.082 and 7.0.084)
+Problem: The list of internal function arguments is obsolete now that
+ garbage collection is only done at the toplevel.
+Solution: Remove the list of all arguments to internal functions.
+Files: src/eval.c
+
+
+*** ../vim-7.0.091/src/eval.c Wed Sep 6 22:14:42 2006
+--- src/eval.c Sat Sep 9 12:00:28 2006
+***************
+*** 248,264 ****
+ };
+
+ /*
+- * Struct used to make a list of all arguments used in internal functions.
+- */
+- typedef struct av_list_item_S av_list_item_T;
+- struct av_list_item_S {
+- av_list_item_T *avl_next;
+- typval_T *avl_argvars;
+- };
+-
+- av_list_item_T *argvars_list = NULL;
+-
+- /*
+ * Info used by a ":for" loop.
+ */
+ typedef struct
+--- 248,253 ----
+***************
+*** 6069,6075 ****
+ int i;
+ funccall_T *fc;
+ int did_free = FALSE;
+- av_list_item_T *av;
+ #ifdef FEAT_WINDOWS
+ tabpage_T *tp;
+ #endif
+--- 6058,6063 ----
+***************
+*** 6110,6120 ****
+ set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
+ }
+
+- /* arguments for internal functions */
+- for (av = argvars_list; av != NULL; av = av->avl_next)
+- for (i = 0; av->avl_argvars[i].v_type != VAR_UNKNOWN; ++i)
+- set_ref_in_item(&av->avl_argvars[i], copyID);
+-
+ /*
+ * 2. Go through the list of dicts and free items without the copyID.
+ */
+--- 6098,6103 ----
+***************
+*** 7558,7578 ****
+ error = ERROR_TOOMANY;
+ else
+ {
+- av_list_item_T av_list_item;
+-
+- /* Add the arguments to the "argvars_list" to avoid the
+- * garbage collector not seeing them. This isn't needed
+- * for user functions, because the arguments are available
+- * in the a: hashtab. */
+- av_list_item.avl_argvars = argvars;
+- av_list_item.avl_next = argvars_list;
+- argvars_list = &av_list_item;
+-
+ argvars[argcount].v_type = VAR_UNKNOWN;
+ functions[i].f_func(argvars, rettv);
+ error = ERROR_NONE;
+-
+- argvars_list = av_list_item.avl_next;
+ }
+ }
+ }
+--- 7541,7549 ----
+*** ../vim-7.0.091/src/version.c Wed Sep 6 22:14:42 2006
+--- src/version.c Sat Sep 9 12:04:55 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 92,
+ /**/
+
+--
+"Hegel was right when he said that we learn from history that man can
+never learn anything from history." (George Bernard Shaw)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.093
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.093
+Problem: The matchparen plugin can't handle a 'matchpairs' value where a
+ colon is matched.
+Solution: Change the split() that is used to change 'matchpairs' into a
+ List.
+Files: runtime/plugin/matchparen.vim
+
+
+*** ../vim-7.0.092/runtime/plugin/matchparen.vim Wed Sep 6 22:13:48 2006
+--- runtime/plugin/matchparen.vim Sat Sep 9 13:35:54 2006
+***************
+*** 1,6 ****
+ " Vim plugin for showing matching parens
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2006 Jun 26
+
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+--- 1,6 ----
+ " Vim plugin for showing matching parens
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2006 Sep 09
+
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+***************
+*** 44,50 ****
+ let before = 0
+
+ let c = getline(c_lnum)[c_col - 1]
+! let plist = split(&matchpairs, ':\|,')
+ let i = index(plist, c)
+ if i < 0
+ " not found, in Insert mode try character before the cursor
+--- 44,50 ----
+ let before = 0
+
+ let c = getline(c_lnum)[c_col - 1]
+! let plist = split(&matchpairs, '.\zs[:,]')
+ let i = index(plist, c)
+ if i < 0
+ " not found, in Insert mode try character before the cursor
+*** ../vim-7.0.092/src/version.c Sat Sep 9 12:05:39 2006
+--- src/version.c Sat Sep 9 13:29:58 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 93,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.094
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.094
+Problem: When a hidden buffer is made the current buffer and another file
+ edited later, the file message will still be given. Using
+ ":silent" also doesn't prevent the file message. (Marvin Renich)
+Solution: Reset the need_fileinfo flag when reading a file. Don't set
+ need_fileinfo when msg_silent is set.
+Files: src/buffer.c, src/fileio.c
+
+
+*** ../vim-7.0.093/src/buffer.c Tue Sep 5 16:29:38 2006
+--- src/buffer.c Thu Sep 7 21:43:41 2006
+***************
+*** 1386,1392 ****
+ }
+ else
+ {
+! need_fileinfo = TRUE; /* display file info after redraw */
+ (void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
+ #ifdef FEAT_AUTOCMD
+ curwin->w_topline = 1;
+--- 1386,1393 ----
+ }
+ else
+ {
+! if (!msg_silent)
+! need_fileinfo = TRUE; /* display file info after redraw */
+ (void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
+ #ifdef FEAT_AUTOCMD
+ curwin->w_topline = 1;
+*** ../vim-7.0.093/src/fileio.c Tue Aug 29 18:16:37 2006
+--- src/fileio.c Wed Sep 6 22:54:19 2006
+***************
+*** 316,321 ****
+--- 316,324 ----
+ * display the line. */
+ ex_no_reprint = TRUE;
+
++ /* don't display the file info for another buffer now */
++ need_fileinfo = FALSE;
++
+ /*
+ * For Unix: Use the short file name whenever possible.
+ * Avoids problems with networks and when directory names are changed.
+*** ../vim-7.0.093/src/version.c Sat Sep 9 13:36:51 2006
+--- src/version.c Sat Sep 9 14:19:04 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 94,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.095
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.095
+Problem: The Greek tutor is not available in utf-8. "el" is used for the
+ language, only "gr" for the country is recognized.
+Solution: Add the utf-8 Greek tutor. Use it for conversion to iso-8859-7
+ and cp737. (Lefteris Dimitroulakis)
+Files: runtime/tutor/Makefile, runtime/tutor/tutor.gr.utf-8,
+ runtime/tutor/tutor.vim
+
+
+*** ../vim-7.0.094/runtime/tutor/Makefile Sat Sep 2 14:54:17 2006
+--- runtime/tutor/Makefile Sun Sep 10 11:56:54 2006
+***************
+*** 7,13 ****
+
+ all: tutor.ja.sjis tutor.ja.euc \
+ tutor.ko.euc \
+! tutor.ru tutor.ru.cp1251
+
+ tutor.ja.sjis: tutor.ja.utf-8
+ nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis
+--- 7,14 ----
+
+ all: tutor.ja.sjis tutor.ja.euc \
+ tutor.ko.euc \
+! tutor.ru tutor.ru.cp1251 \
+! tutor.gr tutor.gr.cp737
+
+ tutor.ja.sjis: tutor.ja.utf-8
+ nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis
+***************
+*** 23,25 ****
+--- 24,32 ----
+
+ tutor.ru.cp1251: tutor.ru.utf-8
+ iconv -f UTF-8 -t cp1251 tutor.ru.utf-8 > tutor.ru.cp1251
++
++ tutor.gr: tutor.gr.utf-8
++ iconv -f UTF-8 -t ISO-8859-7 tutor.gr.utf-8 > tutor.gr
++
++ tutor.gr.cp737: tutor.gr.utf-8
++ iconv -f UTF-8 -t cp737 tutor.gr.utf-8 > tutor.gr.cp737
+*** ../vim-7.0.094/runtime/tutor/tutor.gr.utf-8 Sun Sep 10 13:20:58 2006
+--- runtime/tutor/tutor.gr.utf-8 Sun Sep 10 11:54:10 2006
+***************
+*** 0 ****
+--- 1,815 ----
++ ===============================================================================
++ = Κ αλ ω σ ή ρ θ α τ ε σ τ ο V I M T u t o r - Έκδοση 1.5 =
++ ===============================================================================
++
++ Ο Vim είναι ένας πανίσχυρος συντάκτης που έχει πολλές εντολές, πάρα
++ πολλές για να εξηγήσουμε σε μία περιήγηση όπως αυτή. Αυτή η περιήγηση
++ σχεδιάστηκε για να περιγράψει ικανοποιητικά τις εντολές που θα σας
++ κάνουν να χρησιμοποιείτε εύκολα τον Vim σαν έναν γενικής χρήσης συντάκτη.
++
++ Ο κατά προσέγγιση χρόνος που απαιτείται για να ολοκληρώσετε την περιήγηση
++ είναι 25-30 λεπτά, εξαρτώντας από το πόσο χρόνο θα ξοδέψετε για
++ πειραματισμούς.
++
++ Οι εντολές στα μαθήματα θα τροποποιήσουν το κείμενο. Δημιουργήστε ένα
++ αντίγραφο αυτού του αρχείου για να εξασκηθείτε (αν ξεκινήσατε το
++ "Vimtutor" αυτό είναι ήδη ένα αντίγραφο).
++
++ Είναι σημαντικό να θυμάστε ότι αυτή η περιήγηση είναι οργανωμένη έτσι
++ ώστε να διδάσκει μέσω της χρήσης. Αυτό σημαίνει ότι χρειάζεται να
++ εκτελείτε τις εντολές για να τις μάθετε σωστά. Αν διαβάζετε μόνο το
++ κείμενο, θα τις ξεχάσετε!
++
++ Τώρα, βεβαιωθείτε ότι το πλήκτρο Shift-Lock ΔΕΝ είναι πατημένο και
++ πατήστε το πλήκτρο j αρκετές φορές για να μετακινήσετε τον δρομέα έτσι
++ ώστε το Μάθημα 1.1 να γεμίσει πλήρως την οθόνη.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 1.1: ΜΕΤΑΚΙΝΟΝΤΑΣ ΤΟΝ ΔΡΟΜΕΑ
++
++ ** Για να κινήσετε τον δρομέα, πατήστε τα πλήκτρα h,j,k,l όπως δείχνεται. **
++ ^
++ k Hint: Το πλήκτρο h είναι αριστερά και κινεί στ' αριστερά.
++ < h l > Το πλήκτρο l είναι δεξιά και κινεί στα δεξιά.
++ j Το πλήκτρο j μοιάζει με βελάκι προς τα κάτω.
++ v
++
++ 1. Μετακινείστε τον δρομέα τριγύρω στην οθόνη μέχρι να νοιώθετε άνετα.
++
++ 2. Κρατήστε πατημένο το κάτω πλήκτρο (j) μέχρι να επαναληφθεί.
++ ---> Τώρα ξέρετε πώς να μετακινηθείτε στο επόμενο μάθημα.
++
++ 3. Χρησιμοποιώντας το κάτω πλήκτρο, μετακινηθείτε στο Μάθημα 1.2.
++
++ Σημείωση: Αν αμφιβάλλετε για κάτι που πατήσατε, πατήστε <ESC> για να βρεθείτε
++ στην Κανονική Κατάσταση. Μετά πατήστε ξανά την εντολή που θέλατε.
++
++ Σημείωση: Τα πλήκτρα του δρομέα θα πρέπει επίσης να δουλεύουν. Αλλά με τα hjkl
++ θα μπορείτε να κινηθείτε πολύ γρηγορότερα, μόλις τα συνηθίσετε.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 1.2: ΜΠΑΙΝΟΝΤΑΣ ΚΑΙ ΒΓΑΙΝΟΝΤΑΣ ΣΤΟΝ VIM
++
++ !! ΣΗΜΕΙΩΣΗ: Πριν εκτελέσετε κάποιο από τα βήματα, διαβάστε όλο το μάθημα!!
++
++ 1. Πατήστε το πλήκτρο <ESC> (για να είστε σίγουρα στην Κανονική Κατάσταση).
++
++ 2. Πληκτρολογήστε: :q! <ENTER>.
++
++ ---> Αυτό εξέρχεται από τον συντάκτη ΧΩΡΙΣ να σώσει όποιες αλλαγές έχετε κάνει.
++ Αν θέλετε να σώσετε τις αλλαγές και να εξέρθετε πληκτρολογήστε:
++ :wq <ENTER>
++
++ 3. Όταν δείτε την προτροπή του φλοιού, πληκτρολογήστε την εντολή με την οποία
++ μπήκατε σε αυτήν την περιήγηση. Μπορεί να είναι: vimtutor <ENTER>
++ Κανονικά θα χρησιμοποιούσατε: vim tutor <ENTER>
++
++ ---> 'vim' σημαίνει εισαγωγή στον συντάκτη vim, 'tutor' είναι το αρχείο που
++ θέλουμε να διορθώσουμε.
++
++ 4. Αν έχετε απομνημονεύσει αυτά τα βήματα και έχετε αυτοπεποίθηση, εκτελέστε
++ τα βήματα 1 έως 3 για να βγείτε και να μπείτε ξανά στον συντάκτη. Μετά
++ μετακινήστε τον δρομέα κάτω στο Μάθημα 1.3.
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 1.3: ΔΙΟΡΘΩΣΗ ΚΕΙΜΕΝΟΥ - ΔΙΑΓΡΑΦΗ
++
++ ** Όσο είστε στην Κανονική Κατάσταση πατήστε x για να διαγράψετε τον
++ χαρακτήρα κάτω από τον δρομέα. **
++
++ 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->.
++
++ 2. Για να διορθώσετε τα λάθη, κινείστε τον δρομέα μέχρι να είναι πάνω από
++ τον χαρακτήρα που θα διαγραφεί.
++
++ 3. Πατήστε το πλήκτρο x για να διαγράψετε τον ανεπιθύμητο χαρακτήρα.
++
++ 4. Επαναλάβετε τα βήματα 2 μέχρι 4 μέχρι η πρόταση να είναι σωστή.
++
++ ---> The ccow jumpedd ovverr thhe mooon.
++
++ 5. Τώρα που η γραμμή είναι σωστή, πηγαίντε στο Μάθημα 1.4.
++
++ ΣΗΜΕΙΩΣΗ: Καθώς διατρέχετε αυτήν την περιήγηση, προσπαθήστε να μην
++ απομνημονεύετε, μαθαίνετε με τη χρήση.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 1.4: ΔΙΟΡΘΩΣΗ ΚΕΙΜΕΝΟΥ - ΠΑΡΕΜΒΟΛΗ
++
++ ** Όσο είστε σε Κανονική Κατάσταση πατήστε i για να παρεμβάλλετε κείμενο. **
++
++ 1. Μετακινείστε τον δρομέα μέχρι την πρώτη γραμμή παρακάτω σημειωμένη με --->.
++
++ 2. Για να κάνετε την πρώτη γραμμή ίδια με την δεύτερη, μετακινείστε τον
++ δρομέα πάνω στον πρώτο χαρακτήρα ΜΕΤΑ από όπου θα παρεμβληθεί το κείμενο.
++
++ 3. Πατήστε το i και πληκτρολογήστε τις απαραίτητες προσθήκες.
++
++ 4. Καθώς διορθώνετε κάθε λάθος πατήστε <ESC> για να επιστρέψετε στην
++ Κανονική Κατάσταση. Επαναλάβετε τα βήματα 2 μέχρι 4 για να διορθώσετε
++ την πρόταση.
++
++ ---> There is text misng this .
++ ---> There is some text missing from this line.
++
++ 5. Όταν είστε άνετοι με την παρεμβολή κειμένου μετακινηθείτε στην
++ παρακάτω περίληψη.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 1 ΠΕΡΙΛΗΨΗ
++
++
++ 1. Ο δρομέας κινείται χρησιμοποιώντας είτε τα πλήκτρα δρομέα ή τα hjkl.
++ h (αριστέρα) j (κάτω) k (πάνω) l (δεξιά)
++
++ 2. Για να μπείτε στον Vim (από την προτροπή %) γράψτε: vim ΑΡΧΕΙΟ <ENTER>
++
++ 3. Για να βγείτε γράψτε: <ESC> :q! <ENTER> για απόρριψη των αλλαγών.
++ Ή γράψτε: <ESC> :wq <ENTER> για αποθήκευση των αλλαγών.
++
++ 4. Για να διαγράψετε έναν χαρακτήρα κάτω από τον δρομέα σε
++ Κανονική Κατάσταση πατήστε: x
++
++ 5. Για να εισάγετε κείμενο στον δρομέα όσο είστε σε Κανονική Κατάσταση γράψτε:
++ i πληκτρολογήστε το κείμενο <ESC>
++
++ ΣΗΜΕΙΩΣΗ: Πατώντας <ESC> θα τοποθετηθείτε στην Κανονική Κατάσταση ή θα
++ ακυρώσετε μία ανεπιθύμητη και μερικώς ολοκληρωμένη εντολή.
++
++ Τώρα συνεχίστε με το Μάθημα 2.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 2.1: ΕΝΤΟΛΕΣ ΔΙΑΓΡΑΦΗΣ
++
++ ** Γράψτε dw για να διαγράψετε μέχρι το τέλος μίας λέξης. **
++
++ 1. Πατήστε <ESC> για να βεβαιωθείτε ότι είστε στην Κανονική Κατάσταση.
++
++ 2. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->.
++
++ 3. Πηγαίνετε τον δρομέα στην αρχή της λέξης που πρέπει να διαγραφεί.
++
++ 4. Γράψτε dw για να κάνετε την λέξη να εξαφανιστεί.
++
++ ΣΗΜΕΙΩΣΗ: Τα γράμματα dw θα εμφανιστούν στην τελευταία γραμμή της οθόνης όσο
++ τα πληκτρολογείτε. Αν γράψατε κάτι λάθος, πατήστε <ESC> και
++ ξεκινήστε από την αρχή.
++
++ ---> There are a some words fun that don't belong paper in this sentence.
++
++ 5. Επαναλάβετε τα βήματα 3 και 4 μέχρι η πρόταση να είναι σωστή και
++ πηγαίνετε στο Μάθημα 2.2.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 2.2: ΠΕΡΙΣΣΟΤΕΡΕΣ ΕΝΤΟΛΕΣ ΔΙΑΓΡΑΦΗΣ
++
++ ** Πληκτρολογήστε d$ για να διαγράψετε μέχρι το τέλος της γραμμής. **
++
++ 1. Πατήστε <ESC> για να βεβαιωθείτε ότι είστε στην Κανονική Κατάσταση.
++
++ 2. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->.
++
++ 3. Μετακινείστε τον δρομέα στο τέλος της σωστής γραμμής (ΜΕΤΑ την πρώτη . ).
++
++ 4. Πατήστε d$ για να διαγράψετε μέχρι το τέλος της γραμμής.
++
++ ---> Somebody typed the end of this line twice. end of this line twice.
++
++ 5. Πηγαίνετε στο Μάθημα 2.3 για να καταλάβετε τι συμβαίνει.
++
++
++
++
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 2.3: ΠΕΡΙ ΕΝΤΟΛΩΝ ΚΑΙ ΑΝΤΙΚΕΙΜΕΝΩΝ
++
++
++ Η μορφή της εντολής διαγραφής d είναι ως εξής:
++
++ [αριθμός] d αντικείμενο Ή d [αριθμός] αντικείμενο
++ Όπου:
++ αριθμός - πόσες φορές θα εκτελεστεί η εντολή (προαιρετικό, εξ' ορισμού=1).
++ d - η εντολή της διαγραφής.
++ αντικείμενο - πάνω σε τι θα λειτουργήσει η εντολή (παρακάτω λίστα).
++
++ Μία μικρή λίστα από αντικείμενα:
++ w - από τον δρομέα μέχρι το τέλος της λέξης, περιλαμβάνοντας το διάστημα.
++ e - από τον δρομέα μέχρι το τέλος της λέξης, ΧΩΡΙΣ το διάστημα.
++ $ - από τον δρομέα μέχρι το τέλος της γραμμής.
++
++ ΣΗΜΕΙΩΣΗ: Για τους τύπους της περιπέτειας, πατώντας απλώς το αντικείμενο όσο
++ είστε στην Κανονική Κατάσταση χωρίς κάποια εντολή θα μετακινήσετε
++ τον δρομέα όπως καθορίζεται στην λίστα αντικειμένων.
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 2.4: ΜΙΑ ΕΞΑΙΡΕΣΗ ΣΤΗΝ 'ΕΝΤΟΛΗ-ΑΝΤΙΚΕΙΜΕΝΟ'
++
++ ** Πληκτρολογήστε dd για να διαγράψετε όλη τη γραμμή. **
++
++ Εξαιτίας της συχνότητας της διαγραφής ολόκληρης γραμμής, οι σχεδιαστές
++ του Vim αποφάσισαν ότι θα ήταν ευκολότερο να γράφετε απλώς δύο d στη
++ σειρά για να διαγράψετε μία γραμμή.
++
++ 1. Μετακινείστε τον δρομέα στη δεύτερη γραμμή της παρακάτω φράσης.
++ 2. Γράψτε dd για να διαγράψετε τη γραμμή.
++ 3. Τώρα μετακινηθείτε στην τέταρτη γραμμή.
++ 4. Γράψτε 2dd (θυμηθείτε αριθμός-εντολή-αντικείμενο) για να
++ διαγράψετε δύο γραμμές.
++
++ 1) Roses are red,
++ 2) Mud is fun,
++ 3) Violets are blue,
++ 4) I have a car,
++ 5) Clocks tell time,
++ 6) Sugar is sweet
++ 7) And so are you.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 2.5: Η ΕΝΤΟΛΗ ΑΝΑΙΡΕΣΗΣ
++
++ ** Πατήστε u για να αναιρέσετε τις τελευταίες εντολές,
++ U για να διορθώσετε όλη τη γραμμή. **
++
++ 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με ---> και
++ τοποθετήστε τον πάνω στο πρώτο λάθος.
++ 2. Πατήστε x για να διαγράψετε τον πρώτο ανεπιθύμητο χαρακτήρα.
++ 3. Τώρα πατήστε u για να αναιρέσετε την τελευταία εκτελεσμένη εντολή.
++ 4. Αυτή τη φορά διορθώστε όλα τα λάθη στη γραμμή χρησιμοποιώντας την εντολή x.
++ 5. Τώρα πατήστε ένα κεφαλαίο U για να επιστρέψετε τη γραμμή στην αρχική
++ της κατάσταση.
++ 6. Τώρα πατήστε u μερικές φορές για να αναιρέσετε την U και
++ προηγούμενες εντολές.
++ 7. Τώρα πατήστε CTRL-R (κρατώντας πατημένο το πλήκτρο CTRL καθώς πατάτε το R)
++ μερικές φορές για να επαναφέρετε τις εντολές (αναίρεση των αναιρέσεων).
++
++ ---> Fiix the errors oon thhis line and reeplace them witth undo.
++
++ 8. Αυτές είναι πολύ χρήσιμες εντολές. Τώρα πηγαίνετε στην
++ Περίληψη του Μαθήματος 2.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 2 ΠΕΡΙΛΗΨΗ
++
++
++ 1. Για να διαγράψετε από τον δρομέα μέχρι το τέλος λέξης γράψτε: dw
++
++ 2. Για να διαγράψετε από τον δρομέα μέχρι το τέλος γραμμής γράψτε: d$
++
++ 3. Για να διαγράψετε ολόκληρη τη γραμμή γράψτε: dd
++
++ 4. Η μορφή για μία εντολή στην Κανονική Κατάσταση είναι:
++
++ [αριθμός] εντολή αντικείμενο Ή εντολή [αριθμός] αντικείμενο
++ όπου:
++ αριθμός - πόσες φορές να επαναληφθεί η εντολή
++ εντολή - τι να γίνει, όπως η d για διαγραφή
++ αντικείμενο - πάνω σε τι να ενεργήσει η εντολή, όπως w (λέξη),
++ $ (τέλος της γραμμής), κτλ.
++
++ 5. Για να αναιρέσετε προηγούμενες ενέργειες, πατήστε: u (πεζό u)
++ Για να αναιρέσετε όλες τις αλλαγές στη γραμμή, πατήστε: U (κεφαλαίο U)
++ Για να αναιρέσετε τις αναιρέσεις, πατήστε: CTRL-R
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 3.1: Η ΕΝΤΟΛΗ ΤΟΠΟΘΕΤΗΣΗΣ
++
++
++ ** Πατήστε p για να τοποθετήσετε την τελευταία διαγραφή μετά τον δρομέα. **
++
++ 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή της παρακάτω ομάδας.
++
++ 2. Πατήστε dd για να διαγράψετε τη γραμμή και να την αποθηκεύσετε σε
++ προσωρινή μνήμη του Vim.
++
++ 3. Μετακινείστε τον δρομέα στη γραμμή ΠΑΝΩ από εκεί που θα πρέπει να πάει
++ η διαγραμμένη γραμμή.
++
++ 4. Όσο είστε σε Κανονική Κατάσταση, πατήστε p για να βάλετε τη γραμμή.
++
++ 5. Επαναλάβετε τα βήματα 2 έως 4 για να βάλετε όλες τις γραμμές στη
++ σωστή σειρά.
++
++ d) Can you learn too?
++ b) Violets are blue,
++ c) Intelligence is learned,
++ a) Roses are red,
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 3.2: Η ΕΝΤΟΛΗ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ
++
++
++ ** Πατήστε r και χαρακτήρα για να αλλάξετε αυτόν που είναι
++ κάτω από τον δρομέα. **
++
++ 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή παρακάτω σημειωμένη με --->.
++
++ 2. Μετακινείστε τον δρομέα έτσι ώστε να είναι πάνω στο πρώτο λάθος.
++
++ 3. Πατήστε r και μετά τον χαρακτήρα ο οποίος διορθώνει το λάθος.
++
++ 4. Επαναλάβετε τα βήματα 2 και 3 μέχρι να είναι σωστή η πρώτη γραμμή.
++
++ ---> Whan this lime was tuoed in, someone presswd some wrojg keys!
++ ---> When this line was typed in, someone pressed some wrong keys!
++
++ 5. Τώρα πηγαίνετε στο Μάθημα 3.2.
++
++ ΣΗΜΕΙΩΣΗ: Να θυμάστε ότι πρέπει να μαθαίνετε με τη χρήση, και όχι με
++ την απομνημόνευση.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 3.3: Η ΕΝΤΟΛΗ ΑΛΛΑΓΗΣ
++
++ ** Για να αλλάξετε τμήμα ή όλη τη λέξη, πατήστε cw . **
++
++ 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή παρακάτω σημειωμένη με --->.
++
++ 2. Τοποθετήστε τον δρομέα πάνω στο u της λέξης lubw.
++
++ 3. Πατήστε cw και τη σωστή λέξη (στην περίπτωση αυτή, γράψτε 'ine'.)
++
++ 4. Πατήστε <ESC> και πηγαίνετε στο επόμενο λάθος (στον πρώτο
++ χαρακτήρα προς αλλαγή).
++
++ 5. Επαναλάβετε τα βήματα 3 και 4 μέχρις ότου η πρώτη πρόταση να είναι
++ ίδια με τη δεύτερη.
++
++ ---> This lubw has a few wptfd that mrrf changing usf the change command.
++ ---> This line has a few words that need changing using the change command.
++
++ Παρατηρείστε ότι η cw όχι μόνο αντικαθιστάει τη λέξη, αλλά σας εισάγει
++ επίσης σε παρεμβολή.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 3.4: ΠΕΡΙΣΣΟΤΕΡΕΣ ΑΛΛΑΓΕΣ ΜΕ c
++
++
++ ** Η εντολή αλλαγής χρησιμοποιείται με τα ίδια αντικείμενα της διαγραφής. **
++
++
++ 1. Η εντολή αλλαγής δουλεύει με τον ίδιο τρόπο όπως η διαγραφή. Η μορφή είναι:
++
++ [αριθμός] c αντικείμενο Ή c [αριθμός] αντικείμενο
++
++ 2. Τα αντικείμενα είναι πάλι τα ίδια, όπως w (λέξη), $ (τέλος γραμμής), κτλ.
++
++ 3. Μετακινηθείτε στην πρώτη γραμμή παρακάτω σημειωμένη με --->.
++
++ 4. Μετακινείστε τον δρομέα στο πρώτο λάθος.
++
++ 5. Γράψτε c$ για να κάνετε το υπόλοιπο της γραμμής ίδιο με τη δεύτερη
++ και πατήστε <ESC>.
++
++ ---> The end of this line needs some help to make it like the second.
++ ---> The end of this line needs to be corrected using the c$ command.
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 3 ΠΕΡΙΛΗΨΗ
++
++
++ 1. Για να τοποθετήσετε κείμενο που μόλις έχει διαγραφεί, πατήστε p .
++ Αυτό τοποθετεί το διαγραμμένο κείμενο ΜΕΤΑ τον δρομέα (αν διαγράφτηκε
++ γραμμή θα πάει μετά στη γραμμή κάτω από τον δρομέα.
++
++ 2. Για να αντικαταστήσετε τον χαρακτήρα κάτω από τον δρομέα, πατήστε r
++ και μετά τον χαρακτήρα που θα αντικαταστήσει τον αρχικό.
++
++ 3. Η εντολή αλλαγής σας επιτρέπει να αλλάξετε το καθορισμένο αντικείμενο
++ από τον δρομέα μέχρι το τέλος του αντικείμενο. Π.χ. γράψτε cw για να
++ αλλάξετε από τον δρομέα μέχρι το τέλος της λέξης, c$ για να αλλάξετε
++ μέχρι το τέλος γραμμής.
++
++ 4. Η μορφή για την αλλαγή είναι:
++
++ [αριθμός] c αντικείμενο Ή c [αριθμός] αντικείμενο
++
++ Τώρα συνεχίστε με το επόμενο μάθημα.
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 4.1: ΘΕΣΗ ΚΑΙ ΚΑΤΑΣΤΑΣΗ ΑΡΧΕΙΟΥ
++
++
++ ** Πατήστε CTRL-g για να εμφανιστεί η θέση σας στο αρχείο και η κατάστασή του.
++ Πατήστε SHIFT-G για να πάτε σε μία γραμμή στο αρχείο. **
++
++ Σημείωση: Διαβάστε ολόκληρο το μάθημα πριν εκτελέσετε κάποιο από τα βήματα!!
++
++ 1. Κρατήστε πατημένο το πλήκτρο Ctrl και πατήστε g . Μία γραμμή κατάστασης
++ θα εμφανιστεί στο κάτω μέρος της σελίδας με το όνομα αρχείου και τη
++ γραμμή που είστε. Θυμηθείτε τον αριθμό γραμμής για το Βήμα 3.
++
++ 2. Πατήστε shift-G για να μετακινηθείτε στο τέλος του αρχείου.
++
++ 3. Πατήστε τον αριθμό της γραμμής που ήσασταν και μετά shift-G. Αυτό θα
++ σας επιστρέψει στη γραμμή που ήσασταν πριν πατήσετε για πρώτη φορά Ctrl-g.
++ (Όταν πληκτρολογείτε τους αριθμούς, ΔΕΝ θα εμφανίζονται στην οθόνη).
++
++ 4. Αν νοιώθετε σίγουρος για αυτό, εκτελέστε τα βήματα 1 έως 3.
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 4.2: Η ΕΝΤΟΛΗ ΑΝΑΖΗΤΗΣΗΣ
++
++
++ ** Πατήστε / ακολουθούμενο από τη φράση που ψάχνετε. **
++
++ 1. Σε Κανονική Κατάσταση πατήστε τον χαρακτήρα / . Παρατηρήστε ότι αυτός και
++ ο δρομέας εμφανίζονται στο κάτω μέρος της οθόνης όπως με την εντολή : .
++
++ 2. Τώρα γράψτε 'errroor' <ENTER>. Αυτή είναι η λέξη που θέλετε να ψάξετε.
++
++ 3. Για να ψάξετε ξανά για την ίδια φράση, πατήστε απλώς n .
++ Για να ψάξετε την ίδια φράση στην αντίθετη κατεύθυνση, πατήστε Shift-N .
++
++ 4. Αν θέλετε να ψάξετε για μία φράση προς τα πίσω, χρησιμοποιήστε την εντολή ? αντί της / .
++
++ ---> Όταν η αναζήτηση φτάσει στο τέλος του αρχείου θα συνεχίσει από την αρχή.
++
++ "errroor" is not the way to spell error; errroor is an error.
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 4.3: ΕΥΡΕΣΗ ΤΑΙΡΙΑΣΤΩΝ ΠΑΡΕΝΘΕΣΕΩΝ
++
++
++ ** Πατήστε % για να βρείτε την αντίστοιχη ), ], ή } . **
++
++ 1. Τοποθετήστε τον δρομέα σε κάποια (, [, ή { στην παρακάτω γραμμή
++ σημειωμένη με --->.
++
++ 2. Τώρα πατήστε τον χαρακτήρα % .
++
++ 3. Ο δρομέας θα πρέπει να είναι στην αντίστοιχη παρένθεση ή αγκύλη.
++
++ 4. Πατήστε % για να μετακινήσετε τον δρομέα πίσω στην πρώτη αγκύλη
++ (του ζευγαριού).
++
++ ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
++
++ ΣΗΜΕΙΩΣΗ: Αυτό είναι πολύ χρήσιμο στην αποσφαλμάτωση ενός προγράμματος
++ με μη ταιριαστές παρενθέσεις!
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 4.4: ΕΝΑΣ ΤΡΟΠΟΣ ΓΙΑ ΑΛΛΑΓΗ ΛΑΘΩΝ
++
++
++ ** Γράψτε :s/old/new/g για να αλλάξετε το 'new' με το 'old'. **
++
++ 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->.
++
++ 2. Γράψτε :s/thee/the <ENTER> . Σημειώστε ότι αυτή η εντολή αλλάζει μόνο
++ την πρώτη εμφάνιση στη γραμμή.
++
++ 3. Τώρα γράψτε :s/thee/the/g εννοώντας γενική αντικατάσταση στη
++ γραμμή. Αυτό αλλάζει όλες τις εμφανίσεις επί της γραμμής.
++
++ ---> thee best time to see thee flowers is in thee spring.
++
++ 4. Για να αλλάξετε κάθε εμφάνιση μίας συμβολοσειράς μεταξύ δύο γραμμών,
++ γράψτε :#,#s/old/new/g όπου #,# οι αριθμοί των δύο γραμμών.
++ Γράψτε :%s/old/new/g για να αλλάξετε κάθε εμφάνιση σε όλο το αρχείο.
++
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 4 ΠΕΡΙΛΗΨΗ
++
++
++ 1. Το Ctrl-g εμφανίζει τη θέση σας στο αρχείο και την κατάστασή του.
++ Το Shift-G πηγαίνει στο τέλος του αρχείου. Ένας αριθμός γραμμής
++ ακολουθούμενος από Shift-G πηγαίνει σε εκείνη τη γραμμή.
++
++ 2. Γράφοντας / ακολουθούμενο από μία φράση ψάχνει προς τα ΜΠΡΟΣΤΑ για
++ τη φράση. Γράφοντας ? ακολουθούμενο από μία φράση ψάχνει προς τα ΠΙΣΩ
++ για τη φράση. Μετά από μία αναζήτηση πατήστε n για να βρείτε την
++ επόμενη εμφάνιση προς την ίδια κατεύθυνση ή Shift-N για να ψάξετε
++ προς την αντίθετη κατεύθυνση.
++
++ 3. Πατώντας % όσο ο δρομέας είναι πάνω σε μία (,),[,],{, ή } εντοπίζει
++ το αντίστοιχο ταίρι του ζευγαριού.
++
++ 4. Για αντικατάσταση με new του πρώτου old στη γραμμή γράψτε :s/old/new
++ Για αντικατάσταση με new όλων των 'old' στη γραμμή γράψτε :s/old/new/g
++ Για αντικατάσταση φράσεων μεταξύ δύο # γραμμών γράψτε :#,#s/old/new/g
++ Για αντικατάσταση όλων των εμφανίσεων στο αρχείο γράψτε :%s/old/new/g
++ Για ερώτηση επιβεβαίωσης κάθε φορά προσθέστε ένα 'c' "%s/old/new/gc
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 5.1: ΠΩΣ ΕΚΤΕΛΩ ΜΙΑ ΕΞΩΤΕΡΙΚΗ ΕΝΤΟΛΗ
++
++
++ ** Γράψτε :! ακολουθούμενο από μία εξωτερική εντολή για να την εκτελέσετε. **
++
++ 1. Πατήστε την οικεία εντολή : για να θέσετε τον δρομέα στο κάτω μέρος
++ της οθόνης. Αυτό σας επιτρέπει να δώσετε μία εντολή.
++
++ 2. Τώρα πατήστε το ! (θαυμαστικό). Αυτό σας επιτρέπει να εκτελέσετε
++ οποιαδήποτε εξωτερική εντολή του φλοιού.
++
++ 3. Σαν παράδειγμα γράψτε ls μετά από το ! και πατήστε <ENTER>. Αυτό θα
++ σας εμφανίσει μία λίστα του καταλόγου σας, ακριβώς σαν να ήσασταν στην
++ προτροπή του φλοιού. Ή χρησιμοποιήστε :!dir αν το ls δεν δουλεύει.
++
++ ---> Σημείωση: Είναι δυνατόν να εκτελέσετε οποιαδήποτε εξωτερική εντολή
++ με αυτόν τον τρόπο.
++
++ ---> Σημείωση: Όλες οι εντολές : πρέπει να τερματίζονται πατώντας το <ENTER>.
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 5.2: ΠΕΡΙΣΣΟΤΕΡΑ ΠΕΡΙ ΕΓΓΡΑΦΗΣ ΑΡΧΕΙΩΝ
++
++
++ ** Για να σώσετε τις αλλάγες που κάνατε στο αρχείο, γράψτε :w ΑΡΧΕΙΟ. **
++
++ 1. Γράψτε :!dir ή :!ls για να πάρετε μία λίστα του καταλόγου σας.
++ Ήδη ξέρετε ότι πρέπει να πατήσετε <ENTER> μετά από αυτό.
++
++ 2. Διαλέξτε ένα όνομα αρχείου που δεν υπάρχει ακόμα, όπως το TEST.
++
++ 3. Τώρα γράψτε: :w TEST (όπου TEST είναι το όνομα αρχείου που διαλέξατε).
++
++ 4. Αυτό σώζει όλο το αρχείο (vim Tutor) με το όνομα TEST. Για να το
++ επαληθεύσετε, γράψτε ξανά :!dir για να δείτε τον κατάλογό σας.
++
++ ---> Σημειώστε ότι αν βγαίνατε από τον Vim και μπαίνατε ξανά με το όνομα
++ αρχείου TEST, το αρχείο θα ήταν ακριβές αντίγραφο του tutor όταν το σώσατε.
++
++ 5. Τώρα διαγράψτε το αρχείο γράφοντας (MS-DOS): :!del TEST
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 5.3: ΕΠΙΛΕΚΤΙΚΗ ΕΝΤΟΛΗ ΕΓΓΡΑΦΗΣ
++
++
++ ** Για να σώσετε τμήμα του αρχείου, γράψτε :#,# w ΑΡΧΕΙΟ **
++
++ 1. Άλλη μια φορά, γράψτε :!dir ή :!ls για να πάρετε μία λίστα από τον
++ κατάλογό σας και διαλέξτε ένα κατάλληλο όνομα αρχείου όπως το TEST.
++
++ 2. Μετακινείστε τον δρομέα στο πάνω μέρος αυτής της σελίδας και πατήστε
++ Ctrl-g για να βρείτε τον αριθμό αυτής της γραμμής.
++ ΝΑ ΘΥΜΑΣΤΕ ΑΥΤΟΝ ΤΟΝ ΑΡΙΘΜΟ!
++
++ 3. Τώρα πηγαίνετε στο κάτω μέρος της σελίδας και πατήστε Ctrl-g ξανά.
++ ΝΑ ΘΥΜΑΣΤΕ ΚΑΙ ΑΥΤΟΝ ΤΟΝ ΑΡΙΘΜΟ!
++
++ 4. Για να σώσετε ΜΟΝΟ ένα τμήμα σε αρχείο, γράψτε :#,# w TEST
++ όπου #,# οι δύο αριθμοί που απομνημονεύσατε (πάνω,κάτω) και TEST το
++ όνομα του αρχείου σας.
++
++ 5. Ξανά, δείτε ότι το αρχείο είναι εκεί με την :!dir αλλά ΜΗΝ το διαγράψετε.
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 5.4: ΑΝΑΚΤΩΝΤΑΣ ΚΑΙ ΕΝΩΝΟΝΤΑΣ ΑΡΧΕΙΑ
++
++
++ ** Για να εισάγετε τα περιεχόμενα ενός αρχείου, γράψτε :r ΑΡΧΕΙΟ **
++
++ 1. Γράψτε :!dir για να βεβαιωθείτε ότι το TEST υπάρχει από πριν.
++
++ 2. Τοποθετήστε τον δρομέα στο πάνω μέρος της σελίδας.
++
++ ΣΗΜΕΙΩΣΗ: Αφότου εκτελέσετε το Βήμα 3 θα δείτε το Μάθημα 5.3.
++ Μετά κινηθείτε ΚΑΤΩ ξανά προς το μάθημα αυτό.
++
++ 3. Τώρα ανακτήστε το αρχείο σας TEST χρησιμοποιώντας την εντολή :r TEST
++ όπου TEST είναι το όνομα του αρχείου.
++
++ ΣΗΜΕΙΩΣΗ: Το αρχείο που ανακτάτε τοποθετείται ξεκινώντας εκεί που βρίσκεται
++ ο δρομέας.
++
++ 4. Για να επαληθεύσετε ότι το αρχείο ανακτήθηκε, πίσω τον δρομέα και
++ παρατηρήστε ότι υπάρχουν τώρα δύο αντίγραφα του Μαθήματος 5.3, το
++ αρχικό και η έκδοση του αρχείου.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 5 ΠΕΡΙΛΗΨΗ
++
++
++ 1. :!εντολή εκτελεί μία εξωτερική εντολή.
++
++ Μερικά χρήσιμα παραδείγματα είναι (MS-DOS):
++ :!dir - εμφάνιση λίστας ενός καταλόγου.
++ :!del ΑΡΧΕΙΟ - διαγράφει το ΑΡΧΕΙΟ.
++
++ 2. :w ΑΡΧΕΙΟ γράφει το τρέχων αρχείο του Vim στο δίσκο με όνομα ΑΡΧΕΙΟ.
++
++ 3. :#,#w ΑΡΧΕΙΟ σώζει τις γραμμές από # μέχρι # στο ΑΡΧΕΙΟ.
++
++ 4. :r ΑΡΧΕΙΟ ανακτεί το αρχείο δίσκου ΑΡΧΕΙΟ και το παρεμβάλλει μέσα
++ στο τρέχον αρχείο μετά από τη θέση του δρομέα.
++
++
++
++
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 6.1: Η ΕΝΤΟΛΗ ΑΝΟΙΓΜΑΤΟΣ
++
++
++ ** Πατήστε o για να ανοίξετε μία γραμμή κάτω από τον δρομέα και να
++ βρεθείτε σε Κατάσταση Κειμένου. **
++
++ 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->.
++
++ 2. Πατήστε o (πεζό) για να ανοίξετε μία γραμμή ΚΑΤΩ από τον δρομέα και να
++ βρεθείτε σε Κατάσταση Κειμένου.
++
++ 3. Τώρα αντιγράψτε τη σημειωμένη με ---> γραμμή και πατήστε <ESC> για να
++ βγείτε από την Κατάσταση Κειμένου.
++
++ ---> After typing o the cursor is placed on the open line in Insert mode.
++
++ 4. Για να ανοίξετε μία γραμμή ΠΑΝΩ από τον δρομέα, πατήστε απλά ένα κεφαλαίο
++ O, αντί για ένα πεζό o. Δοκιμάστε το στην παρακάτω γραμμή.
++ Ανοίγετε γραμμή πάνω από αυτήν πατώντας Shift-O όσο ο δρομέας είναι στη γραμμή
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 6.2: Η ΕΝΤΟΛΗ ΠΡΟΣΘΗΚΗΣ
++
++ ** Πατήστε a για να εισάγετε κείμενο ΜΕΤΑ τον δρομέα. **
++
++ 1. Μετακινείστε τον δρομέα στο τέλος της πρώτης γραμμής παρακάτω
++ σημειωμένη με ---> πατώντας $ στην Κανονική Κατάσταση.
++
++ 2. Πατήστε ένα a (πεζό) για να προσθέσετε κείμενο ΜΕΤΑ από τον χαρακτήρα
++ που είναι κάτω από τον δρομέα. (Το κεφαλαίο A προσθέτει στο τέλος
++ της γραμμής).
++
++ Σημείωση: Αυτό αποφεύγει το πάτημα του i , τον τελευταίο χαρακτήρα, το
++ κείμενο της εισαγωγής, <ESC>, δρομέα-δεξιά, και τέλος, x, μόνο και
++ μόνο για να προσθέσετε στο τέλος της γραμμής!
++
++ 3. Συμπληρώστε τώρα την πρώτη γραμμή. Σημειώστε επίσης ότι η προσθήκη είναι
++ ακριβώς ίδια στην Κατάσταση Κειμένου με την Κατάσταση Εισαγωγής, εκτός
++ από τη θέση που εισάγεται το κείμενο.
++
++ ---> This line will allow you to practice
++ ---> This line will allow you to practice appending text to the end of a line.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 6.3: ΑΛΛΗ ΕΚΔΟΣΗ ΤΗΣ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ
++
++
++ ** Πατήστε κεφαλαίο R για να αλλάξετε περισσότερους από έναν χαρακτήρες. **
++
++ 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή παρακάτω σημειωμένη με --->.
++
++ 2. Τοποθετήστε τον δρομέα στην αρχή της πρώτης λέξης που είναι διαφορετική
++ από τη δεύτερη γραμμή σημειωμένη με ---> (η λέξη 'last').
++
++ 3. Πατήστε τώρα R και αλλάξτε το υπόλοιπο του κειμένου στην πρώτη γραμμή
++ γράφοντας πάνω από το παλιό κείμενο ώστε να κάνετε την πρώτη γραμμή ίδια
++ με τη δεύτερη.
++
++ ---> To make the first line the same as the last on this page use the keys.
++ ---> To make the first line the same as the second, type R and the new text.
++
++ 4. Σημειώστε ότι όταν πατάτε <ESC> για να βγείτε, παραμένει οποιοδήποτε
++ αναλλοίωτο κείμενο.
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ Μάθημα 6.4: ΡΥΘΜΙΣΗ ΕΠΙΛΟΓΗΣ
++
++
++ ** Ρυθμίστε μία επιλογή έτσι ώστε η αναζήτηση ή η αντικατάσταση να αγνοεί
++ τη διαφορά πεζών-κεφαλαίων **
++
++ 1. Ψάξτε για 'ignore' εισάγοντας:
++ /ignore
++ Συνεχίστε αρκετές φορές πατώντας το πλήκτρο n.
++
++ 2. Θέστε την επιλογή 'ic' (Ignore case) γράφοντας:
++ :set ic
++
++ 3. Ψάξτε τώρα ξανά για 'ignore' πατώντας: n
++ Συνεχίστε την αναζήτηση μερικές ακόμα φορές πατώντας το πλήκτρο n
++
++ 4. Θέστε τις επιλογές 'hlsearch' και 'incsearch':
++ :set hls is
++
++ 5. Εισάγετε τώρα ξανά την εντολή αναζήτησης, και δείτε τι συμβαίνει
++ /ignore
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 6 ΠΕΡΙΛΗΨΗ
++
++
++ 1. Πατώντας o ανοίγει μία γραμμή ΚΑΤΩ από τον δρομέα και τοποθετεί τον
++ δρομέα στην ανοιχτή γραμμή σε Κατάσταση Κειμένου.
++
++ 2. Πατήστε a για να εισάγετε κείμενο ΜΕΤΑ τον χαρακτήρα στον οποίο είναι
++ ο δρομέας. Πατώντας κεφαλαίο A αυτόματα προσθέτει κείμενο στο τέλος
++ της γραμμής.
++
++ 3. Πατώντας κεφαλαίο R εισέρχεται στην Κατάσταη Αντικατάστασης μέχρι να
++ πατηθεί το <ESC> και να εξέλθει.
++
++ 4. Γράφοντας ":set xxx" ρυθμίζει την επιλογή "xxx".
++
++
++
++
++
++
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 7: ON-LINE ΕΝΤΟΛΕΣ ΒΟΗΘΕΙΑΣ
++
++
++ ** Χρησιμοποιήστε το on-line σύστημα βοήθειας **
++
++ Ο Vim έχει ένα περιεκτικό on-line σύστημα βοήθειας. Για να ξεκινήσει,
++ δοκιμάστε κάποιο από τα τρία:
++ - πατήστε το πλήκτρο <HELP> (αν έχετε κάποιο)
++ - πατήστε το πλήκτρο <F1> (αν έχετε κάποιο)
++ - γράψτε :help <ENTER>
++
++ Γράψτε :q <ENTER> για να κλείσετε το παράθυρο της βοήθειας.
++
++ Μπορείτε να βρείτε βοήθεια πάνω σε κάθε αντικείμενο, δίνοντας μία παράμετρο
++ στην εντολή ":help". Δοκιμάστε αυτά (μην ξεχνάτε να πατάτε <ENTER>):
++
++ :help w
++ :help c_<T
++ :help insert-index
++ :help user-manual
++
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ ΜΑΘΗΜΑ 8: ΔΗΜΙΟΥΡΓΗΣΤΕ ΕΝΑ SCRIPT ΕΚΚΙΝΗΣΗΣ
++
++ ** Ενεργοποιήστε χαρακτηριστικά του Vim **
++
++ Ο Vim έχει πολλά περισσότερα χαρακτηριστικά απ' ό,τι ο Vi, αλλά τα
++ περισσότερα είναι αρχικά απενεργοποιημένα. Για να αρχίσετε να χρησιμοποιείτε
++ περισσότερα χαρακτηριστικά πρέπει να φτιάξετε ένα αρχείο "vimrc".
++
++ 1. Αρχίστε διορθώνοντας το αρχείο "vimrc", αυτό εξαρτάται από το σύστημά σας:
++ :edit ~/.vimrc για Unix
++ :edit $VIM/_vimrc για MS-Windows
++
++ 2. Τώρα εισάγετε το κείμενο παραδείγματος για αρχείο "vimrc":
++ :read $VIMRUNTIME/vimrc_example.vim
++
++ 3. Γράψτε το αρχείο με την:
++ :write
++
++ Την επόμενη φορά που θα ξεκινήσετε τον Vim θα χρησιμοποιήσει φωτισμό
++ σύνταξης. Μπορείτε να προσθέσετε όλες τις προτιμώμενες επιλογές σ' αυτό
++ το αρχείο "vimrc".
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++ Εδώ ολοκληρώνεται το Vim Tutor. Σκοπός του ήταν να δώσει μία σύντομη
++ περίληψη του συντάκτη Vim, τουλάχιστον τόση ώστε να σας επιτρέψει να
++ χρησιμοποιήσετε τον συντάκτη αρκετά εύκολα. Απέχει πολύ από μία
++ ολοκληρωμένη παρουσίαση καθώς ο Vim έχει πάρα πολλές εντολές. Διαβάστε
++ κατόπιν το εγχειρίδιο χρήσης:
++ ":help user-manual".
++
++ Για περαιτέρω διάβασμα και μελέτη, συστήνεται αυτό το βιβλίο:
++ Vim - Vi Improved - by Steve Oualline
++ Publisher: New Riders
++ Το πρώτο βιβλίο πλήρως αφιερωμένο στον Vim.
++ Ιδιαίτερα χρήσιμο για αρχάριους.
++ Υπάρχουν πολλά παραδείγματα και εικόνες.
++ Δείτε την http://iccf-holland.org/click5.html
++
++ Αυτό το βιβλίο είναι παλιότερο και περισσότερο για τον Vi παρά για τον Vim,
++ αλλά επίσης συνιστώμενο:
++ Learning the Vi Editor - by Linda Lamb
++ Publisher: O'Reilly & Associates Inc.
++ Είναι ένα καλό βιβλίο για να μάθετε σχεδόν τα πάντα που θέλετε
++ να κάνετε με τον Vi.
++ Η έκτη έκδοση περιέχει ακόμα πληροφορίες για τον Vim.
++
++ Αυτή η περιήγηση γράφτηκε από τους Michael C. Pierce και Robert K. Ware,
++ Colorado School of Mines χρησιμοποιώντας ιδέες από τον Charles Smith,
++ Colorado State University. E-mail: bware@mines.colorado.edu.
++
++ Προσαρμογή για τον Vim από τον Bram Moolenaar.
++
++ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*** ../vim-7.0.094/runtime/tutor/tutor.vim Sat Sep 2 14:54:17 2006
+--- runtime/tutor/tutor.vim Sat Sep 9 16:46:36 2006
+***************
+*** 1,6 ****
+ " Vim tutor support file
+ " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
+! " Last Change: 2006 Sep 02
+
+ " This small source file is used for detecting if a translation of the
+ " tutor file exist, i.e., a tutor.xx file, where xx is the language.
+--- 1,6 ----
+ " Vim tutor support file
+ " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
+! " Last Change: 2006 Sep 09
+
+ " This small source file is used for detecting if a translation of the
+ " tutor file exist, i.e., a tutor.xx file, where xx is the language.
+***************
+*** 93,101 ****
+ endif
+ endif
+
+! " The Greek tutor is available in two encodings, guess which one to use
+! if s:ext =~? '\.gr' && &enc =~ 737
+! let s:ext = ".gr.cp737"
+ endif
+
+ " The Slovak tutor is available in two encodings, guess which one to use
+--- 93,108 ----
+ endif
+ endif
+
+! " The Greek tutor is available in three encodings, guess what to use.
+! " We used ".gr" (Greece) instead of ".el" (Greek); accept both.
+! if s:ext =~? '\.gr\|\.el'
+! if &enc == "iso-8859-7"
+! let s:ext = ".gr"
+! elseif &enc == "utf-8"
+! let s:ext = ".gr.utf-8"
+! elseif &enc =~ 737
+! let s:ext = ".gr.cp737"
+! endif
+ endif
+
+ " The Slovak tutor is available in two encodings, guess which one to use
+*** ../vim-7.0.094/src/version.c Sat Sep 9 14:51:43 2006
+--- src/version.c Sun Sep 10 13:19:23 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 95,
+ /**/
+
+--
+FATHER: You killed eight wedding guests in all!
+LAUNCELOT: Er, Well ... the thing is ... I thought your son was a lady.
+FATHER: I can understand that.
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.096
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.096
+Problem: taglist() returns the filename relative to the tags file, while
+ the directory of the tags file is unknown. (Hari Krishna Dara)
+Solution: Expand the file name. (Yegappan Lakshmanan)
+Files: src/tag.c
+
+
+*** ../vim-7.0.095/src/tag.c Thu Apr 27 23:40:34 2006
+--- src/tag.c Sun Sep 10 13:42:41 2006
+***************
+*** 3787,3792 ****
+--- 3787,3793 ----
+ {
+ int num_matches, i, ret;
+ char_u **matches, *p;
++ char_u *full_fname;
+ dict_T *dict;
+ tagptrs_T tp;
+ long is_static;
+***************
+*** 3809,3823 ****
+ if (list_append_dict(list, dict) == FAIL)
+ ret = FAIL;
+
+ if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
+! || add_tag_field(dict, "filename", tp.fname,
+! tp.fname_end) == FAIL
+ || add_tag_field(dict, "cmd", tp.command,
+ tp.command_end) == FAIL
+ || add_tag_field(dict, "kind", tp.tagkind,
+ tp.tagkind_end) == FAIL
+ || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
+ ret = FAIL;
+
+ if (tp.command_end != NULL)
+ {
+--- 3810,3827 ----
+ if (list_append_dict(list, dict) == FAIL)
+ ret = FAIL;
+
++ full_fname = tag_full_fname(&tp);
+ if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
+! || add_tag_field(dict, "filename", full_fname,
+! NULL) == FAIL
+ || add_tag_field(dict, "cmd", tp.command,
+ tp.command_end) == FAIL
+ || add_tag_field(dict, "kind", tp.tagkind,
+ tp.tagkind_end) == FAIL
+ || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
+ ret = FAIL;
++
++ vim_free(full_fname);
+
+ if (tp.command_end != NULL)
+ {
+*** ../vim-7.0.095/src/version.c Sun Sep 10 13:22:26 2006
+--- src/version.c Sun Sep 10 13:52:01 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 96,
+ /**/
+
+--
+The early bird gets the worm. If you want something else for
+breakfast, get up later.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.097
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.097
+Problem: ":tabclose N" that closes another tab page does not remove the tab
+ pages line. Same problem when using the mouse.
+Solution: Adjust the tab pages line when needed in tabpage_close_other().
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.0.096/src/ex_docmd.c Tue Aug 29 17:28:56 2006
+--- src/ex_docmd.c Sun Sep 10 15:47:33 2006
+***************
+*** 6296,6302 ****
+ exarg_T *eap;
+ {
+ tabpage_T *tp;
+- int h = tabline_height();
+
+ # ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+--- 6296,6301 ----
+***************
+*** 6328,6336 ****
+ )
+ tabpage_close(eap->forceit);
+ }
+-
+- if (h != tabline_height())
+- shell_new_rows();
+ }
+
+ /*
+--- 6327,6332 ----
+***************
+*** 6342,6348 ****
+ {
+ tabpage_T *tp;
+ int done;
+- int h = tabline_height();
+
+ # ifdef FEAT_CMDWIN
+ if (cmdwin_type != 0)
+--- 6338,6343 ----
+***************
+*** 6371,6379 ****
+ break;
+ }
+ }
+-
+- if (h != tabline_height())
+- shell_new_rows();
+ }
+
+ /*
+--- 6366,6371 ----
+***************
+*** 6397,6402 ****
+--- 6389,6396 ----
+ /*
+ * Close tab page "tp", which is not the current tab page.
+ * Note that autocommands may make "tp" invalid.
++ * Also takes care of the tab pages line disappearing when closing the
++ * last-but-one tab page.
+ */
+ void
+ tabpage_close_other(tp, forceit)
+***************
+*** 6405,6410 ****
+--- 6399,6405 ----
+ {
+ int done = 0;
+ win_T *wp;
++ int h = tabline_height();
+
+ /* Limit to 1000 windows, autocommands may add a window while we close
+ * one. OK, so I'm paranoid... */
+***************
+*** 6418,6424 ****
+--- 6413,6422 ----
+ if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
+ break;
+ }
++
+ redraw_tabline = TRUE;
++ if (h != tabline_height())
++ shell_new_rows();
+ }
+
+ /*
+*** ../vim-7.0.096/src/version.c Sun Sep 10 13:56:06 2006
+--- src/version.c Sun Sep 10 15:44:24 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 97,
+ /**/
+
+--
+Advice to worms: Sleep late.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.098
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.098
+Problem: Redirecting command output in a cmdline completion function
+ doesn't work. (Hari Krishna Dara)
+Solution: Enable redirection when redirection is started.
+Files: src/ex_docmd.c, src/ex_getln.c
+
+
+*** ../vim-7.0.097/src/ex_docmd.c Sun Sep 10 15:50:32 2006
+--- src/ex_docmd.c Sun Sep 10 20:59:46 2006
+***************
+*** 8422,8427 ****
+--- 8422,8436 ----
+ else
+ EMSG2(_(e_invarg2), eap->arg);
+ }
++
++ /* Make sure redirection is not off. Can happen for cmdline completion
++ * that indirectly invokes a command to catch its output. */
++ if (redir_fd != NULL
++ #ifdef FEAT_EVAL
++ || redir_reg || redir_vname
++ #endif
++ )
++ redir_off = FALSE;
+ }
+
+ /*
+*** ../vim-7.0.097/src/ex_getln.c Sat Sep 2 17:58:36 2006
+--- src/ex_getln.c Sun Sep 10 21:04:57 2006
+***************
+*** 324,329 ****
+--- 324,332 ----
+ */
+ for (;;)
+ {
++ redir_off = TRUE; /* Don't redirect the typed command.
++ Repeated, because a ":redir" inside
++ completion may switch it on. */
+ #ifdef USE_ON_FLY_SCROLL
+ dont_scroll = FALSE; /* allow scrolling here */
+ #endif
+*** ../vim-7.0.097/src/version.c Sun Sep 10 15:50:32 2006
+--- src/version.c Sun Sep 10 20:58:17 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 98,
+ /**/
+
+--
+GUEST: He's killed the best man!
+SECOND GUEST: (holding a limp WOMAN) He's killed my auntie.
+FATHER: No, please! This is supposed to be a happy occasion! Let's
+ not bicker and argue about who killed who ...
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.099
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.099
+Problem: GUI: When the popup menu is visible using the scrollbar messes up
+ the display.
+Solution: Disallow scrolling the current window. Redraw the popup menu
+ after scrolling another window.
+Files: src/gui.c
+
+
+*** ../vim-7.0.098/src/gui.c Tue Aug 29 18:16:37 2006
+--- src/gui.c Sun Sep 10 21:28:57 2006
+***************
+*** 3734,3739 ****
+--- 3734,3745 ----
+ if (dont_scroll || input_available())
+ return;
+ #endif
++ #ifdef FEAT_INS_EXPAND
++ /* Disallow scrolling the current window when the completion popup menu is
++ * visible. */
++ if ((sb->wp == NULL || sb->wp == curwin) && pum_visible())
++ return;
++ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+ if (sb->wp == NULL && curwin->w_p_rl)
+***************
+*** 4207,4212 ****
+--- 4213,4224 ----
+ redraw_win_later(wp, VALID);
+ updateWindow(wp); /* update window, status line, and cmdline */
+ }
++
++ #ifdef FEAT_INS_EXPAND
++ /* May need to redraw the popup menu. */
++ if (pum_visible())
++ pum_redraw();
++ #endif
+
+ return (wp == curwin && !equalpos(curwin->w_cursor, old_cursor));
+ }
+*** ../vim-7.0.098/src/version.c Sun Sep 10 21:05:39 2006
+--- src/version.c Sun Sep 10 21:35:27 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 99,
+ /**/
+
+--
+FATHER: We are here today to witness the union of two young people in the
+ joyful bond of the holy wedlock. Unfortunately, one of them, my son
+ Herbert, has just fallen to his death.
+ [Murmurs from CROWD; the BRIDE smiles with relief, coughs.]
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.100
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.100
+Problem: "zug" may report the wrong filename. (Lawrence Kesteloot)
+Solution: Call home_replace() to fill NameBuff[].
+Files: src/spell.c
+
+
+*** ../vim-7.0.099/src/spell.c Tue Aug 29 17:28:56 2006
+--- src/spell.c Mon Sep 11 20:45:35 2006
+***************
+*** 1483,1489 ****
+ else if ((mode == FIND_COMPOUND || mode == FIND_KEEPCOMPOUND
+ || !word_ends))
+ {
+! /* If there is no flag or the word is shorter than
+ * COMPOUNDMIN reject it quickly.
+ * Makes you wonder why someone puts a compound flag on a word
+ * that's too short... Myspell compatibility requires this
+--- 1483,1489 ----
+ else if ((mode == FIND_COMPOUND || mode == FIND_KEEPCOMPOUND
+ || !word_ends))
+ {
+! /* If there is no compound flag or the word is shorter than
+ * COMPOUNDMIN reject it quickly.
+ * Makes you wonder why someone puts a compound flag on a word
+ * that's too short... Myspell compatibility requires this
+***************
+*** 9336,9342 ****
+--- 9336,9345 ----
+ {
+ fputc('#', fd);
+ if (undo)
++ {
++ home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
+ smsg((char_u *)_("Word removed from %s"), NameBuff);
++ }
+ }
+ fseek(fd, fpos_next, SEEK_SET);
+ }
+*** ../vim-7.0.099/src/version.c Sun Sep 10 21:38:48 2006
+--- src/version.c Mon Sep 11 21:36:13 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 100,
+ /**/
+
+--
+Be nice to your kids... they'll be the ones choosing your nursing home.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.101
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.101
+Problem: When the "~/.vim/spell" directory does not exist "zg" may create
+ a wrong directory. "zw" doesn't work.
+Solution: Use the directory of the file name instead of NameBuff. For "zw"
+ not only remove a good word but also add the word with "!".
+Files: src/spell.c
+
+
+*** ../vim-7.0.100/src/spell.c Mon Sep 11 21:37:27 2006
+--- src/spell.c Tue Sep 12 20:21:01 2006
+***************
+*** 9347,9366 ****
+ fclose(fd);
+ }
+ }
+! else
+ {
+ fd = mch_fopen((char *)fname, "a");
+ if (fd == NULL && new_spf)
+ {
+ /* We just initialized the 'spellfile' option and can't open the
+ * file. We may need to create the "spell" directory first. We
+ * already checked the runtime directory is writable in
+ * init_spellfile(). */
+! if (!dir_of_file_exists(fname))
+ {
+ /* The directory doesn't exist. Try creating it and opening
+ * the file again. */
+! vim_mkdir(NameBuff, 0755);
+ fd = mch_fopen((char *)fname, "a");
+ }
+ }
+--- 9347,9373 ----
+ fclose(fd);
+ }
+ }
+!
+! if (!undo)
+ {
+ fd = mch_fopen((char *)fname, "a");
+ if (fd == NULL && new_spf)
+ {
++ char_u *p;
++
+ /* We just initialized the 'spellfile' option and can't open the
+ * file. We may need to create the "spell" directory first. We
+ * already checked the runtime directory is writable in
+ * init_spellfile(). */
+! if (!dir_of_file_exists(fname) && (p = gettail_sep(fname)) != fname)
+ {
++ int c = *p;
++
+ /* The directory doesn't exist. Try creating it and opening
+ * the file again. */
+! *p = NUL;
+! vim_mkdir(fname, 0755);
+! *p = c;
+ fd = mch_fopen((char *)fname, "a");
+ }
+ }
+*** ../vim-7.0.100/src/version.c Mon Sep 11 21:37:27 2006
+--- src/version.c Tue Sep 12 21:47:21 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 101,
+ /**/
+
+--
+ARTHUR: Did you say shrubberies?
+ROGER: Yes. Shrubberies are my trade. I am a shrubber. My name is Roger
+ the Shrubber. I arrange, design, and sell shrubberies.
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.102
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.102
+Problem: Redrawing cmdline is not correct when using SCIM.
+Solution: Don't call im_get_status(). (Yukihiro Nakadaira)
+Files: src/ex_getln.c
+
+
+*** ../vim-7.0.101/src/ex_getln.c Sun Sep 10 21:05:39 2006
+--- src/ex_getln.c Tue Sep 12 20:52:51 2006
+***************
+*** 2363,2369 ****
+ {
+ if ((State & CMDLINE)
+ && xic != NULL
+! && im_get_status()
+ && !p_imdisable
+ && im_is_preediting())
+ {
+--- 2363,2369 ----
+ {
+ if ((State & CMDLINE)
+ && xic != NULL
+! /* && im_get_status() doesn't work when using SCIM */
+ && !p_imdisable
+ && im_is_preediting())
+ {
+*** ../vim-7.0.101/src/version.c Tue Sep 12 22:24:48 2006
+--- src/version.c Thu Sep 14 10:23:45 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 102,
+ /**/
+
+--
+TIM: That is not an ordinary rabbit ... 'tis the most foul cruel and
+ bad-tempered thing you ever set eyes on.
+ROBIN: You tit. I soiled my armour I was so scared!
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.103
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.103 (after 7.0.101)
+Problem: Compiler warning for uninitialized variable. (Tony Mechelynck)
+Solution: Init variable.
+Files: src/spell.c
+
+
+*** ../vim-7.0.102/src/spell.c Tue Sep 12 22:24:48 2006
+--- src/spell.c Wed Sep 13 20:46:22 2006
+***************
+*** 9251,9257 ****
+ 'spellfile' */
+ int undo; /* TRUE for "zug", "zuG", "zuw" and "zuW" */
+ {
+! FILE *fd;
+ buf_T *buf = NULL;
+ int new_spf = FALSE;
+ char_u *fname;
+--- 9251,9257 ----
+ 'spellfile' */
+ int undo; /* TRUE for "zug", "zuG", "zuw" and "zuW" */
+ {
+! FILE *fd = NULL;
+ buf_T *buf = NULL;
+ int new_spf = FALSE;
+ char_u *fname;
+*** ../vim-7.0.102/src/version.c Thu Sep 14 10:25:34 2006
+--- src/version.c Thu Sep 14 10:47:39 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 103,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.104
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.104
+Problem: The CursorHoldI event only triggers once in Insert mode. It also
+ triggers after CTRL-V and other two-key commands.
+Solution: Set "did_cursorhold" before getting a second key. Reset
+ "did_cursorhold" after handling a command.
+Files: src/edit.c, src/fileio.c
+
+
+*** ../vim-7.0.103/src/edit.c Tue Aug 29 18:36:55 2006
+--- src/edit.c Tue Sep 12 21:12:10 2006
+***************
+*** 707,712 ****
+--- 707,717 ----
+ 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. */
++ did_cursorhold = TRUE;
++ #endif
++
+ #ifdef FEAT_RIGHTLEFT
+ if (p_hkmap && KeyTyped)
+ c = hkmap(c); /* Hebrew mode mapping */
+***************
+*** 1388,1393 ****
+--- 1393,1404 ----
+ #endif
+ break;
+ } /* end of switch (c) */
++
++ #ifdef FEAT_AUTOCMD
++ /* If typed something may trigger CursorHoldI again. */
++ if (c != K_CURSORHOLD)
++ did_cursorhold = FALSE;
++ #endif
+
+ /* If the cursor was moved we didn't just insert a space */
+ if (arrow_used)
+*** ../vim-7.0.103/src/fileio.c Sat Sep 9 14:51:43 2006
+--- src/fileio.c Tue Sep 12 20:58:55 2006
+***************
+*** 8289,8295 ****
+ {
+ int state;
+
+! if (!did_cursorhold && has_cursorhold() && !Recording)
+ {
+ state = get_real_state();
+ if (state == NORMAL_BUSY || (state & INSERT) != 0)
+--- 8289,8299 ----
+ {
+ int state;
+
+! if (!did_cursorhold && has_cursorhold() && !Recording
+! #ifdef FEAT_INS_EXPAND
+! && !ins_compl_active()
+! #endif
+! )
+ {
+ state = get_real_state();
+ if (state == NORMAL_BUSY || (state & INSERT) != 0)
+*** ../vim-7.0.103/src/version.c Thu Sep 14 10:48:00 2006
+--- src/version.c Thu Sep 14 11:05:33 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 104,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.105
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.105
+Problem: When using incremental search the statusline ruler isn't updated.
+ (Christoph Koegl)
+Solution: Update the statusline when it contains the ruler.
+Files: src/ex_getln.c
+
+
+*** ../vim-7.0.104/src/ex_getln.c Thu Sep 14 10:25:34 2006
+--- src/ex_getln.c Thu Sep 14 10:42:24 2006
+***************
+*** 1756,1761 ****
+--- 1756,1766 ----
+ end_pos = curwin->w_cursor; /* shutup gcc 4 */
+
+ validate_cursor();
++ # ifdef FEAT_WINDOWS
++ /* May redraw the status line to show the cursor position. */
++ if (p_ru && curwin->w_status_height > 0)
++ curwin->w_redr_status = TRUE;
++ # endif
+
+ save_cmdline(&save_ccline);
+ update_screen(SOME_VALID);
+*** ../vim-7.0.104/src/version.c Thu Sep 14 11:07:08 2006
+--- src/version.c Thu Sep 14 11:25:37 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 105,
+ /**/
+
+--
+An indication you must be a manager:
+You feel sorry for Dilbert's boss.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.106
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.106
+Problem: The spell popup menu uses ":amenu", triggering mappings. Other
+ PopupMenu autocommands are removed. (John Little)
+Solution: Use ":anoremenu" and use an autocmd group.
+Files: runtime/menu.vim
+
+
+*** ../vim-7.0.105/runtime/menu.vim Tue Apr 18 00:06:31 2006
+--- runtime/menu.vim Thu Sep 14 13:14:25 2006
+***************
+*** 2,8 ****
+ " You can also use this as a start for your own set of menus.
+ "
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2006 Apr 17
+
+ " 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 <Bram@vim.org>
+! " Last Change: 2006 Sep 14
+
+ " 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.
+***************
+*** 885,890 ****
+--- 885,892 ----
+ if exists("s:changeitem") && s:changeitem != ''
+ call <SID>SpellDel()
+ endif
++
++ " Return quickly if spell checking is not enabled.
+ if !&spell || &spelllang == ''
+ return
+ endif
+***************
+*** 908,925 ****
+ let s:fromword = w
+ let pri = 1
+ for sug in s:suglist
+! exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
+ \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
+ let pri += 1
+ endfor
+
+ let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
+! exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
+
+ let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
+! exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
+
+! amenu 1.8 PopUp.-SpellSep- :
+ endif
+ endif
+ endfunc
+--- 910,927 ----
+ let s:fromword = w
+ let pri = 1
+ for sug in s:suglist
+! exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
+ \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
+ let pri += 1
+ endfor
+
+ let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
+! exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
+
+ let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
+! exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
+
+! anoremenu 1.8 PopUp.-SpellSep- :
+ endif
+ endif
+ endfunc
+***************
+*** 938,944 ****
+ let s:changeitem = ''
+ endfun
+
+! au! MenuPopup * call <SID>SpellPopup()
+ endif
+
+ " The GUI toolbar (for MS-Windows and GTK)
+--- 940,948 ----
+ let s:changeitem = ''
+ endfun
+
+! augroup SpellPopupMenu
+! au! MenuPopup * call <SID>SpellPopup()
+! augroup END
+ endif
+
+ " The GUI toolbar (for MS-Windows and GTK)
+***************
+*** 1013,1021 ****
+ tmenu ToolBar.FindPrev Find Previous
+ tmenu ToolBar.Replace Find / Replace...
+ endif
+! tmenu ToolBar.LoadSesn Chose a session to load
+ tmenu ToolBar.SaveSesn Save current session
+! tmenu ToolBar.RunScript Chose a Vim Script to run
+ tmenu ToolBar.Make Make current project (:make)
+ tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
+ tmenu ToolBar.TagJump Jump to tag under cursor
+--- 1017,1025 ----
+ tmenu ToolBar.FindPrev Find Previous
+ tmenu ToolBar.Replace Find / Replace...
+ endif
+! tmenu ToolBar.LoadSesn Choose a session to load
+ tmenu ToolBar.SaveSesn Save current session
+! tmenu ToolBar.RunScript Choose a Vim Script to run
+ tmenu ToolBar.Make Make current project (:make)
+ tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .)
+ tmenu ToolBar.TagJump Jump to tag under cursor
+*** ../vim-7.0.105/src/version.c Thu Sep 14 11:27:12 2006
+--- src/version.c Thu Sep 14 13:24:44 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 106,
+ /**/
+
+--
+BROTHER MAYNARD: Armaments Chapter Two Verses Nine to Twenty One.
+ANOTHER MONK: And St. Attila raised his hand grenade up on high saying "O
+ Lord bless this thy hand grenade that with it thou mayest
+ blow thine enemies to tiny bits, in thy mercy. "and the Lord
+ did grin and people did feast upon the lambs and sloths and
+ carp and anchovies and orang-utans and breakfast cereals and
+ fruit bats and...
+BROTHER MAYNARD: Skip a bit brother ...
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.107
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.107
+Problem: Incremental search doesn't redraw the text tabline. (Ilya Bobir)
+ Also happens in other situations with one window in a tab page.
+Solution: Redraw the tabline after clearing the screen.
+Files: src/screen.c
+
+
+*** ../vim-7.0.106/src/screen.c Tue Aug 29 17:28:56 2006
+--- src/screen.c Thu Sep 14 21:00:32 2006
+***************
+*** 1228,1234 ****
+--- 1228,1241 ----
+ {
+ mid_end = wp->w_height;
+ if (lastwin == firstwin)
++ {
+ screenclear();
++ #ifdef FEAT_WINDOWS
++ /* The screen was cleared, redraw the tab pages line. */
++ if (redraw_tabline)
++ draw_tabline();
++ #endif
++ }
+ }
+ }
+ else
+*** ../vim-7.0.106/src/version.c Thu Sep 14 13:35:17 2006
+--- src/version.c Thu Sep 14 21:03:40 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 107,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.109
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.109
+Problem: Lisp indenting is confused by escaped quotes in strings. (Dorai
+ Sitaram)
+Solution: Check for backslash inside strings. (Sergey Khorev)
+Files: src/misc1.c
+
+
+*** ../vim-7.0.108/src/misc1.c Tue Sep 5 20:56:11 2006
+--- src/misc1.c Wed Sep 13 20:13:57 2006
+***************
+*** 8074,8082 ****
+ }
+ if (*that == '"' && *(that + 1) != NUL)
+ {
+! that++;
+! while (*that && (*that != '"' || *(that - 1) == '\\'))
+! ++that;
+ }
+ if (*that == '(' || *that == '[')
+ ++parencount;
+--- 8074,8093 ----
+ }
+ if (*that == '"' && *(that + 1) != NUL)
+ {
+! while (*++that && *that != '"')
+! {
+! /* skipping escaped characters in the string */
+! if (*that == '\\')
+! {
+! if (*++that == NUL)
+! break;
+! if (that[1] == NUL)
+! {
+! ++that;
+! break;
+! }
+! }
+! }
+ }
+ if (*that == '(' || *that == '[')
+ ++parencount;
+*** ../vim-7.0.108/src/version.c Thu Sep 14 21:36:35 2006
+--- src/version.c Fri Sep 15 20:15:40 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 109,
+ /**/
+
+--
+ARTHUR: No, hang on! Just answer the five questions ...
+GALAHAD: Three questions ...
+ARTHUR: Three questions ... And we shall watch ... and pray.
+ "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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.110
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.110
+Problem: Amiga: Compilation problems when not using libnix.
+Solution: Change a few #ifdefs. (Willy Catteau)
+Files: src/memfile.c
+
+
+*** ../vim-7.0.109/src/memfile.c Tue Mar 7 00:27:12 2006
+--- src/memfile.c Sun Sep 17 15:50:00 2006
+***************
+*** 517,523 ****
+ mf_ins_free(mfp, hp); /* put *hp in the free list */
+ }
+
+! #if defined(__MORPHOS__)
+ /* function is missing in MorphOS libnix version */
+ extern unsigned long *__stdfiledes;
+
+--- 517,523 ----
+ mf_ins_free(mfp, hp); /* put *hp in the free list */
+ }
+
+! #if defined(__MORPHOS__) && defined(__libnix__)
+ /* function is missing in MorphOS libnix version */
+ extern unsigned long *__stdfiledes;
+
+***************
+*** 677,691 ****
+ # else
+ # if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)
+ {
+! # if defined(__GNUC__) && !defined(__MORPHOS__)
+ /* Have function (in libnix at least),
+ * but ain't got no prototype anywhere. */
+ extern unsigned long fdtofh(int filedescriptor);
+ # endif
+ BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
+
+ if (fh != 0)
+ Flush(fh);
+ }
+ # else /* assume Manx */
+ Flush(_devtab[mfp->mf_fd].fd);
+--- 677,695 ----
+ # else
+ # if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)
+ {
+! # if defined(__GNUC__) && !defined(__MORPHOS__) && defined(__libnix__)
+ /* Have function (in libnix at least),
+ * but ain't got no prototype anywhere. */
+ extern unsigned long fdtofh(int filedescriptor);
+ # endif
++ # if !defined(__libnix__)
++ fflush(NULL);
++ # else
+ BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
+
+ if (fh != 0)
+ Flush(fh);
++ # endif
+ }
+ # else /* assume Manx */
+ Flush(_devtab[mfp->mf_fd].fd);
+*** ../vim-7.0.109/src/version.c Fri Sep 15 20:17:49 2006
+--- src/version.c Tue Sep 26 13:48:48 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 110,
+ /**/
+
+--
+A fool must search for a greater fool to find admiration.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.111
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.111
+Problem: The gzip plugin can't handle filenames with single quotes.
+Solution: Add and use the shellescape() function. (partly by Alexey Froloff)
+Files: runtime/autoload/gzip.vim, runtime/doc/eval.txt, src/eval.c,
+ src/mbyte.c, src/misc2.c, src/proto/misc2.pro
+
+
+*** ../vim-7.0.110/runtime/autoload/gzip.vim Tue Aug 8 19:55:06 2006
+--- runtime/autoload/gzip.vim Tue Oct 3 14:39:29 2006
+***************
+*** 1,6 ****
+ " Vim autoload file for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2006 Jul 19
+
+ " These functions are used by the gzip plugin.
+
+--- 1,6 ----
+ " Vim autoload file for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2006 Oct 03
+
+ " These functions are used by the gzip plugin.
+
+***************
+*** 68,76 ****
+ let tmp = tempname()
+ let tmpe = tmp . "." . expand("<afile>:e")
+ " write the just read lines to a temp file "'[,']w tmp.gz"
+! execute "silent '[,']w " . tmpe
+ " uncompress the temp file: call system("gzip -dn tmp.gz")
+! call system(a:cmd . " " . tmpe)
+ if !filereadable(tmp)
+ " uncompress didn't work! Keep the compressed file then.
+ echoerr "Error: Could not read uncompressed file"
+--- 68,76 ----
+ let tmp = tempname()
+ let tmpe = tmp . "." . expand("<afile>:e")
+ " write the just read lines to a temp file "'[,']w tmp.gz"
+! execute "silent '[,']w " . escape(tmpe, ' ')
+ " uncompress the temp file: call system("gzip -dn tmp.gz")
+! call system(a:cmd . " " . s:escape(tmpe))
+ if !filereadable(tmp)
+ " uncompress didn't work! Keep the compressed file then.
+ echoerr "Error: Could not read uncompressed file"
+***************
+*** 127,135 ****
+ let nmt = s:tempname(nm)
+ if rename(nm, nmt) == 0
+ if exists("b:gzip_comp_arg")
+! call system(a:cmd . " " . b:gzip_comp_arg . " '" . nmt . "'")
+ else
+! call system(a:cmd . " '" . nmt . "'")
+ endif
+ call rename(nmt . "." . expand("<afile>:e"), nm)
+ endif
+--- 127,135 ----
+ let nmt = s:tempname(nm)
+ if rename(nm, nmt) == 0
+ if exists("b:gzip_comp_arg")
+! call system(a:cmd . " " . b:gzip_comp_arg . " " . s:escape(nmt))
+ else
+! call system(a:cmd . " " . s:escape(nmt))
+ endif
+ call rename(nmt . "." . expand("<afile>:e"), nm)
+ endif
+***************
+*** 154,163 ****
+ if rename(nm, nmte) == 0
+ if &patchmode != "" && getfsize(nm . &patchmode) == -1
+ " Create patchmode file by creating the decompressed file new
+! call system(a:cmd . " -c " . nmte . " > " . nmt)
+ call rename(nmte, nm . &patchmode)
+ else
+! call system(a:cmd . " " . nmte)
+ endif
+ call rename(nmt, nm)
+ endif
+--- 154,163 ----
+ if rename(nm, nmte) == 0
+ if &patchmode != "" && getfsize(nm . &patchmode) == -1
+ " Create patchmode file by creating the decompressed file new
+! call system(a:cmd . " -c " . s:escape(nmte) . " > " . s:escape(nmt))
+ call rename(nmte, nm . &patchmode)
+ else
+! call system(a:cmd . " " . s:escape(nmte))
+ endif
+ call rename(nmt, nm)
+ endif
+***************
+*** 173,178 ****
+--- 173,186 ----
+ return fn
+ endif
+ return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
++ endfun
++
++ fun s:escape(name)
++ " shellescape() was added by patch 7.0.111
++ if v:version > 700 || (v:version == 700 && has('patch111'))
++ return shellescape(a:name)
++ endif
++ return "'" . a:name . "'"
+ endfun
+
+ " vim: set sw=2 :
+*** ../vim-7.0.110/runtime/doc/eval.txt Sun May 7 17:08:32 2006
+--- runtime/doc/eval.txt Fri Sep 22 19:43:18 2006
+***************
+*** 1,4 ****
+! *eval.txt* For Vim version 7.0. Last change: 2006 May 06
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt* For Vim version 7.0. Last change: 2006 Sep 22
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+***************
+*** 1709,1714 ****
+--- 1715,1722 ----
+ settabwinvar( {tabnr}, {winnr}, {varname}, {val}) set {varname} in window
+ {winnr} in tab page {tabnr} to {val}
+ setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val}
++ shellescape( {string}) String escape {string} for use as shell
++ command argument
+ simplify( {filename}) String simplify filename as much as possible
+ sort( {list} [, {func}]) List sort {list}, using {func} to compare
+ soundfold( {word}) String sound-fold {word}
+***************
+*** 4434,4439 ****
+--- 4457,4477 ----
+ :call setwinvar(1, "&list", 0)
+ :call setwinvar(2, "myvar", "foobar")
+
++ shellescape({string}) *shellescape()*
++ Escape {string} for use as shell command argument.
++ On MS-Windows and MS-DOS, when 'shellslash' is not set, it
++ will enclose {string} double quotes and double all double
++ quotes within {string}.
++ For other systems, it will enclose {string} in single quotes
++ and replace all "'" with "'\''".
++ Example: >
++ :echo shellescape('c:\program files\vim')
++ < results in:
++ "c:\program files\vim" ~
++ Example usage: >
++ :call system("chmod +x -- " . shellescape(expand("%")))
++
++
+ simplify({filename}) *simplify()*
+ Simplify the file name as much as possible without changing
+ the meaning. Shortcuts (on MS-Windows) or symbolic links (on
+*** ../vim-7.0.110/src/eval.c Sat Sep 9 12:05:39 2006
+--- src/eval.c Thu Sep 14 17:44:41 2006
+***************
+*** 622,627 ****
+--- 622,628 ----
+ static void f_setreg __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
++ static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_sort __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_soundfold __ARGS((typval_T *argvars, typval_T *rettv));
+***************
+*** 7146,7151 ****
+--- 7147,7153 ----
+ {"setreg", 2, 3, f_setreg},
+ {"settabwinvar", 4, 4, f_settabwinvar},
+ {"setwinvar", 3, 3, f_setwinvar},
++ {"shellescape", 1, 1, f_shellescape},
+ {"simplify", 1, 1, f_simplify},
+ {"sort", 1, 2, f_sort},
+ {"soundfold", 1, 1, f_soundfold},
+***************
+*** 14602,14607 ****
+--- 14604,14621 ----
+ }
+ #endif
+ }
++ }
++
++ /*
++ * "shellescape({string})" function
++ */
++ static void
++ f_shellescape(argvars, rettv)
++ typval_T *argvars;
++ typval_T *rettv;
++ {
++ rettv->vval.v_string = vim_strsave_shellescape(get_tv_string(&argvars[0]));
++ rettv->v_type = VAR_STRING;
+ }
+
+ /*
+*** ../vim-7.0.110/src/misc2.c Thu May 4 23:50:56 2006
+--- src/misc2.c Tue Sep 26 23:13:57 2006
+***************
+*** 1229,1234 ****
+--- 1229,1322 ----
+ return escaped_string;
+ }
+
++ #if defined(FEAT_EVAL) || defined(PROTO)
++ /*
++ * Escape "string" for use as a shell argument with system().
++ * This uses single quotes, except when we know we need to use double qoutes
++ * (MS-DOS and MS-Windows without 'shellslash' set).
++ * Returns the result in allocated memory, NULL if we have run out.
++ */
++ char_u *
++ vim_strsave_shellescape(string)
++ char_u *string;
++ {
++ unsigned length;
++ char_u *p;
++ char_u *d;
++ char_u *escaped_string;
++
++ /* First count the number of extra bytes required. */
++ length = STRLEN(string) + 3; /* two quotes and the trailing NUL */
++ for (p = string; *p != NUL; mb_ptr_adv(p))
++ {
++ # if defined(WIN32) || defined(WIN16) || defined(DOS)
++ if (!p_ssl)
++ {
++ if (*p == '"')
++ ++length; /* " -> "" */
++ }
++ else
++ # endif
++ if (*p == '\'')
++ length += 3; /* ' => '\'' */
++ }
++
++ /* Allocate memory for the result and fill it. */
++ escaped_string = alloc(length);
++ if (escaped_string != NULL)
++ {
++ d = escaped_string;
++
++ /* add opening quote */
++ # if defined(WIN32) || defined(WIN16) || defined(DOS)
++ if (!p_ssl)
++ *d++ = '"';
++ else
++ # endif
++ *d++ = '\'';
++
++ for (p = string; *p != NUL; )
++ {
++ # if defined(WIN32) || defined(WIN16) || defined(DOS)
++ if (!p_ssl)
++ {
++ if (*p == '"')
++ {
++ *d++ = '"';
++ *d++ = '"';
++ ++p;
++ continue;
++ }
++ }
++ else
++ # endif
++ if (*p == '\'')
++ {
++ *d++='\'';
++ *d++='\\';
++ *d++='\'';
++ *d++='\'';
++ ++p;
++ continue;
++ }
++
++ MB_COPY_CHAR(p, d);
++ }
++
++ /* add terminating quote and finish with a NUL */
++ # if defined(WIN32) || defined(WIN16) || defined(DOS)
++ if (!p_ssl)
++ *d++ = '"';
++ else
++ # endif
++ *d++ = '\'';
++ *d = NUL;
++ }
++
++ return escaped_string;
++ }
++ #endif
++
+ /*
+ * Like vim_strsave(), but make all characters uppercase.
+ * This uses ASCII lower-to-upper case translation, language independent.
+*** ../vim-7.0.110/src/proto/misc2.pro Fri Mar 24 23:42:55 2006
+--- src/proto/misc2.pro Thu Sep 14 18:28:43 2006
+***************
+*** 29,34 ****
+--- 29,35 ----
+ extern char_u *vim_strnsave __ARGS((char_u *string, int len));
+ extern char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
+ extern char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
++ extern char_u *vim_strsave_shellescape __ARGS((char_u *string));
+ extern char_u *vim_strsave_up __ARGS((char_u *string));
+ extern char_u *vim_strnsave_up __ARGS((char_u *string, int len));
+ extern void vim_strup __ARGS((char_u *p));
+*** ../vim-7.0.110/src/version.c Tue Sep 26 13:49:41 2006
+--- src/version.c Tue Oct 3 14:36:40 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 111,
+ /**/
+
+--
+The only way the average employee can speak to an executive is by taking a
+second job as a golf caddie.
+ (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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.112
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.112
+Problem: Python interface does not work with Python 2.5.
+Solution: Change PyMem_DEL() to Py_DECREF(). (Sumner Hayes)
+Files: src/if_python.c
+
+
+*** ../vim-7.0.111/src/if_python.c Sun Apr 30 20:48:37 2006
+--- src/if_python.c Fri Sep 22 15:08:33 2006
+***************
+*** 1463,1469 ****
+ if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+ this->buf->b_python_ref = NULL;
+
+! PyMem_DEL(self);
+ }
+
+ static PyObject *
+--- 1463,1469 ----
+ if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+ this->buf->b_python_ref = NULL;
+
+! Py_DECREF(self);
+ }
+
+ static PyObject *
+***************
+*** 1674,1680 ****
+ bufr = (BufferObject *)BufferNew(buf);
+ if (bufr == NULL)
+ {
+! PyMem_DEL(self);
+ return NULL;
+ }
+ Py_INCREF(bufr);
+--- 1674,1680 ----
+ bufr = (BufferObject *)BufferNew(buf);
+ if (bufr == NULL)
+ {
+! Py_DECREF(self);
+ return NULL;
+ }
+ Py_INCREF(bufr);
+***************
+*** 1690,1696 ****
+ RangeDestructor(PyObject *self)
+ {
+ Py_DECREF(((RangeObject *)(self))->buf);
+! PyMem_DEL(self);
+ }
+
+ static PyObject *
+--- 1690,1696 ----
+ RangeDestructor(PyObject *self)
+ {
+ Py_DECREF(((RangeObject *)(self))->buf);
+! Py_DECREF(self);
+ }
+
+ static PyObject *
+***************
+*** 1944,1950 ****
+ if (this->win && this->win != INVALID_WINDOW_VALUE)
+ this->win->w_python_ref = NULL;
+
+! PyMem_DEL(self);
+ }
+
+ static int
+--- 1944,1950 ----
+ if (this->win && this->win != INVALID_WINDOW_VALUE)
+ this->win->w_python_ref = NULL;
+
+! Py_DECREF(self);
+ }
+
+ static int
+*** ../vim-7.0.111/src/version.c Tue Oct 3 14:43:31 2006
+--- src/version.c Tue Oct 3 14:46:10 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 112,
+ /**/
+
+--
+A salesperson says: Translation:
+"backward compatible" Old technology
+"Premium" Overpriced
+"Can't keep it on the shelf" Unavailable
+"Stands alone" Piece of shit
+"Proprietary" Incompatible
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.113
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.113
+Problem: Using CTRL-L in Insert completion when there is no current match
+ may cause a crash. (Yukihiro Nakadaira)
+Solution: Check for compl_leader to be NULL
+Files: src/edit.c
+
+
+*** ../vim-7.0.112/src/edit.c Thu Sep 14 11:07:08 2006
+--- src/edit.c Tue Oct 3 14:57:47 2006
+***************
+*** 3206,3212 ****
+ for (cp = compl_shown_match->cp_next; cp != NULL
+ && cp != compl_first_match; cp = cp->cp_next)
+ {
+! if (ins_compl_equal(cp, compl_leader,
+ (int)STRLEN(compl_leader)))
+ {
+ p = cp->cp_str;
+--- 3206,3213 ----
+ for (cp = compl_shown_match->cp_next; cp != NULL
+ && cp != compl_first_match; cp = cp->cp_next)
+ {
+! if (compl_leader == NULL
+! || ins_compl_equal(cp, compl_leader,
+ (int)STRLEN(compl_leader)))
+ {
+ p = cp->cp_str;
+*** ../vim-7.0.112/src/version.c Tue Oct 3 15:02:11 2006
+--- src/version.c Tue Oct 3 15:20:13 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 113,
+ /**/
+
+--
+I recommend ordering large cargo containers of paper towels to make up
+whatever budget underruns you have. Paper products are always useful and they
+have the advantage of being completely flushable if you need to make room in
+the storage area later.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.114
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.114
+Problem: When aborting an insert with CTRL-C an extra undo point is
+ created in the GUI. (Yukihiro Nakadaira)
+Solution: Call gotchars() only when advancing.
+Files: src/getchar.c
+
+
+*** ../vim-7.0.113/src/getchar.c Tue Sep 5 12:57:14 2006
+--- src/getchar.c Tue Sep 26 17:44:45 2006
+***************
+*** 1960,1969 ****
+ c = Ctrl_C;
+ flush_buffers(TRUE); /* flush all typeahead */
+
+! /* Also record this character, it might be needed to
+! * get out of Insert mode. */
+! *typebuf.tb_buf = c;
+! gotchars(typebuf.tb_buf, 1);
+ cmd_silent = FALSE;
+
+ break;
+--- 1962,1974 ----
+ c = Ctrl_C;
+ flush_buffers(TRUE); /* flush all typeahead */
+
+! if (advance)
+! {
+! /* Also record this character, it might be needed to
+! * get out of Insert mode. */
+! *typebuf.tb_buf = c;
+! gotchars(typebuf.tb_buf, 1);
+! }
+ cmd_silent = FALSE;
+
+ break;
+*** ../vim-7.0.113/src/version.c Tue Oct 3 15:22:00 2006
+--- src/version.c Tue Oct 3 15:34:14 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 114,
+ /**/
+
+--
+Sometimes you can protect millions of dollars in your budget simply by buying
+a bag of cookies, dropping it on the budget anylyst's desk, and saying
+something deeply personal such as "How was your weekend, big guy?"
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.115
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.115
+Problem: When 'ignorecase' is set, Insert mode completion only adds "foo"
+ and not "Foo" when both are found.
+ A found match isn't displayed right away when 'completeopt' does
+ not have "menu" or "menuone".
+Solution: Do not ignore case when checking if a completion match already
+ exists. call ins_compl_check_keys() also when not using a popup
+ menu. (Yukihiro Nakadaira)
+Files: src/edit.c
+
+
+*** ../vim-7.0.114/src/edit.c Tue Oct 3 15:22:00 2006
+--- src/edit.c Tue Oct 3 14:57:47 2006
+***************
+*** 2157,2163 ****
+ do
+ {
+ if ( !(match->cp_flags & ORIGINAL_TEXT)
+! && ins_compl_equal(match, str, len)
+ && match->cp_str[len] == NUL)
+ return NOTDONE;
+ match = match->cp_next;
+--- 2157,2163 ----
+ do
+ {
+ if ( !(match->cp_flags & ORIGINAL_TEXT)
+! && STRNCMP(match->cp_str, str, len) == 0
+ && match->cp_str[len] == NUL)
+ return NOTDONE;
+ match = match->cp_next;
+***************
+*** 4042,4048 ****
+ if (got_int)
+ break;
+ /* Fill the popup menu as soon as possible. */
+! if (pum_wanted() && type != -1)
+ ins_compl_check_keys(0);
+
+ if ((ctrl_x_mode != 0 && ctrl_x_mode != CTRL_X_WHOLE_LINE)
+--- 4042,4048 ----
+ if (got_int)
+ break;
+ /* Fill the popup menu as soon as possible. */
+! if (type != -1)
+ ins_compl_check_keys(0);
+
+ if ((ctrl_x_mode != 0 && ctrl_x_mode != CTRL_X_WHOLE_LINE)
+*** ../vim-7.0.114/src/version.c Tue Oct 3 15:36:09 2006
+--- src/version.c Tue Oct 3 15:46:15 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 115,
+ /**/
+
+--
+The budget process was invented by an alien race of sadistic beings who
+resemble large cats.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.116
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.116
+Problem: 64 bit Windows version reports "32 bit" in the ":version" output.
+ (M. Veerman)
+Solution: Change the text for Win64.
+Files: src/version.c
+
+
+*** ../vim-7.0.115/src/version.c Tue Oct 3 15:49:20 2006
+--- src/version.c Tue Oct 3 16:29:31 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 116,
+ /**/
+***************
+*** 962,966 ****
+--- 964,972 ----
+ MSG_PUTS(_("\nMS-Windows 16/32 bit GUI version"));
+ # else
++ # ifdef _WIN64
++ MSG_PUTS(_("\nMS-Windows 64 bit GUI version"));
++ # else
+ MSG_PUTS(_("\nMS-Windows 32 bit GUI version"));
++ # endif
+ # endif
+ if (gui_is_win32s())
+
+--
+Article in the first Free Software Magazine: "Bram Moolenaar studied electrical
+engineering at the Technical University of Delft and graduated in 1985 on a
+multi-processor Unix architecture."
+Response by "dimator": Could the school not afford a proper stage for the
+ceremony?
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.117
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.117
+Problem: Using "extend" on a syntax item inside a region with "keepend", an
+ intermediate item may be truncated.
+ When applying the "keepend" and there is an offset to the end
+ pattern the highlighting of a contained item isn't adjusted.
+Solution: Use the seen_keepend flag to remember when to apply the "keepend"
+ flag. Adjust the keepend highlighting properly. (Ilya Bobir)
+Files: src/syntax.c
+
+
+*** ../vim-7.0.116/src/syntax.c Thu Apr 27 01:58:59 2006
+--- src/syntax.c Tue Oct 3 17:00:44 2006
+***************
+*** 977,982 ****
+--- 977,983 ----
+ {
+ stateitem_T *cur_si;
+ int i;
++ int seen_keepend;
+
+ if (startofline)
+ {
+***************
+*** 1002,1008 ****
+ /*
+ * Need to update the end of a start/skip/end that continues from the
+ * previous line. And regions that have "keepend", because they may
+! * influence contained items.
+ * Then check for items ending in column 0.
+ */
+ i = current_state.ga_len - 1;
+--- 1003,1012 ----
+ /*
+ * Need to update the end of a start/skip/end that continues from the
+ * previous line. And regions that have "keepend", because they may
+! * influence contained items. If we've just removed "extend"
+! * (startofline == 0) then we should update ends of normal regions
+! * contained inside "keepend" because "extend" could have extended
+! * these "keepend" regions as well as contained normal regions.
+ * Then check for items ending in column 0.
+ */
+ i = current_state.ga_len - 1;
+***************
+*** 1010,1019 ****
+--- 1014,1026 ----
+ for ( ; i > keepend_level; --i)
+ if (CUR_STATE(i).si_flags & HL_EXTEND)
+ break;
++
++ seen_keepend = FALSE;
+ for ( ; i < current_state.ga_len; ++i)
+ {
+ cur_si = &CUR_STATE(i);
+ if ((cur_si->si_flags & HL_KEEPEND)
++ || (seen_keepend && !startofline)
+ || (i == current_state.ga_len - 1 && startofline))
+ {
+ cur_si->si_h_startpos.col = 0; /* start highl. in col 0 */
+***************
+*** 1021,1026 ****
+--- 1028,1036 ----
+
+ if (!(cur_si->si_flags & HL_MATCHCONT))
+ update_si_end(cur_si, (int)current_col, !startofline);
++
++ if (!startofline && (cur_si->si_flags & HL_KEEPEND))
++ seen_keepend = TRUE;
+ }
+ }
+ check_keepend();
+***************
+*** 2564,2569 ****
+--- 2574,2580 ----
+ {
+ int i;
+ lpos_T maxpos;
++ lpos_T maxpos_h;
+ stateitem_T *sip;
+
+ /*
+***************
+*** 2583,2605 ****
+ break;
+
+ maxpos.lnum = 0;
+ for ( ; i < current_state.ga_len; ++i)
+ {
+ sip = &CUR_STATE(i);
+ if (maxpos.lnum != 0)
+ {
+ limit_pos_zero(&sip->si_m_endpos, &maxpos);
+! limit_pos_zero(&sip->si_h_endpos, &maxpos);
+ limit_pos_zero(&sip->si_eoe_pos, &maxpos);
+ sip->si_ends = TRUE;
+ }
+! if (sip->si_ends
+! && (sip->si_flags & HL_KEEPEND)
+! && (maxpos.lnum == 0
+ || maxpos.lnum > sip->si_m_endpos.lnum
+ || (maxpos.lnum == sip->si_m_endpos.lnum
+! && maxpos.col > sip->si_m_endpos.col)))
+! maxpos = sip->si_m_endpos;
+ }
+ }
+
+--- 2594,2623 ----
+ break;
+
+ maxpos.lnum = 0;
++ maxpos_h.lnum = 0;
+ for ( ; i < current_state.ga_len; ++i)
+ {
+ sip = &CUR_STATE(i);
+ if (maxpos.lnum != 0)
+ {
+ limit_pos_zero(&sip->si_m_endpos, &maxpos);
+! limit_pos_zero(&sip->si_h_endpos, &maxpos_h);
+ limit_pos_zero(&sip->si_eoe_pos, &maxpos);
+ sip->si_ends = TRUE;
+ }
+! if (sip->si_ends && (sip->si_flags & HL_KEEPEND))
+! {
+! if (maxpos.lnum == 0
+ || maxpos.lnum > sip->si_m_endpos.lnum
+ || (maxpos.lnum == sip->si_m_endpos.lnum
+! && maxpos.col > sip->si_m_endpos.col))
+! maxpos = sip->si_m_endpos;
+! if (maxpos_h.lnum == 0
+! || maxpos_h.lnum > sip->si_h_endpos.lnum
+! || (maxpos_h.lnum == sip->si_h_endpos.lnum
+! && maxpos_h.col > sip->si_h_endpos.col))
+! maxpos_h = sip->si_h_endpos;
+! }
+ }
+ }
+
+*** ../vim-7.0.116/src/version.c Tue Oct 3 16:30:40 2006
+--- src/version.c Tue Oct 3 16:59:50 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 117,
+ /**/
+
+--
+For humans, honesty is a matter of degree. Engineers are always honest in
+matters of technology and human relationships. That's why it's a good idea
+to keep engineers away from customers, romantic interests, and other people
+who can't handle the truth.
+ (Scott Adams - The Dilbert principle)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.118
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.118
+Problem: printf() does not do zero padding for strings.
+Solution: Do allow zero padding for strings.
+Files: src/message.c
+
+
+*** ../vim-7.0.117/src/message.c Sun Sep 3 16:39:51 2006
+--- src/message.c Tue Oct 3 15:41:44 2006
+***************
+*** 4124,4131 ****
+ case 'c':
+ case 's':
+ length_modifier = '\0';
+- zero_padding = 0; /* turn zero padding off for string
+- conversions */
+ str_arg_l = 1;
+ switch (fmt_spec)
+ {
+--- 4124,4129 ----
+*** ../vim-7.0.117/src/version.c Tue Oct 3 17:04:21 2006
+--- src/version.c Tue Oct 3 17:20:11 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 118,
+ /**/
+
+--
+While it's true that many normal people whould prefer not to _date_ an
+engineer, most normal people harbor an intense desire to _mate_ with them,
+thus producing engineerlike children who will have high-paying jobs long
+before losing their virginity.
+ (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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.119
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.119
+Problem: When going back from Insert to Normal mode the CursorHold event
+ doesn't trigger. (Yakov Lerner)
+Solution: Reset "did_cursorhold" when leaving Insert mode.
+Files: src/edit.c
+
+
+*** ../vim-7.0.118/src/edit.c Tue Oct 3 15:49:20 2006
+--- src/edit.c Thu Oct 5 22:26:27 2006
+***************
+*** 923,928 ****
+--- 923,929 ----
+ if (cmdchar != 'r' && cmdchar != 'v')
+ apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL,
+ FALSE, curbuf);
++ did_cursorhold = FALSE;
+ #endif
+ return (c == Ctrl_O);
+ }
+*** ../vim-7.0.118/src/version.c Tue Oct 3 17:21:04 2006
+--- src/version.c Fri Oct 6 20:35:45 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 119,
+ /**/
+
+--
+The Feynman problem solving Algorithm:
+ 1) Write down the problem
+ 2) Think real hard
+ 3) Write down the answer
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.120
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.120
+Problem: Crash when using CTRL-R = at the command line and entering
+ "getreg('=')". (James Vega)
+Solution: Avoid recursiveness of evaluating the = register.
+Files: src/ops.c
+
+
+*** ../vim-7.0.119/src/ops.c Sun Jul 23 22:37:29 2006
+--- src/ops.c Fri Oct 6 21:27:40 2006
+***************
+*** 770,775 ****
+--- 770,776 ----
+ {
+ char_u *expr_copy;
+ char_u *rv;
++ static int nested = 0;
+
+ if (expr_line == NULL)
+ return NULL;
+***************
+*** 780,786 ****
+--- 781,794 ----
+ if (expr_copy == NULL)
+ return NULL;
+
++ /* When we are invoked recursively limit the evaluation to 10 levels.
++ * Then return the string as-is. */
++ if (nested >= 10)
++ return expr_copy;
++
++ ++nested;
+ rv = eval_to_string(expr_copy, NULL, TRUE);
++ --nested;
+ vim_free(expr_copy);
+ return rv;
+ }
+*** ../vim-7.0.119/src/version.c Fri Oct 6 20:39:58 2006
+--- src/version.c Fri Oct 6 21:31:56 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 120,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+16. You step out of your room and realize that your parents have moved and
+ you don't have a clue when it happened.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.121
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.121
+Problem: GUI: Dragging the last status line doesn't work when there is a
+ text tabline. (Markus Wolf)
+Solution: Take the text tabline into account when deciding to start modeless
+ selection.
+Files: src/gui.c
+
+
+*** ../vim-7.0.120/src/gui.c Sun Sep 10 21:38:48 2006
+--- src/gui.c Sun Oct 8 12:47:04 2006
+***************
+*** 2873,2878 ****
+--- 2873,2881 ----
+ */
+ if ((State == NORMAL || State == NORMAL_BUSY || (State & INSERT))
+ && Y_2_ROW(y) >= topframe->fr_height
++ # ifdef FEAT_WINDOWS
++ + firstwin->w_winrow
++ # endif
+ && button != MOUSE_DRAG
+ # ifdef FEAT_MOUSESHAPE
+ && !drag_status_line
+*** ../vim-7.0.120/src/version.c Fri Oct 6 23:33:22 2006
+--- src/version.c Sun Oct 8 13:55:58 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 121,
+ /**/
+
+--
+If they don't keep on exercising their lips, he thought, their brains
+start working.
+ -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.122
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.122
+Problem: GUI: When clearing after a bold, double-wide character half a
+ character may be drawn.
+Solution: Check for double-wide character and redraw it. (Yukihiro Nakadaira)
+Files: src/screen.c
+
+
+*** ../vim-7.0.121/src/screen.c Thu Sep 14 21:04:09 2006
+--- src/screen.c Sat Oct 7 15:13:43 2006
+***************
+*** 5079,5093 ****
+ * character too. If we didn't skip any blanks above, then we
+ * only redraw if the character wasn't already redrawn anyway.
+ */
+! if (gui.in_use && (col > startCol || !redraw_this)
+! # ifdef FEAT_MBYTE
+! && enc_dbcs == 0
+! # endif
+! )
+ {
+ hl = ScreenAttrs[off_to];
+ if (hl > HL_ALL || (hl & HL_BOLD))
+! screen_char(off_to - 1, row, col + coloff - 1);
+ }
+ #endif
+ screen_fill(row, row + 1, col + coloff, clear_width + coloff,
+--- 5079,5116 ----
+ * character too. If we didn't skip any blanks above, then we
+ * only redraw if the character wasn't already redrawn anyway.
+ */
+! if (gui.in_use && (col > startCol || !redraw_this))
+ {
+ hl = ScreenAttrs[off_to];
+ if (hl > HL_ALL || (hl & HL_BOLD))
+! {
+! int prev_cells = 1;
+! # ifdef FEAT_MBYTE
+! if (enc_utf8)
+! /* for utf-8, ScreenLines[char_offset + 1] == 0 means
+! * that its width is 2. */
+! prev_cells = ScreenLines[off_to - 1] == 0 ? 2 : 1;
+! else if (enc_dbcs != 0)
+! {
+! /* find previous character by counting from first
+! * column and get its width. */
+! unsigned off = LineOffset[row];
+!
+! while (off < off_to)
+! {
+! prev_cells = (*mb_off2cells)(off);
+! off += prev_cells;
+! }
+! }
+!
+! if (enc_dbcs != 0 && prev_cells > 1)
+! screen_char_2(off_to - prev_cells, row,
+! col + coloff - prev_cells);
+! else
+! # endif
+! screen_char(off_to - prev_cells, row,
+! col + coloff - prev_cells);
+! }
+ }
+ #endif
+ screen_fill(row, row + 1, col + coloff, clear_width + coloff,
+*** ../vim-7.0.121/src/version.c Sun Oct 8 13:56:53 2006
+--- src/version.c Mon Oct 9 22:10:17 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 122,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+7. Finish all your sentences with "in accordance with the prophecy".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.123
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.123
+Problem: On SCO Openserver configure selects the wrong terminal library.
+Solution: Put terminfo before the other libraries. (Roger Cornelius)
+ Also fix a small problem compiling on Mac without Darwin.
+Files: src/configure.in, src/auto/configure
+
+
+*** ../vim-7.0.122/src/configure.in Tue Sep 5 17:30:25 2006
+--- src/configure.in Thu Oct 5 22:01:13 2006
+***************
+*** 681,687 ****
+ AC_MSG_CHECKING([if -pthread should be used])
+ threadsafe_flag=
+ thread_lib=
+! if test "x$MACOSX" != "xyes"; then
+ test "$GCC" = yes && threadsafe_flag="-pthread"
+ if test "`(uname) 2>/dev/null`" = FreeBSD; then
+ threadsafe_flag="-D_THREAD_SAFE"
+--- 681,688 ----
+ AC_MSG_CHECKING([if -pthread should be used])
+ threadsafe_flag=
+ thread_lib=
+! dnl if test "x$MACOSX" != "xyes"; then
+! if test "`(uname) 2>/dev/null`" != Darwin; then
+ test "$GCC" = yes && threadsafe_flag="-pthread"
+ if test "`(uname) 2>/dev/null`" = FreeBSD; then
+ threadsafe_flag="-D_THREAD_SAFE"
+***************
+*** 2151,2158 ****
+ dnl Newer versions of ncurses are preferred over anything.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
+ case "`uname -s 2>/dev/null`" in
+! OSF1) tlibs="ncurses curses termlib termcap";;
+ *) tlibs="ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+--- 2152,2160 ----
+ dnl Newer versions of ncurses are preferred over anything.
+ dnl Older versions of ncurses have bugs, get a new one!
+ dnl Digital Unix (OSF1) should use curses (Ronald Schild).
++ dnl On SCO Openserver should prefer termlib (Roger Cornelius).
+ case "`uname -s 2>/dev/null`" in
+! OSF1|SCO_SV) tlibs="ncurses curses termlib termcap";;
+ *) tlibs="ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+*** ../vim-7.0.122/src/auto/configure Tue Sep 5 17:30:25 2006
+--- src/auto/configure Thu Oct 5 22:02:45 2006
+***************
+*** 4256,4262 ****
+ echo $ECHO_N "checking if -pthread should be used... $ECHO_C" >&6
+ threadsafe_flag=
+ thread_lib=
+! if test "x$MACOSX" != "xyes"; then
+ test "$GCC" = yes && threadsafe_flag="-pthread"
+ if test "`(uname) 2>/dev/null`" = FreeBSD; then
+ threadsafe_flag="-D_THREAD_SAFE"
+--- 4256,4262 ----
+ echo $ECHO_N "checking if -pthread should be used... $ECHO_C" >&6
+ threadsafe_flag=
+ thread_lib=
+! if test "`(uname) 2>/dev/null`" != Darwin; then
+ test "$GCC" = yes && threadsafe_flag="-pthread"
+ if test "`(uname) 2>/dev/null`" = FreeBSD; then
+ threadsafe_flag="-D_THREAD_SAFE"
+***************
+*** 11555,11562 ****
+ else
+ echo "$as_me:$LINENO: result: empty: automatic terminal library selection" >&5
+ echo "${ECHO_T}empty: automatic terminal library selection" >&6
+! case "`uname -s 2>/dev/null`" in
+! OSF1) tlibs="ncurses curses termlib termcap";;
+ *) tlibs="ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+--- 11555,11562 ----
+ else
+ echo "$as_me:$LINENO: result: empty: automatic terminal library selection" >&5
+ echo "${ECHO_T}empty: automatic terminal library selection" >&6
+! case "`uname -s 2>/dev/null`" in
+! OSF1|SCO_SV) tlibs="ncurses curses termlib termcap";;
+ *) tlibs="ncurses termlib termcap curses";;
+ esac
+ for libname in $tlibs; do
+*** ../vim-7.0.122/src/version.c Mon Oct 9 22:11:52 2006
+--- src/version.c Tue Oct 10 11:37:26 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 123,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+12. Sing along at the opera.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.124
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.124
+Problem: getwinvar() obtains a dictionary with window-local variables, but
+ it's always for the current window.
+Solution: Get the variables of the specified window. (Geoff Reedy)
+Files: src/eval.c
+
+
+*** ../vim-7.0.123/src/eval.c Tue Oct 3 14:43:31 2006
+--- src/eval.c Fri Oct 6 21:08:57 2006
+***************
+*** 10432,10451 ****
+
+ if (win != NULL && varname != NULL)
+ {
+! if (*varname == '&') /* window-local-option */
+! {
+! /* Set curwin to be our win, temporarily. Also set curbuf, so
+! * that we can get buffer-local options. */
+! oldcurwin = curwin;
+! curwin = win;
+! curbuf = win->w_buffer;
+
+ get_option_tv(&varname, rettv, 1);
+-
+- /* restore previous notion of curwin */
+- curwin = oldcurwin;
+- curbuf = curwin->w_buffer;
+- }
+ else
+ {
+ if (*varname == NUL)
+--- 10432,10445 ----
+
+ if (win != NULL && varname != NULL)
+ {
+! /* Set curwin to be our win, temporarily. Also set curbuf, so
+! * that we can get buffer-local options. */
+! oldcurwin = curwin;
+! curwin = win;
+! curbuf = win->w_buffer;
+
++ if (*varname == '&') /* window-local-option */
+ get_option_tv(&varname, rettv, 1);
+ else
+ {
+ if (*varname == NUL)
+***************
+*** 10458,10463 ****
+--- 10452,10461 ----
+ if (v != NULL)
+ copy_tv(&v->di_tv, rettv);
+ }
++
++ /* restore previous notion of curwin */
++ curwin = oldcurwin;
++ curbuf = curwin->w_buffer;
+ }
+
+ --emsg_off;
+*** ../vim-7.0.123/src/version.c Tue Oct 10 11:41:44 2006
+--- src/version.c Tue Oct 10 12:53:15 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 124,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+14. Put mosquito netting around your work area. Play a tape of jungle
+ sounds all day.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.125
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.125
+Problem: When "autoselect" is in the 'clipboard' option then the '< and '>
+ marks are set while Visual mode is still active.
+Solution: Don't set the '< and '> marks when yanking the selected area for
+ the clipboard.
+Files: src/normal.c
+
+
+*** ../vim-7.0.124/src/normal.c Tue Aug 29 17:28:56 2006
+--- src/normal.c Sat Oct 7 14:11:26 2006
+***************
+*** 1477,1490 ****
+ }
+ else if (VIsual_active)
+ {
+! /* Save the current VIsual area for '< and '> marks, and "gv" */
+! curbuf->b_visual.vi_start = VIsual;
+! curbuf->b_visual.vi_end = curwin->w_cursor;
+! curbuf->b_visual.vi_mode = VIsual_mode;
+! curbuf->b_visual.vi_curswant = curwin->w_curswant;
+ # ifdef FEAT_EVAL
+! curbuf->b_visual_mode_eval = VIsual_mode;
+ # endif
+
+ /* In Select mode, a linewise selection is operated upon like a
+ * characterwise selection. */
+--- 1477,1493 ----
+ }
+ else if (VIsual_active)
+ {
+! if (!gui_yank)
+! {
+! /* Save the current VIsual area for '< and '> marks, and "gv" */
+! curbuf->b_visual.vi_start = VIsual;
+! curbuf->b_visual.vi_end = curwin->w_cursor;
+! curbuf->b_visual.vi_mode = VIsual_mode;
+! curbuf->b_visual.vi_curswant = curwin->w_curswant;
+ # ifdef FEAT_EVAL
+! curbuf->b_visual_mode_eval = VIsual_mode;
+ # endif
++ }
+
+ /* In Select mode, a linewise selection is operated upon like a
+ * characterwise selection. */
+*** ../vim-7.0.124/src/version.c Tue Oct 10 12:56:09 2006
+--- src/version.c Tue Oct 10 13:25:27 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 125,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+15. Five days in advance, tell your friends you can't attend their
+ party because you're not in the mood.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.126
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.126
+Problem: When 'formatexpr' uses setline() and later internal formatting is
+ used undo information is not correct. (Jiri Cerny, Benji Fisher)
+Solution: Set ins_need_undo after using 'formatexpr'.
+Files: src/edit.c
+
+
+*** ../vim-7.0.125/src/edit.c Fri Oct 6 20:39:58 2006
+--- src/edit.c Tue Oct 10 12:46:04 2006
+***************
+*** 5333,5340 ****
+ /* Format with 'formatexpr' when it's set. Use internal formatting
+ * when 'formatexpr' isn't set or it returns non-zero. */
+ #if defined(FEAT_EVAL)
+! if (*curbuf->b_p_fex == NUL
+! || fex_format(curwin->w_cursor.lnum, 1L, c) != 0)
+ #endif
+ internal_format(textwidth, second_indent, flags, c == NUL);
+ }
+--- 5333,5348 ----
+ /* Format with 'formatexpr' when it's set. Use internal formatting
+ * when 'formatexpr' isn't set or it returns non-zero. */
+ #if defined(FEAT_EVAL)
+! int do_internal = TRUE;
+!
+! if (*curbuf->b_p_fex != NUL)
+! {
+! do_internal = (fex_format(curwin->w_cursor.lnum, 1L, c) != 0);
+! /* It may be required to save for undo again, e.g. when setline()
+! * was called. */
+! ins_need_undo = TRUE;
+! }
+! if (do_internal)
+ #endif
+ internal_format(textwidth, second_indent, flags, c == NUL);
+ }
+*** ../vim-7.0.125/src/version.c Tue Oct 10 13:27:30 2006
+--- src/version.c Tue Oct 10 15:47:20 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 126,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+16. Have your coworkers address you by your wrestling name, Rock Hard Kim.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.127
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.127
+Problem: Crash when swap files has invalid timestamp.
+Solution: Check return value of ctime() for being NULL.
+Files: src/memline.c
+
+
+*** ../vim-7.0.126/src/memline.c Tue Aug 29 17:28:56 2006
+--- src/memline.c Tue Oct 10 16:19:56 2006
+***************
+*** 1633,1638 ****
+--- 1633,1639 ----
+ int fd;
+ struct block0 b0;
+ time_t x = (time_t)0;
++ char *p;
+ #ifdef UNIX
+ char_u uname[B0_UNAME_SIZE];
+ #endif
+***************
+*** 1652,1659 ****
+ #endif
+ MSG_PUTS(_(" dated: "));
+ x = st.st_mtime; /* Manx C can't do &st.st_mtime */
+! MSG_PUTS(ctime(&x)); /* includes '\n' */
+!
+ }
+
+ /*
+--- 1653,1663 ----
+ #endif
+ MSG_PUTS(_(" dated: "));
+ x = st.st_mtime; /* Manx C can't do &st.st_mtime */
+! p = ctime(&x); /* includes '\n' */
+! if (p == NULL)
+! MSG_PUTS("(invalid)\n");
+! else
+! MSG_PUTS(p);
+ }
+
+ /*
+***************
+*** 3652,3657 ****
+--- 3656,3662 ----
+ {
+ struct stat st;
+ time_t x, sx;
++ char *p;
+
+ ++no_wait_return;
+ (void)EMSG(_("E325: ATTENTION"));
+***************
+*** 3666,3672 ****
+ {
+ MSG_PUTS(_(" dated: "));
+ x = st.st_mtime; /* Manx C can't do &st.st_mtime */
+! MSG_PUTS(ctime(&x));
+ if (sx != 0 && x > sx)
+ MSG_PUTS(_(" NEWER than swap file!\n"));
+ }
+--- 3671,3681 ----
+ {
+ MSG_PUTS(_(" dated: "));
+ x = st.st_mtime; /* Manx C can't do &st.st_mtime */
+! p = ctime(&x); /* includes '\n' */
+! if (p == NULL)
+! MSG_PUTS("(invalid)\n");
+! else
+! MSG_PUTS(p);
+ if (sx != 0 && x > sx)
+ MSG_PUTS(_(" NEWER than swap file!\n"));
+ }
+*** ../vim-7.0.126/src/version.c Tue Oct 10 15:49:41 2006
+--- src/version.c Tue Oct 10 16:18:51 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 127,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+17. When the money comes out the ATM, scream "I won!, I won! 3rd
+ time this week!!!!!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.128
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.128
+Problem: GUI: when closing gvim is cancelled because there is a changed
+ buffer the screen isn't updated to show the changed buffer in the
+ current window. (Krzysztof Kacprzak)
+Solution: Redraw when closing gvim is cancelled.
+Files: src/gui.c
+
+
+*** ../vim-7.0.127/src/gui.c Sun Oct 8 13:56:53 2006
+--- src/gui.c Tue Oct 10 13:45:13 2006
+***************
+*** 637,642 ****
+--- 637,643 ----
+
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_MSWIN) \
+ || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) || defined(PROTO)
++ # define NEED_GUI_UPDATE_SCREEN 1
+ /*
+ * Called when the GUI shell is closed by the user. If there are no changed
+ * files Vim exits, otherwise there will be a dialog to ask the user what to
+***************
+*** 665,672 ****
+
+ exiting = FALSE;
+ cmdmod = save_cmdmod;
+! setcursor(); /* position cursor */
+! out_flush();
+ }
+ #endif
+
+--- 666,672 ----
+
+ exiting = FALSE;
+ cmdmod = save_cmdmod;
+! gui_update_screen(); /* redraw, window may show changed buffer */
+ }
+ #endif
+
+***************
+*** 4823,4828 ****
+--- 4823,4829 ----
+ #endif
+
+ #if defined(FIND_REPLACE_DIALOG) || defined(FEAT_SUN_WORKSHOP) \
++ || defined(NEED_GUI_UPDATE_SCREEN) \
+ || defined(PROTO)
+ /*
+ * Update the current window and the screen.
+*** ../vim-7.0.127/src/version.c Tue Oct 10 16:20:51 2006
+--- src/version.c Tue Oct 10 17:35:42 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 128,
+ /**/
+
+--
+How To Keep A Healthy Level Of Insanity:
+18. When leaving the zoo, start running towards the parking lot,
+ yelling "run for your lives, they're loose!!"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.129
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.129
+Problem: GTK GUI: the GTK file dialog can't handle a relative path.
+Solution: Make the initial directory a full path before passing it to GTK.
+ (James Vega) Also postpone adding the default file name until
+ after setting the directory.
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.0.128/src/gui_gtk.c Tue Aug 29 17:28:56 2006
+--- src/gui_gtk.c Tue Oct 10 18:16:00 2006
+***************
+*** 1275,1292 ****
+ title = CONVERT_TO_UTF8(title);
+ # endif
+
+! /* Concatenate "initdir" and "dflt". */
+ if (initdir == NULL || *initdir == NUL)
+ mch_dirname(dirbuf, MAXPATHL);
+! else if (STRLEN(initdir) + 2 < MAXPATHL)
+! STRCPY(dirbuf, initdir);
+! else
+ dirbuf[0] = NUL;
+ /* Always need a trailing slash for a directory. */
+ add_pathsep(dirbuf);
+- if (dflt != NULL && *dflt != NUL
+- && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
+- STRCAT(dirbuf, dflt);
+
+ /* If our pointer is currently hidden, then we should show it. */
+ gui_mch_mousehide(FALSE);
+--- 1275,1287 ----
+ title = CONVERT_TO_UTF8(title);
+ # endif
+
+! /* GTK has a bug, it only works with an absolute path. */
+ if (initdir == NULL || *initdir == NUL)
+ mch_dirname(dirbuf, MAXPATHL);
+! else if (vim_FullName(initdir, dirbuf, MAXPATHL - 2, FALSE) == FAIL)
+ dirbuf[0] = NUL;
+ /* Always need a trailing slash for a directory. */
+ add_pathsep(dirbuf);
+
+ /* If our pointer is currently hidden, then we should show it. */
+ gui_mch_mousehide(FALSE);
+***************
+*** 1340,1345 ****
+--- 1335,1345 ----
+ }
+ else
+ gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title);
++
++ /* Concatenate "initdir" and "dflt". */
++ if (dflt != NULL && *dflt != NUL
++ && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
++ STRCAT(dirbuf, dflt);
+
+ gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg),
+ (const gchar *)dirbuf);
+*** ../vim-7.0.128/src/version.c Tue Oct 10 17:36:50 2006
+--- src/version.c Tue Oct 10 18:25:11 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 129,
+ /**/
+
+--
+I'm not familiar with this proof, but I'm aware of a significant
+following of toddlers who believe that peanut butter is the solution
+to all of life's problems... -- Tim Hammerquist
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.131
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.131
+Problem: Win32: "vim -r" does not list all the swap files.
+Solution: Also check for swap files starting with a dot.
+Files: src/memline.c
+
+
+*** ../vim-7.0.130/src/memline.c Tue Oct 10 16:20:51 2006
+--- src/memline.c Tue Oct 10 21:54:21 2006
+***************
+*** 1400,1407 ****
+ names[0] = vim_strsave((char_u *)"*.sw?");
+ # endif
+ #endif
+! #ifdef UNIX
+! /* for Unix names starting with a dot are special */
+ names[1] = vim_strsave((char_u *)".*.sw?");
+ names[2] = vim_strsave((char_u *)".sw?");
+ num_names = 3;
+--- 1400,1408 ----
+ names[0] = vim_strsave((char_u *)"*.sw?");
+ # endif
+ #endif
+! #if defined(UNIX) || defined(WIN3264)
+! /* For Unix names starting with a dot are special. MS-Windows
+! * supports this too, on some file systems. */
+ names[1] = vim_strsave((char_u *)".*.sw?");
+ names[2] = vim_strsave((char_u *)".sw?");
+ num_names = 3;
+***************
+*** 1430,1437 ****
+ names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
+ # endif
+ #endif
+! #ifdef UNIX
+! /* for Unix names starting with a dot are special */
+ names[1] = concat_fnames(dir_name, (char_u *)".*.sw?", TRUE);
+ names[2] = concat_fnames(dir_name, (char_u *)".sw?", TRUE);
+ num_names = 3;
+--- 1431,1439 ----
+ names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
+ # endif
+ #endif
+! #if defined(UNIX) || defined(WIN3264)
+! /* For Unix names starting with a dot are special. MS-Windows
+! * supports this too, on some file systems. */
+ names[1] = concat_fnames(dir_name, (char_u *)".*.sw?", TRUE);
+ names[2] = concat_fnames(dir_name, (char_u *)".sw?", TRUE);
+ num_names = 3;
+*** ../vim-7.0.130/src/version.c Tue Oct 10 18:43:50 2006
+--- src/version.c Tue Oct 10 21:55:02 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 131,
+ /**/
+
+--
+Apparently, 1 in 5 people in the world are Chinese. And there are 5
+people in my family, so it must be one of them. It's either my mum
+or my dad. Or my older brother Colin. Or my younger brother
+Ho-Cha-Chu. But I think it's Colin.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.133
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.133
+Problem: When searching included files messages are added to the history.
+Solution: Set msg_hist_off for messages about scanning included files.
+ Set msg_silent to avoid message about wrapping around.
+Files: src/edit.c, src/globals.h, src/message.c, src/search.c
+
+
+*** ../vim-7.0.132/src/edit.c Tue Oct 10 15:49:41 2006
+--- src/edit.c Sat Oct 14 14:22:09 2006
+***************
+*** 3909,3914 ****
+--- 3909,3916 ----
+ {
+ int flags = 0;
+
++ ++msg_silent; /* Don't want messages for wrapscan. */
++
+ /* ctrl_x_mode == CTRL_X_WHOLE_LINE || word-wise search that
+ * has added a word that was at the beginning of the line */
+ if ( ctrl_x_mode == CTRL_X_WHOLE_LINE
+***************
+*** 3920,3925 ****
+--- 3922,3928 ----
+ compl_direction,
+ compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
+ RE_LAST, (linenr_T)0);
++ --msg_silent;
+ if (!compl_started)
+ {
+ /* set "compl_started" even on fail */
+*** ../vim-7.0.132/src/globals.h Tue Sep 5 12:57:14 2006
+--- src/globals.h Sat Oct 14 14:05:02 2006
+***************
+*** 166,171 ****
+--- 166,172 ----
+ EXTERN int emsg_off INIT(= 0); /* don't display errors for now,
+ unless 'debug' is set. */
+ EXTERN int info_message INIT(= FALSE); /* printing informative message */
++ EXTERN int msg_hist_off INIT(= FALSE); /* don't add messages to history */
+ #ifdef FEAT_EVAL
+ EXTERN int emsg_skip INIT(= 0); /* don't display errors for
+ expression that is skipped */
+*** ../vim-7.0.132/src/message.c Tue Oct 3 17:21:04 2006
+--- src/message.c Sat Oct 14 14:03:58 2006
+***************
+*** 53,59 ****
+ static struct msg_hist *first_msg_hist = NULL;
+ static struct msg_hist *last_msg_hist = NULL;
+ static int msg_hist_len = 0;
+- static int msg_hist_off = FALSE; /* don't add messages to history */
+
+ /*
+ * When writing messages to the screen, there are many different situations.
+--- 53,58 ----
+*** ../vim-7.0.132/src/search.c Tue Aug 29 18:01:39 2006
+--- src/search.c Sat Oct 14 14:15:26 2006
+***************
+*** 4688,4693 ****
+--- 4688,4694 ----
+ #ifdef FEAT_INS_EXPAND
+ if (action == ACTION_EXPAND)
+ {
++ msg_hist_off = TRUE; /* reset in msg_trunc_attr() */
+ vim_snprintf((char*)IObuff, IOSIZE,
+ _("Scanning included file: %s"),
+ (char *)new_fname);
+*** ../vim-7.0.132/src/version.c Thu Oct 12 21:15:04 2006
+--- src/version.c Sat Oct 14 14:32:31 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 133,
+ /**/
+
+--
+You have the right to remain silent. Anything you say will be
+misquoted, then used against you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.134
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.134
+Problem: Crash when comparing a recursively looped List or Dictionary.
+Solution: Limit recursiveness for comparing to 1000.
+Files: src/eval.c
+
+
+*** ../vim-7.0.133/src/eval.c Tue Oct 10 12:56:09 2006
+--- src/eval.c Sun Oct 15 15:08:13 2006
+***************
+*** 5520,5538 ****
+ {
+ char_u buf1[NUMBUFLEN], buf2[NUMBUFLEN];
+ char_u *s1, *s2;
+
+! if (tv1->v_type != tv2->v_type)
+ return FALSE;
+
+ switch (tv1->v_type)
+ {
+ case VAR_LIST:
+! /* recursive! */
+! return list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
+
+ case VAR_DICT:
+! /* recursive! */
+! return dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
+
+ case VAR_FUNC:
+ return (tv1->vval.v_string != NULL
+--- 5520,5546 ----
+ {
+ char_u buf1[NUMBUFLEN], buf2[NUMBUFLEN];
+ char_u *s1, *s2;
++ static int recursive = 0; /* cach recursive loops */
++ int r;
+
+! /* Catch lists and dicts that have an endless loop by limiting
+! * recursiveness to 1000. */
+! if (tv1->v_type != tv2->v_type || recursive >= 1000)
+ return FALSE;
+
+ switch (tv1->v_type)
+ {
+ case VAR_LIST:
+! ++recursive;
+! r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
+! --recursive;
+! return r;
+
+ case VAR_DICT:
+! ++recursive;
+! r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
+! --recursive;
+! return r;
+
+ case VAR_FUNC:
+ return (tv1->vval.v_string != NULL
+*** ../vim-7.0.133/src/version.c Sat Oct 14 14:33:21 2006
+--- src/version.c Sun Oct 15 15:03:30 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 134,
+ /**/
+
+--
+It was recently discovered that research causes cancer in rats.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.135
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.135
+Problem: Crash when garbage collecting list or dict with loop.
+Solution: Don't use DEL_REFCOUNT but don't recurse into Lists and
+ Dictionaries when freeing them in the garbage collector.
+ Also add allocated Dictionaries to the list of Dictionaries to
+ avoid leaking memory.
+Files: src/eval.c, src/proto/eval.pro, src/tag.c
+
+
+*** ../vim-7.0.134/src/eval.c Sun Oct 15 15:10:08 2006
+--- src/eval.c Sun Oct 15 22:30:09 2006
+***************
+*** 191,198 ****
+ #define FC_RANGE 2 /* function accepts range */
+ #define FC_DICT 4 /* Dict function, uses "self" */
+
+- #define DEL_REFCOUNT 999999 /* list/dict is being deleted */
+-
+ /*
+ * All user-defined functions are found in this hashtable.
+ */
+--- 191,196 ----
+***************
+*** 435,441 ****
+ static void set_ref_in_list __ARGS((list_T *l, int copyID));
+ static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static void dict_unref __ARGS((dict_T *d));
+! static void dict_free __ARGS((dict_T *d));
+ static dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+ static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
+--- 433,439 ----
+ static void set_ref_in_list __ARGS((list_T *l, int copyID));
+ static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static void dict_unref __ARGS((dict_T *d));
+! static void dict_free __ARGS((dict_T *d, int recurse));
+ static dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+ static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
+***************
+*** 4899,4905 ****
+ {
+ if (list_append_tv(l, &item->li_tv) == FAIL)
+ {
+! list_free(l);
+ return FAIL;
+ }
+ item = item->li_next;
+--- 4897,4903 ----
+ {
+ if (list_append_tv(l, &item->li_tv) == FAIL)
+ {
+! list_free(l, TRUE);
+ return FAIL;
+ }
+ item = item->li_next;
+***************
+*** 5299,5305 ****
+ EMSG2(_("E697: Missing end of List ']': %s"), *arg);
+ failret:
+ if (evaluate)
+! list_free(l);
+ return FAIL;
+ }
+
+--- 5297,5303 ----
+ EMSG2(_("E697: Missing end of List ']': %s"), *arg);
+ failret:
+ if (evaluate)
+! list_free(l, TRUE);
+ return FAIL;
+ }
+
+***************
+*** 5363,5370 ****
+ list_unref(l)
+ list_T *l;
+ {
+! if (l != NULL && l->lv_refcount != DEL_REFCOUNT && --l->lv_refcount <= 0)
+! list_free(l);
+ }
+
+ /*
+--- 5361,5368 ----
+ list_unref(l)
+ list_T *l;
+ {
+! if (l != NULL && --l->lv_refcount <= 0)
+! list_free(l, TRUE);
+ }
+
+ /*
+***************
+*** 5372,5385 ****
+ * Ignores the reference count.
+ */
+ void
+! list_free(l)
+! list_T *l;
+ {
+ listitem_T *item;
+
+- /* Avoid that recursive reference to the list frees us again. */
+- l->lv_refcount = DEL_REFCOUNT;
+-
+ /* Remove the list from the list of lists for garbage collection. */
+ if (l->lv_used_prev == NULL)
+ first_list = l->lv_used_next;
+--- 5370,5381 ----
+ * Ignores the reference count.
+ */
+ void
+! list_free(l, recurse)
+! list_T *l;
+! int recurse; /* Free Lists and Dictionaries recursively. */
+ {
+ listitem_T *item;
+
+ /* Remove the list from the list of lists for garbage collection. */
+ if (l->lv_used_prev == NULL)
+ first_list = l->lv_used_next;
+***************
+*** 5392,5398 ****
+ {
+ /* Remove the item before deleting it. */
+ l->lv_first = item->li_next;
+! listitem_free(item);
+ }
+ vim_free(l);
+ }
+--- 5388,5397 ----
+ {
+ /* Remove the item before deleting it. */
+ l->lv_first = item->li_next;
+! if (recurse || (item->li_tv.v_type != VAR_LIST
+! && item->li_tv.v_type != VAR_DICT))
+! clear_tv(&item->li_tv);
+! vim_free(item);
+ }
+ vim_free(l);
+ }
+***************
+*** 6113,6119 ****
+ for (dd = first_dict; dd != NULL; )
+ if (dd->dv_copyID != copyID)
+ {
+! dict_free(dd);
+ did_free = TRUE;
+
+ /* restart, next dict may also have been freed */
+--- 6118,6127 ----
+ for (dd = first_dict; dd != NULL; )
+ if (dd->dv_copyID != copyID)
+ {
+! /* Free the Dictionary and ordinary items it contains, but don't
+! * recurse into Lists and Dictionaries, they will be in the list
+! * of dicts or list of lists. */
+! dict_free(dd, FALSE);
+ did_free = TRUE;
+
+ /* restart, next dict may also have been freed */
+***************
+*** 6130,6136 ****
+ for (ll = first_list; ll != NULL; )
+ if (ll->lv_copyID != copyID && ll->lv_watch == NULL)
+ {
+! list_free(ll);
+ did_free = TRUE;
+
+ /* restart, next list may also have been freed */
+--- 6138,6147 ----
+ for (ll = first_list; ll != NULL; )
+ if (ll->lv_copyID != copyID && ll->lv_watch == NULL)
+ {
+! /* Free the List and ordinary items it contains, but don't recurse
+! * into Lists and Dictionaries, they will be in the list of dicts
+! * or list of lists. */
+! list_free(ll, FALSE);
+ did_free = TRUE;
+
+ /* restart, next list may also have been freed */
+***************
+*** 6223,6233 ****
+ d = (dict_T *)alloc(sizeof(dict_T));
+ if (d != NULL)
+ {
+! /* Add the list to the hashtable for garbage collection. */
+ if (first_dict != NULL)
+ first_dict->dv_used_prev = d;
+ d->dv_used_next = first_dict;
+ d->dv_used_prev = NULL;
+
+ hash_init(&d->dv_hashtab);
+ d->dv_lock = 0;
+--- 6234,6245 ----
+ d = (dict_T *)alloc(sizeof(dict_T));
+ if (d != NULL)
+ {
+! /* Add the list to the list of dicts for garbage collection. */
+ if (first_dict != NULL)
+ first_dict->dv_used_prev = d;
+ d->dv_used_next = first_dict;
+ d->dv_used_prev = NULL;
++ first_dict = d;
+
+ hash_init(&d->dv_hashtab);
+ d->dv_lock = 0;
+***************
+*** 6245,6252 ****
+ dict_unref(d)
+ dict_T *d;
+ {
+! if (d != NULL && d->dv_refcount != DEL_REFCOUNT && --d->dv_refcount <= 0)
+! dict_free(d);
+ }
+
+ /*
+--- 6257,6264 ----
+ dict_unref(d)
+ dict_T *d;
+ {
+! if (d != NULL && --d->dv_refcount <= 0)
+! dict_free(d, TRUE);
+ }
+
+ /*
+***************
+*** 6254,6269 ****
+ * Ignores the reference count.
+ */
+ static void
+! dict_free(d)
+! dict_T *d;
+ {
+ int todo;
+ hashitem_T *hi;
+ dictitem_T *di;
+
+- /* Avoid that recursive reference to the dict frees us again. */
+- d->dv_refcount = DEL_REFCOUNT;
+-
+ /* Remove the dict from the list of dicts for garbage collection. */
+ if (d->dv_used_prev == NULL)
+ first_dict = d->dv_used_next;
+--- 6266,6279 ----
+ * Ignores the reference count.
+ */
+ static void
+! dict_free(d, recurse)
+! dict_T *d;
+! int recurse; /* Free Lists and Dictionaries recursively. */
+ {
+ int todo;
+ hashitem_T *hi;
+ dictitem_T *di;
+
+ /* Remove the dict from the list of dicts for garbage collection. */
+ if (d->dv_used_prev == NULL)
+ first_dict = d->dv_used_next;
+***************
+*** 6283,6289 ****
+ * something recursive causing trouble. */
+ di = HI2DI(hi);
+ hash_remove(&d->dv_hashtab, hi);
+! dictitem_free(di);
+ --todo;
+ }
+ }
+--- 6293,6302 ----
+ * something recursive causing trouble. */
+ di = HI2DI(hi);
+ hash_remove(&d->dv_hashtab, hi);
+! if (recurse || (di->di_tv.v_type != VAR_LIST
+! && di->di_tv.v_type != VAR_DICT))
+! clear_tv(&di->di_tv);
+! vim_free(di);
+ --todo;
+ }
+ }
+***************
+*** 6734,6740 ****
+ EMSG2(_("E723: Missing end of Dictionary '}': %s"), *arg);
+ failret:
+ if (evaluate)
+! dict_free(d);
+ return FAIL;
+ }
+
+--- 6747,6753 ----
+ EMSG2(_("E723: Missing end of Dictionary '}': %s"), *arg);
+ failret:
+ if (evaluate)
+! dict_free(d, TRUE);
+ return FAIL;
+ }
+
+*** ../vim-7.0.134/src/proto/eval.pro Fri Mar 24 23:16:28 2006
+--- src/proto/eval.pro Sun Oct 15 22:08:11 2006
+***************
+*** 44,50 ****
+ extern char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
+ extern list_T *list_alloc __ARGS((void));
+ extern void list_unref __ARGS((list_T *l));
+! extern void list_free __ARGS((list_T *l));
+ extern dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+ extern int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ extern int garbage_collect __ARGS((void));
+--- 44,50 ----
+ extern char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
+ extern list_T *list_alloc __ARGS((void));
+ extern void list_unref __ARGS((list_T *l));
+! extern void list_free __ARGS((list_T *l, int recurse));
+ extern dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+ extern int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ extern int garbage_collect __ARGS((void));
+*** ../vim-7.0.134/src/tag.c Sun Sep 10 13:56:06 2006
+--- src/tag.c Sun Oct 15 21:44:56 2006
+***************
+*** 911,917 ****
+
+ set_errorlist(curwin, list, ' ');
+
+! list_free(list);
+
+ cur_match = 0; /* Jump to the first tag */
+ }
+--- 911,917 ----
+
+ set_errorlist(curwin, list, ' ');
+
+! list_free(list, TRUE);
+
+ cur_match = 0; /* Jump to the first tag */
+ }
+*** ../vim-7.0.134/src/version.c Sun Oct 15 15:10:08 2006
+--- src/version.c Sun Oct 15 22:01:53 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 135,
+ /**/
+
+--
+Well, you come from nothing, you go back to nothing... What have you
+lost? Nothing!
+ -- Monty Python: The life of Brian
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.136
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.136
+Problem: Using "O" while matching parens are highlighted may not remove the
+ highlighting. (Ilya Bobir)
+Solution: Also trigger CursorMoved when a line is inserted under the cursor.
+Files: src/misc1.c
+
+
+*** ../vim-7.0.135/src/misc1.c Fri Sep 15 20:17:49 2006
+--- src/misc1.c Tue Oct 17 11:11:42 2006
+***************
+*** 2842,2848 ****
+
+ #ifdef FEAT_AUTOCMD
+ /* when the cursor line is changed always trigger CursorMoved */
+! if (lnum <= curwin->w_cursor.lnum && lnume > curwin->w_cursor.lnum)
+ last_cursormoved.lnum = 0;
+ #endif
+ }
+--- 2842,2849 ----
+
+ #ifdef FEAT_AUTOCMD
+ /* when the cursor line is changed always trigger CursorMoved */
+! if (lnum <= curwin->w_cursor.lnum
+! && lnume + (xtra < 0 ? -xtra : xtra) > curwin->w_cursor.lnum)
+ last_cursormoved.lnum = 0;
+ #endif
+ }
+*** ../vim-7.0.135/src/version.c Sun Oct 15 22:38:41 2006
+--- src/version.c Tue Oct 17 11:10:21 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 136,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+46. Your wife makes a new rule: "The computer cannot come to bed."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.137
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.137
+Problem: Configure check for big features is wrong.
+Solution: Change "==" to "=". (Martti Kuparinen)
+Files: src/auto/configure, src/configure.in
+
+
+*** ../vim-7.0.136/src/auto/configure Tue Oct 10 11:40:53 2006
+--- src/auto/configure Tue Oct 17 11:41:59 2006
+***************
+*** 15302,15308 ****
+ && test "x$GUITYPE" != "xCARBONGUI"; then
+ echo "$as_me:$LINENO: checking whether we need -framework Carbon" >&5
+ echo $ECHO_N "checking whether we need -framework Carbon... $ECHO_C" >&6
+! if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \
+ || test "x$features" = "xhuge"; then
+ LIBS="$LIBS -framework Carbon"
+ echo "$as_me:$LINENO: result: yes" >&5
+--- 15302,15308 ----
+ && test "x$GUITYPE" != "xCARBONGUI"; then
+ echo "$as_me:$LINENO: checking whether we need -framework Carbon" >&5
+ echo $ECHO_N "checking whether we need -framework Carbon... $ECHO_C" >&6
+! if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \
+ || test "x$features" = "xhuge"; then
+ LIBS="$LIBS -framework Carbon"
+ echo "$as_me:$LINENO: result: yes" >&5
+*** ../vim-7.0.136/src/configure.in Tue Oct 10 11:40:53 2006
+--- src/configure.in Tue Oct 17 11:40:59 2006
+***************
+*** 2838,2844 ****
+ && test "x$GUITYPE" != "xCARBONGUI"; then
+ AC_MSG_CHECKING(whether we need -framework Carbon)
+ dnl check for MACOSX without Carbon GUI, but with FEAT_MBYTE
+! if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \
+ || test "x$features" = "xhuge"; then
+ LIBS="$LIBS -framework Carbon"
+ AC_MSG_RESULT(yes)
+--- 2838,2844 ----
+ && test "x$GUITYPE" != "xCARBONGUI"; then
+ AC_MSG_CHECKING(whether we need -framework Carbon)
+ dnl check for MACOSX without Carbon GUI, but with FEAT_MBYTE
+! if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \
+ || test "x$features" = "xhuge"; then
+ LIBS="$LIBS -framework Carbon"
+ AC_MSG_RESULT(yes)
+*** ../vim-7.0.136/src/version.c Tue Oct 17 11:12:28 2006
+--- src/version.c Tue Oct 17 11:49:14 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 137,
+ /**/
+
+--
+CVS sux, men don't like commitment
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.139
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.139
+Problem: Using CTRL-PageUp or CTRL-PageDown in Insert mode to go to another
+ tab page does not prepare for undo properly. (Stefano Zacchiroli)
+Solution: Call start_arrow() before switching tab page.
+Files: src/edit.c
+
+
+*** ../vim-7.0.138/src/edit.c Sat Oct 14 14:33:21 2006
+--- src/edit.c Mon Oct 16 21:28:05 2006
+***************
+*** 8822,8828 ****
+ if (mod_mask & MOD_MASK_CTRL)
+ {
+ /* <C-PageUp>: tab page back */
+! goto_tabpage(-1);
+ return;
+ }
+ #endif
+--- 8822,8832 ----
+ if (mod_mask & MOD_MASK_CTRL)
+ {
+ /* <C-PageUp>: tab page back */
+! if (first_tabpage->tp_next != NULL)
+! {
+! start_arrow(&curwin->w_cursor);
+! goto_tabpage(-1);
+! }
+ return;
+ }
+ #endif
+***************
+*** 8881,8887 ****
+ if (mod_mask & MOD_MASK_CTRL)
+ {
+ /* <C-PageDown>: tab page forward */
+! goto_tabpage(0);
+ return;
+ }
+ #endif
+--- 8885,8895 ----
+ if (mod_mask & MOD_MASK_CTRL)
+ {
+ /* <C-PageDown>: tab page forward */
+! if (first_tabpage->tp_next != NULL)
+! {
+! start_arrow(&curwin->w_cursor);
+! goto_tabpage(0);
+! }
+ return;
+ }
+ #endif
+*** ../vim-7.0.138/src/version.c Tue Oct 17 12:53:31 2006
+--- src/version.c Tue Oct 17 13:38:27 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 139,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+53. To find out what time it is, you send yourself an e-mail and check the
+ "Date:" field.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.140
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.140 (after 7.0.134)
+Problem: Comparing recursively looped List or Dictionary doesn't work well.
+Solution: Detect comparing a List or Dictionary with itself.
+Files: src/eval.c
+
+
+*** ../vim-7.0.139/src/eval.c Sun Oct 15 22:38:41 2006
+--- src/eval.c Sun Oct 15 22:30:09 2006
+***************
+*** 5451,5456 ****
+--- 5451,5458 ----
+ {
+ listitem_T *item1, *item2;
+
++ if (l1 == l2)
++ return TRUE;
+ if (list_len(l1) != list_len(l2))
+ return FALSE;
+
+***************
+*** 5487,5492 ****
+--- 5489,5496 ----
+ dictitem_T *item2;
+ int todo;
+
++ if (d1 == d2)
++ return TRUE;
+ if (dict_len(d1) != dict_len(d2))
+ return FALSE;
+
+***************
+*** 5522,5531 ****
+ static int recursive = 0; /* cach recursive loops */
+ int r;
+
+! /* Catch lists and dicts that have an endless loop by limiting
+! * recursiveness to 1000. */
+! if (tv1->v_type != tv2->v_type || recursive >= 1000)
+ return FALSE;
+
+ switch (tv1->v_type)
+ {
+--- 5526,5537 ----
+ static int recursive = 0; /* cach recursive loops */
+ int r;
+
+! if (tv1->v_type != tv2->v_type)
+ return FALSE;
++ /* Catch lists and dicts that have an endless loop by limiting
++ * recursiveness to 1000. We guess they are equal then. */
++ if (recursive >= 1000)
++ return TRUE;
+
+ switch (tv1->v_type)
+ {
+*** ../vim-7.0.139/src/version.c Tue Oct 17 13:39:36 2006
+--- src/version.c Tue Oct 17 15:15:04 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 140,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+54. You start tilting your head sideways to smile. :-)
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.141
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.141
+Problem: When pasting a while line on the command line an extra CR is added
+ literally.
+Solution: Don't add the trailing CR when pasting with the mouse.
+Files: src/ex_getln.c, src/proto/ops.pro, src/ops.c
+
+
+*** ../vim-7.0.140/src/ex_getln.c Thu Sep 14 11:27:12 2006
+--- src/ex_getln.c Sun Oct 15 16:17:20 2006
+***************
+*** 86,92 ****
+ static void draw_cmdline __ARGS((int start, int len));
+ static void save_cmdline __ARGS((struct cmdline_info *ccp));
+ static void restore_cmdline __ARGS((struct cmdline_info *ccp));
+! static int cmdline_paste __ARGS((int regname, int literally));
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ static void redrawcmd_preedit __ARGS((void));
+ #endif
+--- 86,92 ----
+ static void draw_cmdline __ARGS((int start, int len));
+ static void save_cmdline __ARGS((struct cmdline_info *ccp));
+ static void restore_cmdline __ARGS((struct cmdline_info *ccp));
+! static int cmdline_paste __ARGS((int regname, int literally, int remcr));
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ static void redrawcmd_preedit __ARGS((void));
+ #endif
+***************
+*** 1116,1122 ****
+ #endif
+ if (c != ESC) /* use ESC to cancel inserting register */
+ {
+! cmdline_paste(c, i == Ctrl_R);
+
+ #ifdef FEAT_EVAL
+ /* When there was a serious error abort getting the
+--- 1116,1122 ----
+ #endif
+ if (c != ESC) /* use ESC to cancel inserting register */
+ {
+! cmdline_paste(c, i == Ctrl_R, FALSE);
+
+ #ifdef FEAT_EVAL
+ /* When there was a serious error abort getting the
+***************
+*** 1231,1246 ****
+ goto cmdline_not_changed; /* Ignore mouse */
+ # ifdef FEAT_CLIPBOARD
+ if (clip_star.available)
+! cmdline_paste('*', TRUE);
+ else
+ # endif
+! cmdline_paste(0, TRUE);
+ redrawcmd();
+ goto cmdline_changed;
+
+ # ifdef FEAT_DND
+ case K_DROP:
+! cmdline_paste('~', TRUE);
+ redrawcmd();
+ goto cmdline_changed;
+ # endif
+--- 1231,1246 ----
+ goto cmdline_not_changed; /* Ignore mouse */
+ # ifdef FEAT_CLIPBOARD
+ if (clip_star.available)
+! cmdline_paste('*', TRUE, TRUE);
+ else
+ # endif
+! cmdline_paste(0, TRUE, TRUE);
+ redrawcmd();
+ goto cmdline_changed;
+
+ # ifdef FEAT_DND
+ case K_DROP:
+! cmdline_paste('~', TRUE, FALSE);
+ redrawcmd();
+ goto cmdline_changed;
+ # endif
+***************
+*** 2890,2898 ****
+ * return FAIL for failure, OK otherwise
+ */
+ static int
+! cmdline_paste(regname, literally)
+ int regname;
+ int literally; /* Insert text literally instead of "as typed" */
+ {
+ long i;
+ char_u *arg;
+--- 2890,2899 ----
+ * return FAIL for failure, OK otherwise
+ */
+ static int
+! cmdline_paste(regname, literally, remcr)
+ int regname;
+ int literally; /* Insert text literally instead of "as typed" */
++ int remcr; /* remove trailing CR */
+ {
+ long i;
+ char_u *arg;
+***************
+*** 2968,2974 ****
+ return OK;
+ }
+
+! return cmdline_paste_reg(regname, literally);
+ }
+
+ /*
+--- 2969,2975 ----
+ return OK;
+ }
+
+! return cmdline_paste_reg(regname, literally, remcr);
+ }
+
+ /*
+*** ../vim-7.0.140/src/proto/ops.pro Sun Apr 30 20:25:07 2006
+--- src/proto/ops.pro Tue Oct 17 16:24:08 2006
+***************
+*** 20,26 ****
+ extern int do_execreg __ARGS((int regname, int colon, int addcr));
+ extern int insert_reg __ARGS((int regname, int literally));
+ extern int get_spec_reg __ARGS((int regname, char_u **argp, int *allocated, int errmsg));
+! extern int cmdline_paste_reg __ARGS((int regname, int literally));
+ extern void adjust_clip_reg __ARGS((int *rp));
+ extern int op_delete __ARGS((oparg_T *oap));
+ extern int op_replace __ARGS((oparg_T *oap, int c));
+--- 20,26 ----
+ extern int do_execreg __ARGS((int regname, int colon, int addcr));
+ extern int insert_reg __ARGS((int regname, int literally));
+ extern int get_spec_reg __ARGS((int regname, char_u **argp, int *allocated, int errmsg));
+! extern int cmdline_paste_reg __ARGS((int regname, int literally, int remcr));
+ extern void adjust_clip_reg __ARGS((int *rp));
+ extern int op_delete __ARGS((oparg_T *oap));
+ extern int op_replace __ARGS((oparg_T *oap, int c));
+*** ../vim-7.0.140/src/ops.c Fri Oct 6 23:33:22 2006
+--- src/ops.c Sun Oct 15 16:43:54 2006
+***************
+*** 1480,1488 ****
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! cmdline_paste_reg(regname, literally)
+ int regname;
+ int literally; /* Insert text literally instead of "as typed" */
+ {
+ long i;
+
+--- 1481,1490 ----
+ * return FAIL for failure, OK otherwise
+ */
+ int
+! cmdline_paste_reg(regname, literally, remcr)
+ int regname;
+ int literally; /* Insert text literally instead of "as typed" */
++ int remcr; /* don't add trailing CR */
+ {
+ long i;
+
+***************
+*** 1494,1501 ****
+ {
+ cmdline_paste_str(y_current->y_array[i], literally);
+
+! /* insert ^M between lines and after last line if type is MLINE */
+! if (y_current->y_type == MLINE || i < y_current->y_size - 1)
+ cmdline_paste_str((char_u *)"\r", literally);
+
+ /* Check for CTRL-C, in case someone tries to paste a few thousand
+--- 1496,1508 ----
+ {
+ cmdline_paste_str(y_current->y_array[i], literally);
+
+! /* Insert ^M between lines and after last line if type is MLINE.
+! * Don't do this when "remcr" is TRUE and the next line is empty. */
+! if (y_current->y_type == MLINE
+! || (i < y_current->y_size - 1
+! && !(remcr
+! && i == y_current->y_size - 2
+! && *y_current->y_array[i + 1] == NUL)))
+ cmdline_paste_str((char_u *)"\r", literally);
+
+ /* Check for CTRL-C, in case someone tries to paste a few thousand
+*** ../vim-7.0.140/src/version.c Tue Oct 17 15:17:41 2006
+--- src/version.c Tue Oct 17 16:22:55 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 141,
+ /**/
+
+--
+ERROR 047: Keyboard not found. Press RETURN 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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.142
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.142
+Problem: Using the middle mouse button in Select mode to paste text results
+ in an extra "y". (Kriton Kyrimis)
+Solution: Let the middle mouse button replace the selected text with the
+ contents of the clipboard.
+Files: src/normal.c
+
+
+*** ../vim-7.0.141/src/normal.c Tue Oct 10 13:27:30 2006
+--- src/normal.c Tue Oct 17 16:54:57 2006
+***************
+*** 2380,2390 ****
+ /*
+ * If visual was active, yank the highlighted text and put it
+ * before the mouse pointer position.
+ */
+ if (VIsual_active)
+ {
+! stuffcharReadbuff('y');
+! stuffcharReadbuff(K_MIDDLEMOUSE);
+ do_always = TRUE; /* ignore 'mouse' setting next time */
+ return FALSE;
+ }
+--- 2380,2399 ----
+ /*
+ * If visual was active, yank the highlighted text and put it
+ * before the mouse pointer position.
++ * In Select mode replace the highlighted text with the clipboard.
+ */
+ if (VIsual_active)
+ {
+! if (VIsual_select)
+! {
+! stuffcharReadbuff(Ctrl_G);
+! stuffReadbuff("\"+p");
+! }
+! else
+! {
+! stuffcharReadbuff('y');
+! stuffcharReadbuff(K_MIDDLEMOUSE);
+! }
+ do_always = TRUE; /* ignore 'mouse' setting next time */
+ return FALSE;
+ }
+*** ../vim-7.0.141/src/version.c Tue Oct 17 16:26:52 2006
+--- src/version.c Tue Oct 17 16:51:23 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 142,
+ /**/
+
+--
+Keyboard not found. Think ENTER to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.143
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.143
+Problem: Setting 'scroll' to its default value was not handled correctly.
+Solution: Compare the right field to PV_SCROLL.
+Files: src/option.c
+
+
+*** ../vim-7.0.142/src/option.c Tue Oct 10 18:43:50 2006
+--- src/option.c Tue Oct 17 17:29:09 2006
+***************
+*** 3405,3411 ****
+ }
+ else if (flags & P_NUM)
+ {
+! if (varp == (char_u *)PV_SCROLL)
+ win_comp_scroll(curwin);
+ else
+ {
+--- 3405,3411 ----
+ }
+ else if (flags & P_NUM)
+ {
+! if (options[opt_idx].indir == PV_SCROLL)
+ win_comp_scroll(curwin);
+ else
+ {
+*** ../vim-7.0.142/src/version.c Tue Oct 17 16:55:47 2006
+--- src/version.c Tue Oct 17 18:34:53 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 143,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+56. You leave the modem speaker on after connecting because you think it
+ sounds like the ocean wind...the perfect soundtrack for "surfing the net".
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.144
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.144
+Problem: May compare two unrelated pointers when matching a pattern against
+ a string. (Dominique Pelle)
+Solution: Avoid calling reg_getline() when REG_MULTI is false.
+Files: src/regexp.c
+
+
+*** ../vim-7.0.143/src/regexp.c Tue Aug 29 17:28:56 2006
+--- src/regexp.c Tue Oct 17 18:30:18 2006
+***************
+*** 3777,3784 ****
+
+ op = OP(scan);
+ /* Check for character class with NL added. */
+! if (!reg_line_lbr && WITH_NL(op) && *reginput == NUL
+! && reglnum <= reg_maxline)
+ {
+ reg_nextline();
+ }
+--- 3777,3784 ----
+
+ op = OP(scan);
+ /* Check for character class with NL added. */
+! if (!reg_line_lbr && WITH_NL(op) && REG_MULTI
+! && *reginput == NUL && reglnum <= reg_maxline)
+ {
+ reg_nextline();
+ }
+***************
+*** 4855,4862 ****
+ break;
+
+ case NEWL:
+! if ((c != NUL || reglnum > reg_maxline || reg_line_lbr)
+! && (c != '\n' || !reg_line_lbr))
+ status = RA_NOMATCH;
+ else if (reg_line_lbr)
+ ADVANCE_REGINPUT();
+--- 4855,4862 ----
+ break;
+
+ case NEWL:
+! if ((c != NUL || !REG_MULTI || reglnum > reg_maxline
+! || reg_line_lbr) && (c != '\n' || !reg_line_lbr))
+ status = RA_NOMATCH;
+ else if (reg_line_lbr)
+ ADVANCE_REGINPUT();
+***************
+*** 5316,5323 ****
+ ++count;
+ mb_ptr_adv(scan);
+ }
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr
+! || count == maxcount)
+ break;
+ ++count; /* count the line-break */
+ reg_nextline();
+--- 5316,5323 ----
+ ++count;
+ mb_ptr_adv(scan);
+ }
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr || count == maxcount)
+ break;
+ ++count; /* count the line-break */
+ reg_nextline();
+***************
+*** 5341,5347 ****
+ }
+ else if (*scan == NUL)
+ {
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+--- 5341,5348 ----
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+***************
+*** 5370,5376 ****
+ }
+ else if (*scan == NUL)
+ {
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+--- 5371,5378 ----
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+***************
+*** 5399,5405 ****
+ }
+ else if (*scan == NUL)
+ {
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+--- 5401,5408 ----
+ }
+ else if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+***************
+*** 5424,5430 ****
+ {
+ if (*scan == NUL)
+ {
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+--- 5427,5434 ----
+ {
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+***************
+*** 5454,5460 ****
+ #endif
+ if (*scan == NUL)
+ {
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+--- 5458,5465 ----
+ #endif
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+***************
+*** 5617,5623 ****
+ #endif
+ if (*scan == NUL)
+ {
+! if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+--- 5622,5629 ----
+ #endif
+ if (*scan == NUL)
+ {
+! if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
+! || reg_line_lbr)
+ break;
+ reg_nextline();
+ scan = reginput;
+***************
+*** 5646,5653 ****
+
+ case NEWL:
+ while (count < maxcount
+! && ((*scan == NUL && reglnum <= reg_maxline && !reg_line_lbr)
+! || (*scan == '\n' && reg_line_lbr)))
+ {
+ count++;
+ if (reg_line_lbr)
+--- 5652,5659 ----
+
+ case NEWL:
+ while (count < maxcount
+! && ((*scan == NUL && reglnum <= reg_maxline && !reg_line_lbr
+! && REG_MULTI) || (*scan == '\n' && reg_line_lbr)))
+ {
+ count++;
+ if (reg_line_lbr)
+*** ../vim-7.0.143/src/version.c Tue Oct 17 18:36:03 2006
+--- src/version.c Tue Oct 17 18:48:51 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 144,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.145
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.145 (after 7.0.142)
+Problem: Compiler warning.
+Solution: Add type cast.
+Files: src/normal.c
+
+
+*** ../vim-7.0.144/src/normal.c Tue Oct 17 16:55:47 2006
+--- src/normal.c Tue Oct 17 22:37:42 2006
+***************
+*** 2387,2393 ****
+ if (VIsual_select)
+ {
+ stuffcharReadbuff(Ctrl_G);
+! stuffReadbuff("\"+p");
+ }
+ else
+ {
+--- 2387,2393 ----
+ if (VIsual_select)
+ {
+ stuffcharReadbuff(Ctrl_G);
+! stuffReadbuff((char_u *)"\"+p");
+ }
+ else
+ {
+*** ../vim-7.0.144/src/version.c Tue Oct 17 18:50:15 2006
+--- src/version.c Tue Oct 17 22:38:21 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 145,
+ /**/
+
+--
+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 ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.146
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.146
+Problem: When 'switchbuf' is set to "usetab" and the current tab has only a
+ quickfix window, jumping to an error always opens a new window.
+ Also, when the buffer is open in another tab page it's not found.
+Solution: Check for the "split" value of 'switchbuf' properly. Search in
+ other tab pages for the desired buffer. (Yegappan Lakshmanan)
+Files: src/buffer.c, src/quickfix.c
+
+
+*** ../vim-7.0.145/src/buffer.c Sat Sep 9 14:51:43 2006
+--- src/buffer.c Fri Oct 20 20:08:49 2006
+***************
+*** 1208,1218 ****
+ {
+ # ifdef FEAT_WINDOWS
+ /* jump to first window containing buf if one exists ("useopen") */
+! if (vim_strchr(p_swb, 'o') && buf_jump_open_win(buf))
+ return OK;
+ /* jump to first window in any tab page containing buf if one exists
+ * ("usetab") */
+! if (vim_strchr(p_swb, 'a') && buf_jump_open_tab(buf))
+ return OK;
+ if (win_split(0, 0) == FAIL)
+ # endif
+--- 1208,1218 ----
+ {
+ # ifdef FEAT_WINDOWS
+ /* jump to first window containing buf if one exists ("useopen") */
+! if (vim_strchr(p_swb, 'o') != NULL && buf_jump_open_win(buf))
+ return OK;
+ /* jump to first window in any tab page containing buf if one exists
+ * ("usetab") */
+! if (vim_strchr(p_swb, 'a') != NULL && buf_jump_open_tab(buf))
+ return OK;
+ if (win_split(0, 0) == FAIL)
+ # endif
+***************
+*** 1842,1854 ****
+ if (options & GETF_SWITCH)
+ {
+ /* use existing open window for buffer if wanted */
+! if (vim_strchr(p_swb, 'o')) /* useopen */
+ wp = buf_jump_open_win(buf);
+ /* use existing open window in any tab page for buffer if wanted */
+! if (vim_strchr(p_swb, 'a')) /* usetab */
+ wp = buf_jump_open_tab(buf);
+ /* split window if wanted ("split") */
+! if (wp == NULL && vim_strchr(p_swb, 't') && !bufempty())
+ {
+ if (win_split(0, 0) == FAIL)
+ return FAIL;
+--- 1842,1854 ----
+ if (options & GETF_SWITCH)
+ {
+ /* use existing open window for buffer if wanted */
+! if (vim_strchr(p_swb, 'o') != NULL) /* useopen */
+ wp = buf_jump_open_win(buf);
+ /* use existing open window in any tab page for buffer if wanted */
+! if (vim_strchr(p_swb, 'a') != NULL) /* usetab */
+ wp = buf_jump_open_tab(buf);
+ /* split window if wanted ("split") */
+! if (wp == NULL && vim_strchr(p_swb, 'l') != NULL && !bufempty())
+ {
+ if (win_split(0, 0) == FAIL)
+ return FAIL;
+*** ../vim-7.0.145/src/quickfix.c Tue Sep 5 15:36:30 2006
+--- src/quickfix.c Fri Oct 20 20:05:00 2006
+***************
+*** 1586,1595 ****
+ }
+
+ /*
+! * If there is only one window, create a new one above the quickfix
+! * window.
+ */
+! if (firstwin == lastwin || !usable_win)
+ {
+ ll_ref = curwin->w_llist_ref;
+
+--- 1586,1615 ----
+ }
+
+ /*
+! * If no usable window is found and 'switchbuf' is set to 'usetab'
+! * then search in other tabs.
+ */
+! if (!usable_win && vim_strchr(p_swb, 'a') != NULL)
+! {
+! tabpage_T *tp;
+! win_T *wp;
+!
+! FOR_ALL_TAB_WINDOWS(tp, wp)
+! {
+! if (wp->w_buffer->b_fnum == qf_ptr->qf_fnum)
+! {
+! goto_tabpage_win(tp, wp);
+! usable_win = 1;
+! break;
+! }
+! }
+! }
+!
+! /*
+! * If there is only one window and is the quickfix window, create a new
+! * one above the quickfix window.
+! */
+! if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
+ {
+ ll_ref = curwin->w_llist_ref;
+
+*** ../vim-7.0.145/src/version.c Tue Oct 17 22:40:14 2006
+--- src/version.c Fri Oct 20 20:11:58 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 146,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+80. At parties, you introduce your spouse as your "service provider."
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.147
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.147
+Problem: When creating a session file and there are several tab pages and
+ some windows have a local directory a short file name may be used
+ when it's not valid. (Marius Roets)
+ A session with multiple tab pages may result in "No Name" buffers.
+ (Bill McCarthy)
+Solution: Don't enter tab pages when going through the list, only use a
+ pointer to the first window in each tab page.
+ Use "tabedit" instead of "tabnew | edit" when possible.
+Files: src/ex_docmd.c
+
+
+*** ../vim-7.0.146/src/ex_docmd.c Sun Sep 10 21:05:39 2006
+--- src/ex_docmd.c Tue Oct 24 12:55:11 2006
+***************
+*** 9643,9649 ****
+ #endif
+
+ #ifdef FEAT_SESSION
+! static int ses_winsizes __ARGS((FILE *fd, int restore_size));
+ static int ses_win_rec __ARGS((FILE *fd, frame_T *fr));
+ static frame_T *ses_skipframe __ARGS((frame_T *fr));
+ static int ses_do_frame __ARGS((frame_T *fr));
+--- 9643,9650 ----
+ #endif
+
+ #ifdef FEAT_SESSION
+! static int ses_winsizes __ARGS((FILE *fd, int restore_size,
+! win_T *tab_firstwin));
+ static int ses_win_rec __ARGS((FILE *fd, frame_T *fr));
+ static frame_T *ses_skipframe __ARGS((frame_T *fr));
+ static int ses_do_frame __ARGS((frame_T *fr));
+***************
+*** 9669,9676 ****
+ win_T *wp;
+ char_u *sname;
+ win_T *edited_win = NULL;
+- tabpage_T *old_curtab = curtab;
+ int tabnr;
+
+ if (ssop_flags & SSOP_BUFFERS)
+ only_save_windows = FALSE; /* Save ALL buffers */
+--- 9670,9677 ----
+ win_T *wp;
+ char_u *sname;
+ win_T *edited_win = NULL;
+ int tabnr;
++ win_T *tab_firstwin;
+
+ if (ssop_flags & SSOP_BUFFERS)
+ only_save_windows = FALSE; /* Save ALL buffers */
+***************
+*** 9778,9791 ****
+ /*
+ * May repeat putting Windows for each tab, when "tabpages" is in
+ * 'sessionoptions'.
+ */
+ for (tabnr = 1; ; ++tabnr)
+ {
+ if ((ssop_flags & SSOP_TABPAGES))
+ {
+! goto_tabpage(tabnr);
+! if (tabnr > 1 && put_line(fd, "tabnew") == FAIL)
+! return FAIL;
+ }
+
+ /*
+--- 9779,9804 ----
+ /*
+ * May repeat putting Windows for each tab, when "tabpages" is in
+ * 'sessionoptions'.
++ * Don't use goto_tabpage(), it may change directory and trigger
++ * autocommands.
+ */
++ tab_firstwin = firstwin; /* first window in tab page "tabnr" */
+ for (tabnr = 1; ; ++tabnr)
+ {
++ int need_tabnew = FALSE;
++
+ if ((ssop_flags & SSOP_TABPAGES))
+ {
+! tabpage_T *tp = find_tabpage(tabnr);
+!
+! if (tp == NULL)
+! break; /* done all tab pages */
+! if (tp == curtab)
+! tab_firstwin = firstwin;
+! else
+! tab_firstwin = tp->tp_firstwin;
+! if (tabnr > 1)
+! need_tabnew = TRUE;
+ }
+
+ /*
+***************
+*** 9793,9799 ****
+ * is aborted we don't end up with a number of useless windows.
+ * This may have side effects! (e.g., compressed or network file).
+ */
+! for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (ses_do_win(wp)
+ && wp->w_buffer->b_ffname != NULL
+--- 9806,9812 ----
+ * is aborted we don't end up with a number of useless windows.
+ * This may have side effects! (e.g., compressed or network file).
+ */
+! for (wp = tab_firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (ses_do_win(wp)
+ && wp->w_buffer->b_ffname != NULL
+***************
+*** 9803,9817 ****
+ #endif
+ )
+ {
+! if (fputs("edit ", fd) < 0
+ || ses_fname(fd, wp->w_buffer, &ssop_flags) == FAIL)
+ return FAIL;
+ if (!wp->w_arg_idx_invalid)
+ edited_win = wp;
+ break;
+ }
+ }
+
+ /*
+ * Save current window layout.
+ */
+--- 9816,9835 ----
+ #endif
+ )
+ {
+! if (fputs(need_tabnew ? "tabedit " : "edit ", fd) < 0
+ || ses_fname(fd, wp->w_buffer, &ssop_flags) == FAIL)
+ return FAIL;
++ need_tabnew = FALSE;
+ if (!wp->w_arg_idx_invalid)
+ edited_win = wp;
+ break;
+ }
+ }
+
++ /* If no file got edited create an empty tab page. */
++ if (need_tabnew && put_line(fd, "tabnew") == FAIL)
++ return FAIL;
++
+ /*
+ * Save current window layout.
+ */
+***************
+*** 9829,9835 ****
+ * Remember the window number of the current window after restoring.
+ */
+ nr = 0;
+! for (wp = firstwin; wp != NULL; wp = W_NEXT(wp))
+ {
+ if (ses_do_win(wp))
+ ++nr;
+--- 9847,9853 ----
+ * Remember the window number of the current window after restoring.
+ */
+ nr = 0;
+! for (wp = tab_firstwin; wp != NULL; wp = W_NEXT(wp))
+ {
+ if (ses_do_win(wp))
+ ++nr;
+***************
+*** 9852,9864 ****
+ */
+ if (put_line(fd, "set winheight=1 winwidth=1") == FAIL)
+ return FAIL;
+! if (nr > 1 && ses_winsizes(fd, restore_size) == FAIL)
+ return FAIL;
+
+ /*
+ * Restore the view of the window (options, file, cursor, etc.).
+ */
+! for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (!ses_do_win(wp))
+ continue;
+--- 9870,9882 ----
+ */
+ if (put_line(fd, "set winheight=1 winwidth=1") == FAIL)
+ return FAIL;
+! if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
+ return FAIL;
+
+ /*
+ * Restore the view of the window (options, file, cursor, etc.).
+ */
+! for (wp = tab_firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (!ses_do_win(wp))
+ continue;
+***************
+*** 9879,9897 ****
+ * Restore window sizes again after jumping around in windows, because
+ * the current window has a minimum size while others may not.
+ */
+! if (nr > 1 && ses_winsizes(fd, restore_size) == FAIL)
+ return FAIL;
+
+ /* Don't continue in another tab page when doing only the current one
+ * or when at the last tab page. */
+! if (!(ssop_flags & SSOP_TABPAGES) || curtab->tp_next == NULL)
+ break;
+ }
+
+ if (ssop_flags & SSOP_TABPAGES)
+ {
+- if (valid_tabpage(old_curtab))
+- goto_tabpage_tp(old_curtab);
+ if (fprintf(fd, "tabnext %d", tabpage_index(curtab)) < 0
+ || put_eol(fd) == FAIL)
+ return FAIL;
+--- 9897,9913 ----
+ * Restore window sizes again after jumping around in windows, because
+ * the current window has a minimum size while others may not.
+ */
+! if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
+ return FAIL;
+
+ /* Don't continue in another tab page when doing only the current one
+ * or when at the last tab page. */
+! if (!(ssop_flags & SSOP_TABPAGES))
+ break;
+ }
+
+ if (ssop_flags & SSOP_TABPAGES)
+ {
+ if (fprintf(fd, "tabnext %d", tabpage_index(curtab)) < 0
+ || put_eol(fd) == FAIL)
+ return FAIL;
+***************
+*** 9927,9942 ****
+ }
+
+ static int
+! ses_winsizes(fd, restore_size)
+ FILE *fd;
+ int restore_size;
+ {
+ int n = 0;
+ win_T *wp;
+
+ if (restore_size && (ssop_flags & SSOP_WINSIZE))
+ {
+! for (wp = firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (!ses_do_win(wp))
+ continue;
+--- 9943,9959 ----
+ }
+
+ static int
+! ses_winsizes(fd, restore_size, tab_firstwin)
+ FILE *fd;
+ int restore_size;
++ win_T *tab_firstwin;
+ {
+ int n = 0;
+ win_T *wp;
+
+ if (restore_size && (ssop_flags & SSOP_WINSIZE))
+ {
+! for (wp = tab_firstwin; wp != NULL; wp = wp->w_next)
+ {
+ if (!ses_do_win(wp))
+ continue;
+*** ../vim-7.0.146/src/version.c Fri Oct 20 20:15:05 2006
+--- src/version.c Tue Oct 24 12:57:04 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 147,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+95. Only communication in your household is through email.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.148
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.148
+Problem: When doing "call a.xyz()" and "xyz" does not exist in dictionary
+ "a" there is no error message. (Yegappan Lakshmanan)
+Solution: Add the error message.
+Files: src/eval.c
+
+
+*** ../vim-7.0.147/src/eval.c Tue Oct 17 15:17:41 2006
+--- src/eval.c Tue Oct 24 11:01:25 2006
+***************
+*** 3125,3131 ****
+ funcdict_T fudi;
+
+ tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
+! vim_free(fudi.fd_newkey);
+ if (tofree == NULL)
+ return;
+
+--- 3125,3136 ----
+ funcdict_T fudi;
+
+ tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
+! if (fudi.fd_newkey != NULL)
+! {
+! /* Still need to give an error message for missing key. */
+! EMSG2(_(e_dictkey), fudi.fd_newkey);
+! vim_free(fudi.fd_newkey);
+! }
+ if (tofree == NULL)
+ return;
+
+*** ../vim-7.0.147/src/version.c Tue Oct 24 13:02:27 2006
+--- src/version.c Tue Oct 24 13:50:39 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 148,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+99. The hum of a cooling fan and the click of keys is comforting to you.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.149
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.149
+Problem: When resizing a window that shows "~" lines the text sometimes
+ jumps down.
+Solution: Remove code that uses "~" lines in some situations. Fix the
+ computation of the screen line of the cursor. Also set w_skipcol
+ to handle very long lines.
+Files: src/misc1.c, src/window.c
+
+
+*** ../vim-7.0.148/src/misc1.c Tue Oct 17 11:12:28 2006
+--- src/misc1.c Tue Oct 24 17:33:39 2006
+***************
+*** 1761,1775 ****
+ * Add column offset for 'number', 'foldcolumn', etc.
+ */
+ width = W_WIDTH(wp) - win_col_off(wp);
+! if (width > 0)
+! {
+! lines += 1;
+! if (col >= width)
+! lines += (col - width) / (width + win_col_off2(wp));
+! if (lines <= wp->w_height)
+! return lines;
+! }
+! return (int)(wp->w_height); /* maximum length */
+ }
+
+ int
+--- 1761,1773 ----
+ * Add column offset for 'number', 'foldcolumn', etc.
+ */
+ width = W_WIDTH(wp) - win_col_off(wp);
+! if (width <= 0)
+! return 9999;
+!
+! lines += 1;
+! if (col > width)
+! lines += (col - width) / (width + win_col_off2(wp)) + 1;
+! return lines;
+ }
+
+ int
+*** ../vim-7.0.148/src/window.c Tue Sep 5 16:29:38 2006
+--- src/window.c Tue Oct 24 20:39:56 2006
+***************
+*** 5189,5199 ****
+ int height;
+ {
+ linenr_T lnum;
+- linenr_T bot;
+ int sline, line_size;
+- int space;
+- int did_below = FALSE;
+- int old_height = wp->w_height;
+ #define FRACTION_MULT 16384L
+
+ /* Don't want a negative height. Happens when splitting a tiny window.
+--- 5189,5195 ----
+***************
+*** 5228,5281 ****
+ wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L) / FRACTION_MULT;
+ line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1;
+ sline = wp->w_wrow - line_size;
+ if (sline < 0)
+ {
+ /*
+ * Cursor line would go off top of screen if w_wrow was this high.
+ */
+ wp->w_wrow = line_size;
+ }
+ else
+ {
+! space = height - 1;
+!
+! while (lnum > 1)
+ {
+- /* When using "~" lines stop when at the old topline, don't
+- * scroll down. */
+- if (did_below && height < old_height && lnum <= wp->w_topline)
+- sline = 0;
+-
+- space -= line_size;
+- if (space > 0 && sline <= 0 && !did_below)
+- {
+- /* Try to use "~" lines below the text to avoid that text
+- * is above the window while there are empty lines.
+- * Subtract the rows below the cursor from "space" and
+- * give the rest to "sline". */
+- did_below = TRUE;
+- bot = wp->w_cursor.lnum;
+- while (space > 0)
+- {
+- if (wp->w_buffer->b_ml.ml_line_count - bot >= space)
+- space = 0;
+- else
+- {
+- #ifdef FEAT_FOLDING
+- hasFoldingWin(wp, bot, NULL, &bot, TRUE, NULL);
+- #endif
+- if (bot >= wp->w_buffer->b_ml.ml_line_count)
+- break;
+- ++bot;
+- space -= plines_win(wp, bot, TRUE);
+- }
+- }
+- if (bot == wp->w_buffer->b_ml.ml_line_count && space > 0)
+- sline += space;
+- }
+- if (sline <= 0)
+- break;
+-
+ #ifdef FEAT_FOLDING
+ hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL);
+ if (lnum == 1)
+--- 5224,5267 ----
+ wp->w_wrow = ((long)wp->w_fraction * (long)height - 1L) / FRACTION_MULT;
+ line_size = plines_win_col(wp, lnum, (long)(wp->w_cursor.col)) - 1;
+ sline = wp->w_wrow - line_size;
++
++ if (sline >= 0)
++ {
++ /* Make sure the whole cursor line is visible, if possible. */
++ int rows = plines_win(wp, lnum, FALSE);
++
++ if (sline > wp->w_height - rows)
++ {
++ sline = wp->w_height - rows;
++ wp->w_wrow -= rows - line_size;
++ }
++ }
++
+ if (sline < 0)
+ {
+ /*
+ * Cursor line would go off top of screen if w_wrow was this high.
++ * Make cursor line the first line in the window. If not enough
++ * room use w_skipcol;
+ */
+ wp->w_wrow = line_size;
++ if (wp->w_wrow >= wp->w_height
++ && (W_WIDTH(wp) - win_col_off(wp)) > 0)
++ {
++ wp->w_skipcol += W_WIDTH(wp) - win_col_off(wp);
++ --wp->w_wrow;
++ while (wp->w_wrow >= wp->w_height)
++ {
++ wp->w_skipcol += W_WIDTH(wp) - win_col_off(wp)
++ + win_col_off2(wp);
++ --wp->w_wrow;
++ }
++ }
+ }
+ else
+ {
+! while (sline > 0 && lnum > 1)
+ {
+ #ifdef FEAT_FOLDING
+ hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL);
+ if (lnum == 1)
+*** ../vim-7.0.148/src/version.c Tue Oct 24 13:51:47 2006
+--- src/version.c Tue Oct 24 21:13:31 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 149,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+104. When people ask about the Presidential Election you ask "Which country?"
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.150
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.150
+Problem: When resizing the Vim window scrollbinding doesn't work. (Yakov
+ Lerner)
+Solution: Do scrollbinding in set_shellsize().
+Files: src/term.c
+
+
+*** ../vim-7.0.149/src/term.c Wed Aug 16 21:42:34 2006
+--- src/term.c Tue Oct 24 11:26:33 2006
+***************
+*** 3137,3161 ****
+ screenalloc(FALSE);
+ repeat_message();
+ }
+- else if (State & CMDLINE)
+- {
+- update_screen(NOT_VALID);
+- redrawcmdline();
+- }
+ else
+ {
+! update_topline();
+! #if defined(FEAT_INS_EXPAND)
+! if (pum_visible())
+ {
+! redraw_later(NOT_VALID);
+! ins_compl_show_pum(); /* This includes the redraw. */
+ }
+ else
+ #endif
+! update_screen(NOT_VALID);
+! if (redrawing())
+! setcursor();
+ }
+ cursor_on(); /* redrawing may have switched it off */
+ }
+--- 3138,3169 ----
+ screenalloc(FALSE);
+ repeat_message();
+ }
+ else
+ {
+! #ifdef FEAT_SCROLLBIND
+! if (curwin->w_p_scb)
+! do_check_scrollbind(TRUE);
+! #endif
+! if (State & CMDLINE)
+ {
+! update_screen(NOT_VALID);
+! redrawcmdline();
+ }
+ else
++ {
++ update_topline();
++ #if defined(FEAT_INS_EXPAND)
++ if (pum_visible())
++ {
++ redraw_later(NOT_VALID);
++ ins_compl_show_pum(); /* This includes the redraw. */
++ }
++ else
+ #endif
+! update_screen(NOT_VALID);
+! if (redrawing())
+! setcursor();
+! }
+ }
+ cursor_on(); /* redrawing may have switched it off */
+ }
+*** ../vim-7.0.149/src/version.c Tue Oct 24 21:15:09 2006
+--- src/version.c Tue Oct 24 21:33:39 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 150,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+106. When told to "go to your room" you inform your parents that you
+ can't...because you were kicked out and banned.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.151
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.151
+Problem: Buttons in file dialog are not according to Gnome guidelines.
+Solution: Swap Cancel and Open buttons. (Stefano Zacchiroli)
+Files: src/gui_gtk.c
+
+
+*** ../vim-7.0.150/src/gui_gtk.c Tue Oct 10 18:29:21 2006
+--- src/gui_gtk.c Sun Oct 22 15:33:40 2006
+***************
+*** 1293,1300 ****
+ GTK_WINDOW(gui.mainwin),
+ saving ? GTK_FILE_CHOOSER_ACTION_SAVE
+ : GTK_FILE_CHOOSER_ACTION_OPEN,
+- saving ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
+ (const gchar *)dirbuf);
+--- 1293,1300 ----
+ GTK_WINDOW(gui.mainwin),
+ saving ? GTK_FILE_CHOOSER_ACTION_SAVE
+ : GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
++ saving ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
+ (const gchar *)dirbuf);
+*** ../vim-7.0.150/src/version.c Tue Oct 24 21:38:16 2006
+--- src/version.c Tue Oct 24 22:01:07 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 151,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+108. While reading a magazine, you look for the Zoom icon for a better
+ look at a photograph.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.152
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.152
+Problem: Crash when using lesstif 2.
+Solution: Fill in the extension field. (Ben Hutchings)
+Files: src/gui_xmebw.c
+
+
+*** ../vim-7.0.151/src/gui_xmebw.c Sat May 13 17:26:10 2006
+--- src/gui_xmebw.c Tue Oct 24 22:27:53 2006
+***************
+*** 138,143 ****
+--- 138,156 ----
+ }
+ };
+
++ /* This is needed to work around a bug in Lesstif 2, leaving the extension
++ * NULL somehow results in getting it set to an invalid pointer. */
++ XmPrimitiveClassExtRec xmEnhancedButtonPrimClassExtRec =
++ {
++ /* next_extension */ NULL,
++ /* record_type */ NULLQUARK,
++ /* version */ XmPrimitiveClassExtVersion,
++ /* record_size */ sizeof(XmPrimitiveClassExtRec),
++ /* widget_baseline */ XmInheritBaselineProc,
++ /* widget_display_rect */ XmInheritDisplayRectProc,
++ /* widget_margins */ NULL
++ };
++
+ XmEnhancedButtonClassRec xmEnhancedButtonClassRec =
+ {
+ {
+***************
+*** 184,190 ****
+ /* arm and activate */ XmInheritArmAndActivate,
+ /* synthetic resources */ NULL,
+ /* number of syn res */ 0,
+! /* extension */ NULL,
+ },
+
+ /* label_class fields */
+--- 197,203 ----
+ /* arm and activate */ XmInheritArmAndActivate,
+ /* synthetic resources */ NULL,
+ /* number of syn res */ 0,
+! /* extension */ (XtPointer)&xmEnhancedButtonPrimClassExtRec,
+ },
+
+ /* label_class fields */
+*** ../vim-7.0.151/src/version.c Tue Oct 24 22:01:55 2006
+--- src/version.c Tue Oct 24 22:30:40 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 152,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+110. You actually volunteer to become your employer's webmaster.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.153
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.153
+Problem: When using cscope and opening the temp file fails Vim crashes.
+ (Kaya Bekiroglu)
+Solution: Check for NULL pointer returned from mch_open().
+Files: src/if_cscope.c
+
+
+*** ../vim-7.0.152/src/if_cscope.c Tue Aug 29 17:28:56 2006
+--- src/if_cscope.c Mon Oct 30 22:26:01 2006
+***************
+*** 1100,1137 ****
+ if (qfpos != NULL && *qfpos != '0' && totmatches > 0)
+ {
+ /* fill error list */
+! FILE *f;
+! char_u *tmp = vim_tempname('c');
+ qf_info_T *qi = NULL;
+ win_T *wp = NULL;
+
+ f = mch_fopen((char *)tmp, "w");
+! cs_file_results(f, nummatches);
+! fclose(f);
+! if (use_ll) /* Use location list */
+! wp = curwin;
+! /* '-' starts a new error list */
+! if (qf_init(wp, tmp, (char_u *)"%f%*\\t%l%*\\t%m", *qfpos == '-') > 0)
+ {
+! # ifdef FEAT_WINDOWS
+! if (postponed_split != 0)
+ {
+! win_split(postponed_split > 0 ? postponed_split : 0,
+ postponed_split_flags);
+ # ifdef FEAT_SCROLLBIND
+! curwin->w_p_scb = FALSE;
+ # endif
+! postponed_split = 0;
+! }
+ # endif
+! if (use_ll)
+! /*
+! * In the location list window, use the displayed location
+! * list. Otherwise, use the location list for the window.
+! */
+! qi = (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL) ?
+! wp->w_llist_ref : wp->w_llist;
+! qf_jump(qi, 0, 0, forceit);
+ }
+ mch_remove(tmp);
+ vim_free(tmp);
+--- 1100,1143 ----
+ if (qfpos != NULL && *qfpos != '0' && totmatches > 0)
+ {
+ /* fill error list */
+! FILE *f;
+! char_u *tmp = vim_tempname('c');
+ qf_info_T *qi = NULL;
+ win_T *wp = NULL;
+
+ f = mch_fopen((char *)tmp, "w");
+! if (f == NULL)
+! EMSG2(_(e_notopen), tmp);
+! else
+ {
+! cs_file_results(f, nummatches);
+! fclose(f);
+! if (use_ll) /* Use location list */
+! wp = curwin;
+! /* '-' starts a new error list */
+! if (qf_init(wp, tmp, (char_u *)"%f%*\\t%l%*\\t%m",
+! *qfpos == '-') > 0)
+ {
+! # ifdef FEAT_WINDOWS
+! if (postponed_split != 0)
+! {
+! win_split(postponed_split > 0 ? postponed_split : 0,
+ postponed_split_flags);
+ # ifdef FEAT_SCROLLBIND
+! curwin->w_p_scb = FALSE;
+ # endif
+! postponed_split = 0;
+! }
+ # endif
+! if (use_ll)
+! /*
+! * In the location list window, use the displayed location
+! * list. Otherwise, use the location list for the window.
+! */
+! qi = (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL)
+! ? wp->w_llist_ref : wp->w_llist;
+! qf_jump(qi, 0, 0, forceit);
+! }
+ }
+ mch_remove(tmp);
+ vim_free(tmp);
+***************
+*** 1723,1729 ****
+ continue;
+
+ context = (char *)alloc((unsigned)strlen(cntx)+5);
+! if (context==NULL)
+ continue;
+
+ if (strcmp(cntx, "<global>")==0)
+--- 1729,1735 ----
+ continue;
+
+ context = (char *)alloc((unsigned)strlen(cntx)+5);
+! if (context == NULL)
+ continue;
+
+ if (strcmp(cntx, "<global>")==0)
+***************
+*** 1731,1737 ****
+ else
+ sprintf(context, "<<%s>>", cntx);
+
+! if (search==NULL)
+ fprintf(f, "%s\t%s\t%s\n", fullname, slno, context);
+ else
+ fprintf(f, "%s\t%s\t%s %s\n", fullname, slno, context, search);
+--- 1737,1743 ----
+ else
+ sprintf(context, "<<%s>>", cntx);
+
+! if (search == NULL)
+ fprintf(f, "%s\t%s\t%s\n", fullname, slno, context);
+ else
+ fprintf(f, "%s\t%s\t%s %s\n", fullname, slno, context, search);
+*** ../vim-7.0.152/src/version.c Tue Oct 24 22:31:51 2006
+--- src/version.c Mon Oct 30 22:29:45 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 153,
+ /**/
+
+--
+You cannot have a baby in one month by getting nine women pregnant.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.154
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.154
+Problem: When 'foldnextmax' is negative Vim can hang. (James Vega)
+Solution: Avoid the fold level becoming negative.
+Files: src/fold.c, src/syntax.c
+
+
+*** ../vim-7.0.153/src/fold.c Sun Apr 23 00:31:04 2006
+--- src/fold.c Sun Oct 29 20:23:21 2006
+***************
+*** 2971,2977 ****
+--- 2971,2981 ----
+ else
+ flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
+ if (flp->lvl > flp->wp->w_p_fdn)
++ {
+ flp->lvl = flp->wp->w_p_fdn;
++ if (flp->lvl < 0)
++ flp->lvl = 0;
++ }
+ }
+
+ /* foldlevelDiff() {{{2 */
+*** ../vim-7.0.153/src/syntax.c Tue Oct 3 17:04:21 2006
+--- src/syntax.c Sun Oct 29 20:21:27 2006
+***************
+*** 6072,6078 ****
+--- 6072,6082 ----
+ ++level;
+ }
+ if (level > wp->w_p_fdn)
++ {
+ level = wp->w_p_fdn;
++ if (level < 0)
++ level = 0;
++ }
+ return level;
+ }
+ #endif
+*** ../vim-7.0.153/src/version.c Mon Oct 30 22:31:30 2006
+--- src/version.c Wed Nov 1 12:41:14 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 154,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+134. You consider bandwidth to be more important than carats.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.155
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.155
+Problem: When getchar() returns a mouse button click there is no way to get
+ the mouse coordinates.
+Solution: Add v:mouse_win, v:mouse_lnum and v:mouse_col.
+Files: runtime/doc/eval.txt, src/eval.c, src/vim.h
+
+
+*** ../vim-7.0.154/runtime/doc/eval.txt Tue Oct 3 14:43:31 2006
+--- runtime/doc/eval.txt Wed Nov 1 15:20:42 2006
+***************
+*** 1,4 ****
+! *eval.txt* For Vim version 7.0. Last change: 2006 Sep 22
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt* For Vim version 7.0. Last change: 2006 Nov 01
+
+
+ VIM REFERENCE MANUAL by Bram Moolenaar
+***************
+*** 1374,1379 ****
+--- 1380,1400 ----
+ 'guitabtooltip'. Only valid while one of these expressions is
+ being evaluated. Read-only when in the |sandbox|.
+
++ *v:mouse_win* *mouse_win-variable*
++ v:mouse_win Window number for a mouse click obtained with |getchar()|.
++ First window has number 1, like with |winnr()|. The value is
++ zero when there was no mouse button click.
++
++ *v:mouse_lnum* *mouse_lnum-variable*
++ v:mouse_lnum Line number for a mouse click obtained with |getchar()|.
++ This is the text line number, not the screen line number. The
++ value is zero when there was no mouse button click.
++
++ *v:mouse_col* *mouse_col-variable*
++ v:mouse_col Column number for a mouse click obtained with |getchar()|.
++ 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
+***************
+*** 2702,2707 ****
+--- 2728,2744 ----
+ one-byte character it is the character itself as a number.
+ Use nr2char() to convert it to a String.
+
++ When the user clicks a mouse button, the mouse event will be
++ returned. The position can then be found in |v:mouse_col|,
++ |v:mouse_lnum| and |v:mouse_win|. This example positions the
++ mouse as it would normally happen: >
++ let c = getchar()
++ if c == "\<LeftMouse>" && v:mouse_win > 0
++ exe v:mouse_win . "wincmd w"
++ exe v:mouse_lnum
++ exe "normal " . v:mouse_col . "|"
++ endif
++ <
+ There is no prompt, you will somehow have to make clear to the
+ user that a character has to be typed.
+ There is no mapping for the character.
+*** ../vim-7.0.154/src/eval.c Tue Oct 24 13:51:47 2006
+--- src/eval.c Wed Nov 1 13:39:52 2006
+***************
+*** 343,348 ****
+--- 342,350 ----
+ {VV_NAME("swapchoice", VAR_STRING), 0},
+ {VV_NAME("swapcommand", VAR_STRING), VV_RO},
+ {VV_NAME("char", VAR_STRING), VV_RO},
++ {VV_NAME("mouse_win", VAR_NUMBER), 0},
++ {VV_NAME("mouse_lnum", VAR_NUMBER), 0},
++ {VV_NAME("mouse_col", VAR_NUMBER), 0},
+ };
+
+ /* shorthand */
+***************
+*** 9855,9860 ****
+--- 9857,9866 ----
+ --no_mapping;
+ --allow_keys;
+
++ vimvars[VV_MOUSE_WIN].vv_nr = 0;
++ vimvars[VV_MOUSE_LNUM].vv_nr = 0;
++ vimvars[VV_MOUSE_COL].vv_nr = 0;
++
+ rettv->vval.v_number = n;
+ if (IS_SPECIAL(n) || mod_mask != 0)
+ {
+***************
+*** 9883,9888 ****
+--- 9889,9941 ----
+ temp[i++] = NUL;
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = vim_strsave(temp);
++
++ #ifdef FEAT_MOUSE
++ if (n == K_LEFTMOUSE
++ || n == K_LEFTMOUSE_NM
++ || n == K_LEFTDRAG
++ || n == K_LEFTRELEASE
++ || n == K_LEFTRELEASE_NM
++ || n == K_MIDDLEMOUSE
++ || n == K_MIDDLEDRAG
++ || n == K_MIDDLERELEASE
++ || n == K_RIGHTMOUSE
++ || n == K_RIGHTDRAG
++ || n == K_RIGHTRELEASE
++ || n == K_X1MOUSE
++ || n == K_X1DRAG
++ || n == K_X1RELEASE
++ || n == K_X2MOUSE
++ || n == K_X2DRAG
++ || n == K_X2RELEASE
++ || n == K_MOUSEDOWN
++ || n == K_MOUSEUP)
++ {
++ int row = mouse_row;
++ int col = mouse_col;
++ win_T *win;
++ linenr_T lnum;
++ # ifdef FEAT_WINDOWS
++ win_T *wp;
++ # endif
++ int n = 1;
++
++ if (row >= 0 && col >= 0)
++ {
++ /* Find the window at the mouse coordinates and compute the
++ * text position. */
++ win = mouse_find_win(&row, &col);
++ (void)mouse_comp_pos(win, &row, &col, &lnum);
++ # ifdef FEAT_WINDOWS
++ for (wp = firstwin; wp != win; wp = wp->w_next)
++ ++n;
++ # endif
++ vimvars[VV_MOUSE_WIN].vv_nr = n;
++ vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
++ vimvars[VV_MOUSE_COL].vv_nr = col + 1;
++ }
++ }
++ #endif
+ }
+ }
+
+*** ../vim-7.0.154/src/vim.h Tue Aug 29 18:16:37 2006
+--- src/vim.h Wed Nov 1 13:11:16 2006
+***************
+*** 1669,1675 ****
+ #define VV_SWAPCHOICE 46
+ #define VV_SWAPCOMMAND 47
+ #define VV_CHAR 48
+! #define VV_LEN 49 /* number of v: vars */
+
+ #ifdef FEAT_CLIPBOARD
+
+--- 1669,1678 ----
+ #define VV_SWAPCHOICE 46
+ #define VV_SWAPCOMMAND 47
+ #define VV_CHAR 48
+! #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
+
+*** ../vim-7.0.154/src/version.c Wed Nov 1 12:43:07 2006
+--- src/version.c Wed Nov 1 15:22:33 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 155,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+138. You develop a liking for cold coffee.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.157
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.157
+Problem: When a function is used recursively the profiling information is
+ invalid. (Mikolaj Machowski)
+Solution: Put the start time on the stack instead of in the function.
+Files: src/eval.c
+
+
+*** ../vim-7.0.156/src/eval.c Wed Nov 1 15:31:02 2006
+--- src/eval.c Wed Nov 1 13:39:52 2006
+***************
+*** 166,172 ****
+ int uf_tm_count; /* nr of calls */
+ proftime_T uf_tm_total; /* time spend in function + children */
+ proftime_T uf_tm_self; /* time spend in function itself */
+- proftime_T uf_tm_start; /* time at function call */
+ proftime_T uf_tm_children; /* time spent in children this call */
+ /* profiling the function per line */
+ int *uf_tml_count; /* nr of times line was executed */
+--- 166,171 ----
+***************
+*** 19764,19769 ****
+--- 19763,19769 ----
+ char_u *name;
+ #ifdef FEAT_PROFILE
+ proftime_T wait_start;
++ proftime_T call_start;
+ #endif
+
+ /* If depth of calling is getting too high, don't execute the function */
+***************
+*** 19943,19949 ****
+ || (fc.caller != NULL && &fc.caller->func->uf_profiling))
+ {
+ ++fp->uf_tm_count;
+! profile_start(&fp->uf_tm_start);
+ profile_zero(&fp->uf_tm_children);
+ }
+ script_prof_save(&wait_start);
+--- 19943,19949 ----
+ || (fc.caller != NULL && &fc.caller->func->uf_profiling))
+ {
+ ++fp->uf_tm_count;
+! profile_start(&call_start);
+ profile_zero(&fp->uf_tm_children);
+ }
+ script_prof_save(&wait_start);
+***************
+*** 19973,19986 ****
+ if (do_profiling == PROF_YES && (fp->uf_profiling
+ || (fc.caller != NULL && &fc.caller->func->uf_profiling)))
+ {
+! profile_end(&fp->uf_tm_start);
+! profile_sub_wait(&wait_start, &fp->uf_tm_start);
+! profile_add(&fp->uf_tm_total, &fp->uf_tm_start);
+! profile_self(&fp->uf_tm_self, &fp->uf_tm_start, &fp->uf_tm_children);
+ if (fc.caller != NULL && &fc.caller->func->uf_profiling)
+ {
+! profile_add(&fc.caller->func->uf_tm_children, &fp->uf_tm_start);
+! profile_add(&fc.caller->func->uf_tml_children, &fp->uf_tm_start);
+ }
+ }
+ #endif
+--- 19973,19986 ----
+ if (do_profiling == PROF_YES && (fp->uf_profiling
+ || (fc.caller != NULL && &fc.caller->func->uf_profiling)))
+ {
+! profile_end(&call_start);
+! profile_sub_wait(&wait_start, &call_start);
+! profile_add(&fp->uf_tm_total, &call_start);
+! profile_self(&fp->uf_tm_self, &call_start, &fp->uf_tm_children);
+ if (fc.caller != NULL && &fc.caller->func->uf_profiling)
+ {
+! profile_add(&fc.caller->func->uf_tm_children, &call_start);
+! profile_add(&fc.caller->func->uf_tml_children, &call_start);
+ }
+ }
+ #endif
+*** ../vim-7.0.156/src/version.c Wed Nov 1 18:10:36 2006
+--- src/version.c Wed Nov 1 18:32:42 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 157,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+140. You'd rather catch a score on the web than watch the game as
+ it is being played on tv.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--- /dev/null
+To: vim-dev@vim.org
+Subject: Patch 7.0.158
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.0.158
+Problem: In a C file with ":set foldmethod=syntax", typing {<CR> on the
+ last line results in the cursor being in a closed fold. (Gautam
+ Iyer)
+Solution: Open fold after inserting a new line.
+Files: src/edit.c
+
+
+*** ../vim-7.0.157/src/edit.c Tue Oct 17 13:39:36 2006
+--- src/edit.c Wed Nov 1 21:17:19 2006
+***************
+*** 9204,9209 ****
+--- 9204,9213 ----
+ #ifdef FEAT_CINDENT
+ can_cindent = TRUE;
+ #endif
++ #ifdef FEAT_FOLDING
++ /* When inserting a line the cursor line must never be in a closed fold. */
++ foldOpenCursor();
++ #endif
+
+ return (!i);
+ }
+*** ../vim-7.0.157/src/version.c Wed Nov 1 18:33:43 2006
+--- src/version.c Wed Nov 1 21:21:22 2006
+***************
+*** 668,669 ****
+--- 668,671 ----
+ { /* Add new patch number below this line */
++ /**/
++ 158,
+ /**/
+
+--
+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 ///
--- /dev/null
+diff -cr vim70.orig/src/getchar.c vim70/src/getchar.c
+*** vim70.orig/src/getchar.c 2006-09-12 21:47:30.000000000 -0400
+--- vim70/src/getchar.c 2006-09-12 21:53:35.000000000 -0400
+***************
+*** 1495,1500 ****
+--- 1495,1507 ----
+ int
+ vgetc()
+ {
++ static time_t last_call = 0;
++ static int cps = 0;
++ char_u sPaste[] = "paste";
++ time_t now;
++ if (p_apa)
++ now = time(NULL);
++
+ int c, c2;
+ #ifdef FEAT_MBYTE
+ int n;
+***************
+*** 1502,1507 ****
+--- 1509,1527 ----
+ int i;
+ #endif
+
++ if (p_apa && !p_paste) {
++ if (last_call == now)
++ ++cps;
++ else
++ cps = 0;
++ if (cps >= 30) {
++ cps = 0;
++ do_set(&sPaste, 0);
++ showmode();
++ }
++ last_call = now;
++ }
++
+ /*
+ * If a character was put back with vungetc, it was already processed.
+ * Return it directly.
+diff -cr vim70.orig/src/option.c vim70/src/option.c
+*** vim70.orig/src/option.c 2006-09-12 21:47:30.000000000 -0400
+--- vim70/src/option.c 2006-09-12 21:54:07.000000000 -0400
+***************
+*** 529,534 ****
+--- 529,537 ----
+ {"autoindent", "ai", P_BOOL|P_VI_DEF,
+ (char_u *)&p_ai, PV_AI,
+ {(char_u *)FALSE, (char_u *)0L}},
++ {"autopaste", "apa", P_BOOL|P_VI_DEF,
++ (char_u *)&p_apa, PV_NONE,
++ {(char_u *)FALSE, (char_u *)0L}},
+ {"autoprint", "ap", P_BOOL|P_VI_DEF,
+ (char_u *)NULL, PV_NONE,
+ {(char_u *)FALSE, (char_u *)0L}},
+diff -cr vim70.orig/src/option.h vim70/src/option.h
+*** vim70.orig/src/option.h 2006-09-12 21:47:30.000000000 -0400
+--- vim70/src/option.h 2006-09-12 21:54:23.000000000 -0400
+***************
+*** 312,317 ****
+--- 312,318 ----
+ #if defined(FEAT_GUI) && defined(MACOS_X)
+ EXTERN int *p_antialias; /* 'antialias' */
+ #endif
++ EXTERN int p_apa; /* 'autopaste' */
+ EXTERN int p_ar; /* 'autoread' */
+ EXTERN int p_aw; /* 'autowrite' */
+ EXTERN int p_awa; /* 'autowriteall' */