diff options
Diffstat (limited to 'app-editors/vim/files/6.0.030')
-rw-r--r-- | app-editors/vim/files/6.0.030 | 382 |
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 /// |