# HG changeset patch # User Danek Duvall # Date 1474949171 25200 # Node ID e8d705cba87d43ad4b55b575795a9541c4d27049 # Parent c1d43e41adeb1ce2be5de79d45064a96d67864ac 24676533 vim 8.0.0016 15542060 Better defaults for vim 15631212 vim should be vim, not vi 17585183 vim --version still refers to opensolaris.org diff -r c1d43e41adeb -r e8d705cba87d components/vim/Makefile --- a/components/vim/Makefile Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/Makefile Mon Sep 26 21:06:11 2016 -0700 @@ -26,25 +26,22 @@ include ../../make-rules/shared-macros.mk COMPONENT_NAME= vim -COMPONENT_VERSION= 7.4 -IPS_COMPONENT_VERSION= $(shell echo $(HG_REV) | sed -e 's/-/./g' -e 's/v//') +COMPONENT_VERSION= 8.0 +COMPONENT_FULL_VERSION= $(shell echo $(GIT_TAG) | sed -e 's/v//') +IPS_COMPONENT_VERSION= $(shell echo $(GIT_TAG) | sed -e 's/v//' -e 's/\.0*\([1-9]\)/.\1/') +COMPONENT_LABEL= $(COMPONENT_FULL_VERSION) # COMPONENT_SRC* is autodefined by the prep-{SCM} Makefile fragment COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.bz2 COMPONENT_PROJECT_URL= http://www.vim.org/ -HG_REPO= https://vim.googlecode.com/hg -HG_REV= v7-4 -HG_HASH= sha256:0c823290aebf4ea341be2f8280cc5906cdbbf772c54fa675afb0845983f23b60 - - -TPNO= 21780 +GIT_REPO= git://github.com/vim/vim +GIT_TAG= v8.0.0016 +GIT_COMMIT_ID= 0e77b76 +GIT_HASH= sha256:1a5f704a68f844ababa932ac8522d87ede599c062ff7fe1dd48beaaaf5417246 -INSTALL_TARGET= -include $(WS_MAKE_RULES)/common.mk +TPNO= 31881 -PATCH_LEVEL = 0 - -PKG_MACROS += VIMVER=vim74 +PKG_MACROS += VIMVER=vim$(subst .,,$(COMPONENT_VERSION)) X_VARIANT = $(BUILD_DIR)/$(MACH64)-gvim NOX_VARIANT = $(BUILD_DIR)/$(MACH64)-vim @@ -54,30 +51,32 @@ $(VARIANTS:%=%/.configured): BITS=64 BUILD_64 = $(VARIANTS:%=%/.built) - -# Only install the non-X variant. We will cherry-pick gvim out of the build -# directory to avoid re-installing everything. -INSTALL_64 = $(NOX_VARIANT)/.installed - +INSTALL_64 = $(VARIANTS:%=%/.installed) +# Test only the terminal variant. TEST_64 = $(NOX_VARIANT)/.tested -# Necessary to pass 64-bit flags to the link stage. -CC += $(CC_BITS) +include $(WS_MAKE_RULES)/common.mk + +# Studio 12.3 and 12.4 allow unknown __attribute__s, but complain about them, +# making the build pretty loud about unknown "unused" attributes. If we make +# it an error, configure will turn off its use. See bug 20230791. +CFLAGS += -errwarn=E_ATTRIBUTE_UNKNOWN + +# Make sure we use a 64-bit, multithreaded perl +CONFIGURE_ENV += vi_cv_path_perl=/usr/perl5/5.22/bin/perl +# Vim's configure script looks for a "python3" executable, per PEP 394 +CONFIGURE_ENV += vi_cv_path_python3=/usr/bin/python3.5 +# zh_CN.cp936.po has invalid characters which GNU msgfmt seems to be able to ignore. +CONFIGURE_ENV += MSGFMT=gmsgfmt +CONFIGURE_ENV += SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) CONFIGURE_OPTIONS += --with-features=huge CONFIGURE_OPTIONS += --with-compiledby="the Solaris Userland build environment" -CONFIGURE_OPTIONS += --with-modified-by="Solaris Userland " +CONFIGURE_OPTIONS += --with-modified-by="Solaris Userland " CONFIGURE_OPTIONS += --enable-luainterp=dynamic -# XXX Perl compilation fails, for some reason. -# - Perl_croak_nocontext is redefined (embed.h, line 5157), having something to -# do with PERL_IMPLICIT_CONTEXT, which is discussed in perlguts(1). This is -# just a warning, but looks like it might have nasty consequences. -# - The declaration of Perl_Gthr_key_ptr() has a problem with its argument of -# type pTHX. if_perl.xs defines that to void if it's not already defined, -# but perl.h probably does something else to it, not sure what yet. This -# also appears to have something to do with PERL_IMPLICIT_CONTEXT. -# CONFIGURE_OPTIONS += --enable-perlinterp=dynamic +CONFIGURE_OPTIONS += --enable-perlinterp=dynamic CONFIGURE_OPTIONS += --enable-pythoninterp=dynamic +CONFIGURE_OPTIONS += --enable-python3interp=dynamic CONFIGURE_OPTIONS += --enable-rubyinterp=dynamic # We build two variants: with and without X support. @@ -86,13 +85,16 @@ $(NOX_VARIANT)/.configured: CONFIGURE_OPTIONS += --disable-gtktest $(X_VARIANT)/.configured: CONFIGURE_OPTIONS += --with-vim-name=gvim $(X_VARIANT)/.configured: CONFIGURE_OPTIONS += --with-x -$(X_VARIANT)/.configured: CONFIGURE_OPTIONS += --enable-gui=gtk2 -$(X_VARIANT)/.configured: CONFIGURE_OPTIONS += --enable-gtk2-check +$(X_VARIANT)/.configured: CONFIGURE_OPTIONS += --enable-gui=gtk3 # Vim's build is too smart for itself and configure can't run outside of a # complete source tree. COMPONENT_PRE_CONFIGURE_ACTION = ($(CLONEY) $(SOURCE_DIR) $(@D)) +# For the GUI, install only the executable itself. +$(X_VARIANT)/.installed: COMPONENT_INSTALL_ARGS += -C src +$(X_VARIANT)/.installed: COMPONENT_INSTALL_TARGETS = installvimbin + COMPONENT_TEST_TARGETS = test $(SOURCE_DIR)/runtime/doc/uganda.txt: prep @@ -101,15 +103,23 @@ nawk '/begin of license/ {p=1; getline; next} /end of license/ {p=0} p == 1 {print}' $< > $@ # common targets -install: $(INSTALL_64) $(X_VARIANT)/.built $(BUILD_DIR)/license +install: $(INSTALL_64) $(BUILD_DIR)/license + +REQUIRED_PACKAGES += library/desktop/cairo REQUIRED_PACKAGES += library/desktop/gdk-pixbuf -REQUIRED_PACKAGES += library/desktop/gtk2 +REQUIRED_PACKAGES += library/desktop/gtk3 REQUIRED_PACKAGES += library/desktop/pango REQUIRED_PACKAGES += library/glib2 REQUIRED_PACKAGES += library/ncurses +REQUIRED_PACKAGES += runtime/lua +REQUIRED_PACKAGES += runtime/perl-522 +REQUIRED_PACKAGES += runtime/python-27 +REQUIRED_PACKAGES += runtime/python-35 +REQUIRED_PACKAGES += runtime/ruby-21 REQUIRED_PACKAGES += shell/ksh93 REQUIRED_PACKAGES += system/library/math +REQUIRED_PACKAGES += text/gnu-gettext REQUIRED_PACKAGES += x11/library/libice REQUIRED_PACKAGES += x11/library/libsm REQUIRED_PACKAGES += x11/library/libx11 diff -r c1d43e41adeb -r e8d705cba87d components/vim/gvim.p5m --- a/components/vim/gvim.p5m Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/gvim.p5m Mon Sep 26 21:06:11 2016 -0700 @@ -20,7 +20,7 @@ # # -# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # set name=pkg.fmri \ @@ -33,18 +33,26 @@ set name=info.classification \ value=org.opensolaris.category.2008:Development/Editors \ value="org.opensolaris.category.2008:System/Text Tools" -set name=info.repository-changeset value=$(HG_REV) -set name=info.repository-url value=$(HG_REPO) +set name=info.repository-changeset value=$(GIT_COMMIT_ID) +set name=info.repository-url value=$(GIT_REPO) set name=info.upstream value=vim-dev@vim.org set name=info.upstream-url value=$(COMPONENT_PROJECT_URL) set name=org.opensolaris.arc-caseid value=PSARC/2007/267 value=PSARC/2008/546 set name=org.opensolaris.consolidation value=$(CONSOLIDATION) +# link path=usr/bin/gview target=gvim -file $(MACH64)-gvim/src/gvim path=usr/bin/gvim +file path=usr/bin/gvim link path=usr/bin/gvimdiff target=gvim link path=usr/bin/rgview target=gvim link path=usr/bin/rgvim target=gvim +file path=usr/share/applications/gvim.desktop +file path=usr/share/applications/vim.desktop +file path=usr/share/icons/hicolor/48x48/apps/gvim.png +file path=usr/share/icons/locolor/16x16/apps/gvim.png +file path=usr/share/icons/locolor/32x32/apps/gvim.png link path=usr/share/man/man1/gvim.1 target=vim.1 link path=usr/share/man/man1/gvimdiff.1 target=vimdiff.1 +# license license license="VIM License" +# depend type=require fmri=editor/vim@$(IPS_COMPONENT_VERSION) diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/7.4.2035.patch --- a/components/vim/patches/7.4.2035.patch Tue Oct 04 15:53:56 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -Patch 7.4.2035 -Problem: On Solaris with ZFS the ACL may get removed. -Solution: Always restore the ACL for Solaris ZFS. (Danek Duvall) -Files: src/fileio.c - - -*** ../vim-7.4.2034/src/fileio.c 2016-07-10 22:11:11.870751341 +0200 ---- src/fileio.c 2016-07-14 20:33:57.407544979 +0200 -*************** -*** 4709,4717 **** - if (perm >= 0) /* set perm. of new file same as old file */ - (void)mch_setperm(wfname, perm); - #ifdef HAVE_ACL -! /* Probably need to set the ACL before changing the user (can't set the -! * ACL on a file the user doesn't own). */ - if (!backup_copy) - mch_set_acl(wfname, acl); - #endif - #ifdef FEAT_CRYPT ---- 4709,4725 ---- - if (perm >= 0) /* set perm. of new file same as old file */ - (void)mch_setperm(wfname, perm); - #ifdef HAVE_ACL -! /* -! * Probably need to set the ACL before changing the user (can't set the -! * ACL on a file the user doesn't own). -! * On Solaris, with ZFS and the aclmode property set to "discard" (the -! * default), chmod() discards all part of a file's ACL that don't represent -! * the mode of the file. It's non-trivial for us to discover whether we're -! * in that situation, so we simply always re-set the ACL. -! */ -! # ifndef HAVE_SOLARIS_ZFS_ACL - if (!backup_copy) -+ # endif - mch_set_acl(wfname, acl); - #endif - #ifdef FEAT_CRYPT -*** ../vim-7.4.2034/src/version.c 2016-07-14 20:24:59.351396346 +0200 ---- src/version.c 2016-07-14 20:34:53.154732074 +0200 -*************** -*** 760,761 **** ---- 760,763 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 2035, - /**/ - diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/7.4.692.patch --- a/components/vim/patches/7.4.692.patch Tue Oct 04 15:53:56 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -Pulled from http://ftp.vim.org/pub/vim/patches/7.4/7.4.692 -Removed the version.c bump. - -To: vim_dev@googlegroups.com -Subject: Patch 7.4.692 -Fcc: outbox -From: Bram Moolenaar -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.4.692 -Problem: Defining SOLARIS for no good reason. (Danek Duvall) -Solution: Remove it. -Files: src/os_unix.h - - -*** ../vim-7.4.691/src/os_unix.h 2014-03-25 13:46:22.841832960 +0100 ---- src/os_unix.h 2015-04-09 22:04:39.557343160 +0200 -*************** -*** 65,77 **** - #endif - - /* -- * Sun defines FILE on SunOS 4.x.x, Solaris has a typedef for FILE -- */ -- #if defined(sun) && !defined(FILE) -- # define SOLARIS -- #endif -- -- /* - * Using getcwd() is preferred, because it checks for a buffer overflow. - * Don't use getcwd() on systems do use system("sh -c pwd"). There is an - * autoconf check for this. ---- 65,70 ---- diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/7197223.patch --- a/components/vim/patches/7197223.patch Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/patches/7197223.patch Mon Sep 26 21:06:11 2016 -0700 @@ -1,6 +1,6 @@ ---- runtime/syntax/dtrace.vim Thu Sep 13 09:27:02 2012 -+++ runtime/syntax/dtrace.vim Thu Sep 13 09:27:15 2012 -@@ -40,8 +40,8 @@ +--- a/runtime/syntax/dtrace.vim Thu Sep 13 09:27:02 2012 ++++ b/runtime/syntax/dtrace.vim Thu Sep 13 09:27:15 2012 +@@ -35,8 +35,8 @@ " XXX: This allows a probe description to end with ',', even if it's not " followed by another probe. " XXX: This doesn't work if followed by a comment. diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/build_date.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/vim/patches/build_date.patch Mon Sep 26 21:06:11 2016 -0700 @@ -0,0 +1,102 @@ +From 51ad2b56dce42fa1a44ba663946ffe04bd3e4378 Mon Sep 17 00:00:00 2001 +From: James McCoy +Date: Thu, 28 Jan 2016 10:55:11 -0500 +Subject: [PATCH] Support defining compilation date in $SOURCE_DATE_EPOCH + +There is an ongoing effort[0] to make FOSS software reproducibly +buildable. In order to make Vim build reproducibly, it is necessary to +allow defining the date/time that is part of VIM_VERSION_LONG as part of +the build process. + +This commit enables that by adding support for the SOURCE_DATE_EPOCH +spec[1]. When the $SOURCE_DATE_EPOCH environment variable is defined, +it will be used to populate the BUILD_DATE preprocessor define. + +If BUILD_DATE is not defined, the existing behavior of relying on the +preprocessor's __DATE__/__TIME__ symbols will be used. + +[0]: https://reproducible-builds.org/ +[1]: https://reproducible-builds.org/specs/source-date-epoch/ +--- + src/config.h.in | 3 +++ + src/configure.in | 10 ++++++++++ + src/version.c | 6 ++++++ + 3 files changed, 19 insertions(+) + +diff --git a/src/auto/configure b/src/auto/configure +index fea1f2c..4698269 100755 +--- a/src/auto/configure ++++ b/src/auto/configure +@@ -4081,6 +4081,15 @@ $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + fi + + ++if test -n "$SOURCE_DATE_EPOCH"; then ++ DATE_FMT="%b %d %Y %H:%M:%S" ++ BUILD_DATE=$(LC_ALL=C gdate -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT") ++ cat >>confdefs.h <<_ACEOF ++#define BUILD_DATE "$BUILD_DATE" ++_ACEOF ++ ++fi ++ + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5 + $as_echo_n "checking --enable-fail-if-missing argument... " >&6; } +diff --git a/src/config.h.in b/src/config.h.in +index 8e115f5..2b64247 100644 +--- a/src/config.h.in ++++ b/src/config.h.in +@@ -30,6 +30,9 @@ + /* Define when __DATE__ " " __TIME__ can be used */ + #undef HAVE_DATE_TIME + ++/* Defined as the date of last modification */ ++#undef BUILD_DATE ++ + /* Define when __attribute__((unused)) can be used */ + #undef HAVE_ATTRIBUTE_UNUSED + +diff --git a/src/configure.in b/src/configure.in +index 92a1bb5..70367ca 100644 +--- a/src/configure.in ++++ b/src/configure.in +@@ -29,6 +29,16 @@ dnl in autoconf needs it, where it uses STDC_HEADERS. + AC_HEADER_STDC + AC_HEADER_SYS_WAIT + ++dnl If $SOURCE_DATE_EPOCH is present in the environment, use that as the ++dnl "compiled" timestamp in :version's output. Attempt to get the formatted ++dnl date using GNU date syntax, BSD date syntax, and finally falling back to ++dnl just using the current time. ++if test -n "$SOURCE_DATE_EPOCH"; then ++ DATE_FMT="%b %d %Y %H:%M:%S" ++ BUILD_DATE=$(LC_ALL=C gdate -u -d "@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || LC_ALL=C date -u "+$DATE_FMT") ++ AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"]) ++fi ++ + dnl Check for the flag that fails if stuff are missing. + + AC_MSG_CHECKING(--enable-fail-if-missing argument) +diff --git a/src/version.c b/src/version.c +index 766937d..9cb6e57 100644 +--- a/src/version.c ++++ b/src/version.c +@@ -44,11 +44,17 @@ make_version(void) + * VAX C can't catenate strings in the preprocessor. + */ + strcpy(longVersion, VIM_VERSION_LONG_DATE); ++#ifdef BUILD_DATE ++ strcat(longVersion, BUILD_DATE); ++#else + strcat(longVersion, __DATE__); + strcat(longVersion, " "); + strcat(longVersion, __TIME__); ++#endif + strcat(longVersion, ")"); + } ++# elif defined(BUILD_DATE) ++char *longVersion = VIM_VERSION_LONG_DATE BUILD_DATE ")"; + # else + char *longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")"; + # endif diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/if_ruby_c.patch --- a/components/vim/patches/if_ruby_c.patch Tue Oct 04 15:53:56 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -# Apply ruby 2.0 fix to ruby 1.9 as well. Needed to allow -# vim to build with ruby 1.9. -# These changes were applied upstream to vim 7.4.224. See -# https://groups.google.com/forum/#!msg/vim_dev/r8wzUVNYIfQ/m0DM8Wt97vkJ - -# Also applies fixes for Ruby 2.1 -# from vim 7.4.570 -# https://github.com/vim/vim/commit/0c7485fdbb5023731b006572cc224cbf52e34288 -# and Ruby 2.2, from fixes to vim 7.4.705 -# https://github.com/vim/vim/commit/bbc1a592a0e0efd5101a58032e7e7cc9f3e9f417 - ---- src/if_ruby.c 2013-08-10 06:00:24.000000000 -0700 -+++ src/if_ruby.c 2015-09-16 15:16:02.741823755 -0700 -@@ -88,14 +88,24 @@ - # define rb_int2big rb_int2big_stub - #endif - --#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \ -+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 \ - && SIZEOF_INT < SIZEOF_LONG --/* Ruby 2.0 defines a number of static functions which use rb_fix2int and -+/* Ruby 1.9 defines a number of static functions which use rb_fix2int and - * rb_num2int if SIZEOF_INT < SIZEOF_LONG (64bit) */ - # define rb_fix2int rb_fix2int_stub - # define rb_num2int rb_num2int_stub - #endif - -+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21 -+/* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses -+ * rb_gc_writebarrier_unprotect_promoted if USE_RGENGC */ -+# define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub -+#endif -+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 22 -+# define rb_gc_writebarrier_unprotect rb_gc_writebarrier_unprotect_stub -+# define rb_check_type rb_check_type_stub -+#endif -+ - #include - #ifdef RUBY19_OR_LATER - # include -@@ -197,8 +207,10 @@ static void ruby_vim_init(void); - # define rb_inspect dll_rb_inspect - # define rb_int2inum dll_rb_int2inum - # if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 18 - # define rb_fix2int dll_rb_fix2int - # define rb_num2int dll_rb_num2int -+# endif - # define rb_num2uint dll_rb_num2uint - # endif - # define rb_lastline_get dll_rb_lastline_get -@@ -373,8 +385,20 @@ static VALUE (*dll_rb_require) (const ch - static void* (*ruby_process_options)(int, char**); - # endif - -+# if defined(USE_RGENGC) && USE_RGENGC -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21 -+static void (*dll_rb_gc_writebarrier_unprotect_promoted)(VALUE); -+# else -+static void (*dll_rb_gc_writebarrier_unprotect)(VALUE obj); -+# endif -+# endif -+ - # if defined(RUBY19_OR_LATER) && !defined(PROTO) -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 22 -+long rb_num2long_stub(VALUE x) -+# else - SIGNED_VALUE rb_num2long_stub(VALUE x) -+# endif - { - return dll_rb_num2long(x); - } -@@ -382,7 +406,7 @@ VALUE rb_int2big_stub(SIGNED_VALUE x) - { - return dll_rb_int2big(x); - } --# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \ -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 \ - && SIZEOF_INT < SIZEOF_LONG - long rb_fix2int_stub(VALUE x) - { -@@ -399,13 +423,39 @@ rb_float_new_in_heap(double d) - { - return dll_rb_float_new(d); - } -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 22 -+unsigned long rb_num2ulong(VALUE x) -+# else - VALUE rb_num2ulong(VALUE x) -+# endif - { - return (long)RSHIFT((SIGNED_VALUE)(x),1); - } - # endif - # endif - -+ /* Do not generate a prototype here, VALUE isn't always defined. */ -+# if defined(USE_RGENGC) && USE_RGENGC && !defined(PROTO) -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21 -+void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj) -+{ -+ dll_rb_gc_writebarrier_unprotect_promoted(obj); -+} -+# else -+void rb_gc_writebarrier_unprotect_stub(VALUE obj) -+{ -+ dll_rb_gc_writebarrier_unprotect(obj); -+} -+# endif -+# endif -+ -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 22 -+void rb_check_type_stub(VALUE v, int i) -+{ -+ dll_rb_check_type(v, i); -+} -+# endif -+ - static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */ - - /* -@@ -521,6 +571,13 @@ static struct - # endif - {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack}, - # endif -+# if defined(USE_RGENGC) && USE_RGENGC -+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER == 21 -+ {"rb_gc_writebarrier_unprotect_promoted", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect_promoted}, -+# else -+ {"rb_gc_writebarrier_unprotect", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect}, -+# endif -+# endif - {"", NULL}, - }; - diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/ja_JP.PCK.patch --- a/components/vim/patches/ja_JP.PCK.patch Tue Oct 04 15:53:56 2016 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -A fix by Keiichi Oono : -ftp://ftp.vim.org/pub/vim/patches/7.4/7.4.520 - ---- -diff --git src/mbyte.c src/mbyte.c ---- src/mbyte.c -+++ src/mbyte.c -@@ -405,6 +405,7 @@ enc_alias_table[] = - {"unix-jis", IDX_EUC_JP}, - {"ujis", IDX_EUC_JP}, - {"shift-jis", IDX_SJIS}, -+ {"pck", IDX_SJIS}, /* Sun: PCK */ - {"euckr", IDX_EUC_KR}, - {"5601", IDX_EUC_KR}, /* Sun: KS C 5601 */ - {"euccn", IDX_EUC_CN}, diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/si_id.patch --- a/components/vim/patches/si_id.patch Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/patches/si_id.patch Mon Sep 26 21:06:11 2016 -0700 @@ -4,9 +4,9 @@ since that appears to be "reserved for the implementation", per the OpenGroup specs. ---- src/syntax.c Sat Aug 10 06:00:24 2013 -+++ src/syntax.c Wed Jan 6 10:34:12 2016 -@@ -279,6 +279,7 @@ +--- a/src/syntax.c Sat Aug 10 06:00:24 2013 ++++ b/src/syntax.c Wed Jan 6 10:34:12 2016 +@@ -283,6 +283,7 @@ * When si_m_endpos.lnum is 0, the items other than si_idx are unknown. * (The end positions have the column number of the next char) */ diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/var_tabstops.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/vim/patches/var_tabstops.patch Mon Sep 26 21:06:11 2016 -0700 @@ -0,0 +1,1914 @@ +Repository: +https://github.com/chrisbra/vim-mq-patches +git://github.com/chrisbra/vim-mq-patches.git + +Filename: +var_tabstops + +Latest update for: +vim-7.4.796 + +Bug reports: +http://www.vim.org/maillist.php + +License & Copyright: +© 2008 Matthew Winn +───────────────────────────────────────────────────────────────────────────── + +Christian Brabandt 20150725 +- fix offsets, fix compiler warnings (option not correctly initialized) + +Christian Brabandt 20150609 +- updated offsets and have the tests apply cleanly + +Christian Brabandt 20141102: +- correctly cache vts values when calculating the breakindent + +Christian Brabandt 20141030 +[DONE] TODO: test_breakindent.out breaks, if instead of using 'ts' setting 'vts' setting is used. +[DONE] TODO: get_breakindent_win should use vts value +[DONE] TODO: get_indent_str_vtab should also use the true/false variable for checking screen size of a tab! + +Roland Eggner 2014-10-23 vim-7.4.488 +Fixed insertion of 4 lines after src/option.c:5439 -- due to context change in +vim-7.4.456, “hg qrefresh” inserted erroneously with fuzz 2 and -111 lines offset. +Fixed rejections of src/testdir/Make{_{{amiga,dos,ming,os2}.mak,vms.mms},file} . + +Roland Eggner 2014-09-09 vim-7.4.430 +Readded src/testdir/test_vartabs.{in,ok} based on an older version of this patch. +Fixed rejections of src/testdir/Make{_{{amiga,dos,ming,os2}.mak,vms.mms},file} . + +diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt +index e2148b3..8ac07bd 100644 +--- a/runtime/doc/change.txt ++++ b/runtime/doc/change.txt +@@ -984,6 +984,11 @@ This replaces each 'E' character with a euro sign. Read more in ||. + this (that's a good habit anyway). + `:retab!` may also change a sequence of spaces by + characters, which can mess up a printf(). ++ If the |+vartabs| feature is enabled then a list of ++ tab widths separated by commas may be used in place of ++ a single tabstop. Each value in the list represents ++ the width of one tabstop, except the final value which ++ applies to all following tabstops. + {not in Vi} + + *retab-example* +diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt +index 30ea88d..80f658c 100644 +--- a/runtime/doc/options.txt ++++ b/runtime/doc/options.txt +@@ -6853,6 +6853,10 @@ A jump table for the options with a short description can be found at |Q_op|. + set. + NOTE: This option is set to 0 when 'compatible' is set. + ++ If Vim is compiled with the |+vartabs| feature then the value of ++ 'softtabstop' will be ignored if |'varsofttabstop'| is set to ++ anything other than an empty string. ++ + *'spell'* *'nospell'* + 'spell' boolean (default off) + local to window +@@ -7402,6 +7406,10 @@ A jump table for the options with a short description can be found at |Q_op|. + though. Otherwise aligned comments will be wrong when 'tabstop' is + changed. + ++ If Vim is compiled with the |+vartabs| feature then the value of ++ 'tabstop' will be ignored if |'vartabstop'| is set to anything other ++ than an empty string. ++ + *'tagbsearch'* *'tbs'* *'notagbsearch'* *'notbs'* + 'tagbsearch' 'tbs' boolean (default on) + global +@@ -8086,6 +8094,44 @@ A jump table for the options with a short description can be found at |Q_op|. + written to disk (see |crash-recovery|). Also used for the + |CursorHold| autocommand event. + ++ *'varsofttabstop'* *'vsts'* ++'varsofttabstop' 'vsts' string (default "") ++ local to buffer ++ {only available when compiled with the |+vartabs| ++ feature} ++ {not in Vi} ++ A list of the number of spaces that a counts for while editing, ++ such as inserting a or using . It "feels" like variable- ++ width s are being inserted, while in fact a mixture of spaces ++ and s is used. Tab widths are separated with commas, with the ++ final value applying to all subsequent tabs. ++ ++ For example, when editing assembly language files where statements ++ start in the 8th column and comments in the 40th, it may be useful ++ to use the following: > ++ :set varsofttabstop=8,32,8 ++< This will set soft tabstops at the 8th and 40th columns, and at every ++ 8th column thereafter. ++ ++ Note that the value of |'softtabstop'| will be ignored while ++ 'varsofttabstop' is set. ++ ++ *'vartabstop'* *'vts'* ++'vartabstop' 'vts' string (default "") ++ local to buffer ++ {only available when compiled with the |+vartabs| ++ feature} ++ {not in Vi} ++ A list of the number of spaces that a in the file counts for, ++ separated by commas. Each value corresponds to one tab, with the ++ final value applying to all subsequent tabs. For example: > ++ :set vartabstop=4,20,10,8 ++< This will make the first tab 4 spaces wide, the second 20 spaces, ++ the third 10 spaces, and all following tabs 8 spaces. ++ ++ Note that the value of |'tabstop'| will be ignored while 'vartabstop' ++ is set. ++ + *'verbose'* *'vbs'* + 'verbose' 'vbs' number (default 0) + global +diff --git a/runtime/doc/tags b/runtime/doc/tags +index 7eaf6a0..1e068b3 100644 +--- a/runtime/doc/tags ++++ b/runtime/doc/tags +@@ -1105,6 +1105,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX* + 'updatetime' options.txt /*'updatetime'* + 'ur' options.txt /*'ur'* + 'ut' options.txt /*'ut'* ++'varsofttabstop' options.txt /*'varsofttabstop'* ++'vartabstop' options.txt /*'vartabstop'* + 'vb' options.txt /*'vb'* + 'vbs' options.txt /*'vbs'* + 'vdir' options.txt /*'vdir'* +@@ -1119,6 +1121,8 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX* + 'virtualedit' options.txt /*'virtualedit'* + 'visualbell' options.txt /*'visualbell'* + 'vop' options.txt /*'vop'* ++'vsts' options.txt /*'vsts'* ++'vts' options.txt /*'vts'* + 'w1200' vi_diff.txt /*'w1200'* + 'w300' vi_diff.txt /*'w300'* + 'w9600' vi_diff.txt /*'w9600'* +@@ -1308,6 +1312,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX* + +title various.txt /*+title* + +toolbar various.txt /*+toolbar* + +user_commands various.txt /*+user_commands* +++vartabs various.txt /*+vartabs* + +vertsplit various.txt /*+vertsplit* + +viminfo various.txt /*+viminfo* + +virtualedit various.txt /*+virtualedit* +diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt +index 729fff5..2f68370 100644 +--- a/runtime/doc/various.txt ++++ b/runtime/doc/various.txt +@@ -436,6 +436,7 @@ N *+timers* the |timer_start()| function + N *+title* Setting the window 'title' and 'icon' + N *+toolbar* |gui-toolbar| + N *+user_commands* User-defined commands. |user-commands| ++B *+vartabs* Variable-width tabstops. |'vartabstop'| + N *+viminfo* |'viminfo'| + N *+vertsplit* Vertically split windows |:vsplit| + N *+virtualedit* |'virtualedit'| +diff --git a/runtime/optwin.vim b/runtime/optwin.vim +index d759c04..ae59692 100644 +--- a/runtime/optwin.vim ++++ b/runtime/optwin.vim +@@ -833,6 +833,14 @@ call OptionL("ts") + call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent") + call append("$", "\t(local to buffer)") + call OptionL("sw") ++if has("vartabs") ++ call append("$", "vartabstop\tlist of number of spaces a tab counts for") ++ call append("$", "\t(local to buffer)") ++ call OptionL("vts") ++ call append("$", "varsofttabstop\tlist of number of spaces a soft tabsstop counts for") ++ call append("$", "\t(local to buffer)") ++ call OptionL("vsts") ++endif + call append("$", "smarttab\ta in an indent inserts 'shiftwidth' spaces") + call BinOptionG("sta", &sta) + call append("$", "softtabstop\tif non-zero, number of spaces to insert for a ") +diff --git a/src/buffer.c b/src/buffer.c +index b013295..94bcb70 100644 +--- a/src/buffer.c ++++ b/src/buffer.c +@@ -2160,6 +2160,19 @@ free_buf_options( + clear_string_option(&buf->b_p_fo); + clear_string_option(&buf->b_p_flp); + clear_string_option(&buf->b_p_isk); ++#ifdef FEAT_VARTABS ++ clear_string_option(&buf->b_p_vsts); ++ if (buf->b_p_vsts_nopaste) ++ vim_free(buf->b_p_vsts_nopaste); ++ buf->b_p_vsts_nopaste = 0; ++ if (buf->b_p_vsts_ary) ++ vim_free(buf->b_p_vsts_ary); ++ buf->b_p_vsts_ary = 0; ++ clear_string_option(&buf->b_p_vts); ++ if (buf->b_p_vts_ary) ++ vim_free(buf->b_p_vts_ary); ++ buf->b_p_vts_ary = 0; ++#endif + #ifdef FEAT_KEYMAP + clear_string_option(&buf->b_p_keymap); + ga_clear(&buf->b_kmap_ga); +diff --git a/src/charset.c b/src/charset.c +index 134cd09..ed1f526 100644 +--- a/src/charset.c ++++ b/src/charset.c +@@ -812,6 +812,15 @@ vim_strnsize(char_u *s, int len) + * Also see getvcol() below. + */ + ++#ifdef FEAT_VARTABS ++#define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \ ++ if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \ ++ { \ ++ return tabstop_padding(col, (buf)->b_p_ts, (buf)->b_p_vts_ary); \ ++ } \ ++ else \ ++ return ptr2cells(p); ++#else + #define RET_WIN_BUF_CHARTABSIZE(wp, buf, p, col) \ + if (*(p) == TAB && (!(wp)->w_p_list || lcs_tab1)) \ + { \ +@@ -821,6 +830,7 @@ vim_strnsize(char_u *s, int len) + } \ + else \ + return ptr2cells(p); ++#endif + + int + chartabsize(char_u *p, colnr_T col) +@@ -1225,8 +1235,13 @@ win_nolbr_chartabsize( + + if (*s == TAB && (!wp->w_p_list || lcs_tab1)) + { ++# ifdef FEAT_VARTABS ++ return tabstop_padding(col, wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_ary); ++# else + n = wp->w_buffer->b_p_ts; + return (int)(n - (col % n)); ++# endif + } + n = ptr2cells(s); + /* Add one cell for a double-width character in the last column of the +@@ -1288,6 +1303,9 @@ getvcol( + char_u *line; /* start of the line */ + int incr; + int head; ++#ifdef FEAT_VARTABS ++ int *vts = wp->w_buffer->b_p_vts_ary; ++#endif + int ts = wp->w_buffer->b_p_ts; + int c; + +@@ -1327,7 +1345,11 @@ getvcol( + } + /* A tab gets expanded, depending on the current column */ + if (c == TAB) ++#ifdef FEAT_VARTABS ++ incr = tabstop_padding(vcol, ts, vts); ++#else + incr = ts - (vcol % ts); ++#endif + else + { + #ifdef FEAT_MBYTE +diff --git a/src/edit.c b/src/edit.c +index a87c155..2d2c89a 100644 +--- a/src/edit.c ++++ b/src/edit.c +@@ -716,7 +716,13 @@ edit( + mincol = curwin->w_wcol; + validate_cursor_col(); + +- if ((int)curwin->w_wcol < mincol - curbuf->b_p_ts ++ if ( ++#ifdef FEAT_VARTABS ++ (int)curwin->w_wcol < mincol ++ - tabstop_at(get_nolist_virtcol(), curbuf->b_p_ts, curbuf->b_p_vts_ary) ++#else ++ (int)curwin->w_wcol < mincol - curbuf->b_p_ts ++#endif + && curwin->w_wrow == W_WINROW(curwin) + + curwin->w_height - 1 - p_so + && (curwin->w_cursor.lnum != curwin->w_topline +@@ -9078,23 +9084,31 @@ ins_bs( + */ + if ( mode == BACKSPACE_CHAR + && ((p_sta && in_indent) +- || (get_sts_value() != 0 ++ || ((get_sts_value() != 0 ++#ifdef FEAT_VARTABS ++ || tabstop_count(curbuf->b_p_vsts_ary) ++#endif ++ ) + && curwin->w_cursor.col > 0 + && (*(ml_get_cursor() - 1) == TAB + || (*(ml_get_cursor() - 1) == ' ' + && (!*inserted_space_p + || arrow_used)))))) + { ++#ifndef FEAT_VARTABS + int ts; ++#endif + colnr_T vcol; + colnr_T want_vcol; + colnr_T start_vcol; + + *inserted_space_p = FALSE; ++#ifndef FEAT_VARTABS + if (p_sta && in_indent) + ts = (int)get_sw_value(curbuf); + else + ts = (int)get_sts_value(); ++#endif + /* Compute the virtual column where we want to be. Since + * 'showbreak' may get in the way, need to get the last column of + * the previous character. */ +@@ -9103,7 +9117,15 @@ ins_bs( + dec_cursor(); + getvcol(curwin, &curwin->w_cursor, NULL, NULL, &want_vcol); + inc_cursor(); ++#ifdef FEAT_VARTABS ++ if (p_sta && in_indent) ++ want_vcol = (want_vcol / curbuf->b_p_sw) * curbuf->b_p_sw; ++ else ++ want_vcol = tabstop_start(want_vcol, curbuf->b_p_sts, ++ curbuf->b_p_vsts_ary); ++#else + want_vcol = (want_vcol / ts) * ts; ++#endif + + /* delete characters until we are at or before want_vcol */ + while (vcol > want_vcol +@@ -9809,7 +9831,18 @@ ins_tab(void) + * When nothing special, insert TAB like a normal character + */ + if (!curbuf->b_p_et ++#ifdef FEAT_VARTABS ++ && !(p_sta && ind ++ /* These five lines mean 'tabstop' != 'shiftwidth' */ ++ && ((tabstop_count(curbuf->b_p_vts_ary) > 1) ++ || (tabstop_count(curbuf->b_p_vts_ary) == 1 ++ && tabstop_first(curbuf->b_p_vts_ary) != get_sw_value(curbuf)) ++ || (tabstop_count(curbuf->b_p_vts_ary) == 0 ++ && curbuf->b_p_ts != get_sw_value(curbuf)))) ++ && tabstop_count(curbuf->b_p_vsts_ary) == 0 ++#else + && !(p_sta && ind && curbuf->b_p_ts != get_sw_value(curbuf)) ++#endif + && get_sts_value() == 0) + return TRUE; + +@@ -9824,6 +9857,20 @@ ins_tab(void) + #endif + AppendToRedobuff((char_u *)"\t"); + ++#ifdef FEAT_VARTABS ++ if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ ++ { ++ temp = (int)curbuf->b_p_sw; ++ temp -= get_nolist_virtcol() % temp; ++ } ++ else if (tabstop_count(curbuf->b_p_vsts_ary) > 0 || curbuf->b_p_sts > 0) ++ /* use 'softtabstop' when set */ ++ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_sts, ++ curbuf->b_p_vsts_ary); ++ else /* otherwise use 'tabstop' */ ++ temp = tabstop_padding(get_nolist_virtcol(), curbuf->b_p_ts, ++ curbuf->b_p_vts_ary); ++#else + if (p_sta && ind) /* insert tab in indent, use 'shiftwidth' */ + temp = (int)get_sw_value(curbuf); + else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */ +@@ -9831,6 +9878,7 @@ ins_tab(void) + else /* otherwise use 'tabstop' */ + temp = (int)curbuf->b_p_ts; + temp -= get_nolist_virtcol() % temp; ++#endif + + /* + * Insert the first space with ins_char(). It will delete one char in +@@ -9855,7 +9903,13 @@ ins_tab(void) + /* + * When 'expandtab' not set: Replace spaces by TABs where possible. + */ ++#ifdef FEAT_VARTABS ++ if (!curbuf->b_p_et && (tabstop_count(curbuf->b_p_vsts_ary) > 0 ++ || get_sts_value() > 0 ++ || (p_sta && ind))) ++#else + if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind))) ++#endif + { + char_u *ptr; + #ifdef FEAT_VREPLACE +diff --git a/src/evalfunc.c b/src/evalfunc.c +index 7dd5c2a..2edd610 100644 +--- a/src/evalfunc.c ++++ b/src/evalfunc.c +@@ -5852,6 +5852,9 @@ f_has(typval_T *argvars, typval_T *rettv) + "user-commands", /* was accidentally included in 5.4 */ + "user_commands", + #endif ++#ifdef FEAT_VARTABS ++ "vartabs", ++#endif + #ifdef FEAT_VIMINFO + "viminfo", + #endif +diff --git a/src/ex_cmds.c b/src/ex_cmds.c +index 6535de1..3221ab6 100644 +--- a/src/ex_cmds.c ++++ b/src/ex_cmds.c +@@ -654,12 +654,17 @@ ex_retab(exarg_T *eap) + long vcol; + long start_col = 0; /* For start of white-space string */ + long start_vcol = 0; /* For start of white-space string */ +- int temp; + long old_len; + char_u *ptr; + char_u *new_line = (char_u *)1; /* init to non-NULL */ + int did_undo; /* called u_save for current line */ ++#ifdef FEAT_VARTABS ++ int *new_ts = 0; ++ char_u *new_ts_str; /* string value of tab argument */ ++#else ++ int temp; + int new_ts; ++#endif + int save_list; + linenr_T first_line = 0; /* first changed line */ + linenr_T last_line = 0; /* last changed line */ +@@ -667,6 +672,27 @@ ex_retab(exarg_T *eap) + save_list = curwin->w_p_list; + curwin->w_p_list = 0; /* don't want list mode here */ + ++#ifdef FEAT_VARTABS ++ new_ts_str = eap->arg; ++ if (vim_isdigit(*(eap->arg)) && !tabstop_set(eap->arg, &new_ts)) ++ { ++ EMSG(_(e_invarg)); ++ return; ++ } ++ while (vim_isdigit(*(eap->arg)) || *(eap->arg) == ',') ++ ++(eap->arg); ++ ++ /* This ensures that either new_ts and new_ts_str are freshly allocated, ++ * or new_ts points to an existing array and new_ts_str is null. ++ */ ++ if (new_ts == 0) ++ { ++ new_ts = curbuf->b_p_vts_ary; ++ new_ts_str = NULL; ++ } ++ else ++ new_ts_str = vim_strnsave(new_ts_str, eap->arg - new_ts_str); ++#else + new_ts = getdigits(&(eap->arg)); + if (new_ts < 0) + { +@@ -675,6 +701,7 @@ ex_retab(exarg_T *eap) + } + if (new_ts == 0) + new_ts = curbuf->b_p_ts; ++#endif + for (lnum = eap->line1; !got_int && lnum <= eap->line2; ++lnum) + { + ptr = ml_get(lnum); +@@ -707,6 +734,15 @@ ex_retab(exarg_T *eap) + num_tabs = 0; + if (!curbuf->b_p_et) + { ++#ifdef FEAT_VARTABS ++ int t, s; ++ tabstop_fromto(start_vcol, vcol, ++ tabstop_count(new_ts)? 0: curbuf->b_p_ts, ++ new_ts, ++ &t, &s); ++ num_tabs = t; ++ num_spaces = s; ++#else + temp = new_ts - (start_vcol % new_ts); + if (num_spaces >= temp) + { +@@ -715,6 +751,7 @@ ex_retab(exarg_T *eap) + } + num_tabs += num_spaces / new_ts; + num_spaces -= (num_spaces / new_ts) * new_ts; ++#endif + } + if (curbuf->b_p_et || got_tab || + (num_spaces + num_tabs < len)) +@@ -772,14 +809,54 @@ ex_retab(exarg_T *eap) + if (got_int) + EMSG(_(e_interr)); + ++#ifdef FEAT_VARTABS ++ /* If a single value was given then it can be considered equal to ++ * either the value of 'tabstop' or the value of 'vartabstop'. ++ */ ++ if (tabstop_count(curbuf->b_p_vts_ary) == 0 ++ && tabstop_count(new_ts) == 1 ++ && curbuf->b_p_ts == tabstop_first(new_ts)) ++ ; /* not changed */ ++ else if (tabstop_count(curbuf->b_p_vts_ary) > 0 ++ && tabstop_eq(curbuf->b_p_vts_ary, new_ts)) ++ ; /* not changed */ ++ else ++ redraw_curbuf_later(NOT_VALID); ++#else + if (curbuf->b_p_ts != new_ts) + redraw_curbuf_later(NOT_VALID); ++#endif + if (first_line != 0) + changed_lines(first_line, 0, last_line + 1, 0L); + + curwin->w_p_list = save_list; /* restore 'list' */ + ++#ifdef FEAT_VARTABS ++ if (new_ts_str != NULL) /* set the new tabstop */ ++ { ++ /* If 'vartabstop' is in use or if the value given to retab has more ++ * than one tabstop then update 'vartabstop'. ++ */ ++ int* old_vts_ary = curbuf->b_p_vts_ary; ++ if (tabstop_count(old_vts_ary) > 0 || tabstop_count(new_ts) > 1) { ++ set_string_option_direct((char_u *)"vts", -1, new_ts_str, ++ OPT_FREE|OPT_LOCAL, 0); ++ vim_free(new_ts_str); ++ curbuf->b_p_vts_ary = new_ts; ++ vim_free(old_vts_ary); ++ } ++ /* If 'vartabstop' wasn't in use and a single value was given to ++ * retab then update 'tabstop'. ++ */ ++ else ++ { ++ curbuf->b_p_ts = tabstop_first(new_ts); ++ vim_free(new_ts); ++ } ++ } ++#else + curbuf->b_p_ts = new_ts; ++#endif + coladvance(curwin->w_curswant); + + u_clearline(); +diff --git a/src/feature.h b/src/feature.h +index 138279e..d80ec7d 100644 +--- a/src/feature.h ++++ b/src/feature.h +@@ -830,6 +830,13 @@ + #endif + + /* ++ * +vartabs 'vartabstop' and 'varsofttabstop' options. ++ */ ++#ifdef FEAT_BIG ++# define FEAT_VARTABS ++#endif ++ ++/* + * Preferences: + * ============ + */ +diff --git a/src/gui_beval.c b/src/gui_beval.c +index 4a7c06e..314160f 100644 +--- a/src/gui_beval.c ++++ b/src/gui_beval.c +@@ -241,6 +241,9 @@ gui_mch_create_beval_area( + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; ++#ifdef FEAT_VARTABS ++ beval->vts = 0; ++#endif + + /* + * Set up event handler which will keep its eyes on the pointer, +@@ -283,6 +286,10 @@ gui_mch_destroy_beval_area(BalloonEval *beval) + # else + XtDestroyWidget(beval->balloonShell); + # endif ++# ifdef FEAT_VARTABS ++ if (beval->vts) ++ vim_free(beval->vts); ++# endif + vim_free(beval); + } + #endif +@@ -420,6 +427,11 @@ get_beval_info( + *lnump = lnum; + *textp = lbuf; + *colp = col; ++#ifdef FEAT_VARTABS ++ if (beval->vts) ++ vim_free(beval->vts); ++ beval->vts = tabstop_copy(wp->w_buffer->b_p_vts_ary); ++#endif + beval->ts = wp->w_buffer->b_p_ts; + return OK; + } +diff --git a/src/gui_beval.h b/src/gui_beval.h +index 4fa4c75..3f913fd 100644 +--- a/src/gui_beval.h ++++ b/src/gui_beval.h +@@ -62,6 +62,9 @@ typedef struct BalloonEvalStruct + BeState showState; /* tells us whats currently going on */ + # endif + #endif ++#ifdef FEAT_VARTABS ++ int *vts; /* vartabstop setting for this buffer */ ++#endif + int ts; /* tabstop setting for this buffer */ + char_u *msg; + void (*msgCB)(struct BalloonEvalStruct *, int); +diff --git a/src/gui_w32.c b/src/gui_w32.c +index 75d600f..7178cbd 100644 +--- a/src/gui_w32.c ++++ b/src/gui_w32.c +@@ -8892,6 +8892,9 @@ gui_mch_create_beval_area( + beval->msg = mesg; + beval->msgCB = mesgCB; + beval->clientData = clientData; ++#ifdef FEAT_VARTABS ++ beval->vts = 0; ++#endif + + InitCommonControls(); + cur_beval = beval; +@@ -8949,6 +8952,10 @@ TrackUserActivity(UINT uMsg) + void + gui_mch_destroy_beval_area(BalloonEval *beval) + { ++#ifdef FEAT_VARTABS ++ if (beval->vts) ++ vim_free(beval->vts); ++#endif + vim_free(beval); + } + #endif /* FEAT_BEVAL */ +diff --git a/src/hardcopy.c b/src/hardcopy.c +index 449bfbd..d9191f3 100644 +--- a/src/hardcopy.c ++++ b/src/hardcopy.c +@@ -915,7 +915,12 @@ hardcopy_line( + if (line[col] == TAB || tab_spaces != 0) + { + if (tab_spaces == 0) ++#ifdef FEAT_VARTABS ++ tab_spaces = tabstop_padding(print_pos, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary); ++#else + tab_spaces = (int)(curbuf->b_p_ts - (print_pos % curbuf->b_p_ts)); ++#endif + + while (tab_spaces > 0) + { +diff --git a/src/message.c b/src/message.c +index f8152a7..d0cf9da 100644 +--- a/src/message.c ++++ b/src/message.c +@@ -1702,7 +1702,11 @@ msg_prt_line(char_u *s, int list) + if (c == TAB && (!list || lcs_tab1)) + { + /* tab amount depends on current column */ ++#ifdef FEAT_VARTABS ++ n_extra = tabstop_padding(col, curbuf->b_p_ts, curbuf->b_p_vts_ary) - 1; ++#else + n_extra = curbuf->b_p_ts - col % curbuf->b_p_ts - 1; ++#endif + if (!list) + { + c = ' '; +diff --git a/src/misc1.c b/src/misc1.c +index 79014cf..8d67a47 100644 +--- a/src/misc1.c ++++ b/src/misc1.c +@@ -32,7 +32,11 @@ static garray_T ga_users; + int + get_indent(void) + { ++#ifdef FEAT_VARTABS ++ return get_indent_str_vtab(ml_get_curline(), (int)curbuf->b_p_ts, curbuf->b_p_vts_ary, FALSE); ++#else + return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts, FALSE); ++#endif + } + + /* +@@ -41,7 +45,11 @@ get_indent(void) + int + get_indent_lnum(linenr_T lnum) + { ++#ifdef FEAT_VARTABS ++ return get_indent_str_vtab(ml_get(lnum), (int)curbuf->b_p_ts, curbuf->b_p_vts_ary, FALSE); ++#else + return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts, FALSE); ++#endif + } + + #if defined(FEAT_FOLDING) || defined(PROTO) +@@ -52,7 +60,11 @@ get_indent_lnum(linenr_T lnum) + int + get_indent_buf(buf_T *buf, linenr_T lnum) + { ++#ifdef FEAT_VARTABS ++ return get_indent_str_vtab(ml_get_buf(buf, lnum, FALSE), (int)curbuf->b_p_ts, buf->b_p_vts_ary, FALSE); ++#else + return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts, FALSE); ++#endif + } + #endif + +@@ -87,6 +99,40 @@ get_indent_str( + return count; + } + ++#ifdef FEAT_VARTABS ++/* ++ * count the size (in window cells) of the indent in line "ptr", using ++ * variable tabstops ++ */ ++ int ++get_indent_str_vtab(ptr, ts, vts, list) ++ char_u *ptr; ++ int ts; ++ int *vts; ++ int list; /* if TRUE, count only screen size for tabs */ ++{ ++ int count = 0; ++ ++ for ( ; *ptr; ++ptr) ++ { ++ if (*ptr == TAB) /* count a tab for what it is worth */ ++ { ++ if (!list || lcs_tab1) ++ count += tabstop_padding(count, ts, vts); ++ else ++ /* In list mode, when tab is not set, count screen char width ++ * for Tab, displays: ^I */ ++ count += ptr2cells(ptr); ++ } ++ else if (*ptr == ' ') ++ ++count; /* count a space for one */ ++ else ++ break; ++ } ++ return count; ++} ++#endif ++ + /* + * Set the indent of the current line. + * Leaves the cursor on the first non-blank in the line. +@@ -111,6 +157,9 @@ set_indent( + int line_len; + int doit = FALSE; + int ind_done = 0; /* measured in spaces */ ++#ifdef FEAT_VARTABS ++ int ind_col = 0; ++#endif + int tab_pad; + int retval = FALSE; + int orig_char_len = -1; /* number of initial whitespace chars when +@@ -143,8 +192,13 @@ set_indent( + { + if (*p == TAB) + { ++#ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary); ++#else + tab_pad = (int)curbuf->b_p_ts + - (ind_done % (int)curbuf->b_p_ts); ++#endif + /* stop if this tab will overshoot the target */ + if (todo < tab_pad) + break; +@@ -161,23 +215,50 @@ set_indent( + ++p; + } + ++#ifdef FEAT_VARTABS ++ /* These diverge from this point. */ ++ ind_col = ind_done; ++#endif + /* Set initial number of whitespace chars to copy if we are + * preserving indent but expandtab is set */ + if (curbuf->b_p_et) + orig_char_len = ind_len; + + /* Fill to next tabstop with a tab, if possible */ ++#ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary); ++#else + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); ++#endif + if (todo >= tab_pad && orig_char_len == -1) + { + doit = TRUE; + todo -= tab_pad; + ++ind_len; + /* ind_done += tab_pad; */ ++#ifdef FEAT_VARTABS ++ ind_col += tab_pad; ++#endif + } + } + + /* count tabs required for indent */ ++#ifdef FEAT_VARTABS ++ for (;;) ++ { ++ tab_pad = tabstop_padding(ind_col, curbuf->b_p_ts, curbuf->b_p_vts_ary); ++ if (todo < tab_pad) ++ break; ++ if (*p != TAB) ++ doit = TRUE; ++ else ++ ++p; ++ todo -= tab_pad; ++ ++ind_len; ++ ind_col += tab_pad; ++ } ++#else + while (todo >= (int)curbuf->b_p_ts) + { + if (*p != TAB) +@@ -188,6 +269,7 @@ set_indent( + ++ind_len; + /* ind_done += (int)curbuf->b_p_ts; */ + } ++#endif + } + /* count spaces required for indent */ + while (todo > 0) +@@ -262,8 +344,13 @@ set_indent( + { + if (*p == TAB) + { ++#ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary); ++#else + tab_pad = (int)curbuf->b_p_ts + - (ind_done % (int)curbuf->b_p_ts); ++#endif + /* stop if this tab will overshoot the target */ + if (todo < tab_pad) + break; +@@ -279,21 +366,41 @@ set_indent( + } + + /* Fill to next tabstop with a tab, if possible */ ++#ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary); ++#else + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); ++#endif + if (todo >= tab_pad) + { + *s++ = TAB; + todo -= tab_pad; ++#ifdef FEAT_VARTABS ++ ind_done += tab_pad; ++#endif + } + + p = skipwhite(p); + } + ++#ifdef FEAT_VARTABS ++ for (;;) ++ { ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, curbuf->b_p_vts_ary); ++ if (todo < tab_pad) ++ break; ++ *s++ = TAB; ++ todo -= tab_pad; ++ ind_done += tab_pad; ++ } ++#else + while (todo >= (int)curbuf->b_p_ts) + { + *s++ = TAB; + todo -= (int)curbuf->b_p_ts; + } ++#endif + } + while (todo > 0) + { +@@ -346,6 +453,9 @@ copy_indent(int size, char_u *src) + int tab_pad; + int ind_done; + int round; ++#ifdef FEAT_VARTABS ++ int ind_col; ++#endif + + /* Round 1: compute the number of characters needed for the indent + * Round 2: copy the characters. */ +@@ -354,6 +464,9 @@ copy_indent(int size, char_u *src) + todo = size; + ind_len = 0; + ind_done = 0; ++#ifdef FEAT_VARTABS ++ ind_col = 0; ++#endif + s = src; + + /* Count/copy the usable portion of the source line */ +@@ -361,18 +474,28 @@ copy_indent(int size, char_u *src) + { + if (*s == TAB) + { ++#ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, curbuf->b_p_vts_ary); ++#else + tab_pad = (int)curbuf->b_p_ts + - (ind_done % (int)curbuf->b_p_ts); ++#endif + /* Stop if this tab will overshoot the target */ + if (todo < tab_pad) + break; + todo -= tab_pad; + ind_done += tab_pad; ++#ifdef FEAT_VARTABS ++ ind_col += tab_pad; ++#endif + } + else + { + --todo; + ++ind_done; ++#ifdef FEAT_VARTABS ++ ++ind_col; ++#endif + } + ++ind_len; + if (p != NULL) +@@ -381,22 +504,46 @@ copy_indent(int size, char_u *src) + } + + /* Fill to next tabstop with a tab, if possible */ ++#ifdef FEAT_VARTABS ++ tab_pad = tabstop_padding(ind_done, curbuf->b_p_ts, curbuf->b_p_vts_ary); ++#else + tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts); ++#endif + if (todo >= tab_pad && !curbuf->b_p_et) + { + todo -= tab_pad; + ++ind_len; ++#ifdef FEAT_VARTABS ++ ind_col += tab_pad; ++#endif + if (p != NULL) + *p++ = TAB; + } + + /* Add tabs required for indent */ +- while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et) ++ if (!curbuf->b_p_et) + { +- todo -= (int)curbuf->b_p_ts; +- ++ind_len; +- if (p != NULL) +- *p++ = TAB; ++#ifdef FEAT_VARTABS ++ for (;;) ++ { ++ tab_pad = tabstop_padding(ind_col, curbuf->b_p_ts, curbuf->b_p_vts_ary); ++ if (todo < tab_pad) ++ break; ++ todo -= tab_pad; ++ ++ind_len; ++ ind_col += tab_pad; ++ if (p != NULL) ++ *p++ = TAB; ++ } ++#else ++ while (todo >= (int)curbuf->b_p_ts) ++ { ++ todo -= (int)curbuf->b_p_ts; ++ ++ind_len; ++ if (p != NULL) ++ *p++ = TAB; ++ } ++#endif + } + + /* Count/add spaces required for indent */ +@@ -493,6 +640,7 @@ get_breakindent_win( + static long prev_ts = 0L; /* cached tabstop value */ + static char_u *prev_line = NULL; /* cached pointer to line */ + static int prev_tick = 0; /* changedtick of cached value */ ++ static int *prev_vts = 0; /* cached vartabs values */ + int bri = 0; + /* window width minus window margin space, i.e. what rests for text */ + const int eff_wwidth = W_WIDTH(wp) +@@ -502,13 +650,24 @@ get_breakindent_win( + + /* used cached indent, unless pointer or 'tabstop' changed */ + if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts +- || prev_tick != wp->w_buffer->b_changedtick) ++ || prev_tick != wp->w_buffer->b_changedtick ++#ifdef FEAT_VARTABS ++ || prev_vts != wp->w_buffer->b_p_vts_ary ++#endif ++ ) + { + prev_line = line; + prev_ts = wp->w_buffer->b_p_ts; + prev_tick = wp->w_buffer->b_changedtick; ++#ifdef FEAT_VARTABS ++ prev_vts = wp->w_buffer->b_p_vts_ary; ++ prev_indent = get_indent_str_vtab(line, ++ (int)wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_ary, wp->w_p_list); ++#else + prev_indent = get_indent_str(line, + (int)wp->w_buffer->b_p_ts, wp->w_p_list); ++#endif + } + bri = prev_indent + wp->w_p_brishift; + +@@ -734,7 +893,12 @@ open_line( + /* + * count white space on current line + */ ++#ifdef FEAT_VARTABS ++ newindent = get_indent_str_vtab(saved_line, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary, FALSE); ++#else + newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE); ++#endif + if (newindent == 0 && !(flags & OPENLINE_COM_LIST)) + newindent = second_line_indent; /* for ^^D command in insert mode */ + +@@ -1257,7 +1421,12 @@ open_line( + || do_si + #endif + ) ++#ifdef FEAT_VARTABS ++ newindent = get_indent_str_vtab(leader, curbuf->b_p_ts, ++ curbuf->b_p_vts_ary, FALSE); ++#else + newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE); ++#endif + + /* Add the indent offset */ + if (newindent + off < 0) +diff --git a/src/ops.c b/src/ops.c +index 4bef6c5..2f02246 100644 +--- a/src/ops.c ++++ b/src/ops.c +@@ -380,6 +380,9 @@ shift_block(oparg_T *oap, int amount) + char_u *newp, *oldp; + int oldcol = curwin->w_cursor.col; + int p_sw = (int)get_sw_value(curbuf); ++#ifdef FEAT_VARTABS ++ int *p_vts = curbuf->b_p_vts_ary; ++#endif + int p_ts = (int)curbuf->b_p_ts; + struct block_def bd; + int incr; +@@ -438,12 +441,19 @@ shift_block(oparg_T *oap, int amount) + } + /* OK, now total=all the VWS reqd, and textstart points at the 1st + * non-ws char in the block. */ ++#ifdef FEAT_VARTABS ++ if (!curbuf->b_p_et) ++ tabstop_fromto(ws_vcol, ws_vcol + total, p_ts, p_vts, &i, &j); ++ else ++ j = total; ++#else + if (!curbuf->b_p_et) + i = ((ws_vcol % p_ts) + total) / p_ts; /* number of tabs */ + if (i) + j = ((ws_vcol % p_ts) + total) % p_ts; /* number of spp */ + else + j = total; ++#endif + /* if we're splitting a TAB, allow for it */ + bd.textcol -= bd.pre_whitesp_c - (bd.startspaces != 0); + len = (int)STRLEN(bd.textstart) + 1; +@@ -3527,10 +3537,18 @@ do_put( + { + /* Don't need to insert spaces when "p" on the last position of a + * tab or "P" on the first position. */ ++#ifdef FEAT_VARTABS ++ int viscol = getviscol(); ++ if (dir == FORWARD ++ ? tabstop_padding(viscol, curbuf->b_p_ts, curbuf->b_p_vts_ary) != 1 ++ : curwin->w_cursor.coladd > 0) ++ coladvance_force(viscol); ++#else + if (dir == FORWARD + ? (int)curwin->w_cursor.coladd < curbuf->b_p_ts - 1 + : curwin->w_cursor.coladd > 0) + coladvance_force(getviscol()); ++#endif + else + curwin->w_cursor.coladd = 0; + } +diff --git a/src/option.c b/src/option.c +index 93e3c39..da91f8a 100644 +--- a/src/option.c ++++ b/src/option.c +@@ -180,6 +180,10 @@ + # define PV_UDF OPT_BUF(BV_UDF) + #endif + #define PV_WM OPT_BUF(BV_WM) ++#ifdef FEAT_VARTABS ++#define PV_VSTS OPT_BUF(BV_VSTS) ++#define PV_VTS OPT_BUF(BV_VTS) ++#endif + + /* + * Definition of the PV_ values for window-local options. +@@ -374,6 +378,10 @@ static int p_tx; + static int p_udf; + #endif + static long p_wm; ++#ifdef FEAT_VARTABS ++static char_u *p_vsts; ++static char_u *p_vts; ++#endif + #ifdef FEAT_KEYMAP + static char_u *p_keymap; + #endif +@@ -390,6 +398,9 @@ static int p_et_nopaste; + static long p_sts_nopaste; + static long p_tw_nopaste; + static long p_wm_nopaste; ++#ifdef FEAT_VARTABS ++static char_u *p_vsts_nopaste; ++#endif + + struct vimoption + { +@@ -2777,6 +2788,14 @@ static struct vimoption options[] = + {"updatetime", "ut", P_NUM|P_VI_DEF, + (char_u *)&p_ut, PV_NONE, + {(char_u *)4000L, (char_u *)0L} SCRIPTID_INIT}, ++#ifdef FEAT_VARTABS ++ {"varsofttabstop", "vsts", P_STRING|P_VI_DEF|P_VIM|P_COMMA, ++ (char_u *)&p_vsts, PV_VSTS, ++ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, ++ {"vartabstop", "vts", P_STRING|P_VI_DEF|P_VIM|P_RBUF|P_COMMA, ++ (char_u *)&p_vts, PV_VTS, ++ {(char_u *)"", (char_u *)0L} SCRIPTID_INIT}, ++#endif + {"verbose", "vbs", P_NUM|P_VI_DEF, + (char_u *)&p_verbose, PV_NONE, + {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT}, +@@ -5433,6 +5452,10 @@ didset_options2(void) + /* Parse default for 'clipboard' */ + (void)check_clipboard_option(); + #endif ++#ifdef FEAT_VARTABS ++ tabstop_set(curbuf->b_p_vsts, &curbuf->b_p_vsts_ary); ++ tabstop_set(curbuf->b_p_vts, &curbuf->b_p_vts_ary); ++#endif + } + + /* +@@ -5550,6 +5573,10 @@ check_buf_options(buf_T *buf) + check_string_option(&buf->b_p_lw); + #endif + check_string_option(&buf->b_p_bkc); ++#ifdef FEAT_VARTABS ++ check_string_option(&buf->b_p_vsts); ++ check_string_option(&buf->b_p_vts); ++#endif + } + + /* +@@ -7222,6 +7249,88 @@ did_set_string_option( + } + #endif + ++#ifdef FEAT_VARTABS ++ /* 'varsofttabstop' */ ++ else if (varp == &(curbuf->b_p_vsts)) ++ { ++ char_u *cp; ++ ++ if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) ++ { ++ if (curbuf->b_p_vsts_ary) ++ { ++ vim_free(curbuf->b_p_vsts_ary); ++ curbuf->b_p_vsts_ary = 0; ++ } ++ } ++ else ++ { ++ for (cp = *varp; *cp; ++cp) ++ { ++ if (vim_isdigit(*cp)) ++ continue; ++ if (*cp == ',' && cp > *varp && *(cp-1) != ',') ++ continue; ++ errmsg = e_invarg; ++ break; ++ } ++ if (errmsg == NULL) ++ { ++ int *oldarray = curbuf->b_p_vsts_ary; ++ if (tabstop_set(*varp, &(curbuf->b_p_vsts_ary))) ++ { ++ if (oldarray) ++ vim_free(oldarray); ++ } ++ else ++ errmsg = e_invarg; ++ } ++ } ++ } ++ ++ /* 'vartabstop' */ ++ else if (varp == &(curbuf->b_p_vts)) ++ { ++ char_u *cp; ++ ++ if (!(*varp)[0] || ((*varp)[0] == '0' && !(*varp)[1])) ++ { ++ if (curbuf->b_p_vts_ary) ++ { ++ vim_free(curbuf->b_p_vts_ary); ++ curbuf->b_p_vts_ary = 0; ++ } ++ } ++ else ++ { ++ for (cp = *varp; *cp; ++cp) ++ { ++ if (vim_isdigit(*cp)) ++ continue; ++ if (*cp == ',' && cp > *varp && *(cp-1) != ',') ++ continue; ++ errmsg = e_invarg; ++ break; ++ } ++ if (errmsg == NULL) ++ { ++ int *oldarray = curbuf->b_p_vts_ary; ++ if (tabstop_set(*varp, &(curbuf->b_p_vts_ary))) ++ { ++ if (oldarray) ++ vim_free(oldarray); ++#ifdef FEAT_FOLDING ++ if (foldmethodIsIndent(curwin)) ++ foldUpdateAll(curwin); ++#endif /* FEAT_FOLDING */ ++ } ++ else ++ errmsg = e_invarg; ++ } ++ } ++ } ++#endif ++ + /* Options that are a list of flags. */ + else + { +@@ -8489,7 +8598,14 @@ set_num_option( + if (curbuf->b_p_sw < 0) + { + errmsg = e_positive; ++#ifdef FEAT_VARTABS ++ /* Use the first 'vartabstop' value, or 'tabstop' if vts isn't in use. */ ++ curbuf->b_p_sw = tabstop_count(curbuf->b_p_vts_ary) > 0 ++ ? tabstop_first(curbuf->b_p_vts_ary) ++ : curbuf->b_p_ts; ++#else + curbuf->b_p_sw = curbuf->b_p_ts; ++#endif + } + + /* +@@ -10466,6 +10582,10 @@ get_varp(struct vimoption *p) + #ifdef FEAT_SIGNS + case PV_SCL: return (char_u *)&(curwin->w_p_scl); + #endif ++#ifdef FEAT_VARTABS ++ case PV_VSTS: return (char_u *)&(curbuf->b_p_vsts); ++ case PV_VTS: return (char_u *)&(curbuf->b_p_vts); ++#endif + default: EMSG(_("E356: get_varp ERROR")); + } + /* always return a valid pointer to avoid a crash! */ +@@ -10774,6 +10894,15 @@ buf_copy_options(buf_T *buf, int flags) + #endif + buf->b_p_sts = p_sts; + buf->b_p_sts_nopaste = p_sts_nopaste; ++#ifdef FEAT_VARTABS ++ buf->b_p_vsts = vim_strsave(p_vsts); ++ if (p_vsts && p_vsts != empty_option) ++ tabstop_set(p_vsts, &buf->b_p_vsts_ary); ++ else ++ buf->b_p_vsts_ary = 0; ++ buf->b_p_vsts_nopaste = p_vsts_nopaste ++ ? vim_strsave(p_vsts_nopaste) : NULL; ++#endif + buf->b_p_sn = p_sn; + #ifdef FEAT_COMMENTS + buf->b_p_com = vim_strsave(p_com); +@@ -10890,12 +11019,27 @@ buf_copy_options(buf_T *buf, int flags) + * or to a help buffer. + */ + if (dont_do_help) ++ { + buf->b_p_isk = save_p_isk; ++#ifdef FEAT_VARTABS ++ if (p_vts && p_vts != empty_option && !buf->b_p_vts_ary) ++ tabstop_set(p_vts, &buf->b_p_vts_ary); ++ else ++ buf->b_p_vts_ary = 0; ++#endif ++ } + else + { + buf->b_p_isk = vim_strsave(p_isk); + did_isk = TRUE; + buf->b_p_ts = p_ts; ++#ifdef FEAT_VARTABS ++ buf->b_p_vts = vim_strsave(p_vts); ++ if (p_vts && p_vts != empty_option && !buf->b_p_vts_ary) ++ tabstop_set(p_vts, &buf->b_p_vts_ary); ++ else ++ buf->b_p_vts_ary = 0; ++#endif + buf->b_help = FALSE; + #ifdef FEAT_QUICKFIX + if (buf->b_p_bt[0] == 'h') +@@ -11718,6 +11862,12 @@ paste_option_changed(void) + buf->b_p_sts_nopaste = buf->b_p_sts; + buf->b_p_ai_nopaste = buf->b_p_ai; + buf->b_p_et_nopaste = buf->b_p_et; ++#ifdef FEAT_VARTABS ++ if (buf->b_p_vsts_nopaste) ++ vim_free(buf->b_p_vsts_nopaste); ++ buf->b_p_vsts_nopaste = buf->b_p_vsts && buf->b_p_vsts != empty_option ++ ? vim_strsave(buf->b_p_vsts) : NULL; ++#endif + } + + /* save global options */ +@@ -11736,6 +11886,11 @@ paste_option_changed(void) + p_sts_nopaste = p_sts; + p_tw_nopaste = p_tw; + p_wm_nopaste = p_wm; ++#ifdef FEAT_VARTABS ++ if (p_vsts_nopaste) ++ vim_free(p_vsts_nopaste); ++ p_vsts_nopaste = p_vsts && p_vsts != empty_option ? vim_strsave(p_vsts) : NULL; ++#endif + } + + /* +@@ -11750,6 +11905,14 @@ paste_option_changed(void) + buf->b_p_sts = 0; /* softtabstop is 0 */ + buf->b_p_ai = 0; /* no auto-indent */ + buf->b_p_et = 0; /* no expandtab */ ++#ifdef FEAT_VARTABS ++ if (buf->b_p_vsts) ++ free_string_option(buf->b_p_vsts); ++ buf->b_p_vsts = empty_option; ++ if (buf->b_p_vsts_ary) ++ vim_free(buf->b_p_vsts_ary); ++ buf->b_p_vsts_ary = 0; ++#endif + } + + /* set global options */ +@@ -11771,6 +11934,11 @@ paste_option_changed(void) + p_wm = 0; + p_sts = 0; + p_ai = 0; ++#ifdef FEAT_VARTABS ++ if (p_vsts) ++ free_string_option(p_vsts); ++ p_vsts = empty_option; ++#endif + } + + /* +@@ -11786,6 +11954,18 @@ paste_option_changed(void) + buf->b_p_sts = buf->b_p_sts_nopaste; + buf->b_p_ai = buf->b_p_ai_nopaste; + buf->b_p_et = buf->b_p_et_nopaste; ++#ifdef FEAT_VARTABS ++ if (buf->b_p_vsts) ++ free_string_option(buf->b_p_vsts); ++ buf->b_p_vsts = buf->b_p_vsts_nopaste ++ ? vim_strsave(buf->b_p_vsts_nopaste) : empty_option; ++ if (buf->b_p_vsts_ary) ++ vim_free(buf->b_p_vsts_ary); ++ if (buf->b_p_vsts && buf->b_p_vsts != empty_option) ++ tabstop_set(buf->b_p_vsts, &buf->b_p_vsts_ary); ++ else ++ buf->b_p_vsts_ary = 0; ++#endif + } + + /* restore global options */ +@@ -11808,6 +11988,11 @@ paste_option_changed(void) + p_sts = p_sts_nopaste; + p_tw = p_tw_nopaste; + p_wm = p_wm_nopaste; ++#ifdef FEAT_VARTABS ++ if (p_vsts) ++ free_string_option(p_vsts); ++ p_vsts = p_vsts_nopaste ? vim_strsave(p_vsts_nopaste) : empty_option; ++#endif + } + + old_p_paste = p_paste; +@@ -12144,6 +12329,301 @@ check_ff_value(char_u *p) + return check_opt_strings(p, p_ff_values, FALSE); + } + ++#ifdef FEAT_VARTABS ++ ++/* ++ * Set the integer values corresponding to the string setting of 'vartabstop'. ++ */ ++ int ++tabstop_set(var, array) ++ char_u *var; ++ int **array; ++{ ++ int valcount = 1; ++ int t; ++ char_u *cp; ++ ++ if ((!var[0] || (var[0] == '0' && !var[1]))) ++ { ++ *array = (int *)0; ++ return TRUE; ++ } ++ ++ for (cp = var; *cp; ++cp) ++ { ++ if (cp == var || *(cp - 1) == ',') ++ if (atoi((char *)cp) <= 0) ++ return FALSE; ++ ++ if (VIM_ISDIGIT(*cp)) ++ continue; ++ if (*cp == ',' && cp > var && *(cp - 1) != ',') ++ { ++ ++valcount; ++ continue; ++ } ++ return FALSE; ++ } ++ ++ *array = (int *) alloc((unsigned) ((valcount + 1) * sizeof(int))); ++ (*array)[0] = valcount; ++ ++ t = 1; ++ for (cp = var; *cp;) ++ { ++ (*array)[t++] = atoi((char *)cp); ++ while (*cp && *cp != ',') ++ ++cp; ++ if (*cp) ++ ++cp; ++ } ++ ++ return TRUE; ++} ++ ++/* ++ * Calculate the number of screen spaces a tab will occupy. ++ * If vts is set then the tab widths are taken from that array, ++ * otherwise the value of ts is used. ++ */ ++ int ++tabstop_padding(col, ts, vts) ++ colnr_T col; ++ int ts; ++ int *vts; ++{ ++ int tabcount; ++ colnr_T tabcol = 0; ++ int t; ++ int padding = 0; ++ ++ if (ts == 0) ++ ts = 8; ++ if (vts == 0 || vts[0] == 0) ++ return ts - (col % ts); ++ ++ tabcount = vts[0]; ++ ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > col) ++ { ++ padding = (int)(tabcol - col); ++ break; ++ } ++ } ++ if (t > tabcount) ++ padding = vts[tabcount] - (int)((col - tabcol) % vts[tabcount]); ++ ++ return padding; ++} ++ ++/* ++ * Find the size of the tab that covers a particular column. ++ */ ++ int ++tabstop_at(col, ts, vts) ++ colnr_T col; ++ int ts; ++ int *vts; ++{ ++ int tabcount; ++ colnr_T tabcol = 0; ++ int t; ++ int tab_size = 0; ++ ++ if (vts == 0 || vts[0] == 0) ++ return ts; ++ ++ tabcount = vts[0]; ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > col) ++ { ++ tab_size = vts[t]; ++ break; ++ } ++ } ++ if (t > tabcount) ++ tab_size = vts[tabcount]; ++ ++ return tab_size; ++} ++ ++/* ++ * Find the column on which a tab starts. ++ */ ++ colnr_T ++tabstop_start(col, ts, vts) ++ colnr_T col; ++ int ts; ++ int *vts; ++{ ++ int tabcount; ++ colnr_T tabcol = 0; ++ int t; ++ ++ if (vts == 0 || vts[0] == 0) ++ return (col / ts) * ts; ++ ++ tabcount = vts[0]; ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > col) ++ return tabcol - vts[t]; ++ } ++ ++ int excess = tabcol % vts[tabcount]; ++ return excess + ((col - excess) / vts[tabcount]) * vts[tabcount]; ++} ++ ++/* ++ * Find the number of tabs and spaces necessary to get from one column ++ * to another. ++ */ ++ void ++tabstop_fromto(start_col, end_col, ts, vts, ntabs, nspcs) ++ colnr_T start_col; ++ colnr_T end_col; ++ int ts; ++ int *vts; ++ int *ntabs; ++ int *nspcs; ++{ ++ int spaces = end_col - start_col; ++ colnr_T tabcol = 0; ++ int padding = 0; ++ int tabcount; ++ int t; ++ ++ if (vts == 0 || vts[0] == 0) ++ { ++ int tabs = 0; ++ int initspc = ts - (start_col % ts); ++ if (spaces >= initspc) ++ { ++ spaces -= initspc; ++ tabs++; ++ } ++ tabs += spaces / ts; ++ spaces -= (spaces / ts) * ts; ++ ++ *ntabs = tabs; ++ *nspcs = spaces; ++ return; ++ } ++ ++ /* Find the padding needed to reach the next tabstop. */ ++ tabcount = vts[0]; ++ for (t = 1; t <= tabcount; ++t) ++ { ++ tabcol += vts[t]; ++ if (tabcol > start_col) ++ { ++ padding = (int)(tabcol - start_col); ++ break; ++ } ++ } ++ if (t > tabcount) ++ padding = vts[tabcount] - (int)((start_col - tabcol) % vts[tabcount]); ++ ++ /* If the space needed is less than the padding no tabs can be used. */ ++ if (spaces < padding) ++ { ++ *ntabs = 0; ++ *nspcs = spaces; ++ return; ++ } ++ ++ *ntabs = 1; ++ spaces -= padding; ++ ++ /* At least one tab has been used. See if any more will fit. */ ++ while (spaces != 0 && ++t <= tabcount) ++ { ++ padding = vts[t]; ++ if (spaces < padding) ++ { ++ *nspcs = spaces; ++ return; ++ } ++ ++*ntabs; ++ spaces -= padding; ++ } ++ ++ *ntabs += spaces / vts[tabcount]; ++ *nspcs = spaces % vts[tabcount]; ++} ++ ++/* ++ * See if two tabstop arrays contain the same values. ++ */ ++ int ++tabstop_eq(ts1, ts2) ++ int *ts1; ++ int *ts2; ++{ ++ int t; ++ ++ if ((ts1 == 0 && ts2) || (ts1 && ts2 == 0)) ++ return FALSE; ++ if (ts1 == ts2) ++ return TRUE; ++ if (ts1[0] != ts2[0]) ++ return FALSE; ++ ++ for (t = 1; t <= ts1[0]; ++t) ++ if (ts1[t] != ts2[t]) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++/* ++ * Copy a tabstop array, allocating space for the new array. ++ */ ++ int * ++tabstop_copy(oldts) ++ int *oldts; ++{ ++ int *newts; ++ int t; ++ ++ if (oldts == 0) ++ return 0; ++ ++ newts = (int *) alloc((unsigned) ((oldts[0] + 1) * sizeof(int))); ++ for (t = 0; t <= oldts[0]; ++t) ++ newts[t] = oldts[t]; ++ ++ return newts; ++} ++ ++/* ++ * Return a count of the number of tabstops. ++ */ ++ int ++tabstop_count(ts) ++ int *ts; ++{ ++ return ts ? ts[0] : 0; ++} ++ ++/* ++ * Return the first tabstop, or 8 if there are no tabstops defined. ++ */ ++ int ++tabstop_first(ts) ++ int *ts; ++{ ++ return ts ? ts[1] : 8; ++} ++ ++#endif ++ + /* + * Return the effective shiftwidth value for current buffer, using the + * 'tabstop' value when 'shiftwidth' is zero. +diff --git a/src/option.h b/src/option.h +index 13acabf..85c9863 100644 +--- a/src/option.h ++++ b/src/option.h +@@ -1102,6 +1102,10 @@ enum + , BV_UDF + , BV_UL + , BV_WM ++#ifdef FEAT_VARTABS ++ , BV_VSTS ++ , BV_VTS ++#endif + , BV_COUNT /* must be the last one */ + }; + +diff --git a/src/proto/misc1.pro b/src/proto/misc1.pro +index cac6449..6a2388e 100644 +--- a/src/proto/misc1.pro ++++ b/src/proto/misc1.pro +@@ -3,6 +3,7 @@ int get_indent(void); + int get_indent_lnum(linenr_T lnum); + int get_indent_buf(buf_T *buf, linenr_T lnum); + int get_indent_str(char_u *ptr, int ts, int list); ++int get_indent_str_vtab(char_u *ptr, int ts, int *vts, int list); + int set_indent(int size, int flags); + int get_number_indent(linenr_T lnum); + int get_breakindent_win(win_T *wp, char_u *line); +diff --git a/src/proto/option.pro b/src/proto/option.pro +index 8c9bde5..7c659b3 100644 +--- a/src/proto/option.pro ++++ b/src/proto/option.pro +@@ -59,6 +59,17 @@ int can_bs(int what); + void save_file_ff(buf_T *buf); + int file_ff_differs(buf_T *buf, int ignore_empty); + int check_ff_value(char_u *p); ++#ifdef FEAT_VARTABS ++int tabstop_set(char_u *var, int **array); ++int tabstop_padding(colnr_T col, int ts, int *vts); ++colnr_T tabstop_start(colnr_T col, int ts, int *vts); ++int tabstop_at(colnr_T col, int ts, int *vts); ++void tabstop_fromto(colnr_T start_col, colnr_T end_col, int ts, int *vts, int *ntabs, int *nspcs); ++int tabstop_eq(int *ts1, int *ts2); ++int *tabstop_copy(int *oldts); ++int tabstop_count(int *ts); ++int tabstop_first(int *ts); ++#endif + long get_sw_value(buf_T *buf); + long get_sts_value(void); + void find_mps_values(int *initc, int *findc, int *backwards, int switchit); +diff --git a/src/screen.c b/src/screen.c +index 4604ec7..8633071 100644 +--- a/src/screen.c ++++ b/src/screen.c +@@ -4647,8 +4647,13 @@ win_line( + vcol_adjusted = vcol - MB_CHARLEN(p_sbr); + #endif + /* tab amount depends on current column */ ++#ifdef FEAT_VARTABS ++ tab_len = tabstop_padding(vcol_adjusted, wp->w_buffer->b_p_ts, ++ wp->w_buffer->b_p_vts_ary) - 1; ++#else + tab_len = (int)wp->w_buffer->b_p_ts + - vcol_adjusted % (int)wp->w_buffer->b_p_ts - 1; ++#endif + + #ifdef FEAT_LINEBREAK + if (!wp->w_p_lbr || !wp->w_p_list) +diff --git a/src/structs.h b/src/structs.h +index 2a4284a..53c3abb 100644 +--- a/src/structs.h ++++ b/src/structs.h +@@ -2131,6 +2131,13 @@ struct file_buffer + long b_p_wm; /* 'wrapmargin' */ + long b_p_wm_nobin; /* b_p_wm saved for binary mode */ + long b_p_wm_nopaste; /* b_p_wm saved for paste mode */ ++#ifdef FEAT_VARTABS ++ char_u *b_p_vsts; /* 'varsofttabstop' */ ++ int *b_p_vsts_ary; /* 'varsofttabstop' in internal format */ ++ char_u *b_p_vsts_nopaste; /* b_p_vsts saved for paste mode */ ++ char_u *b_p_vts; /* 'vartabstop' */ ++ int *b_p_vts_ary; /* 'vartabstop' in internal format */ ++#endif + #ifdef FEAT_KEYMAP + char_u *b_p_keymap; /* 'keymap' */ + #endif +diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak +index 65ad3ee..12097e7 100644 +--- a/src/testdir/Make_all.mak ++++ b/src/testdir/Make_all.mak +@@ -91,6 +91,8 @@ SCRIPTS_ALL = \ + test_listlbr.out \ + test_search_mbyte.out \ + test_utf8.out \ ++ test_vartabs.out \ ++ test_vartabs_breakindent.out \ + test_wordcount.out + + +diff --git a/src/version.c b/src/version.c +index 103a26f..87763ba 100644 +--- a/src/version.c ++++ b/src/version.c +@@ -668,6 +668,11 @@ static char *(features[]) = + #else + "-user_commands", + #endif ++#ifdef FEAT_VARTABS ++ "+vartabs", ++#else ++ "-vartabs", ++#endif + #ifdef FEAT_WINDOWS + "+vertsplit", + #else +@@ -796,6 +801,10 @@ static int included_patches[] = + static char *(extra_patches[]) = + { /* Add your patch description below this line */ + /**/ ++#ifdef FEAT_VARTABS ++ "variable tabstops", ++#endif ++/**/ + NULL + }; + +diff --git a/src/workshop.c b/src/workshop.c +index c1a3198..b2acacf 100644 +--- a/src/workshop.c ++++ b/src/workshop.c +@@ -50,7 +50,11 @@ static void load_window(char *, int lnum); + static void warp_to_pc(int); + #ifdef FEAT_BEVAL + void workshop_beval_cb(BalloonEval *, int); ++# ifdef FEAT_VARTABS ++static int computeIndex(int, char_u *, int, int *); ++# else + static int computeIndex(int, char_u *, int); ++# endif + #endif + static char *fixAccelText(char *); + static void addMenu(char *, char *, char *); +@@ -1537,7 +1541,11 @@ workshop_beval_cb( + * a column number. Compute the index from col. Also set + * line to 0 because thats what dbx expects. + */ ++#ifdef FEAT_VARTABS ++ idx = computeIndex(col, text, beval->ts, beval->vts); ++#else + idx = computeIndex(col, text, beval->ts); ++#endif + if (idx > 0) + { + lnum = 0; +@@ -1572,7 +1580,11 @@ workshop_beval_cb( + computeIndex( + int wantedCol, + char_u *line, +- int ts) ++ int ts ++#ifdef FEAT_VARTABS ++ int *vts ++#else ++ ) + { + int col = 0; + int idx = 0; +@@ -1580,7 +1592,11 @@ computeIndex( + while (line[idx]) + { + if (line[idx] == '\t') ++#ifdef FEAT_VARTABS ++ col += tabstop_padding(col, ts, vts); ++#else + col += ts - (col % ts); ++#endif + else + col++; + idx++; diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/vi-compatible.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/vim/patches/vi-compatible.patch Mon Sep 26 21:06:11 2016 -0700 @@ -0,0 +1,18 @@ +When started as "vi", run in vi-compatibility mode, and don't source +defaults.vim. This can be submitted upstream. + +--- a/runtime/defaults.vim 2016-09-12 07:41:04.000000000 -0700 ++++ b/runtime/defaults.vim 2016-09-15 15:55:10.820971765 -0700 +@@ -13,6 +13,12 @@ + finish + endif + ++" When started as "vi", operate in compatible mode (unless you have a ++" .vimrc). ++if v:progname ==? "vi" ++ finish ++endif ++ + " Bail out if something that ran earlier, e.g. a system wide vimrc, does not + " want Vim to use these default values. + if exists('skip_defaults_vim') diff -r c1d43e41adeb -r e8d705cba87d components/vim/patches/vim-help.patch --- a/components/vim/patches/vim-help.patch Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/patches/vim-help.patch Mon Sep 26 21:06:11 2016 -0700 @@ -1,15 +1,15 @@ ---- src/ex_cmds.c Thu Apr 21 16:23:08 2011 -+++ src/ex_cmds.c Thu Apr 21 16:23:08 2011 -@@ -5525,6 +5525,8 @@ - int len; - char_u *lang; +--- a/src/ex_cmds.c 2016-09-21 15:16:13.032570431 -0700 ++++ b/src/ex_cmds.c 2016-09-21 15:16:13.055466074 -0700 +@@ -6276,6 +6276,8 @@ + #ifdef FEAT_FOLDING + int old_KeyTyped = KeyTyped; #endif + int nohelp = FALSE, nominhelp = FALSE; + char_u *mhf = NULL; if (eap != NULL) { -@@ -5576,6 +5578,23 @@ +@@ -6327,6 +6329,23 @@ n = find_help_tags(arg, &num_matches, &matches, eap != NULL && eap->forceit); @@ -33,7 +33,7 @@ i = 0; #ifdef FEAT_MULTI_LANG if (n != FAIL && lang != NULL) -@@ -5588,7 +5607,7 @@ +@@ -6339,7 +6358,7 @@ break; } #endif @@ -42,7 +42,7 @@ { #ifdef FEAT_MULTI_LANG if (lang != NULL) -@@ -5601,9 +5620,11 @@ +@@ -6352,9 +6371,11 @@ return; } @@ -57,7 +57,7 @@ #ifdef FEAT_GUI need_mouse_correct = TRUE; -@@ -5635,12 +5656,14 @@ +@@ -6386,12 +6407,14 @@ * There is no help window yet. * Try to open the file specified by the "helpfile" option. */ @@ -77,7 +77,7 @@ #ifdef FEAT_WINDOWS /* Split off help window; put it at far top if no position -@@ -5671,7 +5694,7 @@ +@@ -6420,7 +6443,7 @@ * Set the alternate file to the previously edited file. */ alt_fnum = curbuf->b_fnum; @@ -86,16 +86,16 @@ ECMD_HIDE + ECMD_SET_HELP, #ifdef FEAT_WINDOWS NULL /* buffer is still open, don't store info */ -@@ -5688,7 +5711,7 @@ - if (!p_im) - restart_edit = 0; /* don't want insert mode in help file */ +@@ -6443,7 +6466,7 @@ + KeyTyped = old_KeyTyped; + #endif - if (tag != NULL) + if (!nohelp && tag != NULL) do_tag(tag, DT_HELP, 1, FALSE, TRUE); /* Delete the empty buffer if we're not using it. Careful: autocommands -@@ -5706,7 +5729,8 @@ +@@ -6461,7 +6484,8 @@ curwin->w_alt_fnum = alt_fnum; erret: @@ -104,4 +104,4 @@ + vim_free(tag); } - + /* diff -r c1d43e41adeb -r e8d705cba87d components/vim/vim-core.p5m --- a/components/vim/vim-core.p5m Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/vim-core.p5m Mon Sep 26 21:06:11 2016 -0700 @@ -20,10 +20,11 @@ # # -# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # default mangler.man.stability uncommitted> +# set name=pkg.fmri \ value=pkg:/editor/vim/vim-core@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) set name=pkg.summary value="Vi IMproved (core executables)" @@ -34,12 +35,13 @@ set name=info.classification \ value=org.opensolaris.category.2008:Development/Editors \ value="org.opensolaris.category.2008:System/Text Tools" -set name=info.repository-changeset value=$(HG_REV) -set name=info.repository-url value=$(HG_REPO) +set name=info.repository-changeset value=$(GIT_COMMIT_ID) +set name=info.repository-url value=$(GIT_REPO) set name=info.upstream value=vim-dev@vim.org set name=info.upstream-url value=$(COMPONENT_PROJECT_URL) set name=org.opensolaris.arc-caseid value=PSARC/2007/267 set name=org.opensolaris.consolidation value=$(CONSOLIDATION) +# link path=usr/bin/ex target=vim link path=usr/bin/vi target=vim link path=usr/bin/view target=vim @@ -97,6 +99,7 @@ link path=usr/share/man/ru.UTF-8/man1/view.1 target=vim.1 file path=usr/share/man/ru.UTF-8/man1/vim.1 file help_minimized.txt path=usr/share/vim/$(VIMVER)/doc/help_minimized.txt +# license license license="VIM License" # Make sure that we don't install simultaneously with an "old" vim that has the diff -r c1d43e41adeb -r e8d705cba87d components/vim/vim.p5m --- a/components/vim/vim.p5m Tue Oct 04 15:53:56 2016 -0700 +++ b/components/vim/vim.p5m Mon Sep 26 21:06:11 2016 -0700 @@ -20,10 +20,11 @@ # # -# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. # default mangler.man.stability uncommitted> +# set name=pkg.fmri \ value=pkg:/editor/vim@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) set name=pkg.summary value="Vi IMproved" @@ -34,12 +35,13 @@ set name=info.classification \ value=org.opensolaris.category.2008:Development/Editors \ value="org.opensolaris.category.2008:System/Text Tools" -set name=info.repository-changeset value=$(HG_REV) -set name=info.repository-url value=$(HG_REPO) +set name=info.repository-changeset value=$(GIT_COMMIT_ID) +set name=info.repository-url value=$(GIT_REPO) set name=info.upstream value=vim-dev@vim.org set name=info.upstream-url value=$(COMPONENT_PROJECT_URL) set name=org.opensolaris.arc-caseid value=PSARC/2007/267 set name=org.opensolaris.consolidation value=$(CONSOLIDATION) +# link path=usr/bin/rview target=vim link path=usr/bin/rvim target=vim link path=usr/bin/vimdiff target=vim @@ -82,6 +84,8 @@ file path=usr/share/man/it/man1/vimtutor.1 file path=usr/share/man/it/man1/xxd.1 file path=usr/share/man/ja/man1/evim.1 +link path=usr/share/man/ja/man1/rview.1 target=vim.1 +link path=usr/share/man/ja/man1/rvim.1 target=vim.1 file path=usr/share/man/ja/man1/vimdiff.1 file path=usr/share/man/ja/man1/vimtutor.1 file path=usr/share/man/ja/man1/xxd.1 @@ -136,6 +140,7 @@ file path=usr/share/vim/$(VIMVER)/autoload/netrw.vim file path=usr/share/vim/$(VIMVER)/autoload/netrwFileHandlers.vim file path=usr/share/vim/$(VIMVER)/autoload/netrwSettings.vim +file path=usr/share/vim/$(VIMVER)/autoload/netrw_gitignore.vim file path=usr/share/vim/$(VIMVER)/autoload/paste.vim file path=usr/share/vim/$(VIMVER)/autoload/phpcomplete.vim file path=usr/share/vim/$(VIMVER)/autoload/python3complete.vim @@ -171,6 +176,7 @@ file path=usr/share/vim/$(VIMVER)/colors/desert.vim file path=usr/share/vim/$(VIMVER)/colors/elflord.vim file path=usr/share/vim/$(VIMVER)/colors/evening.vim +file path=usr/share/vim/$(VIMVER)/colors/industry.vim file path=usr/share/vim/$(VIMVER)/colors/koehler.vim file path=usr/share/vim/$(VIMVER)/colors/morning.vim file path=usr/share/vim/$(VIMVER)/colors/murphy.vim @@ -202,6 +208,7 @@ file path=usr/share/vim/$(VIMVER)/compiler/gcc.vim file path=usr/share/vim/$(VIMVER)/compiler/gfortran.vim file path=usr/share/vim/$(VIMVER)/compiler/gnat.vim +file path=usr/share/vim/$(VIMVER)/compiler/go.vim file path=usr/share/vim/$(VIMVER)/compiler/haml.vim file path=usr/share/vim/$(VIMVER)/compiler/hp_acc.vim file path=usr/share/vim/$(VIMVER)/compiler/icc.vim @@ -239,10 +246,12 @@ file path=usr/share/vim/$(VIMVER)/compiler/xbuild.vim file path=usr/share/vim/$(VIMVER)/compiler/xmllint.vim file path=usr/share/vim/$(VIMVER)/compiler/xmlwf.vim +file path=usr/share/vim/$(VIMVER)/defaults.vim file path=usr/share/vim/$(VIMVER)/delmenu.vim file path=usr/share/vim/$(VIMVER)/doc/arabic.txt file path=usr/share/vim/$(VIMVER)/doc/autocmd.txt file path=usr/share/vim/$(VIMVER)/doc/change.txt +file path=usr/share/vim/$(VIMVER)/doc/channel.txt file path=usr/share/vim/$(VIMVER)/doc/cmdline.txt file path=usr/share/vim/$(VIMVER)/doc/debug.txt file path=usr/share/vim/$(VIMVER)/doc/debugger.txt @@ -257,7 +266,6 @@ file path=usr/share/vim/$(VIMVER)/doc/ft_ada.txt file path=usr/share/vim/$(VIMVER)/doc/ft_sql.txt file path=usr/share/vim/$(VIMVER)/doc/gui.txt -file path=usr/share/vim/$(VIMVER)/doc/gui_w16.txt file path=usr/share/vim/$(VIMVER)/doc/gui_w32.txt file path=usr/share/vim/$(VIMVER)/doc/gui_x11.txt file path=usr/share/vim/$(VIMVER)/doc/hangulin.txt @@ -301,6 +309,7 @@ file path=usr/share/vim/$(VIMVER)/doc/pattern.txt file path=usr/share/vim/$(VIMVER)/doc/pi_getscript.txt file path=usr/share/vim/$(VIMVER)/doc/pi_gzip.txt +file path=usr/share/vim/$(VIMVER)/doc/pi_logipat.txt file path=usr/share/vim/$(VIMVER)/doc/pi_netrw.txt file path=usr/share/vim/$(VIMVER)/doc/pi_paren.txt file path=usr/share/vim/$(VIMVER)/doc/pi_spec.txt @@ -368,6 +377,7 @@ file path=usr/share/vim/$(VIMVER)/doc/version5.txt file path=usr/share/vim/$(VIMVER)/doc/version6.txt file path=usr/share/vim/$(VIMVER)/doc/version7.txt +file path=usr/share/vim/$(VIMVER)/doc/version8.txt file path=usr/share/vim/$(VIMVER)/doc/vi_diff.txt file path=usr/share/vim/$(VIMVER)/doc/vim2html.pl file path=usr/share/vim/$(VIMVER)/doc/visual.txt @@ -392,6 +402,7 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/bdf.vim file path=usr/share/vim/$(VIMVER)/ftplugin/bst.vim file path=usr/share/vim/$(VIMVER)/ftplugin/btm.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/bzl.vim file path=usr/share/vim/$(VIMVER)/ftplugin/c.vim file path=usr/share/vim/$(VIMVER)/ftplugin/calendar.vim file path=usr/share/vim/$(VIMVER)/ftplugin/cdrdaoconf.vim @@ -418,10 +429,12 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/diff.vim file path=usr/share/vim/$(VIMVER)/ftplugin/dircolors.vim file path=usr/share/vim/$(VIMVER)/ftplugin/docbk.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/dockerfile.vim file path=usr/share/vim/$(VIMVER)/ftplugin/dosbatch.vim file path=usr/share/vim/$(VIMVER)/ftplugin/dosini.vim file path=usr/share/vim/$(VIMVER)/ftplugin/dtd.vim file path=usr/share/vim/$(VIMVER)/ftplugin/dtrace.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/eiffel.vim file path=usr/share/vim/$(VIMVER)/ftplugin/elinks.vim file path=usr/share/vim/$(VIMVER)/ftplugin/erlang.vim file path=usr/share/vim/$(VIMVER)/ftplugin/eruby.vim @@ -437,14 +450,18 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/gitconfig.vim file path=usr/share/vim/$(VIMVER)/ftplugin/gitrebase.vim file path=usr/share/vim/$(VIMVER)/ftplugin/gitsendemail.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/go.vim file path=usr/share/vim/$(VIMVER)/ftplugin/gpg.vim file path=usr/share/vim/$(VIMVER)/ftplugin/gprof.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/groovy.vim file path=usr/share/vim/$(VIMVER)/ftplugin/group.vim file path=usr/share/vim/$(VIMVER)/ftplugin/grub.vim file path=usr/share/vim/$(VIMVER)/ftplugin/haml.vim file path=usr/share/vim/$(VIMVER)/ftplugin/hamster.vim file path=usr/share/vim/$(VIMVER)/ftplugin/haskell.vim file path=usr/share/vim/$(VIMVER)/ftplugin/help.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/hgcommit.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/hog.vim file path=usr/share/vim/$(VIMVER)/ftplugin/hostconf.vim file path=usr/share/vim/$(VIMVER)/ftplugin/hostsaccess.vim file path=usr/share/vim/$(VIMVER)/ftplugin/html.vim @@ -452,12 +469,16 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/indent.vim file path=usr/share/vim/$(VIMVER)/ftplugin/initex.vim file path=usr/share/vim/$(VIMVER)/ftplugin/ishd.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/j.vim file path=usr/share/vim/$(VIMVER)/ftplugin/java.vim file path=usr/share/vim/$(VIMVER)/ftplugin/javascript.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/jproperties.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/json.vim file path=usr/share/vim/$(VIMVER)/ftplugin/jsp.vim file path=usr/share/vim/$(VIMVER)/ftplugin/kconfig.vim file path=usr/share/vim/$(VIMVER)/ftplugin/kwt.vim file path=usr/share/vim/$(VIMVER)/ftplugin/ld.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/less.vim file path=usr/share/vim/$(VIMVER)/ftplugin/lftp.vim file path=usr/share/vim/$(VIMVER)/ftplugin/libao.vim file path=usr/share/vim/$(VIMVER)/ftplugin/limits.vim @@ -509,14 +530,21 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/python.vim file path=usr/share/vim/$(VIMVER)/ftplugin/qf.vim file path=usr/share/vim/$(VIMVER)/ftplugin/quake.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/r.vim file path=usr/share/vim/$(VIMVER)/ftplugin/racc.vim file path=usr/share/vim/$(VIMVER)/ftplugin/readline.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/registry.vim file path=usr/share/vim/$(VIMVER)/ftplugin/reva.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/rhelp.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/rmd.vim file path=usr/share/vim/$(VIMVER)/ftplugin/rnc.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/rnoweb.vim file path=usr/share/vim/$(VIMVER)/ftplugin/rpl.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/rrst.vim file path=usr/share/vim/$(VIMVER)/ftplugin/rst.vim file path=usr/share/vim/$(VIMVER)/ftplugin/ruby.vim file path=usr/share/vim/$(VIMVER)/ftplugin/sass.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/scala.vim file path=usr/share/vim/$(VIMVER)/ftplugin/scheme.vim file path=usr/share/vim/$(VIMVER)/ftplugin/screen.vim file path=usr/share/vim/$(VIMVER)/ftplugin/scss.vim @@ -535,10 +563,13 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/sudoers.vim file path=usr/share/vim/$(VIMVER)/ftplugin/svg.vim file path=usr/share/vim/$(VIMVER)/ftplugin/sysctl.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/systemd.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/systemverilog.vim file path=usr/share/vim/$(VIMVER)/ftplugin/tcl.vim file path=usr/share/vim/$(VIMVER)/ftplugin/tcsh.vim file path=usr/share/vim/$(VIMVER)/ftplugin/terminfo.vim file path=usr/share/vim/$(VIMVER)/ftplugin/tex.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/text.vim file path=usr/share/vim/$(VIMVER)/ftplugin/treetop.vim file path=usr/share/vim/$(VIMVER)/ftplugin/tt2html.vim file path=usr/share/vim/$(VIMVER)/ftplugin/udevconf.vim @@ -549,6 +580,7 @@ file path=usr/share/vim/$(VIMVER)/ftplugin/verilog.vim file path=usr/share/vim/$(VIMVER)/ftplugin/vhdl.vim file path=usr/share/vim/$(VIMVER)/ftplugin/vim.vim +file path=usr/share/vim/$(VIMVER)/ftplugin/vroom.vim file path=usr/share/vim/$(VIMVER)/ftplugin/xdefaults.vim file path=usr/share/vim/$(VIMVER)/ftplugin/xf86conf.vim file path=usr/share/vim/$(VIMVER)/ftplugin/xhtml.vim @@ -572,6 +604,7 @@ file path=usr/share/vim/$(VIMVER)/indent/awk.vim file path=usr/share/vim/$(VIMVER)/indent/bib.vim file path=usr/share/vim/$(VIMVER)/indent/bst.vim +file path=usr/share/vim/$(VIMVER)/indent/bzl.vim file path=usr/share/vim/$(VIMVER)/indent/c.vim file path=usr/share/vim/$(VIMVER)/indent/cdl.vim file path=usr/share/vim/$(VIMVER)/indent/ch.vim @@ -602,16 +635,21 @@ file path=usr/share/vim/$(VIMVER)/indent/framescript.vim file path=usr/share/vim/$(VIMVER)/indent/gitconfig.vim file path=usr/share/vim/$(VIMVER)/indent/gitolite.vim +file path=usr/share/vim/$(VIMVER)/indent/go.vim file path=usr/share/vim/$(VIMVER)/indent/haml.vim file path=usr/share/vim/$(VIMVER)/indent/hamster.vim +file path=usr/share/vim/$(VIMVER)/indent/hog.vim file path=usr/share/vim/$(VIMVER)/indent/html.vim file path=usr/share/vim/$(VIMVER)/indent/htmldjango.vim file path=usr/share/vim/$(VIMVER)/indent/idlang.vim file path=usr/share/vim/$(VIMVER)/indent/ishd.vim +file path=usr/share/vim/$(VIMVER)/indent/j.vim file path=usr/share/vim/$(VIMVER)/indent/java.vim file path=usr/share/vim/$(VIMVER)/indent/javascript.vim +file path=usr/share/vim/$(VIMVER)/indent/json.vim file path=usr/share/vim/$(VIMVER)/indent/jsp.vim file path=usr/share/vim/$(VIMVER)/indent/ld.vim +file path=usr/share/vim/$(VIMVER)/indent/less.vim file path=usr/share/vim/$(VIMVER)/indent/lifelines.vim file path=usr/share/vim/$(VIMVER)/indent/liquid.vim file path=usr/share/vim/$(VIMVER)/indent/lisp.vim @@ -636,10 +674,15 @@ file path=usr/share/vim/$(VIMVER)/indent/python.vim file path=usr/share/vim/$(VIMVER)/indent/r.vim file path=usr/share/vim/$(VIMVER)/indent/readline.vim +file path=usr/share/vim/$(VIMVER)/indent/rhelp.vim +file path=usr/share/vim/$(VIMVER)/indent/rmd.vim +file path=usr/share/vim/$(VIMVER)/indent/rnoweb.vim file path=usr/share/vim/$(VIMVER)/indent/rpl.vim +file path=usr/share/vim/$(VIMVER)/indent/rrst.vim file path=usr/share/vim/$(VIMVER)/indent/rst.vim file path=usr/share/vim/$(VIMVER)/indent/ruby.vim file path=usr/share/vim/$(VIMVER)/indent/sass.vim +file path=usr/share/vim/$(VIMVER)/indent/scala.vim file path=usr/share/vim/$(VIMVER)/indent/scheme.vim file path=usr/share/vim/$(VIMVER)/indent/scss.vim file path=usr/share/vim/$(VIMVER)/indent/sdl.vim @@ -647,8 +690,11 @@ file path=usr/share/vim/$(VIMVER)/indent/sml.vim file path=usr/share/vim/$(VIMVER)/indent/sql.vim file path=usr/share/vim/$(VIMVER)/indent/sqlanywhere.vim +file path=usr/share/vim/$(VIMVER)/indent/systemd.vim +file path=usr/share/vim/$(VIMVER)/indent/systemverilog.vim file path=usr/share/vim/$(VIMVER)/indent/tcl.vim file path=usr/share/vim/$(VIMVER)/indent/tcsh.vim +file path=usr/share/vim/$(VIMVER)/indent/teraterm.vim file path=usr/share/vim/$(VIMVER)/indent/tex.vim file path=usr/share/vim/$(VIMVER)/indent/tf.vim file path=usr/share/vim/$(VIMVER)/indent/tilde.vim @@ -657,6 +703,7 @@ file path=usr/share/vim/$(VIMVER)/indent/verilog.vim file path=usr/share/vim/$(VIMVER)/indent/vhdl.vim file path=usr/share/vim/$(VIMVER)/indent/vim.vim +file path=usr/share/vim/$(VIMVER)/indent/vroom.vim file path=usr/share/vim/$(VIMVER)/indent/xf86conf.vim file path=usr/share/vim/$(VIMVER)/indent/xhtml.vim file path=usr/share/vim/$(VIMVER)/indent/xinetd.vim @@ -672,6 +719,8 @@ file path=usr/share/vim/$(VIMVER)/keymap/accents.vim file path=usr/share/vim/$(VIMVER)/keymap/arabic.vim file path=usr/share/vim/$(VIMVER)/keymap/arabic_utf-8.vim +file path=usr/share/vim/$(VIMVER)/keymap/armenian-eastern_utf-8.vim +file path=usr/share/vim/$(VIMVER)/keymap/armenian-western_utf-8.vim file path=usr/share/vim/$(VIMVER)/keymap/belarusian-jcuken.vim file path=usr/share/vim/$(VIMVER)/keymap/bulgarian-bds.vim file path=usr/share/vim/$(VIMVER)/keymap/bulgarian-phonetic.vim @@ -712,7 +761,9 @@ file path=usr/share/vim/$(VIMVER)/keymap/polish-slash_utf-8.vim file path=usr/share/vim/$(VIMVER)/keymap/russian-dvorak.vim file path=usr/share/vim/$(VIMVER)/keymap/russian-jcuken.vim +file path=usr/share/vim/$(VIMVER)/keymap/russian-jcukenmac.vim file path=usr/share/vim/$(VIMVER)/keymap/russian-jcukenwin.vim +file path=usr/share/vim/$(VIMVER)/keymap/russian-jcukenwintype.vim file path=usr/share/vim/$(VIMVER)/keymap/russian-yawerty.vim file path=usr/share/vim/$(VIMVER)/keymap/serbian-latin.vim file path=usr/share/vim/$(VIMVER)/keymap/serbian-latin_utf-8.vim @@ -733,10 +784,13 @@ file path=usr/share/vim/$(VIMVER)/keymap/thaana.vim file path=usr/share/vim/$(VIMVER)/keymap/ukrainian-dvorak.vim file path=usr/share/vim/$(VIMVER)/keymap/ukrainian-jcuken.vim +file path=usr/share/vim/$(VIMVER)/keymap/vietnamese-telex_utf-8.vim file path=usr/share/vim/$(VIMVER)/keymap/vietnamese-viqr_utf-8.vim +file path=usr/share/vim/$(VIMVER)/keymap/vietnamese-vni_utf-8.vim file path=usr/share/vim/$(VIMVER)/lang/README.txt file path=usr/share/vim/$(VIMVER)/lang/af/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/ca/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/cs.cp1250/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/cs/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/de/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/en_GB/LC_MESSAGES/vim.mo @@ -747,6 +801,7 @@ file path=usr/share/vim/$(VIMVER)/lang/ga/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/it/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/ja.euc-jp/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/ja.sjis/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/ja/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/ko.UTF-8/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/ko/LC_MESSAGES/vim.mo @@ -885,19 +940,24 @@ file path=usr/share/vim/$(VIMVER)/lang/nb/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/nl/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/no/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/pl.UTF-8/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/pl.cp1250/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/pl/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/pt_BR/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/ru.cp1251/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/ru/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/sk.cp1250/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/sk/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/sv/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/uk.cp1251/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/uk/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/vi/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/zh_CN.UTF-8/LC_MESSAGES/vim.mo +file path=usr/share/vim/$(VIMVER)/lang/zh_CN.cp936/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/zh_CN/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/zh_TW.UTF-8/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/lang/zh_TW/LC_MESSAGES/vim.mo file path=usr/share/vim/$(VIMVER)/macros/README.txt -file path=usr/share/vim/$(VIMVER)/macros/dvorak file path=usr/share/vim/$(VIMVER)/macros/editexisting.vim file path=usr/share/vim/$(VIMVER)/macros/hanoi/click.me file path=usr/share/vim/$(VIMVER)/macros/hanoi/hanoi.vim @@ -907,7 +967,6 @@ file path=usr/share/vim/$(VIMVER)/macros/less.vim file path=usr/share/vim/$(VIMVER)/macros/life/click.me file path=usr/share/vim/$(VIMVER)/macros/life/life.vim -file path=usr/share/vim/$(VIMVER)/macros/matchit.txt file path=usr/share/vim/$(VIMVER)/macros/matchit.vim file path=usr/share/vim/$(VIMVER)/macros/maze/Makefile file path=usr/share/vim/$(VIMVER)/macros/maze/README.txt @@ -927,9 +986,21 @@ file path=usr/share/vim/$(VIMVER)/menu.vim file path=usr/share/vim/$(VIMVER)/mswin.vim file path=usr/share/vim/$(VIMVER)/optwin.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/dvorak/dvorak/disable.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/dvorak/dvorak/enable.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/dvorak/plugin/dvorak.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/editexisting/plugin/editexisting.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/justify/plugin/justify.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/matchit/doc/matchit.txt +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/matchit/doc/tags +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/matchit/plugin/matchit.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/shellmenu/plugin/shellmenu.vim +file path=usr/share/vim/$(VIMVER)/pack/dist/opt/swapmouse/plugin/swapmouse.vim file path=usr/share/vim/$(VIMVER)/plugin/README.txt file path=usr/share/vim/$(VIMVER)/plugin/getscriptPlugin.vim file path=usr/share/vim/$(VIMVER)/plugin/gzip.vim +file path=usr/share/vim/$(VIMVER)/plugin/logiPat.vim +file path=usr/share/vim/$(VIMVER)/plugin/manpager.vim file path=usr/share/vim/$(VIMVER)/plugin/matchparen.vim file path=usr/share/vim/$(VIMVER)/plugin/netrwPlugin.vim file path=usr/share/vim/$(VIMVER)/plugin/rrhelper.vim @@ -971,6 +1042,7 @@ file path=usr/share/vim/$(VIMVER)/print/latin1.ps file path=usr/share/vim/$(VIMVER)/print/mac-roman.ps file path=usr/share/vim/$(VIMVER)/print/prolog.ps +file path=usr/share/vim/$(VIMVER)/rgb.txt file path=usr/share/vim/$(VIMVER)/scripts.vim file path=usr/share/vim/$(VIMVER)/spell/check_locales.vim file path=usr/share/vim/$(VIMVER)/spell/cleanadd.vim @@ -1008,6 +1080,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/apachestyle.vim file path=usr/share/vim/$(VIMVER)/syntax/aptconf.vim file path=usr/share/vim/$(VIMVER)/syntax/arch.vim +file path=usr/share/vim/$(VIMVER)/syntax/arduino.vim file path=usr/share/vim/$(VIMVER)/syntax/art.vim file path=usr/share/vim/$(VIMVER)/syntax/asciidoc.vim file path=usr/share/vim/$(VIMVER)/syntax/asm.vim @@ -1023,6 +1096,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/autoit.vim file path=usr/share/vim/$(VIMVER)/syntax/automake.vim file path=usr/share/vim/$(VIMVER)/syntax/ave.vim +file path=usr/share/vim/$(VIMVER)/syntax/avra.vim file path=usr/share/vim/$(VIMVER)/syntax/awk.vim file path=usr/share/vim/$(VIMVER)/syntax/ayacc.vim file path=usr/share/vim/$(VIMVER)/syntax/b.vim @@ -1035,6 +1109,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/blank.vim file path=usr/share/vim/$(VIMVER)/syntax/bst.vim file path=usr/share/vim/$(VIMVER)/syntax/btm.vim +file path=usr/share/vim/$(VIMVER)/syntax/bzl.vim file path=usr/share/vim/$(VIMVER)/syntax/bzr.vim file path=usr/share/vim/$(VIMVER)/syntax/c.vim file path=usr/share/vim/$(VIMVER)/syntax/cabal.vim @@ -1109,6 +1184,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/docbk.vim file path=usr/share/vim/$(VIMVER)/syntax/docbksgml.vim file path=usr/share/vim/$(VIMVER)/syntax/docbkxml.vim +file path=usr/share/vim/$(VIMVER)/syntax/dockerfile.vim file path=usr/share/vim/$(VIMVER)/syntax/dosbatch.vim file path=usr/share/vim/$(VIMVER)/syntax/dosini.vim file path=usr/share/vim/$(VIMVER)/syntax/dot.vim @@ -1134,6 +1210,8 @@ file path=usr/share/vim/$(VIMVER)/syntax/esqlc.vim file path=usr/share/vim/$(VIMVER)/syntax/esterel.vim file path=usr/share/vim/$(VIMVER)/syntax/eterm.vim +file path=usr/share/vim/$(VIMVER)/syntax/euphoria3.vim +file path=usr/share/vim/$(VIMVER)/syntax/euphoria4.vim file path=usr/share/vim/$(VIMVER)/syntax/eviews.vim file path=usr/share/vim/$(VIMVER)/syntax/exim.vim file path=usr/share/vim/$(VIMVER)/syntax/expect.vim @@ -1167,6 +1245,8 @@ file path=usr/share/vim/$(VIMVER)/syntax/gkrellmrc.vim file path=usr/share/vim/$(VIMVER)/syntax/gnash.vim file path=usr/share/vim/$(VIMVER)/syntax/gnuplot.vim +file path=usr/share/vim/$(VIMVER)/syntax/go.vim +file path=usr/share/vim/$(VIMVER)/syntax/godoc.vim file path=usr/share/vim/$(VIMVER)/syntax/gp.vim file path=usr/share/vim/$(VIMVER)/syntax/gpg.vim file path=usr/share/vim/$(VIMVER)/syntax/gprof.vim @@ -1212,6 +1292,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/ishd.vim file path=usr/share/vim/$(VIMVER)/syntax/iss.vim file path=usr/share/vim/$(VIMVER)/syntax/ist.vim +file path=usr/share/vim/$(VIMVER)/syntax/j.vim file path=usr/share/vim/$(VIMVER)/syntax/jal.vim file path=usr/share/vim/$(VIMVER)/syntax/jam.vim file path=usr/share/vim/$(VIMVER)/syntax/jargon.vim @@ -1222,8 +1303,10 @@ file path=usr/share/vim/$(VIMVER)/syntax/jgraph.vim file path=usr/share/vim/$(VIMVER)/syntax/jovial.vim file path=usr/share/vim/$(VIMVER)/syntax/jproperties.vim +file path=usr/share/vim/$(VIMVER)/syntax/json.vim file path=usr/share/vim/$(VIMVER)/syntax/jsp.vim file path=usr/share/vim/$(VIMVER)/syntax/kconfig.vim +file path=usr/share/vim/$(VIMVER)/syntax/kivy.vim file path=usr/share/vim/$(VIMVER)/syntax/kix.vim file path=usr/share/vim/$(VIMVER)/syntax/kscript.vim file path=usr/share/vim/$(VIMVER)/syntax/kwt.vim @@ -1232,6 +1315,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/ld.vim file path=usr/share/vim/$(VIMVER)/syntax/ldapconf.vim file path=usr/share/vim/$(VIMVER)/syntax/ldif.vim +file path=usr/share/vim/$(VIMVER)/syntax/less.vim file path=usr/share/vim/$(VIMVER)/syntax/lex.vim file path=usr/share/vim/$(VIMVER)/syntax/lftp.vim file path=usr/share/vim/$(VIMVER)/syntax/lhaskell.vim @@ -1277,6 +1361,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/mgl.vim file path=usr/share/vim/$(VIMVER)/syntax/mgp.vim file path=usr/share/vim/$(VIMVER)/syntax/mib.vim +file path=usr/share/vim/$(VIMVER)/syntax/mix.vim file path=usr/share/vim/$(VIMVER)/syntax/mma.vim file path=usr/share/vim/$(VIMVER)/syntax/mmix.vim file path=usr/share/vim/$(VIMVER)/syntax/mmp.vim @@ -1381,12 +1466,14 @@ file path=usr/share/vim/$(VIMVER)/syntax/rexx.vim file path=usr/share/vim/$(VIMVER)/syntax/rhelp.vim file path=usr/share/vim/$(VIMVER)/syntax/rib.vim +file path=usr/share/vim/$(VIMVER)/syntax/rmd.vim file path=usr/share/vim/$(VIMVER)/syntax/rnc.vim file path=usr/share/vim/$(VIMVER)/syntax/rng.vim file path=usr/share/vim/$(VIMVER)/syntax/rnoweb.vim file path=usr/share/vim/$(VIMVER)/syntax/robots.vim file path=usr/share/vim/$(VIMVER)/syntax/rpcgen.vim file path=usr/share/vim/$(VIMVER)/syntax/rpl.vim +file path=usr/share/vim/$(VIMVER)/syntax/rrst.vim file path=usr/share/vim/$(VIMVER)/syntax/rst.vim file path=usr/share/vim/$(VIMVER)/syntax/rtf.vim file path=usr/share/vim/$(VIMVER)/syntax/ruby.vim @@ -1394,6 +1481,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/sas.vim file path=usr/share/vim/$(VIMVER)/syntax/sass.vim file path=usr/share/vim/$(VIMVER)/syntax/sather.vim +file path=usr/share/vim/$(VIMVER)/syntax/scala.vim file path=usr/share/vim/$(VIMVER)/syntax/scheme.vim file path=usr/share/vim/$(VIMVER)/syntax/scilab.vim file path=usr/share/vim/$(VIMVER)/syntax/screen.vim @@ -1451,6 +1539,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/sqloracle.vim file path=usr/share/vim/$(VIMVER)/syntax/sqr.vim file path=usr/share/vim/$(VIMVER)/syntax/squid.vim +file path=usr/share/vim/$(VIMVER)/syntax/srec.vim file path=usr/share/vim/$(VIMVER)/syntax/sshconfig.vim file path=usr/share/vim/$(VIMVER)/syntax/sshdconfig.vim file path=usr/share/vim/$(VIMVER)/syntax/st.vim @@ -1464,6 +1553,8 @@ file path=usr/share/vim/$(VIMVER)/syntax/synload.vim file path=usr/share/vim/$(VIMVER)/syntax/syntax.vim file path=usr/share/vim/$(VIMVER)/syntax/sysctl.vim +file path=usr/share/vim/$(VIMVER)/syntax/systemd.vim +file path=usr/share/vim/$(VIMVER)/syntax/systemverilog.vim file path=usr/share/vim/$(VIMVER)/syntax/tads.vim file path=usr/share/vim/$(VIMVER)/syntax/tags.vim file path=usr/share/vim/$(VIMVER)/syntax/tak.vim @@ -1475,6 +1566,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/tasm.vim file path=usr/share/vim/$(VIMVER)/syntax/tcl.vim file path=usr/share/vim/$(VIMVER)/syntax/tcsh.vim +file path=usr/share/vim/$(VIMVER)/syntax/teraterm.vim file path=usr/share/vim/$(VIMVER)/syntax/terminfo.vim file path=usr/share/vim/$(VIMVER)/syntax/tex.vim file path=usr/share/vim/$(VIMVER)/syntax/texinfo.vim @@ -1504,6 +1596,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/upstreamdat.vim file path=usr/share/vim/$(VIMVER)/syntax/upstreaminstalllog.vim file path=usr/share/vim/$(VIMVER)/syntax/upstreamlog.vim +file path=usr/share/vim/$(VIMVER)/syntax/upstreamrpt.vim file path=usr/share/vim/$(VIMVER)/syntax/usserverlog.vim file path=usr/share/vim/$(VIMVER)/syntax/usw2kagtlog.vim file path=usr/share/vim/$(VIMVER)/syntax/valgrind.vim @@ -1519,6 +1612,7 @@ file path=usr/share/vim/$(VIMVER)/syntax/vmasm.vim file path=usr/share/vim/$(VIMVER)/syntax/voscm.vim file path=usr/share/vim/$(VIMVER)/syntax/vrml.vim +file path=usr/share/vim/$(VIMVER)/syntax/vroom.vim file path=usr/share/vim/$(VIMVER)/syntax/vsejcl.vim file path=usr/share/vim/$(VIMVER)/syntax/wdiff.vim file path=usr/share/vim/$(VIMVER)/syntax/web.vim @@ -1556,6 +1650,7 @@ file path=usr/share/vim/$(VIMVER)/tools/ccfilter.1 file path=usr/share/vim/$(VIMVER)/tools/ccfilter.c file path=usr/share/vim/$(VIMVER)/tools/ccfilter_README.txt +file path=usr/share/vim/$(VIMVER)/tools/demoserver.py file path=usr/share/vim/$(VIMVER)/tools/efm_filter.pl file path=usr/share/vim/$(VIMVER)/tools/efm_filter.txt file path=usr/share/vim/$(VIMVER)/tools/efm_perl.pl @@ -1578,6 +1673,7 @@ file path=usr/share/vim/$(VIMVER)/tutor/tutor file path=usr/share/vim/$(VIMVER)/tutor/tutor.bar file path=usr/share/vim/$(VIMVER)/tutor/tutor.bar.utf-8 +file path=usr/share/vim/$(VIMVER)/tutor/tutor.bg.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.ca file path=usr/share/vim/$(VIMVER)/tutor/tutor.ca.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.cs @@ -1624,10 +1720,13 @@ file path=usr/share/vim/$(VIMVER)/tutor/tutor.sk file path=usr/share/vim/$(VIMVER)/tutor/tutor.sk.cp1250 file path=usr/share/vim/$(VIMVER)/tutor/tutor.sk.utf-8 +file path=usr/share/vim/$(VIMVER)/tutor/tutor.sr.cp1250 +file path=usr/share/vim/$(VIMVER)/tutor/tutor.sr.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.sv file path=usr/share/vim/$(VIMVER)/tutor/tutor.sv.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.tr.iso9 file path=usr/share/vim/$(VIMVER)/tutor/tutor.tr.utf-8 +file path=usr/share/vim/$(VIMVER)/tutor/tutor.uk.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.vi.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.vim @@ -1637,6 +1736,9 @@ file path=usr/share/vim/$(VIMVER)/tutor/tutor.zh_cn.utf-8 file path=usr/share/vim/$(VIMVER)/tutor/tutor.zh_tw.utf-8 file path=usr/share/vim/$(VIMVER)/vimrc_example.vim +# +license xxd.license license="MIT/X11 (xxd)" license license license="VIM License" +# depend type=optional fmri=editor/gvim@$(IPS_COMPONENT_VERSION) depend type=require fmri=editor/vim/vim-core@$(IPS_COMPONENT_VERSION) diff -r c1d43e41adeb -r e8d705cba87d make-rules/ips.mk --- a/make-rules/ips.mk Tue Oct 04 15:53:56 2016 -0700 +++ b/make-rules/ips.mk Mon Sep 26 21:06:11 2016 -0700 @@ -104,6 +104,7 @@ PKG_VARS += COMPONENT_VERSION IPS_COMPONENT_VERSION HUMAN_VERSION PKG_VARS += COMPONENT_ARCHIVE_URL COMPONENT_PROJECT_URL COMPONENT_NAME PKG_VARS += HG_REPO HG_REV HG_URL +PKG_VARS += GIT_COMMIT_ID GIT_REPO GIT_TAG PKG_VARS += MACH MACH32 MACH64 PKG_VARS += PUBLISHER PUBLISHER_LOCALIZABLE PKG_VARS += SOLARIS_11_ONLY SOLARIS_12_ONLY