summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2004-12-24 14:35:23 +0000
committerBram Moolenaar <Bram@vim.org>2004-12-24 14:35:23 +0000
commitb5bf5b8fae9ff5e2f7704686efae2814be1e18f7 (patch)
treefcaa6e0f52dfd691d0c4796d34e402d46ce7c293 /src
parent1cd871b5341bf43ee99e136844e3131014880f92 (diff)
downloadvim-b5bf5b8fae9ff5e2f7704686efae2814be1e18f7.zip
updated for version 7.0024
Diffstat (limited to 'src')
-rw-r--r--src/Makefile138
-rw-r--r--src/buffer.c3
-rw-r--r--src/charset.c5
-rw-r--r--src/ex_cmds.c22
-rw-r--r--src/ex_cmds.h4
-rw-r--r--src/ex_cmds2.c2
-rw-r--r--src/ex_docmd.c7
-rw-r--r--src/fileio.c189
-rw-r--r--src/gui_gtk.c10
-rwxr-xr-xsrc/installman.sh108
-rw-r--r--src/installml.sh162
-rw-r--r--src/main.c6
-rw-r--r--src/normal.c6
-rw-r--r--src/option.c44
-rw-r--r--src/option.h3
-rw-r--r--src/proto/ex_cmds.pro2
-rw-r--r--src/proto/fileio.pro3
-rw-r--r--src/screen.c11
-rw-r--r--src/structs.h4
-rw-r--r--src/tag.c2
-rw-r--r--src/testdir/Make_amiga.mak3
-rw-r--r--src/testdir/Make_dos.mak2
-rw-r--r--src/testdir/Make_os2.mak2
-rw-r--r--src/testdir/Make_vms.mms4
-rw-r--r--src/testdir/Makefile3
-rw-r--r--src/testdir/test54.in17
-rw-r--r--src/testdir/test54.ok1
-rw-r--r--src/version.h4
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' */
diff --git a/src/tag.c b/src/tag.c
index 442717fa7..b72cf03df 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -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 "