diff options
author | Bram Moolenaar <Bram@vim.org> | 2004-12-24 14:35:23 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2004-12-24 14:35:23 +0000 |
commit | b5bf5b8fae9ff5e2f7704686efae2814be1e18f7 (patch) | |
tree | fcaa6e0f52dfd691d0c4796d34e402d46ce7c293 /src | |
parent | 1cd871b5341bf43ee99e136844e3131014880f92 (diff) | |
download | vim-b5bf5b8fae9ff5e2f7704686efae2814be1e18f7.zip |
updated for version 7.0024
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 138 | ||||
-rw-r--r-- | src/buffer.c | 3 | ||||
-rw-r--r-- | src/charset.c | 5 | ||||
-rw-r--r-- | src/ex_cmds.c | 22 | ||||
-rw-r--r-- | src/ex_cmds.h | 4 | ||||
-rw-r--r-- | src/ex_cmds2.c | 2 | ||||
-rw-r--r-- | src/ex_docmd.c | 7 | ||||
-rw-r--r-- | src/fileio.c | 189 | ||||
-rw-r--r-- | src/gui_gtk.c | 10 | ||||
-rwxr-xr-x | src/installman.sh | 108 | ||||
-rw-r--r-- | src/installml.sh | 162 | ||||
-rw-r--r-- | src/main.c | 6 | ||||
-rw-r--r-- | src/normal.c | 6 | ||||
-rw-r--r-- | src/option.c | 44 | ||||
-rw-r--r-- | src/option.h | 3 | ||||
-rw-r--r-- | src/proto/ex_cmds.pro | 2 | ||||
-rw-r--r-- | src/proto/fileio.pro | 3 | ||||
-rw-r--r-- | src/screen.c | 11 | ||||
-rw-r--r-- | src/structs.h | 4 | ||||
-rw-r--r-- | src/tag.c | 2 | ||||
-rw-r--r-- | src/testdir/Make_amiga.mak | 3 | ||||
-rw-r--r-- | src/testdir/Make_dos.mak | 2 | ||||
-rw-r--r-- | src/testdir/Make_os2.mak | 2 | ||||
-rw-r--r-- | src/testdir/Make_vms.mms | 4 | ||||
-rw-r--r-- | src/testdir/Makefile | 3 | ||||
-rw-r--r-- | src/testdir/test54.in | 17 | ||||
-rw-r--r-- | src/testdir/test54.ok | 1 | ||||
-rw-r--r-- | src/version.h | 4 |
28 files changed, 616 insertions, 151 deletions
diff --git a/src/Makefile b/src/Makefile index 72f0cb8b0..4a676c240 100644 --- a/src/Makefile +++ b/src/Makefile @@ -122,7 +122,7 @@ # make installruntime only installs the Vim help and # runtime files # make installlinks only installs the Vim binary links -# make installhelplinks only installs the Vim manpage links +# make installmanlinks only installs the Vim manpage links # make installmacros only installs the Vim macros # make installtutor only installs the Vim tutor # make installtools only installs xxd @@ -848,8 +848,8 @@ TOOLS = xxd/xxd$(EXEEXT) # directories. This directory must exist. #DESTDIR = ~/pkg/vim -### Location of man pages -MANSUBDIR = $(MANDIR)/man1 +### Directory of the man pages +MAN1DIR = /man1 ### Vim version (adjusted by a script) VIMMAJOR = 7 @@ -1067,7 +1067,7 @@ KDE_LIBS1 = KDE_LIBS2 = KDE_INSTALL = install_normal KDE_TARGETS = installglinks installkdeicons -KDE_MAN_TARGETS = installghelplinks +KDE_MAN_TARGETS = yes KDE_TESTTARGET = gui ### GTK GUI @@ -1083,7 +1083,7 @@ GTK_LIBS1 = GTK_LIBS2 = $(GTK_LIBNAME) GTK_INSTALL = install_normal GTK_TARGETS = installglinks -GTK_MAN_TARGETS = installghelplinks +GTK_MAN_TARGETS = yes GTK_TESTTARGET = gui ### Motif GUI @@ -1097,7 +1097,7 @@ MOTIF_LIBS1 = MOTIF_LIBS2 = $(MOTIF_LIBNAME) -lXt MOTIF_INSTALL = install_normal MOTIF_TARGETS = installglinks -MOTIF_MAN_TARGETS = installghelplinks +MOTIF_MAN_TARGETS = yes MOTIF_TESTTARGET = gui ### Athena GUI @@ -1126,7 +1126,7 @@ ATHENA_LIBS1 = $(XAW_LIB) ATHENA_LIBS2 = -lXt ATHENA_INSTALL = install_normal ATHENA_TARGETS = installglinks -ATHENA_MAN_TARGETS = installghelplinks +ATHENA_MAN_TARGETS = yes ATHENA_TESTTARGET = gui ### neXtaw GUI @@ -1143,7 +1143,7 @@ NEXTAW_LIBS1 = $(NEXTAW_LIB) NEXTAW_LIBS2 = -lXt NEXTAW_INSTALL = install_normal NEXTAW_TARGETS = installglinks -NEXTAW_MAN_TARGETS = installghelplinks +NEXTAW_MAN_TARGETS = yes NEXTAW_TESTTARGET = gui ### (J) Sun OpenWindows 3.2 (SunOS 4.1.x) or earlier that produce these ld @@ -1167,7 +1167,7 @@ BEOSGUI_LIBS1 = -lbe -lroot BEOSGUI_LIBS2 = BEOSGUI_INSTALL = install_normal BEOSGUI_TARGETS = installglinks -BEOSGUI_MAN_TARGETS = installghelplinks +BEOSGUI_MAN_TARGETS = yes BEOSGUI_TESTTARGET = gui # PHOTON GUI @@ -1180,7 +1180,7 @@ PHOTONGUI_LIBS1 = -lph -lphexlib PHOTONGUI_LIBS2 = PHOTONGUI_INSTALL = install_normal PHOTONGUI_TARGETS = installglinks -PHOTONGUI_MAN_TARGETS = installghelplinks +PHOTONGUI_MAN_TARGETS = yes PHOTONGUI_TESTTARGET = gui # CARBON GUI @@ -1277,7 +1277,9 @@ DEST_TOOLS = $(DESTDIR)$(TOOLSSUBLOC) DEST_TUTOR = $(DESTDIR)$(TUTORSUBLOC) DEST_SCRIPT = $(DESTDIR)$(SCRIPTLOC) DEST_PRINT = $(DESTDIR)$(PRINTSUBLOC) -DEST_MAN = $(DESTDIR)$(MANSUBDIR) +DEST_MAN_TOP = $(DESTDIR)$(MANDIR) +DEST_MAN = $(DEST_MAN_TOP)$(MAN1DIR) +DEST_MAN_IT = $(DEST_MAN_TOP)/it$(MAN1DIR) # BASIC_SRC: files that are always used # GUI_SRC: extra GUI files for current configuration @@ -1661,7 +1663,7 @@ install: $(GUI_INSTALL) install_normal: installvim installtools install-languages install-icons -installvim: installvimbin installruntime installlinks installhelplinks installmacros installtutor +installvim: installvimbin installruntime installlinks installmanlinks installmacros installtutor installvimbin: $(VIMTARGET) $(DESTDIR)$(exec_prefix) $(DEST_BIN) -if test -f $(DEST_BIN)/$(VIMTARGET); then \ @@ -1674,37 +1676,16 @@ installvimbin: $(VIMTARGET) $(DESTDIR)$(exec_prefix) $(DEST_BIN) # may create a link to the new executable from /usr/bin/vi -$(LINKIT) -# install the help files; first adjust the contents for the location -installruntime: $(HELPSOURCE)/vim.1 $(DEST_MAN) $(DEST_VIM) $(DEST_RT) \ +# Long list of arguments for the shell script that installs the manual pages +# for one language. +INSTALLMANARGS = $(VIMLOC) $(SCRIPTLOC) $(VIMRCLOC) $(HELPSOURCE) $(MANMOD) \ + $(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME) + +# install the help files; first adjust the contents for the final location +installruntime: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \ $(DEST_HELP) $(DEST_PRINT) $(DEST_COL) $(DEST_SYN) $(DEST_IND) \ $(DEST_FTP) $(DEST_PLUG) $(DEST_TUTOR) $(DEST_COMP) - @echo generating $(DEST_MAN)/$(VIMNAME).1 - @sed -e s+/usr/local/lib/vim+$(VIMLOC)+ \ - -e s+$(VIMLOC)/doc+$(HELPSUBLOC)+ \ - -e s+$(VIMLOC)/syntax+$(SYNSUBLOC)+ \ - -e s+$(VIMLOC)/tutor+$(TUTORSUBLOC)+ \ - -e s+$(VIMLOC)/vimrc+$(VIMRCLOC)/vimrc+ \ - -e s+$(VIMLOC)/gvimrc+$(VIMRCLOC)/gvimrc+ \ - -e s+$(VIMLOC)/menu.vim+$(SCRIPTLOC)/menu.vim+ \ - -e s+$(VIMLOC)/bugreport.vim+$(SCRIPTLOC)/bugreport.vim+ \ - -e s+$(VIMLOC)/filetype.vim+$(SCRIPTLOC)/filetype.vim+ \ - -e s+$(VIMLOC)/ftoff.vim+$(SCRIPTLOC)/ftoff.vim+ \ - -e s+$(VIMLOC)/scripts.vim+$(SCRIPTLOC)/scripts.vim+ \ - -e s+$(VIMLOC)/optwin.vim+$(SCRIPTLOC)/optwin.vim+ \ - -e 's+$(VIMLOC)/\*.ps+$(SCRIPTLOC)/\*.ps+' \ - $(HELPSOURCE)/vim.1 > $(DEST_MAN)/$(VIMNAME).1 - chmod $(MANMOD) $(DEST_MAN)/$(VIMNAME).1 - @echo generating $(DEST_MAN)/$(VIMNAME)tutor.1 - @sed -e s+/usr/local/lib/vim+$(VIMLOC)+ \ - -e s+$(VIMLOC)/tutor+$(TUTORSUBLOC)+ \ - $(HELPSOURCE)/vimtutor.1 > $(DEST_MAN)/$(VIMNAME)tutor.1 - chmod $(MANMOD) $(DEST_MAN)/$(VIMNAME)tutor.1 - $(INSTALL_DATA) $(HELPSOURCE)/vimdiff.1 $(DEST_MAN)/$(VIMDIFFNAME).1 - chmod $(MANMOD) $(DEST_MAN)/$(VIMDIFFNAME).1 - @echo generating $(DEST_MAN)/$(EVIMNAME).1 - @sed -e s+/usr/local/lib/vim+$(SCRIPTLOC)+ \ - $(HELPSOURCE)/evim.1 > $(DEST_MAN)/$(EVIMNAME).1 - chmod $(MANMOD) $(DEST_MAN)/$(EVIMNAME).1 + -$(SHELL) ./installman.sh install $(DEST_MAN) "" $(INSTALLMANARGS) @echo generating help tags # Generate the help tags with ":helptags" to handle all languages. -@cd $(HELPSOURCE); $(MAKE) VIMEXE=$(DEST_BIN)/$(VIMTARGET) vimtags @@ -1794,7 +1775,7 @@ installtutor: $(TUTORSOURCE) $(DEST_VIM) $(DEST_RT) $(DEST_TUTOR) chmod $(HELPMOD) $(DEST_TUTOR)/* # install helper program xxd -installtools: $(TOOLS) $(DESTDIR)$(exec_prefix) $(DEST_BIN) $(DEST_MAN) \ +installtools: $(TOOLS) $(DESTDIR)$(exec_prefix) $(DEST_BIN) \ $(TOOLSSOURCE) $(DEST_VIM) $(DEST_RT) $(DEST_TOOLS) if test -f $(DEST_BIN)/xxd$(EXEEXT); then \ mv -f $(DEST_BIN)/xxd$(EXEEXT) $(DEST_BIN)/xxd.rm; \ @@ -1803,8 +1784,8 @@ installtools: $(TOOLS) $(DESTDIR)$(exec_prefix) $(DEST_BIN) $(DEST_MAN) \ $(INSTALL_PROG) xxd/xxd$(EXEEXT) $(DEST_BIN) $(STRIP) $(DEST_BIN)/xxd$(EXEEXT) chmod $(BINMOD) $(DEST_BIN)/xxd$(EXEEXT) - $(INSTALL_DATA) $(HELPSOURCE)/xxd.1 $(DEST_MAN) - chmod $(MANMOD) $(DEST_MAN)/xxd.1 + -$(SHELL) ./installman.sh xxd $(DEST_MAN) "" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh xxd $(DEST_MAN_IT) "-it" $(INSTALLMANARGS) # install the runtime tools $(INSTALL_DATA_R) $(TOOLSSOURCE)/* $(DEST_TOOLS) # When using CVS some CVS directories might have been copied. @@ -1822,6 +1803,9 @@ installtools: $(TOOLS) $(DESTDIR)$(exec_prefix) $(DEST_BIN) $(DEST_MAN) \ # install the language specific files, if they were unpacked install-languages: languages $(DEST_LANG) $(DEST_KMAP) + -$(SHELL) ./installman.sh install $(DEST_MAN_IT) "-it" $(INSTALLMANARGS) + -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_IT) $(INSTALLMLARGS) if test -n "$(MAKEMO)" -a -f $(PODIR)/Makefile; then \ cd $(PODIR); $(MAKE) prefix=$(DESTDIR)$(prefix) LOCALEDIR=$(DEST_LANG) \ INSTALL_DATA=$(INSTALL_DATA) FILEMOD=$(FILEMOD) install; \ @@ -1877,7 +1861,8 @@ $(HELPSOURCE)/vim.1 $(MACROSOURCE) $(TOOLSSOURCE): @echo You need to unpack the runtime archive before running "make install". test -f error -$(DESTDIR)$(exec_prefix) $(DEST_BIN) $(DEST_MAN) $(DEST_VIM) $(DEST_RT) $(DEST_HELP) \ +$(DESTDIR)$(exec_prefix) $(DEST_BIN) \ + $(DEST_VIM) $(DEST_RT) $(DEST_HELP) \ $(DEST_PRINT) $(DEST_COL) $(DEST_SYN) $(DEST_IND) $(DEST_FTP) \ $(DEST_LANG) $(DEST_KMAP) $(DEST_COMP) \ $(DEST_MACRO) $(DEST_TOOLS) $(DEST_TUTOR) $(DEST_PLUG): @@ -1942,69 +1927,36 @@ $(DEST_BIN)/$(EVIEWTARGET): # create links for the manual pages with various names to vim. This is only # done when the links (or manpages with the same name) don't exist yet. -installhelplinks: $(GUI_MAN_TARGETS) \ - $(DEST_MAN)/$(EXNAME).1 \ - $(DEST_MAN)/$(VIEWNAME).1 \ - $(DEST_MAN)/$(RVIMNAME).1 \ - $(DEST_MAN)/$(RVIEWNAME).1 - -installghelplinks: $(DEST_MAN)/$(GVIMNAME).1 \ - $(DEST_MAN)/$(GVIEWNAME).1 \ - $(DEST_MAN)/$(RGVIMNAME).1 \ - $(DEST_MAN)/$(RGVIEWNAME).1 \ - $(DEST_MAN)/$(GVIMDIFFNAME).1 \ - $(DEST_MAN)/$(EVIEWNAME).1 - -$(DEST_MAN)/$(EXNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(EXNAME).1 - -$(DEST_MAN)/$(VIEWNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(VIEWNAME).1 - -$(DEST_MAN)/$(GVIMNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(GVIMNAME).1 - -$(DEST_MAN)/$(GVIEWNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(GVIEWNAME).1 - -$(DEST_MAN)/$(RVIMNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(RVIMNAME).1 - -$(DEST_MAN)/$(RVIEWNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(RVIEWNAME).1 - -$(DEST_MAN)/$(RGVIMNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(RGVIMNAME).1 - -$(DEST_MAN)/$(RGVIEWNAME).1: - cd $(DEST_MAN); ln -s $(VIMNAME).1 $(RGVIEWNAME).1 -$(DEST_MAN)/$(GVIMDIFFNAME).1: - cd $(DEST_MAN); ln -s $(VIMDIFFNAME).1 $(GVIMDIFFNAME).1 +INSTALLMLARGS = $(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME) \ + $(EXNAME) $(VIEWNAME) $(RVIMNAME) $(RVIEWNAME) \ + $(GVIMNAME) $(GVIEWNAME) $(RGVIMNAME) $(RGVIEWNAME) \ + $(GVIMDIFFNAME) $(EVIEWNAME) -$(DEST_MAN)/$(EVIEWNAME).1: - cd $(DEST_MAN); ln -s $(EVIMNAME).1 $(EVIEWNAME).1 +installmanlinks: + -$(SHELL) ./installml.sh install "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN) $(INSTALLMLARGS) uninstall: uninstall_runtime -rm -f $(DEST_BIN)/$(VIMTARGET) - -rm -f $(DEST_MAN)/$(VIMNAME).1 $(DEST_MAN)/$(VIMNAME)tutor.1 -rm -f $(DEST_BIN)/vimtutor - -rm -f $(DEST_BIN)/xxd$(EXEEXT) $(DEST_MAN)/xxd.1 -rm -f $(DEST_BIN)/$(EXTARGET) $(DEST_BIN)/$(VIEWTARGET) -rm -f $(DEST_BIN)/$(GVIMTARGET) $(DEST_BIN)/$(GVIEWTARGET) -rm -f $(DEST_BIN)/$(RVIMTARGET) $(DEST_BIN)/$(RVIEWTARGET) -rm -f $(DEST_BIN)/$(RGVIMTARGET) $(DEST_BIN)/$(RGVIEWTARGET) -rm -f $(DEST_BIN)/$(VIMDIFFTARGET) $(DEST_BIN)/$(GVIMDIFFTARGET) -rm -f $(DEST_BIN)/$(EVIMTARGET) $(DEST_BIN)/$(EVIEWTARGET) - -rm -f $(DEST_MAN)/$(EXNAME).1 $(DEST_MAN)/$(VIEWNAME).1 - -rm -f $(DEST_MAN)/$(GVIMNAME).1 $(DEST_MAN)/$(GVIEWNAME).1 - -rm -f $(DEST_MAN)/$(RVIMNAME).1 $(DEST_MAN)/$(RVIEWNAME).1 - -rm -f $(DEST_MAN)/$(RGVIMNAME).1 $(DEST_MAN)/$(RGVIEWNAME).1 - -rm -f $(DEST_MAN)/$(VIMDIFFNAME).1 $(DEST_MAN)/$(GVIMDIFFNAME).1 - -rm -f $(DEST_MAN)/$(EVIMNAME).1 $(DEST_MAN)/$(EVIEWNAME).1 + -rm -f $(DEST_BIN)/xxd$(EXEEXT) # Note: the "rmdir" will fail if any files were added after "make install" uninstall_runtime: + -$(SHELL) ./installman.sh uninstall $(DEST_MAN) "" $(INSTALLMANARGS) + -$(SHELL) ./installman.sh uninstall $(DEST_MAN_IT) "-it" $(INSTALLMANARGS) + -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN) $(INSTALLMLARGS) + -$(SHELL) ./installml.sh uninstall "$(GUI_MAN_TARGETS)" \ + $(DEST_MAN_IT) $(INSTALLMLARGS) + -rm -f $(DEST_MAN)/xxd.1 $(DEST_MAN_IT)/xxd.1 -rm -f $(DEST_HELP)/*.txt $(DEST_HELP)/tags $(DEST_HELP)/*.pl -rm -f $(DEST_HELP)/*.??x $(DEST_HELP)/tags-?? -rm -f $(SYS_MENU_FILE) $(SYS_SYNMENU_FILE) $(SYS_DELMENU_FILE) diff --git a/src/buffer.c b/src/buffer.c index 19dcb593d..4003b9c98 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -588,6 +588,9 @@ free_buffer(buf) #ifdef FEAT_RUBY ruby_buffer_free(buf); #endif +#ifdef FEAT_AUTOCMD + aubuflocal_remove(buf); +#endif vim_free(buf); } diff --git a/src/charset.c b/src/charset.c index 336eec624..4560a96d1 100644 --- a/src/charset.c +++ b/src/charset.c @@ -816,11 +816,8 @@ win_linetabsize(wp, p, len) colnr_T col = 0; char_u *s; - for (s = p; *s != NUL && (len == MAXCOL || s < p + len); ) - { + for (s = p; *s != NUL && (len == MAXCOL || s < p + len); mb_ptr_adv(s)) col += win_lbr_chartabsize(wp, s, col, NULL); - mb_ptr_adv(s); - } return (int)col; } diff --git a/src/ex_cmds.c b/src/ex_cmds.c index c78c64361..7a176e066 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -5216,6 +5216,28 @@ fix_help_buffer() } } +/* + * ":exusage" + */ +/*ARGSUSED*/ + void +ex_exusage(eap) + exarg_T *eap; +{ + do_cmdline_cmd((char_u *)"help ex-cmd-index"); +} + +/* + * ":viusage" + */ +/*ARGSUSED*/ + void +ex_viusage(eap) + exarg_T *eap; +{ + do_cmdline_cmd((char_u *)"help normal-index"); +} + #if defined(FEAT_EX_EXTRA) || defined(PROTO) static void helptags_one __ARGS((char_u *dir, char_u *ext, char_u *lang)); diff --git a/src/ex_cmds.h b/src/ex_cmds.h index 5d0f0819b..f59d0182e 100644 --- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -352,6 +352,8 @@ EX(CMD_execute, "execute", ex_execute, EXTRA|NOTRLCOM|SBOXOK|CMDWIN), EX(CMD_exit, "exit", ex_exit, RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN), +EX(CMD_exusage, "exusage", ex_exusage, + TRLBAR), EX(CMD_file, "file", ex_file, RANGE|NOTADR|ZEROR|BANG|FILE1|TRLBAR), EX(CMD_files, "files", buflist_list, @@ -836,6 +838,8 @@ EX(CMD_visual, "visual", ex_edit, BANG|FILE1|EDITCMD|ARGOPT|TRLBAR), EX(CMD_view, "view", ex_edit, BANG|FILE1|EDITCMD|ARGOPT|TRLBAR), +EX(CMD_viusage, "viusage", ex_viusage, + TRLBAR), EX(CMD_vmap, "vmap", ex_map, EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), EX(CMD_vmapclear, "vmapclear", ex_mapclear, diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index 6c919ff99..715bf99eb 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -2152,7 +2152,7 @@ static FILE *fopen_noinh_readbin __ARGS((char *filename)); fopen_noinh_readbin(filename) char *filename; { - int fd_tmp = open(filename, O_RDONLY | O_BINARY | O_NOINHERIT); + int fd_tmp = mch_open(filename, O_RDONLY | O_BINARY | O_NOINHERIT, 0); if (fd_tmp == -1) return NULL; diff --git a/src/ex_docmd.c b/src/ex_docmd.c index a668c999d..82f90ddf7 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3174,7 +3174,7 @@ set_one_cmd_context(xp, buff) xp->xp_pattern = skipwhite(arg); for (p = xp->xp_pattern; *p; ) { - if (*p == '\\' && p[1]) + if (*p == '\\' && p[1] != NUL) ++p; #ifdef SPACE_IN_FILENAME else if (vim_iswhite(*p) && (!(argt & NOSPC) || usefilter)) @@ -3440,7 +3440,10 @@ set_one_cmd_context(xp, buff) case CMD_tjump: case CMD_stjump: case CMD_ptjump: - xp->xp_context = EXPAND_TAGS; + if (*p_wop != NUL) + xp->xp_context = EXPAND_TAGS_LISTFILES; + else + xp->xp_context = EXPAND_TAGS; xp->xp_pattern = arg; break; case CMD_augroup: diff --git a/src/fileio.c b/src/fileio.c index d33718d12..98d9cffba 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -6590,6 +6590,7 @@ typedef struct AutoPat char last; /* last pattern for apply_autocmds() */ AutoCmd *cmds; /* list of commands to do */ struct AutoPat *next; /* next AutoPat in AutoPat list */ + int buflocal_nr; /* !=0 for buffer-local AutoPat */ } AutoPat; static struct event_name @@ -6686,8 +6687,13 @@ typedef struct AutoPatCmd char_u *sfname; /* sfname to match with */ char_u *tail; /* tail of fname */ EVENT_T event; /* current event */ + int arg_bufnr; /* initially equal to <abuf>, set to zero when + buf is deleted */ + struct AutoPatCmd *next; /* chain of active apc-s for auto-invalidation*/ } AutoPatCmd; +AutoPatCmd *active_apc_list = NULL; /* stack of active autocommands */ + /* * augroups stores a list of autocmd group names. */ @@ -6721,6 +6727,7 @@ static char_u *getnextac __ARGS((int c, void *cookie, int indent)); static int apply_autocmds_group __ARGS((EVENT_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap)); static void auto_next_pat __ARGS((AutoPatCmd *apc, int stop_at_last)); + static EVENT_T last_event; static int last_group; @@ -6795,6 +6802,7 @@ au_remove_pat(ap) { vim_free(ap->pat); ap->pat = NULL; + ap->buflocal_nr = -1; au_need_clean = TRUE; } @@ -6869,6 +6877,39 @@ au_cleanup() } /* + * Called when buffer is freed, to remove/invalidate related buffer-local + * autocmds. + */ + void +aubuflocal_remove(buf) + buf_T *buf; +{ + AutoPat *ap; + EVENT_T event; + AutoPatCmd *apc; + + /* invalidate currently executing autocommands */ + for (apc = active_apc_list; apc; apc = apc->next) + if (buf->b_fnum == apc->arg_bufnr) + apc->arg_bufnr = 0; + + /* invalidate buflocals looping through events */ + for (event = (EVENT_T)0; (int)event < (int)NUM_EVENTS; + event = (EVENT_T)((int)event + 1)) + /* loop over all autocommand patterns */ + for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) + if (ap->buflocal_nr == buf->b_fnum) + { + au_remove_pat(ap); + if (p_verbose >= 6) + smsg((char_u *) + _("auto-removing autocommand: %s <buffer=%d>"), + event_nr2name(event), buf->b_fnum); + } + au_cleanup(); +} + +/* * Add an autocmd group name. * Return it's ID. Returns AUGROUP_ERROR (< 0) for error. */ @@ -7292,6 +7333,9 @@ do_autocmd_event(event, pat, nested, cmd, forceit, group) int findgroup; int allgroups; int patlen; + int is_buflocal; + int buflocal_nr; + char_u buflocal_pat[25]; /* for "<buffer=X>" */ if (group == AUGROUP_ALL) findgroup = current_augroup; @@ -7339,6 +7383,39 @@ do_autocmd_event(event, pat, nested, cmd, forceit, group) patlen = (int)(endpat - pat); /* + * detect special <buflocal[=X]> buffer-local patterns + */ + is_buflocal = FALSE; + buflocal_nr = 0; + + if (patlen >= 7 && STRNCMP(pat, "<buffer", 7) == 0 + && pat[patlen - 1] == '>') + { + /* Error will be printed only for addition. printing and removing + * will proceed silently. */ + is_buflocal = TRUE; + if (patlen == 8) + buflocal_nr = curbuf->b_fnum; + else if (patlen > 9 && pat[7] == '=') + { + /* <buffer=abuf> */ + if (patlen == 13 && STRNICMP(pat, "<buffer=abuf>", 13)) + buflocal_nr = autocmd_bufnr; + /* <buffer=123> */ + else if (skipdigits(pat + 8) == pat + patlen - 1) + buflocal_nr = atoi((char *)pat + 8); + } + } + + if (is_buflocal) + { + /* normalize pat into standard "<buffer>#N" form */ + sprintf((char *)buflocal_pat, "<buffer=%d>", buflocal_nr); + pat = buflocal_pat; /* can modify pat and patlen */ + patlen = STRLEN(buflocal_pat); /* but not endpat */ + } + + /* * Find AutoPat entries with this pattern. */ prev_ap = &first_autopat[(int)event]; @@ -7351,7 +7428,9 @@ do_autocmd_event(event, pat, nested, cmd, forceit, group) * not specified and it's the current group, or a group was * not specified and we are listing * - the length of the pattern matches - * - the pattern matches + * - the pattern matches. + * For <buffer[=X]>, this condition works because we normalize + * all buffer-local patterns. */ if ((allgroups || ap->group == findgroup) && ap->patlen == patlen @@ -7374,7 +7453,7 @@ do_autocmd_event(event, pat, nested, cmd, forceit, group) } /* - * Show autocmd's for this autopat + * Show autocmd's for this autopat, or buflocals <buffer=X> */ else if (*cmd == NUL) show_autocmd(ap, event); @@ -7401,6 +7480,15 @@ do_autocmd_event(event, pat, nested, cmd, forceit, group) */ if (ap == NULL) { + /* refuse to add buffer-local ap if buffer number is invalid */ + if (is_buflocal && (buflocal_nr == 0 + || buflist_findnr(buflocal_nr) == NULL)) + { + EMSGN(_("E680: <buffer=%d>: invalid buffer number "), + buflocal_nr); + return FAIL; + } + ap = (AutoPat *)alloc((unsigned)sizeof(AutoPat)); if (ap == NULL) return FAIL; @@ -7411,13 +7499,23 @@ do_autocmd_event(event, pat, nested, cmd, forceit, group) vim_free(ap); return FAIL; } - ap->reg_pat = file_pat_to_reg_pat(pat, endpat, - &ap->allow_dirs, TRUE); - if (ap->reg_pat == NULL) + + if (is_buflocal) { - vim_free(ap->pat); - vim_free(ap); - return FAIL; + ap->buflocal_nr = buflocal_nr; + ap->reg_pat = NULL; + } + else + { + ap->buflocal_nr = 0; + ap->reg_pat = file_pat_to_reg_pat(pat, endpat, + &ap->allow_dirs, TRUE); + if (ap->reg_pat == NULL) + { + vim_free(ap->pat); + vim_free(ap); + return FAIL; + } } ap->cmds = NULL; *prev_ap = ap; @@ -7786,14 +7884,14 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) * autocommands are blocked. */ if (first_autopat[(int)event] == NULL || autocmd_block > 0) - return retval; + goto BYPASS_AU; /* * When autocommands are busy, new autocommands are only executed when * explicitly enabled with the "nested" flag. */ if (autocmd_busy && !(force || autocmd_nested)) - return retval; + goto BYPASS_AU; #ifdef FEAT_EVAL /* @@ -7801,20 +7899,20 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) * occurred or an exception was thrown but not caught. */ if (aborting()) - return retval; + goto BYPASS_AU; #endif /* * FileChangedShell never nests, because it can create an endless loop. */ if (filechangeshell_busy && event == EVENT_FILECHANGEDSHELL) - return retval; + goto BYPASS_AU; /* * Ignore events in 'eventignore'. */ if (event_ignored(event)) - return retval; + goto BYPASS_AU; /* * Allow nesting of autocommands, but restrict the depth, because it's @@ -7823,7 +7921,7 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) if (nesting == 10) { EMSG(_("E218: autocommand nesting too deep")); - return retval; + goto BYPASS_AU; } /* @@ -7834,7 +7932,7 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) && (event == EVENT_WINENTER || event == EVENT_BUFENTER)) || (autocmd_no_leave && (event == EVENT_WINLEAVE || event == EVENT_BUFLEAVE))) - return retval; + goto BYPASS_AU; /* * Save the autocmd_* variables and info about the current buffer. @@ -7904,7 +8002,7 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) sfname = vim_strsave(fname); /* Don't try expanding FileType, Syntax or WindowID. */ if (event == EVENT_FILETYPE || event == EVENT_SYNTAX - || event == EVENT_REMOTEREPLY) + || event == EVENT_REMOTEREPLY) fname = vim_strsave(fname); else fname = FullName_save(fname, FALSE); @@ -7912,7 +8010,8 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) if (fname == NULL) /* out of memory */ { vim_free(sfname); - return FALSE; + retval = FALSE; + goto BYPASS_AU; } #ifdef BACKSLASH_IN_FILENAME @@ -7983,11 +8082,17 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) patcmd.sfname = sfname; patcmd.tail = tail; patcmd.event = event; + patcmd.arg_bufnr = autocmd_bufnr; + patcmd.next = NULL; auto_next_pat(&patcmd, FALSE); /* found one, start executing the autocommands */ if (patcmd.curpat != NULL) { + /* add to active_apc_list */ + patcmd.next = active_apc_list; + active_apc_list = &patcmd; + #ifdef FEAT_EVAL /* set v:cmdarg (only when there is a matching pattern) */ save_cmdbang = get_vim_var_nr(VV_CMDBANG); @@ -8015,6 +8120,9 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) set_vim_var_nr(VV_CMDBANG, save_cmdbang); } #endif + /* delete from active_apc_list */ + if (active_apc_list == &patcmd) /* just in case */ + active_apc_list = patcmd.next; } --RedrawingDisabled; @@ -8065,6 +8173,13 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap) } au_cleanup(); /* may really delete removed patterns/commands now */ + +BYPASS_AU: + /* When wiping out a buffer make sure all its buffer-local autocommands + * are deleted. */ + if (event == EVENT_BUFWIPEOUT && buf != NULL) + aubuflocal_remove(buf); + return retval; } @@ -8089,12 +8204,16 @@ auto_next_pat(apc, stop_at_last) apc->curpat = NULL; /* only use a pattern when it has not been removed, has commands and - * the group matches */ + * the group matches. For buffer-local autocommands only check the + * buffer number. */ if (ap->pat != NULL && ap->cmds != NULL && (apc->group == AUGROUP_ALL || apc->group == ap->group)) { - if (match_file_pat(ap->reg_pat, apc->fname, apc->sfname, apc->tail, - ap->allow_dirs)) + /* execution-condition */ + if (ap->buflocal_nr == 0 + ? (match_file_pat(ap->reg_pat, apc->fname, apc->sfname, + apc->tail, ap->allow_dirs)) + : ap->buflocal_nr == apc->arg_bufnr) { name = event_nr2name(apc->event); s = _("%s Auto commands for \"%s\""); @@ -8191,11 +8310,14 @@ getnextac(c, cookie, indent) /* * Return TRUE if there is a matching autocommand for "fname". + * To account for buffer-local autocommands, function needs to know + * in which buffer the file will be opened. */ int -has_autocmd(event, sfname) +has_autocmd(event, sfname, buf) EVENT_T event; char_u *sfname; + buf_T *buf; { AutoPat *ap; char_u *fname; @@ -8219,8 +8341,11 @@ has_autocmd(event, sfname) for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) if (ap->pat != NULL && ap->cmds != NULL - && match_file_pat(ap->reg_pat, fname, sfname, tail, - ap->allow_dirs)) + && (ap->buflocal_nr == 0 + ? match_file_pat(ap->reg_pat, fname, sfname, tail, + ap->allow_dirs) + : buf != NULL && ap->buflocal_nr == buf->b_fnum + )) { retval = TRUE; break; @@ -8327,7 +8452,9 @@ get_event_name(xp, idx) /* * Return TRUE if an autocommand is defined for "event" and "pattern". - * "pattern" can be NULL to accept any pattern. + * "pattern" can be NULL to accept any pattern. Buffer-local patterns + * <buffer> or <buffer=N> are accepted. + * Used for exists("#Event#pat") */ int au_exists(name, name_end, pattern) @@ -8339,6 +8466,7 @@ au_exists(name, name_end, pattern) char_u *p; EVENT_T event; AutoPat *ap; + buf_T *buflocal_buf = NULL; /* find the index (enum) for the event name */ event_name = vim_strnsave(name, (int)(name_end - name)); @@ -8360,15 +8488,24 @@ au_exists(name, name_end, pattern) if (pattern == NULL) return TRUE; + /* if pattern is "<buffer>", special handling is needed which uses curbuf */ + /* for pattern "<buffer=N>, fnamecmp() will work fine */ + if (STRICMP(pattern, "<buffer>") == 0) + buflocal_buf = curbuf; + /* Check if there is an autocommand with the given pattern. */ for ( ; ap != NULL; ap = ap->next) - /* only use a pattern when it has not been removed and has commands */ + /* only use a pattern when it has not been removed and has commands. */ + /* For buffer-local autocommands, fnamecmp() works fine. */ if (ap->pat != NULL && ap->cmds != NULL - && fnamecmp(ap->pat, pattern) == 0) + && (buflocal_buf == NULL + ? fnamecmp(ap->pat, pattern) == 0 + : ap->buflocal_nr == buflocal_buf->b_fnum)) return TRUE; return FALSE; } + #endif /* FEAT_AUTOCMD */ #if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN) || defined(PROTO) diff --git a/src/gui_gtk.c b/src/gui_gtk.c index e5b4259bb..4e4c1d97f 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -2014,15 +2014,17 @@ split_button_string(char_u *button_string, int *n_buttons) if (array != NULL) { array[count++] = (char *)button_string; - for (p = button_string; *p != NUL; mb_ptr_adv(p)) + for (p = button_string; *p != NUL; ) { if (*p == DLG_BUTTON_SEP) { - *p = NUL; - array[count++] = (char *)p + 1; + *p++ = NUL; + array[count++] = (char *)p; } else if (*p == DLG_HOTKEY_CHAR) - *p = '_'; + *p++ = '_'; + else + mb_ptr_adv(p); } array[count] = NULL; /* currently not relied upon, but doesn't hurt */ } diff --git a/src/installman.sh b/src/installman.sh new file mode 100755 index 000000000..b49d2671c --- /dev/null +++ b/src/installman.sh @@ -0,0 +1,108 @@ +#! /bin/sh +# installman.sh --- install or uninstall manpages for Vim +# +# arguments: +# 1 what: "install", "uninstall" or "xxd" +# 2 target directory e.g., "/usr/local/man/it/man1" +# 3 language addition e.g., "" or "-it" +# 4 vim location as used in manual pages e.g., "/usr/local/share/vim" +# 5 runtime dir for menu.vim et al. e.g., "/usr/local/share/vim/vim70" +# 6 runtime dir for global vimrc file e.g., "/usr/local/share/vim" +# 7 source dir for help files e.g., "../runtime/doc" +# 8 mode bits for manpages e.g., "644" +# 9 vim exe name e.g., "vim" +# 10 name of vimdiff exe e.g., "vimdiff" +# 11 name of evim exe e.g., "evim" + +errstatus=0 + +what=$1 +destdir=$2 +langadd=$3 +vimloc=$4 +scriptloc=$5 +vimrcloc=$6 +helpsource=$7 +manmod=$8 +exename=$9 +vimdiffname=${10} +evimname=${11} + +helpsubloc=$scriptloc/doc +synsubloc=$scriptloc/syntax +tutorsubloc=$scriptloc/tutor + +if test $what = "install" -o $what = "xxd"; then + if test ! -d $destdir; then + echo creating $destdir + ./mkinstalldirs $destdir + fi +fi + +if test $what = "install"; then + # vim.1 + echo installing $destdir/$exename.1 + sed -e s+/usr/local/lib/vim+$vimloc+ \ + -e s+$vimloc/doc+$helpsubloc+ \ + -e s+$vimloc/syntax+$synsubloc+ \ + -e s+$vimloc/tutor+$tutorsubloc+ \ + -e s+$vimloc/vimrc+$vimrcloc/vimrc+ \ + -e s+$vimloc/gvimrc+$vimrcloc/gvimrc+ \ + -e s+$vimloc/menu.vim+$scriptloc/menu.vim+ \ + -e s+$vimloc/bugreport.vim+$scriptloc/bugreport.vim+ \ + -e s+$vimloc/filetype.vim+$scriptloc/filetype.vim+ \ + -e s+$vimloc/ftoff.vim+$scriptloc/ftoff.vim+ \ + -e s+$vimloc/scripts.vim+$scriptloc/scripts.vim+ \ + -e s+$vimloc/optwin.vim+$scriptloc/optwin.vim+ \ + -e 's+$vimloc/\*.ps+$scriptloc/\*.ps+' \ + $helpsource/vim$langadd.1 > $destdir/$exename.1 + chmod $manmod $destdir/$exename.1 + + # vimtutor.1 + echo installing $destdir/$exename""tutor.1 + sed -e s+/usr/local/lib/vim+$vimloc+ \ + -e s+$vimloc/tutor+$tutorsubloc+ \ + $helpsource/vimtutor$langadd.1 > $destdir/$exename""tutor.1 + chmod $manmod $destdir/$exename""tutor.1 + + # vimdiff.1 + echo installing $destdir/$vimdiffname.1 + cp $helpsource/vimdiff$langadd.1 $destdir/$vimdiffname.1 + chmod $manmod $destdir/$vimdiffname.1 + + # evim.1 + echo installing $destdir/$evimname.1 + sed -e s+/usr/local/lib/vim+$vimloc+ \ + $helpsource/evim$langadd.1 > $destdir/$evimname.1 + chmod $manmod $destdir/$evimname.1 +fi + +if test $what = "uninstall"; then + echo Checking for Vim manual pages in $destdir... + if test -r $destdir/$exename.1; then + echo deleting $destdir/$exename.1 + rm -f $destdir/$exename.1 + fi + if test -r $destdir/$exename""tutor.1; then + echo deleting $destdir/$exename""tutor.1 + rm -f $destdir/$exename""tutor.1 + fi + if test -r $destdir/$vimdiffname.1; then + echo deleting $destdir/$vimdiffname.1 + rm -f $destdir/$vimdiffname.1 + fi + if test -r $destdir/$evimname.1; then + echo deleting $destdir/$evimname.1 + rm -f $destdir/$evimname.1 + fi +fi + +if test $what = "xxd"; then + echo installing $destdir/xxd.1 + cp $helpsource/xxd$langadd.1 $destdir/xxd.1 + chmod $manmod $destdir/xxd.1 +fi + +exit $errstatus + +# vim: set sw=3 : diff --git a/src/installml.sh b/src/installml.sh new file mode 100644 index 000000000..5907b26a0 --- /dev/null +++ b/src/installml.sh @@ -0,0 +1,162 @@ +#! /bin/sh +# installml.sh --- install or uninstall manpage links for Vim +# +# arguments: +# 1 what: "install" or "uninstall" +# 2 also do GUI pages: "yes" or "" +# 3 target directory e.g., "/usr/local/man/it/man1" +# 4 vim exe name e.g., "vim" +# 5 vimdiff exe name e.g., "vimdiff" +# 6 evim exe name e.g., "evim" +# 7 ex exe name e.g., "ex" +# 8 view exe name e.g., "view" +# 9 rvim exe name e.g., "rvim" +# 10 rview exe name e.g., "rview" +# 11 gvim exe name e.g., "gvim" +# 12 gview exe name e.g., "gview" +# 13 rgvim exe name e.g., "rgvim" +# 14 rgview exe name e.g., "rgview" +# 15 gvimdiff exe name e.g., "gvimdiff" +# 16 eview exe name e.g., "eview" + +errstatus=0 + +what=$1 +gui=$2 +destdir=$3 +vimname=$4 +vimdiffname=$5 +evimname=$6 +exname=$7 +viewname=$8 +rvimname=$9 +rviewname=${10} +gvimname=${11} +gviewname=${12} +rgvimname=${13} +rgviewname=${14} +gvimdiffname=${15} +eviewname=${16} + +if test $what = "install"; then + if test ! -d $destdir; then + echo creating $destdir + ./mkinstalldirs $destdir + fi + + # ex + if test ! -e $destdir/$exname.1; then + echo creating link $destdir/$exname.1 + cd $destdir; ln -s $vimname.1 $exname.1 + fi + + # view + if test ! -e $destdir/$viewname.1; then + echo creating link $destdir/$viewname.1 + cd $destdir; ln -s $vimname.1 $viewname.1 + fi + + # rvim + if test ! -e $destdir/$rvimname.1; then + echo creating link $destdir/$rvimname.1 + cd $destdir; ln -s $vimname.1 $rvimname.1 + fi + + # rview + if test ! -e $destdir/$rviewname.1; then + echo creating link $destdir/$rviewname.1 + cd $destdir; ln -s $vimname.1 $rviewname.1 + fi + + # GUI targets are optional + if test "$gui" = "yes"; then + # gvim + if test ! -e $destdir/$gvimname.1; then + echo creating link $destdir/$gvimname.1 + cd $destdir; ln -s $vimname.1 $gvimname.1 + fi + + # gview + if test ! -e $destdir/$gviewname.1; then + echo creating link $destdir/$gviewname.1 + cd $destdir; ln -s $vimname.1 $gviewname.1 + fi + + # rgvim + if test ! -e $destdir/$rgvimname.1; then + echo creating link $destdir/$rgvimname.1 + cd $destdir; ln -s $vimname.1 $rgvimname.1 + fi + + # rgview + if test ! -e $destdir/$rgviewname.1; then + echo creating link $destdir/$rgviewname.1 + cd $destdir; ln -s $vimname.1 $rgviewname.1 + fi + + # gvimdiff + if test ! -e $destdir/$gvimdiffname.1; then + echo creating link $destdir/$gvimdiffname.1 + cd $destdir; ln -s $vimdiffname.1 $gvimdiffname.1 + fi + + # eview + if test ! -e $destdir/$eviewname.1; then + echo creating link $destdir/$eviewname.1 + cd $destdir; ln -s $evimname.1 $eviewname.1 + fi + fi +fi + +if test $what = "uninstall"; then + echo Checking for Vim manual page links in $destdir... + + if test -L $destdir/$exname.1; then + echo deleting $destdir/$exname.1 + rm -f $destdir/$exname.1 + fi + if test -L $destdir/$viewname.1; then + echo deleting $destdir/$viewname.1 + rm -f $destdir/$viewname.1 + fi + if test -L $destdir/$rvimname.1; then + echo deleting $destdir/$rvimname.1 + rm -f $destdir/$rvimname.1 + fi + if test -L $destdir/$rviewname.1; then + echo deleting $destdir/$rviewname.1 + rm -f $destdir/$rviewname.1 + fi + + # GUI targets are optional + if test "$gui" = "yes"; then + if test -L $destdir/$gvimname.1; then + echo deleting $destdir/$gvimname.1 + rm -f $destdir/$gvimname.1 + fi + if test -L $destdir/$gviewname.1; then + echo deleting $destdir/$gviewname.1 + rm -f $destdir/$gviewname.1 + fi + if test -L $destdir/$rgvimname.1; then + echo deleting $destdir/$rgvimname.1 + rm -f $destdir/$rgvimname.1 + fi + if test -L $destdir/$rgviewname.1; then + echo deleting $destdir/$rgviewname.1 + rm -f $destdir/$rgviewname.1 + fi + if test -L $destdir/$gvimdiffname.1; then + echo deleting $destdir/$gvimdiffname.1 + rm -f $destdir/$gvimdiffname.1 + fi + if test -L $destdir/$eviewname.1; then + echo deleting $destdir/$eviewname.1 + rm -f $destdir/$eviewname.1 + fi + fi +fi + +exit $errstatus + +# vim: set sw=3 : diff --git a/src/main.c b/src/main.c index 133597015..b35aaf9e0 100644 --- a/src/main.c +++ b/src/main.c @@ -3113,13 +3113,13 @@ build_drop_cmd(filec, filev, sendReply) for (i = 0; i < filec; i++) { /* On Unix the shell has already expanded the wildcards, don't want to - * do it again in the Vim server. On MS-Windows only need to escape a - * space. */ + * do it again in the Vim server. On MS-Windows only escape + * non-wildcard characters. */ p = vim_strsave_escaped((char_u *)filev[i], #ifdef UNIX PATH_ESC_CHARS #else - (char_u *)" " + (char_u *)" \t%#" #endif ); if (p == NULL) diff --git a/src/normal.c b/src/normal.c index 83759b72c..9d0d8a9ca 100644 --- a/src/normal.c +++ b/src/normal.c @@ -7342,7 +7342,11 @@ nv_g_cmd(cap) { i = curwin->w_leftcol + W_WIDTH(curwin) - col_off - 1; coladvance((colnr_T)i); - curwin->w_set_curswant = TRUE; + + /* Make sure we stick in this column. */ + validate_virtcol(); + curwin->w_curswant = curwin->w_virtcol; + curwin->w_set_curswant = FALSE; } } break; diff --git a/src/option.c b/src/option.c index 6b596832b..3cb91a4f7 100644 --- a/src/option.c +++ b/src/option.c @@ -118,6 +118,7 @@ typedef enum , PV_SCBIND , PV_SCROLL , PV_SI + , PV_STL , PV_SN , PV_STS , PV_SUA @@ -2024,7 +2025,7 @@ static struct vimoption {(char_u *)TRUE, (char_u *)0L}}, {"statusline" ,"stl", P_STRING|P_VI_DEF|P_ALLOCED|P_RSTAT, #ifdef FEAT_STL_OPT - (char_u *)&p_stl, PV_NONE, + (char_u *)&p_stl, OPT_BOTH(PV_STL), #else (char_u *)NULL, PV_NONE, #endif @@ -2315,6 +2316,15 @@ static struct vimoption {"wildmode", "wim", P_STRING|P_VI_DEF|P_COMMA|P_NODUP, (char_u *)&p_wim, PV_NONE, {(char_u *)"full", (char_u *)0L}}, + {"wildoptions", "wop", P_STRING|P_VI_DEF, +#ifdef FEAT_CMDL_COMPL + (char_u *)&p_wop, PV_NONE, + {(char_u *)"", (char_u *)0L} +#else + (char_u *)NULL, PV_NONE, + {(char_u *)NULL, (char_u *)0L} +#endif + }, {"winaltkeys", "wak", P_STRING|P_VI_DEF, #ifdef FEAT_WAK (char_u *)&p_wak, PV_NONE, @@ -2465,6 +2475,9 @@ static char *(p_ambw_values[]) = {"single", "double", NULL}; static char *(p_bg_values[]) = {"light", "dark", NULL}; static char *(p_nf_values[]) = {"octal", "hex", "alpha", NULL}; static char *(p_ff_values[]) = {FF_UNIX, FF_DOS, FF_MAC, NULL}; +#ifdef FEAT_CMDL_COMPL +static char *(p_wop_values[]) = {"tagfile", NULL}; +#endif #ifdef FEAT_WAK static char *(p_wak_values[]) = {"yes", "menu", "no", NULL}; #endif @@ -4909,6 +4922,15 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, errmsg = e_invarg; } +#ifdef FEAT_CMDL_COMPL + /* 'wildoptions' */ + else if (varp == &p_wop) + { + if (check_opt_strings(p_wop, p_wop_values, TRUE) != OK) + errmsg = e_invarg; + } +#endif + #ifdef FEAT_WAK /* 'winaltkeys' */ else if (varp == &p_wak) @@ -5563,7 +5585,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, #ifdef FEAT_STL_OPT /* 'statusline' or 'rulerformat' */ - else if (varp == &p_stl || varp == &p_ruf) + else if (gvarp == &p_stl || varp == &p_ruf) { int wid; @@ -5583,7 +5605,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, } else errmsg = check_stl_option(s); - if (varp == &(p_ruf) && errmsg == NULL) + if (varp == &p_ruf && errmsg == NULL) comp_col(); } #endif @@ -7915,6 +7937,9 @@ get_varp_scope(p, opt_flags) case OPT_BOTH(PV_DICT): return (char_u *)&(curbuf->b_p_dict); case OPT_BOTH(PV_TSR): return (char_u *)&(curbuf->b_p_tsr); #endif +#ifdef FEAT_STL_OPT + case OPT_BOTH(PV_STL): return (char_u *)&(curwin->w_p_stl); +#endif } return NULL; /* "cannot happen" */ } @@ -7967,6 +7992,10 @@ get_varp(p) case OPT_BOTH(PV_EFM): return *curbuf->b_p_efm != NUL ? (char_u *)&(curbuf->b_p_efm) : p->var; #endif +#ifdef FEAT_STL_OPT + case OPT_BOTH(PV_STL): return *curwin->w_p_stl != NUL + ? (char_u *)&(curwin->w_p_stl) : p->var; +#endif #ifdef FEAT_ARABIC case PV_ARAB: return (char_u *)&(curwin->w_p_arab); @@ -8168,6 +8197,9 @@ copy_winopt(from, to) to->wo_rl = from->wo_rl; to->wo_rlc = vim_strsave(from->wo_rlc); #endif +#ifdef FEAT_STL_OPT + to->wo_stl = vim_strsave(from->wo_stl); +#endif to->wo_wrap = from->wo_wrap; #ifdef FEAT_LINEBREAK to->wo_lbr = from->wo_lbr; @@ -8226,6 +8258,9 @@ check_winopt(wop) #ifdef FEAT_RIGHTLEFT check_string_option(&wop->wo_rlc); #endif +#ifdef FEAT_STL_OPT + check_string_option(&wop->wo_stl); +#endif } /* @@ -8248,6 +8283,9 @@ clear_winopt(wop) #ifdef FEAT_RIGHTLEFT clear_string_option(&wop->wo_rlc); #endif +#ifdef FEAT_STL_OPT + clear_string_option(&wop->wo_stl); +#endif } /* diff --git a/src/option.h b/src/option.h index 8ef8536ff..e6f0c0b42 100644 --- a/src/option.h +++ b/src/option.h @@ -785,6 +785,9 @@ static char *(p_ve_values[]) = {"block", "insert", "all", NULL}; #endif EXTERN long p_verbose; /* 'verbose' */ EXTERN int p_warn; /* 'warn' */ +#ifdef FEAT_CMDL_COMPL +EXTERN char_u *p_wop; /* 'wildoptions' */ +#endif #if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(LINT) \ || defined (FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_KDE) #define FEAT_WAK diff --git a/src/proto/ex_cmds.pro b/src/proto/ex_cmds.pro index f63fcda81..815063a22 100644 --- a/src/proto/ex_cmds.pro +++ b/src/proto/ex_cmds.pro @@ -42,6 +42,8 @@ char_u *check_help_lang __ARGS((char_u *arg)); int help_heuristic __ARGS((char_u *matched_string, int offset, int wrong_case)); int find_help_tags __ARGS((char_u *arg, int *num_matches, char_u ***matches, int keep_lang)); void fix_help_buffer __ARGS((void)); +void ex_exusage __ARGS((exarg_T *eap)); +void ex_viusage __ARGS((exarg_T *eap)); void ex_helptags __ARGS((exarg_T *eap)); void ex_sign __ARGS((exarg_T *eap)); void sign_gui_started __ARGS((void)); diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro index a2fb7b400..c3a872c58 100644 --- a/src/proto/fileio.pro +++ b/src/proto/fileio.pro @@ -20,6 +20,7 @@ void write_lnum_adjust __ARGS((linenr_T offset)); void vim_deltempdir __ARGS((void)); char_u *vim_tempname __ARGS((int extra_char)); void forward_slash __ARGS((char_u *fname)); +void aubuflocal_remove __ARGS((buf_T *buf)); void do_augroup __ARGS((char_u *arg, int del_group)); int check_ei __ARGS((void)); void do_autocmd __ARGS((char_u *arg, int forceit)); @@ -30,7 +31,7 @@ void aucmd_restbuf __ARGS((aco_save_T *aco)); int apply_autocmds __ARGS((EVENT_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf)); int apply_autocmds_retval __ARGS((EVENT_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, int *retval)); int has_cursorhold __ARGS((void)); -int has_autocmd __ARGS((EVENT_T event, char_u *sfname)); +int has_autocmd __ARGS((EVENT_T event, char_u *sfname, buf_T *buf)); char_u *get_augroup_name __ARGS((expand_T *xp, int idx)); char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd)); char_u *get_event_name __ARGS((expand_T *xp, int idx)); diff --git a/src/screen.c b/src/screen.c index abd9be7e6..e986a223b 100644 --- a/src/screen.c +++ b/src/screen.c @@ -700,7 +700,7 @@ updateWindow(wp) || p_ru # endif # ifdef FEAT_STL_OPT - || *p_stl + || *p_stl != NUL || *wp->w_p_stl != NUL # endif ) win_redr_status(wp); @@ -5040,7 +5040,7 @@ win_redr_status(wp) wp->w_redr_status = TRUE; } #ifdef FEAT_STL_OPT - else if (*p_stl) + else if (*p_stl != NUL || *wp->w_p_stl != NUL) { /* redraw custom status line */ win_redr_custom(wp, FALSE); @@ -5276,7 +5276,10 @@ win_redr_custom(wp, Ruler) row = W_WINROW(wp) + wp->w_height; fillchar = fillchar_status(&attr, wp == curwin); maxwidth = W_WIDTH(wp); - p = p_stl; + if (*wp->w_p_stl != NUL) + p = wp->w_p_stl; + else + p = p_stl; if (Ruler) { p = p_ruf; @@ -8214,7 +8217,7 @@ showruler(always) if (!always && !redrawing()) return; #if defined(FEAT_STL_OPT) && defined(FEAT_WINDOWS) - if (*p_stl && curwin->w_status_height) + if ((*p_stl != NUL || *curwin->w_p_stl != NUL) && curwin->w_status_height) win_redr_custom(curwin, FALSE); else #endif diff --git a/src/structs.h b/src/structs.h index 4975af531..84b1a2471 100644 --- a/src/structs.h +++ b/src/structs.h @@ -189,6 +189,10 @@ typedef struct #endif long wo_scr; #define w_p_scr w_onebuf_opt.wo_scr /* 'scroll' */ +#ifdef FEAT_STL_OPT + char_u *wo_stl; +#define w_p_stl w_onebuf_opt.wo_stl /* 'statusline' */ +#endif #ifdef FEAT_SCROLLBIND int wo_scb; # define w_p_scb w_onebuf_opt.wo_scb /* 'scrollbind' */ @@ -2862,7 +2862,7 @@ jumpto_tag(lbuf, forceit, keep_help) */ if (mch_getperm(fname) < 0 #ifdef FEAT_AUTOCMD - && !has_autocmd(EVENT_BUFREADCMD, fname) + && !has_autocmd(EVENT_BUFREADCMD, fname, NULL) #endif ) { diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak index 78a4d276b..01304c0e7 100644 --- a/src/testdir/Make_amiga.mak +++ b/src/testdir/Make_amiga.mak @@ -23,7 +23,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \ test33.out test34.out test35.out test36.out test37.out \ test38.out test39.out test40.out test41.out test42.out \ test43.out test44.out test45.out test46.out test47.out \ - test48.out test51.out test53.out + test48.out test51.out test53.out test54.out .SUFFIXES: .in .out @@ -96,3 +96,4 @@ test47.out: test47.in test48.out: test48.in test51.out: test51.in test53.out: test53.in +test54.out: test54.in diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak index 0dd1a09f0..07c2c278b 100644 --- a/src/testdir/Make_dos.mak +++ b/src/testdir/Make_dos.mak @@ -17,7 +17,7 @@ SCRIPTS16 = test1.out test19.out test20.out test22.out \ test23.out test24.out test28.out test29.out \ test35.out test36.out test43.out \ test44.out test45.out test46.out test47.out \ - test48.out test51.out test53.out + test48.out test51.out test53.out test54.out SCRIPTS = test3.out test4.out test5.out test6.out test7.out \ test8.out test9.out test11.out test13.out test14.out \ diff --git a/src/testdir/Make_os2.mak b/src/testdir/Make_os2.mak index f3ce50b66..e1ca8dcb3 100644 --- a/src/testdir/Make_os2.mak +++ b/src/testdir/Make_os2.mak @@ -23,7 +23,7 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \ test33.out test34.out test35.out test36.out test37.out \ test38.out test39.out test40.out test41.out test42.out \ test43.out test44.out test45.out test46.out test47.out \ - test48.out test51.out test53.out + test48.out test51.out test53.out test54.out .SUFFIXES: .in .out diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms index 6819a68bb..1db9fa75e 100644 --- a/src/testdir/Make_vms.mms +++ b/src/testdir/Make_vms.mms @@ -4,7 +4,7 @@ # Authors: Zoltan Arpadffy, <arpadffy@polarhome.com> # Sandor Kopanyi, <sandor.kopanyi@mailbox.hu> # -# Last change: 2004 Jul 02 +# Last change: 2004 Dec 24 # # This has been tested on VMS 6.2 to 7.2 on DEC Alpha and VAX. # Edit the lines in the Configuration section below to select. @@ -57,7 +57,7 @@ SCRIPT = test1.out test2.out test3.out test4.out test5.out \ test33.out test34.out test35.out test36.out test37.out \ test38.out test39.out test40.out test41.out test42.out \ test43.out test44.out test45.out test46.out \ - test48.out test51.out test53.out + test48.out test51.out test53.out test54.out .IFDEF WANT_GUI SCRIPT_GUI = test16.out diff --git a/src/testdir/Makefile b/src/testdir/Makefile index c260eb45a..2f4ab934a 100644 --- a/src/testdir/Makefile +++ b/src/testdir/Makefile @@ -13,7 +13,8 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \ test33.out test34.out test35.out test36.out test37.out \ test38.out test39.out test40.out test41.out test42.out \ test43.out test44.out test45.out test46.out test47.out \ - test48.out test49.out test51.out test52.out test53.out + test48.out test49.out test51.out test52.out test53.out \ + test54.out SCRIPTS_GUI = test16.out diff --git a/src/testdir/test54.in b/src/testdir/test54.in new file mode 100644 index 000000000..b3fbe7259 --- /dev/null +++ b/src/testdir/test54.in @@ -0,0 +1,17 @@ +Some tests for buffer-local autocommands + +STARTTEST +:so small.vim +:e xx +:!rm -f test.out +:au BufLeave <buffer> :!echo "buffer-local autommand in %" >> test.out +:e somefile " here, autocommand for xx shall write test.out +: " but autocommand shall not apply to buffer named <buffer> +:bwipe xx " here, autocommand shall be auto-deleted +:e xx " nothing shall be written +:e somefile " nothing shall be written +:qa! +ENDTEST + +start of test file xx +end of test file xx diff --git a/src/testdir/test54.ok b/src/testdir/test54.ok new file mode 100644 index 000000000..0fd1dc915 --- /dev/null +++ b/src/testdir/test54.ok @@ -0,0 +1 @@ +buffer-local autommand in xx diff --git a/src/version.h b/src/version.h index 7596af66d..ba8cee618 100644 --- a/src/version.h +++ b/src/version.h @@ -36,5 +36,5 @@ #define VIM_VERSION_NODOT "vim70aa" #define VIM_VERSION_SHORT "7.0aa" #define VIM_VERSION_MEDIUM "7.0aa ALPHA" -#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 17)" -#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 17, compiled " +#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 24)" +#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2004 Dec 24, compiled " |