summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-editors/vim/files/6.0.030')
-rw-r--r--app-editors/vim/files/6.0.030382
1 files changed, 382 insertions, 0 deletions
diff --git a/app-editors/vim/files/6.0.030 b/app-editors/vim/files/6.0.030
new file mode 100644
index 000000000000..1655e1c3108a
--- /dev/null
+++ b/app-editors/vim/files/6.0.030
@@ -0,0 +1,382 @@
+To: vim-dev@vim.org
+Subject: Patch 6.0.030
+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 6.0.030
+Problem: Using ":source! file" doesn't work inside a loop or after
+ ":argdo". (Pavol Juhas)
+Solution: Execute the commands in the file right away, do not let the main
+ loop do it.
+Files: src/ex_cmds2.c, src/ex_docmd.c, src/getchar.c, src/globals.h,
+ src/proto/ex_docmd.pro, src/proto/getchar.pro
+
+
+*** ../vim60.29/src/ex_cmds2.c Tue Sep 25 14:18:04 2001
+--- src/ex_cmds2.c Thu Oct 25 10:08:24 2001
+***************
+*** 14,20 ****
+ #include "vim.h"
+ #include "version.h"
+
+! static void cmd_source __ARGS((char_u *fname, int forceit));
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+
+--- 14,20 ----
+ #include "vim.h"
+ #include "version.h"
+
+! static void cmd_source __ARGS((char_u *fname, exarg_T *eap));
+
+ #if defined(FEAT_EVAL) || defined(PROTO)
+
+***************
+*** 1454,1461 ****
+--- 1454,1463 ----
+ #endif
+
+ /* execute the command */
++ listcmd_busy = TRUE;
+ do_cmdline(eap->arg, eap->getline, eap->cookie,
+ DOCMD_VERBOSE + DOCMD_NOWAIT);
++ listcmd_busy = FALSE;
+
+ if (eap->cmdidx == CMD_bufdo)
+ {
+***************
+*** 1693,1699 ****
+ ex_options(eap)
+ exarg_T *eap;
+ {
+! cmd_source((char_u *)SYS_OPTWIN_FILE, FALSE);
+ }
+ #endif
+
+--- 1695,1701 ----
+ ex_options(eap)
+ exarg_T *eap;
+ {
+! cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
+ }
+ #endif
+
+***************
+*** 1713,1737 ****
+ NULL, NULL, eap->arg, BROWSE_FILTER_MACROS, curbuf);
+ if (fname != NULL)
+ {
+! cmd_source(fname, eap->forceit);
+ vim_free(fname);
+ }
+ }
+ else
+ #endif
+! cmd_source(eap->arg, eap->forceit);
+ }
+
+ static void
+! cmd_source(fname, forceit)
+ char_u *fname;
+! int forceit;
+ {
+ if (*fname == NUL)
+ EMSG(_(e_argreq));
+! else if (forceit) /* :so! read vi commands */
+! (void)openscript(fname);
+! /* :so read ex commands */
+ else if (do_source(fname, FALSE, FALSE) == FAIL)
+ EMSG2(_(e_notopen), fname);
+ }
+--- 1715,1752 ----
+ NULL, NULL, eap->arg, BROWSE_FILTER_MACROS, curbuf);
+ if (fname != NULL)
+ {
+! cmd_source(fname, eap);
+ vim_free(fname);
+ }
+ }
+ else
+ #endif
+! cmd_source(eap->arg, eap);
+ }
+
+ static void
+! cmd_source(fname, eap)
+ char_u *fname;
+! exarg_T *eap;
+ {
+ if (*fname == NUL)
+ EMSG(_(e_argreq));
+!
+! /* ":source!" read vi commands */
+! else if (eap != NULL && eap->forceit)
+! /* Need to execute the commands directly when:
+! * - ":g" command busy
+! * - after ":argdo", ":windo" or ":bufdo"
+! * - another command follows
+! * - inside a loop
+! */
+! openscript(fname, global_busy || listcmd_busy || eap->nextcmd != NULL
+! #ifdef FEAT_EVAL
+! || eap->cstack->cs_idx >= 0
+! #endif
+! );
+!
+! /* ":source" read ex commands */
+ else if (do_source(fname, FALSE, FALSE) == FAIL)
+ EMSG2(_(e_notopen), fname);
+ }
+*** ../vim60.29/src/ex_docmd.c Fri Oct 19 11:18:45 2001
+--- src/ex_docmd.c Sat Oct 20 16:53:27 2001
+***************
+*** 276,282 ****
+ #endif
+ #ifdef FEAT_EX_EXTRA
+ static void ex_normal __ARGS((exarg_T *eap));
+- static void update_topline_cursor __ARGS((void));
+ static void ex_startinsert __ARGS((exarg_T *eap));
+ #else
+ # define ex_normal ex_ni
+--- 276,281 ----
+***************
+*** 6777,6782 ****
+--- 6776,6794 ----
+ }
+ }
+
++ /*
++ * Update w_topline, w_leftcol and the cursor position.
++ */
++ void
++ update_topline_cursor()
++ {
++ check_cursor(); /* put cursor on valid line */
++ update_topline();
++ if (!curwin->w_p_wrap)
++ validate_cursor();
++ update_curswant();
++ }
++
+ #ifdef FEAT_EX_EXTRA
+ /*
+ * ":normal[!] {commands}": Execute normal mode commands.
+***************
+*** 6937,6955 ****
+ #ifdef FEAT_MBYTE
+ vim_free(arg);
+ #endif
+- }
+-
+- /*
+- * Update w_topline, w_leftcol and the cursor position.
+- */
+- static void
+- update_topline_cursor()
+- {
+- check_cursor(); /* put cursor on valid line */
+- update_topline();
+- if (!curwin->w_p_wrap)
+- validate_cursor();
+- update_curswant();
+ }
+
+ /*
+--- 6949,6954 ----
+*** ../vim60.29/src/getchar.c Sun Sep 16 14:38:55 2001
+--- src/getchar.c Sat Oct 20 18:07:04 2001
+***************
+*** 1224,1244 ****
+ }
+
+ /*
+! * open new script file for ":so!" command
+! * return OK on success, FAIL on error
+ */
+! int
+! openscript(name)
+! char_u *name;
+ {
+- int oldcurscript;
+- oparg_T oa;
+- int save_State;
+-
+ if (curscript + 1 == NSCRIPT)
+ {
+ EMSG(_(e_nesting));
+! return FAIL;
+ }
+
+ if (scriptin[curscript] != NULL) /* already reading script */
+--- 1224,1240 ----
+ }
+
+ /*
+! * Open a new script file for the ":source!" command.
+ */
+! void
+! openscript(name, directly)
+! char_u *name;
+! int directly; /* when TRUE execute directly */
+ {
+ if (curscript + 1 == NSCRIPT)
+ {
+ EMSG(_(e_nesting));
+! return;
+ }
+
+ if (scriptin[curscript] != NULL) /* already reading script */
+***************
+*** 1250,1281 ****
+ EMSG2(_(e_notopen), name);
+ if (curscript)
+ --curscript;
+! return FAIL;
+ }
+ if (save_typebuf() == FAIL)
+! return FAIL;
+
+ /*
+! * With command ":g/pat/so! file" we have to execute the
+! * commands from the file now.
+ */
+! if (global_busy)
+ {
+! clear_oparg(&oa);
+! save_State = State;
+ State = NORMAL;
+ oldcurscript = curscript;
+ do
+ {
+! check_cursor(); /* put cursor on an existing line */
+! normal_cmd(&oa, FALSE);
+! vpeekc(); /* check for end of file */
+ }
+ while (scriptin[oldcurscript] != NULL);
+ State = save_State;
+ }
+-
+- return OK;
+ }
+
+ /*
+--- 1246,1294 ----
+ EMSG2(_(e_notopen), name);
+ if (curscript)
+ --curscript;
+! return;
+ }
+ if (save_typebuf() == FAIL)
+! return;
+
+ /*
+! * Execute the commands from the file right now when using ":source!"
+! * after ":global" or ":argdo" or in a loop. Also when another command
+! * follows. This means the display won't be updated. Don't do this
+! * always, "make test" would fail.
+ */
+! if (directly)
+ {
+! oparg_T oa;
+! int oldcurscript;
+! int save_State = State;
+! int save_restart_edit = restart_edit;
+! int save_insertmode = p_im;
+! int save_finish_op = finish_op;
+! int save_msg_scroll = msg_scroll;
+!
+ State = NORMAL;
++ msg_scroll = FALSE; /* no msg scrolling in Normal mode */
++ restart_edit = 0; /* don't go to Insert mode */
++ p_im = FALSE; /* don't use 'insertmode' */
++ clear_oparg(&oa);
++ finish_op = FALSE;
++
+ oldcurscript = curscript;
+ do
+ {
+! update_topline_cursor(); /* update cursor position and topline */
+! normal_cmd(&oa, FALSE); /* execute one command */
+! vpeekc(); /* check for end of file */
+ }
+ while (scriptin[oldcurscript] != NULL);
++
+ State = save_State;
++ msg_scroll = save_msg_scroll;
++ restart_edit = save_restart_edit;
++ p_im = save_insertmode;
++ finish_op = save_finish_op;
+ }
+ }
+
+ /*
+*** ../vim60.29/src/globals.h Fri Sep 28 22:19:57 2001
+--- src/globals.h Sat Oct 20 17:49:38 2001
+***************
+*** 752,757 ****
+--- 752,759 ----
+ /* set after swap write error msg */
+ EXTERN int undo_off INIT(= FALSE); /* undo switched off for now */
+ EXTERN int global_busy INIT(= 0); /* set when :global is executing */
++ EXTERN int listcmd_busy INIT(= FALSE); /* set when :argdo, :windo or
++ :bufdo is executing */
+ EXTERN int need_start_insertmode INIT(= FALSE);
+ /* start insert mode soon */
+ EXTERN char_u *last_cmdline INIT(= NULL); /* last command line (for ":) */
+*** ../vim60.29/src/proto/ex_docmd.pro Tue Sep 25 21:49:13 2001
+--- src/proto/ex_docmd.pro Sat Oct 20 16:55:04 2001
+***************
+*** 29,34 ****
+--- 29,35 ----
+ void do_exedit __ARGS((exarg_T *eap, win_T *old_curwin));
+ void do_sleep __ARGS((long msec));
+ FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode));
++ void update_topline_cursor __ARGS((void));
+ char_u *eval_vars __ARGS((char_u *src, int *usedlen, linenr_T *lnump, char_u **errormsg, char_u *srcstart));
+ char_u *expand_sfile __ARGS((char_u *arg));
+ int put_eol __ARGS((FILE *fd));
+*** ../vim60.29/src/proto/getchar.pro Tue Sep 25 21:49:15 2001
+--- src/proto/getchar.pro Sat Oct 20 17:23:58 2001
+***************
+*** 26,32 ****
+ int alloc_typebuf __ARGS((void));
+ void free_typebuf __ARGS((void));
+ int save_typebuf __ARGS((void));
+! int openscript __ARGS((char_u *name));
+ int using_script __ARGS((void));
+ void updatescript __ARGS((int c));
+ int vgetc __ARGS((void));
+--- 26,32 ----
+ int alloc_typebuf __ARGS((void));
+ void free_typebuf __ARGS((void));
+ int save_typebuf __ARGS((void));
+! void openscript __ARGS((char_u *name, int directly));
+ int using_script __ARGS((void));
+ void updatescript __ARGS((int c));
+ int vgetc __ARGS((void));
+*** ../vim60.29/src/version.c Sun Oct 28 21:15:32 2001
+--- src/version.c Sun Oct 28 21:17:56 2001
+***************
+*** 608,609 ****
+--- 608,611 ----
+ { /* Add new patch number below this line */
++ /**/
++ 30,
+ /**/
+
+--
+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 \\\
+((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
+ \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///